From d46203c114adb4f72a59305fa633ca576bfb9524 Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Sat, 7 Nov 2020 11:30:45 +0100 Subject: [PATCH 001/898] backend that supports asgi and status update sockets with channels --- Pipfile | 2 + Pipfile.lock | 582 +++++++++++++++++++++++++---- src/documents/consumer.py | 44 ++- src/documents/parsers.py | 3 +- src/paperless/asgi.py | 37 ++ src/paperless/settings.py | 12 + src/paperless_tesseract/parsers.py | 25 +- 7 files changed, 613 insertions(+), 92 deletions(-) create mode 100644 src/paperless/asgi.py diff --git a/Pipfile b/Pipfile index e8f862578..d526ae252 100644 --- a/Pipfile +++ b/Pipfile @@ -26,6 +26,8 @@ fuzzywuzzy = "*" python-Levenshtein = "*" django-extensions = "" watchdog = "*" +channels = "~=3.0" +channels-redis = "*" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 8b3bf705a..642e38214 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "2c1558fe7df0aee1ee20b095c2102f802470bf4a4ae09a7749ac487f8bfab8b6" + "sha256": "192d7419b844e6bb81fed793e7766b2ba15f2a016af1a33fc73cf09e12de5fb7" }, "pipfile-spec": 6, "requires": {}, @@ -14,13 +14,151 @@ ] }, "default": { + "aioredis": { + "hashes": [ + "sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a", + "sha256:b61808d7e97b7cd5a92ed574937a079c9387fdadd22bfbfa7ad2fd319ecc26e3" + ], + "version": "==1.3.1" + }, "asgiref": { "hashes": [ - "sha256:7e51911ee147dd685c3c8b805c0ad0cb58d360987b56953878f8c06d2d1c6f1a", - "sha256:9fc6fb5d39b8af147ba40765234fa822b39818b12cc80b35ad9b0cef3a476aed" + "sha256:a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", + "sha256:cd88907ecaec59d78e4ac00ea665b03e571cb37e3a0e37b3702af1a9e86c365a" ], "markers": "python_version >= '3.5'", - "version": "==3.2.10" + "version": "==3.3.0" + }, + "async-timeout": { + "hashes": [ + "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f", + "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==3.0.1" + }, + "attrs": { + "hashes": [ + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.3.0" + }, + "autobahn": { + "hashes": [ + "sha256:24ce276d313e84d68241c3aef30d484f352b90a40168981b3640312c821df77b", + "sha256:86bbce30cdd407137c57670993a8f9bfdfe3f8e994b889181d85e844d5aa8dfb" + ], + "markers": "python_version >= '3.5'", + "version": "==20.7.1" + }, + "automat": { + "hashes": [ + "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", + "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111" + ], + "version": "==20.2.0" + }, + "cffi": { + "hashes": [ + "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d", + "sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b", + "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4", + "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f", + "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3", + "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579", + "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537", + "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e", + "sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05", + "sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171", + "sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca", + "sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522", + "sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c", + "sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc", + "sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d", + "sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808", + "sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828", + "sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869", + "sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d", + "sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9", + "sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0", + "sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc", + "sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15", + "sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c", + "sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a", + "sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3", + "sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1", + "sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768", + "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d", + "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b", + "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e", + "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d", + "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730", + "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394", + "sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1", + "sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591" + ], + "version": "==1.14.3" + }, + "channels": { + "hashes": [ + "sha256:5cdd9c6b9ee663cdf1bbb00de7cdab885a3c418f9d32a29f04b09498828020f6", + "sha256:b02e150b48704ec3607d4168402ac5c26138dd183fcdb7f2aeb965e6e19fd558" + ], + "index": "pypi", + "version": "==3.0.1" + }, + "channels-redis": { + "hashes": [ + "sha256:18d63f6462a58011740dc8eeb57ea4b31ec220eb551cb71b27de9c6779a549de", + "sha256:2fb31a63b05373f6402da2e6a91a22b9e66eb8b56626c6bfc93e156c734c5ae6" + ], + "index": "pypi", + "version": "==3.2.0" + }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "version": "==15.1.0" + }, + "cryptography": { + "hashes": [ + "sha256:07ca431b788249af92764e3be9a488aa1d39a0bc3be313d826bbec690417e538", + "sha256:13b88a0bd044b4eae1ef40e265d006e34dbcde0c2f1e15eb9896501b2d8f6c6f", + "sha256:32434673d8505b42c0de4de86da8c1620651abd24afe91ae0335597683ed1b77", + "sha256:3cd75a683b15576cfc822c7c5742b3276e50b21a06672dc3a800a2d5da4ecd1b", + "sha256:4e7268a0ca14536fecfdf2b00297d4e407da904718658c1ff1961c713f90fd33", + "sha256:545a8550782dda68f8cdc75a6e3bf252017aa8f75f19f5a9ca940772fc0cb56e", + "sha256:55d0b896631412b6f0c7de56e12eb3e261ac347fbaa5d5e705291a9016e5f8cb", + "sha256:5849d59358547bf789ee7e0d7a9036b2d29e9a4ddf1ce5e06bb45634f995c53e", + "sha256:6dc59630ecce8c1f558277ceb212c751d6730bd12c80ea96b4ac65637c4f55e7", + "sha256:7117319b44ed1842c617d0a452383a5a052ec6aa726dfbaffa8b94c910444297", + "sha256:75e8e6684cf0034f6bf2a97095cb95f81537b12b36a8fedf06e73050bb171c2d", + "sha256:7b8d9d8d3a9bd240f453342981f765346c87ade811519f98664519696f8e6ab7", + "sha256:a035a10686532b0587d58a606004aa20ad895c60c4d029afa245802347fab57b", + "sha256:a4e27ed0b2504195f855b52052eadcc9795c59909c9d84314c5408687f933fc7", + "sha256:a733671100cd26d816eed39507e585c156e4498293a907029969234e5e634bc4", + "sha256:a75f306a16d9f9afebfbedc41c8c2351d8e61e818ba6b4c40815e2b5740bb6b8", + "sha256:bd717aa029217b8ef94a7d21632a3bb5a4e7218a4513d2521c2a2fd63011e98b", + "sha256:d25cecbac20713a7c3bc544372d42d8eafa89799f492a43b79e1dfd650484851", + "sha256:d26a2557d8f9122f9bf445fc7034242f4375bd4e95ecda007667540270965b13", + "sha256:d3545829ab42a66b84a9aaabf216a4dce7f16dbc76eb69be5c302ed6b8f4a29b", + "sha256:d3d5e10be0cf2a12214ddee45c6bd203dab435e3d83b4560c03066eda600bfe3", + "sha256:efe15aca4f64f3a7ea0c09c87826490e50ed166ce67368a68f315ea0807a20df" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.2.1" + }, + "daphne": { + "hashes": [ + "sha256:60856f7efa0b1e1b969efa074e8698bd09de4713ecc06e6a4d19d04c66c4a3bd", + "sha256:b43e70d74ff832a634ff6c92badd208824e4530e08b340116517e5aad0aca774" + ], + "markers": "python_version >= '3.6'", + "version": "==3.0.0" }, "dateparser": { "hashes": [ @@ -32,11 +170,11 @@ }, "django": { "hashes": [ - "sha256:a2127ad0150ec6966655bedf15dbbff9697cc86d61653db2da1afa506c0b04cc", - "sha256:c93c28ccf1d094cbd00d860e83128a39e45d2c571d3b54361713aaaf9a94cac4" + "sha256:14a4b7cd77297fba516fc0d92444cc2e2e388aa9de32d7a68d4a83d58f5a4927", + "sha256:14b87775ffedab2ef6299b73343d1b4b41e5d4e2aa58c6581f114dbec01e3f8f" ], "index": "pypi", - "version": "==3.1.2" + "version": "==3.1.3" }, "django-cors-headers": { "hashes": [ @@ -65,11 +203,10 @@ }, "djangorestframework": { "hashes": [ - "sha256:5c5071fcbad6dce16f566d492015c829ddb0df42965d488b878594aabc3aed21", - "sha256:d54452aedebb4b650254ca092f9f4f5df947cb1de6ab245d817b08b4f4156249" + "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7" ], "index": "pypi", - "version": "==3.12.1" + "version": "==3.12.2" }, "filemagic": { "hashes": [ @@ -94,6 +231,80 @@ "index": "pypi", "version": "==20.0.4" }, + "hiredis": { + "hashes": [ + "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", + "sha256:0a909bf501459062aa1552be1461456518f367379fdc9fdb1f2ca5e4a1fdd7c0", + "sha256:18402d9e54fb278cb9a8c638df6f1550aca36a009d47ecf5aa263a38600f35b0", + "sha256:1e4cbbc3858ec7e680006e5ca590d89a5e083235988f26a004acf7244389ac01", + "sha256:23344e3c2177baf6975fbfa361ed92eb7d36d08f454636e5054b3faa7c2aff8a", + "sha256:289b31885b4996ce04cadfd5fc03d034dce8e2a8234479f7c9e23b9e245db06b", + "sha256:2c1c570ae7bf1bab304f29427e2475fe1856814312c4a1cf1cd0ee133f07a3c6", + "sha256:2c227c0ed371771ffda256034427320870e8ea2e4fd0c0a618c766e7c49aad73", + "sha256:3bb9b63d319402cead8bbd9dd55dca3b667d2997e9a0d8a1f9b6cc274db4baee", + "sha256:3ef2183de67b59930d2db8b8e8d4d58e00a50fcc5e92f4f678f6eed7a1c72d55", + "sha256:43b8ed3dbfd9171e44c554cb4acf4ee4505caa84c5e341858b50ea27dd2b6e12", + "sha256:47bcf3c5e6c1e87ceb86cdda2ee983fa0fe56a999e6185099b3c93a223f2fa9b", + "sha256:5263db1e2e1e8ae30500cdd75a979ff99dcc184201e6b4b820d0de74834d2323", + "sha256:5b1451727f02e7acbdf6aae4e06d75f66ee82966ff9114550381c3271a90f56c", + "sha256:6996883a8a6ff9117cbb3d6f5b0dcbbae6fb9e31e1a3e4e2f95e0214d9a1c655", + "sha256:6c96f64a54f030366657a54bb90b3093afc9c16c8e0dfa29fc0d6dbe169103a5", + "sha256:7332d5c3e35154cd234fd79573736ddcf7a0ade7a986db35b6196b9171493e75", + "sha256:7885b6f32c4a898e825bb7f56f36a02781ac4a951c63e4169f0afcf9c8c30dfb", + "sha256:7b0f63f10a166583ab744a58baad04e0f52cfea1ac27bfa1b0c21a48d1003c23", + "sha256:819f95d4eba3f9e484dd115ab7ab72845cf766b84286a00d4ecf76d33f1edca1", + "sha256:8968eeaa4d37a38f8ca1f9dbe53526b69628edc9c42229a5b2f56d98bb828c1f", + "sha256:89ebf69cb19a33d625db72d2ac589d26e936b8f7628531269accf4a3196e7872", + "sha256:8daecd778c1da45b8bd54fd41ffcd471a86beed3d8e57a43acf7a8d63bba4058", + "sha256:955ba8ea73cf3ed8bd2f963b4cb9f8f0dcb27becd2f4b3dd536fd24c45533454", + "sha256:964f18a59f5a64c0170f684c417f4fe3e695a536612e13074c4dd5d1c6d7c882", + "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", + "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", + "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", + "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", + "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", + "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", + "sha256:abfb15a6a7822f0fae681785cb38860e7a2cb1616a708d53df557b3d76c5bfd4", + "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", + "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", + "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", + "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", + "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", + "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", + "sha256:cdfd501c7ac5b198c15df800a3a34c38345f5182e5f80770caf362bccca65628", + "sha256:d2c0caffa47606d6d7c8af94ba42547bd2a441f06c74fd90a1ffe328524a6c64", + "sha256:dcb2db95e629962db5a355047fb8aefb012df6c8ae608930d391619dbd96fd86", + "sha256:e0eeb9c112fec2031927a1745788a181d0eecbacbed941fc5c4f7bc3f7b273bf", + "sha256:e154891263306200260d7f3051982774d7b9ef35af3509d5adbbe539afd2610c", + "sha256:e2e023a42dcbab8ed31f97c2bcdb980b7fbe0ada34037d87ba9d799664b58ded", + "sha256:e64be68255234bb489a574c4f2f8df7029c98c81ec4d160d6cd836e7f0679390", + "sha256:e82d6b930e02e80e5109b678c663a9ed210680ded81c1abaf54635d88d1da298" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.1.0" + }, + "hyperlink": { + "hashes": [ + "sha256:47fcc7cd339c6cb2444463ec3277bdcfe142c8b1daf2160bdd52248deec815af", + "sha256:c528d405766f15a2c536230de7e160b65a08e20264d8891b3eb03307b0df3c63" + ], + "version": "==20.0.1" + }, + "idna": { + "hashes": [ + "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", + "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.10" + }, + "incremental": { + "hashes": [ + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + ], + "version": "==17.5.0" + }, "joblib": { "hashes": [ "sha256:698c311779f347cf6b7e6b8a39bb682277b8ee4aba8cf9507bc0cf4cd4737b72", @@ -110,45 +321,68 @@ "index": "pypi", "version": "==1.0.8" }, + "msgpack": { + "hashes": [ + "sha256:002a0d813e1f7b60da599bdf969e632074f9eec1b96cbed8fb0973a63160a408", + "sha256:25b3bc3190f3d9d965b818123b7752c5dfb953f0d774b454fd206c18fe384fb8", + "sha256:271b489499a43af001a2e42f42d876bb98ccaa7e20512ff37ca78c8e12e68f84", + "sha256:39c54fdebf5fa4dda733369012c59e7d085ebdfe35b6cf648f09d16708f1be5d", + "sha256:4233b7f86c1208190c78a525cd3828ca1623359ef48f78a6fea4b91bb995775a", + "sha256:5bea44181fc8e18eed1d0cd76e355073f00ce232ff9653a0ae88cb7d9e643322", + "sha256:5dba6d074fac9b24f29aaf1d2d032306c27f04187651511257e7831733293ec2", + "sha256:7a22c965588baeb07242cb561b63f309db27a07382825fc98aecaf0827c1538e", + "sha256:908944e3f038bca67fcfedb7845c4a257c7749bf9818632586b53bcf06ba4b97", + "sha256:9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0", + "sha256:aa5c057eab4f40ec47ea6f5a9825846be2ff6bf34102c560bad5cad5a677c5be", + "sha256:b3758dfd3423e358bbb18a7cccd1c74228dffa7a697e5be6cb9535de625c0dbf", + "sha256:c901e8058dd6653307906c5f157f26ed09eb94a850dddd989621098d347926ab", + "sha256:cec8bf10981ed70998d98431cd814db0ecf3384e6b113366e7f36af71a0fca08", + "sha256:db685187a415f51d6b937257474ca72199f393dad89534ebbdd7d7a3b000080e", + "sha256:e35b051077fc2f3ce12e7c6a34cf309680c63a842db3a0616ea6ed25ad20d272", + "sha256:e7bbdd8e2b277b77782f3ce34734b0dfde6cbe94ddb74de8d733d603c7f9e2b1", + "sha256:ea41c9219c597f1d2bf6b374d951d310d58684b5de9dc4bd2976db9e1e22c140" + ], + "version": "==1.0.0" + }, "numpy": { "hashes": [ - "sha256:0ee77786eebbfa37f2141fd106b549d37c89207a0d01d8852fde1c82e9bfc0e7", - "sha256:199bebc296bd8a5fc31c16f256ac873dd4d5b4928dfd50e6c4995570fc71a8f3", - "sha256:1a307bdd3dd444b1d0daa356b5f4c7de2e24d63bdc33ea13ff718b8ec4c6a268", - "sha256:1ea7e859f16e72ab81ef20aae69216cfea870676347510da9244805ff9670170", - "sha256:271139653e8b7a046d11a78c0d33bafbddd5c443a5b9119618d0652a4eb3a09f", - "sha256:35bf5316af8dc7c7db1ad45bec603e5fb28671beb98ebd1d65e8059efcfd3b72", - "sha256:463792a249a81b9eb2b63676347f996d3f0082c2666fd0604f4180d2e5445996", - "sha256:50d3513469acf5b2c0406e822d3f314d7ac5788c2b438c24e5dd54d5a81ef522", - "sha256:50f68ebc439821b826823a8da6caa79cd080dee2a6d5ab9f1163465a060495ed", - "sha256:51e8d2ae7c7e985c7bebf218e56f72fa93c900ad0c8a7d9fbbbf362f45710f69", - "sha256:522053b731e11329dd52d258ddf7de5288cae7418b55e4b7d32f0b7e31787e9d", - "sha256:5ea4401ada0d3988c263df85feb33818dc995abc85b8125f6ccb762009e7bc68", - "sha256:604d2e5a31482a3ad2c88206efd43d6fcf666ada1f3188fd779b4917e49b7a98", - "sha256:6ff88bcf1872b79002569c63fe26cd2cda614e573c553c4d5b814fb5eb3d2822", - "sha256:7197ee0a25629ed782c7bd01871ee40702ffeef35bc48004bc2fdcc71e29ba9d", - "sha256:741d95eb2b505bb7a99fbf4be05fa69f466e240c2b4f2d3ddead4f1b5f82a5a5", - "sha256:83af653bb92d1e248ccf5fdb05ccc934c14b936bcfe9b917dc180d3f00250ac6", - "sha256:8802d23e4895e0c65e418abe67cdf518aa5cbb976d97f42fd591f921d6dffad0", - "sha256:8edc4d687a74d0a5f8b9b26532e860f4f85f56c400b3a98899fc44acb5e27add", - "sha256:942d2cdcb362739908c26ce8dd88db6e139d3fa829dd7452dd9ff02cba6b58b2", - "sha256:9a0669787ba8c9d3bb5de5d9429208882fb47764aa79123af25c5edc4f5966b9", - "sha256:9d08d84bb4128abb9fbd9f073e5c69f70e5dab991a9c42e5b4081ea5b01b5db0", - "sha256:9f7f56b5e85b08774939622b7d45a5d00ff511466522c44fc0756ac7692c00f2", - "sha256:a2daea1cba83210c620e359de2861316f49cc7aea8e9a6979d6cb2ddab6dda8c", - "sha256:b9074d062d30c2779d8af587924f178a539edde5285d961d2dfbecbac9c4c931", - "sha256:c4aa79993f5d856765819a3651117520e41ac3f89c3fc1cb6dee11aa562df6da", - "sha256:d78294f1c20f366cde8a75167f822538a7252b6e8b9d6dbfb3bdab34e7c1929e", - "sha256:dfdc8b53aa9838b9d44ed785431ca47aa3efaa51d0d5dd9c412ab5247151a7c4", - "sha256:dffed17848e8b968d8d3692604e61881aa6ef1f8074c99e81647ac84f6038535", - "sha256:e080087148fd70469aade2abfeadee194357defd759f9b59b349c6192aba994c", - "sha256:e983cbabe10a8989333684c98fdc5dd2f28b236216981e0c26ed359aaa676772", - "sha256:ea6171d2d8d648dee717457d0f75db49ad8c2f13100680e284d7becf3dc311a6", - "sha256:eefc13863bf01583a85e8c1121a901cc7cb8f059b960c4eba30901e2e6aba95f", - "sha256:efd656893171bbf1331beca4ec9f2e74358fc732a2084f664fd149cc4b3441d2" + "sha256:08308c38e44cc926bdfce99498b21eec1f848d24c302519e64203a8da99a97db", + "sha256:09c12096d843b90eafd01ea1b3307e78ddd47a55855ad402b157b6c4862197ce", + "sha256:13d166f77d6dc02c0a73c1101dd87fdf01339febec1030bd810dcd53fff3b0f1", + "sha256:141ec3a3300ab89c7f2b0775289954d193cc8edb621ea05f99db9cb181530512", + "sha256:16c1b388cc31a9baa06d91a19366fb99ddbe1c7b205293ed072211ee5bac1ed2", + "sha256:18bed2bcb39e3f758296584337966e68d2d5ba6aab7e038688ad53c8f889f757", + "sha256:1aeef46a13e51931c0b1cf8ae1168b4a55ecd282e6688fdb0a948cc5a1d5afb9", + "sha256:27d3f3b9e3406579a8af3a9f262f5339005dd25e0ecf3cf1559ff8a49ed5cbf2", + "sha256:2a2740aa9733d2e5b2dfb33639d98a64c3b0f24765fed86b0fd2aec07f6a0a08", + "sha256:4377e10b874e653fe96985c05feed2225c912e328c8a26541f7fc600fb9c637b", + "sha256:448ebb1b3bf64c0267d6b09a7cba26b5ae61b6d2dbabff7c91b660c7eccf2bdb", + "sha256:50e86c076611212ca62e5a59f518edafe0c0730f7d9195fec718da1a5c2bb1fc", + "sha256:5734bdc0342aba9dfc6f04920988140fb41234db42381cf7ccba64169f9fe7ac", + "sha256:64324f64f90a9e4ef732be0928be853eee378fd6a01be21a0a8469c4f2682c83", + "sha256:6ae6c680f3ebf1cf7ad1d7748868b39d9f900836df774c453c11c5440bc15b36", + "sha256:6d7593a705d662be5bfe24111af14763016765f43cb6923ed86223f965f52387", + "sha256:8cac8790a6b1ddf88640a9267ee67b1aee7a57dfa2d2dd33999d080bc8ee3a0f", + "sha256:8ece138c3a16db8c1ad38f52eb32be6086cc72f403150a79336eb2045723a1ad", + "sha256:9eeb7d1d04b117ac0d38719915ae169aa6b61fca227b0b7d198d43728f0c879c", + "sha256:a09f98011236a419ee3f49cedc9ef27d7a1651df07810ae430a6b06576e0b414", + "sha256:a5d897c14513590a85774180be713f692df6fa8ecf6483e561a6d47309566f37", + "sha256:ad6f2ff5b1989a4899bf89800a671d71b1612e5ff40866d1f4d8bcf48d4e5764", + "sha256:c42c4b73121caf0ed6cd795512c9c09c52a7287b04d105d112068c1736d7c753", + "sha256:cb1017eec5257e9ac6209ac172058c430e834d5d2bc21961dceeb79d111e5909", + "sha256:d6c7bb82883680e168b55b49c70af29b84b84abb161cbac2800e8fcb6f2109b6", + "sha256:e452dc66e08a4ce642a961f134814258a082832c78c90351b75c41ad16f79f63", + "sha256:e5b6ed0f0b42317050c88022349d994fe72bfe35f5908617512cd8c8ef9da2a9", + "sha256:e9b30d4bd69498fc0c3fe9db5f62fffbb06b8eb9321f92cc970f2969be5e3949", + "sha256:ec149b90019852266fec2341ce1db513b843e496d5a8e8cdb5ced1923a92faab", + "sha256:edb01671b3caae1ca00881686003d16c2209e07b7ef8b7639f1867852b948f7c", + "sha256:f0d3929fe88ee1c155129ecd82f981b8856c5d97bcb0d5f23e9b4242e79d1de3", + "sha256:f29454410db6ef8126c83bd3c968d143304633d45dc57b51252afbd79d700893", + "sha256:fe45becb4c2f72a0907c1d0246ea6449fe7a9e2293bb0e11c4e9a32bb0930a15", + "sha256:fedbd128668ead37f33917820b704784aff695e0019309ad446a6d0b065b57e4" ], "markers": "python_version >= '3.6'", - "version": "==1.19.3" + "version": "==1.19.4" }, "pathtools": { "hashes": [ @@ -202,9 +436,11 @@ "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c", "sha256:0e4dc3d5996760104746e6cfcdb519d9d2cd27c738296525d5867ea695774e67", "sha256:11b9c0ebce097180129e422379b824ae21c8f2a6596b159c7659e2e5a00e1aa0", + "sha256:15978a1fbd225583dd8cdaf37e67ccc278b5abecb4caf6b2d6b8e2b948e953f6", "sha256:1fabed9ea2acc4efe4671b92c669a213db744d2af8a9fc5d69a8e9bc14b7a9db", "sha256:2dac98e85565d5688e8ab7bdea5446674a83a3945a8f416ad0110018d1501b94", "sha256:42ec1035841b389e8cc3692277a0bd81cdfe0b65d575a2c8862cec7a80e62e52", + "sha256:6422f2ff0919fd720195f64ffd8f924c1395d30f9a495f31e2392c2efafb5056", "sha256:6a32f3a4cb2f6e1a0b15215f448e8ce2da192fd4ff35084d80d5e39da683e79b", "sha256:7312e931b90fe14f925729cde58022f5d034241918a5c4f9797cac62f6b3a9dd", "sha256:7d92a09b788cbb1aec325af5fcba9fed7203897bbd9269d5691bb1e3bce29550", @@ -236,6 +472,58 @@ "index": "pypi", "version": "==2.8.6" }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, + "pycparser": { + "hashes": [ + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.20" + }, + "pyhamcrest": { + "hashes": [ + "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316", + "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29" + ], + "markers": "python_version >= '3.5'", + "version": "==2.0.2" + }, "pyocr": { "hashes": [ "sha256:fa15adc7e1cf0d345a2990495fe125a947c6e09a60ddba0256a1c14b2e603179" @@ -243,6 +531,13 @@ "index": "pypi", "version": "==0.7.2" }, + "pyopenssl": { + "hashes": [ + "sha256:621880965a720b8ece2f1b2f54ea2071966ab00e2970ad2ce11d596102063504", + "sha256:9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507" + ], + "version": "==19.1.0" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -276,10 +571,10 @@ }, "pytz": { "hashes": [ - "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", - "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048" + "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268", + "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd" ], - "version": "==2020.1" + "version": "==2020.4" }, "regex": { "hashes": [ @@ -287,26 +582,42 @@ "sha256:06b52815d4ad38d6524666e0d50fe9173533c9cc145a5779b89733284e6f688f", "sha256:11116d424734fe356d8777f89d625f0df783251ada95d6261b4c36ad27a394bb", "sha256:119e0355dbdd4cf593b17f2fc5dbd4aec2b8899d0057e4957ba92f941f704bf5", + "sha256:127a9e0c0d91af572fbb9e56d00a504dbd4c65e574ddda3d45b55722462210de", "sha256:1ec66700a10e3c75f1f92cbde36cca0d3aaee4c73dfa26699495a3a30b09093c", + "sha256:227a8d2e5282c2b8346e7f68aa759e0331a0b4a890b55a5cfbb28bd0261b84c0", + "sha256:2564def9ce0710d510b1fc7e5178ce2d20f75571f788b5197b3c8134c366f50c", + "sha256:297116e79074ec2a2f885d22db00ce6e88b15f75162c5e8b38f66ea734e73c64", "sha256:2dc522e25e57e88b4980d2bdd334825dbf6fa55f28a922fc3bfa60cc09e5ef53", "sha256:3a5f08039eee9ea195a89e180c5762bfb55258bfb9abb61a20d3abee3b37fd12", + "sha256:3dfca201fa6b326239e1bccb00b915e058707028809b8ecc0cf6819ad233a740", "sha256:49461446b783945597c4076aea3f49aee4b4ce922bd241e4fcf62a3e7c61794c", "sha256:4afa350f162551cf402bfa3cd8302165c8e03e689c897d185f16a167328cc6dd", "sha256:4b5a9bcb56cc146c3932c648603b24514447eafa6ce9295234767bf92f69b504", + "sha256:52e83a5f28acd621ba8e71c2b816f6541af7144b69cc5859d17da76c436a5427", "sha256:625116aca6c4b57c56ea3d70369cacc4d62fead4930f8329d242e4fe7a58ce4b", "sha256:654c1635f2313d0843028487db2191530bca45af61ca85d0b16555c399625b0e", "sha256:8092a5a06ad9a7a247f2a76ace121183dc4e1a84c259cf9c2ce3bbb69fac3582", "sha256:832339223b9ce56b7b15168e691ae654d345ac1635eeb367ade9ecfe0e66bee0", "sha256:8ca9dca965bd86ea3631b975d63b0693566d3cc347e55786d5514988b6f5b84c", + "sha256:96f99219dddb33e235a37283306834700b63170d7bb2a1ee17e41c6d589c8eb9", + "sha256:9b6305295b6591e45f069d3553c54d50cc47629eb5c218aac99e0f7fafbf90a1", "sha256:a62162be05edf64f819925ea88d09d18b09bebf20971b363ce0c24e8b4aa14c0", + "sha256:aacc8623ffe7999a97935eeabbd24b1ae701d08ea8f874a6ff050e93c3e658cf", + "sha256:b45bab9f224de276b7bc916f6306b86283f6aa8afe7ed4133423efb42015a898", "sha256:b88fa3b8a3469f22b4f13d045d9bd3eda797aa4e406fde0a2644bc92bbdd4bdd", + "sha256:b8a686a6c98872007aa41fdbb2e86dc03b287d951ff4a7f1da77fb7f14113e4d", + "sha256:bd904c0dec29bbd0769887a816657491721d5f545c29e30fd9d7a1a275dc80ab", + "sha256:bf4f896c42c63d1f22039ad57de2644c72587756c0cfb3cc3b7530cfe228277f", "sha256:c13d311a4c4a8d671f5860317eb5f09591fbe8259676b86a85769423b544451e", "sha256:c2c6c56ee97485a127555c9595c069201b5161de9d05495fbe2132b5ac104786", + "sha256:c32c91a0f1ac779cbd73e62430de3d3502bbc45ffe5bb6c376015acfa848144b", "sha256:c3466a84fce42c2016113101018a9981804097bacbab029c2d5b4fcb224b89de", + "sha256:c454ad88e56e80e44f824ef8366bb7e4c3def12999151fd5c0ea76a18fe9aa3e", "sha256:c8a2b7ccff330ae4c460aff36626f911f918555660cc28163417cb84ffb25789", "sha256:cb905f3d2e290a8b8f1579d3984f2cfa7c3a29cc7cba608540ceeed18513f520", "sha256:cfcf28ed4ce9ced47b9b9670a4f0d3d3c0e4d4779ad4dadb1ad468b097f808aa", "sha256:dd3e6547ecf842a29cf25123fbf8d2461c53c8d37aa20d87ecee130c89b7079b", + "sha256:de7fd57765398d141949946c84f3590a68cf5887dac3fc52388df0639b01eda4", "sha256:ea37320877d56a7f0a1e6a625d892cf963aa7f570013499f5b8d5ab8402b5625", "sha256:f1fce1e4929157b2afeb4bb7069204d4370bab9f4fc03ca1fbec8bd601f8c87d", "sha256:f43109822df2d3faac7aad79613f5f02e4eab0fc8ad7932d2e70e2a83bd49c26" @@ -337,28 +648,41 @@ }, "scipy": { "hashes": [ - "sha256:07b083128beae040f1129bd8a82b01804f5e716a7fd2962c1053fa683433e4ab", - "sha256:0edd67e8a00903aaf7a29c968555a2e27c5a69fea9d1dcfffda80614281a884f", - "sha256:12fdcbfa56cac926a0a9364a30cbf4ad03c2c7b59f75b14234656a5e4fd52bf3", - "sha256:1fee28b6641ecbff6e80fe7788e50f50c5576157d278fa40f36c851940eb0aff", - "sha256:33e6a7439f43f37d4c1135bc95bcd490ffeac6ef4b374892c7005ce2c729cf4a", - "sha256:5163200ab14fd2b83aba8f0c4ddcc1fa982a43192867264ab0f4c8065fd10d17", - "sha256:66ec29348444ed6e8a14c9adc2de65e74a8fc526dc2c770741725464488ede1f", - "sha256:8cc5c39ed287a8b52a5509cd6680af078a40b0e010e2657eca01ffbfec929468", - "sha256:a1a13858b10d41beb0413c4378462b43eafef88a1948d286cb357eadc0aec024", - "sha256:a3db1fe7c6cb29ca02b14c9141151ebafd11e06ffb6da8ecd330eee5c8283a8a", - "sha256:aebb69bcdec209d874fc4b0c7ac36f509d50418a431c1422465fa34c2c0143ea", - "sha256:b9751b39c52a3fa59312bd2e1f40144ee26b51404db5d2f0d5259c511ff6f614", - "sha256:bc0e63daf43bf052aefbbd6c5424bc03f629d115ece828e87303a0bcc04a37e4", - "sha256:d5e3cc60868f396b78fc881d2c76460febccfe90f6d2f082b9952265c79a8788", - "sha256:ddae76784574cc4c172f3d5edd7308be16078dd3b977e8746860c76c195fa707", - "sha256:e2602f79c85924e4486f684aa9bbab74afff90606100db88d0785a0088be7edb", - "sha256:e527c9221b6494bcd06a17f9f16874406b32121385f9ab353b8a9545be458f0b", - "sha256:f574558f1b774864516f3c3fe072ebc90a29186f49b720f60ed339294b7f32ac", - "sha256:ffcbd331f1ffa82e22f1d408e93c37463c9a83088243158635baec61983aaacf" + "sha256:168c45c0c32e23f613db7c9e4e780bc61982d71dcd406ead746c7c7c2f2004ce", + "sha256:213bc59191da2f479984ad4ec39406bf949a99aba70e9237b916ce7547b6ef42", + "sha256:25b241034215247481f53355e05f9e25462682b13bd9191359075682adcd9554", + "sha256:2c872de0c69ed20fb1a9b9cf6f77298b04a26f0b8720a5457be08be254366c6e", + "sha256:3397c129b479846d7eaa18f999369a24322d008fac0782e7828fa567358c36ce", + "sha256:368c0f69f93186309e1b4beb8e26d51dd6f5010b79264c0f1e9ca00cd92ea8c9", + "sha256:3d5db5d815370c28d938cf9b0809dade4acf7aba57eaf7ef733bfedc9b2474c4", + "sha256:4598cf03136067000855d6b44d7a1f4f46994164bcd450fb2c3d481afc25dd06", + "sha256:4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b", + "sha256:4f12d13ffbc16e988fa40809cbbd7a8b45bc05ff6ea0ba8e3e41f6f4db3a9e47", + "sha256:634568a3018bc16a83cda28d4f7aed0d803dd5618facb36e977e53b2df868443", + "sha256:65923bc3809524e46fb7eb4d6346552cbb6a1ffc41be748535aa502a2e3d3389", + "sha256:6b0ceb23560f46dd236a8ad4378fc40bad1783e997604ba845e131d6c680963e", + "sha256:8c8d6ca19c8497344b810b0b0344f8375af5f6bb9c98bd42e33f747417ab3f57", + "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62", + "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d", + "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437", + "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2", + "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54", + "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474", + "sha256:e360cb2299028d0b0d0f65a5c5e51fc16a335f1603aa2357c25766c8dab56938", + "sha256:e98d49a5717369d8241d6cf33ecb0ca72deee392414118198a8e5b4c35c56340", + "sha256:ed572470af2438b526ea574ff8f05e7f39b44ac37f712105e57fc4d53a6fb660", + "sha256:f87b39f4d69cf7d7529d7b1098cb712033b17ea7714aed831b95628f483fd012", + "sha256:fa789583fc94a7689b45834453fec095245c7e69c58561dc159b5d5277057e4c" ], "markers": "python_version >= '3.6'", - "version": "==1.5.3" + "version": "==1.5.4" + }, + "service-identity": { + "hashes": [ + "sha256:001c0707759cb3de7e49c078a7c0c9cd12594161d3bf06b9c254fdcb1a60dc36", + "sha256:0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d" + ], + "version": "==18.1.0" }, "six": { "hashes": [ @@ -384,6 +708,46 @@ "markers": "python_version >= '3.5'", "version": "==2.1.0" }, + "twisted": { + "extras": [ + "tls" + ], + "hashes": [ + "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", + "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", + "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", + "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", + "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", + "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", + "sha256:356e8d8dd3590e790e3dba4db139eb8a17aca64b46629c622e1b1597a4a92478", + "sha256:70952c56e4965b9f53b180daecf20a9595cf22b8d0935cd3bd664c90273c3ab2", + "sha256:7408c6635ee1b96587289283ebe90ee15dbf9614b05857b446055116bc822d29", + "sha256:7c547fd0215db9da8a1bc23182b309e84a232364cc26d829e9ee196ce840b114", + "sha256:894f6f3cfa57a15ea0d0714e4283913a5f2511dbd18653dd148eba53b3919797", + "sha256:94ac3d55a58c90e2075c5fe1853f2aa3892b73e3bf56395f743aefde8605eeaa", + "sha256:a58e61a2a01e5bcbe3b575c0099a2bcb8d70a75b1a087338e0c48dd6e01a5f15", + "sha256:c09c47ff9750a8e3aa60ad169c4b95006d455a29b80ad0901f031a103b2991cd", + "sha256:ca3a0b8c9110800e576d89b5337373e52018b41069bc879f12fa42b7eb2d0274", + "sha256:cd1dc5c85b58494138a3917752b54bb1daa0045d234b7c132c37a61d5483ebad", + "sha256:cdbc4c7f0cd7a2218b575844e970f05a1be1861c607b0e048c9bceca0c4d42f7", + "sha256:d267125cc0f1e8a0eed6319ba4ac7477da9b78a535601c49ecd20c875576433a", + "sha256:d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10", + "sha256:d95803193561a243cb0401b0567c6b7987d3f2a67046770e1dccd1c9e49a9780", + "sha256:e92703bed0cc21d6cb5c61d66922b3b1564015ca8a51325bd164a5e33798d504", + "sha256:f058bd0168271de4dcdc39845b52dd0a4a2fecf5f1246335f13f5e96eaebb467", + "sha256:f3c19e5bd42bbe4bf345704ad7c326c74d3fd7a1b3844987853bef180be638d4" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.3.0" + }, + "txaio": { + "hashes": [ + "sha256:17938f2bca4a9cabce61346758e482ca4e600160cbc28e861493eac74a19539d", + "sha256:38a469daf93c37e5527cb062653d6393ae11663147c42fab7ddc3f6d00d434ae" + ], + "markers": "python_version >= '3.5'", + "version": "==20.4.1" + }, "tzlocal": { "hashes": [ "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", @@ -414,6 +778,64 @@ ], "index": "pypi", "version": "==2.7.4" + }, + "zope.interface": { + "hashes": [ + "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", + "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", + "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", + "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", + "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", + "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", + "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", + "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", + "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", + "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", + "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", + "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", + "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", + "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", + "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", + "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", + "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", + "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", + "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", + "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", + "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", + "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", + "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", + "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", + "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", + "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", + "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", + "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", + "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", + "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", + "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", + "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", + "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", + "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", + "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", + "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", + "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", + "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", + "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", + "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", + "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", + "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", + "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", + "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", + "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", + "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", + "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", + "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", + "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", + "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==5.2.0" } }, "develop": { @@ -441,11 +863,11 @@ }, "attrs": { "hashes": [ - "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594", - "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc" + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.2.0" + "version": "==20.3.0" }, "babel": { "hashes": [ @@ -556,11 +978,11 @@ }, "faker": { "hashes": [ - "sha256:30afa8f564350770373f299d2d267bff42aaba699a7ae0a3b6f378b2a8170569", - "sha256:a7a36c3c657f06bd1e3e3821b9480f2a92017d8a26e150e464ab6b97743cbc92" + "sha256:6afc461ab3f779c9c16e299fc731d775e39ea7e8e063b3053ee359ae198a15ca", + "sha256:ce1c38823eb0f927567cde5bf2e7c8ca565c7a70316139342050ce2ca74b4026" ], "markers": "python_version >= '3.5'", - "version": "==4.14.0" + "version": "==4.14.2" }, "filelock": { "hashes": [ @@ -751,10 +1173,10 @@ }, "pytz": { "hashes": [ - "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", - "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048" + "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268", + "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd" ], - "version": "==2020.1" + "version": "==2020.4" }, "requests": { "hashes": [ @@ -781,11 +1203,11 @@ }, "sphinx": { "hashes": [ - "sha256:321d6d9b16fa381a5306e5a0b76cd48ffbc588e6340059a729c6fdd66087e0e8", - "sha256:ce6fd7ff5b215af39e2fcd44d4a321f6694b4530b6f2b2109b64d120773faea0" + "sha256:1c21e7c5481a31b531e6cbf59c3292852ccde175b504b00ce2ff0b8f4adc3649", + "sha256:3abdb2c57a65afaaa4f8573cbabd5465078eb6fd282c1e4f87f006875a7ec0c7" ], "index": "pypi", - "version": "==3.2.1" + "version": "==3.3.0" }, "sphinxcontrib-applehelp": { "hashes": [ diff --git a/src/documents/consumer.py b/src/documents/consumer.py index f61d11136..3a73fc0cd 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -5,6 +5,8 @@ import os import re import uuid +from asgiref.sync import async_to_sync +from channels.layers import get_channel_layer from django.conf import settings from django.db import transaction from django.utils import timezone @@ -33,6 +35,17 @@ class Consumer: 5. Delete the document and image(s) """ + def _send_progress(self, filename, current_progress, max_progress, status, message, document_id=None): + payload = { + 'filename': os.path.basename(filename), + 'current_progress': current_progress, + 'max_progress': max_progress, + 'status': status, + 'message': message, + 'document_id': document_id + } + async_to_sync(self.channel_layer.group_send)("status_updates", {'type': 'status_update', 'data': payload}) + def __init__(self, consume=settings.CONSUMPTION_DIR, scratch=settings.SCRATCH_DIR): @@ -44,6 +57,8 @@ class Consumer: self.classifier = DocumentClassifier() + self.channel_layer = get_channel_layer() + os.makedirs(self.scratch, exist_ok=True) self.storage_type = Document.STORAGE_TYPE_UNENCRYPTED @@ -60,7 +75,6 @@ class Consumer: raise ConsumerError( "Consumption directory {} does not exist".format(self.consume)) - def log(self, level, message): getattr(self.logger, level)(message, extra={ "group": self.logging_group @@ -88,6 +102,7 @@ class Consumer: self.log("info", "Consuming {}".format(doc)) + parser_class = get_parser_class(doc) if not parser_class: self.log( @@ -96,6 +111,7 @@ class Consumer: else: self.log("info", "Parser: {}".format(parser_class.__name__)) + self._send_progress(file, 0, 100, 'WORKING', 'Consumption started') document_consumption_started.send( sender=self.__class__, @@ -103,20 +119,37 @@ class Consumer: logging_group=self.logging_group ) - document_parser = parser_class(doc, self.logging_group) + def progress_callback(current_progress, max_progress, message): + # recalculate progress to be within 20 and 80 + p = int((current_progress / max_progress) * 60 + 20) + self._send_progress(file, p, 100, "WORKING", message) + + document_parser = parser_class(doc, self.logging_group, progress_callback) try: self.log("info", "Generating thumbnail for {}...".format(doc)) + self._send_progress(file, 10, 100, 'WORKING', + 'Generating thumbnail...') thumbnail = document_parser.get_optimised_thumbnail() + self._send_progress(file, 20, 100, 'WORKING', + 'Getting text from document...') + text = document_parser.get_text() + self._send_progress(file, 80, 100, 'WORKING', + 'Getting date from document...') date = document_parser.get_date() + self._send_progress(file, 85, 100, 'WORKING', + 'Storing the document...') document = self._store( - document_parser.get_text(), + text, doc, thumbnail, date ) except ParseError as e: self.log("fatal", "PARSE FAILURE for {}: {}".format(doc, e)) + self._send_progress(file, 100, 100, 'FAILED', + "Failed: {}".format(e)) + document_parser.cleanup() return False else: @@ -136,12 +169,17 @@ class Consumer: except (FileNotFoundError, IncompatibleClassifierVersionError) as e: logging.getLogger(__name__).warning("Cannot classify documents: {}.".format(e)) + self._send_progress(file, 90, 100, 'WORKING', + 'Performing post-consumption tasks...') + document_consumption_finished.send( sender=self.__class__, document=document, logging_group=self.logging_group, classifier=classifier ) + self._send_progress(file, 100, 100, 'SUCCESS', + 'Finished.', document.id) return True def _store(self, text, doc, thumbnail, date): diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 0cbd13987..7976f4739 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -106,11 +106,12 @@ class DocumentParser: `paperless_tesseract.parsers` for inspiration. """ - def __init__(self, path, logging_group): + def __init__(self, path, logging_group, progress_callback): self.document_path = path self.tempdir = tempfile.mkdtemp(prefix="paperless-", dir=settings.SCRATCH_DIR) self.logger = logging.getLogger(__name__) self.logging_group = logging_group + self.progress_callback = progress_callback def get_thumbnail(self): """ diff --git a/src/paperless/asgi.py b/src/paperless/asgi.py new file mode 100644 index 000000000..9c3d17b1b --- /dev/null +++ b/src/paperless/asgi.py @@ -0,0 +1,37 @@ +import json +import os + +from asgiref.sync import async_to_sync +from channels.auth import AuthMiddlewareStack +from channels.generic.websocket import WebsocketConsumer +from channels.routing import ProtocolTypeRouter, URLRouter +from django.core.asgi import get_asgi_application +from django.urls import re_path + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'paperless.settings') + + +class StatusConsumer(WebsocketConsumer): + def connect(self): + self.accept() + async_to_sync(self.channel_layer.group_add)('status_updates', self.channel_name) + + def disconnect(self, close_code): + async_to_sync(self.channel_layer.group_discard)('status_updates', self.channel_name) + + def status_update(self, event): + self.send(json.dumps(event['data'])) + + +websocket_urlpatterns = [ + re_path(r'ws/status/$', StatusConsumer.as_asgi()), +] + +application = ProtocolTypeRouter({ + "http": get_asgi_application(), + "websocket": AuthMiddlewareStack( + URLRouter( + websocket_urlpatterns + ) + ), +}) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index bb71e4764..c9db3e4b1 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -69,6 +69,8 @@ INSTALLED_APPS = [ "rest_framework.authtoken", "django_filters", + "channels", + ] REST_FRAMEWORK = { @@ -98,6 +100,7 @@ LOGIN_URL = "admin:login" FORCE_SCRIPT_NAME = os.getenv("PAPERLESS_FORCE_SCRIPT_NAME") WSGI_APPLICATION = 'paperless.wsgi.application' +ASGI_APPLICATION = "paperless.asgi.application" STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", "/static/") @@ -299,3 +302,12 @@ FILENAME_DATE_ORDER = os.getenv("PAPERLESS_FILENAME_DATE_ORDER") FILENAME_PARSE_TRANSFORMS = [] for t in json.loads(os.getenv("PAPERLESS_FILENAME_PARSE_TRANSFORMS", "[]")): FILENAME_PARSE_TRANSFORMS.append((re.compile(t["pattern"]), t["repl"])) + +CHANNEL_LAYERS = { + "default": { + "BACKEND": "channels_redis.core.RedisChannelLayer", + "CONFIG": { + "hosts": [("127.0.0.1", 6379)], + }, + }, +} diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index befc9bcd7..535ee501c 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -27,8 +27,8 @@ class RasterisedDocumentParser(DocumentParser): image, whether it's a PDF, or other graphical format (JPEG, TIFF, etc.) """ - def __init__(self, path, logging_group): - super().__init__(path, logging_group) + def __init__(self, path, logging_group, progress_callback): + super().__init__(path, logging_group, progress_callback) self._text = None def get_thumbnail(self): @@ -91,6 +91,7 @@ class RasterisedDocumentParser(DocumentParser): self._text = get_text_from_pdf(self.document_path) return self._text + self.progress_callback(0,1,"Making greyscale images.") images = self._get_greyscale() if not images: @@ -100,8 +101,10 @@ class RasterisedDocumentParser(DocumentParser): sample_page_index = int(len(images) / 2) self.log("info", "Attempting language detection on page {} of {}...".format(sample_page_index+1, len(images))) + self.progress_callback(0.4, 1, "Language Detection.") sample_page_text = self._ocr([images[sample_page_index]], settings.OCR_LANGUAGE)[0] guessed_language = self._guess_language(sample_page_text) + self.progress_callback(0.6, 1, "OCR all the pages.") if not guessed_language or guessed_language not in ISO639: self.log("warning", "Language detection failed.") @@ -117,7 +120,7 @@ class RasterisedDocumentParser(DocumentParser): else: self.log("info", "Detected language: {}".format(guessed_language)) - ocr_pages = self._ocr(images, ISO639[guessed_language]) + ocr_pages = self._ocr(images, ISO639[guessed_language], report_progress=True) self.log("info", "OCR completed.") self._text = strip_excess_whitespace(" ".join(ocr_pages)) @@ -151,6 +154,8 @@ class RasterisedDocumentParser(DocumentParser): self.log("info", "Running unpaper on {} pages...".format(len(pnms))) + self.progress_callback(0.2,1, "Running unpaper on {} pages...".format(len(pnms))) + # Run unpaper in parallel on converted images with Pool(processes=settings.OCR_THREADS) as pool: pnms = pool.map(run_unpaper, pnms) @@ -165,11 +170,16 @@ class RasterisedDocumentParser(DocumentParser): self.log('debug', "Language detection failed with: {}".format(e)) return None - def _ocr(self, imgs, lang): + def _ocr(self, imgs, lang, report_progress=False): self.log("info", "Performing OCR on {} page(s) with language {}".format(len(imgs), lang)) + r = [] with Pool(processes=settings.OCR_THREADS) as pool: - r = pool.map(image_to_string, itertools.product(imgs, [lang])) - return r + # r = pool.map(image_to_string, itertools.product(imgs, [lang])) + for i, page in enumerate(pool.imap(image_to_string, itertools.product(imgs, [lang]))): + if report_progress: + self.progress_callback(0.6 + (i / len(imgs)) * 0.4, 1, "OCR'ed {} pages".format(i+1)) + r += [page] + return r def _complete_ocr_default_language(self, images, sample_page_index, sample_page): """ @@ -182,14 +192,13 @@ class RasterisedDocumentParser(DocumentParser): del images_copy[sample_page_index] if images_copy: self.log('info', 'Continuing ocr with default language.') - ocr_pages = self._ocr(images_copy, settings.OCR_LANGUAGE) + ocr_pages = self._ocr(images_copy, settings.OCR_LANGUAGE, report_progress=True) ocr_pages.insert(sample_page_index, sample_page) return ocr_pages else: return [sample_page] - def strip_excess_whitespace(text): collapsed_spaces = re.sub(r"([^\S\r\n]+)", " ", text) no_leading_whitespace = re.sub( From fae7ae06eb84621555aa252c73d9500be2395dc3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Sat, 7 Nov 2020 12:05:15 +0100 Subject: [PATCH 002/898] better toasts, better dashboard, first implementation of consumer status --- src-ui/src/app/app.component.ts | 35 ++++++++- src-ui/src/app/app.module.ts | 10 ++- .../edit-dialog/edit-dialog.component.ts | 4 +- .../common/toasts/toasts.component.html | 5 +- .../dashboard/dashboard.component.html | 56 ++------------- .../dashboard/dashboard.component.ts | 53 +------------- .../consumer-status-widget.component.css | 0 .../consumer-status-widget.component.html | 10 +++ .../consumer-status-widget.component.spec.ts | 25 +++++++ .../consumer-status-widget.component.ts | 35 +++++++++ .../file-upload-widget.component.css | 0 .../file-upload-widget.component.html | 11 +++ .../file-upload-widget.component.spec.ts | 25 +++++++ .../file-upload-widget.component.ts | 44 ++++++++++++ .../saved-view-widget.component.css | 0 .../saved-view-widget.component.html | 16 +++++ .../saved-view-widget.component.spec.ts | 25 +++++++ .../saved-view-widget.component.ts | 41 +++++++++++ .../statistics-widget.component.css | 0 .../statistics-widget.component.html | 3 + .../statistics-widget.component.spec.ts | 25 +++++++ .../statistics-widget.component.ts | 32 +++++++++ .../app/components/login/login.component.ts | 4 +- src-ui/src/app/services/auth.interceptor.ts | 2 +- .../services/consumer-status.service.spec.ts | 16 +++++ .../app/services/consumer-status.service.ts | 71 +++++++++++++++++++ src-ui/src/app/services/toast.service.ts | 33 ++++----- src-ui/src/environments/environment.ts | 3 +- 28 files changed, 450 insertions(+), 134 deletions(-) create mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.css create mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html create mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.css create mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html create mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.css create mode 100644 src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html create mode 100644 src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.css create mode 100644 src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html create mode 100644 src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.spec.ts create mode 100644 src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts create mode 100644 src-ui/src/app/services/consumer-status.service.spec.ts create mode 100644 src-ui/src/app/services/consumer-status.service.ts diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index a6cd8bebe..5809968e8 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -1,14 +1,43 @@ -import { Component } from '@angular/core'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { ConsumerStatusService } from './services/consumer-status.service'; +import { Toast, ToastService } from './services/toast.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) -export class AppComponent { +export class AppComponent implements OnInit, OnDestroy { + + successSubscription: Subscription; + failedSubscription: Subscription; - constructor () { + constructor ( private consumerStatusService: ConsumerStatusService, private toastService: ToastService, private router: Router ) { } + ngOnDestroy(): void { + this.consumerStatusService.disconnect() + this.successSubscription.unsubscribe() + this.failedSubscription.unsubscribe() + } + + ngOnInit(): void { + this.consumerStatusService.connect() + + this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { + this.toastService.showToast({title: "Document added", content: `Document ${status.filename} was added to paperless.`, actionName: "Open document", action: () => { + this.router.navigate(['documents', status.document_id]) + }}) + }) + + this.failedSubscription = this.consumerStatusService.onDocumentConsumptionFailed().subscribe(status => { + this.toastService.showError(`Could not consume ${status.filename}: ${status.message}`) + }) + + } + + } diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index e10bdbd0c..5cc59d567 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -40,6 +40,10 @@ import { SaveViewConfigDialogComponent } from './components/document-list/save-v import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { DateTimeComponent } from './components/common/input/date-time/date-time.component'; import { TagsComponent } from './components/common/input/tags/tags.component'; +import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-view-widget/saved-view-widget.component'; +import { ConsumerStatusWidgetComponent } from './components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component'; +import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'; +import { FileUploadWidgetComponent } from './components/dashboard/widgets/file-upload-widget/file-upload-widget.component'; @NgModule({ declarations: [ @@ -73,7 +77,11 @@ import { TagsComponent } from './components/common/input/tags/tags.component'; CheckComponent, SaveViewConfigDialogComponent, DateTimeComponent, - TagsComponent + TagsComponent, + ConsumerStatusWidgetComponent, + SavedViewWidgetComponent, + StatisticsWidgetComponent, + FileUploadWidgetComponent ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts index ba0d90847..04eb1f250 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts @@ -5,7 +5,7 @@ import { Observable } from 'rxjs'; import { MATCHING_ALGORITHMS } from 'src/app/data/matching-model'; import { ObjectWithId } from 'src/app/data/object-with-id'; import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service'; -import { Toast, ToastService } from 'src/app/services/toast.service'; +import { ToastService } from 'src/app/services/toast.service'; @Directive() export abstract class EditDialogComponent implements OnInit { @@ -66,7 +66,7 @@ export abstract class EditDialogComponent implements OnI this.activeModal.close() this.success.emit(result) }, error => { - this.toastService.showToast(Toast.makeError(`Could not save ${this.entityName}: ${error.error.name}`)) + this.toastService.showError(`Could not save ${this.entityName}: ${error.error.name}`) }) } diff --git a/src-ui/src/app/components/common/toasts/toasts.component.html b/src-ui/src/app/components/common/toasts/toasts.component.html index 04aa15a67..4e920877e 100644 --- a/src-ui/src/app/components/common/toasts/toasts.component.html +++ b/src-ui/src/app/components/common/toasts/toasts.component.html @@ -1,7 +1,8 @@ - {{toast.content}} +

{{toast.content}}

+

\ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/dashboard.component.html b/src-ui/src/app/components/dashboard/dashboard.component.html index 694b431c4..4b732c9e8 100644 --- a/src-ui/src/app/components/dashboard/dashboard.component.html +++ b/src-ui/src/app/components/dashboard/dashboard.component.html @@ -6,59 +6,11 @@
- -

{{v.viewConfig.title}}

- - - - - - - - - - - - - -
Date createdDocument
{{doc.created | date}}{{doc.title}} -
- -
- -

Saved views

-

This space is reserved to display your saved views. Go to your documents and save a view to have it displayed here!

-
- +
-

Statistics

-

Documents in inbox: {{statistics.documents_inbox}}

-

Total documents: {{statistics.documents_total}}

-

Upload new Document

-
- - - -
-
Document conumser status
-

This is what it might look like in the future.

-
-
-

Filename.pdf: Running tesseract on page 4/8...

-

-
-
-
-
-

Filename2.pdf: Completed.

-

-
-
+ + +
diff --git a/src-ui/src/app/components/dashboard/dashboard.component.ts b/src-ui/src/app/components/dashboard/dashboard.component.ts index f8d5fb0ae..a9c72e496 100644 --- a/src-ui/src/app/components/dashboard/dashboard.component.ts +++ b/src-ui/src/app/components/dashboard/dashboard.component.ts @@ -4,14 +4,9 @@ import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'; import { Observable } from 'rxjs'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SavedViewConfigService } from 'src/app/services/saved-view-config.service'; -import { Toast, ToastService } from 'src/app/services/toast.service'; +import { ToastService } from 'src/app/services/toast.service'; import { environment } from 'src/environments/environment'; -export interface Statistics { - documents_total?: number - documents_inbox?: number -} - @Component({ selector: 'app-dashboard', templateUrl: './dashboard.component.html', @@ -19,53 +14,9 @@ export interface Statistics { }) export class DashboardComponent implements OnInit { - constructor(private documentService: DocumentService, private toastService: ToastService, - public savedViewConfigService: SavedViewConfigService, private http: HttpClient) { } - - - savedDashboardViews = [] - statistics: Statistics = {} + constructor(public savedViewConfigService: SavedViewConfigService) { } ngOnInit(): void { - this.savedViewConfigService.getDashboardConfigs().forEach(config => { - this.documentService.list(1,10,config.sortField,config.sortDirection,config.filterRules).subscribe(result => { - this.savedDashboardViews.push({viewConfig: config, documents: result.results}) - }) - }) - this.getStatistics().subscribe(statistics => { - this.statistics = statistics - }) } - getStatistics(): Observable { - return this.http.get(`${environment.apiBaseUrl}statistics/`) - } - - - public fileOver(event){ - console.log(event); - } - - public fileLeave(event){ - console.log(event); - } - - public dropped(files: NgxFileDropEntry[]) { - for (const droppedFile of files) { - if (droppedFile.fileEntry.isFile) { - const fileEntry = droppedFile.fileEntry as FileSystemFileEntry; - console.log(fileEntry) - fileEntry.file((file: File) => { - console.log(file) - const formData = new FormData() - formData.append('document', file, file.name) - this.documentService.uploadDocument(formData).subscribe(result => { - this.toastService.showToast(Toast.make("Information", "The document has been uploaded and will be processed by the consumer shortly.")) - }, error => { - this.toastService.showToast(Toast.makeError("An error has occured while uploading the document. Sorry!")) - }) - }); - } - } - } } diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.css b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html new file mode 100644 index 000000000..9f6aa3b87 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html @@ -0,0 +1,10 @@ +

Document consumer status

+ +
+
{{s.filename}}: {{s.message}}
+ +
+ + +
+
\ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts new file mode 100644 index 000000000..02aa088f5 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ConsumerStatusWidgetComponent } from './consumer-status-widget.component'; + +describe('ConsumerStatusWidgetComponent', () => { + let component: ConsumerStatusWidgetComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ConsumerStatusWidgetComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ConsumerStatusWidgetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts new file mode 100644 index 000000000..0c4e35682 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts @@ -0,0 +1,35 @@ +import { Component, OnInit } from '@angular/core'; +import { ConsumerStatusService, FileStatus } from 'src/app/services/consumer-status.service'; + +@Component({ + selector: 'app-consumer-status-widget', + templateUrl: './consumer-status-widget.component.html', + styleUrls: ['./consumer-status-widget.component.css'] +}) +export class ConsumerStatusWidgetComponent implements OnInit { + + constructor(private consumerStatusService: ConsumerStatusService) { } + + ngOnInit(): void { + } + + getStatus() { + return this.consumerStatusService.consumerStatus + } + + isFinished(status: FileStatus) { + return status.status == "FAILED" || status.status == "SUCCESS" + } + + getType(status) { + switch (status) { + case "WORKING": return "primary" + case "FAILED": return "danger" + case "SUCCESS": return "success" + } + } + + dismiss(status: FileStatus) { + this.consumerStatusService.dismiss(status) + } +} diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.css b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html new file mode 100644 index 000000000..0c5ea634a --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html @@ -0,0 +1,11 @@ +

Upload new Document

+
+ + + +
\ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts new file mode 100644 index 000000000..847f5288b --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FileUploadWidgetComponent } from './file-upload-widget.component'; + +describe('FileUploadWidgetComponent', () => { + let component: FileUploadWidgetComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ FileUploadWidgetComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FileUploadWidgetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts new file mode 100644 index 000000000..5d4bac936 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit } from '@angular/core'; +import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'; +import { DocumentService } from 'src/app/services/rest/document.service'; +import { ToastService } from 'src/app/services/toast.service'; + +@Component({ + selector: 'app-file-upload-widget', + templateUrl: './file-upload-widget.component.html', + styleUrls: ['./file-upload-widget.component.css'] +}) +export class FileUploadWidgetComponent implements OnInit { + + constructor(private documentService: DocumentService, private toastService: ToastService) { } + + ngOnInit(): void { + } + + public fileOver(event){ + console.log(event); + } + + public fileLeave(event){ + console.log(event); + } + + public dropped(files: NgxFileDropEntry[]) { + for (const droppedFile of files) { + if (droppedFile.fileEntry.isFile) { + const fileEntry = droppedFile.fileEntry as FileSystemFileEntry; + console.log(fileEntry) + fileEntry.file((file: File) => { + console.log(file) + const formData = new FormData() + formData.append('document', file, file.name) + this.documentService.uploadDocument(formData).subscribe(result => { + this.toastService.showInfo("The document has been uploaded and will be processed by the consumer shortly.") + }, error => { + this.toastService.showError("An error has occured while uploading the document. Sorry!") + }) + }); + } + } + } +} diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.css b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html new file mode 100644 index 000000000..110464641 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -0,0 +1,16 @@ +

{{viewConfig.title}}

+ + + + + + + + + + + + + +
Date createdDocument
{{doc.created | date}}{{doc.title}} +
\ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts new file mode 100644 index 000000000..f0095b618 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SavedViewWidgetComponent } from './saved-view-widget.component'; + +describe('SavedViewWidgetComponent', () => { + let component: SavedViewWidgetComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SavedViewWidgetComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SavedViewWidgetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts new file mode 100644 index 000000000..eb2d53aee --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -0,0 +1,41 @@ +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { Subscription } from 'rxjs'; +import { PaperlessDocument } from 'src/app/data/paperless-document'; +import { SavedViewConfig } from 'src/app/data/saved-view-config'; +import { ConsumerStatusService } from 'src/app/services/consumer-status.service'; +import { DocumentService } from 'src/app/services/rest/document.service'; + +@Component({ + selector: 'app-saved-view-widget', + templateUrl: './saved-view-widget.component.html', + styleUrls: ['./saved-view-widget.component.css'] +}) +export class SavedViewWidgetComponent implements OnInit, OnDestroy { + + constructor(private documentService: DocumentService, private consumerStatusService: ConsumerStatusService) { } + + @Input() + viewConfig: SavedViewConfig + + documents: PaperlessDocument[] + + subscription: Subscription + + ngOnInit(): void { + this.reload() + this.subscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { + this.reload() + }) + } + + ngOnDestroy(): void { + this.subscription.unsubscribe() + } + + reload() { + this.documentService.list(1,10,this.viewConfig.sortField,this.viewConfig.sortDirection,this.viewConfig.filterRules).subscribe(result => { + this.documents = result.results + }) + } + +} diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.css b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html new file mode 100644 index 000000000..2f89a2b34 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html @@ -0,0 +1,3 @@ +

Statistics

+

Documents in inbox: {{statistics.documents_inbox}}

+

Total documents: {{statistics.documents_total}}

\ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.spec.ts new file mode 100644 index 000000000..e8e44ca54 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { StatisticsWidgetComponent } from './statistics-widget.component'; + +describe('StatisticsWidgetComponent', () => { + let component: StatisticsWidgetComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ StatisticsWidgetComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(StatisticsWidgetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts new file mode 100644 index 000000000..4efb03895 --- /dev/null +++ b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts @@ -0,0 +1,32 @@ +import { HttpClient } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; + +export interface Statistics { + documents_total?: number + documents_inbox?: number +} + +@Component({ + selector: 'app-statistics-widget', + templateUrl: './statistics-widget.component.html', + styleUrls: ['./statistics-widget.component.css'] +}) +export class StatisticsWidgetComponent implements OnInit { + + constructor(private http: HttpClient) { } + + statistics: Statistics = {} + + ngOnInit(): void { + this.getStatistics().subscribe(statistics => { + this.statistics = statistics + }) + } + + getStatistics(): Observable { + return this.http.get(`${environment.apiBaseUrl}statistics/`) + } + +} diff --git a/src-ui/src/app/components/login/login.component.ts b/src-ui/src/app/components/login/login.component.ts index e74dcfb7f..a241543c7 100644 --- a/src-ui/src/app/components/login/login.component.ts +++ b/src-ui/src/app/components/login/login.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { Router } from '@angular/router'; import { AuthService } from 'src/app/services/auth.service'; -import { Toast, ToastService } from 'src/app/services/toast.service'; +import { ToastService } from 'src/app/services/toast.service'; @Component({ selector: 'app-login', @@ -26,7 +26,7 @@ export class LoginComponent implements OnInit { this.auth.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.rememberMe).subscribe(result => { this.router.navigate(['']) }, (error) => { - this.toastService.showToast(Toast.makeError("Unable to log in with provided credentials.")) + this.toastService.showError("Unable to log in with provided credentials.") } ) } diff --git a/src-ui/src/app/services/auth.interceptor.ts b/src-ui/src/app/services/auth.interceptor.ts index 704b558ac..37d9e7906 100644 --- a/src-ui/src/app/services/auth.interceptor.ts +++ b/src-ui/src/app/services/auth.interceptor.ts @@ -28,7 +28,7 @@ export class AuthInterceptor implements HttpInterceptor { catchError((error: HttpErrorResponse) => { if (error.status == 401 && this.authService.isAuthenticated()) { this.authService.logout() - this.toastService.showToast(Toast.makeError("Your session has expired. Please log in again.")) + this.toastService.showError("Your session has expired. Please log in again.") } return throwError(error) }) diff --git a/src-ui/src/app/services/consumer-status.service.spec.ts b/src-ui/src/app/services/consumer-status.service.spec.ts new file mode 100644 index 000000000..d19f455e2 --- /dev/null +++ b/src-ui/src/app/services/consumer-status.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ConsumerStatusService } from './consumer-status.service'; + +describe('ConsumerStatusService', () => { + let service: ConsumerStatusService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ConsumerStatusService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts new file mode 100644 index 000000000..070420b0f --- /dev/null +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -0,0 +1,71 @@ +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs'; + +export interface FileStatus { + filename?: string + current_progress?: number + max_progress?: number + status?: string + message?: string + document_id?: number +} + +@Injectable({ + providedIn: 'root' +}) +export class ConsumerStatusService { + + constructor() { } + + private statusWebSocked: WebSocket + + consumerStatus: FileStatus[] = [] + private documentConsumptionFinishedSubject = new Subject() + private documentConsumptionFailedSubject = new Subject() + + connect() { + this.disconnect() + this.statusWebSocked = new WebSocket("ws://localhost:8000/ws/status/"); + this.statusWebSocked.onmessage = (ev) => { + let statusUpdate: FileStatus = JSON.parse(ev['data']) + + let index = this.consumerStatus.findIndex(fs => fs.filename == statusUpdate.filename) + if (index > -1) { + this.consumerStatus[index] = statusUpdate + } else { + this.consumerStatus.push(statusUpdate) + } + + if (statusUpdate.status == "SUCCESS") { + this.documentConsumptionFinishedSubject.next(statusUpdate) + } + if (statusUpdate.status == "FAILED") { + this.documentConsumptionFailedSubject.next(statusUpdate) + } + } + } + + disconnect() { + if (this.statusWebSocked) { + this.statusWebSocked.close() + this.statusWebSocked = null + } + } + + dismiss(status: FileStatus) { + let index = this.consumerStatus.findIndex(s => s.filename == status.filename) + + if (index > -1) { + this.consumerStatus.splice(index, 1) + } + } + + onDocumentConsumptionFinished() { + return this.documentConsumptionFinishedSubject + } + + onDocumentConsumptionFailed() { + return this.documentConsumptionFailedSubject + } + +} diff --git a/src-ui/src/app/services/toast.service.ts b/src-ui/src/app/services/toast.service.ts index a3ce060a9..d5781139e 100644 --- a/src-ui/src/app/services/toast.service.ts +++ b/src-ui/src/app/services/toast.service.ts @@ -1,30 +1,17 @@ import { Injectable } from '@angular/core'; import { Subject, zip } from 'rxjs'; -export class Toast { - - static make(title: string, content: string, classname?: string, delay?: number): Toast { - let t = new Toast() - t.title = title - t.content = content - t.classname = classname - if (delay) { - t.delay = delay - } - return t - } - - static makeError(content: string) { - return Toast.make("Error", content, null, 10000) - } +export interface Toast { title: string - classname: string - content: string - delay: number = 5000 + delay?: number + + action?: any + + actionName?: string } @@ -44,6 +31,14 @@ export class ToastService { this.toastsSubject.next(this.toasts) } + showInfo(message: string) { + this.showToast({title: "Information", content: message, delay: 5000}) + } + + showError(message: string) { + this.showToast({title: "Error", content: message, delay: 10000}) + } + closeToast(toast: Toast) { let index = this.toasts.findIndex(t => t == toast) if (index > -1) { diff --git a/src-ui/src/environments/environment.ts b/src-ui/src/environments/environment.ts index a0877d69f..c945a0364 100644 --- a/src-ui/src/environments/environment.ts +++ b/src-ui/src/environments/environment.ts @@ -4,7 +4,8 @@ export const environment = { production: false, - apiBaseUrl: "http://localhost:8000/api/" + apiBaseUrl: "http://localhost:8000/api/", + wsBaseUrl: "ws://localhost:8000/ws/" }; /* From 1325c0e168e33fb68ea7eed8a507610cdda8a6d2 Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Sat, 7 Nov 2020 12:10:53 +0100 Subject: [PATCH 003/898] nicer status --- .../consumer-status-widget.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html index 9f6aa3b87..d6559e184 100644 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html @@ -1,10 +1,10 @@

Document consumer status

-
+
{{s.filename}}: {{s.message}}
-
- +
+
\ No newline at end of file From dd5e43e7d401087b3b840df4e4f45299eaa9080a Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Sat, 7 Nov 2020 12:47:17 +0100 Subject: [PATCH 004/898] fixed up the docker --- Pipfile | 1 + Pipfile.lock | 4 ++-- scripts/supervisord.conf | 4 ++-- src/paperless/asgi.py | 30 ++++++++---------------------- src/paperless/consumers.py | 16 ++++++++++++++++ src/paperless/settings.py | 2 +- src/paperless/urls.py | 8 +++++++- 7 files changed, 37 insertions(+), 28 deletions(-) create mode 100644 src/paperless/consumers.py diff --git a/Pipfile b/Pipfile index d526ae252..09de36334 100644 --- a/Pipfile +++ b/Pipfile @@ -28,6 +28,7 @@ django-extensions = "" watchdog = "*" channels = "~=3.0" channels-redis = "*" +daphne = "~=3.0" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 642e38214..21b4becad 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "192d7419b844e6bb81fed793e7766b2ba15f2a016af1a33fc73cf09e12de5fb7" + "sha256": "66530e76de7948d8123529eff0b150926aa46a410da8b31e12b6d468e5996e7a" }, "pipfile-spec": 6, "requires": {}, @@ -157,7 +157,7 @@ "sha256:60856f7efa0b1e1b969efa074e8698bd09de4713ecc06e6a4d19d04c66c4a3bd", "sha256:b43e70d74ff832a634ff6c92badd208824e4530e08b340116517e5aad0aca774" ], - "markers": "python_version >= '3.6'", + "index": "pypi", "version": "==3.0.0" }, "dateparser": { diff --git a/scripts/supervisord.conf b/scripts/supervisord.conf index d3ff288de..cb6fd1650 100644 --- a/scripts/supervisord.conf +++ b/scripts/supervisord.conf @@ -6,8 +6,8 @@ logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB logfile_backups=10 ; # of main logfile backups; 0 means none, default 10 loglevel=info ; log level; default info; others: debug,warn,trace -[program:gunicorn] -command=gunicorn -c /usr/src/paperless/gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi +[program:daphne] +command=daphne -b 0.0.0.0 -p 8000 paperless.asgi:application user=paperless stdout_logfile=/dev/stdout diff --git a/src/paperless/asgi.py b/src/paperless/asgi.py index 9c3d17b1b..45565c68a 100644 --- a/src/paperless/asgi.py +++ b/src/paperless/asgi.py @@ -1,31 +1,17 @@ -import json import os -from asgiref.sync import async_to_sync -from channels.auth import AuthMiddlewareStack -from channels.generic.websocket import WebsocketConsumer -from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application -from django.urls import re_path +# Fetch Django ASGI application early to ensure AppRegistry is populated +# before importing consumers and AuthMiddlewareStack that may import ORM +# models. -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'paperless.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "paperless.settings") +django_asgi_app = get_asgi_application() +from channels.auth import AuthMiddlewareStack +from channels.routing import ProtocolTypeRouter, URLRouter -class StatusConsumer(WebsocketConsumer): - def connect(self): - self.accept() - async_to_sync(self.channel_layer.group_add)('status_updates', self.channel_name) - - def disconnect(self, close_code): - async_to_sync(self.channel_layer.group_discard)('status_updates', self.channel_name) - - def status_update(self, event): - self.send(json.dumps(event['data'])) - - -websocket_urlpatterns = [ - re_path(r'ws/status/$', StatusConsumer.as_asgi()), -] +from paperless.urls import websocket_urlpatterns application = ProtocolTypeRouter({ "http": get_asgi_application(), diff --git a/src/paperless/consumers.py b/src/paperless/consumers.py new file mode 100644 index 000000000..fbb7b72d0 --- /dev/null +++ b/src/paperless/consumers.py @@ -0,0 +1,16 @@ +import json + +from asgiref.sync import async_to_sync +from channels.generic.websocket import WebsocketConsumer + + +class StatusConsumer(WebsocketConsumer): + def connect(self): + self.accept() + async_to_sync(self.channel_layer.group_add)('status_updates', self.channel_name) + + def disconnect(self, close_code): + async_to_sync(self.channel_layer.group_discard)('status_updates', self.channel_name) + + def status_update(self, event): + self.send(json.dumps(event['data'])) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index c9db3e4b1..7ef132bff 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -307,7 +307,7 @@ CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { - "hosts": [("127.0.0.1", 6379)], + "hosts": [("broker", 6379)], }, }, } diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 43ba5eb49..4416bc8d5 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -1,11 +1,12 @@ from django.conf.urls import include, url from django.contrib import admin -from django.urls import path +from django.urls import path, re_path from django.views.decorators.csrf import csrf_exempt from django.views.generic import RedirectView from rest_framework.authtoken import views from rest_framework.routers import DefaultRouter +from paperless.consumers import StatusConsumer from paperless.views import FaviconView from documents.views import ( CorrespondentViewSet, @@ -65,6 +66,11 @@ urlpatterns = [ ] + +websocket_urlpatterns = [ + re_path(r'ws/status/$', StatusConsumer.as_asgi()), +] + # Text in each page's

(and above login form). admin.site.site_header = 'Paperless' # Text at the end of each page's . From 0b2073610261ab84d504cad5edc530af4eac672e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Sat, 7 Nov 2020 12:56:26 +0100 Subject: [PATCH 005/898] added broker to compose file --- docker-compose.yml.example | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker-compose.yml.example b/docker-compose.yml.example index 1130e26a3..3d8ed4719 100644 --- a/docker-compose.yml.example +++ b/docker-compose.yml.example @@ -1,5 +1,10 @@ version: "3.4" services: + broker: + image: redis:latest + ports: + - 6379:6379 + db: image: postgres:13 #restart: always From 4253f4aca79ec523b7132c61fec26e8b00a3dc8b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Tue, 10 Nov 2020 01:26:27 +0100 Subject: [PATCH 006/898] Pipfile update --- Pipfile.lock | 75 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 21b4becad..932dc380e 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "66530e76de7948d8123529eff0b150926aa46a410da8b31e12b6d468e5996e7a" + "sha256": "65b67f06b1ad7d6541a1f84552f1c24a0353ed03aa4c382f8638c9d112b41eda" }, "pipfile-spec": 6, "requires": {}, @@ -21,13 +21,21 @@ ], "version": "==1.3.1" }, + "arrow": { + "hashes": [ + "sha256:e098abbd9af3665aea81bdd6c869e93af4feb078e98468dd351c383af187aac5", + "sha256:ff08d10cda1d36c68657d6ad20d74fbea493d980f8b2d45344e00d6ed2bf6ed4" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.17.0" + }, "asgiref": { "hashes": [ - "sha256:a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", - "sha256:cd88907ecaec59d78e4ac00ea665b03e571cb37e3a0e37b3702af1a9e86c365a" + "sha256:5ee950735509d04eb673bd7f7120f8fa1c9e2df495394992c73234d526907e17", + "sha256:7162a3cb30ab0609f1a4c95938fd73e8604f63bdba516a7f7d64b83ff09478f0" ], "markers": "python_version >= '3.5'", - "version": "==3.3.0" + "version": "==3.3.1" }, "async-timeout": { "hashes": [ @@ -60,6 +68,13 @@ ], "version": "==20.2.0" }, + "blessed": { + "hashes": [ + "sha256:7d4914079a6e8e14fbe080dcaf14dee596a088057cdc598561080e3266123b48", + "sha256:81125aa5b84cb9dfc09ff451886f64b4b923b75c5eaf51fde9d1c48a135eb797" + ], + "version": "==1.17.11" + }, "cffi": { "hashes": [ "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d", @@ -103,11 +118,11 @@ }, "channels": { "hashes": [ - "sha256:5cdd9c6b9ee663cdf1bbb00de7cdab885a3c418f9d32a29f04b09498828020f6", - "sha256:b02e150b48704ec3607d4168402ac5c26138dd183fcdb7f2aeb965e6e19fd558" + "sha256:74db79c9eca616be69d38013b22083ab5d3f9ccda1ab5e69096b1bb7da2d9b18", + "sha256:f50a6e79757a64c1e45e95e144a2ac5f1e99ee44a0718ab182c501f5e5abd268" ], "index": "pypi", - "version": "==3.0.1" + "version": "==3.0.2" }, "channels-redis": { "hashes": [ @@ -190,7 +205,6 @@ "sha256:dc663652ac9460fd06580a973576820430c6d428720e874ae46b041fa63e0efa" ], "index": "pypi", - "markers": "python_version >= '3.5'", "version": "==3.0.9" }, "django-filter": { @@ -201,6 +215,22 @@ "index": "pypi", "version": "==2.4.0" }, + "django-picklefield": { + "hashes": [ + "sha256:15ccba592ca953b9edf9532e64640329cd47b136b7f8f10f2939caa5f9ce4287", + "sha256:3c702a54fde2d322fe5b2f39b8f78d9f655b8f77944ab26f703be6c0ed335a35" + ], + "markers": "python_version >= '3'", + "version": "==3.0.1" + }, + "django-q": { + "hashes": [ + "sha256:523d54dcf1b66152c1b658f914f00ed3b518a3432a9decd4898738ca8dbbe10f", + "sha256:7e5c5c021a15cff6807044a3aa48f5757789ccfef839d71c575f5512931a3e33" + ], + "index": "pypi", + "version": "==1.3.4" + }, "djangorestframework": { "hashes": [ "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7" @@ -390,6 +420,14 @@ ], "version": "==0.1.2" }, + "pathvalidate": { + "hashes": [ + "sha256:1697c8ea71ff4c48e7aa0eda72fe4581404be8f41e51a17363ef682dd6824d35", + "sha256:32d30dbacb711c16bb188b12ce7e9a46b41785f50a12f64500f747480a4b6ee3" + ], + "index": "pypi", + "version": "==2.3.0" + }, "pdftotext": { "hashes": [ "sha256:98aeb8b07a4127e1a30223bd933ef080bbd29aa88f801717ca6c5618380b8aa6" @@ -576,6 +614,14 @@ ], "version": "==2020.4" }, + "redis": { + "hashes": [ + "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2", + "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24" + ], + "index": "pypi", + "version": "==3.5.3" + }, "regex": { "hashes": [ "sha256:03855ee22980c3e4863dc84c42d6d2901133362db5daf4c36b710dd895d78f0a", @@ -762,6 +808,13 @@ "index": "pypi", "version": "==0.10.3" }, + "wcwidth": { + "hashes": [ + "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", + "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" + ], + "version": "==0.2.5" + }, "whitenoise": { "hashes": [ "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7", @@ -879,10 +932,10 @@ }, "certifi": { "hashes": [ - "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3", - "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41" + "sha256:1f422849db327d534e3d0c5f02a263458c3955ec0aae4ff09b95f195c59f4edd", + "sha256:f05def092c44fbf25834a51509ef6e631dc19765ab8a57b4e7ab85531f0a9cf4" ], - "version": "==2020.6.20" + "version": "==2020.11.8" }, "chardet": { "hashes": [ From 09aa91f738f562618f1cac00b6df15b0a6df8c52 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Thu, 19 Nov 2020 22:14:11 +0100 Subject: [PATCH 007/898] updated pipenv --- Pipfile.lock | 86 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 17 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 932dc380e..ebe2c4095 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "65b67f06b1ad7d6541a1f84552f1c24a0353ed03aa4c382f8638c9d112b41eda" + "sha256": "ef3638ed4905e0809823dc1cfefd8e5ee415cd9d33ec3f23e483fb60b87d6fe6" }, "pipfile-spec": 6, "requires": {}, @@ -10,6 +10,11 @@ "name": "pypi", "url": "https://pypi.python.org/simple", "verify_ssl": true + }, + { + "name": "piwheels", + "url": "https://www.piwheels.org/simple", + "verify_ssl": true } ] }, @@ -55,6 +60,7 @@ }, "autobahn": { "hashes": [ + "sha256:1eafbbe363a7924fd21bb0b94ece9f3ac2a9aa9c2046e8a85e044f94e8ba2028", "sha256:24ce276d313e84d68241c3aef30d484f352b90a40168981b3640312c821df77b", "sha256:86bbce30cdd407137c57670993a8f9bfdfe3f8e994b889181d85e844d5aa8dfb" ], @@ -64,7 +70,8 @@ "automat": { "hashes": [ "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", - "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111" + "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111", + "sha256:d6d976cf8da698fc85fa7def46e2544493f78cb7ee72d2f4acd1a5c759a3060e" ], "version": "==20.2.0" }, @@ -82,6 +89,7 @@ "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4", "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f", "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3", + "sha256:178a2db1589cb9b0b5b28a74ee0c9d4438bd96f8c6c0ac85662ff3c98f7f8d20", "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579", "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537", "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e", @@ -108,6 +116,7 @@ "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d", "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b", "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e", + "sha256:df90c0c9e383e8c3bdced39f113ecc36fa9c623dd04dd1b5199e9edc53389a95", "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d", "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730", "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394", @@ -143,12 +152,14 @@ "hashes": [ "sha256:07ca431b788249af92764e3be9a488aa1d39a0bc3be313d826bbec690417e538", "sha256:13b88a0bd044b4eae1ef40e265d006e34dbcde0c2f1e15eb9896501b2d8f6c6f", + "sha256:257dab4f368fae15f378ea9a4d2799bf3696668062de0e9fa0ebb7a738a6917d", "sha256:32434673d8505b42c0de4de86da8c1620651abd24afe91ae0335597683ed1b77", "sha256:3cd75a683b15576cfc822c7c5742b3276e50b21a06672dc3a800a2d5da4ecd1b", "sha256:4e7268a0ca14536fecfdf2b00297d4e407da904718658c1ff1961c713f90fd33", "sha256:545a8550782dda68f8cdc75a6e3bf252017aa8f75f19f5a9ca940772fc0cb56e", "sha256:55d0b896631412b6f0c7de56e12eb3e261ac347fbaa5d5e705291a9016e5f8cb", "sha256:5849d59358547bf789ee7e0d7a9036b2d29e9a4ddf1ce5e06bb45634f995c53e", + "sha256:59f7d4cfea9ef12eb9b14b83d79b432162a0a24a91ddc15c2c9bf76a68d96f2b", "sha256:6dc59630ecce8c1f558277ceb212c751d6730bd12c80ea96b4ac65637c4f55e7", "sha256:7117319b44ed1842c617d0a452383a5a052ec6aa726dfbaffa8b94c910444297", "sha256:75e8e6684cf0034f6bf2a97095cb95f81537b12b36a8fedf06e73050bb171c2d", @@ -291,6 +302,7 @@ "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", + "sha256:9f4e67f87e072de981570eaf7cb41444bbac7e92b05c8651dbab6eb1fb8d5a14", "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", @@ -298,6 +310,7 @@ "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", + "sha256:b39989b49e8aca9d224324d2650029eda410a4faf43f6afb0eb4f9acb7be6097", "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", @@ -315,6 +328,7 @@ }, "hyperlink": { "hashes": [ + "sha256:402c1b5fa066ea368f3118fc5a6f8505440b4d1a4ef12a844ca39332a4a29944", "sha256:47fcc7cd339c6cb2444463ec3277bdcfe142c8b1daf2160bdd52248deec815af", "sha256:c528d405766f15a2c536230de7e160b65a08e20264d8891b3eb03307b0df3c63" ], @@ -322,12 +336,21 @@ }, "idna": { "hashes": [ + "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, + "imap-tools": { + "hashes": [ + "sha256:070929b8ec429c0aad94588a37a2962eed656a119ab61dcf91489f20fe983f5d", + "sha256:6232cd43748741496446871e889eb137351fc7a7e7f4c7888cd8c0fa28e20cda" + ], + "index": "pypi", + "version": "==0.31.0" + }, "incremental": { "hashes": [ "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", @@ -354,12 +377,14 @@ "msgpack": { "hashes": [ "sha256:002a0d813e1f7b60da599bdf969e632074f9eec1b96cbed8fb0973a63160a408", + "sha256:0e7b5a69ec5645b0a85baaa354c29acd89eb879aaa89e7f4b37ed4d9c5abafe0", "sha256:25b3bc3190f3d9d965b818123b7752c5dfb953f0d774b454fd206c18fe384fb8", "sha256:271b489499a43af001a2e42f42d876bb98ccaa7e20512ff37ca78c8e12e68f84", "sha256:39c54fdebf5fa4dda733369012c59e7d085ebdfe35b6cf648f09d16708f1be5d", "sha256:4233b7f86c1208190c78a525cd3828ca1623359ef48f78a6fea4b91bb995775a", "sha256:5bea44181fc8e18eed1d0cd76e355073f00ce232ff9653a0ae88cb7d9e643322", "sha256:5dba6d074fac9b24f29aaf1d2d032306c27f04187651511257e7831733293ec2", + "sha256:71604047feea609ad65f5b837ec89a4de084d55a80f8af7331745a075c3dbd23", "sha256:7a22c965588baeb07242cb561b63f309db27a07382825fc98aecaf0827c1538e", "sha256:908944e3f038bca67fcfedb7845c4a257c7749bf9818632586b53bcf06ba4b97", "sha256:9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0", @@ -370,7 +395,8 @@ "sha256:db685187a415f51d6b937257474ca72199f393dad89534ebbdd7d7a3b000080e", "sha256:e35b051077fc2f3ce12e7c6a34cf309680c63a842db3a0616ea6ed25ad20d272", "sha256:e7bbdd8e2b277b77782f3ce34734b0dfde6cbe94ddb74de8d733d603c7f9e2b1", - "sha256:ea41c9219c597f1d2bf6b374d951d310d58684b5de9dc4bd2976db9e1e22c140" + "sha256:ea41c9219c597f1d2bf6b374d951d310d58684b5de9dc4bd2976db9e1e22c140", + "sha256:f7c80ff32171193f18a127ea357118b920020cc0acb0730016bbda02b892a2d2" ], "version": "==1.0.0" }, @@ -389,6 +415,7 @@ "sha256:448ebb1b3bf64c0267d6b09a7cba26b5ae61b6d2dbabff7c91b660c7eccf2bdb", "sha256:50e86c076611212ca62e5a59f518edafe0c0730f7d9195fec718da1a5c2bb1fc", "sha256:5734bdc0342aba9dfc6f04920988140fb41234db42381cf7ccba64169f9fe7ac", + "sha256:5ddd1dfa2be066595c1993165b4cae84b9866b12339d0c903db7f21a094324a3", "sha256:64324f64f90a9e4ef732be0928be853eee378fd6a01be21a0a8469c4f2682c83", "sha256:6ae6c680f3ebf1cf7ad1d7748868b39d9f900836df774c453c11c5440bc15b36", "sha256:6d7593a705d662be5bfe24111af14763016765f43cb6923ed86223f965f52387", @@ -416,7 +443,8 @@ }, "pathtools": { "hashes": [ - "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0" + "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0", + "sha256:d77d982475e87f32b82157a43b09f0a5ef3e66c1d8f3c7eb8d2580e783cd8202" ], "version": "==0.1.2" }, @@ -711,6 +739,7 @@ "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62", "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d", "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437", + "sha256:b5e9d3e4474644915809d6aa1416ff20430a3ed9ae723a5d295da5ddb24985e2", "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2", "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54", "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474", @@ -759,9 +788,11 @@ "tls" ], "hashes": [ + "sha256:0150dae5adc962d15e00054cc6926f1e64763fb8dd26e1632593ac06e592104b", "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", + "sha256:15e52271f08f62e2230ff093e0278aa01c9dac057c4557cadadd2429eed86a3e", "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", @@ -836,6 +867,7 @@ "hashes": [ "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:09fc3922f235703c0b76f8234867685eee68a24a49fffa2220975f6142db45f1", "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", @@ -870,6 +902,7 @@ "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:974f5957e66a7524ea81df7b2686a456bfaf0408dbb7353ddfbedb594eadfef6", "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", @@ -924,11 +957,11 @@ }, "babel": { "hashes": [ - "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38", - "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4" + "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5", + "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.0" + "version": "==2.9.0" }, "certifi": { "hashes": [ @@ -954,6 +987,7 @@ "sha256:29a6272fec10623fcbe158fdf9abc7a5fa032048ac1d8631f14b50fbfc10d17f", "sha256:2b31f46bf7b31e6aa690d4c7a3d51bb262438c6dcb0d528adde446531d0d3bb7", "sha256:2d43af2be93ffbad25dd959899b5b809618a496926146ce98ee0b23683f8c51c", + "sha256:3188a7dfd96f734a7498f37cde6598b1e9c084f1ca68bc1aa04e88db31168ab6", "sha256:381ead10b9b9af5f64646cd27107fb27b614ee7040bb1226f9c07ba96625cbb5", "sha256:47a11bdbd8ada9b7ee628596f9d97fbd3851bd9999d398e9436bd67376dbece7", "sha256:4d6a42744139a7fa5b46a264874a781e8694bb32f1d76d8137b68138686f1729", @@ -979,7 +1013,8 @@ "sha256:c851b35fc078389bc16b915a0a7c1d5923e12e2c5aeec58c52f4aa8085ac8237", "sha256:cb7df71de0af56000115eafd000b867d1261f786b5eebd88a0ca6360cccfaca7", "sha256:cedb2f9e1f990918ea061f28a0f0077a07702e3819602d3507e2ff98c8d20636", - "sha256:e8caf961e1b1a945db76f1b5fa9c91498d15f545ac0ababbe575cfab185d3bd8" + "sha256:e8caf961e1b1a945db76f1b5fa9c91498d15f545ac0ababbe575cfab185d3bd8", + "sha256:ef221855191457fffeb909d5787d1807800ab4d0111f089e6c93ee68f577634d" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==5.3" @@ -1001,6 +1036,7 @@ }, "docopt": { "hashes": [ + "sha256:15fde8252aa9f2804171014d50d069ffbf42c7a50b7d74bcbb82bfd5700fcfc2", "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491" ], "version": "==0.6.2" @@ -1031,11 +1067,11 @@ }, "faker": { "hashes": [ - "sha256:6afc461ab3f779c9c16e299fc731d775e39ea7e8e063b3053ee359ae198a15ca", - "sha256:ce1c38823eb0f927567cde5bf2e7c8ca565c7a70316139342050ce2ca74b4026" + "sha256:3f5d379e4b5ce92a8afe3c2ce59d7c43886370dd3bf9495a936b91888debfc81", + "sha256:8c0e8a06acef4b9312902e2ce18becabe62badd3a6632180bd0680c6ee111473" ], "markers": "python_version >= '3.5'", - "version": "==4.14.2" + "version": "==4.17.0" }, "filelock": { "hashes": [ @@ -1046,6 +1082,7 @@ }, "idna": { "hashes": [ + "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], @@ -1063,12 +1100,14 @@ "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", + "sha256:8647b85c03813b8680f4ae9c9db2fd7293f8591ea536a10d73d90f6eb4b10aac", "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" ], "version": "==1.1.1" }, "jinja2": { "hashes": [ + "sha256:3f172970d5670703bd3812e8ca6459a9a7e069fa8e51b40195f83c81db191ec4", "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" ], @@ -1082,8 +1121,10 @@ "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", + "sha256:19536834abffb3fa155017053c607cb835b2ecc6a3a2554a88043d991dffb736", "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:3d61f15e39611aacd91b7e71d903787da86d9e80896e683c0103fced9add7834", "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", @@ -1093,6 +1134,7 @@ "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:7952deddf24b85c88dab48f6ec366ac6e39d2761b5280f2f9594911e03fcd064", "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", @@ -1195,6 +1237,7 @@ }, "pytest-forked": { "hashes": [ + "sha256:2d1bfc93ab65a28324eb0a63503bfb500c2da6916efede7a24b43a04970fe63c", "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca", "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815" ], @@ -1233,11 +1276,11 @@ }, "requests": { "hashes": [ - "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", - "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898" + "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8", + "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.24.0" + "version": "==2.25.0" }, "six": { "hashes": [ @@ -1262,6 +1305,14 @@ "index": "pypi", "version": "==3.3.0" }, + "sphinx-rtd-theme": { + "hashes": [ + "sha256:22c795ba2832a169ca301cd0a083f7a434e09c538c70beb42782c073651b707d", + "sha256:373413d0f82425aaa28fb288009bf0d0964711d347763af2f1b65cafcb028c82" + ], + "index": "pypi", + "version": "==0.5.0" + }, "sphinxcontrib-applehelp": { "hashes": [ "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a", @@ -1312,6 +1363,7 @@ }, "termcolor": { "hashes": [ + "sha256:19b1225d03bfb56571484caaa8521d8ec6e2473ae1640c9f48a48dda49417706", "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b" ], "version": "==1.1.0" @@ -1341,11 +1393,11 @@ }, "urllib3": { "hashes": [ - "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2", - "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e" + "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08", + "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.25.11" + "version": "==1.26.2" }, "virtualenv": { "hashes": [ From 4a6b8ef138c5b31dc3a8508cc26c252ccfedf788 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Fri, 20 Nov 2020 10:58:17 +0100 Subject: [PATCH 008/898] small changes --- src/documents/consumer.py | 6 +++--- src/paperless/settings.py | 18 +++++++++--------- src/paperless_tesseract/parsers.py | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 973fff925..8edbb00a3 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -223,9 +223,9 @@ class Consumer(LoggingMixin): self.log("debug", "Deleting file {}".format(self.path)) os.unlink(self.path) except Exception as e: - raise ConsumerError(e) - self._send_progress(file, 100, 100, 'FAILED', + self._send_progress(self.filename, 100, 100, 'FAILED', "Failed: {}".format(e)) + raise ConsumerError(e) finally: document_parser.cleanup() @@ -234,7 +234,7 @@ class Consumer(LoggingMixin): "Document {} consumption finished".format(document) ) - self._send_progress(file, 100, 100, 'SUCCESS', + self._send_progress(self.filename, 100, 100, 'SUCCESS', 'Finished.', document.id) return document diff --git a/src/paperless/settings.py b/src/paperless/settings.py index cb115739b..37b046b2a 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -143,6 +143,15 @@ TEMPLATES = [ }, ] +CHANNEL_LAYERS = { + "default": { + "BACKEND": "channels_redis.core.RedisChannelLayer", + "CONFIG": { + "hosts": ["redis://localhost:6379"], + }, + }, +} + ############################################################################### # Security # ############################################################################### @@ -376,12 +385,3 @@ for t in json.loads(os.getenv("PAPERLESS_FILENAME_PARSE_TRANSFORMS", "[]")): # TODO: this should not have a prefix. # Specify the filename format for out files PAPERLESS_FILENAME_FORMAT = os.getenv("PAPERLESS_FILENAME_FORMAT") - -CHANNEL_LAYERS = { - "default": { - "BACKEND": "channels_redis.core.RedisChannelLayer", - "CONFIG": { - "hosts": [("broker", 6379)], - }, - }, -} diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index c3715c83a..11a6c8b37 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -90,7 +90,7 @@ class RasterisedDocumentParser(DocumentParser): self._text = get_text_from_pdf(self.document_path) return self._text - self.progress_callback(0,1,"Making greyscale images.") + self.progress_callback(0, 1, "Making greyscale images.") images = self._get_greyscale() if not images: From e9f55d9b3d4234bd59149943840803ef939d5d9a Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Sun, 22 Nov 2020 23:12:24 +0100 Subject: [PATCH 009/898] post-merge changes --- Pipfile.lock | 430 +++++++++++++++++- src-ui/src/app/app.module.ts | 2 + .../consumer-status-widget.component.html | 18 +- ... => consumer-status-widget.component.scss} | 0 .../consumer-status-widget.component.ts | 2 +- .../file-upload-widget.component.css | 0 .../file-upload-widget.component.html | 11 - .../file-upload-widget.component.spec.ts | 25 - .../file-upload-widget.component.ts | 44 -- .../upload-file-widget.component.ts | 4 +- 10 files changed, 437 insertions(+), 99 deletions(-) rename src-ui/src/app/components/dashboard/widgets/consumer-status-widget/{consumer-status-widget.component.css => consumer-status-widget.component.scss} (100%) delete mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.css delete mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html delete mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts delete mode 100644 src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts diff --git a/Pipfile.lock b/Pipfile.lock index 6ecca3c34..2dd198e14 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "ae2643b9cf0cf5741ae149fb6bc0c480de41329ce48e773eb4b5d760bc5e2244" + "sha256": "83cb61d0f0de0ad70aa02e8424deb743331c3578a67ee17ed06394506fdb2c14" }, "pipfile-spec": 6, "requires": {}, @@ -19,6 +19,13 @@ ] }, "default": { + "aioredis": { + "hashes": [ + "sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a", + "sha256:b61808d7e97b7cd5a92ed574937a079c9387fdadd22bfbfa7ad2fd319ecc26e3" + ], + "version": "==1.3.1" + }, "arrow": { "hashes": [ "sha256:e098abbd9af3665aea81bdd6c869e93af4feb078e98468dd351c383af187aac5", @@ -35,6 +42,39 @@ "markers": "python_version >= '3.5'", "version": "==3.3.1" }, + "async-timeout": { + "hashes": [ + "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f", + "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==3.0.1" + }, + "attrs": { + "hashes": [ + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.3.0" + }, + "autobahn": { + "hashes": [ + "sha256:1eafbbe363a7924fd21bb0b94ece9f3ac2a9aa9c2046e8a85e044f94e8ba2028", + "sha256:24ce276d313e84d68241c3aef30d484f352b90a40168981b3640312c821df77b", + "sha256:86bbce30cdd407137c57670993a8f9bfdfe3f8e994b889181d85e844d5aa8dfb" + ], + "markers": "python_version >= '3.5'", + "version": "==20.7.1" + }, + "automat": { + "hashes": [ + "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", + "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111", + "sha256:d6d976cf8da698fc85fa7def46e2544493f78cb7ee72d2f4acd1a5c759a3060e" + ], + "version": "==20.2.0" + }, "blessed": { "hashes": [ "sha256:7d4914079a6e8e14fbe080dcaf14dee596a088057cdc598561080e3266123b48", @@ -42,6 +82,110 @@ ], "version": "==1.17.11" }, + "cffi": { + "hashes": [ + "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d", + "sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b", + "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4", + "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f", + "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3", + "sha256:178a2db1589cb9b0b5b28a74ee0c9d4438bd96f8c6c0ac85662ff3c98f7f8d20", + "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579", + "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537", + "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e", + "sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05", + "sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171", + "sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca", + "sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522", + "sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c", + "sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc", + "sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d", + "sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808", + "sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828", + "sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869", + "sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d", + "sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9", + "sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0", + "sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc", + "sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15", + "sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c", + "sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a", + "sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3", + "sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1", + "sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768", + "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d", + "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b", + "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e", + "sha256:df90c0c9e383e8c3bdced39f113ecc36fa9c623dd04dd1b5199e9edc53389a95", + "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d", + "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730", + "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394", + "sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1", + "sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591" + ], + "version": "==1.14.3" + }, + "channels": { + "hashes": [ + "sha256:74db79c9eca616be69d38013b22083ab5d3f9ccda1ab5e69096b1bb7da2d9b18", + "sha256:f50a6e79757a64c1e45e95e144a2ac5f1e99ee44a0718ab182c501f5e5abd268" + ], + "index": "pypi", + "version": "==3.0.2" + }, + "channels-redis": { + "hashes": [ + "sha256:18d63f6462a58011740dc8eeb57ea4b31ec220eb551cb71b27de9c6779a549de", + "sha256:2fb31a63b05373f6402da2e6a91a22b9e66eb8b56626c6bfc93e156c734c5ae6" + ], + "index": "pypi", + "version": "==3.2.0" + }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "version": "==15.1.0" + }, + "cryptography": { + "hashes": [ + "sha256:07ca431b788249af92764e3be9a488aa1d39a0bc3be313d826bbec690417e538", + "sha256:13b88a0bd044b4eae1ef40e265d006e34dbcde0c2f1e15eb9896501b2d8f6c6f", + "sha256:257dab4f368fae15f378ea9a4d2799bf3696668062de0e9fa0ebb7a738a6917d", + "sha256:32434673d8505b42c0de4de86da8c1620651abd24afe91ae0335597683ed1b77", + "sha256:3cd75a683b15576cfc822c7c5742b3276e50b21a06672dc3a800a2d5da4ecd1b", + "sha256:4e7268a0ca14536fecfdf2b00297d4e407da904718658c1ff1961c713f90fd33", + "sha256:545a8550782dda68f8cdc75a6e3bf252017aa8f75f19f5a9ca940772fc0cb56e", + "sha256:55d0b896631412b6f0c7de56e12eb3e261ac347fbaa5d5e705291a9016e5f8cb", + "sha256:5849d59358547bf789ee7e0d7a9036b2d29e9a4ddf1ce5e06bb45634f995c53e", + "sha256:59f7d4cfea9ef12eb9b14b83d79b432162a0a24a91ddc15c2c9bf76a68d96f2b", + "sha256:6dc59630ecce8c1f558277ceb212c751d6730bd12c80ea96b4ac65637c4f55e7", + "sha256:7117319b44ed1842c617d0a452383a5a052ec6aa726dfbaffa8b94c910444297", + "sha256:75e8e6684cf0034f6bf2a97095cb95f81537b12b36a8fedf06e73050bb171c2d", + "sha256:7b8d9d8d3a9bd240f453342981f765346c87ade811519f98664519696f8e6ab7", + "sha256:a035a10686532b0587d58a606004aa20ad895c60c4d029afa245802347fab57b", + "sha256:a4e27ed0b2504195f855b52052eadcc9795c59909c9d84314c5408687f933fc7", + "sha256:a733671100cd26d816eed39507e585c156e4498293a907029969234e5e634bc4", + "sha256:a75f306a16d9f9afebfbedc41c8c2351d8e61e818ba6b4c40815e2b5740bb6b8", + "sha256:bd717aa029217b8ef94a7d21632a3bb5a4e7218a4513d2521c2a2fd63011e98b", + "sha256:d25cecbac20713a7c3bc544372d42d8eafa89799f492a43b79e1dfd650484851", + "sha256:d26a2557d8f9122f9bf445fc7034242f4375bd4e95ecda007667540270965b13", + "sha256:d3545829ab42a66b84a9aaabf216a4dce7f16dbc76eb69be5c302ed6b8f4a29b", + "sha256:d3d5e10be0cf2a12214ddee45c6bd203dab435e3d83b4560c03066eda600bfe3", + "sha256:efe15aca4f64f3a7ea0c09c87826490e50ed166ce67368a68f315ea0807a20df" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==3.2.1" + }, + "daphne": { + "hashes": [ + "sha256:0052c9887600c57054a5867d4b0240159fa009faa3bcf6a1627271d9cdcb005a", + "sha256:c22b692707f514de9013651ecb687f2abe4f35cf6fe292ece634e9f1737bc7e3" + ], + "index": "pypi", + "version": "==3.0.1" + }, "dateparser": { "hashes": [ "sha256:7552c994f893b5cb8fcf103b4cd2ff7f57aab9bfd2619fdf0cf571c0740fd90b", @@ -121,6 +265,77 @@ "index": "pypi", "version": "==20.0.4" }, + "hiredis": { + "hashes": [ + "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", + "sha256:0a909bf501459062aa1552be1461456518f367379fdc9fdb1f2ca5e4a1fdd7c0", + "sha256:18402d9e54fb278cb9a8c638df6f1550aca36a009d47ecf5aa263a38600f35b0", + "sha256:1e4cbbc3858ec7e680006e5ca590d89a5e083235988f26a004acf7244389ac01", + "sha256:23344e3c2177baf6975fbfa361ed92eb7d36d08f454636e5054b3faa7c2aff8a", + "sha256:289b31885b4996ce04cadfd5fc03d034dce8e2a8234479f7c9e23b9e245db06b", + "sha256:2c1c570ae7bf1bab304f29427e2475fe1856814312c4a1cf1cd0ee133f07a3c6", + "sha256:2c227c0ed371771ffda256034427320870e8ea2e4fd0c0a618c766e7c49aad73", + "sha256:3bb9b63d319402cead8bbd9dd55dca3b667d2997e9a0d8a1f9b6cc274db4baee", + "sha256:3ef2183de67b59930d2db8b8e8d4d58e00a50fcc5e92f4f678f6eed7a1c72d55", + "sha256:43b8ed3dbfd9171e44c554cb4acf4ee4505caa84c5e341858b50ea27dd2b6e12", + "sha256:47bcf3c5e6c1e87ceb86cdda2ee983fa0fe56a999e6185099b3c93a223f2fa9b", + "sha256:5263db1e2e1e8ae30500cdd75a979ff99dcc184201e6b4b820d0de74834d2323", + "sha256:5b1451727f02e7acbdf6aae4e06d75f66ee82966ff9114550381c3271a90f56c", + "sha256:6996883a8a6ff9117cbb3d6f5b0dcbbae6fb9e31e1a3e4e2f95e0214d9a1c655", + "sha256:6c96f64a54f030366657a54bb90b3093afc9c16c8e0dfa29fc0d6dbe169103a5", + "sha256:7332d5c3e35154cd234fd79573736ddcf7a0ade7a986db35b6196b9171493e75", + "sha256:7885b6f32c4a898e825bb7f56f36a02781ac4a951c63e4169f0afcf9c8c30dfb", + "sha256:7b0f63f10a166583ab744a58baad04e0f52cfea1ac27bfa1b0c21a48d1003c23", + "sha256:819f95d4eba3f9e484dd115ab7ab72845cf766b84286a00d4ecf76d33f1edca1", + "sha256:8968eeaa4d37a38f8ca1f9dbe53526b69628edc9c42229a5b2f56d98bb828c1f", + "sha256:89ebf69cb19a33d625db72d2ac589d26e936b8f7628531269accf4a3196e7872", + "sha256:8daecd778c1da45b8bd54fd41ffcd471a86beed3d8e57a43acf7a8d63bba4058", + "sha256:955ba8ea73cf3ed8bd2f963b4cb9f8f0dcb27becd2f4b3dd536fd24c45533454", + "sha256:964f18a59f5a64c0170f684c417f4fe3e695a536612e13074c4dd5d1c6d7c882", + "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", + "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", + "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", + "sha256:9f4e67f87e072de981570eaf7cb41444bbac7e92b05c8651dbab6eb1fb8d5a14", + "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", + "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", + "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", + "sha256:abfb15a6a7822f0fae681785cb38860e7a2cb1616a708d53df557b3d76c5bfd4", + "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", + "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", + "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", + "sha256:b39989b49e8aca9d224324d2650029eda410a4faf43f6afb0eb4f9acb7be6097", + "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", + "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", + "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", + "sha256:cdfd501c7ac5b198c15df800a3a34c38345f5182e5f80770caf362bccca65628", + "sha256:d2c0caffa47606d6d7c8af94ba42547bd2a441f06c74fd90a1ffe328524a6c64", + "sha256:dcb2db95e629962db5a355047fb8aefb012df6c8ae608930d391619dbd96fd86", + "sha256:e0eeb9c112fec2031927a1745788a181d0eecbacbed941fc5c4f7bc3f7b273bf", + "sha256:e154891263306200260d7f3051982774d7b9ef35af3509d5adbbe539afd2610c", + "sha256:e2e023a42dcbab8ed31f97c2bcdb980b7fbe0ada34037d87ba9d799664b58ded", + "sha256:e64be68255234bb489a574c4f2f8df7029c98c81ec4d160d6cd836e7f0679390", + "sha256:e82d6b930e02e80e5109b678c663a9ed210680ded81c1abaf54635d88d1da298" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.1.0" + }, + "hyperlink": { + "hashes": [ + "sha256:402c1b5fa066ea368f3118fc5a6f8505440b4d1a4ef12a844ca39332a4a29944", + "sha256:47fcc7cd339c6cb2444463ec3277bdcfe142c8b1daf2160bdd52248deec815af", + "sha256:c528d405766f15a2c536230de7e160b65a08e20264d8891b3eb03307b0df3c63" + ], + "version": "==20.0.1" + }, + "idna": { + "hashes": [ + "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", + "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", + "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.10" + }, "imap-tools": { "hashes": [ "sha256:96e9a4ff6483462635737730a1df28e739faa71967b12a84f4363fb386542246", @@ -129,6 +344,13 @@ "index": "pypi", "version": "==0.32.0" }, + "incremental": { + "hashes": [ + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + ], + "version": "==17.5.0" + }, "joblib": { "hashes": [ "sha256:698c311779f347cf6b7e6b8a39bb682277b8ee4aba8cf9507bc0cf4cd4737b72", @@ -146,6 +368,32 @@ "index": "pypi", "version": "==1.0.8" }, + "msgpack": { + "hashes": [ + "sha256:002a0d813e1f7b60da599bdf969e632074f9eec1b96cbed8fb0973a63160a408", + "sha256:0e7b5a69ec5645b0a85baaa354c29acd89eb879aaa89e7f4b37ed4d9c5abafe0", + "sha256:25b3bc3190f3d9d965b818123b7752c5dfb953f0d774b454fd206c18fe384fb8", + "sha256:271b489499a43af001a2e42f42d876bb98ccaa7e20512ff37ca78c8e12e68f84", + "sha256:39c54fdebf5fa4dda733369012c59e7d085ebdfe35b6cf648f09d16708f1be5d", + "sha256:4233b7f86c1208190c78a525cd3828ca1623359ef48f78a6fea4b91bb995775a", + "sha256:5bea44181fc8e18eed1d0cd76e355073f00ce232ff9653a0ae88cb7d9e643322", + "sha256:5dba6d074fac9b24f29aaf1d2d032306c27f04187651511257e7831733293ec2", + "sha256:71604047feea609ad65f5b837ec89a4de084d55a80f8af7331745a075c3dbd23", + "sha256:7a22c965588baeb07242cb561b63f309db27a07382825fc98aecaf0827c1538e", + "sha256:908944e3f038bca67fcfedb7845c4a257c7749bf9818632586b53bcf06ba4b97", + "sha256:9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0", + "sha256:aa5c057eab4f40ec47ea6f5a9825846be2ff6bf34102c560bad5cad5a677c5be", + "sha256:b3758dfd3423e358bbb18a7cccd1c74228dffa7a697e5be6cb9535de625c0dbf", + "sha256:c901e8058dd6653307906c5f157f26ed09eb94a850dddd989621098d347926ab", + "sha256:cec8bf10981ed70998d98431cd814db0ecf3384e6b113366e7f36af71a0fca08", + "sha256:db685187a415f51d6b937257474ca72199f393dad89534ebbdd7d7a3b000080e", + "sha256:e35b051077fc2f3ce12e7c6a34cf309680c63a842db3a0616ea6ed25ad20d272", + "sha256:e7bbdd8e2b277b77782f3ce34734b0dfde6cbe94ddb74de8d733d603c7f9e2b1", + "sha256:ea41c9219c597f1d2bf6b374d951d310d58684b5de9dc4bd2976db9e1e22c140", + "sha256:f7c80ff32171193f18a127ea357118b920020cc0acb0730016bbda02b892a2d2" + ], + "version": "==1.0.0" + }, "numpy": { "hashes": [ "sha256:08308c38e44cc926bdfce99498b21eec1f848d24c302519e64203a8da99a97db", @@ -287,6 +535,58 @@ "index": "pypi", "version": "==2.8.6" }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, + "pycparser": { + "hashes": [ + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.20" + }, + "pyhamcrest": { + "hashes": [ + "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316", + "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29" + ], + "markers": "python_version >= '3.5'", + "version": "==2.0.2" + }, "pyocr": { "hashes": [ "sha256:fa15adc7e1cf0d345a2990495fe125a947c6e09a60ddba0256a1c14b2e603179", @@ -295,6 +595,13 @@ "index": "pypi", "version": "==0.7.2" }, + "pyopenssl": { + "hashes": [ + "sha256:621880965a720b8ece2f1b2f54ea2071966ab00e2970ad2ce11d596102063504", + "sha256:9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507" + ], + "version": "==19.1.0" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -456,6 +763,13 @@ "markers": "python_version >= '3.6'", "version": "==1.5.4" }, + "service-identity": { + "hashes": [ + "sha256:001c0707759cb3de7e49c078a7c0c9cd12594161d3bf06b9c254fdcb1a60dc36", + "sha256:0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d" + ], + "version": "==18.1.0" + }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", @@ -480,6 +794,48 @@ "markers": "python_version >= '3.5'", "version": "==2.1.0" }, + "twisted": { + "extras": [ + "tls" + ], + "hashes": [ + "sha256:0150dae5adc962d15e00054cc6926f1e64763fb8dd26e1632593ac06e592104b", + "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", + "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", + "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", + "sha256:15e52271f08f62e2230ff093e0278aa01c9dac057c4557cadadd2429eed86a3e", + "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", + "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", + "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", + "sha256:356e8d8dd3590e790e3dba4db139eb8a17aca64b46629c622e1b1597a4a92478", + "sha256:70952c56e4965b9f53b180daecf20a9595cf22b8d0935cd3bd664c90273c3ab2", + "sha256:7408c6635ee1b96587289283ebe90ee15dbf9614b05857b446055116bc822d29", + "sha256:7c547fd0215db9da8a1bc23182b309e84a232364cc26d829e9ee196ce840b114", + "sha256:894f6f3cfa57a15ea0d0714e4283913a5f2511dbd18653dd148eba53b3919797", + "sha256:94ac3d55a58c90e2075c5fe1853f2aa3892b73e3bf56395f743aefde8605eeaa", + "sha256:a58e61a2a01e5bcbe3b575c0099a2bcb8d70a75b1a087338e0c48dd6e01a5f15", + "sha256:c09c47ff9750a8e3aa60ad169c4b95006d455a29b80ad0901f031a103b2991cd", + "sha256:ca3a0b8c9110800e576d89b5337373e52018b41069bc879f12fa42b7eb2d0274", + "sha256:cd1dc5c85b58494138a3917752b54bb1daa0045d234b7c132c37a61d5483ebad", + "sha256:cdbc4c7f0cd7a2218b575844e970f05a1be1861c607b0e048c9bceca0c4d42f7", + "sha256:d267125cc0f1e8a0eed6319ba4ac7477da9b78a535601c49ecd20c875576433a", + "sha256:d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10", + "sha256:d95803193561a243cb0401b0567c6b7987d3f2a67046770e1dccd1c9e49a9780", + "sha256:e92703bed0cc21d6cb5c61d66922b3b1564015ca8a51325bd164a5e33798d504", + "sha256:f058bd0168271de4dcdc39845b52dd0a4a2fecf5f1246335f13f5e96eaebb467", + "sha256:f3c19e5bd42bbe4bf345704ad7c326c74d3fd7a1b3844987853bef180be638d4" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.3.0" + }, + "txaio": { + "hashes": [ + "sha256:17938f2bca4a9cabce61346758e482ca4e600160cbc28e861493eac74a19539d", + "sha256:38a469daf93c37e5527cb062653d6393ae11663147c42fab7ddc3f6d00d434ae" + ], + "markers": "python_version >= '3.5'", + "version": "==20.4.1" + }, "tzlocal": { "hashes": [ "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", @@ -518,6 +874,66 @@ ], "index": "pypi", "version": "==2.7.4" + }, + "zope.interface": { + "hashes": [ + "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", + "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:09fc3922f235703c0b76f8234867685eee68a24a49fffa2220975f6142db45f1", + "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", + "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", + "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", + "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", + "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", + "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", + "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", + "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", + "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", + "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", + "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", + "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", + "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", + "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", + "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", + "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", + "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", + "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", + "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", + "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", + "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", + "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", + "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", + "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", + "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", + "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", + "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", + "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", + "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", + "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", + "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", + "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", + "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", + "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:974f5957e66a7524ea81df7b2686a456bfaf0408dbb7353ddfbedb594eadfef6", + "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", + "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", + "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", + "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", + "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", + "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", + "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", + "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", + "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", + "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", + "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", + "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", + "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", + "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", + "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", + "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==5.2.0" } }, "develop": { @@ -663,11 +1079,11 @@ }, "faker": { "hashes": [ - "sha256:3f5d379e4b5ce92a8afe3c2ce59d7c43886370dd3bf9495a936b91888debfc81", - "sha256:8c0e8a06acef4b9312902e2ce18becabe62badd3a6632180bd0680c6ee111473" + "sha256:5398268e1d751ffdb3ed36b8a790ed98659200599b368eec38a02eed15bce997", + "sha256:d4183b8f57316de3be27cd6c3b40e9f9343d27c95c96179f027316c58c2c239e" ], "markers": "python_version >= '3.5'", - "version": "==4.17.0" + "version": "==4.17.1" }, "filelock": { "hashes": [ @@ -999,11 +1415,11 @@ }, "virtualenv": { "hashes": [ - "sha256:b0011228208944ce71052987437d3843e05690b2f23d1c7da4263fde104c97a2", - "sha256:b8d6110f493af256a40d65e29846c69340a947669eec8ce784fcf3dd3af28380" + "sha256:6af42359fbb33a6c7eab4d3246524b96fd9d8e07e7141b7a65998f96e28b2c57", + "sha256:fd4147c5ba3f694e2e4fc3c767407dc2226899623bb9b49c2f15637c2ee335b3" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.1.0" + "version": "==20.2.0" } } } diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 3ccb1c5f1..2a70af813 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -45,6 +45,7 @@ import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-v import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'; import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'; import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'; +import { ConsumerStatusWidgetComponent } from './components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component'; @NgModule({ declarations: [ @@ -82,6 +83,7 @@ import { WidgetFrameComponent } from './components/dashboard/widgets/widget-fram SavedViewWidgetComponent, StatisticsWidgetComponent, UploadFileWidgetComponent, + ConsumerStatusWidgetComponent, WidgetFrameComponent ], imports: [ diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html index d6559e184..ff2117729 100644 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html @@ -1,10 +1,10 @@ -<h4 class="mt-3">Document consumer status</h4> - -<div class="mb-2 border-bottom" *ngFor="let s of getStatus()"> - <div class="mb-1"><strong>{{s.filename}}:</strong> {{s.message}}</div> - <ngb-progressbar [type]="getType(s.status)" [value]="s.current_progress" [max]="s.max_progress" class="mb-2"></ngb-progressbar> - <div *ngIf="isFinished(s)" class="mb-2"> - <button *ngIf="s.document_id" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{s.document_id}}" (click)="dismiss(s)">Open document</button> - <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(s)">Dismiss</button> +<app-widget-frame title="Document consumer status"> + <div class="mb-2 border-bottom" *ngFor="let s of getStatus()"> + <div class="mb-1"><strong>{{s.filename}}:</strong> {{s.message}}</div> + <ngb-progressbar [type]="getType(s.status)" [value]="s.current_progress" [max]="s.max_progress" class="mb-2"></ngb-progressbar> + <div *ngIf="isFinished(s)" class="mb-2"> + <button *ngIf="s.document_id" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{s.document_id}}" (click)="dismiss(s)">Open document</button> + <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(s)">Dismiss</button> + </div> </div> -</div> \ No newline at end of file +</app-widget-frame> diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.css b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.scss similarity index 100% rename from src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.css rename to src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.scss diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts index 0c4e35682..8e44af6d5 100644 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts @@ -4,7 +4,7 @@ import { ConsumerStatusService, FileStatus } from 'src/app/services/consumer-sta @Component({ selector: 'app-consumer-status-widget', templateUrl: './consumer-status-widget.component.html', - styleUrls: ['./consumer-status-widget.component.css'] + styleUrls: ['./consumer-status-widget.component.scss'] }) export class ConsumerStatusWidgetComponent implements OnInit { diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.css b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html deleted file mode 100644 index 0c5ea634a..000000000 --- a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.html +++ /dev/null @@ -1,11 +0,0 @@ -<h4>Upload new Document</h4> -<form> - <ngx-file-drop - dropZoneLabel="Drop documents here" - (onFileDrop)="dropped($event)" - (onFileOver)="fileOver($event)" - (onFileLeave)="fileLeave($event)" - dropZoneClassName="bg-light mt-4 card"> - - </ngx-file-drop> -</form> \ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts deleted file mode 100644 index 847f5288b..000000000 --- a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { FileUploadWidgetComponent } from './file-upload-widget.component'; - -describe('FileUploadWidgetComponent', () => { - let component: FileUploadWidgetComponent; - let fixture: ComponentFixture<FileUploadWidgetComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ FileUploadWidgetComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(FileUploadWidgetComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts deleted file mode 100644 index 5d4bac936..000000000 --- a/src-ui/src/app/components/dashboard/widgets/file-upload-widget/file-upload-widget.component.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'; -import { DocumentService } from 'src/app/services/rest/document.service'; -import { ToastService } from 'src/app/services/toast.service'; - -@Component({ - selector: 'app-file-upload-widget', - templateUrl: './file-upload-widget.component.html', - styleUrls: ['./file-upload-widget.component.css'] -}) -export class FileUploadWidgetComponent implements OnInit { - - constructor(private documentService: DocumentService, private toastService: ToastService) { } - - ngOnInit(): void { - } - - public fileOver(event){ - console.log(event); - } - - public fileLeave(event){ - console.log(event); - } - - public dropped(files: NgxFileDropEntry[]) { - for (const droppedFile of files) { - if (droppedFile.fileEntry.isFile) { - const fileEntry = droppedFile.fileEntry as FileSystemFileEntry; - console.log(fileEntry) - fileEntry.file((file: File) => { - console.log(file) - const formData = new FormData() - formData.append('document', file, file.name) - this.documentService.uploadDocument(formData).subscribe(result => { - this.toastService.showInfo("The document has been uploaded and will be processed by the consumer shortly.") - }, error => { - this.toastService.showError("An error has occured while uploading the document. Sorry!") - }) - }); - } - } - } -} diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index a95d5f4db..cb13b2d74 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -33,9 +33,9 @@ export class UploadFileWidgetComponent implements OnInit { const formData = new FormData() formData.append('document', file, file.name) this.documentService.uploadDocument(formData).subscribe(result => { - this.toastService.showToast(Toast.make("Information", "The document has been uploaded and will be processed by the consumer shortly.")) + this.toastService.showInfo("The document has been uploaded and will be processed by the consumer shortly.") }, error => { - this.toastService.showToast(Toast.makeError("An error has occured while uploading the document. Sorry!")) + this.toastService.showError("An error has occured while uploading the document. Sorry!") }) }); } From 98787f5f4d79d5ac7b55052233ebb54199b0b732 Mon Sep 17 00:00:00 2001 From: jayme-github <jayme-github@users.noreply.github.com> Date: Thu, 3 Dec 2020 20:12:55 +0100 Subject: [PATCH 010/898] Add automatic coloring of tags Please see this as proposal on how to implement automatic/random colors for tags while keeping the current set of hard coded colors in place (at least in the frontend). Bear with me as I have even less Angular knowledge than Django and just tried to get away with as few changes as possible. :-) AIUI you want to change to a color picking system anyways in the future, which could also play well with this. fixes #51 --- Pipfile | 1 + .../components/common/tag/tag.component.html | 4 +- .../components/common/tag/tag.component.ts | 6 +- .../tag-edit-dialog.component.html | 2 +- .../tag-edit-dialog.component.ts | 6 +- .../manage/tag-list/tag-list.component.html | 2 +- .../manage/tag-list/tag-list.component.ts | 8 ++- src-ui/src/app/data/paperless-tag.ts | 31 ++++---- .../migrations/1006_migrate_tag_colour.py | 70 +++++++++++++++++++ src/documents/models.py | 28 +++----- 10 files changed, 116 insertions(+), 42 deletions(-) create mode 100644 src/documents/migrations/1006_migrate_tag_colour.py diff --git a/Pipfile b/Pipfile index c0728fddf..1cf5a312f 100644 --- a/Pipfile +++ b/Pipfile @@ -40,6 +40,7 @@ whoosh="~=2.7.4" inotifyrecursive = ">=0.3.4" ocrmypdf = "*" tqdm = "*" +colorhash = "*" [dev-packages] coveralls = "*" diff --git a/src-ui/src/app/components/common/tag/tag.component.html b/src-ui/src/app/components/common/tag/tag.component.html index 8b9632a65..29c554142 100644 --- a/src-ui/src/app/components/common/tag/tag.component.html +++ b/src-ui/src/app/components/common/tag/tag.component.html @@ -1,2 +1,2 @@ -<span *ngIf="!clickable" class="badge" [style.background]="getColour().value" [style.color]="getColour().textColor">{{tag.name}}</span> -<a [routerLink]="" [title]="linkTitle" *ngIf="clickable" class="badge" [style.background]="getColour().value" [style.color]="getColour().textColor">{{tag.name}}</a> \ No newline at end of file +<span *ngIf="!clickable" class="badge" [style.background]="getColour().id" [style.color]="getColour().textColor">{{tag.name}}</span> +<a [routerLink]="" [title]="linkTitle" *ngIf="clickable" class="badge" [style.background]="getColour().id" [style.color]="getColour().textColor">{{tag.name}}</a> \ No newline at end of file diff --git a/src-ui/src/app/components/common/tag/tag.component.ts b/src-ui/src/app/components/common/tag/tag.component.ts index c032c51db..163960f3d 100644 --- a/src-ui/src/app/components/common/tag/tag.component.ts +++ b/src-ui/src/app/components/common/tag/tag.component.ts @@ -23,7 +23,11 @@ export class TagComponent implements OnInit { } getColour() { - return TAG_COLOURS.find(c => c.id == this.tag.colour) + var color = TAG_COLOURS.find(c => c.id == this.tag.colour) + if (color) { + return color + } + return { id: this.tag.colour, name: this.tag.colour, textColor: "#ffffff" } } } diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html index 8048b0c80..2f6dded52 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html @@ -7,7 +7,7 @@ </div> <div class="modal-body"> <app-input-text title="Name" formControlName="name"></app-input-text> - <app-input-select title="Colour" [items]="getColours()" formControlName="colour" [textColor]="getColor(objectForm.value.colour).textColor" [backgroundColor]="getColor(objectForm.value.colour).value"></app-input-select> + <app-input-select title="Colour" [items]="getColours()" formControlName="colour" [textColor]="getColor(objectForm.value.colour).textColor" [backgroundColor]="getColor(objectForm.value.colour).id"></app-input-select> <app-input-check title="Inbox tag" formControlName="is_inbox_tag" hint="Inbox tags are automatically assigned to all consumed documents."></app-input-check> <app-input-text title="Match" formControlName="match"></app-input-text> <app-input-select title="Matching algorithm" [items]="getMatchingAlgorithms()" formControlName="matching_algorithm"></app-input-select> diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts index bb0162608..8017f275b 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts @@ -13,14 +13,14 @@ import { ToastService } from 'src/app/services/toast.service'; }) export class TagEditDialogComponent extends EditDialogComponent<PaperlessTag> { - constructor(service: TagService, activeModal: NgbActiveModal, toastService: ToastService) { + constructor(service: TagService, activeModal: NgbActiveModal, toastService: ToastService) { super(service, activeModal, toastService, 'tag') } getForm(): FormGroup { return new FormGroup({ name: new FormControl(''), - colour: new FormControl(1), + colour: new FormControl(''), is_inbox_tag: new FormControl(false), matching_algorithm: new FormControl(1), match: new FormControl(""), @@ -32,7 +32,7 @@ export class TagEditDialogComponent extends EditDialogComponent<PaperlessTag> { return TAG_COLOURS } - getColor(id: number) { + getColor(id) { return TAG_COLOURS.find(c => c.id == id) } diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.html b/src-ui/src/app/components/manage/tag-list/tag-list.component.html index e68b997d1..8923ad210 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.html @@ -23,7 +23,7 @@ <tr *ngFor="let tag of data"> <td scope="row">{{ tag.name }}</td> <td scope="row"><span class="badge" [style.color]="getColor(tag.colour).textColor" - [style.background-color]="getColor(tag.colour).value">{{ getColor(tag.colour).name }}</span></td> + [style.background-color]="tag.colour">{{ getColor(tag.colour).name }}</span></td> <td scope="row">{{ getMatching(tag) }}</td> <td scope="row">{{ tag.document_count }}</td> <td scope="row"> diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.ts b/src-ui/src/app/components/manage/tag-list/tag-list.component.ts index 761a9484c..582835de1 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.ts @@ -15,10 +15,14 @@ export class TagListComponent extends GenericListComponent<PaperlessTag> { constructor(tagService: TagService, modalService: NgbModal) { super(tagService, modalService, TagEditDialogComponent) - } + } getColor(id) { - return TAG_COLOURS.find(c => c.id == id) + var color = TAG_COLOURS.find(c => c.id == id) + if (color) { + return color + } + return { id: id, name: id, textColor: "#ffffff" } } getObjectName(object: PaperlessTag) { diff --git a/src-ui/src/app/data/paperless-tag.ts b/src-ui/src/app/data/paperless-tag.ts index 551c6e03a..3d8ddfdaf 100644 --- a/src-ui/src/app/data/paperless-tag.ts +++ b/src-ui/src/app/data/paperless-tag.ts @@ -3,26 +3,27 @@ import { ObjectWithId } from './object-with-id'; export const TAG_COLOURS = [ - {id: 1, value: "#a6cee3", name: "Light Blue", textColor: "#000000"}, - {id: 2, value: "#1f78b4", name: "Blue", textColor: "#ffffff"}, - {id: 3, value: "#b2df8a", name: "Light Green", textColor: "#000000"}, - {id: 4, value: "#33a02c", name: "Green", textColor: "#000000"}, - {id: 5, value: "#fb9a99", name: "Light Red", textColor: "#000000"}, - {id: 6, value: "#e31a1c", name: "Red ", textColor: "#ffffff"}, - {id: 7, value: "#fdbf6f", name: "Light Orange", textColor: "#000000"}, - {id: 8, value: "#ff7f00", name: "Orange", textColor: "#000000"}, - {id: 9, value: "#cab2d6", name: "Light Violet", textColor: "#000000"}, - {id: 10, value: "#6a3d9a", name: "Violet", textColor: "#ffffff"}, - {id: 11, value: "#b15928", name: "Brown", textColor: "#000000"}, - {id: 12, value: "#000000", name: "Black", textColor: "#ffffff"}, - {id: 13, value: "#cccccc", name: "Light Grey", textColor: "#000000"} + { id: "", name: "Auto", textColor: "#000000" }, + { id: "#a6cee3", name: "Light Blue", textColor: "#000000" }, + { id: "#1f78b4", name: "Blue", textColor: "#ffffff" }, + { id: "#b2df8a", name: "Light Green", textColor: "#000000" }, + { id: "#33a02c", name: "Green", textColor: "#000000" }, + { id: "#fb9a99", name: "Light Red", textColor: "#000000" }, + { id: "#e31a1c", name: "Red ", textColor: "#ffffff" }, + { id: "#fdbf6f", name: "Light Orange", textColor: "#000000" }, + { id: "#ff7f00", name: "Orange", textColor: "#000000" }, + { id: "#cab2d6", name: "Light Violet", textColor: "#000000" }, + { id: "#6a3d9a", name: "Violet", textColor: "#ffffff" }, + { id: "#b15928", name: "Brown", textColor: "#000000" }, + { id: "#000000", name: "Black", textColor: "#ffffff" }, + { id: "#cccccc", name: "Light Grey", textColor: "#000000" } ] export interface PaperlessTag extends MatchingModel { - colour?: number + colour?: string is_inbox_tag?: boolean - + document_count?: number } diff --git a/src/documents/migrations/1006_migrate_tag_colour.py b/src/documents/migrations/1006_migrate_tag_colour.py new file mode 100644 index 000000000..d9bea8355 --- /dev/null +++ b/src/documents/migrations/1006_migrate_tag_colour.py @@ -0,0 +1,70 @@ +# Generated by Django 3.1.4 on 2020-12-02 21:43 + +from django.db import migrations, models + +COLOURS_OLD = { + 1: "#a6cee3", + 2: "#1f78b4", + 3: "#b2df8a", + 4: "#33a02c", + 5: "#fb9a99", + 6: "#e31a1c", + 7: "#fdbf6f", + 8: "#ff7f00", + 9: "#cab2d6", + 10: "#6a3d9a", + 11: "#b15928", + 12: "#000000", + 13: "#cccccc", +} + + +def forward(apps, schema_editor): + Tag = apps.get_model('documents', 'Tag') + + for tag in Tag.objects.all(): + colour_old_id = tag.colour_old + rgb = COLOURS_OLD[colour_old_id] + tag.colour = rgb + tag.save() + + +def reverse(apps, schema_editor): + Tag = apps.get_model('documents', 'Tag') + + def _get_colour_id(rdb): + for idx, rdbx in COLOURS_OLD.items(): + if rdbx == rdb: + return idx + # Return colour 1 if we can't match anything + return 1 + + for tag in Tag.objects.all(): + colour_id = _get_colour_id(tag.colour) + tag.colour_old = colour_id + tag.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1005_checksums'), + ] + + operations = [ + migrations.RenameField( + model_name='tag', + old_name='colour', + new_name='colour_old', + ), + migrations.AddField( + model_name='tag', + name='colour', + field=models.CharField(blank=True, max_length=7), + ), + migrations.RunPython(forward, reverse), + migrations.RemoveField( + model_name='tag', + name='colour_old', + ) + ] diff --git a/src/documents/models.py b/src/documents/models.py index a4f887d77..5491e4038 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -6,6 +6,7 @@ import re from collections import OrderedDict import dateutil.parser +from colorhash import ColorHash from django.conf import settings from django.db import models from django.utils import timezone @@ -84,23 +85,7 @@ class Correspondent(MatchingModel): class Tag(MatchingModel): - COLOURS = ( - (1, "#a6cee3"), - (2, "#1f78b4"), - (3, "#b2df8a"), - (4, "#33a02c"), - (5, "#fb9a99"), - (6, "#e31a1c"), - (7, "#fdbf6f"), - (8, "#ff7f00"), - (9, "#cab2d6"), - (10, "#6a3d9a"), - (11, "#b15928"), - (12, "#000000"), - (13, "#cccccc") - ) - - colour = models.PositiveIntegerField(choices=COLOURS, default=1) + colour = models.CharField(blank=True, max_length=7) is_inbox_tag = models.BooleanField( default=False, @@ -108,6 +93,15 @@ class Tag(MatchingModel): "documents will be tagged with inbox tags." ) + def save(self, *args, **kwargs): + if self.colour == "": + self.colour = ColorHash( + self.name, + lightness=(0.35, 0.45, 0.55, 0.65), + saturation=(0.2, 0.3, 0.4, 0.5)).hex + + super().save(*args, **kwargs) + class DocumentType(MatchingModel): From a76452028f823b37093496f722729eb565aa1ecc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 6 Dec 2020 22:54:11 +0100 Subject: [PATCH 011/898] pipfile fix --- Pipfile.lock | 337 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 335 insertions(+), 2 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 6158a70e0..13d1d74ea 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "b10db53eb22d917723aa6107ff0970dc4e2aa886ee03d3ae08a994a856d57986" + "sha256": "3faa161608e685d788b8921f80b810b176fd2b4ed9020d3e6322dffecbcb5542" }, "pipfile-spec": 6, "requires": { @@ -21,6 +21,13 @@ ] }, "default": { + "aioredis": { + "hashes": [ + "sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a", + "sha256:b61808d7e97b7cd5a92ed574937a079c9387fdadd22bfbfa7ad2fd319ecc26e3" + ], + "version": "==1.3.1" + }, "arrow": { "hashes": [ "sha256:e098abbd9af3665aea81bdd6c869e93af4feb078e98468dd351c383af187aac5", @@ -37,6 +44,39 @@ "markers": "python_version >= '3.5'", "version": "==3.3.1" }, + "async-timeout": { + "hashes": [ + "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f", + "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==3.0.1" + }, + "attrs": { + "hashes": [ + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.3.0" + }, + "autobahn": { + "hashes": [ + "sha256:1eafbbe363a7924fd21bb0b94ece9f3ac2a9aa9c2046e8a85e044f94e8ba2028", + "sha256:24ce276d313e84d68241c3aef30d484f352b90a40168981b3640312c821df77b", + "sha256:86bbce30cdd407137c57670993a8f9bfdfe3f8e994b889181d85e844d5aa8dfb" + ], + "markers": "python_version >= '3.5'", + "version": "==20.7.1" + }, + "automat": { + "hashes": [ + "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", + "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111", + "sha256:d6d976cf8da698fc85fa7def46e2544493f78cb7ee72d2f4acd1a5c759a3060e" + ], + "version": "==20.2.0" + }, "blessed": { "hashes": [ "sha256:0a74a8d3f0366db600d061273df77d44f0db07daade7bb7a4d49c8bc22ed9f74", @@ -87,6 +127,22 @@ ], "version": "==1.14.4" }, + "channels": { + "hashes": [ + "sha256:74db79c9eca616be69d38013b22083ab5d3f9ccda1ab5e69096b1bb7da2d9b18", + "sha256:f50a6e79757a64c1e45e95e144a2ac5f1e99ee44a0718ab182c501f5e5abd268" + ], + "index": "pypi", + "version": "==3.0.2" + }, + "channels-redis": { + "hashes": [ + "sha256:18d63f6462a58011740dc8eeb57ea4b31ec220eb551cb71b27de9c6779a549de", + "sha256:2fb31a63b05373f6402da2e6a91a22b9e66eb8b56626c6bfc93e156c734c5ae6" + ], + "index": "pypi", + "version": "==3.2.0" + }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", @@ -104,6 +160,13 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==14.0" }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "version": "==15.1.0" + }, "cryptography": { "hashes": [ "sha256:07ca431b788249af92764e3be9a488aa1d39a0bc3be313d826bbec690417e538", @@ -134,6 +197,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==3.2.1" }, + "daphne": { + "hashes": [ + "sha256:0052c9887600c57054a5867d4b0240159fa009faa3bcf6a1627271d9cdcb005a", + "sha256:c22b692707f514de9013651ecb687f2abe4f35cf6fe292ece634e9f1737bc7e3" + ], + "index": "pypi", + "version": "==3.0.1" + }, "dateparser": { "hashes": [ "sha256:7552c994f893b5cb8fcf103b4cd2ff7f57aab9bfd2619fdf0cf571c0740fd90b", @@ -213,6 +284,60 @@ "index": "pypi", "version": "==20.0.4" }, + "hiredis": { + "hashes": [ + "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", + "sha256:0a909bf501459062aa1552be1461456518f367379fdc9fdb1f2ca5e4a1fdd7c0", + "sha256:18402d9e54fb278cb9a8c638df6f1550aca36a009d47ecf5aa263a38600f35b0", + "sha256:1e4cbbc3858ec7e680006e5ca590d89a5e083235988f26a004acf7244389ac01", + "sha256:23344e3c2177baf6975fbfa361ed92eb7d36d08f454636e5054b3faa7c2aff8a", + "sha256:289b31885b4996ce04cadfd5fc03d034dce8e2a8234479f7c9e23b9e245db06b", + "sha256:2c1c570ae7bf1bab304f29427e2475fe1856814312c4a1cf1cd0ee133f07a3c6", + "sha256:2c227c0ed371771ffda256034427320870e8ea2e4fd0c0a618c766e7c49aad73", + "sha256:3bb9b63d319402cead8bbd9dd55dca3b667d2997e9a0d8a1f9b6cc274db4baee", + "sha256:3ef2183de67b59930d2db8b8e8d4d58e00a50fcc5e92f4f678f6eed7a1c72d55", + "sha256:43b8ed3dbfd9171e44c554cb4acf4ee4505caa84c5e341858b50ea27dd2b6e12", + "sha256:47bcf3c5e6c1e87ceb86cdda2ee983fa0fe56a999e6185099b3c93a223f2fa9b", + "sha256:5263db1e2e1e8ae30500cdd75a979ff99dcc184201e6b4b820d0de74834d2323", + "sha256:5b1451727f02e7acbdf6aae4e06d75f66ee82966ff9114550381c3271a90f56c", + "sha256:6996883a8a6ff9117cbb3d6f5b0dcbbae6fb9e31e1a3e4e2f95e0214d9a1c655", + "sha256:6c96f64a54f030366657a54bb90b3093afc9c16c8e0dfa29fc0d6dbe169103a5", + "sha256:7332d5c3e35154cd234fd79573736ddcf7a0ade7a986db35b6196b9171493e75", + "sha256:7885b6f32c4a898e825bb7f56f36a02781ac4a951c63e4169f0afcf9c8c30dfb", + "sha256:7b0f63f10a166583ab744a58baad04e0f52cfea1ac27bfa1b0c21a48d1003c23", + "sha256:819f95d4eba3f9e484dd115ab7ab72845cf766b84286a00d4ecf76d33f1edca1", + "sha256:8968eeaa4d37a38f8ca1f9dbe53526b69628edc9c42229a5b2f56d98bb828c1f", + "sha256:89ebf69cb19a33d625db72d2ac589d26e936b8f7628531269accf4a3196e7872", + "sha256:8daecd778c1da45b8bd54fd41ffcd471a86beed3d8e57a43acf7a8d63bba4058", + "sha256:955ba8ea73cf3ed8bd2f963b4cb9f8f0dcb27becd2f4b3dd536fd24c45533454", + "sha256:964f18a59f5a64c0170f684c417f4fe3e695a536612e13074c4dd5d1c6d7c882", + "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", + "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", + "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", + "sha256:9f4e67f87e072de981570eaf7cb41444bbac7e92b05c8651dbab6eb1fb8d5a14", + "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", + "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", + "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", + "sha256:abfb15a6a7822f0fae681785cb38860e7a2cb1616a708d53df557b3d76c5bfd4", + "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", + "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", + "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", + "sha256:b39989b49e8aca9d224324d2650029eda410a4faf43f6afb0eb4f9acb7be6097", + "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", + "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", + "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", + "sha256:cdfd501c7ac5b198c15df800a3a34c38345f5182e5f80770caf362bccca65628", + "sha256:d2c0caffa47606d6d7c8af94ba42547bd2a441f06c74fd90a1ffe328524a6c64", + "sha256:dcb2db95e629962db5a355047fb8aefb012df6c8ae608930d391619dbd96fd86", + "sha256:e0eeb9c112fec2031927a1745788a181d0eecbacbed941fc5c4f7bc3f7b273bf", + "sha256:e154891263306200260d7f3051982774d7b9ef35af3509d5adbbe539afd2610c", + "sha256:e2e023a42dcbab8ed31f97c2bcdb980b7fbe0ada34037d87ba9d799664b58ded", + "sha256:e64be68255234bb489a574c4f2f8df7029c98c81ec4d160d6cd836e7f0679390", + "sha256:e82d6b930e02e80e5109b678c663a9ed210680ded81c1abaf54635d88d1da298" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.1.0" + }, "humanfriendly": { "hashes": [ "sha256:175ffa628aa76da2c17369a5da5856084562cc66dfe7f82ae93ca3ef175277a6", @@ -221,6 +346,22 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==9.0" }, + "hyperlink": { + "hashes": [ + "sha256:402c1b5fa066ea368f3118fc5a6f8505440b4d1a4ef12a844ca39332a4a29944", + "sha256:47fcc7cd339c6cb2444463ec3277bdcfe142c8b1daf2160bdd52248deec815af", + "sha256:c528d405766f15a2c536230de7e160b65a08e20264d8891b3eb03307b0df3c63" + ], + "version": "==20.0.1" + }, + "idna": { + "hashes": [ + "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", + "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", + "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + ], + "version": "==2.10" + }, "imap-tools": { "hashes": [ "sha256:72bf46dc135b039a5d5b59f4e079242ac15eac02a30038e8cb2dec7b153cab65", @@ -244,6 +385,13 @@ "markers": "python_version < '3.8'", "version": "==3.1.1" }, + "incremental": { + "hashes": [ + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + ], + "version": "==17.5.0" + }, "inotify-simple": { "hashes": [ "sha256:8440ffe49c4ae81a8df57c1ae1eb4b6bfa7acb830099bfb3e305b383005cc128", @@ -322,6 +470,32 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.6.2" }, + "msgpack": { + "hashes": [ + "sha256:002a0d813e1f7b60da599bdf969e632074f9eec1b96cbed8fb0973a63160a408", + "sha256:0e7b5a69ec5645b0a85baaa354c29acd89eb879aaa89e7f4b37ed4d9c5abafe0", + "sha256:25b3bc3190f3d9d965b818123b7752c5dfb953f0d774b454fd206c18fe384fb8", + "sha256:271b489499a43af001a2e42f42d876bb98ccaa7e20512ff37ca78c8e12e68f84", + "sha256:39c54fdebf5fa4dda733369012c59e7d085ebdfe35b6cf648f09d16708f1be5d", + "sha256:4233b7f86c1208190c78a525cd3828ca1623359ef48f78a6fea4b91bb995775a", + "sha256:5bea44181fc8e18eed1d0cd76e355073f00ce232ff9653a0ae88cb7d9e643322", + "sha256:5dba6d074fac9b24f29aaf1d2d032306c27f04187651511257e7831733293ec2", + "sha256:71604047feea609ad65f5b837ec89a4de084d55a80f8af7331745a075c3dbd23", + "sha256:7a22c965588baeb07242cb561b63f309db27a07382825fc98aecaf0827c1538e", + "sha256:908944e3f038bca67fcfedb7845c4a257c7749bf9818632586b53bcf06ba4b97", + "sha256:9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0", + "sha256:aa5c057eab4f40ec47ea6f5a9825846be2ff6bf34102c560bad5cad5a677c5be", + "sha256:b3758dfd3423e358bbb18a7cccd1c74228dffa7a697e5be6cb9535de625c0dbf", + "sha256:c901e8058dd6653307906c5f157f26ed09eb94a850dddd989621098d347926ab", + "sha256:cec8bf10981ed70998d98431cd814db0ecf3384e6b113366e7f36af71a0fca08", + "sha256:db685187a415f51d6b937257474ca72199f393dad89534ebbdd7d7a3b000080e", + "sha256:e35b051077fc2f3ce12e7c6a34cf309680c63a842db3a0616ea6ed25ad20d272", + "sha256:e7bbdd8e2b277b77782f3ce34734b0dfde6cbe94ddb74de8d733d603c7f9e2b1", + "sha256:ea41c9219c597f1d2bf6b374d951d310d58684b5de9dc4bd2976db9e1e22c140", + "sha256:f7c80ff32171193f18a127ea357118b920020cc0acb0730016bbda02b892a2d2" + ], + "version": "==1.0.0" + }, "numpy": { "hashes": [ "sha256:08308c38e44cc926bdfce99498b21eec1f848d24c302519e64203a8da99a97db", @@ -514,6 +688,42 @@ "index": "pypi", "version": "==2.8.6" }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, "pycparser": { "hashes": [ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", @@ -522,6 +732,21 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, + "pyhamcrest": { + "hashes": [ + "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316", + "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29" + ], + "markers": "python_version >= '3.5'", + "version": "==2.0.2" + }, + "pyopenssl": { + "hashes": [ + "sha256:898aefbde331ba718570244c3b01dcddb1b31a3b336613436a45e52e27d9a82d", + "sha256:92f08eccbd73701cf744e8ffd6989aa7842d48cbe3fea8a7c031c5647f590ac5" + ], + "version": "==20.0.0" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -730,6 +955,13 @@ "markers": "python_version >= '3.6'", "version": "==1.5.4" }, + "service-identity": { + "hashes": [ + "sha256:001c0707759cb3de7e49c078a7c0c9cd12594161d3bf06b9c254fdcb1a60dc36", + "sha256:0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d" + ], + "version": "==18.1.0" + }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", @@ -769,6 +1001,48 @@ "index": "pypi", "version": "==4.54.1" }, + "twisted": { + "extras": [ + "tls" + ], + "hashes": [ + "sha256:0150dae5adc962d15e00054cc6926f1e64763fb8dd26e1632593ac06e592104b", + "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", + "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", + "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", + "sha256:15e52271f08f62e2230ff093e0278aa01c9dac057c4557cadadd2429eed86a3e", + "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", + "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", + "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", + "sha256:356e8d8dd3590e790e3dba4db139eb8a17aca64b46629c622e1b1597a4a92478", + "sha256:70952c56e4965b9f53b180daecf20a9595cf22b8d0935cd3bd664c90273c3ab2", + "sha256:7408c6635ee1b96587289283ebe90ee15dbf9614b05857b446055116bc822d29", + "sha256:7c547fd0215db9da8a1bc23182b309e84a232364cc26d829e9ee196ce840b114", + "sha256:894f6f3cfa57a15ea0d0714e4283913a5f2511dbd18653dd148eba53b3919797", + "sha256:94ac3d55a58c90e2075c5fe1853f2aa3892b73e3bf56395f743aefde8605eeaa", + "sha256:a58e61a2a01e5bcbe3b575c0099a2bcb8d70a75b1a087338e0c48dd6e01a5f15", + "sha256:c09c47ff9750a8e3aa60ad169c4b95006d455a29b80ad0901f031a103b2991cd", + "sha256:ca3a0b8c9110800e576d89b5337373e52018b41069bc879f12fa42b7eb2d0274", + "sha256:cd1dc5c85b58494138a3917752b54bb1daa0045d234b7c132c37a61d5483ebad", + "sha256:cdbc4c7f0cd7a2218b575844e970f05a1be1861c607b0e048c9bceca0c4d42f7", + "sha256:d267125cc0f1e8a0eed6319ba4ac7477da9b78a535601c49ecd20c875576433a", + "sha256:d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10", + "sha256:d95803193561a243cb0401b0567c6b7987d3f2a67046770e1dccd1c9e49a9780", + "sha256:e92703bed0cc21d6cb5c61d66922b3b1564015ca8a51325bd164a5e33798d504", + "sha256:f058bd0168271de4dcdc39845b52dd0a4a2fecf5f1246335f13f5e96eaebb467", + "sha256:f3c19e5bd42bbe4bf345704ad7c326c74d3fd7a1b3844987853bef180be638d4" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.3.0" + }, + "txaio": { + "hashes": [ + "sha256:17938f2bca4a9cabce61346758e482ca4e600160cbc28e861493eac74a19539d", + "sha256:38a469daf93c37e5527cb062653d6393ae11663147c42fab7ddc3f6d00d434ae" + ], + "markers": "python_version >= '3.5'", + "version": "==20.4.1" + }, "tzlocal": { "hashes": [ "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", @@ -815,6 +1089,66 @@ ], "markers": "python_version >= '3.6'", "version": "==3.4.0" + }, + "zope.interface": { + "hashes": [ + "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", + "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:09fc3922f235703c0b76f8234867685eee68a24a49fffa2220975f6142db45f1", + "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", + "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", + "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", + "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", + "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", + "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", + "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", + "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", + "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", + "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", + "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", + "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", + "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", + "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", + "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", + "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", + "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", + "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", + "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", + "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", + "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", + "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", + "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", + "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", + "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", + "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", + "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", + "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", + "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", + "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", + "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", + "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", + "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", + "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:974f5957e66a7524ea81df7b2686a456bfaf0408dbb7353ddfbedb594eadfef6", + "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", + "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", + "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", + "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", + "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", + "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", + "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", + "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", + "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", + "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", + "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", + "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", + "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", + "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", + "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", + "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==5.2.0" } }, "develop": { @@ -980,7 +1314,6 @@ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, "imagesize": { From dd60100796bde248bcc81a1f5c7c4ff917a54c70 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 7 Dec 2020 12:44:23 +0100 Subject: [PATCH 012/898] changes --- .../consumer-status-widget.component.html | 16 +++++----- .../saved-view-widget.component.css | 0 .../statistics-widget.component.css | 0 .../upload-file-widget.component.ts | 2 +- .../document-list/document-list.component.ts | 2 +- src/documents/consumer.py | 29 +++++++++---------- 6 files changed, 25 insertions(+), 24 deletions(-) delete mode 100644 src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.css delete mode 100644 src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.css diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html index ff2117729..9ea715043 100644 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html @@ -1,10 +1,12 @@ <app-widget-frame title="Document consumer status"> - <div class="mb-2 border-bottom" *ngFor="let s of getStatus()"> - <div class="mb-1"><strong>{{s.filename}}:</strong> {{s.message}}</div> - <ngb-progressbar [type]="getType(s.status)" [value]="s.current_progress" [max]="s.max_progress" class="mb-2"></ngb-progressbar> - <div *ngIf="isFinished(s)" class="mb-2"> - <button *ngIf="s.document_id" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{s.document_id}}" (click)="dismiss(s)">Open document</button> - <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(s)">Dismiss</button> + <ng-container content> + <div class="mb-2 border-bottom" *ngFor="let s of getStatus()"> + <div class="mb-1"><strong>{{s.filename}}:</strong> {{s.message}}</div> + <ngb-progressbar [type]="getType(s.status)" [value]="s.current_progress" [max]="s.max_progress" class="mb-2"></ngb-progressbar> + <div *ngIf="isFinished(s)" class="mb-2"> + <button *ngIf="s.document_id" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{s.document_id}}" (click)="dismiss(s)">Open document</button> + <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(s)">Dismiss</button> + </div> </div> - </div> + </ng-container> </app-widget-frame> diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.css b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.css b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 97b4ffee8..16a220229 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -29,7 +29,7 @@ export class UploadFileWidgetComponent implements OnInit { const formData = new FormData() formData.append('document', file, file.name) this.documentService.uploadDocument(formData).subscribe(result => { - this.toastService.showInfo(The document has been uploaded and will be processed by the consumer shortly.") + this.toastService.showInfo("The document has been uploaded and will be processed by the consumer shortly.") }, error => { switch (error.status) { case 400: { diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index fe6c8a894..4dc986d51 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -76,7 +76,7 @@ export class DocumentListComponent implements OnInit { saveViewConfig() { this.savedViewConfigService.updateConfig(this.list.savedView) - this.toastService.showToast(Toast.make("Information", `View "${this.list.savedView.title}" saved successfully.`)) + this.toastService.showInfo(`View "${this.list.savedView.title}" saved successfully.`) } saveViewConfigAs() { diff --git a/src/documents/consumer.py b/src/documents/consumer.py index b57e81d06..30c57e6a0 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -43,6 +43,11 @@ class Consumer(LoggingMixin): {'type': 'status_update', 'data': payload}) + def _fail(self, message): + self._send_progress(self.filename, 100, 100, 'FAILED', + message) + raise ConsumerError(f"{self.filename}: {message}") + def __init__(self): super().__init__() self.path = None @@ -56,8 +61,7 @@ class Consumer(LoggingMixin): def pre_check_file_exists(self): if not os.path.isfile(self.path): - raise ConsumerError("Cannot consume {}: It is not a file".format( - self.path)) + self._fail("File not found") def pre_check_duplicate(self): with open(self.path, "rb") as f: @@ -65,9 +69,7 @@ class Consumer(LoggingMixin): if Document.objects.filter(Q(checksum=checksum) | Q(archive_checksum=checksum)).exists(): # NOQA: E501 if settings.CONSUMER_DELETE_DUPLICATES: os.unlink(self.path) - raise ConsumerError( - "Not consuming {}: It is a duplicate.".format(self.filename) - ) + self._fail("Document is a duplicate") def pre_check_directories(self): os.makedirs(settings.SCRATCH_DIR, exist_ok=True) @@ -93,6 +95,9 @@ class Consumer(LoggingMixin): self.override_document_type_id = override_document_type_id self.override_tag_ids = override_tag_ids + self._send_progress(self.filename, 0, 100, 'WORKING', + 'Received new file.') + # this is for grouping logging entries for this particular file # together. @@ -112,7 +117,7 @@ class Consumer(LoggingMixin): parser_class = get_parser_class_for_mime_type(mime_type) if not parser_class: - raise ConsumerError(f"No parsers abvailable for {self.filename}") + self._fail("No parsers abvailable") else: self.log("debug", f"Parser: {parser_class.__name__} " @@ -120,8 +125,6 @@ class Consumer(LoggingMixin): # Notify all listeners that we're going to do some work. - self._send_progress(self.filename, 0, 100, 'WORKING', 'Consumption started') - document_consumption_started.send( sender=self.__class__, filename=self.path, @@ -130,7 +133,7 @@ class Consumer(LoggingMixin): def progress_callback(current_progress, max_progress, message): # recalculate progress to be within 20 and 80 - p = int((current_progress / max_progress) * 60 + 20) + p = int((current_progress / max_progress) * 50 + 20) self._send_progress(self.filename, p, 100, "WORKING", message) # This doesn't parse the document yet, but gives us a parser. @@ -167,9 +170,7 @@ class Consumer(LoggingMixin): self.log( "error", f"Error while consuming document {self.filename}: {e}") - self._send_progress(self.filename, 100, 100, 'FAILED', - "Failed: {}".format(e)) - raise ConsumerError(e) + self._fail(e) # Prepare the document classifier. @@ -246,9 +247,7 @@ class Consumer(LoggingMixin): f"The following error occured while consuming " f"{self.filename}: {e}" ) - self._send_progress(self.filename, 100, 100, 'FAILED', - "Failed: {}".format(e)) - raise ConsumerError(e) + self._fail(str(e)) finally: document_parser.cleanup() From 36db903772dad8aa31962e5c104ab063a80af854 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 13 Dec 2020 02:28:02 -0800 Subject: [PATCH 013/898] Add preview tab for mobile & hide larger preview --- .../document-detail/document-detail.component.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index f9f6e57ef..0fb91af23 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -160,6 +160,15 @@ </ng-template> </li> + + <li [ngbNavItem]="4" class="d-md-none"> + <a ngbNavLink>Preview</a> + <ng-template ngbNavContent> + <div class="pdf-viewer-container" *ngIf="getContentType() == 'application/pdf'"> + <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true"></pdf-viewer> + </div> + </ng-template> + </li> </ul> <div [ngbNavOutlet]="nav" class="mt-2"></div> @@ -171,7 +180,7 @@ </form> </div> - <div class="col-md-6 col-xl-8 mb-3"> + <div class="col-md-6 col-xl-8 mb-3 d-none d-md-block"> <div class="pdf-viewer-container" *ngIf="getContentType() == 'application/pdf'"> <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true"></pdf-viewer> </div> From 597aa1eef30df4d813836f27774cdca0e3a5c044 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Thu, 17 Dec 2020 00:50:40 -0800 Subject: [PATCH 014/898] Hide mobile preview when switching from mobile to desktop --- .../components/document-detail/document-detail.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 0fb91af23..970fa361c 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -163,7 +163,7 @@ <li [ngbNavItem]="4" class="d-md-none"> <a ngbNavLink>Preview</a> - <ng-template ngbNavContent> + <ng-template ngbNavContent *ngIf="pdfPreview.offsetParent == undefined"> <div class="pdf-viewer-container" *ngIf="getContentType() == 'application/pdf'"> <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true"></pdf-viewer> </div> @@ -180,7 +180,7 @@ </form> </div> - <div class="col-md-6 col-xl-8 mb-3 d-none d-md-block"> + <div class="col-md-6 col-xl-8 mb-3 d-none d-md-block" #pdfPreview> <div class="pdf-viewer-container" *ngIf="getContentType() == 'application/pdf'"> <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true"></pdf-viewer> </div> From 027411c49cad5df2ce34f6921963a943e5cb4412 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Thu, 17 Dec 2020 00:50:59 -0800 Subject: [PATCH 015/898] Select first tab when switching out of mobile display --- .../document-detail.component.ts | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index c80a8b1ce..501434ffd 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -1,8 +1,8 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { Title } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModal, NgbNav } from '@ng-bootstrap/ng-bootstrap'; import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; @@ -48,8 +48,17 @@ export class DocumentDetailComponent implements OnInit { tags: new FormControl([]) }) + @ViewChild('nav') nav: NgbNav + @ViewChild('pdfPreview') set pdfPreview(element): void { + // this gets called when compontent added or removed from DOM + if (element && element.nativeElement.offsetParent !== null) { // its visible + + setTimeout(()=> this.nav?.select(1)); + } + } + constructor( - private documentsService: DocumentService, + private documentsService: DocumentService, private route: ActivatedRoute, private correspondentService: CorrespondentService, private documentTypeService: DocumentTypeService, @@ -128,7 +137,7 @@ export class DocumentDetailComponent implements OnInit { }, error => {this.router.navigate(['404'])}) } - save() { + save() { this.documentsService.update(this.document).subscribe(result => { this.close() }) @@ -160,7 +169,7 @@ export class DocumentDetailComponent implements OnInit { modal.componentInstance.message2 = `The files for this document will be deleted permanently. This operation cannot be undone.` modal.componentInstance.deleteClicked.subscribe(() => { this.documentsService.delete(this.document).subscribe(() => { - modal.close() + modal.close() this.close() }) }) @@ -170,4 +179,14 @@ export class DocumentDetailComponent implements OnInit { hasNext() { return this.documentListViewService.hasNext(this.documentId) } + + previewCreated() { + console.log('Preview Created'); + + } + + mobilePreviewCreated() { + console.log('Mobile Preview Created'); + + } } From 1cf60a763acfcd9c78b84b21a7057f07020627aa Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Thu, 17 Dec 2020 07:33:20 -0800 Subject: [PATCH 016/898] Typescript syntax fix --- .../app/components/document-detail/document-detail.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 501434ffd..fcbbf840c 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -49,7 +49,7 @@ export class DocumentDetailComponent implements OnInit { }) @ViewChild('nav') nav: NgbNav - @ViewChild('pdfPreview') set pdfPreview(element): void { + @ViewChild('pdfPreview') set pdfPreview(element) { // this gets called when compontent added or removed from DOM if (element && element.nativeElement.offsetParent !== null) { // its visible From 21df7b39cba1cbb4ef0b9945e8058fa642d9a3fc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 4 Jan 2021 23:05:16 +0100 Subject: [PATCH 017/898] some changes --- Pipfile.lock | 420 +++++++++++++++--- src-ui/src/app/app.component.ts | 2 +- .../common/toasts/toasts.component.html | 4 +- src-ui/src/environments/environment.ts | 2 +- src/documents/consumer.py | 2 +- src/documents/views.py | 2 +- 6 files changed, 356 insertions(+), 76 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 6d9685f9c..068b7cd07 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "993e362c31af6b8094693075f614270a820cf0b557369d66d674e1a107b7bd31" + "sha256": "8dbe59054648cdfec443bad9f73c25263e43f18f35e74dc72a8429a0035ecbeb" }, "pipfile-spec": 6, "requires": { @@ -21,6 +21,13 @@ ] }, "default": { + "aioredis": { + "hashes": [ + "sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a", + "sha256:b61808d7e97b7cd5a92ed574937a079c9387fdadd22bfbfa7ad2fd319ecc26e3" + ], + "version": "==1.3.1" + }, "arrow": { "hashes": [ "sha256:e098abbd9af3665aea81bdd6c869e93af4feb078e98468dd351c383af187aac5", @@ -37,6 +44,38 @@ "markers": "python_version >= '3.5'", "version": "==3.3.1" }, + "async-timeout": { + "hashes": [ + "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f", + "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==3.0.1" + }, + "attrs": { + "hashes": [ + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.3.0" + }, + "autobahn": { + "hashes": [ + "sha256:410a93e0e29882c8b5d5ab05d220b07609b886ef5f23c0b8d39153254ffd6895", + "sha256:52ee4236ff9a1fcbbd9500439dcf3284284b37f8a6b31ecc8a36e00cf9f95049" + ], + "markers": "python_version >= '3.6'", + "version": "==20.12.3" + }, + "automat": { + "hashes": [ + "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", + "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111", + "sha256:d6d976cf8da698fc85fa7def46e2544493f78cb7ee72d2f4acd1a5c759a3060e" + ], + "version": "==20.2.0" + }, "blessed": { "hashes": [ "sha256:0a74a8d3f0366db600d061273df77d44f0db07daade7bb7a4d49c8bc22ed9f74", @@ -94,6 +133,22 @@ ], "version": "==1.14.4" }, + "channels": { + "hashes": [ + "sha256:056b72e51080a517a0f33a0a30003e03833b551d75394d6636c885d4edb8188f", + "sha256:3f15bdd2138bb4796e76ea588a0a344b12a7964ea9b2e456f992fddb988a4317" + ], + "index": "pypi", + "version": "==3.0.3" + }, + "channels-redis": { + "hashes": [ + "sha256:18d63f6462a58011740dc8eeb57ea4b31ec220eb551cb71b27de9c6779a549de", + "sha256:2fb31a63b05373f6402da2e6a91a22b9e66eb8b56626c6bfc93e156c734c5ae6" + ], + "index": "pypi", + "version": "==3.2.0" + }, "chardet": { "hashes": [ "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", @@ -110,6 +165,13 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==15.0" }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "version": "==15.1.0" + }, "cryptography": { "hashes": [ "sha256:0003a52a123602e1acee177dc90dd201f9bb1e73f24a070db7d36c588e8f5c7d", @@ -131,6 +193,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==3.3.1" }, + "daphne": { + "hashes": [ + "sha256:0052c9887600c57054a5867d4b0240159fa009faa3bcf6a1627271d9cdcb005a", + "sha256:c22b692707f514de9013651ecb687f2abe4f35cf6fe292ece634e9f1737bc7e3" + ], + "index": "pypi", + "version": "==3.0.1" + }, "dateparser": { "hashes": [ "sha256:7552c994f893b5cb8fcf103b4cd2ff7f57aab9bfd2619fdf0cf571c0740fd90b", @@ -218,6 +288,60 @@ "index": "pypi", "version": "==20.0.4" }, + "hiredis": { + "hashes": [ + "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", + "sha256:0a909bf501459062aa1552be1461456518f367379fdc9fdb1f2ca5e4a1fdd7c0", + "sha256:18402d9e54fb278cb9a8c638df6f1550aca36a009d47ecf5aa263a38600f35b0", + "sha256:1e4cbbc3858ec7e680006e5ca590d89a5e083235988f26a004acf7244389ac01", + "sha256:23344e3c2177baf6975fbfa361ed92eb7d36d08f454636e5054b3faa7c2aff8a", + "sha256:289b31885b4996ce04cadfd5fc03d034dce8e2a8234479f7c9e23b9e245db06b", + "sha256:2c1c570ae7bf1bab304f29427e2475fe1856814312c4a1cf1cd0ee133f07a3c6", + "sha256:2c227c0ed371771ffda256034427320870e8ea2e4fd0c0a618c766e7c49aad73", + "sha256:3bb9b63d319402cead8bbd9dd55dca3b667d2997e9a0d8a1f9b6cc274db4baee", + "sha256:3ef2183de67b59930d2db8b8e8d4d58e00a50fcc5e92f4f678f6eed7a1c72d55", + "sha256:43b8ed3dbfd9171e44c554cb4acf4ee4505caa84c5e341858b50ea27dd2b6e12", + "sha256:47bcf3c5e6c1e87ceb86cdda2ee983fa0fe56a999e6185099b3c93a223f2fa9b", + "sha256:5263db1e2e1e8ae30500cdd75a979ff99dcc184201e6b4b820d0de74834d2323", + "sha256:5b1451727f02e7acbdf6aae4e06d75f66ee82966ff9114550381c3271a90f56c", + "sha256:6996883a8a6ff9117cbb3d6f5b0dcbbae6fb9e31e1a3e4e2f95e0214d9a1c655", + "sha256:6c96f64a54f030366657a54bb90b3093afc9c16c8e0dfa29fc0d6dbe169103a5", + "sha256:7332d5c3e35154cd234fd79573736ddcf7a0ade7a986db35b6196b9171493e75", + "sha256:7885b6f32c4a898e825bb7f56f36a02781ac4a951c63e4169f0afcf9c8c30dfb", + "sha256:7b0f63f10a166583ab744a58baad04e0f52cfea1ac27bfa1b0c21a48d1003c23", + "sha256:819f95d4eba3f9e484dd115ab7ab72845cf766b84286a00d4ecf76d33f1edca1", + "sha256:8968eeaa4d37a38f8ca1f9dbe53526b69628edc9c42229a5b2f56d98bb828c1f", + "sha256:89ebf69cb19a33d625db72d2ac589d26e936b8f7628531269accf4a3196e7872", + "sha256:8daecd778c1da45b8bd54fd41ffcd471a86beed3d8e57a43acf7a8d63bba4058", + "sha256:955ba8ea73cf3ed8bd2f963b4cb9f8f0dcb27becd2f4b3dd536fd24c45533454", + "sha256:964f18a59f5a64c0170f684c417f4fe3e695a536612e13074c4dd5d1c6d7c882", + "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", + "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", + "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", + "sha256:9f4e67f87e072de981570eaf7cb41444bbac7e92b05c8651dbab6eb1fb8d5a14", + "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", + "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", + "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", + "sha256:abfb15a6a7822f0fae681785cb38860e7a2cb1616a708d53df557b3d76c5bfd4", + "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", + "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", + "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", + "sha256:b39989b49e8aca9d224324d2650029eda410a4faf43f6afb0eb4f9acb7be6097", + "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", + "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", + "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", + "sha256:cdfd501c7ac5b198c15df800a3a34c38345f5182e5f80770caf362bccca65628", + "sha256:d2c0caffa47606d6d7c8af94ba42547bd2a441f06c74fd90a1ffe328524a6c64", + "sha256:dcb2db95e629962db5a355047fb8aefb012df6c8ae608930d391619dbd96fd86", + "sha256:e0eeb9c112fec2031927a1745788a181d0eecbacbed941fc5c4f7bc3f7b273bf", + "sha256:e154891263306200260d7f3051982774d7b9ef35af3509d5adbbe539afd2610c", + "sha256:e2e023a42dcbab8ed31f97c2bcdb980b7fbe0ada34037d87ba9d799664b58ded", + "sha256:e64be68255234bb489a574c4f2f8df7029c98c81ec4d160d6cd836e7f0679390", + "sha256:e82d6b930e02e80e5109b678c663a9ed210680ded81c1abaf54635d88d1da298" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.1.0" + }, "humanfriendly": { "hashes": [ "sha256:066562956639ab21ff2676d1fda0b5987e985c534fc76700a19bd54bcb81121d", @@ -226,6 +350,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==9.1" }, + "hyperlink": { + "hashes": [ + "sha256:402c1b5fa066ea368f3118fc5a6f8505440b4d1a4ef12a844ca39332a4a29944", + "sha256:47fcc7cd339c6cb2444463ec3277bdcfe142c8b1daf2160bdd52248deec815af", + "sha256:c528d405766f15a2c536230de7e160b65a08e20264d8891b3eb03307b0df3c63" + ], + "version": "==20.0.1" + }, "idna": { "hashes": [ "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", @@ -250,13 +382,12 @@ ], "version": "==0.4.0" }, - "importlib-metadata": { + "incremental": { "hashes": [ - "sha256:5c5a2720817414a6c41f0a49993908068243ae02c1635a228126519b509c8aed", - "sha256:bf792d480abbd5eda85794e4afb09dd538393f7d6e6ffef6e9f03d2014cf9450" + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" ], - "markers": "python_version < '3.8'", - "version": "==3.3.0" + "version": "==17.5.0" }, "inotify-simple": { "hashes": [ @@ -336,6 +467,41 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.6.2" }, + "msgpack": { + "hashes": [ + "sha256:0cb94ee48675a45d3b86e61d13c1e6f1696f0183f0715544976356ff86f741d9", + "sha256:1026dcc10537d27dd2d26c327e552f05ce148977e9d7b9f1718748281b38c841", + "sha256:26a1759f1a88df5f1d0b393eb582ec022326994e311ba9c5818adc5374736439", + "sha256:2a5866bdc88d77f6e1370f82f2371c9bc6fc92fe898fa2dec0c5d4f5435a2694", + "sha256:31c17bbf2ae5e29e48d794c693b7ca7a0c73bd4280976d408c53df421e838d2a", + "sha256:497d2c12426adcd27ab83144057a705efb6acc7e85957a51d43cdcf7f258900f", + "sha256:5a9ee2540c78659a1dd0b110f73773533ee3108d4e1219b5a15a8d635b7aca0e", + "sha256:7307e86f7ce75b49e65b55660b10b258e9e7b5e0f80d31d7a86a278d8204d1b4", + "sha256:8521e5be9e3b93d4d5e07cb80b7e32353264d143c1f072309e1863174c6aadb1", + "sha256:87869ba567fe371c4555d2e11e4948778ab6b59d6cc9d8460d543e4cfbbddd1c", + "sha256:8ffb24a3b7518e843cd83538cf859e026d24ec41ac5721c18ed0c55101f9775b", + "sha256:92be4b12de4806d3c36810b0fe2aeedd8d493db39e2eb90742b9c09299eb5759", + "sha256:9ea52fff0473f9f3000987f313310208c879493491ef3ccf66268eff8d5a0326", + "sha256:a4355d2193106c7aa77c98fc955252a737d8550320ecdb2e9ac701e15e2943bc", + "sha256:a99b144475230982aee16b3d249170f1cccebf27fb0a08e9f603b69637a62192", + "sha256:ac25f3e0513f6673e8b405c3a80500eb7be1cf8f57584be524c4fa78fe8e0c83", + "sha256:b28c0876cce1466d7c2195d7658cf50e4730667196e2f1355c4209444717ee06", + "sha256:b55f7db883530b74c857e50e149126b91bb75d35c08b28db12dcb0346f15e46e", + "sha256:b6d9e2dae081aa35c44af9c4298de4ee72991305503442a5c74656d82b581fe9", + "sha256:c747c0cc08bd6d72a586310bda6ea72eeb28e7505990f342552315b229a19b33", + "sha256:c82dc0ba34d620fb94d12a7725e9362958bb1be3938688a061f53ed86bee005a", + "sha256:d6c64601af8f3893d17ec233237030e3110f11b8a962cb66720bf70c0141aa54", + "sha256:d8167b84af26654c1124857d71650404336f4eb5cc06900667a493fc619ddd9f", + "sha256:de6bd7990a2c2dabe926b7e62a92886ccbf809425c347ae7de277067f97c2887", + "sha256:e36a812ef4705a291cdb4a2fd352f013134f26c6ff63477f20235138d1d21009", + "sha256:e89ec55871ed5473a041c0495b7b4e6099f6263438e0bd04ccd8418f92d5d7f2", + "sha256:f3e6aaf217ac1c7ce1563cf52a2f4f5d5b1f64e8729d794165db71da57257f0c", + "sha256:f484cd2dca68502de3704f056fa9b318c94b1539ed17a4c784266df5d6978c87", + "sha256:fae04496f5bc150eefad4e9571d1a76c55d021325dcd484ce45065ebbdd00984", + "sha256:fe07bc6735d08e492a327f496b7850e98cb4d112c56df69b0c844dbebcbb47f6" + ], + "version": "==1.0.2" + }, "numpy": { "hashes": [ "sha256:08308c38e44cc926bdfce99498b21eec1f848d24c302519e64203a8da99a97db", @@ -521,6 +687,42 @@ "index": "pypi", "version": "==2.8.6" }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, "pycparser": { "hashes": [ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", @@ -529,6 +731,22 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, + "pyhamcrest": { + "hashes": [ + "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316", + "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29" + ], + "markers": "python_version >= '3.5'", + "version": "==2.0.2" + }, + "pyopenssl": { + "hashes": [ + "sha256:4c231c759543ba02560fcd2480c48dcec4dae34c9da7d3747c508227e0624b51", + "sha256:818ae18e06922c066f777a33f1fca45786d85edfe71cd043de6379337a7f274b" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.0.1" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -715,35 +933,36 @@ }, "scipy": { "hashes": [ - "sha256:168c45c0c32e23f613db7c9e4e780bc61982d71dcd406ead746c7c7c2f2004ce", - "sha256:213bc59191da2f479984ad4ec39406bf949a99aba70e9237b916ce7547b6ef42", - "sha256:25b241034215247481f53355e05f9e25462682b13bd9191359075682adcd9554", - "sha256:2c872de0c69ed20fb1a9b9cf6f77298b04a26f0b8720a5457be08be254366c6e", - "sha256:3397c129b479846d7eaa18f999369a24322d008fac0782e7828fa567358c36ce", - "sha256:368c0f69f93186309e1b4beb8e26d51dd6f5010b79264c0f1e9ca00cd92ea8c9", - "sha256:3d5db5d815370c28d938cf9b0809dade4acf7aba57eaf7ef733bfedc9b2474c4", - "sha256:4598cf03136067000855d6b44d7a1f4f46994164bcd450fb2c3d481afc25dd06", - "sha256:4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b", - "sha256:4f12d13ffbc16e988fa40809cbbd7a8b45bc05ff6ea0ba8e3e41f6f4db3a9e47", - "sha256:634568a3018bc16a83cda28d4f7aed0d803dd5618facb36e977e53b2df868443", - "sha256:65923bc3809524e46fb7eb4d6346552cbb6a1ffc41be748535aa502a2e3d3389", - "sha256:6b0ceb23560f46dd236a8ad4378fc40bad1783e997604ba845e131d6c680963e", - "sha256:8c8d6ca19c8497344b810b0b0344f8375af5f6bb9c98bd42e33f747417ab3f57", - "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62", - "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d", - "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437", - "sha256:b5e9d3e4474644915809d6aa1416ff20430a3ed9ae723a5d295da5ddb24985e2", - "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2", - "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54", - "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474", - "sha256:e360cb2299028d0b0d0f65a5c5e51fc16a335f1603aa2357c25766c8dab56938", - "sha256:e98d49a5717369d8241d6cf33ecb0ca72deee392414118198a8e5b4c35c56340", - "sha256:ed572470af2438b526ea574ff8f05e7f39b44ac37f712105e57fc4d53a6fb660", - "sha256:f87b39f4d69cf7d7529d7b1098cb712033b17ea7714aed831b95628f483fd012", - "sha256:fa789583fc94a7689b45834453fec095245c7e69c58561dc159b5d5277057e4c" + "sha256:155225621df90fcd151e25d51c50217e412de717475999ebb76e17e310176981", + "sha256:1bc5b446600c4ff7ab36bade47180673141322f0febaa555f1c433fe04f2a0e3", + "sha256:2f1c2ebca6fd867160e70102200b1bd07b3b2d31a3e6af3c58d688c15d0d07b7", + "sha256:313785c4dab65060f9648112d025f6d2fec69a8a889c714328882d678a95f053", + "sha256:31ab217b5c27ab429d07428a76002b33662f98986095bbce5d55e0788f7e8b15", + "sha256:3d4303e3e21d07d9557b26a1707bb9fc065510ee8501c9bf22a0157249a82fd0", + "sha256:4f1d9cc977ac6a4a63c124045c1e8bf67ec37098f67c699887a93736961a00ae", + "sha256:58731bbe0103e96b89b2f41516699db9b63066e4317e31b8402891571f6d358f", + "sha256:8629135ee00cc2182ac8be8e75643b9f02235942443732c2ed69ab48edcb6614", + "sha256:876badc33eec20709d4e042a09834f5953ebdac4088d45a4f3a1f18b56885718", + "sha256:8840a9adb4ede3751f49761653d3ebf664f25195fdd42ada394ffea8903dd51d", + "sha256:aef3a2dbc436bbe8f6e0b635f0b5fe5ed024b522eee4637dbbe0b974129ca734", + "sha256:b8af26839ae343655f3ca377a5d5e5466f1d3b3ac7432a43449154fe958ae0e0", + "sha256:c0911f3180de343643f369dc5cfedad6ba9f939c2d516bddea4a6871eb000722", + "sha256:cb6dc9f82dfd95f6b9032a8d7ea70efeeb15d5b5fd6ed4e8537bb3c673580566", + "sha256:cdbc47628184a0ebeb5c08f1892614e1bd4a51f6e0d609c6eed253823a960f5b", + "sha256:d902d3a5ad7f28874c0a82db95246d24ca07ad932741df668595fe00a4819870", + "sha256:eab389aba0ad8b5e6b5abdc3337ade46823df75f80a8edd4c67833567577cb3d", + "sha256:eb7928275f3560d47e5538e15e9f32b3d64cd30ea8f85f3e82987425476f53f6", + "sha256:f68d5761a2d2376e2b194c8e9192bbf7c51306ca176f1a0889990a52ef0d551f" ], - "markers": "python_version >= '3.6'", - "version": "==1.5.4" + "markers": "python_version >= '3.7'", + "version": "==1.6.0" + }, + "service-identity": { + "hashes": [ + "sha256:001c0707759cb3de7e49c078a7c0c9cd12594161d3bf06b9c254fdcb1a60dc36", + "sha256:0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d" + ], + "version": "==18.1.0" }, "six": { "hashes": [ @@ -792,14 +1011,47 @@ "index": "pypi", "version": "==4.55.1" }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" + "twisted": { + "extras": [ + "tls" ], - "markers": "python_version < '3.8'", - "version": "==3.7.4.3" + "hashes": [ + "sha256:0150dae5adc962d15e00054cc6926f1e64763fb8dd26e1632593ac06e592104b", + "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", + "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", + "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", + "sha256:15e52271f08f62e2230ff093e0278aa01c9dac057c4557cadadd2429eed86a3e", + "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", + "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", + "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", + "sha256:356e8d8dd3590e790e3dba4db139eb8a17aca64b46629c622e1b1597a4a92478", + "sha256:70952c56e4965b9f53b180daecf20a9595cf22b8d0935cd3bd664c90273c3ab2", + "sha256:7408c6635ee1b96587289283ebe90ee15dbf9614b05857b446055116bc822d29", + "sha256:7c547fd0215db9da8a1bc23182b309e84a232364cc26d829e9ee196ce840b114", + "sha256:894f6f3cfa57a15ea0d0714e4283913a5f2511dbd18653dd148eba53b3919797", + "sha256:94ac3d55a58c90e2075c5fe1853f2aa3892b73e3bf56395f743aefde8605eeaa", + "sha256:a58e61a2a01e5bcbe3b575c0099a2bcb8d70a75b1a087338e0c48dd6e01a5f15", + "sha256:c09c47ff9750a8e3aa60ad169c4b95006d455a29b80ad0901f031a103b2991cd", + "sha256:ca3a0b8c9110800e576d89b5337373e52018b41069bc879f12fa42b7eb2d0274", + "sha256:cd1dc5c85b58494138a3917752b54bb1daa0045d234b7c132c37a61d5483ebad", + "sha256:cdbc4c7f0cd7a2218b575844e970f05a1be1861c607b0e048c9bceca0c4d42f7", + "sha256:d267125cc0f1e8a0eed6319ba4ac7477da9b78a535601c49ecd20c875576433a", + "sha256:d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10", + "sha256:d95803193561a243cb0401b0567c6b7987d3f2a67046770e1dccd1c9e49a9780", + "sha256:e92703bed0cc21d6cb5c61d66922b3b1564015ca8a51325bd164a5e33798d504", + "sha256:f058bd0168271de4dcdc39845b52dd0a4a2fecf5f1246335f13f5e96eaebb467", + "sha256:f3c19e5bd42bbe4bf345704ad7c326c74d3fd7a1b3844987853bef180be638d4" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.3.0" + }, + "txaio": { + "hashes": [ + "sha256:1488d31d564a116538cc1265ac3f7979fb6223bb5a9e9f1479436ee2c17d8549", + "sha256:a8676d6c68aea1f0e2548c4afdb8e6253873af3bc2659bb5bcd9f39dff7ff90f" + ], + "markers": "python_version >= '3.6'", + "version": "==20.12.1" }, "tzlocal": { "hashes": [ @@ -863,13 +1115,65 @@ "index": "pypi", "version": "==2.7.4" }, - "zipp": { + "zope.interface": { "hashes": [ - "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", - "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" + "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", + "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:09fc3922f235703c0b76f8234867685eee68a24a49fffa2220975f6142db45f1", + "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", + "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", + "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", + "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", + "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", + "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", + "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", + "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", + "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", + "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", + "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", + "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", + "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", + "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", + "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", + "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", + "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", + "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", + "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", + "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", + "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", + "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", + "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", + "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", + "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", + "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", + "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", + "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", + "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", + "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", + "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", + "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", + "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", + "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:974f5957e66a7524ea81df7b2686a456bfaf0408dbb7353ddfbedb594eadfef6", + "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", + "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", + "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", + "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", + "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", + "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", + "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", + "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", + "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", + "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", + "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", + "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", + "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", + "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", + "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", + "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" ], - "markers": "python_version >= '3.6'", - "version": "==3.4.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==5.2.0" } }, "develop": { @@ -1062,22 +1366,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.0" }, - "importlib-metadata": { - "hashes": [ - "sha256:5c5a2720817414a6c41f0a49993908068243ae02c1635a228126519b509c8aed", - "sha256:bf792d480abbd5eda85794e4afb09dd538393f7d6e6ffef6e9f03d2014cf9450" - ], - "markers": "python_version < '3.8'", - "version": "==3.3.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:0a948d0c8c3f9344de62997e3f73444dbba233b1eaf24352933c2d264b9e4182", - "sha256:6b45007a479c4ec21165ae3ffbe37faf35404e2041fac6ae1da684f38530ca73" - ], - "markers": "python_version < '3.7'", - "version": "==4.1.1" - }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -1389,14 +1677,6 @@ ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.2.2" - }, - "zipp": { - "hashes": [ - "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", - "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" - ], - "markers": "python_version >= '3.6'", - "version": "==3.4.0" } } } diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index 55c23b4de..8ca276dd4 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -31,7 +31,7 @@ export class AppComponent implements OnInit, OnDestroy { this.consumerStatusService.connect() this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { - this.toastService.showToast({title: "Document added", content: `Document ${status.filename} was added to paperless.`, actionName: "Open document", action: () => { + this.toastService.show({title: "Document added", delay: 10000, content: `Document ${status.filename} was added to paperless.`, actionName: "Open document", action: () => { this.router.navigate(['documents', status.document_id]) }}) }) diff --git a/src-ui/src/app/components/common/toasts/toasts.component.html b/src-ui/src/app/components/common/toasts/toasts.component.html index 4e920877e..9d4ae6bb6 100644 --- a/src-ui/src/app/components/common/toasts/toasts.component.html +++ b/src-ui/src/app/components/common/toasts/toasts.component.html @@ -1,8 +1,8 @@ <ngb-toast *ngFor="let toast of toasts" - [header]="toast.title" [autohide]="true" [delay]="toast.delay || 5000" + [header]="toast.title" [autohide]="true" [delay]="toast.delay" [class]="toast.classname" (hide)="toastService.closeToast(toast)"> <p>{{toast.content}}</p> <p *ngIf="toast.action"><button class="btn btn-sm btn-outline-secondary" (click)="toastService.closeToast(toast); toast.action()">{{toast.actionName}}</button></p> -</ngb-toast> \ No newline at end of file +</ngb-toast> diff --git a/src-ui/src/environments/environment.ts b/src-ui/src/environments/environment.ts index da87c55e9..29dcb7ba1 100644 --- a/src-ui/src/environments/environment.ts +++ b/src-ui/src/environments/environment.ts @@ -6,7 +6,7 @@ export const environment = { production: false, apiBaseUrl: "http://localhost:8000/api/", appTitle: "Paperless-ng", - version: "DEVELOPMENT" + version: "DEVELOPMENT", wsBaseUrl: "ws://localhost:8000/ws/" }; diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 1cd05d2be..21a4da66b 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -216,7 +216,7 @@ class Consumer(LoggingMixin): self.log( "error", f"Error while consuming document {self.filename}: {e}") - self._fail(e) + self._fail(str(e)) # Prepare the document classifier. diff --git a/src/documents/views.py b/src/documents/views.py index 8af29ce05..af4861ad4 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -211,7 +211,7 @@ class DocumentViewSet(RetrieveModelMixin, parser_class = get_parser_class_for_mime_type(mime_type) if parser_class: - parser = parser_class(logging_group=None) + parser = parser_class(progress_callback=None, logging_group=None) try: return parser.extract_metadata(file, mime_type) From becba456c2cc5bfc4b3c494b6ad304e8dfff81b8 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 21 Jan 2021 13:49:12 +0100 Subject: [PATCH 018/898] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 89f55b2d9..d06f78246 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. For a detailed list of changes, have a look at the changelog in the documentation. +# Survey + +If you already used Paperless-ng for a bit, would like to give some anonymous feedback, and help me decide on what to focus on next: I've created a survey, [see here](https://github.com/jonaswinkler/paperless-ng/issues/402). Thank you! + # How it Works Paperless does not control your scanner, it only helps you deal with what your scanner produces. From 6f3e7473f6d60755f0b75477409929a8db18f9be Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sat, 9 Jan 2021 10:49:44 +0100 Subject: [PATCH 019/898] Build release archive when version is not avail Default ansible installation version to "latest" (pulls the latest published release archive). --- ansible/defaults/main.yml | 2 +- ansible/tasks/install-release.yml | 6 ++ ansible/tasks/install-source.yml | 133 +++++++++++++++++++++++++++ ansible/tasks/main.yml | 148 +++++++++++++++++------------- 4 files changed, 222 insertions(+), 67 deletions(-) create mode 100644 ansible/tasks/install-release.yml create mode 100644 ansible/tasks/install-source.yml diff --git a/ansible/defaults/main.yml b/ansible/defaults/main.yml index 83047307d..aaeffa507 100644 --- a/ansible/defaults/main.yml +++ b/ansible/defaults/main.yml @@ -1,5 +1,5 @@ --- -paperlessng_version: 0.9.14 +paperlessng_version: latest # 'latest', release number, or github branch/tag/commit/ref # Required services paperlessng_redis_host: localhost diff --git a/ansible/tasks/install-release.yml b/ansible/tasks/install-release.yml new file mode 100644 index 000000000..c2dfb0b9f --- /dev/null +++ b/ansible/tasks/install-release.yml @@ -0,0 +1,6 @@ +--- +- name: extract paperless-ng + unarchive: + src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz" + remote_src: yes + dest: "{{ tempdir.path }}" diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml new file mode 100644 index 000000000..823445dd1 --- /dev/null +++ b/ansible/tasks/install-source.yml @@ -0,0 +1,133 @@ +--- +# https://github.com/jonaswinkler/paperless-ng/blob/dev/.github/workflows/ci.yml +- name: install dev dependencies + apt: + pkg: + - git + - npm + - libqpdf-dev + +- name: create temporary git directory + tempfile: + state: directory + register: gitdir + +- name: pull paperless-ng + git: + repo: https://github.com/jonaswinkler/paperless-ng.git + dest: "{{ gitdir.path }}" + version: "{{ paperlessng_version }}" + refspec: "+refs/pull/*:refs/pull/*" + when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string' + +- name: compile frontend + command: + cmd: "{{ item }}" + args: + chdir: "{{ gitdir.path }}/src-ui" + failed_when: false + with_items: + - npm install -g @angular/cli + - npm install + - ./node_modules/.bin/ng build --prod + +- name: install pipenv + pip: + name: + - pipenv + - pybind11 # building pikepdf for <0.9.14 + extra_args: --upgrade + +- name: allow building with any Python 3 release + lineinfile: + path: "{{ gitdir.path }}/Pipfile" + regexp: '^python_version = ".+"$' + line: python_version = "3" + +# TODO run dev in separate virtualenv +- name: install Pipfile dependencies + command: + cmd: pipenv install --dev + args: + chdir: "{{ gitdir.path }}" + +- name: clean output directory + file: + path: "{{ gitdir.path }}/dist" + state: absent + +- name: create output directories + file: + path: "{{ item }}" + state: directory + with_items: + - "{{ gitdir.path }}/dist" + - "{{ gitdir.path }}/dist/paperless-ng" + - "{{ gitdir.path }}/dist/paperless-ng/scripts" + +- name: copy application into place + copy: + src: "{{ gitdir.path }}/{{ item.src }}" + remote_src: yes + dest: "{{ gitdir.path }}/dist/paperless-ng/{{ item.dest | default('') }}" + with_items: + - src: CONTRIBUTING.md + - src: LICENSE + - src: Pipfile + - src: Pipfile.lock + - src: README.md + - src: paperless.conf.example + dest: "paperless.conf" + +# TODO can be copied for >=0.9.14 +- name: generate requirements.txt + command: + cmd: pipenv lock --keep-outdated -r + args: + chdir: "{{ gitdir.path }}" + register: requirements + +- name: write requirements.txt + copy: + content: "{{ requirements.stdout }}" + dest: "{{ gitdir.path }}/dist/paperless-ng/requirements.txt" + +- name: glob all scripts + find: + paths: "{{ gitdir.path }}/scripts/" + patterns: + - "*.service" + - "*.sh" + register: glob + +- name: copy scripts + copy: + src: "{{ item.path }}" + remote_src: yes + dest: "{{ gitdir.path }}/dist/paperless-ng/scripts/" + with_items: + - "{{ glob.files }}" + +- name: copy sources + command: + cmd: "cp -r src/ dist/paperless-ng/src" + args: + chdir: "{{ gitdir.path }}" + +- name: package app + archive: + path: "{{ gitdir.path }}/dist/" + dest: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz" + format: xz + +- name: extract paperless-ng + unarchive: + src: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz" + remote_src: yes + dest: "{{ tempdir.path }}" + when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string' + +- name: remove temporary git directory + file: + path: "{{ gitdir.path }}" + state: absent diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index a353a18ec..15f7f9ba1 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -34,7 +34,13 @@ - build-essential - python3-setuptools - python3-wheel - - python3-virtualenv + +# upstream virtualenv in Ubuntu 20.04 is broken +# https://github.com/pypa/virtualenv/issues/1873 +- name: install python virtualenv + pip: + name: virtualenv + extra_args: --upgrade - name: install ocr languages apt: @@ -97,6 +103,18 @@ # GNUPG_HOME required due to paperless db.py create_home: yes +- block: + - name: get latest release version + uri: + url: https://api.github.com/repos/jonaswinkler/paperless-ng/releases/latest + method: GET + register: latest_release + - name: parse latest release version + set_fact: + paperlessng_version: "{{ latest_release.json['tag_name'] | regex_replace('^ng-(.+)$', '\\1') }}" + when: paperlessng_version == "latest" + +# TODO store commit hash of installed version, use instead of version number - name: check for paperless-ng installation command: cmd: 'grep -Po "(?<=Paperless-ng )\d+\.\d+\.\d+" {{ paperlessng_directory }}/docs/changelog.html' @@ -109,59 +127,58 @@ set_fact: fresh_installation: '{{ "No such file or directory" in paperlessng_current_version.stderr }}' update_installation: '{{ "No such file or directory" not in paperlessng_current_version.stderr and paperlessng_current_version.stdout != paperlessng_version | string }}' - reconfigure_only: '{{ paperlessng_current_version.stdout == paperlessng_version | string }}' + reconfigure_only: "{{ paperlessng_current_version.stdout == paperlessng_version | string }}" -- name: backup current paperless-ng installation - copy: - src: "{{ paperlessng_directory }}" - remote_src: yes - dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/" +- block: + - name: backup current paperless-ng installation + copy: + src: "{{ paperlessng_directory }}" + remote_src: yes + dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/" + - name: remove current paperless sources + file: + path: "{{ paperlessng_directory }}/{{ item }}" + state: absent + with_items: + - docker + - docs + - scripts + - src + - static when: update_installation -- name: remove current paperless sources - file: - path: "{{ paperlessng_directory }}/{{ item }}" - state: absent - with_items: - - docker - - docs - - scripts - - src - - static - when: update_installation - -- name: create temporary directory - tempfile: - state: directory - register: tempdir - when: not reconfigure_only - -- name: extract paperless-ng - unarchive: - src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz" - remote_src: yes - dest: "{{ tempdir.path }}" - when: not reconfigure_only - -- name: change owner and permissions of paperless-ng - command: - cmd: "{{ item }}" - warn: false - with_items: - - "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}" - - "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;" - - "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;" - when: not reconfigure_only - -- name: move paperless-ng - command: - cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}" - when: not reconfigure_only - -- name: remove temporary directory - file: - path: "{{ tempdir.path }}" - state: absent +- block: + - name: create temporary directory + tempfile: + state: directory + register: tempdir + - name: check if version is available as release archive + uri: + url: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz" + method: GET + status_code: [200, 302, 404] + register: release_archive + - name: install paperless-ng from source + include_tasks: install-source.yml + when: release_archive.status == 404 + - name: install paperless-ng from release archive + include_tasks: install-release.yml + when: release_archive.status != 404 + - name: change owner and permissions of paperless-ng + command: + cmd: "{{ item }}" + warn: false + with_items: + - "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}" + - "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;" + - "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;" + - name: move paperless-ng + command: + cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}" + - name: remove temporary directory + file: + path: "{{ tempdir.path }}" + state: absent when: not reconfigure_only - name: create paperless-ng directories and set permissions @@ -310,21 +327,20 @@ creates: "{{ paperlessng_virtualenv }}" register: venv -- name: install paperlessng requirements - become: yes - become_user: "{{ paperlessng_system_user }}" - pip: - requirements: "{{ paperlessng_directory }}/requirements.txt" - executable: "{{ paperlessng_virtualenv }}/bin/pip3" - extra_args: --upgrade - when: not reconfigure_only - -- name: migrate database schema - become: yes - become_user: "{{ paperlessng_system_user }}" - command: "{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py migrate" - register: database_schema - changed_when: '"No migrations to apply." not in database_schema.stdout' +- block: + - name: install paperlessng requirements + become: yes + become_user: "{{ paperlessng_system_user }}" + pip: + requirements: "{{ paperlessng_directory }}/requirements.txt" + executable: "{{ paperlessng_virtualenv }}/bin/pip3" + extra_args: --upgrade + - name: migrate database schema + become: yes + become_user: "{{ paperlessng_system_user }}" + command: "{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py migrate" + register: database_schema + changed_when: '"No migrations to apply." not in database_schema.stdout' when: not reconfigure_only - name: configure paperless superuser From db605d6a8667ef0ab9b176afe1c1d54af71ad2e1 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Fri, 22 Jan 2021 11:10:56 +0100 Subject: [PATCH 020/898] Adapt github action to build PR version --- .github/workflows/ansible.yml | 23 ++++++++++++++++++++++- ansible/molecule/fresh/converge.yml | 6 ++++++ ansible/molecule/update/converge.yml | 5 ++--- ansible/molecule/update/prepare.yml | 2 +- ansible/tasks/install-source.yml | 4 +--- 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index 646c7ff81..60589f87d 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: # https://molecule.readthedocs.io/en/latest/ci.html#github-actions - test: + test-fresh: runs-on: ubuntu-latest # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/')) @@ -31,6 +31,27 @@ jobs: cd ansible molecule test -s fresh working-directory: "${{ github.repository }}" + test-update: + runs-on: ubuntu-latest + # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context + if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/')) + steps: + - name: Check out the codebase + uses: actions/checkout@v2 + with: + path: "${{ github.repository }}" + - name: Set up Python + uses: actions/setup-python@v2 + - name: Set up Docker + uses: docker-practice/actions-setup-docker@master + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + python3 -m pip install molecule[ansible,docker] + ansible --version + docker --version + molecule --version + python --version - name: Test release update with molecule run: | cd ansible diff --git a/ansible/molecule/fresh/converge.yml b/ansible/molecule/fresh/converge.yml index 99e25677b..39d20050d 100644 --- a/ansible/molecule/fresh/converge.yml +++ b/ansible/molecule/fresh/converge.yml @@ -2,6 +2,12 @@ - name: fresh installation hosts: all tasks: + - name: set github ref as version when available + set_fact: + paperlessng_version: "{{ lookup('env', 'GITHUB_REF') | default('latest', True) }}" + - name: debug + debug: + var: paperlessng_version - name: install paperless-ng with default parameters include_role: name: ansible diff --git a/ansible/molecule/update/converge.yml b/ansible/molecule/update/converge.yml index b19a5981a..f5f9b17c2 100644 --- a/ansible/molecule/update/converge.yml +++ b/ansible/molecule/update/converge.yml @@ -2,10 +2,9 @@ - name: update previous release to newest release hosts: all tasks: - - name: set current version as installation target + - name: set github ref as version when available set_fact: - paperlessng_version: 0.9.14 - + paperlessng_version: "{{ lookup('env', 'GITHUB_REF') | default('latest', True) }}" - name: update to newest paperless-ng release include_role: name: ansible diff --git a/ansible/molecule/update/prepare.yml b/ansible/molecule/update/prepare.yml index 6f3734329..138ebdfce 100644 --- a/ansible/molecule/update/prepare.yml +++ b/ansible/molecule/update/prepare.yml @@ -3,7 +3,7 @@ tasks: - name: set previous version as installation target set_fact: - paperlessng_version: 0.9.13 + paperlessng_version: 1.0.0 - name: install previous paperless-ng release include_role: diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml index 823445dd1..8f6dc0e03 100644 --- a/ansible/tasks/install-source.yml +++ b/ansible/tasks/install-source.yml @@ -18,7 +18,6 @@ dest: "{{ gitdir.path }}" version: "{{ paperlessng_version }}" refspec: "+refs/pull/*:refs/pull/*" - when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string' - name: compile frontend command: @@ -31,6 +30,7 @@ - npm install - ./node_modules/.bin/ng build --prod +# TODO run dev in separate virtualenv - name: install pipenv pip: name: @@ -44,7 +44,6 @@ regexp: '^python_version = ".+"$' line: python_version = "3" -# TODO run dev in separate virtualenv - name: install Pipfile dependencies command: cmd: pipenv install --dev @@ -125,7 +124,6 @@ src: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz" remote_src: yes dest: "{{ tempdir.path }}" - when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string' - name: remove temporary git directory file: From a147534b6851dfc419b5a02f9ecc1bad71c49347 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 22 Jan 2021 15:07:52 +0100 Subject: [PATCH 021/898] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d06f78246..6a570d79d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![ci](https://github.com/jonaswinkler/paperless-ng/workflows/ci/badge.svg) +[![ci](https://github.com/jonaswinkler/paperless-ng/workflows/ci/badge.svg)](https://github.com/jonaswinkler/paperless-ng/actions) [![Documentation Status](https://readthedocs.org/projects/paperless-ng/badge/?version=latest)](https://paperless-ng.readthedocs.io/en/latest/?badge=latest) [![Gitter](https://badges.gitter.im/paperless-ng/community.svg)](https://gitter.im/paperless-ng/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Docker Hub Pulls](https://img.shields.io/docker/pulls/jonaswinkler/paperless-ng.svg)](https://hub.docker.com/r/jonaswinkler/paperless-ng) From e3c49ac78d866bc8d62442b91ae5bcf046eba111 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Fri, 22 Jan 2021 14:21:35 +0100 Subject: [PATCH 022/898] Determine installed version by git commit hash --- .github/workflows/ansible.yml | 4 +- ansible/molecule/fresh/converge.yml | 3 -- ansible/tasks/install-source.yml | 4 +- ansible/tasks/main.yml | 73 ++++++++++++++++++++++++----- 4 files changed, 65 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index 60589f87d..c11472361 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -21,7 +21,7 @@ jobs: - name: Install dependencies run: | python3 -m pip install --upgrade pip - python3 -m pip install molecule[ansible,docker] + python3 -m pip install molecule[ansible,docker] jmespath ansible --version docker --version molecule --version @@ -47,7 +47,7 @@ jobs: - name: Install dependencies run: | python3 -m pip install --upgrade pip - python3 -m pip install molecule[ansible,docker] + python3 -m pip install molecule[ansible,docker] jmespath ansible --version docker --version molecule --version diff --git a/ansible/molecule/fresh/converge.yml b/ansible/molecule/fresh/converge.yml index 39d20050d..eec6e6444 100644 --- a/ansible/molecule/fresh/converge.yml +++ b/ansible/molecule/fresh/converge.yml @@ -5,9 +5,6 @@ - name: set github ref as version when available set_fact: paperlessng_version: "{{ lookup('env', 'GITHUB_REF') | default('latest', True) }}" - - name: debug - debug: - var: paperlessng_version - name: install paperless-ng with default parameters include_role: name: ansible diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml index 8f6dc0e03..64b7dbeb2 100644 --- a/ansible/tasks/install-source.yml +++ b/ansible/tasks/install-source.yml @@ -116,12 +116,12 @@ - name: package app archive: path: "{{ gitdir.path }}/dist/" - dest: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz" + dest: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_commit }}.tar.xz" format: xz - name: extract paperless-ng unarchive: - src: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz" + src: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_commit }}.tar.xz" remote_src: yes dest: "{{ tempdir.path }}" diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index 15f7f9ba1..5ad30dfcf 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -111,23 +111,65 @@ register: latest_release - name: parse latest release version set_fact: - paperlessng_version: "{{ latest_release.json['tag_name'] | regex_replace('^ng-(.+)$', '\\1') }}" + paperlessng_version: "{{ latest_release.json['tag_name'] }}" when: paperlessng_version == "latest" -# TODO store commit hash of installed version, use instead of version number +- block: + - name: sanitize version string + set_fact: + paperlessng_version: "{{ paperlessng_version | regex_replace('^ng-(\\d+\\.\\d+\\.\\d+)$', '\\1') }}" + - name: get tag data + uri: + url: https://api.github.com/repos/jonaswinkler/paperless-ng/tags + method: GET + register: tags + - name: get commit for target tag + set_fact: + paperlessng_commit: "{{ tags.json | json_query('[?name==`ng-' + paperlessng_version +'`] | [0].commit.sha') }}" + when: paperlessng_version | regex_search("^(ng-)?(\d+\.\d+\.\d+)$") + +- block: + - name: check if version is branch + uri: + url: "https://api.github.com/repos/jonaswinkler/paperless-ng/branches/{{ paperlessng_version }}" + method: GET + status_code: [200, 404] + register: branch + - name: get commit for target branch + set_fact: + paperlessng_commit: "{{ branch.json | json_query('commit.sha') }}" + when: branch.status == 200 + - block: + - name: check if version is commit-or-ref + uri: + url: "https://api.github.com/repos/jonaswinkler/paperless-ng/commits/{{ paperlessng_version }}" + method: GET + status_code: [200, 404, 422] + register: commit + - name: get commit for target commit-or-ref + set_fact: + paperlessng_commit: "{{ commit.json | json_query('sha') }}" + when: commit.status == 200 + - name: fail + fail: + msg: "Can not determine commit from `paperlessng_version=={{ paperlessng_version }}`!" + when: commit.status != 200 + when: branch.status == 404 + when: not(paperlessng_version | regex_search("^(ng-)?(\d+\.\d+\.\d+)$")) + - name: check for paperless-ng installation command: - cmd: 'grep -Po "(?<=Paperless-ng )\d+\.\d+\.\d+" {{ paperlessng_directory }}/docs/changelog.html' - changed_when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string' + cmd: "cat {{ paperlessng_directory }}/.installed_version" + changed_when: '"No such file or directory" in paperlessng_current_commit.stderr or paperlessng_current_commit.stdout != paperlessng_commit | string' failed_when: false ignore_errors: yes - register: paperlessng_current_version + register: paperlessng_current_commit - name: register current state set_fact: - fresh_installation: '{{ "No such file or directory" in paperlessng_current_version.stderr }}' - update_installation: '{{ "No such file or directory" not in paperlessng_current_version.stderr and paperlessng_current_version.stdout != paperlessng_version | string }}' - reconfigure_only: "{{ paperlessng_current_version.stdout == paperlessng_version | string }}" + fresh_installation: '{{ "No such file or directory" in paperlessng_current_commit.stderr }}' + update_installation: '{{ "No such file or directory" not in paperlessng_current_commit.stderr and paperlessng_current_commit.stdout != paperlessng_commit | string }}' + reconfigure_only: "{{ paperlessng_current_commit.stdout == paperlessng_commit | string }}" - block: - name: backup current paperless-ng installation @@ -156,14 +198,14 @@ uri: url: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz" method: GET - status_code: [200, 302, 404] + status_code: [200, 404] register: release_archive - name: install paperless-ng from source include_tasks: install-source.yml when: release_archive.status == 404 - name: install paperless-ng from release archive include_tasks: install-release.yml - when: release_archive.status != 404 + when: release_archive.status == 200 - name: change owner and permissions of paperless-ng command: cmd: "{{ item }}" @@ -175,6 +217,13 @@ - name: move paperless-ng command: cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}" + - name: store commit hash of installed version + copy: + content: "{{ paperlessng_commit }}" + dest: "{{ paperlessng_directory }}/.installed_version" + owner: "{{ paperlessng_system_user }}" + group: "{{ paperlessng_system_group }}" + mode: "0440" - name: remove temporary directory file: path: "{{ tempdir.path }}" @@ -197,7 +246,7 @@ - name: rename initial config command: - cmd: "mv {{ paperlessng_directory }}/paperless.conf {{ paperlessng_directory }}/paperless.conf.template" + cmd: "mv -f {{ paperlessng_directory }}/paperless.conf {{ paperlessng_directory }}/paperless.conf.template" removes: "{{ paperlessng_directory }}/paperless.conf" - name: configure paperless-ng @@ -408,7 +457,7 @@ # https://www.freedesktop.org/software/systemd/man/systemd.exec.html { option: "User", value: "{{ paperlessng_system_user }}" }, { option: "Group", value: "{{ paperlessng_system_group }}" }, - { option: "WorkingDirectory", value: "{{ paperlessng_directory }}/src", }, + { option: "WorkingDirectory", value: "{{ paperlessng_directory }}/src" }, { option: "ProtectSystem", value: "full" }, { option: "NoNewPrivileges", value: "true" }, { option: "PrivateUsers", value: "true" }, From 9af0e1ff9aa610062414778546e75e5bf01820ad Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 22 Jan 2021 17:22:02 +0100 Subject: [PATCH 023/898] Update README.md --- README.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/README.md b/README.md index 6a570d79d..e6b9feace 100644 --- a/README.md +++ b/README.md @@ -54,25 +54,6 @@ If you want to see some screenshots of paperless-ng in action, [some are availab For a complete list of changes from paperless, check out the [changelog](https://paperless-ng.readthedocs.io/en/latest/changelog.html) -# Roadmap for 1.0 - -- Make the front end nice (except mobile). -- Fix whatever bugs I and you find. -- Make the documentation nice. - -## On the chopping block. - -- **GnuPG encrypion.** [Here's a note about encryption in paperless](https://paperless-ng.readthedocs.io/en/latest/administration.html#managing-encryption). The gist of it is that I don't see which attacks this implementation protects against. It gives a false sense of security to users who don't care about how it works. - -## Wont-do list. - -These features will probably never make it into paperless, since paperless is meant to be an easy to use set-and-forget solution. - -- **Document versions.** I might consider adding the ability to update a document with a newer version, but that's about it. The kind of documents that get added to paperless usually don't change at all. -- **Workflows.** I don't see a use case for these, yet. -- **Folders.** Tags are superior in just about every way. -- **Apps / extension support.** Again, paperless is meant to be simple. - # Getting started The recommended way to deploy paperless is docker-compose. The files in the /docker/hub directory are configured to pull the image from Docker Hub. From d730b81fb63626377523c4a5fdfa74e790b4df89 Mon Sep 17 00:00:00 2001 From: Reto <reto007@hotmail.com> Date: Sat, 23 Jan 2021 12:55:50 +0100 Subject: [PATCH 024/898] tried to fill the gaps and change wording where it felt necessary for better understanding --- docs/setup.rst | 76 ++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index a3a0bd1e8..e73e6aeaa 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -25,10 +25,10 @@ Paperless consists of the following components: or by any other means such as Apache ``mod_wsgi``. * **The consumer:** This is what watches your consumption folder for documents. - However, the consumer itself does not consume really consume your documents anymore. - It rather notifies a task processor that a new file is ready for consumption. + However, the consumer itself does not really consume your documents. + Now it notifies a task processor that a new file is ready for consumption. I suppose it should be named differently. - This also used to check your emails, but that's now gone elsewhere as well. + This was also used to check your emails, but that's now done elsewhere as well. Start the consumer with the management command ``document_consumer``: @@ -40,25 +40,25 @@ Paperless consists of the following components: .. _setup-task_processor: * **The task processor:** Paperless relies on `Django Q <https://django-q.readthedocs.io/en/latest/>`_ - for doing much of the heavy lifting. This is a task queue that accepts tasks from - multiple sources and processes tasks in parallel. It also comes with a scheduler that executes + for doing most of the heavy lifting. This is a task queue that accepts tasks from + multiple sources and processes these in parallel. It also comes with a scheduler that executes certain commands periodically. This task processor is responsible for: * Consuming documents. When the consumer finds new documents, it notifies the task processor to start a consumption task. - * Consuming emails. It periodically checks your configured accounts for new mails and - produces consumption tasks for any documents it finds. * The task processor also performs the consumption of any documents you upload through the web interface. - * Maintain the search index and the automatic matching algorithm. These are things that paperless + * Consuming emails. It periodically checks your configured accounts for new emails and + notifies the task processor to consume the attachment of an email. + * Maintaining the search index and the automatic matching algorithm. These are things that paperless needs to do from time to time in order to operate properly. This allows paperless to process multiple documents from your consumption folder in parallel! On - a modern multi core system, consumption with full ocr is blazing fast. + a modern multi core system, this makes the consumption process with full OCR blazingly fast. - The task processor comes with a built-in admin interface that you can use to see whenever any of the + The task processor comes with a built-in admin interface that you can use to check whenever any of the tasks fail and inspect the errors (i.e., wrong email credentials, errors during consuming a specific file, etc). @@ -70,8 +70,8 @@ Paperless consists of the following components: $ pipenv run python3 manage.py qcluster * A `redis <https://redis.io/>`_ message broker: This is a really lightweight service that is responsible - for getting the tasks from the webserver and consumer to the task scheduler. These run in different - processes (maybe even on different machines!), and therefore, this is necessary. + for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different + process (maybe even on different machines!), and therefore, this is necessary. * Optional: A database server. Paperless supports both PostgreSQL and SQLite for storing its data. @@ -79,7 +79,7 @@ Paperless consists of the following components: Installation ############ -You can go multiple routes with setting up and running Paperless: +You can go multiple routes to setup and run Paperless: * :ref:`Pull the image from Docker Hub <setup-docker_hub>` * :ref:`Build the Docker image yourself <setup-docker_build>` @@ -87,14 +87,15 @@ You can go multiple routes with setting up and running Paperless: * :ref:`Use ansible to install Paperless on your system automatically (bare metal) <setup-ansible>` The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff -from above automatically so that it just works and uses sensible defaults for all configuration options. +from the above automatically so that it just works and uses sensible defaults for all configuration options. +Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>` -The bare metal route is more complicated to setup but makes it easier +The bare metal route is complicated to setup but makes it easier should you want to contribute some code back. You need to configure and run the above mentioned components yourself. -The ansible route cobines benefits from both options: -the setup process is fully automated, reproducible and idempotent, +The ansible route combines benefits of both options: +the setup process is fully automated, reproducible and independent, it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation. @@ -103,10 +104,12 @@ and it simultaneously provides the flexibility of a bare metal installation. Install Paperless from Docker Hub ================================= +1. Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ng` to have a place for your configuration files and consumption directory. + 1. Go to the `/docker/compose directory on the project page <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_ - and download one of the ``docker-compose.*.yml`` files, depending on which database backend you + and download one of the `docker-compose.*.yml` files, depending on which database backend you want to use. Rename this file to `docker-compose.yml`. - If you want to enable optional support for Office documents, download a file with ``-tika`` in its name. + If you want to enable optional support for Office documents, download a file with `-tika` in the file name. Download the ``docker-compose.env`` file and the ``.env`` file as well and store them in the same directory. @@ -121,30 +124,31 @@ Install Paperless from Docker Hub If you want to use the included ``docker-compose.*.yml`` file, you need to have at least Docker version **17.09.0** and docker-compose - version **1.17.0**. + version **1.17.0**. + To check do: `docker-compose -v` or `docker -v` See the `Docker installation guide`_ on how to install the current version of Docker for your operating system or Linux distribution of - choice. To get an up-to-date version of docker-compose, follow the - `docker-compose installation guide`_ if your package repository doesn't + choice. To get the latest version of docker-compose, follow the + `docker-compose installation guide`_if your package repository doesn't include it. .. _Docker installation guide: https://docs.docker.com/engine/installation/ .. _docker-compose installation guide: https://docs.docker.com/compose/install/ 3. Modify ``docker-compose.yml`` to your preferences. You may want to change the path - to the consumption directory in this file. Find the line that specifies where + to the consumption directory. Find the line that specifies where to mount the consumption directory: .. code:: - - ./consume:/usr/src/paperless/consume + - ./**consume**:/usr/src/paperless/consume Replace the part BEFORE the colon with a local directory of your choice: .. code:: - - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume + - /**home/jonaswinkler/paperless-inbox**:/usr/src/paperless/consume Don't change the part after the colon or paperless wont find your documents. @@ -155,23 +159,27 @@ Install Paperless from Docker Hub both the docker container and you on the host machine have write access to the consumption directory. If your UID and GID on the host system is 1000 (the default for the first normal user on most systems), it will - work out of the box without any modifications. + work out of the box without any modifications. `id "username"` to check. .. note:: - You can use any settings from the file ``paperless.conf.example`` in this file. - Have a look at :ref:`configuration` to see whats available. + You can copy any setting from the file ``paperless.conf.example`` and paste it here. + Have a look at :ref:`configuration` to see what's available. .. caution:: - Certain file systems such as NFS network shares don't support file system + Some file systems such as NFS network shares don't support file system notifications with ``inotify``. When storing the consumption directory - on such a file system, paperless will be unable to pick up new files + on such a file system, paperless will not pick up new files with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``, which will disable inotify. See :ref:`here <configuration-polling>`. + +5. Now head over to: https://hub.docker.com/r/jonaswinkler/paperless-ng and choose your preferred + image and copy the link. To download this image do a `docker pull` followed by the link. Do this within the directory with the .yml files. + Depending on your network connection and CPU this will take a while. You have time to get a beverage. 5. Run ``docker-compose up -d``. This will create and start the necessary - containers. + containers, but your are not done yet! 6. To be able to login, you will need a super user. To create it, execute the following command: @@ -181,12 +189,12 @@ Install Paperless from Docker Hub $ docker-compose run --rm webserver createsuperuser This will prompt you to set a username, an optional e-mail address and - finally a password. + finally a password (at least 8 characters). 7. The default ``docker-compose.yml`` exports the webserver on your local port 8000. If you haven't adapted this, you should now be able to visit your - Paperless instance at ``http://127.0.0.1:8000``. You can login with the - user and password you just created. + Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. + Use the login credentials you have created with the previous step. .. _Docker: https://www.docker.com/ .. _docker-compose: https://docs.docker.com/compose/install/ From bb4321f84e0aef8d5510b60796ad2bfa64bed547 Mon Sep 17 00:00:00 2001 From: Reto <reto007@hotmail.com> Date: Sat, 23 Jan 2021 13:14:31 +0100 Subject: [PATCH 025/898] minor changes, like numbering --- docs/setup.rst | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index e73e6aeaa..d2bd7ed0a 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -106,7 +106,7 @@ Install Paperless from Docker Hub 1. Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ng` to have a place for your configuration files and consumption directory. -1. Go to the `/docker/compose directory on the project page <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_ +2. Go to the `/docker/compose directory on the project page <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_ and download one of the `docker-compose.*.yml` files, depending on which database backend you want to use. Rename this file to `docker-compose.yml`. If you want to enable optional support for Office documents, download a file with `-tika` in the file name. @@ -118,7 +118,7 @@ Install Paperless from Docker Hub For new installations, it is recommended to use PostgreSQL as the database backend. -2. Install `Docker`_ and `docker-compose`_. +3. Install `Docker`_ and `docker-compose`_. .. caution:: @@ -136,24 +136,24 @@ Install Paperless from Docker Hub .. _Docker installation guide: https://docs.docker.com/engine/installation/ .. _docker-compose installation guide: https://docs.docker.com/compose/install/ -3. Modify ``docker-compose.yml`` to your preferences. You may want to change the path +4. Modify ``docker-compose.yml`` to your preferences. You may want to change the path to the consumption directory. Find the line that specifies where to mount the consumption directory: .. code:: - - ./**consume**:/usr/src/paperless/consume + - ./consume:/usr/src/paperless/consume Replace the part BEFORE the colon with a local directory of your choice: .. code:: - - /**home/jonaswinkler/paperless-inbox**:/usr/src/paperless/consume + - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume Don't change the part after the colon or paperless wont find your documents. -4. Modify ``docker-compose.env``, following the comments in the file. The +5. Modify ``docker-compose.env``, following the comments in the file. The most important change is to set ``USERMAP_UID`` and ``USERMAP_GID`` to the uid and gid of your user on the host system. This ensures that both the docker container and you on the host machine have write access @@ -174,14 +174,14 @@ Install Paperless from Docker Hub with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``, which will disable inotify. See :ref:`here <configuration-polling>`. -5. Now head over to: https://hub.docker.com/r/jonaswinkler/paperless-ng and choose your preferred +6. Now head over to: https://hub.docker.com/r/jonaswinkler/paperless-ng and choose your preferred image and copy the link. To download this image do a `docker pull` followed by the link. Do this within the directory with the .yml files. Depending on your network connection and CPU this will take a while. You have time to get a beverage. -5. Run ``docker-compose up -d``. This will create and start the necessary +7. Run ``docker-compose up -d``. This will create and start the necessary containers, but your are not done yet! -6. To be able to login, you will need a super user. To create it, execute the +8. To be able to login, you will need a super user. To create it, execute the following command: .. code-block:: shell-session @@ -191,7 +191,7 @@ Install Paperless from Docker Hub This will prompt you to set a username, an optional e-mail address and finally a password (at least 8 characters). -7. The default ``docker-compose.yml`` exports the webserver on your local port +9. The default ``docker-compose.yml`` exports the webserver on your local port 8000. If you haven't adapted this, you should now be able to visit your Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. Use the login credentials you have created with the previous step. From 8dd127a249da73d51cadf3623eca0114fdd269ed Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sat, 23 Jan 2021 22:08:36 +0100 Subject: [PATCH 026/898] Fully prepare release package --- ansible/tasks/install-source.yml | 63 +++++++++++++------------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml index 64b7dbeb2..04a2991b9 100644 --- a/ansible/tasks/install-source.yml +++ b/ansible/tasks/install-source.yml @@ -5,7 +5,7 @@ pkg: - git - npm - - libqpdf-dev + - gettext - name: create temporary git directory tempfile: @@ -30,26 +30,6 @@ - npm install - ./node_modules/.bin/ng build --prod -# TODO run dev in separate virtualenv -- name: install pipenv - pip: - name: - - pipenv - - pybind11 # building pikepdf for <0.9.14 - extra_args: --upgrade - -- name: allow building with any Python 3 release - lineinfile: - path: "{{ gitdir.path }}/Pipfile" - regexp: '^python_version = ".+"$' - line: python_version = "3" - -- name: install Pipfile dependencies - command: - cmd: pipenv install --dev - args: - chdir: "{{ gitdir.path }}" - - name: clean output directory file: path: "{{ gitdir.path }}/dist" @@ -75,28 +55,16 @@ - src: Pipfile - src: Pipfile.lock - src: README.md + - src: requirements.txt - src: paperless.conf.example dest: "paperless.conf" -# TODO can be copied for >=0.9.14 -- name: generate requirements.txt - command: - cmd: pipenv lock --keep-outdated -r - args: - chdir: "{{ gitdir.path }}" - register: requirements - -- name: write requirements.txt - copy: - content: "{{ requirements.stdout }}" - dest: "{{ gitdir.path }}/dist/paperless-ng/requirements.txt" - - name: glob all scripts find: - paths: "{{ gitdir.path }}/scripts/" + paths: ["{{ gitdir.path }}/scripts/"] patterns: - - "*.service" - - "*.sh" + - "*.service" + - "*.sh" register: glob - name: copy scripts @@ -113,6 +81,27 @@ args: chdir: "{{ gitdir.path }}" +- name: install paperlessng requirements + pip: + requirements: "{{ gitdir.path }}/requirements.txt" + virtualenv: "{{ gitdir.path }}/.venv/" + extra_args: --upgrade + +- name: compile messages + command: "{{ gitdir.path }}/.venv/bin/python3 manage.py compilemessages" + args: + chdir: "{{ gitdir.path }}/dist/paperless-ng/src/" + +- name: collect static files + command: "{{ gitdir.path }}/.venv/bin/python3 manage.py collectstatic --no-input" + args: + chdir: "{{ gitdir.path }}/dist/paperless-ng/src/" + +- name: remove pycache directories + shell: find . -name __pycache__ | xargs rm -r + args: + chdir: "{{ gitdir.path }}/dist/" + - name: package app archive: path: "{{ gitdir.path }}/dist/" From 2fd8b4d56bd868eabaa323c13b1d920268a339ae Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sat, 23 Jan 2021 22:09:56 +0100 Subject: [PATCH 027/898] Simplify molecule tests "Upgrade" path includes multiple paths anyway: - installing the latest official release package - builing the current PR from source - upgrading between the two versions --- .github/workflows/ansible.yml | 37 ++------ .../molecule/{update => default}/converge.yml | 0 .../molecule/{fresh => default}/molecule.yml | 0 .../molecule/{update => default}/prepare.yml | 2 +- ansible/molecule/default/verify.yml | 91 +++++++++++++++++++ ansible/molecule/fresh/converge.yml | 10 -- ansible/molecule/fresh/verify.yml | 60 ------------ ansible/molecule/update/molecule.yml | 35 ------- ansible/molecule/update/verify.yml | 60 ------------ 9 files changed, 100 insertions(+), 195 deletions(-) rename ansible/molecule/{update => default}/converge.yml (100%) rename ansible/molecule/{fresh => default}/molecule.yml (100%) rename ansible/molecule/{update => default}/prepare.yml (85%) create mode 100644 ansible/molecule/default/verify.yml delete mode 100644 ansible/molecule/fresh/converge.yml delete mode 100644 ansible/molecule/fresh/verify.yml delete mode 100644 ansible/molecule/update/molecule.yml delete mode 100644 ansible/molecule/update/verify.yml diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index c11472361..fd965e760 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: # https://molecule.readthedocs.io/en/latest/ci.html#github-actions - test-fresh: + test: runs-on: ubuntu-latest # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/')) @@ -26,36 +26,15 @@ jobs: docker --version molecule --version python --version - - name: Test fresh installation with molecule + - name: Test installation/build/upgrade with molecule run: | cd ansible - molecule test -s fresh - working-directory: "${{ github.repository }}" - test-update: - runs-on: ubuntu-latest - # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context - if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/')) - steps: - - name: Check out the codebase - uses: actions/checkout@v2 - with: - path: "${{ github.repository }}" - - name: Set up Python - uses: actions/setup-python@v2 - - name: Set up Docker - uses: docker-practice/actions-setup-docker@master - - name: Install dependencies - run: | - python3 -m pip install --upgrade pip - python3 -m pip install molecule[ansible,docker] jmespath - ansible --version - docker --version - molecule --version - python --version - - name: Test release update with molecule - run: | - cd ansible - molecule test -s update + molecule create + molecule verify + molecule converge + molecule idempotence + molecule verify + molecule destroy working-directory: "${{ github.repository }}" # # https://galaxy.ansible.com/docs/contributing/importing.html # release: diff --git a/ansible/molecule/update/converge.yml b/ansible/molecule/default/converge.yml similarity index 100% rename from ansible/molecule/update/converge.yml rename to ansible/molecule/default/converge.yml diff --git a/ansible/molecule/fresh/molecule.yml b/ansible/molecule/default/molecule.yml similarity index 100% rename from ansible/molecule/fresh/molecule.yml rename to ansible/molecule/default/molecule.yml diff --git a/ansible/molecule/update/prepare.yml b/ansible/molecule/default/prepare.yml similarity index 85% rename from ansible/molecule/update/prepare.yml rename to ansible/molecule/default/prepare.yml index 138ebdfce..e175eff5b 100644 --- a/ansible/molecule/update/prepare.yml +++ b/ansible/molecule/default/prepare.yml @@ -3,7 +3,7 @@ tasks: - name: set previous version as installation target set_fact: - paperlessng_version: 1.0.0 + paperlessng_version: latest - name: install previous paperless-ng release include_role: diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml new file mode 100644 index 000000000..01dc43192 --- /dev/null +++ b/ansible/molecule/default/verify.yml @@ -0,0 +1,91 @@ +--- +- name: Verify + hosts: all + gather_facts: false + + vars_files: + - ../../defaults/main.yml + + tasks: + - name: check if webserver is up + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}" + status_code: [200, 302] + return_content: yes + register: landingpage + failed_when: "'Sign in</button>' not in landingpage.content" + + - name: generate random name and content + set_fact: + content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}" + filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}" + + - name: check if document posting works + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/post_document/" + method: POST + body_format: form-multipart + body: + document: + content: "{{ content }}" + filename: "{{ filename }}.txt" + mime_type: text/plain + headers: + Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + return_content: yes + register: post_document + failed_when: "'OK' not in post_document.content" + + - name: verify uploaded document has been accepted + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" + headers: + Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + return_content: yes + register: logs + failed_when: "('Consuming ' + filename + '.txt') not in logs.content" + + # assumes txt consumption finished by now, might have to sleep a bit + - name: verify uploaded document has been consumed + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" + headers: + Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + return_content: yes + register: logs + failed_when: "filename + ' consumption finished' not in logs.content" + + - name: get documents + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/" + headers: + Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + return_content: yes + register: documents + + - name: set document index + set_fact: + index: "{{ documents.json['results'][0]['id'] }}" + + - name: verify uploaded document is avaiable + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/{{ index }}/" + headers: + Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + return_content: yes + register: document + failed_when: "'Not found.' in document.content or content not in document.json['content']" + + - name: check if deleting uploaded document works + uri: + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/bulk_edit/" + method: POST + body_format: json + body: + documents: ["{{ index }}"] + method: delete + parameters: {} + headers: + Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + register: delete_document + failed_when: "'OK' not in delete_document.json['result']" diff --git a/ansible/molecule/fresh/converge.yml b/ansible/molecule/fresh/converge.yml deleted file mode 100644 index eec6e6444..000000000 --- a/ansible/molecule/fresh/converge.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: fresh installation - hosts: all - tasks: - - name: set github ref as version when available - set_fact: - paperlessng_version: "{{ lookup('env', 'GITHUB_REF') | default('latest', True) }}" - - name: install paperless-ng with default parameters - include_role: - name: ansible diff --git a/ansible/molecule/fresh/verify.yml b/ansible/molecule/fresh/verify.yml deleted file mode 100644 index c353783ab..000000000 --- a/ansible/molecule/fresh/verify.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -- name: Verify - hosts: all - gather_facts: false - - vars_files: - - ../../defaults/main.yml - - tasks: - - name: check if webserver is up - uri: - url: http://localhost:8000 - status_code: [200, 302] - return_content: yes - register: landingpage - failed_when: "'Sign in</button>' not in landingpage.content" - - - name: check if document posting works - uri: - url: http://localhost:8000/api/documents/post_document/ - method: POST - body_format: form-multipart - body: - document: - content: FOO - filename: document.txt - mime_type: text/plain - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: post_document - failed_when: "'OK' not in post_document.content" - - - name: verify uploaded document has been accepted - uri: - url: http://localhost:8000/api/logs/ - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: logs - failed_when: "'Consuming document.txt' not in logs.content" - - # assumes txt consumption finished by now, might have to sleep a bit - - name: verify uploaded document has been consumed - uri: - url: http://localhost:8000/api/logs/ - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: logs - failed_when: "'document consumption finished' not in logs.content" - - - name: verify uploaded document is avaiable - uri: - url: http://localhost:8000/api/documents/1/ - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: document - failed_when: "'Not found.' in document.content or 'FOO' not in document.content" diff --git a/ansible/molecule/update/molecule.yml b/ansible/molecule/update/molecule.yml deleted file mode 100644 index 27f37ba63..000000000 --- a/ansible/molecule/update/molecule.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- -dependency: - name: galaxy -driver: - name: docker -platforms: - - name: ubuntu_focal - image: jrei/systemd-ubuntu:20.04 - privileged: true - volumes: - - /sys/fs/cgroup:/sys/fs/cgroup:ro - tmpfs: - - /tmp - - /run - - /run/lock - override_command: False - # ubuntu 18.04 bionic works except that - # the default redis configuration expects IPv6 which is not enabled in docker by default - # the default Python environment is configured for ASCII instead of UTF-8 - # ubuntu 16.04 xenial only has Python 3.5 which is EOL and breaks multiple dependencies - - name: debian_buster - image: jrei/systemd-debian:10 - privileged: true - volumes: - - /sys/fs/cgroup:/sys/fs/cgroup:ro - tmpfs: - - /tmp - - /run - - /run/lock - override_command: False - # debian 9 stretch only has Python 3.5 which is EOL and breaks multiple dependencies -provisioner: - name: ansible -verifier: - name: ansible diff --git a/ansible/molecule/update/verify.yml b/ansible/molecule/update/verify.yml deleted file mode 100644 index c353783ab..000000000 --- a/ansible/molecule/update/verify.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -- name: Verify - hosts: all - gather_facts: false - - vars_files: - - ../../defaults/main.yml - - tasks: - - name: check if webserver is up - uri: - url: http://localhost:8000 - status_code: [200, 302] - return_content: yes - register: landingpage - failed_when: "'Sign in</button>' not in landingpage.content" - - - name: check if document posting works - uri: - url: http://localhost:8000/api/documents/post_document/ - method: POST - body_format: form-multipart - body: - document: - content: FOO - filename: document.txt - mime_type: text/plain - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: post_document - failed_when: "'OK' not in post_document.content" - - - name: verify uploaded document has been accepted - uri: - url: http://localhost:8000/api/logs/ - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: logs - failed_when: "'Consuming document.txt' not in logs.content" - - # assumes txt consumption finished by now, might have to sleep a bit - - name: verify uploaded document has been consumed - uri: - url: http://localhost:8000/api/logs/ - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: logs - failed_when: "'document consumption finished' not in logs.content" - - - name: verify uploaded document is avaiable - uri: - url: http://localhost:8000/api/documents/1/ - headers: - Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' - return_content: yes - register: document - failed_when: "'Not found.' in document.content or 'FOO' not in document.content" From 3a091897f68837959d5ce69e88c737e5f72b33cf Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 24 Jan 2021 00:00:46 +0100 Subject: [PATCH 028/898] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e6b9feace..a19de79b2 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,8 @@ Here's what you get: # Features * Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents. +* Supports PDF documents, images, plain text files, and Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents). + * Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ng.readthedocs.io/en/latest/configuration.html#tika-settings)) * Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and can be configured freely. * Single page application front end. Should be pretty snappy. Will be mobile friendly in the future. * Includes a dashboard that shows basic statistics and has document upload. From e2ce565bc317b581de459459dfb3eb9fcd04c858 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sun, 24 Jan 2021 09:59:54 +0100 Subject: [PATCH 029/898] Simplify building from source Do not package app, instead copy directly into expected directory --- ansible/tasks/install-source.yml | 34 ++++++++------------------------ 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml index 04a2991b9..64fbc525b 100644 --- a/ansible/tasks/install-source.yml +++ b/ansible/tasks/install-source.yml @@ -30,25 +30,19 @@ - npm install - ./node_modules/.bin/ng build --prod -- name: clean output directory - file: - path: "{{ gitdir.path }}/dist" - state: absent - - name: create output directories file: path: "{{ item }}" state: directory with_items: - - "{{ gitdir.path }}/dist" - - "{{ gitdir.path }}/dist/paperless-ng" - - "{{ gitdir.path }}/dist/paperless-ng/scripts" + - "{{ tempdir.path }}/paperless-ng" + - "{{ tempdir.path }}/paperless-ng/scripts" - name: copy application into place copy: src: "{{ gitdir.path }}/{{ item.src }}" remote_src: yes - dest: "{{ gitdir.path }}/dist/paperless-ng/{{ item.dest | default('') }}" + dest: "{{ tempdir.path }}/paperless-ng/{{ item.dest | default('') }}" with_items: - src: CONTRIBUTING.md - src: LICENSE @@ -71,13 +65,13 @@ copy: src: "{{ item.path }}" remote_src: yes - dest: "{{ gitdir.path }}/dist/paperless-ng/scripts/" + dest: "{{ tempdir.path }}/paperless-ng/scripts/" with_items: - "{{ glob.files }}" - name: copy sources command: - cmd: "cp -r src/ dist/paperless-ng/src" + cmd: "cp -r src/ {{ tempdir.path }}/paperless-ng/src" args: chdir: "{{ gitdir.path }}" @@ -90,29 +84,17 @@ - name: compile messages command: "{{ gitdir.path }}/.venv/bin/python3 manage.py compilemessages" args: - chdir: "{{ gitdir.path }}/dist/paperless-ng/src/" + chdir: "{{ tempdir.path }}/paperless-ng/src/" - name: collect static files command: "{{ gitdir.path }}/.venv/bin/python3 manage.py collectstatic --no-input" args: - chdir: "{{ gitdir.path }}/dist/paperless-ng/src/" + chdir: "{{ tempdir.path }}/paperless-ng/src/" - name: remove pycache directories shell: find . -name __pycache__ | xargs rm -r args: - chdir: "{{ gitdir.path }}/dist/" - -- name: package app - archive: - path: "{{ gitdir.path }}/dist/" - dest: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_commit }}.tar.xz" - format: xz - -- name: extract paperless-ng - unarchive: - src: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_commit }}.tar.xz" - remote_src: yes - dest: "{{ tempdir.path }}" + chdir: "{{ tempdir.path }}" - name: remove temporary git directory file: From 61f21251171d014bc23463b2c4fdba8e97bcd689 Mon Sep 17 00:00:00 2001 From: Reto <reto007@hotmail.com> Date: Sun, 24 Jan 2021 19:37:46 +0100 Subject: [PATCH 030/898] fix my ignorance of idempotent --- docs/setup.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index d2bd7ed0a..24d0e5604 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -95,9 +95,8 @@ should you want to contribute some code back. You need to configure and run the above mentioned components yourself. The ansible route combines benefits of both options: -the setup process is fully automated, reproducible and independent, -it includes the same sensible defaults, -and it simultaneously provides the flexibility of a bare metal installation. +the setup process is fully automated, reproducible and `idempotent <https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency>`, +it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation. .. _setup-docker_hub: From 63f36cffb3f4eb122efdd3e13e63055dbb76defc Mon Sep 17 00:00:00 2001 From: Reto <reto007@hotmail.com> Date: Sun, 24 Jan 2021 20:00:09 +0100 Subject: [PATCH 031/898] fix my ignorance of idempotent --- docs/setup.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index d2bd7ed0a..73af557e7 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -88,18 +88,19 @@ You can go multiple routes to setup and run Paperless: The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff from the above automatically so that it just works and uses sensible defaults for all configuration options. -Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>` +Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_ The bare metal route is complicated to setup but makes it easier should you want to contribute some code back. You need to configure and run the above mentioned components yourself. The ansible route combines benefits of both options: -the setup process is fully automated, reproducible and independent, -it includes the same sensible defaults, -and it simultaneously provides the flexibility of a bare metal installation. +the setup process is fully automated, reproducible and `idempotent <https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency>`_, +it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation. .. _setup-docker_hub: +.. _CLI Basics: https://sehn.tech/post/devops-with-docker/ +.. _idempotent: https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency Install Paperless from Docker Hub ================================= From a272f82796f200fae41690d8a07d8617afff6a06 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sun, 24 Jan 2021 10:05:42 +0100 Subject: [PATCH 032/898] Build source package in paperlessng_directory Avoids permission problems in /tmp --- ansible/molecule/default/verify.yml | 5 +- ansible/tasks/install-source.yml | 165 +++++++++++++++------------- ansible/tasks/main.yml | 11 +- 3 files changed, 101 insertions(+), 80 deletions(-) diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index 01dc43192..1b3a436ca 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -45,7 +45,10 @@ register: logs failed_when: "('Consuming ' + filename + '.txt') not in logs.content" - # assumes txt consumption finished by now, might have to sleep a bit + - name: sleep 5 seconds + pause: + seconds: 5 + - name: verify uploaded document has been consumed uri: url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml index 64fbc525b..ab8fbfef7 100644 --- a/ansible/tasks/install-source.yml +++ b/ansible/tasks/install-source.yml @@ -1,5 +1,4 @@ --- -# https://github.com/jonaswinkler/paperless-ng/blob/dev/.github/workflows/ci.yml - name: install dev dependencies apt: pkg: @@ -7,96 +6,106 @@ - npm - gettext -- name: create temporary git directory - tempfile: - state: directory - register: gitdir - -- name: pull paperless-ng - git: - repo: https://github.com/jonaswinkler/paperless-ng.git - dest: "{{ gitdir.path }}" - version: "{{ paperlessng_version }}" - refspec: "+refs/pull/*:refs/pull/*" - -- name: compile frontend - command: - cmd: "{{ item }}" - args: - chdir: "{{ gitdir.path }}/src-ui" - failed_when: false - with_items: - - npm install -g @angular/cli - - npm install - - ./node_modules/.bin/ng build --prod - - name: create output directories file: path: "{{ item }}" state: directory + owner: "{{ paperlessng_system_user }}" + group: "{{ paperlessng_system_group }}" + mode: "750" with_items: - "{{ tempdir.path }}/paperless-ng" - "{{ tempdir.path }}/paperless-ng/scripts" -- name: copy application into place - copy: - src: "{{ gitdir.path }}/{{ item.src }}" - remote_src: yes - dest: "{{ tempdir.path }}/paperless-ng/{{ item.dest | default('') }}" - with_items: - - src: CONTRIBUTING.md - - src: LICENSE - - src: Pipfile - - src: Pipfile.lock - - src: README.md - - src: requirements.txt - - src: paperless.conf.example - dest: "paperless.conf" +- block: + - name: create temporary git directory + tempfile: + state: directory + path: "{{ paperlessng_directory }}" + register: gitdir -- name: glob all scripts - find: - paths: ["{{ gitdir.path }}/scripts/"] - patterns: - - "*.service" - - "*.sh" - register: glob + - name: pull paperless-ng + git: + repo: https://github.com/jonaswinkler/paperless-ng.git + dest: "{{ gitdir.path }}" + version: "{{ paperlessng_version }}" + refspec: "+refs/pull/*:refs/pull/*" -- name: copy scripts - copy: - src: "{{ item.path }}" - remote_src: yes - dest: "{{ tempdir.path }}/paperless-ng/scripts/" - with_items: - - "{{ glob.files }}" + - name: compile frontend + command: + cmd: "{{ item }}" + args: + chdir: "{{ gitdir.path }}/src-ui" + failed_when: false + with_items: + - npm install -g @angular/cli + - npm install + - ./node_modules/.bin/ng build --prod -- name: copy sources - command: - cmd: "cp -r src/ {{ tempdir.path }}/paperless-ng/src" - args: - chdir: "{{ gitdir.path }}" + - name: copy application into place + copy: + src: "{{ gitdir.path }}/{{ item.src }}" + remote_src: yes + dest: "{{ tempdir.path }}/paperless-ng/{{ item.dest | default('') }}" + with_items: + - src: CONTRIBUTING.md + - src: LICENSE + - src: Pipfile + - src: Pipfile.lock + - src: README.md + - src: requirements.txt + - src: paperless.conf.example + dest: "paperless.conf" -- name: install paperlessng requirements - pip: - requirements: "{{ gitdir.path }}/requirements.txt" - virtualenv: "{{ gitdir.path }}/.venv/" - extra_args: --upgrade + - name: glob all scripts + find: + paths: ["{{ gitdir.path }}/scripts/"] + patterns: + - "*.service" + - "*.sh" + register: glob -- name: compile messages - command: "{{ gitdir.path }}/.venv/bin/python3 manage.py compilemessages" - args: - chdir: "{{ tempdir.path }}/paperless-ng/src/" + - name: copy scripts + copy: + src: "{{ item.path }}" + remote_src: yes + dest: "{{ tempdir.path }}/paperless-ng/scripts/" + with_items: + - "{{ glob.files }}" -- name: collect static files - command: "{{ gitdir.path }}/.venv/bin/python3 manage.py collectstatic --no-input" - args: - chdir: "{{ tempdir.path }}/paperless-ng/src/" + - name: copy sources + command: + cmd: "cp -r src/ {{ tempdir.path }}/paperless-ng/src" + args: + chdir: "{{ gitdir.path }}" -- name: remove pycache directories - shell: find . -name __pycache__ | xargs rm -r - args: - chdir: "{{ tempdir.path }}" + - name: create paperlessng venv + command: + cmd: "python3 -m virtualenv {{ gitdir.path }}/.venv/ -p /usr/bin/python3" -- name: remove temporary git directory - file: - path: "{{ gitdir.path }}" - state: absent + - name: install paperlessng requirements + command: + cmd: "{{ gitdir.path }}/.venv/bin/python3 -m pip install -r {{ gitdir.path }}/requirements.txt" + + - name: compile messages + command: "{{ gitdir.path }}/.venv/bin/python3 manage.py compilemessages" + args: + chdir: "{{ tempdir.path }}/paperless-ng/src/" + + - name: collect static files + command: "{{ gitdir.path }}/.venv/bin/python3 manage.py collectstatic --no-input" + args: + chdir: "{{ tempdir.path }}/paperless-ng/src/" + + - name: remove pycache directories + shell: find . -name __pycache__ | xargs rm -r + args: + chdir: "{{ tempdir.path }}" + + - name: remove temporary git directory + file: + path: "{{ gitdir.path }}" + state: absent + + become: yes + become_user: "{{ paperlessng_system_user }}" diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index 5ad30dfcf..f45747cb6 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -190,9 +190,19 @@ when: update_installation - block: + - name: create paperless-ng directory and set permissions + file: + path: "{{ paperlessng_directory }}" + state: directory + owner: "{{ paperlessng_system_user }}" + group: "{{ paperlessng_system_group }}" + mode: "750" - name: create temporary directory + become: yes + become_user: "{{ paperlessng_system_user }}" tempfile: state: directory + path: "{{ paperlessng_directory }}" register: tempdir - name: check if version is available as release archive uri: @@ -238,7 +248,6 @@ group: "{{ paperlessng_system_group }}" mode: "750" with_items: - - "{{ paperlessng_directory }}" - "{{ paperlessng_consumption_dir }}" - "{{ paperlessng_data_dir }}" - "{{ paperlessng_media_root }}" From 32e287fe4ac6335c1f8fc1ec6f2b35f4a6fad678 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 00:34:36 +0100 Subject: [PATCH 033/898] remove status widget --- src-ui/src/app/app.module.ts | 4 +-- .../dashboard/dashboard.component.html | 4 +-- .../consumer-status-widget.component.html | 12 ------- .../consumer-status-widget.component.scss | 0 .../consumer-status-widget.component.spec.ts | 25 ------------- .../consumer-status-widget.component.ts | 35 ------------------- 6 files changed, 2 insertions(+), 78 deletions(-) delete mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html delete mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.scss delete mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts delete mode 100644 src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index ae5cc70b9..49e937c0b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -60,7 +60,6 @@ import { NgSelectModule } from '@ng-select/ng-select'; import { NumberComponent } from './components/common/input/number/number.component'; import { SafePipe } from './pipes/safe.pipe'; import { CustomDatePipe } from './pipes/custom-date.pipe'; -import { ConsumerStatusWidgetComponent } from './components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; @@ -119,8 +118,7 @@ registerLocaleData(localeDe) SelectDialogComponent, NumberComponent, SafePipe, - CustomDatePipe, - ConsumerStatusWidgetComponent + CustomDatePipe ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/dashboard/dashboard.component.html b/src-ui/src/app/components/dashboard/dashboard.component.html index 40fee100f..ec2bbd85c 100644 --- a/src-ui/src/app/components/dashboard/dashboard.component.html +++ b/src-ui/src/app/components/dashboard/dashboard.component.html @@ -19,8 +19,6 @@ <app-statistics-widget></app-statistics-widget> <app-upload-file-widget></app-upload-file-widget> - - <app-consumer-status-widget></app-consumer-status-widget> - + </div> </div> diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html deleted file mode 100644 index 9ea715043..000000000 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.html +++ /dev/null @@ -1,12 +0,0 @@ -<app-widget-frame title="Document consumer status"> - <ng-container content> - <div class="mb-2 border-bottom" *ngFor="let s of getStatus()"> - <div class="mb-1"><strong>{{s.filename}}:</strong> {{s.message}}</div> - <ngb-progressbar [type]="getType(s.status)" [value]="s.current_progress" [max]="s.max_progress" class="mb-2"></ngb-progressbar> - <div *ngIf="isFinished(s)" class="mb-2"> - <button *ngIf="s.document_id" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{s.document_id}}" (click)="dismiss(s)">Open document</button> - <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(s)">Dismiss</button> - </div> - </div> - </ng-container> -</app-widget-frame> diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts deleted file mode 100644 index 02aa088f5..000000000 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ConsumerStatusWidgetComponent } from './consumer-status-widget.component'; - -describe('ConsumerStatusWidgetComponent', () => { - let component: ConsumerStatusWidgetComponent; - let fixture: ComponentFixture<ConsumerStatusWidgetComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ ConsumerStatusWidgetComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ConsumerStatusWidgetComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts deleted file mode 100644 index 8e44af6d5..000000000 --- a/src-ui/src/app/components/dashboard/widgets/consumer-status-widget/consumer-status-widget.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ConsumerStatusService, FileStatus } from 'src/app/services/consumer-status.service'; - -@Component({ - selector: 'app-consumer-status-widget', - templateUrl: './consumer-status-widget.component.html', - styleUrls: ['./consumer-status-widget.component.scss'] -}) -export class ConsumerStatusWidgetComponent implements OnInit { - - constructor(private consumerStatusService: ConsumerStatusService) { } - - ngOnInit(): void { - } - - getStatus() { - return this.consumerStatusService.consumerStatus - } - - isFinished(status: FileStatus) { - return status.status == "FAILED" || status.status == "SUCCESS" - } - - getType(status) { - switch (status) { - case "WORKING": return "primary" - case "FAILED": return "danger" - case "SUCCESS": return "success" - } - } - - dismiss(status: FileStatus) { - this.consumerStatusService.dismiss(status) - } -} From d064ec67541d8b02b652607b2d5f2815314fadbc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 00:35:07 +0100 Subject: [PATCH 034/898] update Pipfile.lock --- Pipfile.lock | 522 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 425 insertions(+), 97 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index dab52dbbd..267b18533 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3c85a487240f18b3feb44f8899395696cb79630f320f0df9ef5ee37b914c89f2" + "sha256": "08cd30c074677e99d7b6bada67b7c6b7bb5348a9210753ea3c7841c95cad1037" }, "pipfile-spec": 6, "requires": {}, @@ -19,6 +19,13 @@ ] }, "default": { + "aioredis": { + "hashes": [ + "sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a", + "sha256:b61808d7e97b7cd5a92ed574937a079c9387fdadd22bfbfa7ad2fd319ecc26e3" + ], + "version": "==1.3.1" + }, "arrow": { "hashes": [ "sha256:e098abbd9af3665aea81bdd6c869e93af4feb078e98468dd351c383af187aac5", @@ -35,6 +42,38 @@ "markers": "python_version >= '3.5'", "version": "==3.3.1" }, + "async-timeout": { + "hashes": [ + "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f", + "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3" + ], + "markers": "python_full_version >= '3.5.3'", + "version": "==3.0.1" + }, + "attrs": { + "hashes": [ + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.3.0" + }, + "autobahn": { + "hashes": [ + "sha256:410a93e0e29882c8b5d5ab05d220b07609b886ef5f23c0b8d39153254ffd6895", + "sha256:52ee4236ff9a1fcbbd9500439dcf3284284b37f8a6b31ecc8a36e00cf9f95049" + ], + "markers": "python_version >= '3.6'", + "version": "==20.12.3" + }, + "automat": { + "hashes": [ + "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33", + "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111", + "sha256:d6d976cf8da698fc85fa7def46e2544493f78cb7ee72d2f4acd1a5c759a3060e" + ], + "version": "==20.2.0" + }, "blessed": { "hashes": [ "sha256:0a74a8d3f0366db600d061273df77d44f0db07daade7bb7a4d49c8bc22ed9f74", @@ -92,6 +131,22 @@ ], "version": "==1.14.4" }, + "channels": { + "hashes": [ + "sha256:056b72e51080a517a0f33a0a30003e03833b551d75394d6636c885d4edb8188f", + "sha256:3f15bdd2138bb4796e76ea588a0a344b12a7964ea9b2e456f992fddb988a4317" + ], + "index": "pypi", + "version": "==3.0.3" + }, + "channels-redis": { + "hashes": [ + "sha256:18d63f6462a58011740dc8eeb57ea4b31ec220eb551cb71b27de9c6779a549de", + "sha256:2fb31a63b05373f6402da2e6a91a22b9e66eb8b56626c6bfc93e156c734c5ae6" + ], + "index": "pypi", + "version": "==3.2.0" + }, "chardet": { "hashes": [ "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", @@ -108,6 +163,13 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==15.0" }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "version": "==15.1.0" + }, "cryptography": { "hashes": [ "sha256:0003a52a123602e1acee177dc90dd201f9bb1e73f24a070db7d36c588e8f5c7d", @@ -129,6 +191,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==3.3.1" }, + "daphne": { + "hashes": [ + "sha256:0052c9887600c57054a5867d4b0240159fa009faa3bcf6a1627271d9cdcb005a", + "sha256:c22b692707f514de9013651ecb687f2abe4f35cf6fe292ece634e9f1737bc7e3" + ], + "index": "pypi", + "version": "==3.0.1" + }, "dateparser": { "hashes": [ "sha256:7552c994f893b5cb8fcf103b4cd2ff7f57aab9bfd2619fdf0cf571c0740fd90b", @@ -217,6 +287,60 @@ "index": "pypi", "version": "==20.0.4" }, + "hiredis": { + "hashes": [ + "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", + "sha256:0a909bf501459062aa1552be1461456518f367379fdc9fdb1f2ca5e4a1fdd7c0", + "sha256:18402d9e54fb278cb9a8c638df6f1550aca36a009d47ecf5aa263a38600f35b0", + "sha256:1e4cbbc3858ec7e680006e5ca590d89a5e083235988f26a004acf7244389ac01", + "sha256:23344e3c2177baf6975fbfa361ed92eb7d36d08f454636e5054b3faa7c2aff8a", + "sha256:289b31885b4996ce04cadfd5fc03d034dce8e2a8234479f7c9e23b9e245db06b", + "sha256:2c1c570ae7bf1bab304f29427e2475fe1856814312c4a1cf1cd0ee133f07a3c6", + "sha256:2c227c0ed371771ffda256034427320870e8ea2e4fd0c0a618c766e7c49aad73", + "sha256:3bb9b63d319402cead8bbd9dd55dca3b667d2997e9a0d8a1f9b6cc274db4baee", + "sha256:3ef2183de67b59930d2db8b8e8d4d58e00a50fcc5e92f4f678f6eed7a1c72d55", + "sha256:43b8ed3dbfd9171e44c554cb4acf4ee4505caa84c5e341858b50ea27dd2b6e12", + "sha256:47bcf3c5e6c1e87ceb86cdda2ee983fa0fe56a999e6185099b3c93a223f2fa9b", + "sha256:5263db1e2e1e8ae30500cdd75a979ff99dcc184201e6b4b820d0de74834d2323", + "sha256:5b1451727f02e7acbdf6aae4e06d75f66ee82966ff9114550381c3271a90f56c", + "sha256:6996883a8a6ff9117cbb3d6f5b0dcbbae6fb9e31e1a3e4e2f95e0214d9a1c655", + "sha256:6c96f64a54f030366657a54bb90b3093afc9c16c8e0dfa29fc0d6dbe169103a5", + "sha256:7332d5c3e35154cd234fd79573736ddcf7a0ade7a986db35b6196b9171493e75", + "sha256:7885b6f32c4a898e825bb7f56f36a02781ac4a951c63e4169f0afcf9c8c30dfb", + "sha256:7b0f63f10a166583ab744a58baad04e0f52cfea1ac27bfa1b0c21a48d1003c23", + "sha256:819f95d4eba3f9e484dd115ab7ab72845cf766b84286a00d4ecf76d33f1edca1", + "sha256:8968eeaa4d37a38f8ca1f9dbe53526b69628edc9c42229a5b2f56d98bb828c1f", + "sha256:89ebf69cb19a33d625db72d2ac589d26e936b8f7628531269accf4a3196e7872", + "sha256:8daecd778c1da45b8bd54fd41ffcd471a86beed3d8e57a43acf7a8d63bba4058", + "sha256:955ba8ea73cf3ed8bd2f963b4cb9f8f0dcb27becd2f4b3dd536fd24c45533454", + "sha256:964f18a59f5a64c0170f684c417f4fe3e695a536612e13074c4dd5d1c6d7c882", + "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", + "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", + "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", + "sha256:9f4e67f87e072de981570eaf7cb41444bbac7e92b05c8651dbab6eb1fb8d5a14", + "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", + "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", + "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", + "sha256:abfb15a6a7822f0fae681785cb38860e7a2cb1616a708d53df557b3d76c5bfd4", + "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", + "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", + "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", + "sha256:b39989b49e8aca9d224324d2650029eda410a4faf43f6afb0eb4f9acb7be6097", + "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", + "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", + "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", + "sha256:cdfd501c7ac5b198c15df800a3a34c38345f5182e5f80770caf362bccca65628", + "sha256:d2c0caffa47606d6d7c8af94ba42547bd2a441f06c74fd90a1ffe328524a6c64", + "sha256:dcb2db95e629962db5a355047fb8aefb012df6c8ae608930d391619dbd96fd86", + "sha256:e0eeb9c112fec2031927a1745788a181d0eecbacbed941fc5c4f7bc3f7b273bf", + "sha256:e154891263306200260d7f3051982774d7b9ef35af3509d5adbbe539afd2610c", + "sha256:e2e023a42dcbab8ed31f97c2bcdb980b7fbe0ada34037d87ba9d799664b58ded", + "sha256:e64be68255234bb489a574c4f2f8df7029c98c81ec4d160d6cd836e7f0679390", + "sha256:e82d6b930e02e80e5109b678c663a9ed210680ded81c1abaf54635d88d1da298" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.1.0" + }, "humanfriendly": { "hashes": [ "sha256:066562956639ab21ff2676d1fda0b5987e985c534fc76700a19bd54bcb81121d", @@ -225,6 +349,13 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==9.1" }, + "hyperlink": { + "hashes": [ + "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", + "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4" + ], + "version": "==21.0.0" + }, "idna": { "hashes": [ "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", @@ -236,11 +367,11 @@ }, "imap-tools": { "hashes": [ - "sha256:7d2d25b35117a3750c3b561dd93cc2fcb24cdc457830a049796c639f4371e317", - "sha256:80088839cd1959f20c44206cdad4463ca1e7647ff67cf5b0e31e810fb6aaa6c4" + "sha256:4ec9575f21fb5a3efb573e71107806367dd52ecab0bf8f5c3724d1de6762b77b", + "sha256:860221dc13eb5d640da240e9bcf7867275c6162b742255789fd84f59124dfdd9" ], "index": "pypi", - "version": "==0.34.0" + "version": "==0.36.0" }, "img2pdf": { "hashes": [ @@ -257,6 +388,13 @@ "markers": "python_version < '3.8'", "version": "==3.4.0" }, + "incremental": { + "hashes": [ + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + ], + "version": "==17.5.0" + }, "inotify-simple": { "hashes": [ "sha256:8440ffe49c4ae81a8df57c1ae1eb4b6bfa7acb830099bfb3e305b383005cc128", @@ -335,6 +473,41 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.6.2" }, + "msgpack": { + "hashes": [ + "sha256:0cb94ee48675a45d3b86e61d13c1e6f1696f0183f0715544976356ff86f741d9", + "sha256:1026dcc10537d27dd2d26c327e552f05ce148977e9d7b9f1718748281b38c841", + "sha256:26a1759f1a88df5f1d0b393eb582ec022326994e311ba9c5818adc5374736439", + "sha256:2a5866bdc88d77f6e1370f82f2371c9bc6fc92fe898fa2dec0c5d4f5435a2694", + "sha256:31c17bbf2ae5e29e48d794c693b7ca7a0c73bd4280976d408c53df421e838d2a", + "sha256:497d2c12426adcd27ab83144057a705efb6acc7e85957a51d43cdcf7f258900f", + "sha256:5a9ee2540c78659a1dd0b110f73773533ee3108d4e1219b5a15a8d635b7aca0e", + "sha256:7307e86f7ce75b49e65b55660b10b258e9e7b5e0f80d31d7a86a278d8204d1b4", + "sha256:8521e5be9e3b93d4d5e07cb80b7e32353264d143c1f072309e1863174c6aadb1", + "sha256:87869ba567fe371c4555d2e11e4948778ab6b59d6cc9d8460d543e4cfbbddd1c", + "sha256:8ffb24a3b7518e843cd83538cf859e026d24ec41ac5721c18ed0c55101f9775b", + "sha256:92be4b12de4806d3c36810b0fe2aeedd8d493db39e2eb90742b9c09299eb5759", + "sha256:9ea52fff0473f9f3000987f313310208c879493491ef3ccf66268eff8d5a0326", + "sha256:a4355d2193106c7aa77c98fc955252a737d8550320ecdb2e9ac701e15e2943bc", + "sha256:a99b144475230982aee16b3d249170f1cccebf27fb0a08e9f603b69637a62192", + "sha256:ac25f3e0513f6673e8b405c3a80500eb7be1cf8f57584be524c4fa78fe8e0c83", + "sha256:b28c0876cce1466d7c2195d7658cf50e4730667196e2f1355c4209444717ee06", + "sha256:b55f7db883530b74c857e50e149126b91bb75d35c08b28db12dcb0346f15e46e", + "sha256:b6d9e2dae081aa35c44af9c4298de4ee72991305503442a5c74656d82b581fe9", + "sha256:c747c0cc08bd6d72a586310bda6ea72eeb28e7505990f342552315b229a19b33", + "sha256:c82dc0ba34d620fb94d12a7725e9362958bb1be3938688a061f53ed86bee005a", + "sha256:d6c64601af8f3893d17ec233237030e3110f11b8a962cb66720bf70c0141aa54", + "sha256:d8167b84af26654c1124857d71650404336f4eb5cc06900667a493fc619ddd9f", + "sha256:de6bd7990a2c2dabe926b7e62a92886ccbf809425c347ae7de277067f97c2887", + "sha256:e36a812ef4705a291cdb4a2fd352f013134f26c6ff63477f20235138d1d21009", + "sha256:e89ec55871ed5473a041c0495b7b4e6099f6263438e0bd04ccd8418f92d5d7f2", + "sha256:f3e6aaf217ac1c7ce1563cf52a2f4f5d5b1f64e8729d794165db71da57257f0c", + "sha256:f484cd2dca68502de3704f056fa9b318c94b1539ed17a4c784266df5d6978c87", + "sha256:fae04496f5bc150eefad4e9571d1a76c55d021325dcd484ce45065ebbdd00984", + "sha256:fe07bc6735d08e492a327f496b7850e98cb4d112c56df69b0c844dbebcbb47f6" + ], + "version": "==1.0.2" + }, "numpy": { "hashes": [ "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94", @@ -524,6 +697,42 @@ "index": "pypi", "version": "==2.8.6" }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, "pycparser": { "hashes": [ "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", @@ -532,6 +741,21 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, + "pyhamcrest": { + "hashes": [ + "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316", + "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29" + ], + "markers": "python_version >= '3.5'", + "version": "==2.0.2" + }, + "pyopenssl": { + "hashes": [ + "sha256:4c231c759543ba02560fcd2480c48dcec4dae34c9da7d3747c508227e0624b51", + "sha256:818ae18e06922c066f777a33f1fca45786d85edfe71cd043de6379337a7f274b" + ], + "version": "==20.0.1" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -558,13 +782,12 @@ }, "python-levenshtein": { "hashes": [ - "sha256:033a11de5e3d19ea25c9302d11224e1a1898fe5abd23c61c7c360c25195e3eb1", - "sha256:15e26882728c29ccdf74cfc6ac4b49fc22c08b44d152348cb0eb1ec4f3dbf9df", - "sha256:3df5e5eb144570ecf5ad38864a2393068798328c7f05e7b167a49391d36a2db1", - "sha256:7f049b3ddc4b525bd469febafb98bf5202f789b722e0e4ccbec2ffbe8c07d7b4" + "sha256:108edd3c271f1afda8b21a8d9da81886414dfb6940a085fa7903c592e0f8f54b", + "sha256:1ff19b712c5974080b003fd26ef365cd93dfc1a5e690be621f79f3e63e00a7cc", + "sha256:554e273a88060d177e7b3c1e6ea9158dde11563bfae8f7f661f73f47e5ff0911" ], "index": "pypi", - "version": "==0.12.0" + "version": "==0.12.1" }, "python-magic": { "hashes": [ @@ -640,50 +863,50 @@ }, "reportlab": { "hashes": [ - "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1", - "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a", - "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935", - "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881", - "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd", - "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b", - "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8", - "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b", - "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d", - "sha256:1e484ce83dae26cb40fcbd312d45b8ba921de7856a00339d867dd4ecf145a1e7", - "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378", - "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06", - "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69", - "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0", - "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f", - "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f", - "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad", - "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491", - "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8", - "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53", - "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22", - "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb", - "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121", - "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c", - "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431", - "sha256:8850eba6de6eb813036eb8dce353e40d60c8af48bbce107de82770b10d3aa525", - "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef", - "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454", - "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a", - "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5", - "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057", - "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536", - "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c", - "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be", - "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75", - "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4", - "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2", - "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e", - "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16", - "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8", - "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc", - "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442" + "sha256:10d0cd2ab669fbad8b766db57066270296396caf515731643e7c7e732159a432", + "sha256:21508065492fbb750aa6d07297a2ba4bcacb418c84898fe892e12bdceefc3b9a", + "sha256:21c433905569af36bc220490a33f8f78442fd71c1bea3d021f851623c8089a78", + "sha256:236c4142474a59e4564b0e7c32e4d7b9cfc0dc2236ffa721ae97a4dbc2667d10", + "sha256:287b241a9d4189e7bfffd68aea0efd701d703bccee6686b9779bf16e22e9a2ad", + "sha256:2bc48a3cad6dd3cd1b5cd09526dad50afbda14afadd6fb40635a5227246bbe26", + "sha256:2e4631c49ec72f6a84502cda1710e988fa3027250e17c26713e543af31fff58a", + "sha256:2fd3305a75502d11942a9629cf6af96660a508f19adc4abaac5549909d1db1b3", + "sha256:32be7f9a55b8dfd91924730644632d19352fd9e0bb77cd03eba8a34fc846c4f6", + "sha256:33dc663ac3713e9d2f5a96b20412e16fd00b688b1b5a8057436e3fce69c2a59d", + "sha256:3d83cffa1211a7ae4912bfe3ac36051e31371cfb63b716e458c520da9f645fd9", + "sha256:3f9d56f5778b54260ce79878761b1f98267677702233daa26edd9f06f3be85c0", + "sha256:49a599f1aae7d91649fb10dbe070614740a60e4d2b65882a002dc20a7eba9f6f", + "sha256:4d5d62d49f3632cf437ac28ad52a8274fe6392ea2c48d294d2e92f1258d1479e", + "sha256:552ea83656f18e52ee073aee04d7e3f4d0eb71147f6882ae4fc15681d8e6ab1c", + "sha256:605f4a49ee313eabae4db4694d073dbb0778a0eccbc6d090e58c5a4db862c2a8", + "sha256:6289057afa4023f58d7977d105d09503c2cb1031e248fff52b44e41914d176cf", + "sha256:669526b580d52c05efbd45a8c9f1adf9370b8818bc2d48adec661ea7037415d4", + "sha256:6fc5f21d1383b552dc5b3eb774aaaf14cb7f8f34f15ea45772f72867dfaeecc6", + "sha256:74c7499fdda682028bb1b01d7ca89d813175c0f8c18d3ae9924c6393987ea4ef", + "sha256:75c0b6cf47c199f1e69283b0678b47537cc15af31acbad783fffe2c9cfa6a626", + "sha256:7b3ec1255c940fabfdb05577a4f148cca54943215cecb24efd5840a8ecb618ce", + "sha256:7d39eaca932b1d51de84c387616462913fa988c02a4a462798098f62edcf1e21", + "sha256:81e2faddfde7a21154d1a08e28e3d9b820274afa282b7ed17fcf1e9d7b4aa7a1", + "sha256:8aca938409fc99a9e79514cb97b3478780b261ff74a058c75a3a12552b1d6b9a", + "sha256:8f963222cc0c302ed5a15766ea00ff470c80c47d691e828ef21032df95e8a2ff", + "sha256:9be1ec218966e2e9982e73109863d91e3e4b9e7649ae6be0bf98b78c52a5a330", + "sha256:aa24f56c504d41982eb212f79669c05d4452f7736618dd33ba4167da0b5578b7", + "sha256:aa9caa395823130b360b5f3184eb25c9f1ea4fb51ab0370c2e693dc139cd7d83", + "sha256:b2f2bf419229bda5d6c8a10219ad1d984d2a6cd246acf613559d4a5fbcee0aea", + "sha256:b73f85e09e4271aee192489f5a8a7c33a1a82f42702cd0886f8f630600a23ad8", + "sha256:c3fac0186c18d7d5285f508d79bd86f751526190728ef2a33107568533f9aff0", + "sha256:c7ea886aa8dc3d3adb0c32ee87522821dd8ead2bac6d41e0481c1d911049c3c9", + "sha256:c9a487b646ac367d15bf6749deffa04ecbe339ba067d29414f206a7516a0a775", + "sha256:d0ae3cd60b659da41bb4962facec2ed3c8cfb3cedc85c5993e6299938134fc94", + "sha256:d6b900b1dc0d3c7b7f69fde25c8e60cb978b774056383c4a03bb38c829342299", + "sha256:d6feecad778e2a3d5a5ea48b027063e9baf73c6454235c1c1556b59c114c90cb", + "sha256:de5d98f41ffbe567717c334a9866c0f289a02cef37a78323cb5f8a86eecb6a8c", + "sha256:e47daf974b68fdcd2ffb5442ea5f1dd849eeaf6f9d4915128bf5374467e7b63a", + "sha256:e52536cba231fb3dd0628abf98b23519778e1247d4d69553d879eea6159b648d", + "sha256:f3181284502207e78eb472d00e8f9e84f43a7fe502821d2d76f3dd7da1d5e081", + "sha256:fc900dbc8f020305e15781210e64f6e96c1f9ca0fa00c4a0ccc1174cc44c5a5b" ], - "version": "==3.5.59" + "version": "==3.5.60" }, "requests": { "hashes": [ @@ -695,35 +918,31 @@ }, "scikit-learn": { "hashes": [ - "sha256:076369634ee72b5a5941440661e2f306ff4ac30903802dc52031c7e9199ac640", - "sha256:18f7131e62265bf2691ed1d0303c640313894ccfe4278427478c6b2f45094b53", - "sha256:26f66b3726b54dfb76ea51c5d9c2431ed17ebc066cb4527662b9e851a3e7ba61", - "sha256:2951f87d35e72f007701c6e028aa230f6df6212a3194677c0c950486066a454d", - "sha256:2a5348585aa793bc8cc5a72f8e9067c9380834b0aadbd55f924843b071f13282", - "sha256:3eeff086f7329521d27249a082ea3c48c085cedb110db5f65968ab55c3ba2e09", - "sha256:4395e91b3548005f4a645018435b5a94f8cce232b5b70753020e606c6a750656", - "sha256:44e452ea8491225c5783d49577aad0f36202dfd52aec7f82c0fdfe5fbd5f7400", - "sha256:490436b44b3a1957cb625e871764b0aa330b34cc416aea4abc6c38ca63d0d682", - "sha256:5e6e3c042cea83f2e20a45e563b8eabc1f8f72446251fe23ebefdf111a173a33", - "sha256:66f27bf21202a850bcd7b6303916e4907f6e22ec59a14974ede4955aed5c7ed0", - "sha256:743b6edd98c98991be46c08e6b21df3861d5ae915f91d59f988384d93f7263e7", - "sha256:758619e49cd7c17282e6cc60d5cc73c02c072b47c9a10010bb3bb47e0d976e50", - "sha256:7f654befc5ad413690cc58f3f34a3e906caf825195ce0fda00a8e9565e1403e6", - "sha256:800aaf63f8838c00e85db2267dd226f89858594843fd03932a9eda95746d2c40", - "sha256:80ca024154b84b6ac4cfc86930ba13fdc348a209753bf2c16129db6f9eb8a80b", - "sha256:890d7d588f65acb0c4f6c083347c9076916bda5e6bd8400f06244b1afc1009af", - "sha256:905d8934d1e27a686698864a5863ff2c0e13a2ae1adb78a8a848aacc8a49927d", - "sha256:a83fcd9d59c42a2f66b307e3b0b0f08aa8e6e45be33da055697ea499f0e4f7c2", - "sha256:afeb06dc69847927634e58579b9cdc72e1390b79497336b2324b1b173f33bd47", - "sha256:b0d13fd56d26cf3de0314a4fd48037108c638fe126d813f5c1222bb0f08b6a76", - "sha256:c08b27cb78ee8d2dc781a7affed09859441f5b624f9f92da59ac0791c8774dfc", - "sha256:c912247e42114f389858ae05d63f4359d4e667ea72aaabee191aee9ad3f9774a", - "sha256:d7fe05fcb44eadd6d6c874c768f085f5de1239db3a3b7be4d3d23d12e4120589", - "sha256:d819d625832fb2969911a243e009cfa135cb8ef1e150866e417d6e9d75290087", - "sha256:e534f5f3796db6781c87e9835dcd51b7854c8c5a379c9210b93605965c1941fd" + "sha256:1adf483e91007a87171d7ce58c34b058eb5dab01b5fee6052f15841778a8ecd8", + "sha256:259ec35201e82e2db1ae2496f229e63f46d7f1695ae68eef9350b00dc74ba52f", + "sha256:3c4f07f47c04e81b134424d53c3f5e16dfd7f494e44fd7584ba9ce9de2c5e6c1", + "sha256:4562dcf4793e61c5d0f89836d07bc37521c3a1889da8f651e2c326463c4bd697", + "sha256:7b04691eb2f41d2c68dbda8d1bd3cb4ef421bdc43aaa56aeb6c762224552dfb6", + "sha256:826b92bf45b8ad80444814e5f4ac032156dd481e48d7da33d611f8fe96d5f08b", + "sha256:83b21ff053b1ff1c018a2d24db6dd3ea339b1acfbaa4d9c881731f43748d8b3b", + "sha256:8772b99d683be8f67fcc04789032f1b949022a0e6880ee7b75a7ec97dbbb5d0b", + "sha256:895dbf2030aa7337649e36a83a007df3c9811396b4e2fa672a851160f36ce90c", + "sha256:8aa1b3ac46b80eaa552b637eeadbbce3be5931e4b5002b964698e33a1b589e1e", + "sha256:99349d77f54e11f962d608d94dfda08f0c9e5720d97132233ebdf35be2858b2d", + "sha256:9a24d1ccec2a34d4cd3f2a1f86409f3f5954cc23d4d2270ba0d03cf018aa4780", + "sha256:9bed8a1ef133c8e2f13966a542cb8125eac7f4b67dcd234197c827ba9c7dd3e0", + "sha256:9c6097b6a9b2bafc5e0f31f659e6ab5e131383209c30c9e978c5b8abdac5ed2a", + "sha256:9dfa564ef27e8e674aa1cc74378416d580ac4ede1136c13dd555a87996e13422", + "sha256:a0334a1802e64d656022c3bfab56a73fbd6bf4b1298343f3688af2151810bbdf", + "sha256:ae7191f0253145503fbfa1934cbc83f48260f534343e34115398fb5fc2be55b0", + "sha256:c3deb3b19dd9806acf00cf0d400e84562c227723013c33abefbbc3cf906596e9", + "sha256:d54dbaadeb1425b7d6a66bf44bee2bb2b899fe3e8850b8e94cfb9c904dcb46d0", + "sha256:ddb52d088889f5596bc4d1de981f2eca106b58243b6679e4782f3ba5096fd645", + "sha256:ed9d65594948678827f4ff0e7ae23344e2f2b4cabbca057ccaed3118fdc392ca", + "sha256:fab31f48282ebf54dd69f6663cd2d9800096bad1bb67bbc9c9ac84eb77b41972" ], "index": "pypi", - "version": "==0.24.0" + "version": "==0.24.1" }, "scipy": { "hashes": [ @@ -757,6 +976,13 @@ "markers": "python_version >= '3.6'", "version": "==1.5.4" }, + "service-identity": { + "hashes": [ + "sha256:001c0707759cb3de7e49c078a7c0c9cd12594161d3bf06b9c254fdcb1a60dc36", + "sha256:0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d" + ], + "version": "==18.1.0" + }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", @@ -804,6 +1030,48 @@ "index": "pypi", "version": "==4.56.0" }, + "twisted": { + "extras": [ + "tls" + ], + "hashes": [ + "sha256:0150dae5adc962d15e00054cc6926f1e64763fb8dd26e1632593ac06e592104b", + "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", + "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", + "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", + "sha256:15e52271f08f62e2230ff093e0278aa01c9dac057c4557cadadd2429eed86a3e", + "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", + "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", + "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", + "sha256:356e8d8dd3590e790e3dba4db139eb8a17aca64b46629c622e1b1597a4a92478", + "sha256:70952c56e4965b9f53b180daecf20a9595cf22b8d0935cd3bd664c90273c3ab2", + "sha256:7408c6635ee1b96587289283ebe90ee15dbf9614b05857b446055116bc822d29", + "sha256:7c547fd0215db9da8a1bc23182b309e84a232364cc26d829e9ee196ce840b114", + "sha256:894f6f3cfa57a15ea0d0714e4283913a5f2511dbd18653dd148eba53b3919797", + "sha256:94ac3d55a58c90e2075c5fe1853f2aa3892b73e3bf56395f743aefde8605eeaa", + "sha256:a58e61a2a01e5bcbe3b575c0099a2bcb8d70a75b1a087338e0c48dd6e01a5f15", + "sha256:c09c47ff9750a8e3aa60ad169c4b95006d455a29b80ad0901f031a103b2991cd", + "sha256:ca3a0b8c9110800e576d89b5337373e52018b41069bc879f12fa42b7eb2d0274", + "sha256:cd1dc5c85b58494138a3917752b54bb1daa0045d234b7c132c37a61d5483ebad", + "sha256:cdbc4c7f0cd7a2218b575844e970f05a1be1861c607b0e048c9bceca0c4d42f7", + "sha256:d267125cc0f1e8a0eed6319ba4ac7477da9b78a535601c49ecd20c875576433a", + "sha256:d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10", + "sha256:d95803193561a243cb0401b0567c6b7987d3f2a67046770e1dccd1c9e49a9780", + "sha256:e92703bed0cc21d6cb5c61d66922b3b1564015ca8a51325bd164a5e33798d504", + "sha256:f058bd0168271de4dcdc39845b52dd0a4a2fecf5f1246335f13f5e96eaebb467", + "sha256:f3c19e5bd42bbe4bf345704ad7c326c74d3fd7a1b3844987853bef180be638d4" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.3.0" + }, + "txaio": { + "hashes": [ + "sha256:1488d31d564a116538cc1265ac3f7979fb6223bb5a9e9f1479436ee2c17d8549", + "sha256:a8676d6c68aea1f0e2548c4afdb8e6253873af3bc2659bb5bcd9f39dff7ff90f" + ], + "markers": "python_version >= '3.6'", + "version": "==20.12.1" + }, "typing-extensions": { "hashes": [ "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", @@ -882,6 +1150,66 @@ ], "markers": "python_version >= '3.6'", "version": "==3.4.0" + }, + "zope.interface": { + "hashes": [ + "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", + "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:09fc3922f235703c0b76f8234867685eee68a24a49fffa2220975f6142db45f1", + "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", + "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", + "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", + "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", + "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", + "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", + "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", + "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", + "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", + "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", + "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", + "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", + "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", + "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", + "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", + "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", + "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", + "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", + "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", + "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", + "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", + "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", + "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", + "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", + "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", + "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", + "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", + "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", + "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", + "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", + "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", + "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", + "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", + "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:974f5957e66a7524ea81df7b2686a456bfaf0408dbb7353ddfbedb594eadfef6", + "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", + "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", + "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", + "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", + "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", + "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", + "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", + "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", + "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", + "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", + "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", + "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", + "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", + "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", + "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", + "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==5.2.0" } }, "develop": { @@ -1043,11 +1371,11 @@ }, "faker": { "hashes": [ - "sha256:47ac7d62d5bad8c16422a91f121430ab7656d40ca8fea9c84bcdbdf92e739b03", - "sha256:6bc44606d44f711e1d89ad9a5b42394cc6f7eedaffc765ddb5b2d22084c15733" + "sha256:0f8198d876bc65edd3699e2542c6ae13cc93fbc4a478c17db190d5d9b6ce790e", + "sha256:8fe22be90c0db35d830464918f84beb50f970f4caacae4d88e92692857b78aa7" ], "markers": "python_version >= '3.6'", - "version": "==5.5.0" + "version": "==5.6.5" }, "filelock": { "hashes": [ @@ -1084,11 +1412,11 @@ }, "importlib-resources": { "hashes": [ - "sha256:4743f090ed8946e713745ec0e660249ef9fb0b9843eacc5b5ff931d2fd5aa67f", - "sha256:ea17df80a0ff04b5dbd3d96dbeab1842acfd1c6c902eaeb8c8858abf2720161e" + "sha256:885b8eae589179f661c909d699a546cf10d83692553e34dca1bf5eb06f7f6217", + "sha256:bfdad047bce441405a49cf8eb48ddce5e56c696e185f59147a8b79e75e9e6380" ], "markers": "python_version < '3.7'", - "version": "==5.0.0" + "version": "==5.1.0" }, "iniconfig": { "hashes": [ @@ -1207,11 +1535,11 @@ }, "pytest-cov": { "hashes": [ - "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191", - "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e" + "sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7", + "sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da" ], "index": "pypi", - "version": "==2.10.1" + "version": "==2.11.1" }, "pytest-django": { "hashes": [ @@ -1287,10 +1615,10 @@ }, "snowballstemmer": { "hashes": [ - "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0", - "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52" + "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2", + "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914" ], - "version": "==2.0.0" + "version": "==2.1.0" }, "sphinx": { "hashes": [ @@ -1380,11 +1708,11 @@ }, "tox": { "hashes": [ - "sha256:5efda30ad73e662c3844ac51ce1381bf28f61063773e06996aa8b6277133a7c0", - "sha256:8cccede64802e78aa6c69f81051b25f0706639d1cbbb34d9366ce00c70ee054f" + "sha256:0aa777ee466f2ef18e6f58428c793c32378779e0a321dbb8934848bc3e78998c", + "sha256:f501808381c01c6d7827c2f17328be59c0a715046e94605ddca15fb91e65827d" ], "index": "pypi", - "version": "==3.21.0" + "version": "==3.21.2" }, "typing-extensions": { "hashes": [ @@ -1405,11 +1733,11 @@ }, "virtualenv": { "hashes": [ - "sha256:205a7577275dd0d9223c730dd498e21a8910600085c3dee97412b041fc4b853b", - "sha256:7992b8de87e544a4ab55afc2240bf8388c4e3b5765d03784dad384bfdf9097ee" + "sha256:219ee956e38b08e32d5639289aaa5bd190cfbe7dafcb8fa65407fca08e808f9c", + "sha256:227a8fed626f2f20a6cdb0870054989f82dd27b2560a911935ba905a2a5e0034" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.3.0" + "version": "==20.4.0" }, "zipp": { "hashes": [ From 4a12550015c8609fce47af722db7402ffe737700 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 00:50:29 +0100 Subject: [PATCH 035/898] update dependencies --- Pipfile | 1 - Pipfile.lock | 36 ++++++++++++++++++------------------ requirements.txt | 32 ++++++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/Pipfile b/Pipfile index adb41f314..140df6d02 100644 --- a/Pipfile +++ b/Pipfile @@ -18,7 +18,6 @@ django-q = "~=1.3.4" djangorestframework = "~=3.12.2" filelock = "*" fuzzywuzzy = "*" -gunicorn = "*" imap-tools = "*" langdetect = "*" pdftotext = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 267b18533..9c30dedfa 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "08cd30c074677e99d7b6bada67b7c6b7bb5348a9210753ea3c7841c95cad1037" + "sha256": "ede35846cb5a19613a24fa1ad4ba0e0ea0290d45fc912e7e69136bc56bb64007" }, "pipfile-spec": 6, "requires": {}, @@ -217,11 +217,11 @@ }, "django-cors-headers": { "hashes": [ - "sha256:5665fc1b1aabf1b678885cf6f8f8bd7da36ef0a978375e767d491b48d3055d8f", - "sha256:ba898dd478cd4be3a38ebc3d8729fa4d044679f8c91b2684edee41129d7e968a" + "sha256:1ac2b1213de75a251e2ba04448da15f99bcfcbe164288ae6b5ff929dc49b372f", + "sha256:96069c4aaacace786a34ee7894ff680780ec2644e4268b31181044410fecd12e" ], "index": "pypi", - "version": "==3.6.0" + "version": "==3.7.0" }, "django-extensions": { "hashes": [ @@ -279,14 +279,6 @@ "index": "pypi", "version": "==0.18.0" }, - "gunicorn": { - "hashes": [ - "sha256:1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626", - "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c" - ], - "index": "pypi", - "version": "==20.0.4" - }, "hiredis": { "hashes": [ "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", @@ -918,10 +910,13 @@ }, "scikit-learn": { "hashes": [ + "sha256:0567a2d29ad08af98653300c623bd8477b448fe66ced7198bef4ed195925f082", + "sha256:087dfede39efb06ab30618f9ab55a0397f29c38d63cd0ab88d12b500b7d65fd7", "sha256:1adf483e91007a87171d7ce58c34b058eb5dab01b5fee6052f15841778a8ecd8", "sha256:259ec35201e82e2db1ae2496f229e63f46d7f1695ae68eef9350b00dc74ba52f", "sha256:3c4f07f47c04e81b134424d53c3f5e16dfd7f494e44fd7584ba9ce9de2c5e6c1", "sha256:4562dcf4793e61c5d0f89836d07bc37521c3a1889da8f651e2c326463c4bd697", + "sha256:4ddd2b6f7449a5d539ff754fa92d75da22de261fd8fdcfb3596799fadf255101", "sha256:7b04691eb2f41d2c68dbda8d1bd3cb4ef421bdc43aaa56aeb6c762224552dfb6", "sha256:826b92bf45b8ad80444814e5f4ac032156dd481e48d7da33d611f8fe96d5f08b", "sha256:83b21ff053b1ff1c018a2d24db6dd3ea339b1acfbaa4d9c881731f43748d8b3b", @@ -934,8 +929,13 @@ "sha256:9c6097b6a9b2bafc5e0f31f659e6ab5e131383209c30c9e978c5b8abdac5ed2a", "sha256:9dfa564ef27e8e674aa1cc74378416d580ac4ede1136c13dd555a87996e13422", "sha256:a0334a1802e64d656022c3bfab56a73fbd6bf4b1298343f3688af2151810bbdf", + "sha256:a29460499c1e62b7a830bb57ca42e615375a6ab1bcad053cd25b493588348ea8", + "sha256:a36e159a0521e13bbe15ca8c8d038b3a1dd4c7dad18d276d76992e03b92cf643", "sha256:ae7191f0253145503fbfa1934cbc83f48260f534343e34115398fb5fc2be55b0", + "sha256:c13ebac42236b1c46397162471ea1c46af68413000e28b9309f8c05722c65a09", "sha256:c3deb3b19dd9806acf00cf0d400e84562c227723013c33abefbbc3cf906596e9", + "sha256:c658432d8a20e95398f6bb95ff9731ce9dfa343fdf21eea7ec6a7edfacd4b4d9", + "sha256:c7f4eb77504ac586d8ac1bde1b0c04b504487210f95297235311a0ab7edd7e38", "sha256:d54dbaadeb1425b7d6a66bf44bee2bb2b899fe3e8850b8e94cfb9c904dcb46d0", "sha256:ddb52d088889f5596bc4d1de981f2eca106b58243b6679e4782f3ba5096fd645", "sha256:ed9d65594948678827f4ff0e7ae23344e2f2b4cabbca057ccaed3118fdc392ca", @@ -1371,11 +1371,11 @@ }, "faker": { "hashes": [ - "sha256:0f8198d876bc65edd3699e2542c6ae13cc93fbc4a478c17db190d5d9b6ce790e", - "sha256:8fe22be90c0db35d830464918f84beb50f970f4caacae4d88e92692857b78aa7" + "sha256:1a40c9696830342e67d30057753323478b848e89334e97e0a64b442b18ae7ece", + "sha256:dd98418eceb374c475e85bd49ae826a9b304dabcd794640f35a1d185f4767dd9" ], "markers": "python_version >= '3.6'", - "version": "==5.6.5" + "version": "==5.7.0" }, "filelock": { "hashes": [ @@ -1527,11 +1527,11 @@ }, "pytest": { "hashes": [ - "sha256:1969f797a1a0dbd8ccf0fecc80262312729afea9c17f1d70ebf85c5e76c6f7c8", - "sha256:66e419b1899bc27346cb2c993e12c5e5e8daba9073c1fbce33b9807abc95c306" + "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9", + "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839" ], "index": "pypi", - "version": "==6.2.1" + "version": "==6.2.2" }, "pytest-cov": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 3b7a158c1..c70d13ff4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,16 +7,25 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple +aioredis==1.3.1 arrow==0.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' asgiref==3.3.1; python_version >= '3.5' +async-timeout==3.0.1; python_full_version >= '3.5.3' +attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +autobahn==20.12.3; python_version >= '3.6' +automat==20.2.0 blessed==1.17.12 certifi==2020.12.5 cffi==1.14.4 +channels-redis==3.2.0 +channels==3.0.3 chardet==4.0.0; python_version >= '3.1' coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +constantly==15.1.0 cryptography==3.3.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +daphne==3.0.1 dateparser==0.7.6 -django-cors-headers==3.6.0 +django-cors-headers==3.7.0 django-extensions==3.1.0 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' @@ -25,17 +34,20 @@ django==3.1.5 djangorestframework==3.12.2 filelock==3.0.12 fuzzywuzzy==0.18.0 -gunicorn==20.0.4 +hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.34.0 +imap-tools==0.36.0 img2pdf==0.4.0 importlib-metadata==3.4.0; python_version < '3.8' +incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 joblib==1.0.0; python_version >= '3.6' langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +msgpack==1.0.2 numpy==1.19.5; python_version >= '3.6' ocrmypdf==11.4.5 pathvalidate==2.3.2 @@ -45,25 +57,32 @@ pikepdf==2.2.5 pillow==8.1.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' psycopg2-binary==2.8.6 +pyasn1-modules==0.2.8 +pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +pyhamcrest==2.0.2; python_version >= '3.5' +pyopenssl==20.0.1 python-dateutil==2.8.1 python-dotenv==0.15.0 python-gnupg==0.4.6 -python-levenshtein==0.12.0 +python-levenshtein==0.12.1 python-magic==0.4.18 pytz==2020.5 redis==3.5.3 regex==2020.11.13 -reportlab==3.5.59 +reportlab==3.5.60 requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -scikit-learn==0.24.0 +scikit-learn==0.24.1 scipy==1.5.4; python_version >= '3.6' +service-identity==18.1.0 six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 tqdm==4.56.0 +twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +txaio==20.12.1; python_version >= '3.6' typing-extensions==3.7.4.3; python_version < '3.8' tzlocal==2.1 urllib3==1.26.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' @@ -72,3 +91,4 @@ wcwidth==0.2.5 whitenoise==5.2.0 whoosh==2.7.4 zipp==3.4.0; python_version >= '3.6' +zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From de2f3fea596e144dfca6366452d4024a2f270826 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 00:51:20 +0100 Subject: [PATCH 036/898] task ids --- src/documents/consumer.py | 6 +++++- src/documents/tasks.py | 7 +++++-- src/documents/views.py | 6 +++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 71b1294f5..f4a40cbb9 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -35,6 +35,7 @@ class Consumer(LoggingMixin): message, document_id=None): payload = { 'filename': os.path.basename(filename), + 'task_id': self.task_id, 'current_progress': current_progress, 'max_progress': max_progress, 'status': status, @@ -58,6 +59,7 @@ class Consumer(LoggingMixin): self.override_correspondent_id = None self.override_tag_ids = None self.override_document_type_id = None + self.task_id = None self.channel_layer = get_channel_layer() @@ -136,7 +138,8 @@ class Consumer(LoggingMixin): override_title=None, override_correspondent_id=None, override_document_type_id=None, - override_tag_ids=None): + override_tag_ids=None, + task_id=None): """ Return the document object if it was successfully created. """ @@ -147,6 +150,7 @@ class Consumer(LoggingMixin): self.override_correspondent_id = override_correspondent_id self.override_document_type_id = override_document_type_id self.override_tag_ids = override_tag_ids + self.task_id = task_id self._send_progress(self.filename, 0, 100, 'WORKING', 'Received new file.') diff --git a/src/documents/tasks.py b/src/documents/tasks.py index 38ff532b5..c67b2b3fa 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -62,7 +62,8 @@ def consume_file(path, override_title=None, override_correspondent_id=None, override_document_type_id=None, - override_tag_ids=None): + override_tag_ids=None, + task_id=None): document = Consumer().try_consume_file( path, @@ -70,7 +71,9 @@ def consume_file(path, override_title=override_title, override_correspondent_id=override_correspondent_id, override_document_type_id=override_document_type_id, - override_tag_ids=override_tag_ids) + override_tag_ids=override_tag_ids, + task_id=task_id + ) if document: return "Success. New document id {} created".format( diff --git a/src/documents/views.py b/src/documents/views.py index f0c7f10d1..2012e879a 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -1,6 +1,7 @@ import logging import os import tempfile +import uuid from datetime import datetime from time import mktime @@ -385,6 +386,8 @@ class PostDocumentView(APIView): f.write(doc_data) os.utime(f.name, times=(t, t)) + task_id = str(uuid.uuid4()) + async_task("documents.tasks.consume_file", f.name, override_filename=doc_name, @@ -392,8 +395,9 @@ class PostDocumentView(APIView): override_correspondent_id=correspondent_id, override_document_type_id=document_type_id, override_tag_ids=tag_ids, + task_id=task_id, task_name=os.path.basename(doc_name)[:100]) - return Response("OK") + return Response({"task_id": task_id}) class SelectionDataView(APIView): From 8c02705da82fbbda3800042b40dcc4546f022e69 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 00:51:45 +0100 Subject: [PATCH 037/898] rework of the front end components --- src-ui/src/app/app.component.ts | 4 +- .../upload-file-widget.component.html | 12 ++- .../upload-file-widget.component.ts | 69 +++++++------ .../data/websocket-consumer-status-message.ts | 11 +++ .../app/services/consumer-status.service.ts | 97 +++++++++++++++---- 5 files changed, 137 insertions(+), 56 deletions(-) create mode 100644 src-ui/src/app/data/websocket-consumer-status-message.ts diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index 8ca276dd4..43c23f2af 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -32,7 +32,7 @@ export class AppComponent implements OnInit, OnDestroy { this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { this.toastService.show({title: "Document added", delay: 10000, content: `Document ${status.filename} was added to paperless.`, actionName: "Open document", action: () => { - this.router.navigate(['documents', status.document_id]) + this.router.navigate(['documents', status.documentId]) }}) }) @@ -42,6 +42,4 @@ export class AppComponent implements OnInit, OnDestroy { } - - } diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index aa317bd52..59afb74f9 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -9,10 +9,16 @@ </ngx-file-drop> </form> - <div *ngIf="uploadVisible" class="mt-3"> - <p i18n>{uploadStatus.length, plural, =1 {Uploading file...} =other {Uploading {{uploadStatus.length}} files...}}</p> - <ngb-progressbar [value]="loadedSum" [max]="totalSum" [striped]="true" [animated]="uploadStatus.length > 0"> + <div *ngFor="let status of getStatus()"> + <p>{{status.filename}}: {{status.message}}</p> + <ngb-progressbar [value]="status.getProgress()" [max]="1" [striped]="true" [animated]="!isFinished(status)" [type]="getType(status)"> </ngb-progressbar> + + <div *ngIf="isFinished(status)" class="mb-2"> + <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)">Open document</button> + <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(status)">Dismiss</button> + </div> + </div> </div> </app-widget-frame> \ No newline at end of file diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 19d9909a9..ac270fe30 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -1,15 +1,10 @@ import { HttpEventType } from '@angular/common/http'; import { Component, OnInit } from '@angular/core'; import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'; +import { ConsumerStatusService, FileStatus, FileStatusPhase } from 'src/app/services/consumer-status.service'; import { DocumentService } from 'src/app/services/rest/document.service'; -import { ToastService } from 'src/app/services/toast.service'; -interface UploadStatus { - loaded: number - total: number -} - @Component({ selector: 'app-upload-file-widget', templateUrl: './upload-file-widget.component.html', @@ -17,8 +12,35 @@ interface UploadStatus { }) export class UploadFileWidgetComponent implements OnInit { - constructor(private documentService: DocumentService, private toastService: ToastService) { } + constructor( + private documentService: DocumentService, + private consumerStatusService: ConsumerStatusService + ) { } + getStatus() { + return this.consumerStatusService.consumerStatus + } + + isFinished(status: FileStatus) { + return status.phase == FileStatusPhase.FAILED || status.phase == FileStatusPhase.SUCCESS + } + + getType(status: FileStatus) { + switch (status.phase) { + case FileStatusPhase.PROCESSING: + case FileStatusPhase.UPLOADING: + return "primary" + case FileStatusPhase.FAILED: + return "danger" + case FileStatusPhase.SUCCESS: + return "success" + } + } + + dismiss(status: FileStatus) { + this.consumerStatusService.dismiss(status) + } + ngOnInit(): void { } @@ -28,54 +50,37 @@ export class UploadFileWidgetComponent implements OnInit { public fileLeave(event){ } - uploadStatus: UploadStatus[] = [] - completedFiles = 0 - - uploadVisible = false - - get loadedSum() { - return this.uploadStatus.map(s => s.loaded).reduce((a,b) => a+b, this.completedFiles > 0 ? 1 : 0) - } - - get totalSum() { - return this.uploadStatus.map(s => s.total).reduce((a,b) => a+b, 1) - } - public dropped(files: NgxFileDropEntry[]) { for (const droppedFile of files) { if (droppedFile.fileEntry.isFile) { - let uploadStatusObject: UploadStatus = {loaded: 0, total: 1} - this.uploadStatus.push(uploadStatusObject) - this.uploadVisible = true const fileEntry = droppedFile.fileEntry as FileSystemFileEntry; fileEntry.file((file: File) => { let formData = new FormData() formData.append('document', file, file.name) + let status = this.consumerStatusService.newFileUpload() + status.filename = file.name this.documentService.uploadDocument(formData).subscribe(event => { if (event.type == HttpEventType.UploadProgress) { - uploadStatusObject.loaded = event.loaded - uploadStatusObject.total = event.total + status.updateProgress(FileStatusPhase.UPLOADING, event.loaded, event.total) } else if (event.type == HttpEventType.Response) { - this.uploadStatus.splice(this.uploadStatus.indexOf(uploadStatusObject), 1) - this.completedFiles += 1 - this.toastService.showInfo($localize`The document has been uploaded and will be processed by the consumer shortly.`) + status.taskId = event.body["task_id"] } }, error => { - this.uploadStatus.splice(this.uploadStatus.indexOf(uploadStatusObject), 1) - this.completedFiles += 1 + status.updateProgress(FileStatusPhase.FAILED) switch (error.status) { case 400: { - this.toastService.showInfo($localize`There was an error while uploading the document: ${error.error.document}`) + status.message = error.error.document break; } default: { - this.toastService.showInfo($localize`An error has occurred while uploading the document. Sorry!`) + status.message = $localize`An error has occurred while uploading the document. Sorry!` break; } } + }) }); } diff --git a/src-ui/src/app/data/websocket-consumer-status-message.ts b/src-ui/src/app/data/websocket-consumer-status-message.ts new file mode 100644 index 000000000..49117b101 --- /dev/null +++ b/src-ui/src/app/data/websocket-consumer-status-message.ts @@ -0,0 +1,11 @@ +export interface WebsocketConsumerStatusMessage { + + filename?: string + task_id?: string + current_progress?: number + max_progress?: number + status?: string + message?: string + document_id: number + +} \ No newline at end of file diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 070420b0f..8aaae1e93 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -1,13 +1,57 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; +import { WebsocketConsumerStatusMessage } from '../data/websocket-consumer-status-message'; + +export enum FileStatusPhase { + STARTED = 0, + UPLOADING = 1, + PROCESSING = 2, + SUCCESS = 3, + FAILED = 4 +} + +export class FileStatus { + + filename: string + + taskId: string + + phase: FileStatusPhase = FileStatusPhase.STARTED + + currentPhaseProgress: number + + currentPhaseMaxProgress: number + + message: string + + documentId: number + + getProgress(): number { + switch (this.phase) { + case FileStatusPhase.STARTED: + return 0.0 + case FileStatusPhase.UPLOADING: + return this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.2 + case FileStatusPhase.PROCESSING: + return this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.8 + 0.2 + case FileStatusPhase.SUCCESS: + case FileStatusPhase.FAILED: + return 1.0 + } + } + + updateProgress(status: FileStatusPhase, currentProgress?: number, maxProgress?: number) { + if (status >= this.phase) { + this.phase = status + if (currentProgress) { + this.currentPhaseProgress = currentProgress + } + if (maxProgress) { + this.currentPhaseMaxProgress = maxProgress + } + } + } -export interface FileStatus { - filename?: string - current_progress?: number - max_progress?: number - status?: string - message?: string - document_id?: number } @Injectable({ @@ -23,24 +67,41 @@ export class ConsumerStatusService { private documentConsumptionFinishedSubject = new Subject<FileStatus>() private documentConsumptionFailedSubject = new Subject<FileStatus>() + private get(taskId: string, filename?: string) { + let status = this.consumerStatus.find(e => e.taskId == taskId) || this.consumerStatus.find(e => e.filename == filename) + if (!status) { + status = new FileStatus() + this.consumerStatus.push(status) + } + status.taskId = taskId + status.filename = filename + return status + } + + newFileUpload(): FileStatus { + let status = new FileStatus() + this.consumerStatus.push(status) + return status + } + connect() { this.disconnect() this.statusWebSocked = new WebSocket("ws://localhost:8000/ws/status/"); this.statusWebSocked.onmessage = (ev) => { - let statusUpdate: FileStatus = JSON.parse(ev['data']) + let statusMessage: WebsocketConsumerStatusMessage = JSON.parse(ev['data']) - let index = this.consumerStatus.findIndex(fs => fs.filename == statusUpdate.filename) - if (index > -1) { - this.consumerStatus[index] = statusUpdate - } else { - this.consumerStatus.push(statusUpdate) - } + let status = this.get(statusMessage.task_id, statusMessage.filename) + status.updateProgress(FileStatusPhase.PROCESSING, statusMessage.current_progress, statusMessage.max_progress) + status.message = statusMessage.message + status.documentId = statusMessage.document_id - if (statusUpdate.status == "SUCCESS") { - this.documentConsumptionFinishedSubject.next(statusUpdate) + if (statusMessage.status == "SUCCESS") { + status.phase = FileStatusPhase.SUCCESS + this.documentConsumptionFinishedSubject.next(status) } - if (statusUpdate.status == "FAILED") { - this.documentConsumptionFailedSubject.next(statusUpdate) + if (statusMessage.status == "FAILED") { + status.phase = FileStatusPhase.FAILED + this.documentConsumptionFailedSubject.next(status) } } } From 47fa11e01d9218b2895ac27c3ef352e32705fb73 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 01:10:39 +0100 Subject: [PATCH 038/898] functions for combined upload progress bars --- .../upload-file-widget.component.html | 1 + .../upload-file-widget.component.ts | 25 ++++++++++++++++--- .../app/services/consumer-status.service.ts | 15 +++++++++-- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 59afb74f9..263918a73 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -9,6 +9,7 @@ </ngx-file-drop> </form> + <p>Uploading {{getStatusUploading().length}} files...</p> <div *ngFor="let status of getStatus()"> <p>{{status.filename}}: {{status.message}}</p> <ngb-progressbar [value]="status.getProgress()" [max]="1" [striped]="true" [animated]="!isFinished(status)" [type]="getType(status)"> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index ac270fe30..bd0e4e290 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -18,7 +18,23 @@ export class UploadFileWidgetComponent implements OnInit { ) { } getStatus() { - return this.consumerStatusService.consumerStatus + return this.consumerStatusService.getConsumerStatus() + } + + getStatusUploading() { + return this.consumerStatusService.getConsumerStatus(FileStatusPhase.UPLOADING) + } + + getTotalUploadProgress() { + let current = 0 + let max = 0 + + this.getStatusUploading().forEach(status => { + current += status.currentPhaseProgress + max += status.currentPhaseMaxProgress + }) + + return current / Math.max(max, 1) } isFinished(status: FileStatus) { @@ -58,14 +74,17 @@ export class UploadFileWidgetComponent implements OnInit { fileEntry.file((file: File) => { let formData = new FormData() formData.append('document', file, file.name) - let status = this.consumerStatusService.newFileUpload() - status.filename = file.name + let status = this.consumerStatusService.newFileUpload(file.name) + + status.message = "Connecting..." this.documentService.uploadDocument(formData).subscribe(event => { if (event.type == HttpEventType.UploadProgress) { status.updateProgress(FileStatusPhase.UPLOADING, event.loaded, event.total) + status.message = "Uploading..." } else if (event.type == HttpEventType.Response) { status.taskId = event.body["task_id"] + status.message = "Upload complete." } }, error => { diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 8aaae1e93..69e58e2dd 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -63,7 +63,9 @@ export class ConsumerStatusService { private statusWebSocked: WebSocket - consumerStatus: FileStatus[] = [] + private consumerStatus: FileStatus[] = [] + + private documentConsumptionFinishedSubject = new Subject<FileStatus>() private documentConsumptionFailedSubject = new Subject<FileStatus>() @@ -78,12 +80,21 @@ export class ConsumerStatusService { return status } - newFileUpload(): FileStatus { + newFileUpload(filename: string): FileStatus { let status = new FileStatus() + status.filename = filename this.consumerStatus.push(status) return status } + getConsumerStatus(phase?: FileStatusPhase) { + if (phase) { + return this.consumerStatus.filter(s => s.phase == phase) + } else { + return this.consumerStatus + } + } + connect() { this.disconnect() this.statusWebSocked = new WebSocket("ws://localhost:8000/ws/status/"); From 2e112fe7b1ee2da75462207faf66c69a2f323b7d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 01:15:27 +0100 Subject: [PATCH 039/898] fix status reports for consumption directory status messages --- src/documents/consumer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index f4a40cbb9..aef8c6345 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -1,6 +1,7 @@ import datetime import hashlib import os +import uuid from subprocess import Popen import magic @@ -150,7 +151,7 @@ class Consumer(LoggingMixin): self.override_correspondent_id = override_correspondent_id self.override_document_type_id = override_document_type_id self.override_tag_ids = override_tag_ids - self.task_id = task_id + self.task_id = task_id or str(uuid.uuid4()) self._send_progress(self.filename, 0, 100, 'WORKING', 'Received new file.') From 5da2bced946c3e26f5585871293ff2bdd1b34cdb Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 00:17:27 -0800 Subject: [PATCH 040/898] Drop over background color --- .../upload-file-widget/upload-file-widget.component.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index e69de29bb..461f9d5b3 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -0,0 +1,5 @@ +@import "/src/theme"; + +::ng-deep .ngx-file-drop__drop-zone--over { + background-color: $primaryFaded !important; +} From 62d3c27e4b475597bd5a676f1beade5a322ff24a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 02:32:45 -0800 Subject: [PATCH 041/898] Lovely file upload alerts --- .../upload-file-widget.component.html | 26 +++++++++-------- .../upload-file-widget.component.scss | 28 +++++++++++++++++++ .../upload-file-widget.component.ts | 6 ++-- .../app/services/consumer-status.service.ts | 5 ++-- 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 263918a73..b4c4fc01b 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -6,20 +6,22 @@ (onFileOver)="fileOver($event)" (onFileLeave)="fileLeave($event)" dropZoneClassName="bg-light card" multiple="true" contentClassName="justify-content-center d-flex align-items-center p-5" [showBrowseBtn]=true browseBtnClassName="btn btn-sm btn-outline-primary ml-2" i18n-dropZoneLabel i18n-browseBtnLabel> - </ngx-file-drop> </form> - <p>Uploading {{getStatusUploading().length}} files...</p> <div *ngFor="let status of getStatus()"> - <p>{{status.filename}}: {{status.message}}</p> - <ngb-progressbar [value]="status.getProgress()" [max]="1" [striped]="true" [animated]="!isFinished(status)" [type]="getType(status)"> - </ngb-progressbar> - - <div *ngIf="isFinished(status)" class="mb-2"> - <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)">Open document</button> - <button class="btn btn-sm btn-outline-secondary" (click)="dismiss(status)">Dismiss</button> - </div> - + <ngb-alert type="secondary" class="mt-2 mb-0" [dismissible]="isFinished(status)" (closed)="dismiss(status)"> + <h6 class="alert-heading">{{status.filename}}</h6> + <p class="mb-0" *ngIf="!isFinished(status) || (isFinished(status) && !status.documentId)">{{status.message}}</p> + <ngb-progressbar [value]="status.getProgress()" [max]="1" [type]="getStatusColor(status)"></ngb-progressbar> + <div *ngIf="isFinished(status)"> + <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> + <small>Open document</small> + <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-arrow-right-short" viewBox="0 0 16 16"> + <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/> + </svg> + </button> + </div> + </ngb-alert> </div> </div> -</app-widget-frame> \ No newline at end of file +</app-widget-frame> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index 461f9d5b3..807eac66b 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -3,3 +3,31 @@ ::ng-deep .ngx-file-drop__drop-zone--over { background-color: $primaryFaded !important; } + +form { + position: relative; +} + +.alert { + transition: all 0.2s ease; +} + +.alert-heading { + font-size: 80%; + font-weight: bold; +} + +.btn-sm { + line-height: 1; +} + +::ng-deep .progress { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: auto; + mix-blend-mode: soft-light; + pointer-events: none; +} diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index bd0e4e290..e9a62cf9c 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -41,7 +41,7 @@ export class UploadFileWidgetComponent implements OnInit { return status.phase == FileStatusPhase.FAILED || status.phase == FileStatusPhase.SUCCESS } - getType(status: FileStatus) { + getStatusColor(status: FileStatus) { switch (status.phase) { case FileStatusPhase.PROCESSING: case FileStatusPhase.UPLOADING: @@ -56,7 +56,7 @@ export class UploadFileWidgetComponent implements OnInit { dismiss(status: FileStatus) { this.consumerStatusService.dismiss(status) } - + ngOnInit(): void { } @@ -75,7 +75,7 @@ export class UploadFileWidgetComponent implements OnInit { let formData = new FormData() formData.append('document', file, file.name) let status = this.consumerStatusService.newFileUpload(file.name) - + status.message = "Connecting..." this.documentService.uploadDocument(formData).subscribe(event => { diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 69e58e2dd..d5ac1ba47 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -16,7 +16,7 @@ export class FileStatus { taskId: string - phase: FileStatusPhase = FileStatusPhase.STARTED + phase: FileStatusPhase = FileStatusPhase.STARTED currentPhaseProgress: number @@ -33,7 +33,8 @@ export class FileStatus { case FileStatusPhase.UPLOADING: return this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.2 case FileStatusPhase.PROCESSING: - return this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.8 + 0.2 + if (this.currentPhaseProgress > 100) this.currentPhaseProgress = 0 + return (this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.8) + 0.2 case FileStatusPhase.SUCCESS: case FileStatusPhase.FAILED: return 1.0 From 1d20343f6e0d8beefe5f3127004c6cac3a30e633 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 02:52:16 -0800 Subject: [PATCH 042/898] Dismiss all --- .../upload-file-widget.component.html | 12 ++++++++++-- .../upload-file-widget.component.scss | 9 +++++++++ .../upload-file-widget.component.ts | 4 ++++ src-ui/src/app/services/consumer-status.service.ts | 4 ++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index b4c4fc01b..d00114934 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -1,5 +1,13 @@ -<app-widget-frame title="Upload new documents" i18n-title> - +<app-widget-frame title="Upload new documents" i18n-title [class.has-multiple-status]="getStatus().length > 1"> + <div header-buttons> + <button type="button" class="btn btn-link dismiss-all" [disabled]="!getStatus().length" (click)="dismissAll()"> + <small class="mr-1">Hide all</small> + <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-check2-all" viewBox="0 0 16 16"> + <path d="M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7l-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z"/> + <path d="M5.354 7.146l.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z"/> + </svg> + </button> + </div> <div content> <form> <ngx-file-drop dropZoneLabel="Drop documents here or" browseBtnLabel="Browse files" (onFileDrop)="dropped($event)" diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index 807eac66b..10a83e308 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -21,6 +21,15 @@ form { line-height: 1; } +.dismiss-all { + transition: opacity 0.2s ease; + opacity: 0; +} + +.has-multiple-status .dismiss-all { + opacity: 1; +} + ::ng-deep .progress { position: absolute; top: 0; diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index e9a62cf9c..19ab8d04b 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -57,6 +57,10 @@ export class UploadFileWidgetComponent implements OnInit { this.consumerStatusService.dismiss(status) } + dismissAll() { + this.consumerStatusService.dismissAll() + } + ngOnInit(): void { } diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index d5ac1ba47..b2804103d 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -133,6 +133,10 @@ export class ConsumerStatusService { } } + dismissAll() { + this.consumerStatus = [] + } + onDocumentConsumptionFinished() { return this.documentConsumptionFinishedSubject } From c1136ac83cb1d676f17be0bc3bca7170c5349d18 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 15:02:46 +0100 Subject: [PATCH 043/898] i18n, better error handling --- src/documents/consumer.py | 94 ++++++----- src/documents/serialisers.py | 6 +- src/locale/en-us/LC_MESSAGES/django.po | 222 +++++++++++++++---------- 3 files changed, 194 insertions(+), 128 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index aef8c6345..2fbbe7a0a 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -25,6 +25,8 @@ from .signals import ( document_consumption_started ) +from django.utils.translation import gettext as _ + class ConsumerError(Exception): pass @@ -32,10 +34,10 @@ class ConsumerError(Exception): class Consumer(LoggingMixin): - def _send_progress(self, filename, current_progress, max_progress, status, + def _send_progress(self, current_progress, max_progress, status, message, document_id=None): payload = { - 'filename': os.path.basename(filename), + 'filename': os.path.basename(self.filename), 'task_id': self.task_id, 'current_progress': current_progress, 'max_progress': max_progress, @@ -47,10 +49,10 @@ class Consumer(LoggingMixin): {'type': 'status_update', 'data': payload}) - def _fail(self, message): - self._send_progress(self.filename, 100, 100, 'FAILED', - message) - raise ConsumerError(f"{self.filename}: {message}") + def _fail(self, message, log_message=None): + self._send_progress(100, 100, 'FAILED', message) + self.log("error", log_message or message) + raise ConsumerError(f"{self.filename}: {log_message or message}") def __init__(self): super().__init__() @@ -66,11 +68,10 @@ class Consumer(LoggingMixin): def pre_check_file_exists(self): if not os.path.isfile(self.path): - self.log( - "error", - "Cannot consume {}: It is not a file.".format(self.path) + self._fail( + _("File not found"), + f"Cannot consume {self.path}: It is not a file." ) - self._fail("File not found") def pre_check_duplicate(self): with open(self.path, "rb") as f: @@ -78,11 +79,10 @@ class Consumer(LoggingMixin): if Document.objects.filter(Q(checksum=checksum) | Q(archive_checksum=checksum)).exists(): # NOQA: E501 if settings.CONSUMER_DELETE_DUPLICATES: os.unlink(self.path) - self.log( - "error", - "Not consuming {}: It is a duplicate.".format(self.filename) + self._fail( + _("Document is a duplicate"), + f"Not consuming {self.filename}: It is a duplicate." ) - self._fail("Document is a duplicate") def pre_check_directories(self): os.makedirs(settings.SCRATCH_DIR, exist_ok=True) @@ -95,14 +95,16 @@ class Consumer(LoggingMixin): return if not os.path.isfile(settings.PRE_CONSUME_SCRIPT): - raise ConsumerError( + self._fail( + _("Pre-consume script does not exist."), f"Configured pre-consume script " f"{settings.PRE_CONSUME_SCRIPT} does not exist.") try: Popen((settings.PRE_CONSUME_SCRIPT, self.path)).wait() except Exception as e: - raise ConsumerError( + self._fail( + _("Error while executing pre-consume script"), f"Error while executing pre-consume script: {e}" ) @@ -111,9 +113,11 @@ class Consumer(LoggingMixin): return if not os.path.isfile(settings.POST_CONSUME_SCRIPT): - raise ConsumerError( + self._fail( + _("Post-consume script does not exist."), f"Configured post-consume script " - f"{settings.POST_CONSUME_SCRIPT} does not exist.") + f"{settings.POST_CONSUME_SCRIPT} does not exist." + ) try: Popen(( @@ -129,8 +133,9 @@ class Consumer(LoggingMixin): "name", flat=True))) )).wait() except Exception as e: - raise ConsumerError( - f"Error while executing pre-consume script: {e}" + self._fail( + _("Error while executing post-consume script"), + f"Error while executing post-consume script: {e}" ) def try_consume_file(self, @@ -153,8 +158,7 @@ class Consumer(LoggingMixin): self.override_tag_ids = override_tag_ids self.task_id = task_id or str(uuid.uuid4()) - self._send_progress(self.filename, 0, 100, 'WORKING', - 'Received new file.') + self._send_progress(0, 100, 'WORKING', _('Received new file')) # this is for grouping logging entries for this particular file # together. @@ -177,10 +181,13 @@ class Consumer(LoggingMixin): parser_class = get_parser_class_for_mime_type(mime_type) if not parser_class: - self._fail(f"Unsupported mime type {mime_type}") + self._fail( + _("File type %(type)s not supported") % + {'type': mime_type}, + f"Unsupported mime type {mime_type}" + ) else: - self.log("debug", - f"Parser: {parser_class.__name__}") + self.log("debug", f"Parser: {parser_class.__name__}") # Notify all listeners that we're going to do some work. @@ -195,7 +202,7 @@ class Consumer(LoggingMixin): def progress_callback(current_progress, max_progress, message): # recalculate progress to be within 20 and 80 p = int((current_progress / max_progress) * 50 + 20) - self._send_progress(self.filename, p, 100, "WORKING", message) + self._send_progress(p, 100, "WORKING", message) # This doesn't parse the document yet, but gives us a parser. @@ -206,32 +213,36 @@ class Consumer(LoggingMixin): # Parse the document. This may take some time. + text = None + date = None + thumbnail = None + archive_path = None + try: - self._send_progress(self.filename, 20, 100, 'WORKING', - 'Parsing document...') + self._send_progress(20, 100, 'WORKING', _('Parsing document...')) self.log("debug", "Parsing {}...".format(self.filename)) document_parser.parse(self.path, mime_type, self.filename) self.log("debug", f"Generating thumbnail for {self.filename}...") - self._send_progress(self.filename, 70, 100, 'WORKING', - 'Generating thumbnail...') + self._send_progress(70, 100, 'WORKING', + _('Generating thumbnail...')) thumbnail = document_parser.get_optimised_thumbnail( self.path, mime_type) text = document_parser.get_text() date = document_parser.get_date() if not date: - self._send_progress(self.filename, 90, 100, 'WORKING', - 'Getting date from document...') + self._send_progress(90, 100, 'WORKING', + _('Getting date from document...')) date = parse_date(self.filename, text) archive_path = document_parser.get_archive_path() except ParseError as e: document_parser.cleanup() - self.log( - "error", - f"Error while consuming document {self.filename}: {e}") - self._fail(str(e)) + self._fail( + str(e), + f"Error while consuming document {self.filename}: {e}" + ) # Prepare the document classifier. @@ -247,8 +258,7 @@ class Consumer(LoggingMixin): "warning", f"Cannot classify documents: {e}.") classifier = None - self._send_progress(self.filename, 95, 100, 'WORKING', - 'Storing the document...') + self._send_progress(95, 100, 'WORKING', _('Saving document...')) # now that everything is done, we can start to store the document # in the system. This will be a transaction and reasonably fast. try: @@ -302,12 +312,11 @@ class Consumer(LoggingMixin): os.unlink(self.path) except Exception as e: - self.log( - "error", + self._fail( + str(e), f"The following error occured while consuming " f"{self.filename}: {e}" ) - self._fail(str(e)) finally: document_parser.cleanup() @@ -318,8 +327,7 @@ class Consumer(LoggingMixin): "Document {} consumption finished".format(document) ) - self._send_progress(self.filename, 100, 100, 'SUCCESS', - 'Finished.', document.id) + self._send_progress(100, 100, 'SUCCESS', _('Finished.'), document.id) return document diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 70a44d3fd..aa4ef4bf8 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -8,6 +8,8 @@ from .models import Correspondent, Tag, Document, Log, DocumentType, \ SavedView, SavedViewFilterRule from .parsers import is_mime_type_supported +from django.utils.translation import gettext as _ + # https://www.django-rest-framework.org/api-guide/serializers/#example class DynamicFieldsModelSerializer(serializers.ModelSerializer): @@ -378,7 +380,9 @@ class PostDocumentSerializer(serializers.Serializer): if not is_mime_type_supported(mime_type): raise serializers.ValidationError( - "This file type is not supported.") + _("File type %(type)s not supported") % + {'type': mime_type} + ) return document.name, document_data diff --git a/src/locale/en-us/LC_MESSAGES/django.po b/src/locale/en-us/LC_MESSAGES/django.po index 414caba52..5451b8dde 100644 --- a/src/locale/en-us/LC_MESSAGES/django.po +++ b/src/locale/en-us/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-10 21:41+0000\n" +"POT-Creation-Date: 2021-01-26 14:59+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" @@ -21,320 +21,374 @@ msgstr "" msgid "Documents" msgstr "" -#: documents/models.py:32 -msgid "Any word" +#: documents/consumer.py:72 +msgid "File not found" +msgstr "Datei nicht gefunden" + +#: documents/consumer.py:83 +msgid "Document is a duplicate" +msgstr "Dokument existiert bereits" + +#: documents/consumer.py:99 +msgid "Pre-consume script does not exist." +msgstr "" + +#: documents/consumer.py:107 +msgid "Error while executing pre-consume script" +msgstr "" + +#: documents/consumer.py:117 +msgid "Post-consume script does not exist." +msgstr "" + +#: documents/consumer.py:137 +msgid "Error while executing post-consume script" +msgstr "" + +#: documents/consumer.py:161 +msgid "Received new file" +msgstr "" + +#: documents/consumer.py:185 documents/serialisers.py:383 +#, fuzzy, python-format +#| msgid "File type {type} not supported." +msgid "File type %(type)s not supported" +msgstr "Dateityp {type} wird nicht unterstützt" + +#: documents/consumer.py:222 +msgid "Parsing document..." +msgstr "" + +#: documents/consumer.py:228 +msgid "Generating thumbnail..." +msgstr "" + +#: documents/consumer.py:236 +msgid "Getting date from document..." +msgstr "" + +#: documents/consumer.py:261 +msgid "Saving document..." +msgstr "" + +#: documents/consumer.py:330 +msgid "Finished." msgstr "" #: documents/models.py:33 -msgid "All words" +msgid "Any word" msgstr "" #: documents/models.py:34 -msgid "Exact match" +msgid "All words" msgstr "" #: documents/models.py:35 -msgid "Regular expression" +msgid "Exact match" msgstr "" #: documents/models.py:36 -msgid "Fuzzy word" +msgid "Regular expression" msgstr "" #: documents/models.py:37 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:38 msgid "Automatic" msgstr "" -#: documents/models.py:41 documents/models.py:354 paperless_mail/models.py:25 +#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "" -#: documents/models.py:45 +#: documents/models.py:46 msgid "match" msgstr "" -#: documents/models.py:49 +#: documents/models.py:50 msgid "matching algorithm" msgstr "" -#: documents/models.py:55 +#: documents/models.py:56 msgid "is insensitive" msgstr "" -#: documents/models.py:80 documents/models.py:140 +#: documents/models.py:75 documents/models.py:135 msgid "correspondent" msgstr "" -#: documents/models.py:81 +#: documents/models.py:76 msgid "correspondents" msgstr "" -#: documents/models.py:103 +#: documents/models.py:98 msgid "color" msgstr "" -#: documents/models.py:107 +#: documents/models.py:102 msgid "is inbox tag" msgstr "" -#: documents/models.py:109 +#: documents/models.py:104 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." msgstr "" -#: documents/models.py:114 +#: documents/models.py:109 msgid "tag" msgstr "" -#: documents/models.py:115 documents/models.py:171 +#: documents/models.py:110 documents/models.py:166 msgid "tags" msgstr "" -#: documents/models.py:121 documents/models.py:153 +#: documents/models.py:116 documents/models.py:148 msgid "document type" msgstr "" -#: documents/models.py:122 +#: documents/models.py:117 msgid "document types" msgstr "" -#: documents/models.py:130 +#: documents/models.py:125 msgid "Unencrypted" msgstr "" -#: documents/models.py:131 +#: documents/models.py:126 msgid "Encrypted with GNU Privacy Guard" msgstr "" -#: documents/models.py:144 +#: documents/models.py:139 msgid "title" msgstr "" -#: documents/models.py:157 +#: documents/models.py:152 msgid "content" msgstr "" -#: documents/models.py:159 +#: documents/models.py:154 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." msgstr "" -#: documents/models.py:164 +#: documents/models.py:159 msgid "mime type" msgstr "" -#: documents/models.py:175 +#: documents/models.py:170 msgid "checksum" msgstr "" -#: documents/models.py:179 +#: documents/models.py:174 msgid "The checksum of the original document." msgstr "" -#: documents/models.py:183 +#: documents/models.py:178 msgid "archive checksum" msgstr "" -#: documents/models.py:188 +#: documents/models.py:183 msgid "The checksum of the archived document." msgstr "" -#: documents/models.py:192 documents/models.py:332 +#: documents/models.py:187 documents/models.py:330 msgid "created" msgstr "" -#: documents/models.py:196 +#: documents/models.py:191 msgid "modified" msgstr "" -#: documents/models.py:200 +#: documents/models.py:195 msgid "storage type" msgstr "" -#: documents/models.py:208 +#: documents/models.py:203 msgid "added" msgstr "" -#: documents/models.py:212 +#: documents/models.py:207 msgid "filename" msgstr "" -#: documents/models.py:217 +#: documents/models.py:212 msgid "Current filename in storage" msgstr "" -#: documents/models.py:221 +#: documents/models.py:216 msgid "archive serial number" msgstr "" -#: documents/models.py:226 +#: documents/models.py:221 msgid "The position of this document in your physical document archive." msgstr "" -#: documents/models.py:232 +#: documents/models.py:227 msgid "document" msgstr "" -#: documents/models.py:233 +#: documents/models.py:228 msgid "documents" msgstr "" -#: documents/models.py:315 +#: documents/models.py:313 msgid "debug" msgstr "" -#: documents/models.py:316 +#: documents/models.py:314 msgid "information" msgstr "" -#: documents/models.py:317 +#: documents/models.py:315 msgid "warning" msgstr "" -#: documents/models.py:318 +#: documents/models.py:316 msgid "error" msgstr "" -#: documents/models.py:319 +#: documents/models.py:317 msgid "critical" msgstr "" -#: documents/models.py:323 +#: documents/models.py:321 msgid "group" msgstr "" -#: documents/models.py:326 +#: documents/models.py:324 msgid "message" msgstr "" -#: documents/models.py:329 +#: documents/models.py:327 msgid "level" msgstr "" -#: documents/models.py:336 +#: documents/models.py:334 msgid "log" msgstr "" -#: documents/models.py:337 +#: documents/models.py:335 msgid "logs" msgstr "" -#: documents/models.py:348 documents/models.py:398 +#: documents/models.py:346 documents/models.py:396 msgid "saved view" msgstr "" -#: documents/models.py:349 +#: documents/models.py:347 msgid "saved views" msgstr "" -#: documents/models.py:352 +#: documents/models.py:350 msgid "user" msgstr "" -#: documents/models.py:358 +#: documents/models.py:356 msgid "show on dashboard" msgstr "" -#: documents/models.py:361 +#: documents/models.py:359 msgid "show in sidebar" msgstr "" -#: documents/models.py:365 +#: documents/models.py:363 msgid "sort field" msgstr "" -#: documents/models.py:368 +#: documents/models.py:366 msgid "sort reverse" msgstr "" -#: documents/models.py:374 +#: documents/models.py:372 msgid "title contains" msgstr "" -#: documents/models.py:375 +#: documents/models.py:373 msgid "content contains" msgstr "" -#: documents/models.py:376 +#: documents/models.py:374 msgid "ASN is" msgstr "" -#: documents/models.py:377 +#: documents/models.py:375 msgid "correspondent is" msgstr "" -#: documents/models.py:378 +#: documents/models.py:376 msgid "document type is" msgstr "" -#: documents/models.py:379 +#: documents/models.py:377 msgid "is in inbox" msgstr "" -#: documents/models.py:380 +#: documents/models.py:378 msgid "has tag" msgstr "" -#: documents/models.py:381 +#: documents/models.py:379 msgid "has any tag" msgstr "" -#: documents/models.py:382 +#: documents/models.py:380 msgid "created before" msgstr "" -#: documents/models.py:383 +#: documents/models.py:381 msgid "created after" msgstr "" -#: documents/models.py:384 +#: documents/models.py:382 msgid "created year is" msgstr "" -#: documents/models.py:385 +#: documents/models.py:383 msgid "created month is" msgstr "" -#: documents/models.py:386 +#: documents/models.py:384 msgid "created day is" msgstr "" -#: documents/models.py:387 +#: documents/models.py:385 msgid "added before" msgstr "" -#: documents/models.py:388 +#: documents/models.py:386 msgid "added after" msgstr "" -#: documents/models.py:389 +#: documents/models.py:387 msgid "modified before" msgstr "" -#: documents/models.py:390 +#: documents/models.py:388 msgid "modified after" msgstr "" -#: documents/models.py:391 +#: documents/models.py:389 msgid "does not have tag" msgstr "" -#: documents/models.py:402 +#: documents/models.py:400 msgid "rule type" msgstr "" -#: documents/models.py:406 +#: documents/models.py:404 msgid "value" msgstr "" -#: documents/models.py:412 +#: documents/models.py:410 msgid "filter rule" msgstr "" -#: documents/models.py:413 +#: documents/models.py:411 msgid "filter rules" msgstr "" @@ -378,23 +432,23 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:268 +#: paperless/settings.py:286 msgid "English" msgstr "" -#: paperless/settings.py:269 +#: paperless/settings.py:287 msgid "German" msgstr "" -#: paperless/settings.py:270 +#: paperless/settings.py:288 msgid "Dutch" msgstr "" -#: paperless/settings.py:271 +#: paperless/settings.py:289 msgid "French" msgstr "" -#: paperless/urls.py:108 +#: paperless/urls.py:114 msgid "Paperless-ng administration" msgstr "" From c0f185fe7ec48ff70e1ffd1e7b94b6ab708b011d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 15:19:56 +0100 Subject: [PATCH 044/898] bug fixes, test case fixes --- src/documents/consumer.py | 6 +++--- src/documents/parsers.py | 2 +- src/documents/tests/test_consumer.py | 20 +++++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 2fbbe7a0a..d0f7399c8 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -37,7 +37,7 @@ class Consumer(LoggingMixin): def _send_progress(self, current_progress, max_progress, status, message, document_id=None): payload = { - 'filename': os.path.basename(self.filename), + 'filename': os.path.basename(self.filename) if self.filename else None, # NOQA: E501 'task_id': self.task_id, 'current_progress': current_progress, 'max_progress': max_progress, @@ -70,7 +70,7 @@ class Consumer(LoggingMixin): if not os.path.isfile(self.path): self._fail( _("File not found"), - f"Cannot consume {self.path}: It is not a file." + f"Cannot consume {self.path}: File not found." ) def pre_check_duplicate(self): @@ -80,7 +80,7 @@ class Consumer(LoggingMixin): if settings.CONSUMER_DELETE_DUPLICATES: os.unlink(self.path) self._fail( - _("Document is a duplicate"), + _("Document already exists"), f"Not consuming {self.filename}: It is a duplicate." ) diff --git a/src/documents/parsers.py b/src/documents/parsers.py index f8fd117d9..ddad6897a 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -261,7 +261,7 @@ class DocumentParser(LoggingMixin): `paperless_tesseract.parsers` for inspiration. """ - def __init__(self, logging_group, progress_callback): + def __init__(self, logging_group, progress_callback=None): super().__init__() self.logging_group = logging_group os.makedirs(settings.SCRATCH_DIR, exist_ok=True) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index a6861a541..799250d08 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -170,7 +170,7 @@ class DummyParser(DocumentParser): raise NotImplementedError() def __init__(self, logging_group, scratch_dir, archive_path): - super(DummyParser, self).__init__(logging_group) + super(DummyParser, self).__init__(logging_group, None) _, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=scratch_dir) self.archive_path = archive_path @@ -212,10 +212,10 @@ def fake_magic_from_file(file, mime=False): @mock.patch("documents.consumer.magic.from_file", fake_magic_from_file) class TestConsumer(DirectoriesMixin, TestCase): - def make_dummy_parser(self, logging_group): + def make_dummy_parser(self, logging_group, progress_callback=None): return DummyParser(logging_group, self.dirs.scratch_dir, self.get_test_archive_file()) - def make_faulty_parser(self, logging_group): + def make_faulty_parser(self, logging_group, progress_callback=None): return FaultyParser(logging_group, self.dirs.scratch_dir) def setUp(self): @@ -312,7 +312,7 @@ class TestConsumer(DirectoriesMixin, TestCase): try: self.consumer.try_consume_file("non-existing-file") except ConsumerError as e: - self.assertTrue(str(e).endswith('It is not a file')) + self.assertTrue(str(e).endswith('File not found.')) return self.fail("Should throw exception") @@ -350,7 +350,7 @@ class TestConsumer(DirectoriesMixin, TestCase): try: self.consumer.try_consume_file(self.get_test_file()) except ConsumerError as e: - self.assertEqual("Unsupported mime type application/pdf of file sample.pdf", str(e)) + self.assertEqual(str(e), "sample.pdf: Unsupported mime type application/pdf") return self.fail("Should throw exception") @@ -366,7 +366,7 @@ class TestConsumer(DirectoriesMixin, TestCase): try: self.consumer.try_consume_file(self.get_test_file()) except ConsumerError as e: - self.assertEqual(str(e), "Does not compute.") + self.assertEqual(str(e), "sample.pdf: Error while consuming document sample.pdf: Does not compute.") return self.fail("Should throw exception.") @@ -378,7 +378,7 @@ class TestConsumer(DirectoriesMixin, TestCase): try: self.consumer.try_consume_file(filename) except ConsumerError as e: - self.assertEqual(str(e), "NO.") + self.assertEqual(str(e), "sample.pdf: The following error occured while consuming sample.pdf: NO.") else: self.fail("Should raise exception") @@ -482,6 +482,7 @@ class PreConsumeTestCase(TestCase): @override_settings(PRE_CONSUME_SCRIPT="does-not-exist") def test_pre_consume_script_not_found(self, m): c = Consumer() + c.filename = "somefile.pdf" c.path = "path-to-file" self.assertRaises(ConsumerError, c.run_pre_consume_script) @@ -523,8 +524,9 @@ class PostConsumeTestCase(TestCase): @override_settings(POST_CONSUME_SCRIPT="does-not-exist") def test_post_consume_script_not_found(self): doc = Document.objects.create(title="Test", mime_type="application/pdf") - - self.assertRaises(ConsumerError, Consumer().run_post_consume_script, doc) + c = Consumer() + c.filename = "somefile.pdf" + self.assertRaises(ConsumerError, c.run_post_consume_script, doc) @mock.patch("documents.consumer.Popen") def test_post_consume_script_simple(self, m): From 40f58e0b7955de0646bc271ac0dac9fb85f72b29 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 15:26:25 +0100 Subject: [PATCH 045/898] fix test cases --- src/documents/tests/test_consumer.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 799250d08..54d20ca8b 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -228,7 +228,11 @@ class TestConsumer(DirectoriesMixin, TestCase): "mime_types": {"application/pdf": ".pdf"}, "weight": 0 })] + self.addCleanup(patcher.stop) + # this prevents websocket message reports during testing. + patcher = mock.patch("documents.consumer.Consumer._send_progress") + patcher.start() self.addCleanup(patcher.stop) self.consumer = Consumer() @@ -479,8 +483,9 @@ class PreConsumeTestCase(TestCase): m.assert_not_called() @mock.patch("documents.consumer.Popen") + @mock.patch("documents.consumer.Consumer._send_progress") @override_settings(PRE_CONSUME_SCRIPT="does-not-exist") - def test_pre_consume_script_not_found(self, m): + def test_pre_consume_script_not_found(self, m, m2): c = Consumer() c.filename = "somefile.pdf" c.path = "path-to-file" @@ -504,7 +509,6 @@ class PreConsumeTestCase(TestCase): self.assertEqual(command[1], "path-to-file") - class PostConsumeTestCase(TestCase): @mock.patch("documents.consumer.Popen") @@ -520,9 +524,9 @@ class PostConsumeTestCase(TestCase): m.assert_not_called() - @override_settings(POST_CONSUME_SCRIPT="does-not-exist") - def test_post_consume_script_not_found(self): + @mock.patch("documents.consumer.Consumer._send_progress") + def test_post_consume_script_not_found(self, m): doc = Document.objects.create(title="Test", mime_type="application/pdf") c = Consumer() c.filename = "somefile.pdf" From a497f19df9f5bb8baee9e43e5abbf477f8e873f3 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 15:43:07 +0100 Subject: [PATCH 046/898] pycodestyle --- src/paperless/asgi.py | 6 +++--- src/paperless/consumers.py | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/paperless/asgi.py b/src/paperless/asgi.py index 45565c68a..2f6cc2d5f 100644 --- a/src/paperless/asgi.py +++ b/src/paperless/asgi.py @@ -8,10 +8,10 @@ from django.core.asgi import get_asgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "paperless.settings") django_asgi_app = get_asgi_application() -from channels.auth import AuthMiddlewareStack -from channels.routing import ProtocolTypeRouter, URLRouter +from channels.auth import AuthMiddlewareStack # NOQA: E402 +from channels.routing import ProtocolTypeRouter, URLRouter # NOQA: E402 -from paperless.urls import websocket_urlpatterns +from paperless.urls import websocket_urlpatterns # NOQA: E402 application = ProtocolTypeRouter({ "http": get_asgi_application(), diff --git a/src/paperless/consumers.py b/src/paperless/consumers.py index fbb7b72d0..21a0e3ede 100644 --- a/src/paperless/consumers.py +++ b/src/paperless/consumers.py @@ -7,10 +7,12 @@ from channels.generic.websocket import WebsocketConsumer class StatusConsumer(WebsocketConsumer): def connect(self): self.accept() - async_to_sync(self.channel_layer.group_add)('status_updates', self.channel_name) + async_to_sync(self.channel_layer.group_add)( + 'status_updates', self.channel_name) def disconnect(self, close_code): - async_to_sync(self.channel_layer.group_discard)('status_updates', self.channel_name) + async_to_sync(self.channel_layer.group_discard)( + 'status_updates', self.channel_name) def status_update(self, event): self.send(json.dumps(event['data'])) From ce70d1541e5fe8b7b80d77d8bdb426d117b20b68 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 15:55:47 +0100 Subject: [PATCH 047/898] enable docker image builds on feature branches --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 425243163..03b789bb7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -225,7 +225,7 @@ jobs: # build and push image to docker hub. build-docker-image: - if: github.event_name == 'push' && (github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/ng-')) + if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/ng-')) runs-on: ubuntu-latest needs: [frontend, tests] steps: From 2f4833e0d5649f1810add97567068e9aac3277ea Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 18:00:59 +0100 Subject: [PATCH 048/898] pinned scikit learn version --- Pipfile | 3 +- Pipfile.lock | 170 +++++++++++++++++++++++++-------------------------- 2 files changed, 85 insertions(+), 88 deletions(-) diff --git a/Pipfile b/Pipfile index 140df6d02..e30abc064 100644 --- a/Pipfile +++ b/Pipfile @@ -32,7 +32,8 @@ python-Levenshtein = "*" python-magic = "*" psycopg2-binary = "*" redis = "*" -scikit-learn="~=0.24.0" +# Pinned because aarch64 wheels and updates cause warnings when loading the classifier model. +scikit-learn="==0.24.0" whitenoise = "~=5.2.0" watchdog = "*" whoosh="~=2.7.4" diff --git a/Pipfile.lock b/Pipfile.lock index 9c30dedfa..f60ac0223 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "ede35846cb5a19613a24fa1ad4ba0e0ea0290d45fc912e7e69136bc56bb64007" + "sha256": "61ffe4b723ce6b04e67636f1572f833ee9adacdcf74a883c558ed4b0c906e75a" }, "pipfile-spec": 6, "requires": {}, @@ -910,39 +910,35 @@ }, "scikit-learn": { "hashes": [ - "sha256:0567a2d29ad08af98653300c623bd8477b448fe66ced7198bef4ed195925f082", - "sha256:087dfede39efb06ab30618f9ab55a0397f29c38d63cd0ab88d12b500b7d65fd7", - "sha256:1adf483e91007a87171d7ce58c34b058eb5dab01b5fee6052f15841778a8ecd8", - "sha256:259ec35201e82e2db1ae2496f229e63f46d7f1695ae68eef9350b00dc74ba52f", - "sha256:3c4f07f47c04e81b134424d53c3f5e16dfd7f494e44fd7584ba9ce9de2c5e6c1", - "sha256:4562dcf4793e61c5d0f89836d07bc37521c3a1889da8f651e2c326463c4bd697", - "sha256:4ddd2b6f7449a5d539ff754fa92d75da22de261fd8fdcfb3596799fadf255101", - "sha256:7b04691eb2f41d2c68dbda8d1bd3cb4ef421bdc43aaa56aeb6c762224552dfb6", - "sha256:826b92bf45b8ad80444814e5f4ac032156dd481e48d7da33d611f8fe96d5f08b", - "sha256:83b21ff053b1ff1c018a2d24db6dd3ea339b1acfbaa4d9c881731f43748d8b3b", - "sha256:8772b99d683be8f67fcc04789032f1b949022a0e6880ee7b75a7ec97dbbb5d0b", - "sha256:895dbf2030aa7337649e36a83a007df3c9811396b4e2fa672a851160f36ce90c", - "sha256:8aa1b3ac46b80eaa552b637eeadbbce3be5931e4b5002b964698e33a1b589e1e", - "sha256:99349d77f54e11f962d608d94dfda08f0c9e5720d97132233ebdf35be2858b2d", - "sha256:9a24d1ccec2a34d4cd3f2a1f86409f3f5954cc23d4d2270ba0d03cf018aa4780", - "sha256:9bed8a1ef133c8e2f13966a542cb8125eac7f4b67dcd234197c827ba9c7dd3e0", - "sha256:9c6097b6a9b2bafc5e0f31f659e6ab5e131383209c30c9e978c5b8abdac5ed2a", - "sha256:9dfa564ef27e8e674aa1cc74378416d580ac4ede1136c13dd555a87996e13422", - "sha256:a0334a1802e64d656022c3bfab56a73fbd6bf4b1298343f3688af2151810bbdf", - "sha256:a29460499c1e62b7a830bb57ca42e615375a6ab1bcad053cd25b493588348ea8", - "sha256:a36e159a0521e13bbe15ca8c8d038b3a1dd4c7dad18d276d76992e03b92cf643", - "sha256:ae7191f0253145503fbfa1934cbc83f48260f534343e34115398fb5fc2be55b0", - "sha256:c13ebac42236b1c46397162471ea1c46af68413000e28b9309f8c05722c65a09", - "sha256:c3deb3b19dd9806acf00cf0d400e84562c227723013c33abefbbc3cf906596e9", - "sha256:c658432d8a20e95398f6bb95ff9731ce9dfa343fdf21eea7ec6a7edfacd4b4d9", - "sha256:c7f4eb77504ac586d8ac1bde1b0c04b504487210f95297235311a0ab7edd7e38", - "sha256:d54dbaadeb1425b7d6a66bf44bee2bb2b899fe3e8850b8e94cfb9c904dcb46d0", - "sha256:ddb52d088889f5596bc4d1de981f2eca106b58243b6679e4782f3ba5096fd645", - "sha256:ed9d65594948678827f4ff0e7ae23344e2f2b4cabbca057ccaed3118fdc392ca", - "sha256:fab31f48282ebf54dd69f6663cd2d9800096bad1bb67bbc9c9ac84eb77b41972" + "sha256:076369634ee72b5a5941440661e2f306ff4ac30903802dc52031c7e9199ac640", + "sha256:18f7131e62265bf2691ed1d0303c640313894ccfe4278427478c6b2f45094b53", + "sha256:26f66b3726b54dfb76ea51c5d9c2431ed17ebc066cb4527662b9e851a3e7ba61", + "sha256:2951f87d35e72f007701c6e028aa230f6df6212a3194677c0c950486066a454d", + "sha256:2a5348585aa793bc8cc5a72f8e9067c9380834b0aadbd55f924843b071f13282", + "sha256:3eeff086f7329521d27249a082ea3c48c085cedb110db5f65968ab55c3ba2e09", + "sha256:4395e91b3548005f4a645018435b5a94f8cce232b5b70753020e606c6a750656", + "sha256:44e452ea8491225c5783d49577aad0f36202dfd52aec7f82c0fdfe5fbd5f7400", + "sha256:490436b44b3a1957cb625e871764b0aa330b34cc416aea4abc6c38ca63d0d682", + "sha256:5e6e3c042cea83f2e20a45e563b8eabc1f8f72446251fe23ebefdf111a173a33", + "sha256:66f27bf21202a850bcd7b6303916e4907f6e22ec59a14974ede4955aed5c7ed0", + "sha256:743b6edd98c98991be46c08e6b21df3861d5ae915f91d59f988384d93f7263e7", + "sha256:758619e49cd7c17282e6cc60d5cc73c02c072b47c9a10010bb3bb47e0d976e50", + "sha256:7f654befc5ad413690cc58f3f34a3e906caf825195ce0fda00a8e9565e1403e6", + "sha256:800aaf63f8838c00e85db2267dd226f89858594843fd03932a9eda95746d2c40", + "sha256:80ca024154b84b6ac4cfc86930ba13fdc348a209753bf2c16129db6f9eb8a80b", + "sha256:890d7d588f65acb0c4f6c083347c9076916bda5e6bd8400f06244b1afc1009af", + "sha256:905d8934d1e27a686698864a5863ff2c0e13a2ae1adb78a8a848aacc8a49927d", + "sha256:a83fcd9d59c42a2f66b307e3b0b0f08aa8e6e45be33da055697ea499f0e4f7c2", + "sha256:afeb06dc69847927634e58579b9cdc72e1390b79497336b2324b1b173f33bd47", + "sha256:b0d13fd56d26cf3de0314a4fd48037108c638fe126d813f5c1222bb0f08b6a76", + "sha256:c08b27cb78ee8d2dc781a7affed09859441f5b624f9f92da59ac0791c8774dfc", + "sha256:c912247e42114f389858ae05d63f4359d4e667ea72aaabee191aee9ad3f9774a", + "sha256:d7fe05fcb44eadd6d6c874c768f085f5de1239db3a3b7be4d3d23d12e4120589", + "sha256:d819d625832fb2969911a243e009cfa135cb8ef1e150866e417d6e9d75290087", + "sha256:e534f5f3796db6781c87e9835dcd51b7854c8c5a379c9210b93605965c1941fd" ], "index": "pypi", - "version": "==0.24.1" + "version": "==0.24.0" }, "scipy": { "hashes": [ @@ -1268,60 +1264,60 @@ }, "coverage": { "hashes": [ - "sha256:08b3ba72bd981531fd557f67beee376d6700fba183b167857038997ba30dd297", - "sha256:262066798d786ad67a13c7ba869e3ce0e39609f99f6d6c80160ad602c4808e32", - "sha256:2757fa64e11ec12220968f65d086b7a29b6583d16e9a544c889b22ba98555ef1", - "sha256:3102bb2c206700a7d28181dbe04d66b30780cde1d1c02c5f3c165cf3d2489497", - "sha256:3498b27d8236057def41de3585f317abae235dd3a11d33e01736ffedb2ef8606", - "sha256:378ac77af41350a8c6b8801a66021b52da8a05fd77e578b7380e876c0ce4f528", - "sha256:38f16b1317b8dd82df67ed5daa5f5e7c959e46579840d77a67a4ceb9cef0a50b", - "sha256:3911c2ef96e5ddc748a3c8b4702c61986628bb719b8378bf1e4a6184bbd48fe4", - "sha256:3a3c3f8863255f3c31db3889f8055989527173ef6192a283eb6f4db3c579d830", - "sha256:3b14b1da110ea50c8bcbadc3b82c3933974dbeea1832e814aab93ca1163cd4c1", - "sha256:535dc1e6e68fad5355f9984d5637c33badbdc987b0c0d303ee95a6c979c9516f", - "sha256:6f61319e33222591f885c598e3e24f6a4be3533c1d70c19e0dc59e83a71ce27d", - "sha256:723d22d324e7997a651478e9c5a3120a0ecbc9a7e94071f7e1954562a8806cf3", - "sha256:76b2775dda7e78680d688daabcb485dc87cf5e3184a0b3e012e1d40e38527cc8", - "sha256:782a5c7df9f91979a7a21792e09b34a658058896628217ae6362088b123c8500", - "sha256:7e4d159021c2029b958b2363abec4a11db0ce8cd43abb0d9ce44284cb97217e7", - "sha256:8dacc4073c359f40fcf73aede8428c35f84639baad7e1b46fce5ab7a8a7be4bb", - "sha256:8f33d1156241c43755137288dea619105477961cfa7e47f48dbf96bc2c30720b", - "sha256:8ffd4b204d7de77b5dd558cdff986a8274796a1e57813ed005b33fd97e29f059", - "sha256:93a280c9eb736a0dcca19296f3c30c720cb41a71b1f9e617f341f0a8e791a69b", - "sha256:9a4f66259bdd6964d8cf26142733c81fb562252db74ea367d9beb4f815478e72", - "sha256:9a9d4ff06804920388aab69c5ea8a77525cf165356db70131616acd269e19b36", - "sha256:a2070c5affdb3a5e751f24208c5c4f3d5f008fa04d28731416e023c93b275277", - "sha256:a4857f7e2bc6921dbd487c5c88b84f5633de3e7d416c4dc0bb70256775551a6c", - "sha256:a607ae05b6c96057ba86c811d9c43423f35e03874ffb03fbdcd45e0637e8b631", - "sha256:a66ca3bdf21c653e47f726ca57f46ba7fc1f260ad99ba783acc3e58e3ebdb9ff", - "sha256:ab110c48bc3d97b4d19af41865e14531f300b482da21783fdaacd159251890e8", - "sha256:b239711e774c8eb910e9b1ac719f02f5ae4bf35fa0420f438cdc3a7e4e7dd6ec", - "sha256:be0416074d7f253865bb67630cf7210cbc14eb05f4099cc0f82430135aaa7a3b", - "sha256:c46643970dff9f5c976c6512fd35768c4a3819f01f61169d8cdac3f9290903b7", - "sha256:c5ec71fd4a43b6d84ddb88c1df94572479d9a26ef3f150cef3dacefecf888105", - "sha256:c6e5174f8ca585755988bc278c8bb5d02d9dc2e971591ef4a1baabdf2d99589b", - "sha256:c89b558f8a9a5a6f2cfc923c304d49f0ce629c3bd85cb442ca258ec20366394c", - "sha256:cc44e3545d908ecf3e5773266c487ad1877be718d9dc65fc7eb6e7d14960985b", - "sha256:cc6f8246e74dd210d7e2b56c76ceaba1cc52b025cd75dbe96eb48791e0250e98", - "sha256:cd556c79ad665faeae28020a0ab3bda6cd47d94bec48e36970719b0b86e4dcf4", - "sha256:ce6f3a147b4b1a8b09aae48517ae91139b1b010c5f36423fa2b866a8b23df879", - "sha256:ceb499d2b3d1d7b7ba23abe8bf26df5f06ba8c71127f188333dddcf356b4b63f", - "sha256:cef06fb382557f66d81d804230c11ab292d94b840b3cb7bf4450778377b592f4", - "sha256:e448f56cfeae7b1b3b5bcd99bb377cde7c4eb1970a525c770720a352bc4c8044", - "sha256:e52d3d95df81c8f6b2a1685aabffadf2d2d9ad97203a40f8d61e51b70f191e4e", - "sha256:eb33c4c858d06bd8d79713c7628d3f2b50fb1c62071e2e88cb44876be03eabe1", - "sha256:ee2f1d1c223c3d2c24e3afbb2dd38be3f03b1a8d6a83ee3d9eb8c36a52bee899", - "sha256:f2c6888eada180814b8583c3e793f3f343a692fc802546eed45f40a001b1169f", - "sha256:f51dbba78d68a44e99d484ca8c8f604f17e957c1ca09c3ebc2c7e3bbd9ba0448", - "sha256:f54de00baf200b4539a5a092a759f000b5f45fd226d6d25a76b0dff71177a714", - "sha256:fa10fee7e32213f5c7b0d6428ea92e3a3fdd6d725590238a3f92c0de1c78b9d2", - "sha256:fabeeb121735d47d8eab8671b6b031ce08514c86b7ad8f7d5490a7b6dcd6267d", - "sha256:fac3c432851038b3e6afe086f777732bcf7f6ebbfd90951fa04ee53db6d0bcdd", - "sha256:fda29412a66099af6d6de0baa6bd7c52674de177ec2ad2630ca264142d69c6c7", - "sha256:ff1330e8bc996570221b450e2d539134baa9465f5cb98aff0e0f73f34172e0ae" + "sha256:03ed2a641e412e42cc35c244508cf186015c217f0e4d496bf6d7078ebe837ae7", + "sha256:04b14e45d6a8e159c9767ae57ecb34563ad93440fc1b26516a89ceb5b33c1ad5", + "sha256:0cdde51bfcf6b6bd862ee9be324521ec619b20590787d1655d005c3fb175005f", + "sha256:0f48fc7dc82ee14aeaedb986e175a429d24129b7eada1b7e94a864e4f0644dde", + "sha256:107d327071061fd4f4a2587d14c389a27e4e5c93c7cba5f1f59987181903902f", + "sha256:1375bb8b88cb050a2d4e0da901001347a44302aeadb8ceb4b6e5aa373b8ea68f", + "sha256:14a9f1887591684fb59fdba8feef7123a0da2424b0652e1b58dd5b9a7bb1188c", + "sha256:16baa799ec09cc0dcb43a10680573269d407c159325972dd7114ee7649e56c66", + "sha256:1b811662ecf72eb2d08872731636aee6559cae21862c36f74703be727b45df90", + "sha256:1ccae21a076d3d5f471700f6d30eb486da1626c380b23c70ae32ab823e453337", + "sha256:2f2cf7a42d4b7654c9a67b9d091ec24374f7c58794858bff632a2039cb15984d", + "sha256:322549b880b2d746a7672bf6ff9ed3f895e9c9f108b714e7360292aa5c5d7cf4", + "sha256:32ab83016c24c5cf3db2943286b85b0a172dae08c58d0f53875235219b676409", + "sha256:3fe50f1cac369b02d34ad904dfe0771acc483f82a1b54c5e93632916ba847b37", + "sha256:4a780807e80479f281d47ee4af2eb2df3e4ccf4723484f77da0bb49d027e40a1", + "sha256:4a8eb7785bd23565b542b01fb39115a975fefb4a82f23d407503eee2c0106247", + "sha256:4b40b794775df10d7e3ea677108dd581bfec796235750c617d461874178a67f6", + "sha256:5bee3970617b3d74759b2d2df2f6a327d372f9732f9ccbf03fa591b5f7581e39", + "sha256:60a3307a84ec60578accd35d7f0c71a3a971430ed7eca6567399d2b50ef37b8c", + "sha256:6625e52b6f346a283c3d563d1fd8bae8956daafc64bb5bbd2b8f8a07608e3994", + "sha256:66a5aae8233d766a877c5ef293ec5ab9520929c2578fd2069308a98b7374ea8c", + "sha256:68fb816a5dd901c6aff352ce49e2a0ffadacdf9b6fae282a69e7a16a02dad5fb", + "sha256:6b588b5cf51dc0fd1c9e19f622457cc74b7d26fe295432e434525f1c0fae02bc", + "sha256:6c4d7165a4e8f41eca6b990c12ee7f44fef3932fac48ca32cecb3a1b2223c21f", + "sha256:6d2e262e5e8da6fa56e774fb8e2643417351427604c2b177f8e8c5f75fc928ca", + "sha256:6d9c88b787638a451f41f97446a1c9fd416e669b4d9717ae4615bd29de1ac135", + "sha256:755c56beeacac6a24c8e1074f89f34f4373abce8b662470d3aa719ae304931f3", + "sha256:7e40d3f8eb472c1509b12ac2a7e24158ec352fc8567b77ab02c0db053927e339", + "sha256:812eaf4939ef2284d29653bcfee9665f11f013724f07258928f849a2306ea9f9", + "sha256:84df004223fd0550d0ea7a37882e5c889f3c6d45535c639ce9802293b39cd5c9", + "sha256:859f0add98707b182b4867359e12bde806b82483fb12a9ae868a77880fc3b7af", + "sha256:87c4b38288f71acd2106f5d94f575bc2136ea2887fdb5dfe18003c881fa6b370", + "sha256:89fc12c6371bf963809abc46cced4a01ca4f99cba17be5e7d416ed7ef1245d19", + "sha256:9564ac7eb1652c3701ac691ca72934dd3009997c81266807aef924012df2f4b3", + "sha256:9754a5c265f991317de2bac0c70a746efc2b695cf4d49f5d2cddeac36544fb44", + "sha256:a565f48c4aae72d1d3d3f8e8fb7218f5609c964e9c6f68604608e5958b9c60c3", + "sha256:a636160680c6e526b84f85d304e2f0bb4e94f8284dd765a1911de9a40450b10a", + "sha256:a839e25f07e428a87d17d857d9935dd743130e77ff46524abb992b962eb2076c", + "sha256:ae9702c099546e72000d76758b5efec2dd937ba5d746ec8d0563d2fca0f9bc2e", + "sha256:b62046592b44263fa7570f1117d372ae3f310222af1fc1407416f037fb3af21b", + "sha256:b7f7421841f8db443855d2854e25914a79a1ff48ae92f70d0a5c2f8907ab98c9", + "sha256:ba7ca81b6d60a9f7a0b4b4e175dcc38e8fef4992673d9d6e6879fd6de00dd9b8", + "sha256:bb32ca14b4d04e172c541c69eec5f385f9a075b38fb22d765d8b0ce3af3a0c22", + "sha256:c0ff1c1b4d13e2240821ef23c1efb1f009207cb3f56e16986f713c2b0e7cd37f", + "sha256:c669b440ce46ae3abe9b2d44a913b5fd86bb19eb14a8701e88e3918902ecd345", + "sha256:c67734cff78383a1f23ceba3b3239c7deefc62ac2b05fa6a47bcd565771e5880", + "sha256:c6809ebcbf6c1049002b9ac09c127ae43929042ec1f1dbd8bb1615f7cd9f70a0", + "sha256:cd601187476c6bed26a0398353212684c427e10a903aeafa6da40c63309d438b", + "sha256:ebfa374067af240d079ef97b8064478f3bf71038b78b017eb6ec93ede1b6bcec", + "sha256:fbb17c0d0822684b7d6c09915677a32319f16ff1115df5ec05bdcaaee40b35f3", + "sha256:fff1f3a586246110f34dc762098b5afd2de88de507559e63553d7da643053786" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==5.3.1" + "version": "==5.4" }, "coveralls": { "hashes": [ @@ -1371,11 +1367,11 @@ }, "faker": { "hashes": [ - "sha256:1a40c9696830342e67d30057753323478b848e89334e97e0a64b442b18ae7ece", - "sha256:dd98418eceb374c475e85bd49ae826a9b304dabcd794640f35a1d185f4767dd9" + "sha256:0783729c61501d52efea2967aff6e6fcb8370f0f6b5a558f2a81233642ae529a", + "sha256:6b2995ffff6c2b02bc5daad96f8c24c021e5bd491d9d53d31bcbd66f348181d4" ], "markers": "python_version >= '3.6'", - "version": "==5.7.0" + "version": "==5.8.0" }, "filelock": { "hashes": [ From 964d1e1ab3846f1dffa5734b6add6a65a08f0bea Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 18:01:24 +0100 Subject: [PATCH 049/898] requirements --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c70d13ff4..a5a564a99 100644 --- a/requirements.txt +++ b/requirements.txt @@ -72,7 +72,7 @@ redis==3.5.3 regex==2020.11.13 reportlab==3.5.60 requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -scikit-learn==0.24.1 +scikit-learn==0.24.0 scipy==1.5.4; python_version >= '3.6' service-identity==18.1.0 six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' From b5591713b3bd2eda6b3e9457df331a62f85b943b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 09:50:48 -0800 Subject: [PATCH 050/898] Fix alert resizing --- .../upload-file-widget.component.html | 4 ++-- .../upload-file-widget.component.scss | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index d00114934..213f46fd6 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -19,10 +19,10 @@ <div *ngFor="let status of getStatus()"> <ngb-alert type="secondary" class="mt-2 mb-0" [dismissible]="isFinished(status)" (closed)="dismiss(status)"> <h6 class="alert-heading">{{status.filename}}</h6> - <p class="mb-0" *ngIf="!isFinished(status) || (isFinished(status) && !status.documentId)">{{status.message}}</p> + <p class="mb-0 pb-1" *ngIf="!isFinished(status) || (isFinished(status) && !status.documentId)">{{status.message}}</p> <ngb-progressbar [value]="status.getProgress()" [max]="1" [type]="getStatusColor(status)"></ngb-progressbar> <div *ngIf="isFinished(status)"> - <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary mr-2" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> + <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary btn-open" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> <small>Open document</small> <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-arrow-right-short" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index 10a83e308..2af4a4029 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -8,17 +8,17 @@ form { position: relative; } -.alert { - transition: all 0.2s ease; -} - .alert-heading { font-size: 80%; font-weight: bold; } -.btn-sm { +.btn-open { line-height: 1; + + svg { + margin-top: -1px; + } } .dismiss-all { From e031f7ed44184590e1afa46831bdf976b21a3b95 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 10:09:13 -0800 Subject: [PATCH 051/898] Dark mode support --- .../upload-file-widget.component.scss | 4 ---- src-ui/src/styles.scss | 4 ++++ src-ui/src/theme_dark.scss | 10 ++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index 2af4a4029..ed1bca319 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -1,9 +1,5 @@ @import "/src/theme"; -::ng-deep .ngx-file-drop__drop-zone--over { - background-color: $primaryFaded !important; -} - form { position: relative; } diff --git a/src-ui/src/styles.scss b/src-ui/src/styles.scss index 8cf4a93f6..34f575a05 100644 --- a/src-ui/src/styles.scss +++ b/src-ui/src/styles.scss @@ -111,3 +111,7 @@ body { font-size: 16px; } } + +.ngx-file-drop__drop-zone--over { + background-color: $primaryFaded !important; +} diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 9a698143d..bd4227fc6 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -352,6 +352,16 @@ $border-color-dark-mode: #47494f; .bg-dark { background-color: $bg-light-dark-mode !important; } + + .ngx-file-drop__drop-zone--over { + background-color: darken($primary-dark-mode, 35%) !important; + } + + .alert-secondary { + background-color: $bg-light-dark-mode; + border-color: darken($bg-light-dark-mode, 10%); + color: $text-color-dark-mode-accent; + } } body.color-scheme-dark { From 56728b7575ca3944a4fe20f3273372211d893f79 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 10:17:45 -0800 Subject: [PATCH 052/898] Fix initial upload progress > 100% --- src-ui/src/app/services/consumer-status.service.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index b2804103d..181e45e15 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -33,7 +33,6 @@ export class FileStatus { case FileStatusPhase.UPLOADING: return this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.2 case FileStatusPhase.PROCESSING: - if (this.currentPhaseProgress > 100) this.currentPhaseProgress = 0 return (this.currentPhaseProgress / this.currentPhaseMaxProgress * 0.8) + 0.2 case FileStatusPhase.SUCCESS: case FileStatusPhase.FAILED: @@ -44,7 +43,7 @@ export class FileStatus { updateProgress(status: FileStatusPhase, currentProgress?: number, maxProgress?: number) { if (status >= this.phase) { this.phase = status - if (currentProgress) { + if (currentProgress != undefined) { this.currentPhaseProgress = currentProgress } if (maxProgress) { From 96abfd020bc391062adec3a917604368bee19962 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 10:17:58 -0800 Subject: [PATCH 053/898] Fix dark mode primary progress color --- src-ui/src/theme_dark.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index bd4227fc6..4e850f017 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -362,6 +362,10 @@ $border-color-dark-mode: #47494f; border-color: darken($bg-light-dark-mode, 10%); color: $text-color-dark-mode-accent; } + + .progress-bar.bg-primary { + background-color: darken($primary-dark-mode, 5%) !important; + } } body.color-scheme-dark { From b0e74bb7c08472fb644c0b2bf7e5bc47c9c0865b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 19:32:09 +0100 Subject: [PATCH 054/898] documentation #444 --- docs/setup.rst | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index 73af557e7..574631a58 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -98,10 +98,11 @@ The ansible route combines benefits of both options: the setup process is fully automated, reproducible and `idempotent <https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency>`_, it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation. -.. _setup-docker_hub: .. _CLI Basics: https://sehn.tech/post/devops-with-docker/ .. _idempotent: https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency +.. _setup-docker_hub: + Install Paperless from Docker Hub ================================= @@ -131,7 +132,7 @@ Install Paperless from Docker Hub See the `Docker installation guide`_ on how to install the current version of Docker for your operating system or Linux distribution of choice. To get the latest version of docker-compose, follow the - `docker-compose installation guide`_if your package repository doesn't + `docker-compose installation guide`_ if your package repository doesn't include it. .. _Docker installation guide: https://docs.docker.com/engine/installation/ @@ -348,7 +349,8 @@ writing. Windows is not and will never be supported. .. warning:: This is a development server which should not be used in - production. + production. It is not audited for security and performance + is inferior to production ready web servers. .. hint:: @@ -363,6 +365,11 @@ writing. Windows is not and will never be supported. ``consumer`` script to watch the input folder, and the ``scheduler`` script to run tasks such as email checking and document consumption. + You may need to adjust the path to the ``gunicorn`` executable. This + will be installed as part of the python dependencies, and is either located + in the ``bin`` folder of your virtual environment, or in ``~/.local/bin/`` if + no virtual environment is used. + These services rely on redis and optionally the database server, but don't need to be started in any particular order. The example files depend on redis being started. If you use a database server, you should From 04b75c3ca52272596dd5f2a1477723a14a198c6c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 19:42:06 +0100 Subject: [PATCH 055/898] troubleshooting for #346 --- docs/troubleshooting.rst | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index b8343710f..85a9e336a 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -30,9 +30,9 @@ Consumer fails to pickup any new files ###################################### If you notice that the consumer will only pickup files in the consumption -directory at startup, but won't find any other files added later, check out -the configuration file and enable filesystem polling with the setting -``PAPERLESS_CONSUMER_POLLING``. +directory at startup, but won't find any other files added later, you will need to +enable filesystem polling with the configuration option +``PAPERLESS_CONSUMER_POLLING``, see :ref:`here <configuration-polling>`. This will disable listening to filesystem changes with inotify and paperless will manually check the consumption directory for changes instead. @@ -64,6 +64,22 @@ This may have two reasons: with Inbox tags. Verify that there are documents in your archive without inbox tags. The algorithm will only learn from documents not in your inbox. +UserWarning in sklearn on every single document +############################################### + +You may encounter warnings like this: + +.. code:: + + /usr/local/lib/python3.7/site-packages/sklearn/base.py:315: + UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0. + This might lead to breaking code or invalid results. Use at your own risk. + +This happens when certain dependencies of paperless that are responsible for the auto matching algorithm are +updated. After updating these, your current training data *might* not be compatible anymore. This can be ignored +in most cases. If you want to get rid of the warning or actually experience issues with automatic matching, delete +the file ``classification_model.pickle`` in the data directory and let paperless recreate it. + Permission denied errors in the consumption directory ##################################################### From 6d229bfeff0549fa376744084961e756f78d90f3 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 19:53:56 +0100 Subject: [PATCH 056/898] documentation for #441 --- docs/troubleshooting.rst | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 85a9e336a..a5d020d21 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -94,3 +94,47 @@ Ensure that ``USERMAP_UID`` and ``USERMAP_GID`` are set to the user id and group different from ``1000``. See :ref:`setup-docker_hub`. Also ensure that you are able to read and write to the consumption directory on the host. + +Web-UI stuck at "Loading..." +############################ + +This might have multiple reasons. + + +1. If you built the docker image yourself or deployed using the bare metal route, + make sure that there are files in ``<paperless-root>/static/frontend/<lang-code>/``. + If there are no files, make sure that you executed ``collectstatic`` successfully, either + manually or as part of the docker image build. + + If the front end is still missing, make sure that the front end is compiled (files present in + ``src/documents/static/frontend``). If it is not, you need to compile the front end yourself + or download the release archive instead of cloning the repository. + +2. Check the output of the web server. You might see errors like this: + + + .. code:: + + [2021-01-25 10:08:04 +0000] [40] [ERROR] Socket error processing request. + Traceback (most recent call last): + File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle + self.handle_request(listener, req, client, addr) + File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 190, in handle_request + util.reraise(*sys.exc_info()) + File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise + raise value + File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 178, in handle_request + resp.write_file(respiter) + File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 396, in write_file + if not self.sendfile(respiter): + File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile + sent += os.sendfile(sockno, fileno, offset + sent, count) + OSError: [Errno 22] Invalid argument + + To fix this issue, add + + .. code:: + + SENDFILE=0 + + to your `docker-compose.env` file. \ No newline at end of file From d11d2c2b5367f35bdf7b583834d600ee7193ed1c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 20:13:29 +0100 Subject: [PATCH 057/898] added FAQ for #449 --- docs/troubleshooting.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index a5d020d21..7f819a772 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -37,6 +37,15 @@ enable filesystem polling with the configuration option This will disable listening to filesystem changes with inotify and paperless will manually check the consumption directory for changes instead. + +Paperless always redirects to /admin +#################################### + +You probably had the old paperless installed at some point. Paperless installed +a permanent redirect to /admin in your browser, and you need to clear your +browsing data / cache to fix that. + + Operation not permitted ####################### From e844e95e4e6d0f54e6b588c8e9300384a50a9bb9 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 26 Jan 2021 20:32:35 +0100 Subject: [PATCH 058/898] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 42 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 18 ++++++++++ .github/ISSUE_TEMPLATE/other.md | 14 ++++++++ 3 files changed, 74 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/other.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..b72d397c4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,42 @@ +--- +name: Bug report +about: Something is not working +title: "[BUG] Concise description of the issue" +labels: '' +assignees: '' + +--- + +<!--- +=> Before opening an issue, please check the documentation and see if it helps you resolve your issue: https://paperless-ng.readthedocs.io/en/latest/troubleshooting.html +=> Please also make sure that you followed the installation instructions. +=> Please search the issues and look for similar issues before opening a bug report. +--> + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Webserver logs** +``` +If available, post any logs from the web server related to your issue. +``` + +**Relevant information** + - Host OS of the machine running paperless: [e.g. Archlinux / Ubuntu 20.04] + - Browser [e.g. chrome, safari] + - Version [e.g. 1.0.0] + - Installation method: [docker / bare metal] + - Any configuration changes you made in `docker-compose.yml`, `docker-compose.env` or `paperless.conf`. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..21d474b36 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,18 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[Feature Request] Consice and clear description of your feature request" +labels: '' +assignees: '' + +--- + +<!-- +=> We already have lots of feature requests open. Please search the existing requests first and look for feature requests similar to yours. +--> + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md new file mode 100644 index 000000000..aae462edf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/other.md @@ -0,0 +1,14 @@ +--- +name: Other +about: Anything that is not a feature request or bug. +title: '' +labels: '' +assignees: '' + +--- + +<!-- + +=> Discussions, Feedback and other suggestions belong in the "Disussion" section and not on the issue tracker. + +--> From 167077000a3cdbbe2cc55ce6c815f1eef348a914 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 20:37:36 +0100 Subject: [PATCH 059/898] more documentation --- docs/troubleshooting.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 7f819a772..ec430b477 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -86,7 +86,9 @@ You may encounter warnings like this: This happens when certain dependencies of paperless that are responsible for the auto matching algorithm are updated. After updating these, your current training data *might* not be compatible anymore. This can be ignored -in most cases. If you want to get rid of the warning or actually experience issues with automatic matching, delete +in most cases. This warning will disappear automatically when paperless updates the training data. + + f you want to get rid of the warning or actually experience issues with automatic matching, delete the file ``classification_model.pickle`` in the data directory and let paperless recreate it. Permission denied errors in the consumption directory From 88a7d87b9fa068cf18577d5aec539a58f8c7cf79 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 20:48:32 +0100 Subject: [PATCH 060/898] removed all occurences of pipenv from the documentation --- docs/administration.rst | 21 +++++---------------- docs/setup.rst | 25 ++++++++++++++----------- docs/troubleshooting.rst | 2 +- 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index 14b986e82..c54323e6e 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -121,27 +121,19 @@ After grabbing the new release and unpacking the contents, do the following: dependencies. The dependencies required are listed in the section about :ref:`bare metal installations <setup-bare_metal>`. -2. Update python requirements. If you use Pipenv, this is done with the following steps. +2. Update python requirements. Keep in mind to activate your virtual environment + before that, if you use one. .. code:: shell-session - $ pip install --upgrade pipenv - $ cd /path/to/paperless - $ pipenv clean - $ pipenv install - - This creates a new virtual environment (or uses your existing environment) - and installs all dependencies into it. - - You can also use the included ``requirements.txt`` file instead and create the virtual - environment yourself. This file includes exactly the same dependencies. + $ pip install -r requirements.txt 3. Migrate the database. .. code:: shell-session $ cd src - $ pipenv run python3 manage.py migrate + $ python3 manage.py migrate This might not actually do anything. Not every new paperless version comes with new database migrations. @@ -195,7 +187,7 @@ or .. code:: shell-session $ cd /path/to/paperless/src - $ pipenv run python manage.py <command> <arguments> + $ python3 manage.py <command> <arguments> depending on whether you use docker or not. @@ -462,6 +454,3 @@ Basic usage to disable encryption of your document store: .. code:: decrypt_documents [--passphrase SECR3TP4SSPHRA$E] - - -.. _Pipenv: https://pipenv.pypa.io/en/latest/ diff --git a/docs/setup.rst b/docs/setup.rst index 574631a58..40f6bb1b6 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -20,7 +20,7 @@ Paperless consists of the following components: .. code:: shell-session $ cd /path/to/paperless/src/ - $ pipenv run gunicorn -c /usr/src/paperless/gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi + $ gunicorn -c ../gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi or by any other means such as Apache ``mod_wsgi``. @@ -35,7 +35,7 @@ Paperless consists of the following components: .. code:: shell-session $ cd /path/to/paperless/src/ - $ pipenv run python3 manage.py document_consumer + $ python3 manage.py document_consumer .. _setup-task_processor: @@ -67,7 +67,7 @@ Paperless consists of the following components: .. code:: shell-session $ cd /path/to/paperless/src/ - $ pipenv run python3 manage.py qcluster + $ python3 manage.py qcluster * A `redis <https://redis.io/>`_ message broker: This is a really lightweight service that is responsible for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different @@ -255,7 +255,7 @@ writing. Windows is not and will never be supported. 1. Install dependencies. Paperless requires the following packages. * ``python3`` 3.6, 3.7, 3.8 (3.9 is untested). - * ``python3-pip``, optionally ``pipenv`` for package installation + * ``python3-pip`` * ``python3-dev`` * ``fonts-liberation`` for generating thumbnails for plain text files @@ -324,8 +324,13 @@ writing. Windows is not and will never be supported. Adjust as necessary if you configured different folders. -7. Install python requirements. Paperless comes with both Pipfiles for ``pipenv`` as well as with a ``requirements.txt``. - Both will install exactly the same requirements. It is up to you if you wish to use a virtual environment or not. +7. Install python requirements from the ``requirements.txt`` file. + It is up to you if you wish to use a virtual environment or not. + + .. code:: shell-session + + pip3 install -r requirements.txt + 8. Go to ``/opt/paperless/src``, and execute the following commands: @@ -654,14 +659,12 @@ management commands as below. This will launch the container and initialize the PostgreSQL database. - b) Without docker, open a shell in your virtual environment, switch to + b) Without docker, remember to activate any virtual environment, switch to the ``src`` directory and create the database schema: .. code:: shell-session - $ cd /path/to/paperless - $ pipenv shell - $ cd src + $ cd /path/to/paperless/src $ python3 manage.py migrate This will not copy any data yet. @@ -678,7 +681,7 @@ management commands as below. $ python3 manage.py loaddata data.json -6. Exit the shell. +6. If operating inside Docker, you may exit the shell now. .. code:: shell-session diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index ec430b477..f55d57af5 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -88,7 +88,7 @@ This happens when certain dependencies of paperless that are responsible for the updated. After updating these, your current training data *might* not be compatible anymore. This can be ignored in most cases. This warning will disappear automatically when paperless updates the training data. - f you want to get rid of the warning or actually experience issues with automatic matching, delete +If you want to get rid of the warning or actually experience issues with automatic matching, delete the file ``classification_model.pickle`` in the data directory and let paperless recreate it. Permission denied errors in the consumption directory From f36115ee376749fa218f352b76167ebae94c9f4f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 26 Jan 2021 22:10:43 +0100 Subject: [PATCH 061/898] alter defaults for workers and threads to allow more parallel tasks #446 --- docs/configuration.rst | 15 +++++++-------- src/documents/tests/test_settings.py | 4 ++-- src/paperless/settings.py | 6 ++++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 5edc003f6..36b124350 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -376,25 +376,24 @@ PAPERLESS_THREADS_PER_WORKER=<num> use a higher thread per worker count. The default is a balance between the two, according to your CPU core count, - with a slight favor towards threads per worker, and leaving at least one core - free for other tasks: + with a slight favor towards threads per worker: +----------------+---------+---------+ | CPU core count | Workers | Threads | +----------------+---------+---------+ | 1 | 1 | 1 | +----------------+---------+---------+ - | 2 | 1 | 1 | + | 2 | 2 | 1 | +----------------+---------+---------+ - | 4 | 1 | 3 | + | 4 | 2 | 2 | +----------------+---------+---------+ - | 6 | 2 | 2 | + | 6 | 2 | 3 | +----------------+---------+---------+ - | 8 | 2 | 3 | + | 8 | 2 | 4 | +----------------+---------+---------+ - | 12 | 3 | 3 | + | 12 | 3 | 4 | +----------------+---------+---------+ - | 16 | 3 | 5 | + | 16 | 4 | 4 | +----------------+---------+---------+ If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust diff --git a/src/documents/tests/test_settings.py b/src/documents/tests/test_settings.py index 21f29b4d9..0036daee7 100644 --- a/src/documents/tests/test_settings.py +++ b/src/documents/tests/test_settings.py @@ -20,7 +20,7 @@ class TestSettings(TestCase): self.assertEqual(default_threads, 1) def test_workers_threads(self): - for i in range(2, 64): + for i in range(1, 64): with mock.patch("paperless.settings.multiprocessing.cpu_count") as cpu_count: cpu_count.return_value = i @@ -31,4 +31,4 @@ class TestSettings(TestCase): self.assertTrue(default_workers >= 1) self.assertTrue(default_threads >= 1) - self.assertTrue(default_workers * default_threads < i, f"{i}") + self.assertTrue(default_workers * default_threads <= i, f"{i}") diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 894ecb60b..bc70cb331 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -354,8 +354,10 @@ LOGGING = { def default_task_workers(): # always leave one core open - available_cores = max(multiprocessing.cpu_count() - 1, 1) + available_cores = max(multiprocessing.cpu_count(), 1) try: + if available_cores < 4: + return available_cores return max( math.floor(math.sqrt(available_cores)), 1 @@ -376,7 +378,7 @@ Q_CLUSTER = { def default_threads_per_worker(task_workers): # always leave one core open - available_cores = max(multiprocessing.cpu_count() - 1, 1) + available_cores = max(multiprocessing.cpu_count(), 1) try: return max( math.floor(available_cores / task_workers), From cc0a1859f7742dcadc9048488f5ab03e6e31ff68 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Tue, 26 Jan 2021 14:48:39 -0800 Subject: [PATCH 062/898] Maximum limit of alerts --- .../upload-file-widget.component.html | 38 ++++++++++++------- .../upload-file-widget.component.scss | 6 +++ .../upload-file-widget.component.ts | 9 ++++- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 213f46fd6..c8104dae1 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -1,4 +1,4 @@ -<app-widget-frame title="Upload new documents" i18n-title [class.has-multiple-status]="getStatus().length > 1"> +<app-widget-frame title="Upload new documents" i18n-title [class.has-multiple-status]="(getStatus().length + getStatusesHidden().length)> 1"> <div header-buttons> <button type="button" class="btn btn-link dismiss-all" [disabled]="!getStatus().length" (click)="dismissAll()"> <small class="mr-1">Hide all</small> @@ -17,19 +17,31 @@ </ngx-file-drop> </form> <div *ngFor="let status of getStatus()"> - <ngb-alert type="secondary" class="mt-2 mb-0" [dismissible]="isFinished(status)" (closed)="dismiss(status)"> - <h6 class="alert-heading">{{status.filename}}</h6> - <p class="mb-0 pb-1" *ngIf="!isFinished(status) || (isFinished(status) && !status.documentId)">{{status.message}}</p> - <ngb-progressbar [value]="status.getProgress()" [max]="1" [type]="getStatusColor(status)"></ngb-progressbar> - <div *ngIf="isFinished(status)"> - <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary btn-open" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> - <small>Open document</small> - <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-arrow-right-short" viewBox="0 0 16 16"> - <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/> - </svg> - </button> + <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> + </div> + <div *ngIf="getStatusesHidden().length" class="alerts-hidden"> + <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center">{{getStatusesHidden().length}} more hidden <button class="btn btn-sm btn-link py-0" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded">Show all</button></p> + <div #hiddenAlerts="ngbCollapse" [(ngbCollapse)]="!alertsExpanded"> + <div *ngFor="let status of getStatusesHidden()"> + <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> </div> - </ngb-alert> + </div> </div> </div> </app-widget-frame> + +<ng-template #consumerAlert let-status> + <ngb-alert type="secondary" class="mt-2 mb-0" [dismissible]="isFinished(status)" (closed)="dismiss(status)"> + <h6 class="alert-heading">{{status.filename}}</h6> + <p class="mb-0 pb-1" *ngIf="!isFinished(status) || (isFinished(status) && !status.documentId)">{{status.message}}</p> + <ngb-progressbar [value]="status.getProgress()" [max]="1" [type]="getStatusColor(status)"></ngb-progressbar> + <div *ngIf="isFinished(status)"> + <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary btn-open" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> + <small>Open document</small> + <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-arrow-right-short" viewBox="0 0 16 16"> + <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/> + </svg> + </button> + </div> + </ngb-alert> +</ng-template> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index ed1bca319..5e404bb8e 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -9,6 +9,12 @@ form { font-weight: bold; } +.alerts-hidden { + .btn { + line-height: 1; + } +} + .btn-open { line-height: 1; diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 19ab8d04b..27f67f976 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -4,6 +4,7 @@ import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'; import { ConsumerStatusService, FileStatus, FileStatusPhase } from 'src/app/services/consumer-status.service'; import { DocumentService } from 'src/app/services/rest/document.service'; +const MAX_ALERTS = 5 @Component({ selector: 'app-upload-file-widget', @@ -11,6 +12,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; styleUrls: ['./upload-file-widget.component.scss'] }) export class UploadFileWidgetComponent implements OnInit { + alertsExpanded = false constructor( private documentService: DocumentService, @@ -18,7 +20,12 @@ export class UploadFileWidgetComponent implements OnInit { ) { } getStatus() { - return this.consumerStatusService.getConsumerStatus() + return this.consumerStatusService.getConsumerStatus().slice(0, MAX_ALERTS) + } + + getStatusesHidden() { + if (this.consumerStatusService.getConsumerStatus().length < MAX_ALERTS) return [] + else return this.consumerStatusService.getConsumerStatus().slice(MAX_ALERTS) } getStatusUploading() { From 8cf3ac409f488c669f57533c3d078dbac4b43e1e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 27 Jan 2021 11:32:30 +0100 Subject: [PATCH 063/898] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++++ .github/ISSUE_TEMPLATE/feature_request.md | 3 +++ .github/ISSUE_TEMPLATE/other.md | 6 +++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b72d397c4..0f0ac44e2 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,6 +11,10 @@ assignees: '' => Before opening an issue, please check the documentation and see if it helps you resolve your issue: https://paperless-ng.readthedocs.io/en/latest/troubleshooting.html => Please also make sure that you followed the installation instructions. => Please search the issues and look for similar issues before opening a bug report. + +=> If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably an issue with your system, and not an issue of paperless. + +=> Don't remove the [BUG] prefix from the title. --> **Describe the bug** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 21d474b36..47c36c23d 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -9,6 +9,9 @@ assignees: '' <!-- => We already have lots of feature requests open. Please search the existing requests first and look for feature requests similar to yours. + +=> Don't remove the [Feature Request] prefix from the title. + --> **Is your feature request related to a problem? Please describe.** diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md index aae462edf..ef394f7f9 100644 --- a/.github/ISSUE_TEMPLATE/other.md +++ b/.github/ISSUE_TEMPLATE/other.md @@ -1,7 +1,7 @@ --- name: Other about: Anything that is not a feature request or bug. -title: '' +title: "[Other] Title of your issue" labels: '' assignees: '' @@ -11,4 +11,8 @@ assignees: '' => Discussions, Feedback and other suggestions belong in the "Disussion" section and not on the issue tracker. +=> If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably is an issue with your system, and not an issue of paperless. + +=> Don't remove the [Other] prefix from the title. + --> From cbd2992b1b150f30faea755545da0727dc5e9d63 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 12:05:30 +0100 Subject: [PATCH 064/898] clarification for some steps in the migration guide --- docs/setup.rst | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index 40f6bb1b6..afb3784d6 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -539,7 +539,10 @@ Migration to paperless-ng At its core, paperless-ng is still paperless and fully compatible. However, some things have changed under the hood, so you need to adapt your setup depending on -how you installed paperless. The important things to keep in mind are as follows. +how you installed paperless. + +This setup describes how to update an existing paperless Docker installation. +The important things to keep in mind are as follows: * Read the :ref:`changelog <paperless_changelog>` and take note of breaking changes. * You should decide if you want to stick with SQLite or want to migrate your database @@ -574,11 +577,18 @@ Migration to paperless-ng is then performed in a few simple steps: .. caution:: - Paperless includes a ``.env`` file. This will set the - project name for docker compose to ``paperless`` so that paperless-ng will - automatically reuse your existing paperless volumes. When you start it, it - will migrate your existing data. After that, your old paperless installation - will be incompatible with the migrated volumes. + Paperless-ng includes a ``.env`` file. This will set the + project name for docker compose to ``paperless``, which will also define the name + of the volumes by paperless-ng. However, if you experience that paperless-ng + is not using your old paperless volumes, verify the names of your volumes with + + .. code:: shell-session + + $ docker volume ls | grep _data + + and adjust the project name in the ``.env`` file so that it matches the name + of the volumes before the ``_data`` part. + 4. Download the ``docker-compose.sqlite.yml`` file to ``docker-compose.yml``. If you want to switch to PostgreSQL, do that after you migrated your existing From 52de60fa69af2ef315d60805b4d3539a142ef8d0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 15:23:29 +0100 Subject: [PATCH 065/898] fix an issue with upload status identification --- src-ui/src/app/services/consumer-status.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 181e45e15..90ba4f0ef 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -43,10 +43,10 @@ export class FileStatus { updateProgress(status: FileStatusPhase, currentProgress?: number, maxProgress?: number) { if (status >= this.phase) { this.phase = status - if (currentProgress != undefined) { + if (currentProgress != null) { this.currentPhaseProgress = currentProgress } - if (maxProgress) { + if (maxProgress != null) { this.currentPhaseMaxProgress = maxProgress } } @@ -70,7 +70,7 @@ export class ConsumerStatusService { private documentConsumptionFailedSubject = new Subject<FileStatus>() private get(taskId: string, filename?: string) { - let status = this.consumerStatus.find(e => e.taskId == taskId) || this.consumerStatus.find(e => e.filename == filename) + let status = this.consumerStatus.find(e => e.taskId == taskId) || this.consumerStatus.find(e => e.filename == filename && e.taskId == null) if (!status) { status = new FileStatus() this.consumerStatus.push(status) From 846f09495e56b08571b28a19a69cb5762b58a52f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 15:50:37 +0100 Subject: [PATCH 066/898] better error messages --- .../upload-file-widget/upload-file-widget.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 27f67f976..8c2dfec07 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -87,15 +87,15 @@ export class UploadFileWidgetComponent implements OnInit { formData.append('document', file, file.name) let status = this.consumerStatusService.newFileUpload(file.name) - status.message = "Connecting..." + status.message = $localize`Connecting...` this.documentService.uploadDocument(formData).subscribe(event => { if (event.type == HttpEventType.UploadProgress) { status.updateProgress(FileStatusPhase.UPLOADING, event.loaded, event.total) - status.message = "Uploading..." + status.message = $localize`Uploading...` } else if (event.type == HttpEventType.Response) { status.taskId = event.body["task_id"] - status.message = "Upload complete." + status.message = $localize`Waiting for consumer...` } }, error => { @@ -106,7 +106,7 @@ export class UploadFileWidgetComponent implements OnInit { break; } default: { - status.message = $localize`An error has occurred while uploading the document. Sorry!` + status.message = `${error.status} ${error.statusText}` break; } } From 5f7436ff9fc5942ff434a7c0595d83e549d5169d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 16:04:06 +0100 Subject: [PATCH 067/898] proper messages when uploading fails --- .../upload-file-widget/upload-file-widget.component.ts | 5 ++--- src-ui/src/app/services/consumer-status.service.ts | 8 +++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 8c2dfec07..1c5ed5438 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -99,14 +99,13 @@ export class UploadFileWidgetComponent implements OnInit { } }, error => { - status.updateProgress(FileStatusPhase.FAILED) switch (error.status) { case 400: { - status.message = error.error.document + this.consumerStatusService.fail(status, error.error.document) break; } default: { - status.message = `${error.status} ${error.statusText}` + this.consumerStatusService.fail(status, `${error.status} ${error.statusText}`) break; } } diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 90ba4f0ef..a3c942499 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -117,6 +117,12 @@ export class ConsumerStatusService { } } + fail(status: FileStatus, message: string) { + status.message = message + status.phase = FileStatusPhase.FAILED + this.documentConsumptionFailedSubject.next(status) + } + disconnect() { if (this.statusWebSocked) { this.statusWebSocked.close() @@ -133,7 +139,7 @@ export class ConsumerStatusService { } dismissAll() { - this.consumerStatus = [] + this.consumerStatus = this.consumerStatus.filter(status => status.phase < FileStatusPhase.SUCCESS) } onDocumentConsumptionFinished() { From dfcfeab1b1c483de58fd1782893c5703d63acdb5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 17:28:11 +0100 Subject: [PATCH 068/898] settings and localization --- src-ui/messages.xlf | 166 ++++++++++++++---- src-ui/src/app/app.component.ts | 41 ++++- .../upload-file-widget.component.html | 4 +- .../manage/settings/settings.component.html | 14 ++ .../manage/settings/settings.component.ts | 8 + .../app/services/consumer-status.service.ts | 18 +- src-ui/src/app/services/settings.service.ts | 12 +- 7 files changed, 214 insertions(+), 49 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 6175cf700..ec718acc6 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -2,6 +2,48 @@ <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en-US" datatype="plaintext" original="ng2.template"> <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> <context-group purpose="location"> @@ -482,35 +524,35 @@ <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">67</context> </context-group> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">79</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">111</context> </context-group> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> @@ -531,7 +573,7 @@ <source>Saved views</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">128</context> </context-group> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> @@ -639,60 +681,109 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f" datatype="html"> + <source>Consumer status</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">109</context> + </context-group> + </trans-unit> + <trans-unit id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3" datatype="html"> + <source>Show notifications when document consumption completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">110</context> + </context-group> + </trans-unit> + <trans-unit id="2bcbcbe99e207803e21183580b98d90410dd8718" datatype="html"> + <source>Show notifications when document consumption fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> + <trans-unit id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890" datatype="html"> + <source>This will suppress all consumer related status messages on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">121</context> </context-group> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">140</context> </context-group> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">143</context> </context-group> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">147</context> </context-group> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">157</context> </context-group> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> @@ -1323,25 +1414,25 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> - <trans-unit id="8705589528094706681" datatype="html"> - <source>The document has been uploaded and will be processed by the consumer shortly.</source> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> - <trans-unit id="4956689020592747108" datatype="html"> - <source>There was an error while uploading the document: <x id="PH" equiv-text="error.error.document"/></source> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">71</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> - <trans-unit id="7554858521017940575" datatype="html"> - <source>An error has occurred while uploading the document. Sorry!</source> + <trans-unit id="3994065460580948013" datatype="html"> + <source>Waiting for consumer...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> @@ -1351,25 +1442,32 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> - <trans-unit id="33c76d75ce25ce3b05ab22877f1b6b09dcf603ae" datatype="html"> - <source>{VAR_PLURAL, plural, =1 {Uploading file...} =other {Uploading <x id="INTERPOLATION"/> files...}}</source> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">40</context> </context-group> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> @@ -1467,42 +1565,42 @@ <source>English (US)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">82</context> </context-group> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">83</context> </context-group> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">76</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">77</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index 43c23f2af..836a6f66a 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -1,9 +1,9 @@ -import { SettingsService } from './services/settings.service'; +import { SettingsService, SETTINGS_KEYS } from './services/settings.service'; import { Component, OnDestroy, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { Subscription } from 'rxjs'; import { ConsumerStatusService } from './services/consumer-status.service'; -import { Toast, ToastService } from './services/toast.service'; +import { ToastService } from './services/toast.service'; @Component({ selector: 'app-root', @@ -12,6 +12,7 @@ import { Toast, ToastService } from './services/toast.service'; }) export class AppComponent implements OnInit, OnDestroy { + newDocumentSubscription: Subscription; successSubscription: Subscription; failedSubscription: Subscription; @@ -23,23 +24,47 @@ export class AppComponent implements OnInit, OnDestroy { ngOnDestroy(): void { this.consumerStatusService.disconnect() - this.successSubscription.unsubscribe() - this.failedSubscription.unsubscribe() + if (this.successSubscription) { + this.successSubscription.unsubscribe() + } + if (this.failedSubscription) { + this.failedSubscription.unsubscribe() + } + if (this.newDocumentSubscription) { + this.newDocumentSubscription.unsubscribe() + } + } + + private showNotification(key) { + if (this.router.url == '/dashboard' && this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD)) { + return false + } + return this.settings.get(key) } ngOnInit(): void { this.consumerStatusService.connect() + this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { - this.toastService.show({title: "Document added", delay: 10000, content: `Document ${status.filename} was added to paperless.`, actionName: "Open document", action: () => { - this.router.navigate(['documents', status.documentId]) - }}) + if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)) { + this.toastService.show({title: $localize`Document added`, delay: 10000, content: $localize`Document ${status.filename} was added to paperless.`, actionName: $localize`Open document`, action: () => { + this.router.navigate(['documents', status.documentId]) + }}) + } }) this.failedSubscription = this.consumerStatusService.onDocumentConsumptionFailed().subscribe(status => { - this.toastService.showError(`Could not consume ${status.filename}: ${status.message}`) + if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED)) { + this.toastService.showError($localize`Could not add ${status.filename}\: ${status.message}`) + } }) + this.newDocumentSubscription = this.consumerStatusService.onDocumentDetected().subscribe(status => { + if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT)) { + this.toastService.show({title: $localize`New document detected`, delay: 5000, content: $localize`Document ${status.filename} is being processed by paperless.`}) + } + }) } } diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index c8104dae1..a9658bcf7 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -1,7 +1,7 @@ <app-widget-frame title="Upload new documents" i18n-title [class.has-multiple-status]="(getStatus().length + getStatusesHidden().length)> 1"> <div header-buttons> <button type="button" class="btn btn-link dismiss-all" [disabled]="!getStatus().length" (click)="dismissAll()"> - <small class="mr-1">Hide all</small> + <small class="mr-1" i18n>Dismiss completed</small> <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-check2-all" viewBox="0 0 16 16"> <path d="M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7l-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z"/> <path d="M5.354 7.146l.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z"/> @@ -37,7 +37,7 @@ <ngb-progressbar [value]="status.getProgress()" [max]="1" [type]="getStatusColor(status)"></ngb-progressbar> <div *ngIf="isFinished(status)"> <button *ngIf="status.documentId" class="btn btn-sm btn-outline-primary btn-open" routerLink="/documents/{{status.documentId}}" (click)="dismiss(status)"> - <small>Open document</small> + <small i18n>Open document</small> <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-arrow-right-short" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/> </svg> diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 4ed5ad1ae..910867ace 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -99,6 +99,20 @@ </div> </div> + <h4 class="mt-4" i18n>Notifications</h4> + + <div class="form-row form-group"> + <div class="col-md-3 col-form-label"> + <span i18n>Consumer status</span> + </div> + <div class="col"> + <app-input-check i18n-title title="Show notifications when new documents are detected" formControlName="notificationsConsumerNewDocument"></app-input-check> + <app-input-check i18n-title title="Show notifications when document consumption completes successfully" formControlName="notificationsConsumerSuccess"></app-input-check> + <app-input-check i18n-title title="Show notifications when document consumption fails" formControlName="notificationsConsumerFailed"></app-input-check> + <app-input-check i18n-title title="Suppress notifications on dashboard" formControlName="notificationsConsumerSuppressOnDashboard" i18n-hint hint="This will suppress all consumer related status messages on the dashboard."></app-input-check> + </div> + </div> + <h4 class="mt-4" i18n>Bulk editing</h4> <div class="form-row form-group"> diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 47f714c21..47c7b8d7b 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -26,6 +26,10 @@ export class SettingsComponent implements OnInit { 'displayLanguage': new FormControl(this.settings.getLanguage()), 'dateLocale': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_LOCALE)), 'dateFormat': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_FORMAT)), + 'notificationsConsumerNewDocument': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT)), + 'notificationsConsumerSuccess': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)), + 'notificationsConsumerFailed': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED)), + 'notificationsConsumerSuppressOnDashboard': new FormControl(this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD)), }) savedViews: PaperlessSavedView[] @@ -73,6 +77,10 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) + this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, this.settingsForm.value.notificationsConsumerNewDocument) + this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS, this.settingsForm.value.notificationsConsumerSuccess) + this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED, this.settingsForm.value.notificationsConsumerFailed) + this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD, this.settingsForm.value.notificationsConsumerSuppressOnDashboard) this.settings.setLanguage(this.settingsForm.value.displayLanguage) this.documentListViewService.updatePageSize() this.settings.updateDarkModeSettings() diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index a3c942499..feb04f3d6 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -65,19 +65,21 @@ export class ConsumerStatusService { private consumerStatus: FileStatus[] = [] - + private documentDetectedSubject = new Subject<FileStatus>() private documentConsumptionFinishedSubject = new Subject<FileStatus>() private documentConsumptionFailedSubject = new Subject<FileStatus>() private get(taskId: string, filename?: string) { let status = this.consumerStatus.find(e => e.taskId == taskId) || this.consumerStatus.find(e => e.filename == filename && e.taskId == null) + let created = false if (!status) { status = new FileStatus() this.consumerStatus.push(status) + created = true } status.taskId = taskId status.filename = filename - return status + return {'status': status, 'created': created} } newFileUpload(filename: string): FileStatus { @@ -101,11 +103,17 @@ export class ConsumerStatusService { this.statusWebSocked.onmessage = (ev) => { let statusMessage: WebsocketConsumerStatusMessage = JSON.parse(ev['data']) - let status = this.get(statusMessage.task_id, statusMessage.filename) + let statusMessageGet = this.get(statusMessage.task_id, statusMessage.filename) + let status = statusMessageGet.status + let created = statusMessageGet.created + status.updateProgress(FileStatusPhase.PROCESSING, statusMessage.current_progress, statusMessage.max_progress) status.message = statusMessage.message status.documentId = statusMessage.document_id + if (created && statusMessage.status == 'STARTING') { + this.documentDetectedSubject.next(status) + } if (statusMessage.status == "SUCCESS") { status.phase = FileStatusPhase.SUCCESS this.documentConsumptionFinishedSubject.next(status) @@ -150,4 +158,8 @@ export class ConsumerStatusService { return this.documentConsumptionFailedSubject } + onDocumentDetected() { + return this.documentDetectedSubject + } + } diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 041fb51ca..f3e437ada 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -23,7 +23,11 @@ export const SETTINGS_KEYS = { DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', DATE_LOCALE: 'general-settings:date-display:date-locale', - DATE_FORMAT: 'general-settings:date-display:date-format' + DATE_FORMAT: 'general-settings:date-display:date-format', + NOTIFICATIONS_CONSUMER_NEW_DOCUMENT: 'general-settings:notifications:consumer-new-documents', + NOTIFICATIONS_CONSUMER_SUCCESS: 'general-settings:notifications:consumer-success', + NOTIFICATIONS_CONSUMER_FAILED: 'general-settings:notifications:consumer-failed', + NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD: 'general-settings:notifications:consumer-suppress-on-dashboard', } const SETTINGS: PaperlessSettings[] = [ @@ -34,7 +38,11 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, - {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"} + {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, + {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, type: "boolean", default: true}, + {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS, type: "boolean", default: true}, + {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED, type: "boolean", default: true}, + {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD, type: "boolean", default: true}, ] @Injectable({ From 14c61d72f377e70efc94d30f0ba7fc227f1f159f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 17:56:06 +0100 Subject: [PATCH 069/898] better error messages --- src/documents/consumer.py | 2 +- src/paperless_tesseract/parsers.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index d0f7399c8..05043201b 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -158,7 +158,7 @@ class Consumer(LoggingMixin): self.override_tag_ids = override_tag_ids self.task_id = task_id or str(uuid.uuid4()) - self._send_progress(0, 100, 'WORKING', _('Received new file')) + self._send_progress(0, 100, 'STARTING', _('Received new file')) # this is for grouping logging entries for this particular file # together. diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 31e956284..52b50e983 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -190,11 +190,11 @@ class RasterisedDocumentParser(DocumentParser): # Also, no archived file. if not self.text: # However, if we don't have anything, fail: - raise ParseError(e) + raise ParseError(e.__class__.__name__ + ": " + str(e)) except Exception as e: # Anything else is probably serious. - raise ParseError(e) + raise ParseError(e.__class__.__name__ + ": " + str(e)) if not self.text: # This may happen for files that don't have any text. From eaeed95ed4fde1923bfc79f810ca69cfc82668e0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 17:57:16 +0100 Subject: [PATCH 070/898] update messages --- src/locale/en-us/LC_MESSAGES/django.po | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/locale/en-us/LC_MESSAGES/django.po b/src/locale/en-us/LC_MESSAGES/django.po index 5451b8dde..8513c577b 100644 --- a/src/locale/en-us/LC_MESSAGES/django.po +++ b/src/locale/en-us/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-26 14:59+0100\n" +"POT-Creation-Date: 2021-01-27 17:57+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" @@ -26,8 +26,8 @@ msgid "File not found" msgstr "Datei nicht gefunden" #: documents/consumer.py:83 -msgid "Document is a duplicate" -msgstr "Dokument existiert bereits" +msgid "Document already exists" +msgstr "" #: documents/consumer.py:99 msgid "Pre-consume script does not exist." @@ -674,3 +674,6 @@ msgstr "" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "" + +#~ msgid "Document is a duplicate" +#~ msgstr "Dokument existiert bereits" From dcf169882823f247b5757d0e3a4d68a13adccfda Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 18:34:59 +0100 Subject: [PATCH 071/898] improved the logic of the "dismiss completed" button --- .../upload-file-widget/upload-file-widget.component.html | 8 ++++---- .../upload-file-widget/upload-file-widget.component.scss | 9 --------- .../upload-file-widget/upload-file-widget.component.ts | 3 +++ src-ui/src/app/services/consumer-status.service.ts | 4 ++++ 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index a9658bcf7..45d63264a 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -1,12 +1,12 @@ -<app-widget-frame title="Upload new documents" i18n-title [class.has-multiple-status]="(getStatus().length + getStatusesHidden().length)> 1"> +<app-widget-frame title="Upload new documents" i18n-title> <div header-buttons> - <button type="button" class="btn btn-link dismiss-all" [disabled]="!getStatus().length" (click)="dismissAll()"> - <small class="mr-1" i18n>Dismiss completed</small> + <a *ngIf="getStatusCompleted().length > 0" (click)="dismissAll()" [routerLink]="" > + <span i18n>Dismiss completed</span>  <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-check2-all" viewBox="0 0 16 16"> <path d="M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7l-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z"/> <path d="M5.354 7.146l.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z"/> </svg> - </button> + </a> </div> <div content> <form> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index 5e404bb8e..b37606ff3 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -23,15 +23,6 @@ form { } } -.dismiss-all { - transition: opacity 0.2s ease; - opacity: 0; -} - -.has-multiple-status .dismiss-all { - opacity: 1; -} - ::ng-deep .progress { position: absolute; top: 0; diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 1c5ed5438..a6870e0e7 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -32,6 +32,9 @@ export class UploadFileWidgetComponent implements OnInit { return this.consumerStatusService.getConsumerStatus(FileStatusPhase.UPLOADING) } + getStatusCompleted() { + return this.consumerStatusService.getConsumerStatusCompleted() + } getTotalUploadProgress() { let current = 0 let max = 0 diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index feb04f3d6..c2169d51f 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -97,6 +97,10 @@ export class ConsumerStatusService { } } + getConsumerStatusCompleted() { + return this.consumerStatus.filter(s => s.phase == FileStatusPhase.FAILED || s.phase == FileStatusPhase.SUCCESS) + } + connect() { this.disconnect() this.statusWebSocked = new WebSocket("ws://localhost:8000/ws/status/"); From b9d4548c3b1d1b3f3a39e829ba72c1e5ba3cef0d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 18:47:02 +0100 Subject: [PATCH 072/898] update list view when documents are added --- .../document-list/document-list.component.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 509c0a735..0d1562c24 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -1,9 +1,11 @@ -import { AfterViewInit, Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; +import { AfterViewInit, Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Subscription } from 'rxjs'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { PaperlessSavedView } from 'src/app/data/paperless-saved-view'; import { SortableDirective, SortEvent } from 'src/app/directives/sortable.directive'; +import { ConsumerStatusService } from 'src/app/services/consumer-status.service'; import { DocumentListViewService } from 'src/app/services/document-list-view.service'; import { DOCUMENT_SORT_FIELDS } from 'src/app/services/rest/document.service'; import { SavedViewService } from 'src/app/services/rest/saved-view.service'; @@ -16,7 +18,7 @@ import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-vi templateUrl: './document-list.component.html', styleUrls: ['./document-list.component.scss'] }) -export class DocumentListComponent implements OnInit { +export class DocumentListComponent implements OnInit, OnDestroy { constructor( public list: DocumentListViewService, @@ -24,7 +26,9 @@ export class DocumentListComponent implements OnInit { public route: ActivatedRoute, private router: Router, private toastService: ToastService, - private modalService: NgbModal) { } + private modalService: NgbModal, + private consumerStatusService: ConsumerStatusService + ) { } @ViewChild("filterEditor") private filterEditor: FilterEditorComponent @@ -35,6 +39,8 @@ export class DocumentListComponent implements OnInit { filterRulesModified: boolean = false + private consumptionFinishedSubscription: Subscription + get isFiltered() { return this.list.filterRules?.length > 0 } @@ -63,6 +69,9 @@ export class DocumentListComponent implements OnInit { if (localStorage.getItem('document-list:displayMode') != null) { this.displayMode = localStorage.getItem('document-list:displayMode') } + this.consumptionFinishedSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(() => { + this.list.reload() + }) this.route.paramMap.subscribe(params => { this.list.clear() if (params.has('id')) { @@ -83,6 +92,12 @@ export class DocumentListComponent implements OnInit { }) } + ngOnDestroy() { + if (this.consumptionFinishedSubscription) { + this.consumptionFinishedSubscription.unsubscribe() + } + } + loadViewConfig(view: PaperlessSavedView) { this.list.load(view) this.list.reload() From b72fd0a392c1043e77451161dc8a700e09573f3b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 19:11:18 +0100 Subject: [PATCH 073/898] add gunicorn again --- Pipfile | 1 + Pipfile.lock | 30 +++++++++++++++++++----------- requirements.txt | 3 ++- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Pipfile b/Pipfile index e30abc064..884279142 100644 --- a/Pipfile +++ b/Pipfile @@ -18,6 +18,7 @@ django-q = "~=1.3.4" djangorestframework = "~=3.12.2" filelock = "*" fuzzywuzzy = "*" +gunicorn = "*" imap-tools = "*" langdetect = "*" pdftotext = "*" diff --git a/Pipfile.lock b/Pipfile.lock index f60ac0223..1deb2913a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "61ffe4b723ce6b04e67636f1572f833ee9adacdcf74a883c558ed4b0c906e75a" + "sha256": "80ebe7269056bd328736aea532b3baccb3314763cc76fabd8e6ca28d84c3b1c0" }, "pipfile-spec": 6, "requires": {}, @@ -279,6 +279,14 @@ "index": "pypi", "version": "==0.18.0" }, + "gunicorn": { + "hashes": [ + "sha256:1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626", + "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c" + ], + "index": "pypi", + "version": "==20.0.4" + }, "hiredis": { "hashes": [ "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", @@ -1086,11 +1094,11 @@ }, "urllib3": { "hashes": [ - "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08", - "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473" + "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", + "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.2" + "version": "==1.26.3" }, "watchdog": { "hashes": [ @@ -1351,11 +1359,11 @@ }, "execnet": { "hashes": [ - "sha256:cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50", - "sha256:d4efd397930c46415f62f8a31388d6be4f27a91d7550eb79bc64a756e0056547" + "sha256:7a13113028b1e1cc4c6492b28098b3c6576c9dccc7973bfe47b342afadafb2ac", + "sha256:b73c5565e517f24b62dea8a5ceac178c661c4309d3aa0c3e420856c072c411b4" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.7.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.8.0" }, "factory-boy": { "hashes": [ @@ -1721,11 +1729,11 @@ }, "urllib3": { "hashes": [ - "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08", - "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473" + "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", + "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.2" + "version": "==1.26.3" }, "virtualenv": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index a5a564a99..e1a382426 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,6 +34,7 @@ django==3.1.5 djangorestframework==3.12.2 filelock==3.0.12 fuzzywuzzy==0.18.0 +gunicorn==20.0.4 hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 @@ -85,7 +86,7 @@ twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3. txaio==20.12.1; python_version >= '3.6' typing-extensions==3.7.4.3; python_version < '3.8' tzlocal==2.1 -urllib3==1.26.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' watchdog==1.0.2 wcwidth==0.2.5 whitenoise==5.2.0 From 40c6d2c7ce86f7f30b0031bdb4ce5dcc9376f15b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 19:11:50 +0100 Subject: [PATCH 074/898] i18n --- src-ui/messages.xlf | 33 +++++++++++-------- .../upload-file-widget.component.html | 2 +- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index ec718acc6..84ca4888b 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -48,21 +48,21 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">43</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.savedView.name"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">109</context> </context-group> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> @@ -1418,21 +1418,21 @@ <source>Connecting...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit id="3994065460580948013" datatype="html"> <source>Waiting for consumer...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">101</context> </context-group> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> @@ -1442,13 +1442,6 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> - <source>Dismiss completed</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> <context-group purpose="location"> @@ -1463,6 +1456,20 @@ <context context-type="linenumber">13</context> </context-group> </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit id="7cf3abd55bf1d2095435a050325927f083e6034e" datatype="html"> + <source><x id="INTERPOLATION" equiv-text="{{getStatusesHidden().length}}"/> more hidden</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> <context-group purpose="location"> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 45d63264a..5cabb3c85 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -20,7 +20,7 @@ <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> </div> <div *ngIf="getStatusesHidden().length" class="alerts-hidden"> - <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center">{{getStatusesHidden().length}} more hidden <button class="btn btn-sm btn-link py-0" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded">Show all</button></p> + <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center"><span i18n>{{getStatusesHidden().length}} more hidden</span> <button class="btn btn-sm btn-link py-0" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded" i18n>Show all</button></p> <div #hiddenAlerts="ngbCollapse" [(ngbCollapse)]="!alertsExpanded"> <div *ngFor="let status of getStatusesHidden()"> <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> From 89cb41d564046a1560d1b8a309286a594ca88917 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 19:57:04 +0100 Subject: [PATCH 075/898] update configuration --- Pipfile | 2 +- Pipfile.lock | 238 ++++++++++++++++++---------- ansible/tasks/main.yml | 2 +- docker/gunicorn.conf.py | 2 +- docker/supervisord.conf | 4 +- requirements.txt | 17 +- scripts/paperless-webserver.service | 2 +- 7 files changed, 167 insertions(+), 100 deletions(-) diff --git a/Pipfile b/Pipfile index 884279142..c97ec297b 100644 --- a/Pipfile +++ b/Pipfile @@ -44,7 +44,7 @@ tqdm = "*" tika = "*" channels = "~=3.0" channels-redis = "*" -daphne = "~=3.0" +uvicorn = {extras = ["standard"], version = "*"} [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 1deb2913a..5ae121105 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "80ebe7269056bd328736aea532b3baccb3314763cc76fabd8e6ca28d84c3b1c0" + "sha256": "33586bca793586bd4e413ae634780628b6df65a0d67b581c86ab4d2a16a817e0" }, "pipfile-spec": 6, "requires": {}, @@ -155,6 +155,15 @@ "markers": "python_version >= '3.1'", "version": "==4.0.0" }, + "click": { + "hashes": [ + "sha256:a3747c864f8e400a3664f5f4fd6dae11b4605bf6b727dae7b6f22ba9bd0a194a", + "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", + "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==7.1.2" + }, "coloredlogs": { "hashes": [ "sha256:5e78691e2673a8e294499e1832bb13efcfb44a86b92e18109fa18951093218ab", @@ -196,7 +205,7 @@ "sha256:0052c9887600c57054a5867d4b0240159fa009faa3bcf6a1627271d9cdcb005a", "sha256:c22b692707f514de9013651ecb687f2abe4f35cf6fe292ece634e9f1737bc7e3" ], - "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==3.0.1" }, "dateparser": { @@ -287,6 +296,14 @@ "index": "pypi", "version": "==20.0.4" }, + "h11": { + "hashes": [ + "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6", + "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042" + ], + "markers": "python_version >= '3.6'", + "version": "==0.12.0" + }, "hiredis": { "hashes": [ "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", @@ -341,6 +358,25 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.0" }, + "httptools": { + "hashes": [ + "sha256:0a4b1b2012b28e68306575ad14ad5e9120b34fccd02a81eb08838d7e3bbb48be", + "sha256:3592e854424ec94bd17dc3e0c96a64e459ec4147e6d53c0a42d0ebcef9cb9c5d", + "sha256:41b573cf33f64a8f8f3400d0a7faf48e1888582b6f6e02b82b9bd4f0bf7497ce", + "sha256:56b6393c6ac7abe632f2294da53f30d279130a92e8ae39d8d14ee2e1b05ad1f2", + "sha256:7f6c82262d3bdde886a29ae0d65d4fae6b3ac6fba763891ddb72e72e1dbe7075", + "sha256:86c6acd66765a934e8730bf0e9dfaac6fdcf2a4334212bd4a0a1c78f16475ca6", + "sha256:96da81e1992be8ac2fd5597bf0283d832287e20cb3cfde8996d2b00356d4e17f", + "sha256:96eb359252aeed57ea5c7b3d79839aaa0382c9d3149f7d24dd7172b1bcecb009", + "sha256:a2719e1d7a84bb131c4f1e0cb79705034b48de6ae486eb5297a139d6a3296dce", + "sha256:ac0aa11e99454b6a66989aa2d44bca41d4e0f968e395a0a8f164b401fefe359a", + "sha256:bc3114b9edbca5a1eb7ae7db698c669eb53eb8afbbebdde116c174925260849c", + "sha256:cb46a65a0ed99c38dfcbf9f5be8be6cf9cb497e527505fefac7cbd38a467f3c6", + "sha256:fa3cd71e31436911a44620473e873a256851e1f53dee56669dae403ba41756a4", + "sha256:fea04e126014169384dee76a153d4573d90d0cbd1d12185da089f73c78390437" + ], + "version": "==0.1.1" + }, "humanfriendly": { "hashes": [ "sha256:066562956639ab21ff2676d1fda0b5987e985c534fc76700a19bd54bcb81121d", @@ -380,14 +416,6 @@ ], "version": "==0.4.0" }, - "importlib-metadata": { - "hashes": [ - "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", - "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" - ], - "markers": "python_version < '3.8'", - "version": "==3.4.0" - }, "incremental": { "hashes": [ "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", @@ -754,6 +782,7 @@ "sha256:4c231c759543ba02560fcd2480c48dcec4dae34c9da7d3747c508227e0624b51", "sha256:818ae18e06922c066f777a33f1fca45786d85edfe71cd043de6379337a7f274b" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==20.0.1" }, "python-dateutil": { @@ -804,6 +833,32 @@ ], "version": "==2020.5" }, + "pyyaml": { + "hashes": [ + "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", + "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", + "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", + "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", + "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", + "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", + "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", + "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", + "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", + "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", + "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", + "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", + "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", + "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", + "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", + "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", + "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", + "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", + "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", + "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", + "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" + ], + "version": "==5.4.1" + }, "redis": { "hashes": [ "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2", @@ -950,35 +1005,29 @@ }, "scipy": { "hashes": [ - "sha256:168c45c0c32e23f613db7c9e4e780bc61982d71dcd406ead746c7c7c2f2004ce", - "sha256:213bc59191da2f479984ad4ec39406bf949a99aba70e9237b916ce7547b6ef42", - "sha256:25b241034215247481f53355e05f9e25462682b13bd9191359075682adcd9554", - "sha256:2c872de0c69ed20fb1a9b9cf6f77298b04a26f0b8720a5457be08be254366c6e", - "sha256:3397c129b479846d7eaa18f999369a24322d008fac0782e7828fa567358c36ce", - "sha256:368c0f69f93186309e1b4beb8e26d51dd6f5010b79264c0f1e9ca00cd92ea8c9", - "sha256:3d5db5d815370c28d938cf9b0809dade4acf7aba57eaf7ef733bfedc9b2474c4", - "sha256:4598cf03136067000855d6b44d7a1f4f46994164bcd450fb2c3d481afc25dd06", - "sha256:4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b", - "sha256:4f12d13ffbc16e988fa40809cbbd7a8b45bc05ff6ea0ba8e3e41f6f4db3a9e47", - "sha256:634568a3018bc16a83cda28d4f7aed0d803dd5618facb36e977e53b2df868443", - "sha256:65923bc3809524e46fb7eb4d6346552cbb6a1ffc41be748535aa502a2e3d3389", - "sha256:6b0ceb23560f46dd236a8ad4378fc40bad1783e997604ba845e131d6c680963e", - "sha256:8c8d6ca19c8497344b810b0b0344f8375af5f6bb9c98bd42e33f747417ab3f57", - "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62", - "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d", - "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437", - "sha256:b5e9d3e4474644915809d6aa1416ff20430a3ed9ae723a5d295da5ddb24985e2", - "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2", - "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54", - "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474", - "sha256:e360cb2299028d0b0d0f65a5c5e51fc16a335f1603aa2357c25766c8dab56938", - "sha256:e98d49a5717369d8241d6cf33ecb0ca72deee392414118198a8e5b4c35c56340", - "sha256:ed572470af2438b526ea574ff8f05e7f39b44ac37f712105e57fc4d53a6fb660", - "sha256:f87b39f4d69cf7d7529d7b1098cb712033b17ea7714aed831b95628f483fd012", - "sha256:fa789583fc94a7689b45834453fec095245c7e69c58561dc159b5d5277057e4c" + "sha256:155225621df90fcd151e25d51c50217e412de717475999ebb76e17e310176981", + "sha256:1bc5b446600c4ff7ab36bade47180673141322f0febaa555f1c433fe04f2a0e3", + "sha256:2f1c2ebca6fd867160e70102200b1bd07b3b2d31a3e6af3c58d688c15d0d07b7", + "sha256:313785c4dab65060f9648112d025f6d2fec69a8a889c714328882d678a95f053", + "sha256:31ab217b5c27ab429d07428a76002b33662f98986095bbce5d55e0788f7e8b15", + "sha256:3d4303e3e21d07d9557b26a1707bb9fc065510ee8501c9bf22a0157249a82fd0", + "sha256:4f1d9cc977ac6a4a63c124045c1e8bf67ec37098f67c699887a93736961a00ae", + "sha256:58731bbe0103e96b89b2f41516699db9b63066e4317e31b8402891571f6d358f", + "sha256:8629135ee00cc2182ac8be8e75643b9f02235942443732c2ed69ab48edcb6614", + "sha256:876badc33eec20709d4e042a09834f5953ebdac4088d45a4f3a1f18b56885718", + "sha256:8840a9adb4ede3751f49761653d3ebf664f25195fdd42ada394ffea8903dd51d", + "sha256:aef3a2dbc436bbe8f6e0b635f0b5fe5ed024b522eee4637dbbe0b974129ca734", + "sha256:b8af26839ae343655f3ca377a5d5e5466f1d3b3ac7432a43449154fe958ae0e0", + "sha256:c0911f3180de343643f369dc5cfedad6ba9f939c2d516bddea4a6871eb000722", + "sha256:cb6dc9f82dfd95f6b9032a8d7ea70efeeb15d5b5fd6ed4e8537bb3c673580566", + "sha256:cdbc47628184a0ebeb5c08f1892614e1bd4a51f6e0d609c6eed253823a960f5b", + "sha256:d902d3a5ad7f28874c0a82db95246d24ca07ad932741df668595fe00a4819870", + "sha256:eab389aba0ad8b5e6b5abdc3337ade46823df75f80a8edd4c67833567577cb3d", + "sha256:eb7928275f3560d47e5538e15e9f32b3d64cd30ea8f85f3e82987425476f53f6", + "sha256:f68d5761a2d2376e2b194c8e9192bbf7c51306ca176f1a0889990a52ef0d551f" ], - "markers": "python_version >= '3.6'", - "version": "==1.5.4" + "markers": "python_version >= '3.7'", + "version": "==1.6.0" }, "service-identity": { "hashes": [ @@ -1076,15 +1125,6 @@ "markers": "python_version >= '3.6'", "version": "==20.12.1" }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" - ], - "markers": "python_version < '3.8'", - "version": "==3.7.4.3" - }, "tzlocal": { "hashes": [ "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", @@ -1100,6 +1140,33 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.26.3" }, + "uvicorn": { + "extras": [ + "standard" + ], + "hashes": [ + "sha256:1079c50a06f6338095b4f203e7861dbff318dde5f22f3a324fc6e94c7654164c", + "sha256:ef1e0bb5f7941c6fe324e06443ddac0331e1632a776175f87891c7bd02694355" + ], + "index": "pypi", + "version": "==0.13.3" + }, + "uvloop": { + "hashes": [ + "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd", + "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e", + "sha256:2e57a28567d874afd803b6d8a7aeee7bfa0a34994f1b237837e6d7e525cea9a4", + "sha256:4315d2ec3ca393dd5bc0b0089d23101276778c304d42faff5dc4579cb6caef09", + "sha256:4544dcf77d74f3a84f03dd6278174575c44c67d7165d4c42c71db3fdc3860726", + "sha256:63c0bd965e73a4e8dde6a15635262ec38036d83327230552ada21298ee5fa3b7", + "sha256:afd5513c0ae414ec71d24f6f123614a80f3d27ca655a4fcf6cabe50994cc1891", + "sha256:b4f591aa4b3fa7f32fb51e2ee9fea1b495eb75b0b3c8d0ca52514ad675ae63f7", + "sha256:bcac356d62edd330080aed082e78d4b580ff260a677508718f88016333e2c9c5", + "sha256:e7514d7a48c063226b7d06617cbb12a14278d4323a065a8d46a7962686ce2e95", + "sha256:f07909cd9fc08c52d294b1570bba92186181ca01fe3dc9ffba68955273dd7362" + ], + "version": "==0.14.0" + }, "watchdog": { "hashes": [ "sha256:016b01495b9c55b5d4126ed8ae75d93ea0d99377084107c33162df52887cee18", @@ -1123,6 +1190,14 @@ "index": "pypi", "version": "==1.0.2" }, + "watchgod": { + "hashes": [ + "sha256:59700dab7445aa8e6067a5b94f37bae90fc367554549b1ed2e9d0f4f38a90d2a", + "sha256:5fb60afa9558b79736395db1cb60ad3ed59df5c2f507a3ff729220cf1251ffdc", + "sha256:e9cca0ab9c63f17fc85df9fd8bd18156ff00aff04ebe5976cee473f4968c6858" + ], + "version": "==0.6" + }, "wcwidth": { "hashes": [ "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", @@ -1130,6 +1205,34 @@ ], "version": "==0.2.5" }, + "websockets": { + "hashes": [ + "sha256:0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5", + "sha256:1d3f1bf059d04a4e0eb4985a887d49195e15ebabc42364f4eb564b1d065793f5", + "sha256:20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308", + "sha256:295359a2cc78736737dd88c343cd0747546b2174b5e1adc223824bcaf3e164cb", + "sha256:2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a", + "sha256:3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c", + "sha256:3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170", + "sha256:3ef56fcc7b1ff90de46ccd5a687bbd13a3180132268c4254fc0fa44ecf4fc422", + "sha256:4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8", + "sha256:5c01fd846263a75bc8a2b9542606927cfad57e7282965d96b93c387622487485", + "sha256:5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f", + "sha256:745a1c8ca62f7d27de42b517ca7c6f716d1eb96c5aa73cf6407936c0167cbb3c", + "sha256:751a556205d8245ff94aeef23546a1113b1dd4f6e4d102ded66c39b99c2ce6c8", + "sha256:7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc", + "sha256:965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779", + "sha256:9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989", + "sha256:9bef37ee224e104a413f0780e29adb3e514a5b698aabe0d969a6ba426b8435d1", + "sha256:c1ec8db4fac31850286b7cd3b9c0e1b944204668b8eb721674916d4e28744092", + "sha256:c8a116feafdb1f84607cb3b14aa1418424ae71fee131642fc568d21423b51824", + "sha256:ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d", + "sha256:d705f8aeecdf3262379644e4b55107a3b55860eb812b673b28d0fbc347a60c55", + "sha256:e898a0863421650f0bebac8ba40840fc02258ef4714cb7e1fd76b6a6354bda36", + "sha256:f8a7bff6e8664afc4e6c28b983845c5bc14965030e3fb98789734d416af77c4b" + ], + "version": "==8.1" + }, "whitenoise": { "hashes": [ "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7", @@ -1147,14 +1250,6 @@ "index": "pypi", "version": "==2.7.4" }, - "zipp": { - "hashes": [ - "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", - "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" - ], - "markers": "python_version >= '3.6'", - "version": "==3.4.0" - }, "zope.interface": { "hashes": [ "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", @@ -1406,22 +1501,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.0" }, - "importlib-metadata": { - "hashes": [ - "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", - "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" - ], - "markers": "python_version < '3.8'", - "version": "==3.4.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:885b8eae589179f661c909d699a546cf10d83692553e34dca1bf5eb06f7f6217", - "sha256:bfdad047bce441405a49cf8eb48ddce5e56c696e185f59147a8b79e75e9e6380" - ], - "markers": "python_version < '3.7'", - "version": "==5.1.0" - }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -1718,15 +1797,6 @@ "index": "pypi", "version": "==3.21.2" }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" - ], - "markers": "python_version < '3.8'", - "version": "==3.7.4.3" - }, "urllib3": { "hashes": [ "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", @@ -1742,14 +1812,6 @@ ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4.0" - }, - "zipp": { - "hashes": [ - "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", - "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" - ], - "markers": "python_version >= '3.6'", - "version": "==3.4.0" } } } diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index a353a18ec..6412fa30f 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -418,7 +418,7 @@ path: "{{ paperlessng_directory }}/scripts/paperless-webserver.service" section: "Service" option: "ExecStart" - value: "{{ paperlessng_virtualenv }}/bin/gunicorn paperless.wsgi -w 2 -b {{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}" + value: "{{ paperlessng_virtualenv }}/bin/gunicorn paperless.asgi:application -w 2 -k uvicorn.workers.UvicornWorker -b {{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}" - name: copy systemd services copy: diff --git a/docker/gunicorn.conf.py b/docker/gunicorn.conf.py index edfb362d9..36bde9cf7 100644 --- a/docker/gunicorn.conf.py +++ b/docker/gunicorn.conf.py @@ -1,7 +1,7 @@ bind = '0.0.0.0:8000' backlog = 2048 workers = 3 -worker_class = 'sync' +worker_class = 'uvicorn.workers.UvicornWorker' worker_connections = 1000 timeout = 20 keepalive = 2 diff --git a/docker/supervisord.conf b/docker/supervisord.conf index a643b1136..fca66c83c 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -7,8 +7,8 @@ logfile_backups=10 ; # of main logfile backups; 0 means none, default loglevel=info ; log level; default info; others: debug,warn,trace user=root -[program:daphne] -command=daphne -b 0.0.0.0 -p 8000 paperless.asgi:application +[program:gunicorn] +command=gunicorn -c /usr/src/paperless/gunicorn.conf.py paperless.asgi:application user=paperless stdout_logfile=/dev/stdout diff --git a/requirements.txt b/requirements.txt index e1a382426..c0228d378 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,10 +20,11 @@ cffi==1.14.4 channels-redis==3.2.0 channels==3.0.3 chardet==4.0.0; python_version >= '3.1' +click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' constantly==15.1.0 cryptography==3.3.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' -daphne==3.0.1 +daphne==3.0.1; python_version >= '3.6' dateparser==0.7.6 django-cors-headers==3.7.0 django-extensions==3.1.0 @@ -35,13 +36,14 @@ djangorestframework==3.12.2 filelock==3.0.12 fuzzywuzzy==0.18.0 gunicorn==20.0.4 +h11==0.12.0; python_version >= '3.6' hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' imap-tools==0.36.0 img2pdf==0.4.0 -importlib-metadata==3.4.0; python_version < '3.8' incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 @@ -62,19 +64,20 @@ pyasn1-modules==0.2.8 pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pyhamcrest==2.0.2; python_version >= '3.5' -pyopenssl==20.0.1 +pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 python-dotenv==0.15.0 python-gnupg==0.4.6 python-levenshtein==0.12.1 python-magic==0.4.18 pytz==2020.5 +pyyaml==5.4.1 redis==3.5.3 regex==2020.11.13 reportlab==3.5.60 requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 -scipy==1.5.4; python_version >= '3.6' +scipy==1.6.0; python_version >= '3.7' service-identity==18.1.0 six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' sortedcontainers==2.3.0 @@ -84,12 +87,14 @@ tika==1.24 tqdm==4.56.0 twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' txaio==20.12.1; python_version >= '3.6' -typing-extensions==3.7.4.3; python_version < '3.8' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +uvicorn[standard]==0.13.3 +uvloop==0.14.0 watchdog==1.0.2 +watchgod==0.6 wcwidth==0.2.5 +websockets==8.1 whitenoise==5.2.0 whoosh==2.7.4 -zipp==3.4.0; python_version >= '3.6' zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' diff --git a/scripts/paperless-webserver.service b/scripts/paperless-webserver.service index a43110be2..77d2def34 100644 --- a/scripts/paperless-webserver.service +++ b/scripts/paperless-webserver.service @@ -8,7 +8,7 @@ Requires=redis.service User=paperless Group=paperless WorkingDirectory=/opt/paperless/src -ExecStart=/opt/paperless/.local/bin/gunicorn paperless.wsgi -w 2 -b 0.0.0.0:8000 +ExecStart=/opt/paperless/.local/bin/gunicorn paperless.asgi:application -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 [Install] WantedBy=multi-user.target From d6d749fa54e161a5b32931ae50d7361a9f1ab9dc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 20:08:09 +0100 Subject: [PATCH 076/898] fix redis configuration --- src/paperless/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index b36ab6cf1..678ce5a21 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -160,7 +160,7 @@ CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { - "hosts": ["redis://localhost:6379"], + "hosts": [os.getenv("PAPERLESS_REDIS", "redis://localhost:6379")], }, }, } From a7f30678420574016a0cd8798f897085ebafd47f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 20:27:06 +0100 Subject: [PATCH 077/898] add python 3.9 for tests --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 03b789bb7..e92afcc06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,7 +48,7 @@ jobs: runs-on: ubuntu-20.04 strategy: matrix: - python-version: ['3.6', '3.7', '3.8'] + python-version: ['3.6', '3.7', '3.8', '3.9'] fail-fast: false steps: - From 5f7aee31aeabd726768da3cd7dfeffe3825a45ff Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 20:27:40 +0100 Subject: [PATCH 078/898] prevent updates to scipy, since 1.6 is incompatible with python 3.6 --- Pipfile | 2 + Pipfile.lock | 110 +++++++++++++++++++++++++++++++++++++---------- requirements.txt | 5 ++- 3 files changed, 93 insertions(+), 24 deletions(-) diff --git a/Pipfile b/Pipfile index c97ec297b..95d845d1f 100644 --- a/Pipfile +++ b/Pipfile @@ -35,6 +35,8 @@ psycopg2-binary = "*" redis = "*" # Pinned because aarch64 wheels and updates cause warnings when loading the classifier model. scikit-learn="==0.24.0" +# Prevent scipy updates because 1.6 is incompatible with python 3.6 +scipy="~=1.5.4" whitenoise = "~=5.2.0" watchdog = "*" whoosh="~=2.7.4" diff --git a/Pipfile.lock b/Pipfile.lock index 5ae121105..b8cb29b29 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "33586bca793586bd4e413ae634780628b6df65a0d67b581c86ab4d2a16a817e0" + "sha256": "d80d2539a4528a8fd9e848875c2e2d5bcdb3e98154f45b612706094b84ecaaea" }, "pipfile-spec": 6, "requires": {}, @@ -416,6 +416,14 @@ ], "version": "==0.4.0" }, + "importlib-metadata": { + "hashes": [ + "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", + "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" + ], + "markers": "python_version < '3.8'", + "version": "==3.4.0" + }, "incremental": { "hashes": [ "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", @@ -1005,29 +1013,35 @@ }, "scipy": { "hashes": [ - "sha256:155225621df90fcd151e25d51c50217e412de717475999ebb76e17e310176981", - "sha256:1bc5b446600c4ff7ab36bade47180673141322f0febaa555f1c433fe04f2a0e3", - "sha256:2f1c2ebca6fd867160e70102200b1bd07b3b2d31a3e6af3c58d688c15d0d07b7", - "sha256:313785c4dab65060f9648112d025f6d2fec69a8a889c714328882d678a95f053", - "sha256:31ab217b5c27ab429d07428a76002b33662f98986095bbce5d55e0788f7e8b15", - "sha256:3d4303e3e21d07d9557b26a1707bb9fc065510ee8501c9bf22a0157249a82fd0", - "sha256:4f1d9cc977ac6a4a63c124045c1e8bf67ec37098f67c699887a93736961a00ae", - "sha256:58731bbe0103e96b89b2f41516699db9b63066e4317e31b8402891571f6d358f", - "sha256:8629135ee00cc2182ac8be8e75643b9f02235942443732c2ed69ab48edcb6614", - "sha256:876badc33eec20709d4e042a09834f5953ebdac4088d45a4f3a1f18b56885718", - "sha256:8840a9adb4ede3751f49761653d3ebf664f25195fdd42ada394ffea8903dd51d", - "sha256:aef3a2dbc436bbe8f6e0b635f0b5fe5ed024b522eee4637dbbe0b974129ca734", - "sha256:b8af26839ae343655f3ca377a5d5e5466f1d3b3ac7432a43449154fe958ae0e0", - "sha256:c0911f3180de343643f369dc5cfedad6ba9f939c2d516bddea4a6871eb000722", - "sha256:cb6dc9f82dfd95f6b9032a8d7ea70efeeb15d5b5fd6ed4e8537bb3c673580566", - "sha256:cdbc47628184a0ebeb5c08f1892614e1bd4a51f6e0d609c6eed253823a960f5b", - "sha256:d902d3a5ad7f28874c0a82db95246d24ca07ad932741df668595fe00a4819870", - "sha256:eab389aba0ad8b5e6b5abdc3337ade46823df75f80a8edd4c67833567577cb3d", - "sha256:eb7928275f3560d47e5538e15e9f32b3d64cd30ea8f85f3e82987425476f53f6", - "sha256:f68d5761a2d2376e2b194c8e9192bbf7c51306ca176f1a0889990a52ef0d551f" + "sha256:168c45c0c32e23f613db7c9e4e780bc61982d71dcd406ead746c7c7c2f2004ce", + "sha256:213bc59191da2f479984ad4ec39406bf949a99aba70e9237b916ce7547b6ef42", + "sha256:25b241034215247481f53355e05f9e25462682b13bd9191359075682adcd9554", + "sha256:2c872de0c69ed20fb1a9b9cf6f77298b04a26f0b8720a5457be08be254366c6e", + "sha256:3397c129b479846d7eaa18f999369a24322d008fac0782e7828fa567358c36ce", + "sha256:368c0f69f93186309e1b4beb8e26d51dd6f5010b79264c0f1e9ca00cd92ea8c9", + "sha256:3d5db5d815370c28d938cf9b0809dade4acf7aba57eaf7ef733bfedc9b2474c4", + "sha256:4598cf03136067000855d6b44d7a1f4f46994164bcd450fb2c3d481afc25dd06", + "sha256:4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b", + "sha256:4f12d13ffbc16e988fa40809cbbd7a8b45bc05ff6ea0ba8e3e41f6f4db3a9e47", + "sha256:634568a3018bc16a83cda28d4f7aed0d803dd5618facb36e977e53b2df868443", + "sha256:65923bc3809524e46fb7eb4d6346552cbb6a1ffc41be748535aa502a2e3d3389", + "sha256:6b0ceb23560f46dd236a8ad4378fc40bad1783e997604ba845e131d6c680963e", + "sha256:8c8d6ca19c8497344b810b0b0344f8375af5f6bb9c98bd42e33f747417ab3f57", + "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62", + "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d", + "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437", + "sha256:b5e9d3e4474644915809d6aa1416ff20430a3ed9ae723a5d295da5ddb24985e2", + "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2", + "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54", + "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474", + "sha256:e360cb2299028d0b0d0f65a5c5e51fc16a335f1603aa2357c25766c8dab56938", + "sha256:e98d49a5717369d8241d6cf33ecb0ca72deee392414118198a8e5b4c35c56340", + "sha256:ed572470af2438b526ea574ff8f05e7f39b44ac37f712105e57fc4d53a6fb660", + "sha256:f87b39f4d69cf7d7529d7b1098cb712033b17ea7714aed831b95628f483fd012", + "sha256:fa789583fc94a7689b45834453fec095245c7e69c58561dc159b5d5277057e4c" ], - "markers": "python_version >= '3.7'", - "version": "==1.6.0" + "index": "pypi", + "version": "==1.5.4" }, "service-identity": { "hashes": [ @@ -1125,6 +1139,15 @@ "markers": "python_version >= '3.6'", "version": "==20.12.1" }, + "typing-extensions": { + "hashes": [ + "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", + "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", + "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" + ], + "markers": "python_version < '3.8'", + "version": "==3.7.4.3" + }, "tzlocal": { "hashes": [ "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", @@ -1250,6 +1273,14 @@ "index": "pypi", "version": "==2.7.4" }, + "zipp": { + "hashes": [ + "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", + "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" + ], + "markers": "python_version >= '3.6'", + "version": "==3.4.0" + }, "zope.interface": { "hashes": [ "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", @@ -1501,6 +1532,22 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.0" }, + "importlib-metadata": { + "hashes": [ + "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", + "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" + ], + "markers": "python_version < '3.8'", + "version": "==3.4.0" + }, + "importlib-resources": { + "hashes": [ + "sha256:885b8eae589179f661c909d699a546cf10d83692553e34dca1bf5eb06f7f6217", + "sha256:bfdad047bce441405a49cf8eb48ddce5e56c696e185f59147a8b79e75e9e6380" + ], + "markers": "python_version < '3.7'", + "version": "==5.1.0" + }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -1797,6 +1844,15 @@ "index": "pypi", "version": "==3.21.2" }, + "typing-extensions": { + "hashes": [ + "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", + "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", + "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" + ], + "markers": "python_version < '3.8'", + "version": "==3.7.4.3" + }, "urllib3": { "hashes": [ "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", @@ -1812,6 +1868,14 @@ ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4.0" + }, + "zipp": { + "hashes": [ + "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", + "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" + ], + "markers": "python_version >= '3.6'", + "version": "==3.4.0" } } } diff --git a/requirements.txt b/requirements.txt index c0228d378..0c6deff1d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -44,6 +44,7 @@ hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' imap-tools==0.36.0 img2pdf==0.4.0 +importlib-metadata==3.4.0; python_version < '3.8' incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 @@ -77,7 +78,7 @@ regex==2020.11.13 reportlab==3.5.60 requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 -scipy==1.6.0; python_version >= '3.7' +scipy==1.5.4 service-identity==18.1.0 six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' sortedcontainers==2.3.0 @@ -87,6 +88,7 @@ tika==1.24 tqdm==4.56.0 twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' txaio==20.12.1; python_version >= '3.6' +typing-extensions==3.7.4.3; python_version < '3.8' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.3 @@ -97,4 +99,5 @@ wcwidth==0.2.5 websockets==8.1 whitenoise==5.2.0 whoosh==2.7.4 +zipp==3.4.0; python_version >= '3.6' zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From 368a5f80472a133dba9561794949d018ff412d1e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 27 Jan 2021 20:45:14 +0100 Subject: [PATCH 079/898] documentation --- docs/setup.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/setup.rst b/docs/setup.rst index a3a0bd1e8..60a8b79d4 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -244,7 +244,7 @@ writing. Windows is not and will never be supported. 1. Install dependencies. Paperless requires the following packages. - * ``python3`` 3.6, 3.7, 3.8 (3.9 is untested). + * ``python3`` 3.6, 3.7, 3.8, 3.9 * ``python3-pip``, optionally ``pipenv`` for package installation * ``python3-dev`` From d154dfd35e99f7659df08aa4760552199e40ae02 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 28 Jan 2021 10:54:56 +0100 Subject: [PATCH 080/898] added a status summary line --- src-ui/messages.xlf | 35 +++++++++++++++---- .../upload-file-widget.component.html | 9 ++--- .../upload-file-widget.component.ts | 27 +++++++++++++- .../app/services/consumer-status.service.ts | 6 +++- 4 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 84ca4888b..93f970d86 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1414,25 +1414,46 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">118</context> </context-group> </trans-unit> <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit id="3994065460580948013" datatype="html"> <source>Waiting for consumer...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> @@ -1463,18 +1484,18 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> - <trans-unit id="7cf3abd55bf1d2095435a050325927f083e6034e" datatype="html"> - <source><x id="INTERPOLATION" equiv-text="{{getStatusesHidden().length}}"/> more hidden</source> + <trans-unit id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265" datatype="html"> + <source><x id="INTERPOLATION" equiv-text="{{getStatusHidden().length}}"/> more hidden</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">23</context> + <context context-type="linenumber">24</context> </context-group> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 5cabb3c85..3e2908b84 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -12,17 +12,18 @@ <form> <ngx-file-drop dropZoneLabel="Drop documents here or" browseBtnLabel="Browse files" (onFileDrop)="dropped($event)" (onFileOver)="fileOver($event)" (onFileLeave)="fileLeave($event)" dropZoneClassName="bg-light card" - multiple="true" contentClassName="justify-content-center d-flex align-items-center p-5" [showBrowseBtn]=true + multiple="true" contentClassName="justify-content-center d-flex align-items-center py-5 px-2" [showBrowseBtn]=true browseBtnClassName="btn btn-sm btn-outline-primary ml-2" i18n-dropZoneLabel i18n-browseBtnLabel> </ngx-file-drop> </form> + <p class="mt-3" *ngIf="getStatus().length > 0">{{getStatusSummary()}}</p> <div *ngFor="let status of getStatus()"> <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> </div> - <div *ngIf="getStatusesHidden().length" class="alerts-hidden"> - <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center"><span i18n>{{getStatusesHidden().length}} more hidden</span> <button class="btn btn-sm btn-link py-0" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded" i18n>Show all</button></p> + <div *ngIf="getStatusHidden().length" class="alerts-hidden"> + <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center"><span i18n>{{getStatusHidden().length}} more hidden</span> <button class="btn btn-sm btn-link py-0" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded" i18n>Show all</button></p> <div #hiddenAlerts="ngbCollapse" [(ngbCollapse)]="!alertsExpanded"> - <div *ngFor="let status of getStatusesHidden()"> + <div *ngFor="let status of getStatusHidden()"> <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> </div> </div> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index a6870e0e7..5ac68d42a 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -23,7 +23,24 @@ export class UploadFileWidgetComponent implements OnInit { return this.consumerStatusService.getConsumerStatus().slice(0, MAX_ALERTS) } - getStatusesHidden() { + getStatusSummary() { + let strings = [] + let countUploadingAndProcessing = this.consumerStatusService.getConsumerStatusNotCompleted().length + let countFailed = this.getStatusFailed().length + let countSuccess = this.getStatusSuccess().length + if (countUploadingAndProcessing > 0) { + strings.push($localize`Processing: ${countUploadingAndProcessing}`) + } + if (countFailed > 0) { + strings.push($localize`Failed: ${countFailed}`) + } + if (countSuccess > 0) { + strings.push($localize`Added: ${countSuccess}`) + } + return strings.join($localize`:this string is used to separate processing, failed and added on the file upload widget:, `) + } + + getStatusHidden() { if (this.consumerStatusService.getConsumerStatus().length < MAX_ALERTS) return [] else return this.consumerStatusService.getConsumerStatus().slice(MAX_ALERTS) } @@ -32,6 +49,14 @@ export class UploadFileWidgetComponent implements OnInit { return this.consumerStatusService.getConsumerStatus(FileStatusPhase.UPLOADING) } + getStatusFailed() { + return this.consumerStatusService.getConsumerStatus(FileStatusPhase.FAILED) + } + + getStatusSuccess() { + return this.consumerStatusService.getConsumerStatus(FileStatusPhase.SUCCESS) + } + getStatusCompleted() { return this.consumerStatusService.getConsumerStatusCompleted() } diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index c2169d51f..8151b1c18 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -90,13 +90,17 @@ export class ConsumerStatusService { } getConsumerStatus(phase?: FileStatusPhase) { - if (phase) { + if (phase != null) { return this.consumerStatus.filter(s => s.phase == phase) } else { return this.consumerStatus } } + getConsumerStatusNotCompleted() { + return this.consumerStatus.filter(s => s.phase < FileStatusPhase.SUCCESS) + } + getConsumerStatusCompleted() { return this.consumerStatus.filter(s => s.phase == FileStatusPhase.FAILED || s.phase == FileStatusPhase.SUCCESS) } From 1b7735194ddf930f746d64d630cb7be865c4a632 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 28 Jan 2021 12:43:27 +0100 Subject: [PATCH 081/898] update dependencies --- Pipfile | 2 ++ Pipfile.lock | 12 ++++++------ requirements.txt | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Pipfile b/Pipfile index 95d845d1f..cbe5c5103 100644 --- a/Pipfile +++ b/Pipfile @@ -44,6 +44,8 @@ inotifyrecursive = "~=0.3.4" ocrmypdf = "~=11.4.5" tqdm = "*" tika = "*" +# TODO: This will sadly also install daphne+dependencies, +# which an ASGI server we don't need. Adds about 15MB image size. channels = "~=3.0" channels-redis = "*" uvicorn = {extras = ["standard"], version = "*"} diff --git a/Pipfile.lock b/Pipfile.lock index b8cb29b29..04e8b7fe0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -403,11 +403,11 @@ }, "imap-tools": { "hashes": [ - "sha256:4ec9575f21fb5a3efb573e71107806367dd52ecab0bf8f5c3724d1de6762b77b", - "sha256:860221dc13eb5d640da240e9bcf7867275c6162b742255789fd84f59124dfdd9" + "sha256:0eaa9b990fae336601dd44f353fac2d35ea25ca3b1b682a83700511635fc30ae", + "sha256:1c809e286d439e41fbe796c522ad4e565fd47a4260253343fa1b1045b6bfe8b1" ], "index": "pypi", - "version": "==0.36.0" + "version": "==0.37.0" }, "img2pdf": { "hashes": [ @@ -1838,11 +1838,11 @@ }, "tox": { "hashes": [ - "sha256:0aa777ee466f2ef18e6f58428c793c32378779e0a321dbb8934848bc3e78998c", - "sha256:f501808381c01c6d7827c2f17328be59c0a715046e94605ddca15fb91e65827d" + "sha256:76df3db6eee929bb62bdbacca5bb6bc840669d98e86a015b7a57b7df0a6eaf8b", + "sha256:854e6e4a71c614b488f81cb88df3b92edcb1a9ec43d4102e6289e9669bbf7f18" ], "index": "pypi", - "version": "==3.21.2" + "version": "==3.21.3" }, "typing-extensions": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 0c6deff1d..d6f45fea4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,7 +42,7 @@ httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.36.0 +imap-tools==0.37.0 img2pdf==0.4.0 importlib-metadata==3.4.0; python_version < '3.8' incremental==17.5.0 From 00cdd2b59b92eed62f41926c9edc0af6fe8caa83 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 28 Jan 2021 19:28:48 +0100 Subject: [PATCH 082/898] test cases --- src/documents/tests/test_consumer.py | 119 ++++++++++++++++++--------- 1 file changed, 82 insertions(+), 37 deletions(-) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 54d20ca8b..22e6afb61 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -212,6 +212,20 @@ def fake_magic_from_file(file, mime=False): @mock.patch("documents.consumer.magic.from_file", fake_magic_from_file) class TestConsumer(DirectoriesMixin, TestCase): + def _assert_first_last_send_progress(self, first_status="STARTING", last_status="SUCCESS", first_progress=0, first_progress_max=100, last_progress=100, last_progress_max=100): + + self._send_progress.assert_called() + + args, kwargs = self._send_progress.call_args_list[0] + self.assertEqual(args[0], first_progress) + self.assertEqual(args[1], first_progress_max) + self.assertEqual(args[2], first_status) + + args, kwargs = self._send_progress.call_args_list[len(self._send_progress.call_args_list) - 1] + self.assertEqual(args[0], last_progress) + self.assertEqual(args[1], last_progress_max) + self.assertEqual(args[2], last_status) + def make_dummy_parser(self, logging_group, progress_callback=None): return DummyParser(logging_group, self.dirs.scratch_dir, self.get_test_archive_file()) @@ -232,7 +246,7 @@ class TestConsumer(DirectoriesMixin, TestCase): # this prevents websocket message reports during testing. patcher = mock.patch("documents.consumer.Consumer._send_progress") - patcher.start() + self._send_progress = patcher.start() self.addCleanup(patcher.stop) self.consumer = Consumer() @@ -278,6 +292,8 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertFalse(os.path.isfile(filename)) + self._assert_first_last_send_progress() + def testOverrideFilename(self): filename = self.get_test_file() override_filename = "Statement for November.pdf" @@ -286,21 +302,26 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertEqual(document.title, "Statement for November") + self._assert_first_last_send_progress() + def testOverrideTitle(self): document = self.consumer.try_consume_file(self.get_test_file(), override_title="Override Title") self.assertEqual(document.title, "Override Title") + self._assert_first_last_send_progress() def testOverrideCorrespondent(self): c = Correspondent.objects.create(name="test") document = self.consumer.try_consume_file(self.get_test_file(), override_correspondent_id=c.pk) self.assertEqual(document.correspondent.id, c.id) + self._assert_first_last_send_progress() def testOverrideDocumentType(self): dt = DocumentType.objects.create(name="test") document = self.consumer.try_consume_file(self.get_test_file(), override_document_type_id=dt.pk) self.assertEqual(document.document_type.id, dt.id) + self._assert_first_last_send_progress() def testOverrideTags(self): t1 = Tag.objects.create(name="t1") @@ -311,37 +332,42 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertIn(t1, document.tags.all()) self.assertNotIn(t2, document.tags.all()) self.assertIn(t3, document.tags.all()) + self._assert_first_last_send_progress() def testNotAFile(self): - try: - self.consumer.try_consume_file("non-existing-file") - except ConsumerError as e: - self.assertTrue(str(e).endswith('File not found.')) - return - self.fail("Should throw exception") + self.assertRaisesMessage( + ConsumerError, + "File not found", + self.consumer.try_consume_file, + "non-existing-file" + ) + + self._assert_first_last_send_progress(last_status="FAILED") def testDuplicates1(self): self.consumer.try_consume_file(self.get_test_file()) - try: - self.consumer.try_consume_file(self.get_test_file()) - except ConsumerError as e: - self.assertTrue(str(e).endswith("It is a duplicate.")) - return + self.assertRaisesMessage( + ConsumerError, + "It is a duplicate", + self.consumer.try_consume_file, + self.get_test_file() + ) - self.fail("Should throw exception") + self._assert_first_last_send_progress(last_status="FAILED") def testDuplicates2(self): self.consumer.try_consume_file(self.get_test_file()) - try: - self.consumer.try_consume_file(self.get_test_archive_file()) - except ConsumerError as e: - self.assertTrue(str(e).endswith("It is a duplicate.")) - return + self.assertRaisesMessage( + ConsumerError, + "It is a duplicate", + self.consumer.try_consume_file, + self.get_test_archive_file() + ) - self.fail("Should throw exception") + self._assert_first_last_send_progress(last_status="FAILED") def testDuplicates3(self): self.consumer.try_consume_file(self.get_test_archive_file()) @@ -351,13 +377,15 @@ class TestConsumer(DirectoriesMixin, TestCase): def testNoParsers(self, m): m.return_value = [] - try: - self.consumer.try_consume_file(self.get_test_file()) - except ConsumerError as e: - self.assertEqual(str(e), "sample.pdf: Unsupported mime type application/pdf") - return + self.assertRaisesMessage( + ConsumerError, + "sample.pdf: Unsupported mime type application/pdf", + self.consumer.try_consume_file, + self.get_test_file() + ) + + self._assert_first_last_send_progress(last_status="FAILED") - self.fail("Should throw exception") @mock.patch("documents.parsers.document_consumer_declaration.send") def testFaultyParser(self, m): @@ -367,24 +395,28 @@ class TestConsumer(DirectoriesMixin, TestCase): "weight": 0 })] - try: - self.consumer.try_consume_file(self.get_test_file()) - except ConsumerError as e: - self.assertEqual(str(e), "sample.pdf: Error while consuming document sample.pdf: Does not compute.") - return + self.assertRaisesMessage( + ConsumerError, + "sample.pdf: Error while consuming document sample.pdf: Does not compute.", + self.consumer.try_consume_file, + self.get_test_file() + ) - self.fail("Should throw exception.") + self._assert_first_last_send_progress(last_status="FAILED") @mock.patch("documents.consumer.Consumer._write") def testPostSaveError(self, m): filename = self.get_test_file() m.side_effect = OSError("NO.") - try: - self.consumer.try_consume_file(filename) - except ConsumerError as e: - self.assertEqual(str(e), "sample.pdf: The following error occured while consuming sample.pdf: NO.") - else: - self.fail("Should raise exception") + + self.assertRaisesMessage( + ConsumerError, + "sample.pdf: The following error occured while consuming sample.pdf: NO.", + self.consumer.try_consume_file, + filename + ) + + self._assert_first_last_send_progress(last_status="FAILED") # file not deleted self.assertTrue(os.path.isfile(filename)) @@ -401,6 +433,8 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertEqual(document.title, "new docs") self.assertEqual(document.filename, "none/new docs.pdf") + self._assert_first_last_send_progress() + @override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") @mock.patch("documents.signals.handlers.generate_unique_filename") def testFilenameHandlingUnstableFormat(self, m): @@ -424,6 +458,8 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertIsNotNone(os.path.isfile(document.title)) self.assertTrue(os.path.isfile(document.source_path)) + self._assert_first_last_send_progress() + @mock.patch("documents.consumer.DocumentClassifier") def testClassifyDocument(self, m): correspondent = Correspondent.objects.create(name="test") @@ -443,19 +479,26 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertIn(t1, document.tags.all()) self.assertNotIn(t2, document.tags.all()) + self._assert_first_last_send_progress() + @override_settings(CONSUMER_DELETE_DUPLICATES=True) def test_delete_duplicate(self): dst = self.get_test_file() self.assertTrue(os.path.isfile(dst)) doc = self.consumer.try_consume_file(dst) + self._assert_first_last_send_progress() + self.assertFalse(os.path.isfile(dst)) self.assertIsNotNone(doc) + self._send_progress.reset_mock() + dst = self.get_test_file() self.assertTrue(os.path.isfile(dst)) self.assertRaises(ConsumerError, self.consumer.try_consume_file, dst) self.assertFalse(os.path.isfile(dst)) + self._assert_first_last_send_progress(last_status="FAILED") @override_settings(CONSUMER_DELETE_DUPLICATES=False) def test_no_delete_duplicate(self): @@ -471,6 +514,8 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertRaises(ConsumerError, self.consumer.try_consume_file, dst) self.assertTrue(os.path.isfile(dst)) + self._assert_first_last_send_progress(last_status="FAILED") + class PreConsumeTestCase(TestCase): From 5f7d817d69e4201bc1539c0272645f2ca3acd25d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 28 Jan 2021 22:06:02 +0100 Subject: [PATCH 083/898] localization for websockets --- src-ui/messages.xlf | 91 +++++++++++++++++++ .../app/services/consumer-status.service.ts | 22 ++++- src/documents/consumer.py | 50 ++++++---- src/documents/parsers.py | 5 + src/locale/en-us/LC_MESSAGES/django.po | 64 ++----------- 5 files changed, 154 insertions(+), 78 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 93f970d86..eab8ed80e 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1617,6 +1617,97 @@ <context context-type="linenumber">85</context> </context-group> </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> <context-group purpose="location"> diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 8151b1c18..026c3c64f 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -10,6 +10,22 @@ export enum FileStatusPhase { FAILED = 4 } +export const FILE_STATUS_MESSAGES = { + "document_already_exists": $localize`Document already exists.`, + "file_not_found": $localize`File not found.`, + "pre_consume_script_not_found": $localize`Pre-consume script does not exist.`, + "pre_consume_script_error": $localize`Error while executing pre-consume script.`, + "post_consume_script_not_found": $localize`Post-consume script does not exist.`, + "post_consume_script_error": $localize`Error while executing post-consume script.`, + "new_file": $localize`Received new file.`, + "unsupported_type": $localize`File type not supported.`, + "parsing_document": $localize`Processing document...`, + "generating_thumbnail": $localize`Generating thumbnail...`, + "parse_date": $localize`Retrieving date from document...`, + "save_document": $localize`Saving document...`, + "finished": $localize`Finished.` +} + export class FileStatus { filename: string @@ -116,7 +132,11 @@ export class ConsumerStatusService { let created = statusMessageGet.created status.updateProgress(FileStatusPhase.PROCESSING, statusMessage.current_progress, statusMessage.max_progress) - status.message = statusMessage.message + if (statusMessage.message && statusMessage.message in FILE_STATUS_MESSAGES) { + status.message = FILE_STATUS_MESSAGES[statusMessage.message] + } else if (statusMessage.message) { + status.message = statusMessage.message + } status.documentId = statusMessage.document_id if (created && statusMessage.status == 'STARTING') { diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 05043201b..146b11014 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -25,17 +25,30 @@ from .signals import ( document_consumption_started ) -from django.utils.translation import gettext as _ - class ConsumerError(Exception): pass +MESSAGE_DOCUMENT_ALREADY_EXISTS = "document_already_exists" +MESSAGE_FILE_NOT_FOUND = "file_not_found" +MESSAGE_PRE_CONSUME_SCRIPT_NOT_FOUND = "pre_consume_script_not_found" +MESSAGE_PRE_CONSUME_SCRIPT_ERROR = "pre_consume_script_error" +MESSAGE_POST_CONSUME_SCRIPT_NOT_FOUND = "post_consume_script_not_found" +MESSAGE_POST_CONSUME_SCRIPT_ERROR = "post_consume_script_error" +MESSAGE_NEW_FILE = "new_file" +MESSAGE_UNSUPPORTED_TYPE = "unsupported_type" +MESSAGE_PARSING_DOCUMENT = "parsing_document" +MESSAGE_GENERATING_THUMBNAIL = "generating_thumbnail" +MESSAGE_PARSE_DATE = "parse_date" +MESSAGE_SAVE_DOCUMENT = "save_document" +MESSAGE_FINISHED = "finished" + + class Consumer(LoggingMixin): def _send_progress(self, current_progress, max_progress, status, - message, document_id=None): + message=None, document_id=None): payload = { 'filename': os.path.basename(self.filename) if self.filename else None, # NOQA: E501 'task_id': self.task_id, @@ -69,7 +82,7 @@ class Consumer(LoggingMixin): def pre_check_file_exists(self): if not os.path.isfile(self.path): self._fail( - _("File not found"), + MESSAGE_FILE_NOT_FOUND, f"Cannot consume {self.path}: File not found." ) @@ -80,7 +93,7 @@ class Consumer(LoggingMixin): if settings.CONSUMER_DELETE_DUPLICATES: os.unlink(self.path) self._fail( - _("Document already exists"), + MESSAGE_DOCUMENT_ALREADY_EXISTS, f"Not consuming {self.filename}: It is a duplicate." ) @@ -96,7 +109,7 @@ class Consumer(LoggingMixin): if not os.path.isfile(settings.PRE_CONSUME_SCRIPT): self._fail( - _("Pre-consume script does not exist."), + MESSAGE_PRE_CONSUME_SCRIPT_NOT_FOUND, f"Configured pre-consume script " f"{settings.PRE_CONSUME_SCRIPT} does not exist.") @@ -104,7 +117,7 @@ class Consumer(LoggingMixin): Popen((settings.PRE_CONSUME_SCRIPT, self.path)).wait() except Exception as e: self._fail( - _("Error while executing pre-consume script"), + MESSAGE_PRE_CONSUME_SCRIPT_ERROR, f"Error while executing pre-consume script: {e}" ) @@ -114,7 +127,7 @@ class Consumer(LoggingMixin): if not os.path.isfile(settings.POST_CONSUME_SCRIPT): self._fail( - _("Post-consume script does not exist."), + MESSAGE_POST_CONSUME_SCRIPT_NOT_FOUND, f"Configured post-consume script " f"{settings.POST_CONSUME_SCRIPT} does not exist." ) @@ -134,7 +147,7 @@ class Consumer(LoggingMixin): )).wait() except Exception as e: self._fail( - _("Error while executing post-consume script"), + MESSAGE_POST_CONSUME_SCRIPT_ERROR, f"Error while executing post-consume script: {e}" ) @@ -158,7 +171,7 @@ class Consumer(LoggingMixin): self.override_tag_ids = override_tag_ids self.task_id = task_id or str(uuid.uuid4()) - self._send_progress(0, 100, 'STARTING', _('Received new file')) + self._send_progress(0, 100, 'STARTING', MESSAGE_NEW_FILE) # this is for grouping logging entries for this particular file # together. @@ -182,8 +195,7 @@ class Consumer(LoggingMixin): parser_class = get_parser_class_for_mime_type(mime_type) if not parser_class: self._fail( - _("File type %(type)s not supported") % - {'type': mime_type}, + MESSAGE_UNSUPPORTED_TYPE, f"Unsupported mime type {mime_type}" ) else: @@ -199,10 +211,10 @@ class Consumer(LoggingMixin): self.run_pre_consume_script() - def progress_callback(current_progress, max_progress, message): + def progress_callback(current_progress, max_progress): # recalculate progress to be within 20 and 80 p = int((current_progress / max_progress) * 50 + 20) - self._send_progress(p, 100, "WORKING", message) + self._send_progress(p, 100, "WORKING") # This doesn't parse the document yet, but gives us a parser. @@ -219,13 +231,13 @@ class Consumer(LoggingMixin): archive_path = None try: - self._send_progress(20, 100, 'WORKING', _('Parsing document...')) + self._send_progress(20, 100, 'WORKING', MESSAGE_PARSING_DOCUMENT) self.log("debug", "Parsing {}...".format(self.filename)) document_parser.parse(self.path, mime_type, self.filename) self.log("debug", f"Generating thumbnail for {self.filename}...") self._send_progress(70, 100, 'WORKING', - _('Generating thumbnail...')) + MESSAGE_GENERATING_THUMBNAIL) thumbnail = document_parser.get_optimised_thumbnail( self.path, mime_type) @@ -233,7 +245,7 @@ class Consumer(LoggingMixin): date = document_parser.get_date() if not date: self._send_progress(90, 100, 'WORKING', - _('Getting date from document...')) + MESSAGE_PARSE_DATE) date = parse_date(self.filename, text) archive_path = document_parser.get_archive_path() @@ -258,7 +270,7 @@ class Consumer(LoggingMixin): "warning", f"Cannot classify documents: {e}.") classifier = None - self._send_progress(95, 100, 'WORKING', _('Saving document...')) + self._send_progress(95, 100, 'WORKING', MESSAGE_SAVE_DOCUMENT) # now that everything is done, we can start to store the document # in the system. This will be a transaction and reasonably fast. try: @@ -327,7 +339,7 @@ class Consumer(LoggingMixin): "Document {} consumption finished".format(document) ) - self._send_progress(100, 100, 'SUCCESS', _('Finished.'), document.id) + self._send_progress(100, 100, 'SUCCESS', MESSAGE_FINISHED, document.id) return document diff --git a/src/documents/parsers.py b/src/documents/parsers.py index ddad6897a..3f0879b3c 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -273,6 +273,11 @@ class DocumentParser(LoggingMixin): self.date = None self.progress_callback = progress_callback + def progress(self, current, max): + print(self.progress_callback) + if self.progress_callback: + self.progress_callback(current, max) + def extract_metadata(self, document_path, mime_type): return [] diff --git a/src/locale/en-us/LC_MESSAGES/django.po b/src/locale/en-us/LC_MESSAGES/django.po index 8513c577b..fdf3fd809 100644 --- a/src/locale/en-us/LC_MESSAGES/django.po +++ b/src/locale/en-us/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-27 17:57+0100\n" +"POT-Creation-Date: 2021-01-28 22:02+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" @@ -21,60 +21,6 @@ msgstr "" msgid "Documents" msgstr "" -#: documents/consumer.py:72 -msgid "File not found" -msgstr "Datei nicht gefunden" - -#: documents/consumer.py:83 -msgid "Document already exists" -msgstr "" - -#: documents/consumer.py:99 -msgid "Pre-consume script does not exist." -msgstr "" - -#: documents/consumer.py:107 -msgid "Error while executing pre-consume script" -msgstr "" - -#: documents/consumer.py:117 -msgid "Post-consume script does not exist." -msgstr "" - -#: documents/consumer.py:137 -msgid "Error while executing post-consume script" -msgstr "" - -#: documents/consumer.py:161 -msgid "Received new file" -msgstr "" - -#: documents/consumer.py:185 documents/serialisers.py:383 -#, fuzzy, python-format -#| msgid "File type {type} not supported." -msgid "File type %(type)s not supported" -msgstr "Dateityp {type} wird nicht unterstützt" - -#: documents/consumer.py:222 -msgid "Parsing document..." -msgstr "" - -#: documents/consumer.py:228 -msgid "Generating thumbnail..." -msgstr "" - -#: documents/consumer.py:236 -msgid "Getting date from document..." -msgstr "" - -#: documents/consumer.py:261 -msgid "Saving document..." -msgstr "" - -#: documents/consumer.py:330 -msgid "Finished." -msgstr "" - #: documents/models.py:33 msgid "Any word" msgstr "" @@ -392,6 +338,11 @@ msgstr "" msgid "filter rules" msgstr "" +#: documents/serialisers.py:383 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + #: documents/templates/index.html:20 msgid "Paperless-ng is loading..." msgstr "" @@ -674,6 +625,3 @@ msgstr "" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "" - -#~ msgid "Document is a duplicate" -#~ msgstr "Dokument existiert bereits" From c699acec1c6f669f51537765d2c6a02f22e0e600 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 28 Jan 2021 22:22:25 +0100 Subject: [PATCH 084/898] filesystem permission checks now issue warnings instead of errors, improves NFS compatibility --- src/paperless/checks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless/checks.py b/src/paperless/checks.py index 1329ad679..df4d45e38 100644 --- a/src/paperless/checks.py +++ b/src/paperless/checks.py @@ -22,7 +22,7 @@ def path_check(var, directory): exists_hint.format(directory) )) elif not os.access(directory, os.W_OK | os.X_OK): - messages.append(Error( + messages.append(Warning( writeable_message.format(var), writeable_hint.format(directory) )) From e5a092efb38543e23f7114def4e6cdf29884fc67 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 28 Jan 2021 22:38:12 +0100 Subject: [PATCH 085/898] add missing quotes --- src-ui/messages.xlf | 14 +++++++------- .../bulk-editor/bulk-editor.component.ts | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 6175cf700..8bc640c33 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1124,6 +1124,13 @@ <context context-type="linenumber">73</context> </context-group> </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> @@ -1132,13 +1139,6 @@ </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> - <trans-unit id="7894972847287473517" datatype="html"> - <source>"<x id="PH" equiv-text="i.name"/>"</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> - </context-group> - </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> <context-group purpose="location"> diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts index 6b2598fe8..04fc2a978 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts @@ -109,7 +109,7 @@ export class BulkEditorComponent { if (items.length == 0) { return "" } else if (items.length == 1) { - return items[0].name + return $localize`"${items[0].name}"` } else if (items.length == 2) { return $localize`:This is for messages like 'modify "tag1" and "tag2"':"${items[0].name}" and "${items[1].name}"` } else { From 014c0a4fb851754b0cd5d059ad0733bbd9e50b11 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 29 Jan 2021 00:26:17 +0100 Subject: [PATCH 086/898] not sure what happened with reportlab 3.5.60, maybe a bad release. --- Pipfile.lock | 86 ++++++++++++++++++++++++------------------------ requirements.txt | 2 +- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 04e8b7fe0..ff9e96717 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -926,50 +926,50 @@ }, "reportlab": { "hashes": [ - "sha256:10d0cd2ab669fbad8b766db57066270296396caf515731643e7c7e732159a432", - "sha256:21508065492fbb750aa6d07297a2ba4bcacb418c84898fe892e12bdceefc3b9a", - "sha256:21c433905569af36bc220490a33f8f78442fd71c1bea3d021f851623c8089a78", - "sha256:236c4142474a59e4564b0e7c32e4d7b9cfc0dc2236ffa721ae97a4dbc2667d10", - "sha256:287b241a9d4189e7bfffd68aea0efd701d703bccee6686b9779bf16e22e9a2ad", - "sha256:2bc48a3cad6dd3cd1b5cd09526dad50afbda14afadd6fb40635a5227246bbe26", - "sha256:2e4631c49ec72f6a84502cda1710e988fa3027250e17c26713e543af31fff58a", - "sha256:2fd3305a75502d11942a9629cf6af96660a508f19adc4abaac5549909d1db1b3", - "sha256:32be7f9a55b8dfd91924730644632d19352fd9e0bb77cd03eba8a34fc846c4f6", - "sha256:33dc663ac3713e9d2f5a96b20412e16fd00b688b1b5a8057436e3fce69c2a59d", - "sha256:3d83cffa1211a7ae4912bfe3ac36051e31371cfb63b716e458c520da9f645fd9", - "sha256:3f9d56f5778b54260ce79878761b1f98267677702233daa26edd9f06f3be85c0", - "sha256:49a599f1aae7d91649fb10dbe070614740a60e4d2b65882a002dc20a7eba9f6f", - "sha256:4d5d62d49f3632cf437ac28ad52a8274fe6392ea2c48d294d2e92f1258d1479e", - "sha256:552ea83656f18e52ee073aee04d7e3f4d0eb71147f6882ae4fc15681d8e6ab1c", - "sha256:605f4a49ee313eabae4db4694d073dbb0778a0eccbc6d090e58c5a4db862c2a8", - "sha256:6289057afa4023f58d7977d105d09503c2cb1031e248fff52b44e41914d176cf", - "sha256:669526b580d52c05efbd45a8c9f1adf9370b8818bc2d48adec661ea7037415d4", - "sha256:6fc5f21d1383b552dc5b3eb774aaaf14cb7f8f34f15ea45772f72867dfaeecc6", - "sha256:74c7499fdda682028bb1b01d7ca89d813175c0f8c18d3ae9924c6393987ea4ef", - "sha256:75c0b6cf47c199f1e69283b0678b47537cc15af31acbad783fffe2c9cfa6a626", - "sha256:7b3ec1255c940fabfdb05577a4f148cca54943215cecb24efd5840a8ecb618ce", - "sha256:7d39eaca932b1d51de84c387616462913fa988c02a4a462798098f62edcf1e21", - "sha256:81e2faddfde7a21154d1a08e28e3d9b820274afa282b7ed17fcf1e9d7b4aa7a1", - "sha256:8aca938409fc99a9e79514cb97b3478780b261ff74a058c75a3a12552b1d6b9a", - "sha256:8f963222cc0c302ed5a15766ea00ff470c80c47d691e828ef21032df95e8a2ff", - "sha256:9be1ec218966e2e9982e73109863d91e3e4b9e7649ae6be0bf98b78c52a5a330", - "sha256:aa24f56c504d41982eb212f79669c05d4452f7736618dd33ba4167da0b5578b7", - "sha256:aa9caa395823130b360b5f3184eb25c9f1ea4fb51ab0370c2e693dc139cd7d83", - "sha256:b2f2bf419229bda5d6c8a10219ad1d984d2a6cd246acf613559d4a5fbcee0aea", - "sha256:b73f85e09e4271aee192489f5a8a7c33a1a82f42702cd0886f8f630600a23ad8", - "sha256:c3fac0186c18d7d5285f508d79bd86f751526190728ef2a33107568533f9aff0", - "sha256:c7ea886aa8dc3d3adb0c32ee87522821dd8ead2bac6d41e0481c1d911049c3c9", - "sha256:c9a487b646ac367d15bf6749deffa04ecbe339ba067d29414f206a7516a0a775", - "sha256:d0ae3cd60b659da41bb4962facec2ed3c8cfb3cedc85c5993e6299938134fc94", - "sha256:d6b900b1dc0d3c7b7f69fde25c8e60cb978b774056383c4a03bb38c829342299", - "sha256:d6feecad778e2a3d5a5ea48b027063e9baf73c6454235c1c1556b59c114c90cb", - "sha256:de5d98f41ffbe567717c334a9866c0f289a02cef37a78323cb5f8a86eecb6a8c", - "sha256:e47daf974b68fdcd2ffb5442ea5f1dd849eeaf6f9d4915128bf5374467e7b63a", - "sha256:e52536cba231fb3dd0628abf98b23519778e1247d4d69553d879eea6159b648d", - "sha256:f3181284502207e78eb472d00e8f9e84f43a7fe502821d2d76f3dd7da1d5e081", - "sha256:fc900dbc8f020305e15781210e64f6e96c1f9ca0fa00c4a0ccc1174cc44c5a5b" + "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1", + "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a", + "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935", + "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881", + "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd", + "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b", + "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8", + "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b", + "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d", + "sha256:1e484ce83dae26cb40fcbd312d45b8ba921de7856a00339d867dd4ecf145a1e7", + "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378", + "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06", + "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69", + "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0", + "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f", + "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f", + "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad", + "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491", + "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8", + "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53", + "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22", + "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb", + "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121", + "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c", + "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431", + "sha256:8850eba6de6eb813036eb8dce353e40d60c8af48bbce107de82770b10d3aa525", + "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef", + "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454", + "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a", + "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5", + "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057", + "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536", + "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c", + "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be", + "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75", + "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4", + "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2", + "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e", + "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16", + "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8", + "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc", + "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442" ], - "version": "==3.5.60" + "version": "==3.5.59" }, "requests": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index d6f45fea4..c3f32002b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -75,7 +75,7 @@ pytz==2020.5 pyyaml==5.4.1 redis==3.5.3 regex==2020.11.13 -reportlab==3.5.60 +reportlab==3.5.59 requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 scipy==1.5.4 From f2820e4b18e5eff63447bd40109d056672bb6477 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 29 Jan 2021 12:54:54 +0100 Subject: [PATCH 087/898] remove dead code --- src/documents/views.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index b99bf11c7..d6a894db6 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -132,10 +132,6 @@ class DocumentTypeViewSet(ModelViewSet): ordering_fields = ("name", "matching_algorithm", "match", "document_count") -class BulkEditForm(object): - pass - - class DocumentViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, From 9eec92bb3ecb02af27ef391ee3cb4eafb3907388 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 29 Jan 2021 12:42:54 +0000 Subject: [PATCH 088/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index 4f09eab72..b5f602c7f 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -1283,6 +1283,14 @@ <context context-type="linenumber">73</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> <target>"<x equiv-text="items[0].name" id="PH"/>" et "<x equiv-text="items[1].name" id="PH_1"/>"</target> @@ -1292,14 +1300,6 @@ </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="i.name" id="PH"/>"</source> - <target>"<x equiv-text="i.name" id="PH"/>"</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="760986369763309193"> <source>, </source> <target>, </target> From c5000f6c7fdcb259fd6f201716986abfa7e49172 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 29 Jan 2021 16:45:23 +0100 Subject: [PATCH 089/898] add support for suggestions --- src/documents/tests/test_api.py | 28 +++++++++++++ src/documents/views.py | 73 +++++++++++++++++++++++---------- 2 files changed, 79 insertions(+), 22 deletions(-) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 2b332a873..9e4b77189 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -590,6 +590,10 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(len(meta['original_metadata']), 0) self.assertGreater(len(meta['archive_metadata']), 0) + def test_get_metadata_invalid_doc(self): + response = self.client.get(f"/api/documents/34576/metadata/") + self.assertEqual(response.status_code, 404) + def test_get_metadata_no_archive(self): doc = Document.objects.create(title="test", filename="file.pdf", mime_type="application/pdf") @@ -605,6 +609,30 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertGreater(len(meta['original_metadata']), 0) self.assertIsNone(meta['archive_metadata']) + def test_get_empty_suggestions(self): + doc = Document.objects.create(title="test", mime_type="application/pdf") + + response = self.client.get(f"/api/documents/{doc.pk}/suggestions/") + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data, {'correspondents': [], 'tags': [], 'document_types': []}) + + def test_get_suggestions_invalid_doc(self): + response = self.client.get(f"/api/documents/34676/suggestions/") + self.assertEqual(response.status_code, 404) + + @mock.patch("documents.views.match_correspondents") + @mock.patch("documents.views.match_tags") + @mock.patch("documents.views.match_document_types") + def test_get_suggestions(self, match_document_types, match_tags, match_correspondents): + doc = Document.objects.create(title="test", mime_type="application/pdf", content="this is an invoice!") + match_tags.return_value = [Tag(id=56), Tag(id=123)] + match_document_types.return_value = [DocumentType(id=23)] + match_correspondents.return_value = [Correspondent(id=88), Correspondent(id=2)] + + response = self.client.get(f"/api/documents/{doc.pk}/suggestions/") + self.assertEqual(response.data, {'correspondents': [88,2], 'tags': [56,123], 'document_types': [23]}) + def test_saved_views(self): u1 = User.objects.create_user("user1") u2 = User.objects.create_user("user2") diff --git a/src/documents/views.py b/src/documents/views.py index d6a894db6..43ae2b103 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -34,6 +34,7 @@ from rest_framework.viewsets import ( import documents.index as index from paperless.db import GnuPG from paperless.views import StandardPagination +from .classifier import DocumentClassifier, IncompatibleClassifierVersionError from .filters import ( CorrespondentFilterSet, DocumentFilterSet, @@ -41,6 +42,7 @@ from .filters import ( DocumentTypeFilterSet, LogFilterSet ) +from .matching import match_correspondents, match_tags, match_document_types from .models import Correspondent, Document, Log, Tag, DocumentType, SavedView from .parsers import get_parser_class_for_mime_type from .serialisers import ( @@ -225,31 +227,58 @@ class DocumentViewSet(RetrieveModelMixin, def metadata(self, request, pk=None): try: doc = Document.objects.get(pk=pk) - - meta = { - "original_checksum": doc.checksum, - "original_size": os.stat(doc.source_path).st_size, - "original_mime_type": doc.mime_type, - "media_filename": doc.filename, - "has_archive_version": os.path.isfile(doc.archive_path), - "original_metadata": self.get_metadata( - doc.source_path, doc.mime_type) - } - - if doc.archive_checksum and os.path.isfile(doc.archive_path): - meta['archive_checksum'] = doc.archive_checksum - meta['archive_size'] = os.stat(doc.archive_path).st_size, - meta['archive_metadata'] = self.get_metadata( - doc.archive_path, "application/pdf") - else: - meta['archive_checksum'] = None - meta['archive_size'] = None - meta['archive_metadata'] = None - - return Response(meta) except Document.DoesNotExist: raise Http404() + meta = { + "original_checksum": doc.checksum, + "original_size": os.stat(doc.source_path).st_size, + "original_mime_type": doc.mime_type, + "media_filename": doc.filename, + "has_archive_version": os.path.isfile(doc.archive_path), + "original_metadata": self.get_metadata( + doc.source_path, doc.mime_type) + } + + if doc.archive_checksum and os.path.isfile(doc.archive_path): + meta['archive_checksum'] = doc.archive_checksum + meta['archive_size'] = os.stat(doc.archive_path).st_size, + meta['archive_metadata'] = self.get_metadata( + doc.archive_path, "application/pdf") + else: + meta['archive_checksum'] = None + meta['archive_size'] = None + meta['archive_metadata'] = None + + return Response(meta) + + @action(methods=['get'], detail=True) + def suggestions(self, request, pk=None): + try: + doc = Document.objects.get(pk=pk) + except Document.DoesNotExist: + raise Http404() + + try: + classifier = DocumentClassifier() + classifier.reload() + except (OSError, EOFError, IncompatibleClassifierVersionError) as e: + logging.getLogger(__name__).warning( + "Cannot load classifier: Not providing auto matching " + "suggestions" + ) + classifier = None + + return Response({ + "correspondents": [ + c.id for c in match_correspondents(doc, classifier) + ], + "tags": [t.id for t in match_tags(doc, classifier)], + "document_types": [ + dt.id for dt in match_document_types(doc, classifier) + ] + }) + @action(methods=['get'], detail=True) def preview(self, request, pk=None): try: From 624ea65fb3f05abd2a602144546ca0958ab1c6c5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 29 Jan 2021 16:48:51 +0100 Subject: [PATCH 090/898] frontend support for suggestions #264 --- src-ui/messages.xlf | 31 ++++++++------ .../common/input/select/select.component.html | 8 ++++ .../common/input/select/select.component.ts | 13 +++++- .../common/input/tags/tags.component.html | 23 ++++++----- .../common/input/tags/tags.component.ts | 41 +++++++++++-------- .../document-detail.component.html | 8 ++-- .../document-detail.component.ts | 7 ++++ .../data/paperless-document-suggestions.ts | 9 ++++ .../src/app/services/rest/document.service.ts | 5 +++ 9 files changed, 102 insertions(+), 43 deletions(-) create mode 100644 src-ui/src/app/data/paperless-document-suggestions.ts diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 8bc640c33..d105ae31d 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -146,35 +146,35 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">192</context> + <context context-type="linenumber">199</context> </context-group> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">193</context> + <context context-type="linenumber">200</context> </context-group> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">194</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">196</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">210</context> </context-group> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> @@ -1288,6 +1288,13 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit id="993900b5f9b0d14c7dbf3afd308afcfc1be5c356" datatype="html"> + <source>Suggested:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> <context-group purpose="location"> @@ -1509,49 +1516,49 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit id="2056433880533904076" datatype="html"> diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index aa500d0d1..973b09a55 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -22,4 +22,12 @@ </div> </div> <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> + <small *ngIf="getSuggestions().length > 0"> + <span i18n>Suggested:</span>  + <ng-container *ngFor="let s of getSuggestions()"> + <a (click)="value = s.id; onChange(value)" [routerLink]="">{{s.name}}</a>  + </ng-container> + + + </small> </div> diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 18f30cf6e..e02aaab72 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -30,11 +30,22 @@ export class SelectComponent extends AbstractInputComponent<number> { @Input() allowNull: boolean = false + @Input() + suggestions: number[] + @Output() createNew = new EventEmitter() - + showPlusButton(): boolean { return this.createNew.observers.length > 0 } + getSuggestions() { + if (this.suggestions && this.items) { + return this.suggestions.filter(id => id != this.value).map(id => this.items.find(item => item.id == id)) + } else { + return [] + } + } + } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index c9a0c96d6..22a7e640a 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -2,30 +2,25 @@ <label for="tags" i18n>Tags</label> <div class="input-group flex-nowrap"> - <ng-select name="tags" [items]="tags" bindLabel="name" bindValue="id" [(ngModel)]="displayValue" + <ng-select name="tags" [items]="tags" bindLabel="name" bindValue="id" [(ngModel)]="value" [multiple]="true" [closeOnSelect]="false" [clearSearchOnAdd]="true" - [disabled]="disabled" [hideSelected]="true" - (change)="ngSelectChange()"> + (change)="onChange(value)" + (blur)="onTouched()"> <ng-template ng-label-tmp let-item="item"> <span class="tag-wrap tag-wrap-delete" (click)="removeTag(item.id)"> <svg width="1.2em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <use xlink:href="assets/bootstrap-icons.svg#x"/> </svg> - <app-tag style="background-color: none;" [tag]="getTag(item.id)"></app-tag> + <app-tag *ngIf="item.id && tags" style="background-color: none;" [tag]="getTag(item.id)"></app-tag> </span> </ng-template> <ng-template ng-option-tmp let-item="item" let-index="index" let-search="searchTerm"> <div class="tag-wrap"> - <div class="selected-icon d-inline-block mr-1"> - <svg *ngIf="displayValue.includes(item.id)" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> - <use xlink:href="assets/bootstrap-icons.svg#check"/> - </svg> - </div> - <app-tag class="mr-2" [tag]="getTag(item.id)"></app-tag> + <app-tag *ngIf="item.id && tags" class="mr-2" [tag]="getTag(item.id)"></app-tag> </div> </ng-template> </ng-select> @@ -39,5 +34,13 @@ </div> </div> <small class="form-text text-muted" *ngIf="hint">{{hint}}</small> + <small *ngIf="getSuggestions().length > 0"> + <span i18n>Suggested:</span>  + <ng-container *ngFor="let tag of getSuggestions()"> + <a (click)="addTag(tag.id)" [routerLink]="">{{tag.name}}</a>  + </ng-container> + + + </small> </div> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 5501ac5a6..f77d0570d 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -26,9 +26,6 @@ export class TagsComponent implements OnInit, ControlValueAccessor { writeValue(newValue: number[]): void { this.value = newValue - if (this.tags) { - this.displayValue = newValue - } } registerOnChange(fn: any): void { this.onChange = fn; @@ -43,7 +40,6 @@ export class TagsComponent implements OnInit, ControlValueAccessor { ngOnInit(): void { this.tagService.listAll().subscribe(result => { this.tags = result.results - this.displayValue = this.value }) } @@ -53,23 +49,28 @@ export class TagsComponent implements OnInit, ControlValueAccessor { @Input() hint - value: number[] + @Input() + suggestions: number[] - displayValue: number[] = [] + value: number[] tags: PaperlessTag[] getTag(id) { - return this.tags.find(tag => tag.id == id) + if (this.tags) { + return this.tags.find(tag => tag.id == id) + } else { + return null + } } removeTag(id) { - let index = this.displayValue.indexOf(id) + let index = this.value.indexOf(id) if (index > -1) { - let oldValue = this.displayValue + let oldValue = this.value oldValue.splice(index, 1) - this.displayValue = [...oldValue] - this.onChange(this.displayValue) + this.value = [...oldValue] + this.onChange(this.value) } } @@ -79,15 +80,23 @@ export class TagsComponent implements OnInit, ControlValueAccessor { modal.componentInstance.success.subscribe(newTag => { this.tagService.listAll().subscribe(tags => { this.tags = tags.results - this.displayValue = [...this.displayValue, newTag.id] - this.onChange(this.displayValue) + this.value = [...this.value, newTag.id] + this.onChange(this.value) }) }) } - ngSelectChange() { - this.value = this.displayValue - this.onChange(this.displayValue) + getSuggestions() { + if (this.suggestions && this.tags) { + return this.suggestions.filter(id => !this.value.includes(id)).map(id => this.tags.find(tag => tag.id == id)) + } else { + return [] + } + } + + addTag(id) { + this.value = [...this.value, id] + this.onChange(this.value) } } diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 639b9e260..2814a1242 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -60,10 +60,10 @@ <app-input-number i18n-title title="Archive serial number" [error]="error?.archive_serial_number" formControlName='archive_serial_number'></app-input-number> <app-input-date-time i18n-titleDate titleDate="Date created" formControlName="created"></app-input-date-time> <app-input-select [items]="correspondents" i18n-title title="Correspondent" formControlName="correspondent" [allowNull]="true" - (createNew)="createCorrespondent()"></app-input-select> + (createNew)="createCorrespondent()" [suggestions]="suggestions?.correspondents"></app-input-select> <app-input-select [items]="documentTypes" i18n-title title="Document type" formControlName="document_type" [allowNull]="true" - (createNew)="createDocumentType()"></app-input-select> - <app-input-tags formControlName="tags"></app-input-tags> + (createNew)="createDocumentType()" [suggestions]="suggestions?.document_types"></app-input-select> + <app-input-tags formControlName="tags" [suggestions]="suggestions?.tags"></app-input-tags> </ng-template> </li> @@ -145,6 +145,6 @@ <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview-sticky" width="100%"></object> </ng-container> - + </div> </div> diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index aa2308eac..a7cce715e 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -19,6 +19,7 @@ import { PDFDocumentProxy } from 'ng2-pdf-viewer'; import { ToastService } from 'src/app/services/toast.service'; import { TextComponent } from '../common/input/text/text.component'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; +import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions'; @Component({ selector: 'app-document-detail', @@ -40,6 +41,8 @@ export class DocumentDetailComponent implements OnInit { documentId: number document: PaperlessDocument metadata: PaperlessDocumentMetadata + suggestions: PaperlessDocumentSuggestions + title: string previewUrl: string downloadUrl: string @@ -95,6 +98,7 @@ export class DocumentDetailComponent implements OnInit { this.previewUrl = this.documentsService.getPreviewUrl(this.documentId) this.downloadUrl = this.documentsService.getDownloadUrl(this.documentId) this.downloadOriginalUrl = this.documentsService.getDownloadUrl(this.documentId, true) + this.suggestions = null if (this.openDocumentService.getOpenDocument(this.documentId)) { this.updateComponent(this.openDocumentService.getOpenDocument(this.documentId)) } else { @@ -112,6 +116,9 @@ export class DocumentDetailComponent implements OnInit { this.documentsService.getMetadata(doc.id).subscribe(result => { this.metadata = result }) + this.documentsService.getSuggestions(doc.id).subscribe(result => { + this.suggestions = result + }) this.title = this.documentTitlePipe.transform(doc.title) this.documentForm.patchValue(doc) } diff --git a/src-ui/src/app/data/paperless-document-suggestions.ts b/src-ui/src/app/data/paperless-document-suggestions.ts new file mode 100644 index 000000000..71459eff2 --- /dev/null +++ b/src-ui/src/app/data/paperless-document-suggestions.ts @@ -0,0 +1,9 @@ +export interface PaperlessDocumentSuggestions { + + tags?: number[] + + correspondents?: number[] + + document_types?: number[] + +} \ No newline at end of file diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index dd2c32fa8..19b18cfeb 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -11,6 +11,7 @@ import { CorrespondentService } from './correspondent.service'; import { DocumentTypeService } from './document-type.service'; import { TagService } from './tag.service'; import { FILTER_RULE_TYPES } from 'src/app/data/filter-rule-type'; +import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions'; export const DOCUMENT_SORT_FIELDS = [ { field: 'archive_serial_number', name: $localize`ASN` }, @@ -129,4 +130,8 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> return this.http.post<SelectionData>(this.getResourceUrl(null, 'selection_data'), {"documents": ids}) } + getSuggestions(id: number): Observable<PaperlessDocumentSuggestions> { + return this.http.get<PaperlessDocumentSuggestions>(this.getResourceUrl(id, 'suggestions')) + } + } From dda384f4a34e972930f83064bf30fadfaaefe41d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 29 Jan 2021 16:57:00 +0100 Subject: [PATCH 091/898] update messages --- src-ui/messages.xlf | 4 ++-- .../app/components/common/input/select/select.component.html | 2 +- .../src/app/components/common/input/tags/tags.component.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index d105ae31d..0ad552100 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1288,8 +1288,8 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> - <trans-unit id="993900b5f9b0d14c7dbf3afd308afcfc1be5c356" datatype="html"> - <source>Suggested:</source> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 973b09a55..540429e89 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -23,7 +23,7 @@ </div> <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> <small *ngIf="getSuggestions().length > 0"> - <span i18n>Suggested:</span>  + <span i18n>Suggestions:</span>  <ng-container *ngFor="let s of getSuggestions()"> <a (click)="value = s.id; onChange(value)" [routerLink]="">{{s.name}}</a>  </ng-container> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 22a7e640a..677b9f4d1 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -35,7 +35,7 @@ </div> <small class="form-text text-muted" *ngIf="hint">{{hint}}</small> <small *ngIf="getSuggestions().length > 0"> - <span i18n>Suggested:</span>  + <span i18n>Suggestions:</span>  <ng-container *ngFor="let tag of getSuggestions()"> <a (click)="addTag(tag.id)" [routerLink]="">{{tag.name}}</a>  </ng-container> From b612bba4f3fd0b0caff145ddba65f31b3e41b10c Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 29 Jan 2021 18:59:00 +0000 Subject: [PATCH 092/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 54 ++++++++++++++++++------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index a898e4630..b6e2708ba 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -147,7 +147,7 @@ </trans-unit> <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> <source>Created</source> - <target>Erstellt</target> + <target>Ausgestellt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> @@ -166,7 +166,7 @@ <target>Löschen bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">192</context> + <context context-type="linenumber">199</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> @@ -174,7 +174,7 @@ <target>Möchten Sie das Dokument "<x equiv-text="this.document.title" id="PH"/>" wirklich löschen?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">193</context> + <context context-type="linenumber">200</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6691075929777935948"> @@ -182,7 +182,7 @@ <target>Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">194</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="719892092227206532"> @@ -190,7 +190,7 @@ <target>Dokument löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">196</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1844801255494293730"> @@ -198,7 +198,7 @@ <target>Fehler beim Löschen des Dokuments: <x equiv-text="JSON.stringify(error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">210</context> </context-group> </trans-unit> <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> @@ -307,7 +307,7 @@ </trans-unit> <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> <source>Date created</source> - <target>Erstellt am</target> + <target>Ausgestellt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> @@ -1283,6 +1283,14 @@ <context context-type="linenumber">73</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> <target>"<x equiv-text="items[0].name" id="PH"/>" und "<x equiv-text="items[1].name" id="PH_1"/>"</target> @@ -1292,14 +1300,6 @@ </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="i.name" id="PH"/>"</source> - <target>"<x equiv-text="i.name" id="PH"/>"</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="760986369763309193"> <source>, </source> <target>, </target> @@ -1470,6 +1470,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Vorschläge:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> <source>Save current view</source> <target>Aktuelle Ansicht speichern</target> @@ -1723,7 +1731,7 @@ <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2691296884221415710"> @@ -1731,7 +1739,7 @@ <target>Korrespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5701618810648052610"> @@ -1739,7 +1747,7 @@ <target>Titel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> @@ -1747,15 +1755,15 @@ <target>Dokumenttyp</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4207916966377787111"> <source>Created</source> - <target>Erstellt am</target> + <target>Ausgestellt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit datatype="html" id="231679111972850796"> @@ -1763,7 +1771,7 @@ <target>Hinzugefügt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3553216189604488439"> @@ -1771,7 +1779,7 @@ <target>Geändert am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2056433880533904076"> From 9465ec250c368bec3e213658b4ac7954a742c7c9 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 29 Jan 2021 19:57:40 +0000 Subject: [PATCH 093/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 32 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index b5f602c7f..62dbad342 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -166,7 +166,7 @@ <target>Confirmer la suppression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">192</context> + <context context-type="linenumber">199</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> @@ -174,7 +174,7 @@ <target>Voulez-vous vraiment supprimer le document "<x equiv-text="this.document.title" id="PH"/>" ?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">193</context> + <context context-type="linenumber">200</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6691075929777935948"> @@ -182,7 +182,7 @@ <target>Les fichiers liés à ce document seront supprimés définitivement. Cette action est irréversible.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">194</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="719892092227206532"> @@ -190,7 +190,7 @@ <target>Supprimer le document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">196</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1844801255494293730"> @@ -198,7 +198,7 @@ <target>Une erreur s'est produite lors de la suppression du document : <x equiv-text="JSON.stringify(error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">210</context> </context-group> </trans-unit> <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> @@ -1470,6 +1470,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Suggestions : </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> <source>Save current view</source> <target>Enregistrer la vue actuelle</target> @@ -1723,7 +1731,7 @@ <target>NSA</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2691296884221415710"> @@ -1731,7 +1739,7 @@ <target>Correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5701618810648052610"> @@ -1739,7 +1747,7 @@ <target>Titre</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> @@ -1747,7 +1755,7 @@ <target>Type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4207916966377787111"> @@ -1755,7 +1763,7 @@ <target>Date de création</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit datatype="html" id="231679111972850796"> @@ -1763,7 +1771,7 @@ <target>Date d'ajout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3553216189604488439"> @@ -1771,7 +1779,7 @@ <target>Date de modification</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2056433880533904076"> From 88c2c8df5304690949823f4944fe7273e6a140f3 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Wed, 27 Jan 2021 07:17:46 +0100 Subject: [PATCH 094/898] force flush on temp file during consumption file.write() does not guarantee that a file handle contains anything without calling an accompanying file.flush() For typical files that are larger than the OS-file buffer, this is no problem For small files (e.g. 64 characters in a .TXT), this race condition leads to `inode/x-empty` because the file inode is created, but no content is written to it --- ansible/molecule/default/verify.yml | 6 +----- src/documents/views.py | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index 1b3a436ca..4d7e30f4d 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -29,9 +29,9 @@ document: content: "{{ content }}" filename: "{{ filename }}.txt" - mime_type: text/plain headers: Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' + Content-Type: text/plain return_content: yes register: post_document failed_when: "'OK' not in post_document.content" @@ -45,10 +45,6 @@ register: logs failed_when: "('Consuming ' + filename + '.txt') not in logs.content" - - name: sleep 5 seconds - pause: - seconds: 5 - - name: verify uploaded document has been consumed uri: url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" diff --git a/src/documents/views.py b/src/documents/views.py index b99bf11c7..7aadba36d 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -383,6 +383,7 @@ class PostDocumentView(APIView): dir=settings.SCRATCH_DIR, delete=False) as f: f.write(doc_data) + f.flush() os.utime(f.name, times=(t, t)) async_task("documents.tasks.consume_file", From c309da2603b7a0db6fdd3b632f0328d3cb11e2ac Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sat, 30 Jan 2021 12:20:55 +0100 Subject: [PATCH 095/898] DEBUG - force newline in .txt --- ansible/molecule/default/verify.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index 4d7e30f4d..fde2e8905 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -17,7 +17,7 @@ - name: generate random name and content set_fact: - content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}" + content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}\n" filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}" - name: check if document posting works From 169eae0b7b1a78586acd691282f0b4b55d35a1a4 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sat, 30 Jan 2021 12:50:05 +0100 Subject: [PATCH 096/898] DEBUG - force flush 2nd try --- ansible/molecule/default/verify.yml | 2 +- src/documents/views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index fde2e8905..4d7e30f4d 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -17,7 +17,7 @@ - name: generate random name and content set_fact: - content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}\n" + content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}" filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}" - name: check if document posting works diff --git a/src/documents/views.py b/src/documents/views.py index 7aadba36d..808ecb925 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -381,9 +381,9 @@ class PostDocumentView(APIView): with tempfile.NamedTemporaryFile(prefix="paperless-upload-", dir=settings.SCRATCH_DIR, + buffering=0, delete=False) as f: f.write(doc_data) - f.flush() os.utime(f.name, times=(t, t)) async_task("documents.tasks.consume_file", From 45c4fe4709a912bcf18c1a8903a0ed445f9a2706 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sat, 30 Jan 2021 13:58:54 +0100 Subject: [PATCH 097/898] DEBUG - use very long txt file --- ansible/molecule/default/verify.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index 4d7e30f4d..185840783 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -17,7 +17,7 @@ - name: generate random name and content set_fact: - content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}" + content: "{{ lookup('password', '/dev/null length=65536 chars=ascii_letters') }}" filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}" - name: check if document posting works @@ -45,6 +45,10 @@ register: logs failed_when: "('Consuming ' + filename + '.txt') not in logs.content" + - name: sleep till consumption finished + pause: + seconds: 10 + - name: verify uploaded document has been consumed uri: url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" From a37e41ef0c4daf8b6c6f42996f625c5173941361 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 30 Jan 2021 14:22:23 +0100 Subject: [PATCH 098/898] centralized classifier loading, better error handling, no error messages when auto matching is not used --- src/documents/classifier.py | 28 ++++++++++ src/documents/consumer.py | 11 +--- .../management/commands/document_retagger.py | 11 +--- src/documents/tasks.py | 24 +++++---- src/documents/tests/test_classifier.py | 32 ++++++++++- src/documents/tests/test_consumer.py | 2 +- src/documents/tests/test_tasks.py | 54 +++++++++++++++++-- src/documents/views.py | 12 +---- 8 files changed, 131 insertions(+), 43 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 60c9abeec..41cd05412 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -26,6 +26,34 @@ def preprocess_content(content): return content +def load_classifier(): + if not os.path.isfile(settings.MODEL_FILE): + logger.debug( + f"Document classification model does not exist (yet), not " + f"performing automatic matching." + ) + return None + + try: + classifier = DocumentClassifier() + classifier.reload() + except (EOFError, IncompatibleClassifierVersionError) as e: + # there's something wrong with the model file. + logger.error( + f"Unrecoverable error while loading document classification model: " + f"{str(e)}, deleting model file." + ) + os.unlink(settings.MODEL_FILE) + classifier = None + except OSError as e: + logger.error( + f"Error while loading document classification model: {str(e)}" + ) + classifier = None + + return classifier + + class DocumentClassifier(object): FORMAT_VERSION = 6 diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 5418e3b59..5e76ad03a 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -11,7 +11,7 @@ from django.utils import timezone from filelock import FileLock from rest_framework.reverse import reverse -from .classifier import DocumentClassifier, IncompatibleClassifierVersionError +from .classifier import load_classifier from .file_handling import create_source_path_directory, \ generate_unique_filename from .loggers import LoggingMixin @@ -201,14 +201,7 @@ class Consumer(LoggingMixin): # reloading the classifier multiple times, since there are multiple # post-consume hooks that all require the classifier. - try: - classifier = DocumentClassifier() - classifier.reload() - except (OSError, EOFError, IncompatibleClassifierVersionError) as e: - self.log( - "warning", - f"Cannot classify documents: {e}.") - classifier = None + classifier = load_classifier() # now that everything is done, we can start to store the document # in the system. This will be a transaction and reasonably fast. diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py index 0fb9782c1..b2f5d8918 100755 --- a/src/documents/management/commands/document_retagger.py +++ b/src/documents/management/commands/document_retagger.py @@ -2,8 +2,7 @@ import logging from django.core.management.base import BaseCommand -from documents.classifier import DocumentClassifier, \ - IncompatibleClassifierVersionError +from documents.classifier import load_classifier from documents.models import Document from ...mixins import Renderable from ...signals.handlers import set_correspondent, set_document_type, set_tags @@ -70,13 +69,7 @@ class Command(Renderable, BaseCommand): queryset = Document.objects.all() documents = queryset.distinct() - classifier = DocumentClassifier() - try: - classifier.reload() - except (OSError, EOFError, IncompatibleClassifierVersionError) as e: - logging.getLogger(__name__).warning( - f"Cannot classify documents: {e}.") - classifier = None + classifier = load_classifier() for document in documents: logging.getLogger(__name__).info( diff --git a/src/documents/tasks.py b/src/documents/tasks.py index 38ff532b5..4e74d7350 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -6,10 +6,9 @@ from django.db.models.signals import post_save from whoosh.writing import AsyncWriter from documents import index, sanity_checker -from documents.classifier import DocumentClassifier, \ - IncompatibleClassifierVersionError +from documents.classifier import DocumentClassifier, load_classifier from documents.consumer import Consumer, ConsumerError -from documents.models import Document +from documents.models import Document, Tag, DocumentType, Correspondent from documents.sanity_checker import SanityFailedError @@ -30,13 +29,18 @@ def index_reindex(): def train_classifier(): - classifier = DocumentClassifier() + if (not Tag.objects.filter( + matching_algorithm=Tag.MATCH_AUTO).exists() and + not DocumentType.objects.filter( + matching_algorithm=Tag.MATCH_AUTO).exists() and + not Correspondent.objects.filter( + matching_algorithm=Tag.MATCH_AUTO).exists()): - try: - # load the classifier, since we might not have to train it again. - classifier.reload() - except (OSError, EOFError, IncompatibleClassifierVersionError): - # This is what we're going to fix here. + return + + classifier = load_classifier() + + if not classifier: classifier = DocumentClassifier() try: @@ -52,7 +56,7 @@ def train_classifier(): ) except Exception as e: - logging.getLogger(__name__).error( + logging.getLogger(__name__).warning( "Classifier error: " + str(e) ) diff --git a/src/documents/tests/test_classifier.py b/src/documents/tests/test_classifier.py index 9e999794d..43c38b691 100644 --- a/src/documents/tests/test_classifier.py +++ b/src/documents/tests/test_classifier.py @@ -1,10 +1,13 @@ +import os import tempfile +from pathlib import Path from time import sleep from unittest import mock +from django.conf import settings from django.test import TestCase, override_settings -from documents.classifier import DocumentClassifier, IncompatibleClassifierVersionError +from documents.classifier import DocumentClassifier, IncompatibleClassifierVersionError, load_classifier from documents.models import Correspondent, Document, Tag, DocumentType from documents.tests.utils import DirectoriesMixin @@ -235,3 +238,30 @@ class TestClassifier(DirectoriesMixin, TestCase): self.classifier.train() self.assertListEqual(self.classifier.predict_tags(doc1.content), [t1.pk]) self.assertListEqual(self.classifier.predict_tags(doc2.content), []) + + def test_load_classifier_not_exists(self): + self.assertFalse(os.path.exists(settings.MODEL_FILE)) + self.assertIsNone(load_classifier()) + + @mock.patch("documents.classifier.DocumentClassifier.reload") + def test_load_classifier(self, reload): + Path(settings.MODEL_FILE).touch() + self.assertIsNotNone(load_classifier()) + + @mock.patch("documents.classifier.DocumentClassifier.reload") + def test_load_classifier_incompatible_version(self, reload): + Path(settings.MODEL_FILE).touch() + self.assertTrue(os.path.exists(settings.MODEL_FILE)) + + reload.side_effect = IncompatibleClassifierVersionError() + self.assertIsNone(load_classifier()) + self.assertFalse(os.path.exists(settings.MODEL_FILE)) + + @mock.patch("documents.classifier.DocumentClassifier.reload") + def test_load_classifier_os_error(self, reload): + Path(settings.MODEL_FILE).touch() + self.assertTrue(os.path.exists(settings.MODEL_FILE)) + + reload.side_effect = OSError() + self.assertIsNone(load_classifier()) + self.assertTrue(os.path.exists(settings.MODEL_FILE)) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index a6861a541..02d1d0004 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -420,7 +420,7 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertIsNotNone(os.path.isfile(document.title)) self.assertTrue(os.path.isfile(document.source_path)) - @mock.patch("documents.consumer.DocumentClassifier") + @mock.patch("documents.consumer.load_classifier") def testClassifyDocument(self, m): correspondent = Correspondent.objects.create(name="test") dtype = DocumentType.objects.create(name="test") diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index 653590707..eb310d357 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -1,11 +1,12 @@ -from datetime import datetime +import os from unittest import mock +from django.conf import settings from django.test import TestCase from django.utils import timezone from documents import tasks -from documents.models import Document +from documents.models import Document, Tag, Correspondent, DocumentType from documents.sanity_checker import SanityError, SanityFailedError from documents.tests.utils import DirectoriesMixin @@ -22,8 +23,55 @@ class TestTasks(DirectoriesMixin, TestCase): tasks.index_optimize() - def test_train_classifier(self): + @mock.patch("documents.tasks.load_classifier") + def test_train_classifier_no_auto_matching(self, load_classifier): tasks.train_classifier() + load_classifier.assert_not_called() + + @mock.patch("documents.tasks.load_classifier") + def test_train_classifier_with_auto_tag(self, load_classifier): + load_classifier.return_value = None + Tag.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test") + tasks.train_classifier() + load_classifier.assert_called_once() + self.assertFalse(os.path.isfile(settings.MODEL_FILE)) + + @mock.patch("documents.tasks.load_classifier") + def test_train_classifier_with_auto_type(self, load_classifier): + load_classifier.return_value = None + DocumentType.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test") + tasks.train_classifier() + load_classifier.assert_called_once() + self.assertFalse(os.path.isfile(settings.MODEL_FILE)) + + @mock.patch("documents.tasks.load_classifier") + def test_train_classifier_with_auto_correspondent(self, load_classifier): + load_classifier.return_value = None + Correspondent.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test") + tasks.train_classifier() + load_classifier.assert_called_once() + self.assertFalse(os.path.isfile(settings.MODEL_FILE)) + + def test_train_classifier(self): + c = Correspondent.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test") + doc = Document.objects.create(correspondent=c, content="test", title="test") + self.assertFalse(os.path.isfile(settings.MODEL_FILE)) + + tasks.train_classifier() + self.assertTrue(os.path.isfile(settings.MODEL_FILE)) + mtime = os.stat(settings.MODEL_FILE).st_mtime + + tasks.train_classifier() + self.assertTrue(os.path.isfile(settings.MODEL_FILE)) + mtime2 = os.stat(settings.MODEL_FILE).st_mtime + self.assertEqual(mtime, mtime2) + + doc.content = "test2" + doc.save() + tasks.train_classifier() + self.assertTrue(os.path.isfile(settings.MODEL_FILE)) + mtime3 = os.stat(settings.MODEL_FILE).st_mtime + self.assertNotEqual(mtime2, mtime3) @mock.patch("documents.tasks.sanity_checker.check_sanity") def test_sanity_check(self, m): diff --git a/src/documents/views.py b/src/documents/views.py index 43ae2b103..6fbb42976 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -34,7 +34,7 @@ from rest_framework.viewsets import ( import documents.index as index from paperless.db import GnuPG from paperless.views import StandardPagination -from .classifier import DocumentClassifier, IncompatibleClassifierVersionError +from .classifier import load_classifier from .filters import ( CorrespondentFilterSet, DocumentFilterSet, @@ -259,15 +259,7 @@ class DocumentViewSet(RetrieveModelMixin, except Document.DoesNotExist: raise Http404() - try: - classifier = DocumentClassifier() - classifier.reload() - except (OSError, EOFError, IncompatibleClassifierVersionError) as e: - logging.getLogger(__name__).warning( - "Cannot load classifier: Not providing auto matching " - "suggestions" - ) - classifier = None + classifier = load_classifier() return Response({ "correspondents": [ From 3461e6f3540b71fa16b33e1981e1f03d30ebbc8e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 30 Jan 2021 15:22:51 +0100 Subject: [PATCH 099/898] pycodestyle --- src/documents/classifier.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 41cd05412..b427264c8 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -40,8 +40,8 @@ def load_classifier(): except (EOFError, IncompatibleClassifierVersionError) as e: # there's something wrong with the model file. logger.error( - f"Unrecoverable error while loading document classification model: " - f"{str(e)}, deleting model file." + f"Unrecoverable error while loading document " + f"classification model: {str(e)}, deleting model file." ) os.unlink(settings.MODEL_FILE) classifier = None From a584f58a18c4271c675fe73b9a52f8a0c535e791 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 30 Jan 2021 15:30:39 +0100 Subject: [PATCH 100/898] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a19de79b2..0fc3185a1 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [Paperless](https://github.com/the-paperless-project/paperless) is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents. -Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. For a detailed list of changes, have a look at the changelog in the documentation. +Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. # Survey From 1f825dfcf26ccfc3037565001d793e5310221a80 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 30 Jan 2021 15:44:23 +0100 Subject: [PATCH 101/898] fix typo --- src/documents/tests/test_tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index eb310d357..d008f995a 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -83,7 +83,7 @@ class TestTasks(DirectoriesMixin, TestCase): self.assertRaises(SanityFailedError, tasks.sanity_check) m.assert_called_once() - def test_culk_update_documents(self): + def test_bulk_update_documents(self): doc1 = Document.objects.create(title="test", content="my document", checksum="wow", added=timezone.now(), created=timezone.now(), modified=timezone.now()) From 22ae8f033b0c79938679d18fcd182e1baba04e45 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 30 Jan 2021 21:56:17 +0100 Subject: [PATCH 102/898] replace preview icon #471 --- .../document-card-large/document-card-large.component.html | 6 +++--- .../document-card-small/document-card-small.component.html | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index d26c17159..a47f13653 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -44,9 +44,9 @@ </svg> <span class="d-block d-md-inline" i18n>Edit</span> </a> <a class="btn btn-sm btn-outline-secondary" [href]="getPreviewUrl()"> - <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-search" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> - <path fill-rule="evenodd" d="M10.442 10.442a1 1 0 0 1 1.415 0l3.85 3.85a1 1 0 0 1-1.414 1.415l-3.85-3.85a1 1 0 0 1 0-1.415z"/> - <path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/> + <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> + <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> + <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> <span class="d-block d-md-inline" i18n>View</span> </a> <a class="btn btn-sm btn-outline-secondary" [href]="getDownloadUrl()"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 882de71ed..28dc84236 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -38,9 +38,9 @@ </svg> </a> <a [href]="getPreviewUrl()" class="btn btn-sm btn-outline-secondary" title="View in browser" i18n-title> - <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-search" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> - <path fill-rule="evenodd" d="M10.442 10.442a1 1 0 0 1 1.415 0l3.85 3.85a1 1 0 0 1-1.414 1.415l-3.85-3.85a1 1 0 0 1 0-1.415z"/> - <path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/> + <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> + <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> + <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> </a> <a [href]="getDownloadUrl()" class="btn btn-sm btn-outline-secondary" title="Download" (click)="$event.stopPropagation()" i18n-title> From 1ba1b3a94693025f5b8fc9870975bcd841ccefd9 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sun, 31 Jan 2021 11:25:39 +0100 Subject: [PATCH 103/898] Switch CI target to sha instead of ref --- ansible/molecule/default/converge.yml | 4 ++-- ansible/tasks/main.yml | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ansible/molecule/default/converge.yml b/ansible/molecule/default/converge.yml index f5f9b17c2..1ae260bac 100644 --- a/ansible/molecule/default/converge.yml +++ b/ansible/molecule/default/converge.yml @@ -2,9 +2,9 @@ - name: update previous release to newest release hosts: all tasks: - - name: set github ref as version when available + - name: set current github commit as version when available set_fact: - paperlessng_version: "{{ lookup('env', 'GITHUB_REF') | default('latest', True) }}" + paperlessng_version: "{{ lookup('env', 'GITHUB_SHA') | default('master', True) }}" - name: update to newest paperless-ng release include_role: name: ansible diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index f45747cb6..dba409549 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -114,6 +114,12 @@ paperlessng_version: "{{ latest_release.json['tag_name'] }}" when: paperlessng_version == "latest" +- name: check if version is ref + fail: + msg: "Specifying `paperlessng_version` as git ref may not work as expected!" + ignore_errors: True # Output failure (as warning), but don't consider play failed + when: paperlessng_version.startswith('refs/') + - block: - name: sanitize version string set_fact: From 54501ef7e522f05098736c50e974c444f38b2b88 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Sun, 31 Jan 2021 12:00:41 +0100 Subject: [PATCH 104/898] Change CI ref from merge to head At this time in the CI, merge is not accessible from tree https://github.community/t/github-sha-but-how-to-get-the-latest-commit-reference-on-a-branch/17160 --- .github/workflows/ansible.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index fd965e760..a27ce103c 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -7,13 +7,20 @@ jobs: # https://molecule.readthedocs.io/en/latest/ci.html#github-actions test: runs-on: ubuntu-latest - # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context - if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/')) steps: - name: Check out the codebase uses: actions/checkout@v2 + if: github.event_name != 'pull_request' with: path: "${{ github.repository }}" + - name: Check out the codebase + uses: actions/checkout@v2 + if: github.event_name == 'pull_request' + with: + # merge commit is not available from tree at this point in time + # https://github.com/actions/checkout#checkout-pull-request-head-commit-instead-of-merge-commit + ref: "${{ github.event.pull_request.head.sha }}" + path: "${{ github.repository }}" - name: Set up Python uses: actions/setup-python@v2 - name: Set up Docker From f047a5b1ffe9be03a179d2c6d15b801164701bda Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 31 Jan 2021 13:20:21 +0100 Subject: [PATCH 105/898] addresses race condition between API and document consumer #472 --- src/documents/views.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index 208f0fd07..f7c640e77 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -398,19 +398,20 @@ class PostDocumentView(APIView): with tempfile.NamedTemporaryFile(prefix="paperless-upload-", dir=settings.SCRATCH_DIR, - buffering=0, delete=False) as f: f.write(doc_data) os.utime(f.name, times=(t, t)) + temp_filename = f.name + + async_task("documents.tasks.consume_file", + temp_filename, + override_filename=doc_name, + override_title=title, + override_correspondent_id=correspondent_id, + override_document_type_id=document_type_id, + override_tag_ids=tag_ids, + task_name=os.path.basename(doc_name)[:100]) - async_task("documents.tasks.consume_file", - f.name, - override_filename=doc_name, - override_title=title, - override_correspondent_id=correspondent_id, - override_document_type_id=document_type_id, - override_tag_ids=tag_ids, - task_name=os.path.basename(doc_name)[:100]) return Response("OK") From 494ee181d151124edf4c6a20a6b15ee856570e52 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 31 Jan 2021 13:52:21 +0100 Subject: [PATCH 106/898] moved gunicorn.conf.py to a more appropriate place and reference that in the configuration scripts. --- .github/workflows/ci.yml | 1 + Dockerfile | 3 ++- docs/setup.rst | 16 ++++++++-------- docker/gunicorn.conf.py => gunicorn.conf.py | 0 scripts/paperless-webserver.service | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) rename docker/gunicorn.conf.py => gunicorn.conf.py (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 425243163..f27d258b8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -155,6 +155,7 @@ jobs: mkdir dist/paperless-ng/scripts cp .dockerignore .env Dockerfile Pipfile Pipfile.lock LICENSE README.md requirements.txt dist/paperless-ng/ cp paperless.conf.example dist/paperless-ng/paperless.conf + cp gunicorn.conf.py dist/paperless-ng/gunicorn.conf.py cp docker/ dist/paperless-ng/docker -r cp scripts/*.service scripts/*.sh dist/paperless-ng/scripts/ cp src/ dist/paperless-ng/src -r diff --git a/Dockerfile b/Dockerfile index 291036f55..6247ef009 100644 --- a/Dockerfile +++ b/Dockerfile @@ -77,7 +77,8 @@ RUN apt-get update \ # copy scripts # this fixes issues with imagemagick and PDF COPY docker/imagemagick-policy.xml /etc/ImageMagick-6/policy.xml -COPY docker/gunicorn.conf.py ./ + +COPY gunicorn.conf.py ./ COPY docker/supervisord.conf /etc/supervisord.conf COPY docker/docker-entrypoint.sh /sbin/docker-entrypoint.sh diff --git a/docs/setup.rst b/docs/setup.rst index afb3784d6..268352d4f 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -20,7 +20,7 @@ Paperless consists of the following components: .. code:: shell-session $ cd /path/to/paperless/src/ - $ gunicorn -c ../gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi + $ gunicorn -c ../gunicorn.conf.py paperless.wsgi or by any other means such as Apache ``mod_wsgi``. @@ -88,7 +88,7 @@ You can go multiple routes to setup and run Paperless: The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff from the above automatically so that it just works and uses sensible defaults for all configuration options. -Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_ +Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_ The bare metal route is complicated to setup but makes it easier should you want to contribute some code back. You need to configure and @@ -126,7 +126,7 @@ Install Paperless from Docker Hub If you want to use the included ``docker-compose.*.yml`` file, you need to have at least Docker version **17.09.0** and docker-compose - version **1.17.0**. + version **1.17.0**. To check do: `docker-compose -v` or `docker -v` See the `Docker installation guide`_ on how to install the current @@ -175,7 +175,7 @@ Install Paperless from Docker Hub on such a file system, paperless will not pick up new files with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``, which will disable inotify. See :ref:`here <configuration-polling>`. - + 6. Now head over to: https://hub.docker.com/r/jonaswinkler/paperless-ng and choose your preferred image and copy the link. To download this image do a `docker pull` followed by the link. Do this within the directory with the .yml files. Depending on your network connection and CPU this will take a while. You have time to get a beverage. @@ -195,7 +195,7 @@ Install Paperless from Docker Hub 9. The default ``docker-compose.yml`` exports the webserver on your local port 8000. If you haven't adapted this, you should now be able to visit your - Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. + Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. Use the login credentials you have created with the previous step. .. _Docker: https://www.docker.com/ @@ -224,7 +224,7 @@ Build the docker image yourself webserver: image: jonaswinkler/paperless-ng:latest - + and replace it with a line that instructs docker-compose to build the image from the current working directory instead: .. code:: yaml @@ -427,7 +427,7 @@ Install Paperless using ansible This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts. -1. Install ansible 2.7+ on the management node. +1. Install ansible 2.7+ on the management node. This may be the target host paperless-ng is being installed on or any remote host which can access the target host. For further details, check the ansible `inventory <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html>`_ documentation. @@ -585,7 +585,7 @@ Migration to paperless-ng is then performed in a few simple steps: .. code:: shell-session $ docker volume ls | grep _data - + and adjust the project name in the ``.env`` file so that it matches the name of the volumes before the ``_data`` part. diff --git a/docker/gunicorn.conf.py b/gunicorn.conf.py similarity index 100% rename from docker/gunicorn.conf.py rename to gunicorn.conf.py diff --git a/scripts/paperless-webserver.service b/scripts/paperless-webserver.service index a43110be2..00bc4fa37 100644 --- a/scripts/paperless-webserver.service +++ b/scripts/paperless-webserver.service @@ -8,7 +8,7 @@ Requires=redis.service User=paperless Group=paperless WorkingDirectory=/opt/paperless/src -ExecStart=/opt/paperless/.local/bin/gunicorn paperless.wsgi -w 2 -b 0.0.0.0:8000 +ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.wsgi [Install] WantedBy=multi-user.target From 0d49b2dc87734f45cb9adcca020411f6c0e8accc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 31 Jan 2021 15:36:52 +0100 Subject: [PATCH 107/898] adjust ansible scripts to use gunicorn.conf.py --- ansible/tasks/install-source.yml | 1 + ansible/tasks/main.yml | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ansible/tasks/install-source.yml b/ansible/tasks/install-source.yml index ab8fbfef7..4fc8b1fd8 100644 --- a/ansible/tasks/install-source.yml +++ b/ansible/tasks/install-source.yml @@ -54,6 +54,7 @@ - src: Pipfile.lock - src: README.md - src: requirements.txt + - src: gunicorn.conf.py - src: paperless.conf.example dest: "paperless.conf" diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index db8edcc75..6857a7c63 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -456,6 +456,12 @@ line: '\1<policy domain="coder" rights="read|write" pattern="PDF" />' backrefs: yes +- name: configure gunicorn web server + lineinfile: + path: "{{ paperlessng_directory }}/gunicorn.conf.py" + regexp: '^bind = ' + line: "bind = '{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}'" + - name: configure systemd services ini_file: path: "{{ paperlessng_directory }}/scripts/{{ item[0] }}" @@ -498,7 +504,7 @@ path: "{{ paperlessng_directory }}/scripts/paperless-webserver.service" section: "Service" option: "ExecStart" - value: "{{ paperlessng_virtualenv }}/bin/gunicorn paperless.asgi:application -w 2 -k uvicorn.workers.UvicornWorker -b {{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}" + value: "{{ paperlessng_virtualenv }}/bin/gunicorn -c {{ paperlessng_directory }}/gunicorn.conf.py paperless.asgi:application" - name: copy systemd services copy: From ec9d18979a28c8c35d4545e999da8ebaee3abaa7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 31 Jan 2021 15:37:09 +0100 Subject: [PATCH 108/898] fix typo --- scripts/paperless-webserver.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/paperless-webserver.service b/scripts/paperless-webserver.service index 7b7fa329a..6a4655b6f 100644 --- a/scripts/paperless-webserver.service +++ b/scripts/paperless-webserver.service @@ -8,7 +8,7 @@ Requires=redis.service User=paperless Group=paperless WorkingDirectory=/opt/paperless/src -ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless..asgi:application +ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application [Install] WantedBy=multi-user.target From 1b8d6b70b7e202963b22a9d771823a9b75152526 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 31 Jan 2021 14:45:43 +0000 Subject: [PATCH 109/898] Apply translations in de translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 191 ++++++++++++++-------------- 1 file changed, 98 insertions(+), 93 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index c9257e0f1..c53985275 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-10 21:41+0000\n" +"POT-Creation-Date: 2021-01-28 22:02+0100\n" "PO-Revision-Date: 2020-12-30 19:27+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" @@ -25,64 +25,64 @@ msgstr "" msgid "Documents" msgstr "Dokumente" -#: documents/models.py:32 +#: documents/models.py:33 msgid "Any word" msgstr "Irgendein Wort" -#: documents/models.py:33 +#: documents/models.py:34 msgid "All words" msgstr "Alle Wörter" -#: documents/models.py:34 +#: documents/models.py:35 msgid "Exact match" msgstr "Exakte Übereinstimmung" -#: documents/models.py:35 +#: documents/models.py:36 msgid "Regular expression" msgstr "Regulärer Ausdruck" -#: documents/models.py:36 +#: documents/models.py:37 msgid "Fuzzy word" msgstr "Ungenaues Wort" -#: documents/models.py:37 +#: documents/models.py:38 msgid "Automatic" msgstr "Automatisch" -#: documents/models.py:41 documents/models.py:354 paperless_mail/models.py:25 +#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "Name" -#: documents/models.py:45 +#: documents/models.py:46 msgid "match" msgstr "Zuweisungsmuster" -#: documents/models.py:49 +#: documents/models.py:50 msgid "matching algorithm" msgstr "Zuweisungsalgorithmus" -#: documents/models.py:55 +#: documents/models.py:56 msgid "is insensitive" msgstr "Groß-/Kleinschreibung irrelevant" -#: documents/models.py:80 documents/models.py:140 +#: documents/models.py:75 documents/models.py:135 msgid "correspondent" msgstr "Korrespondent" -#: documents/models.py:81 +#: documents/models.py:76 msgid "correspondents" msgstr "Korrespondenten" -#: documents/models.py:103 +#: documents/models.py:98 msgid "color" msgstr "Farbe" -#: documents/models.py:107 +#: documents/models.py:102 msgid "is inbox tag" msgstr "Posteingangs-Tag" -#: documents/models.py:109 +#: documents/models.py:104 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -90,39 +90,39 @@ msgstr "" "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit " "diesem Tag versehen." -#: documents/models.py:114 +#: documents/models.py:109 msgid "tag" msgstr "Tag" -#: documents/models.py:115 documents/models.py:171 +#: documents/models.py:110 documents/models.py:166 msgid "tags" msgstr "Tags" -#: documents/models.py:121 documents/models.py:153 +#: documents/models.py:116 documents/models.py:148 msgid "document type" msgstr "Dokumenttyp" -#: documents/models.py:122 +#: documents/models.py:117 msgid "document types" msgstr "Dokumenttypen" -#: documents/models.py:130 +#: documents/models.py:125 msgid "Unencrypted" msgstr "Nicht verschlüsselt" -#: documents/models.py:131 +#: documents/models.py:126 msgid "Encrypted with GNU Privacy Guard" msgstr "Verschlüsselt mit GNU Privacy Guard" -#: documents/models.py:144 +#: documents/models.py:139 msgid "title" msgstr "Titel" -#: documents/models.py:157 +#: documents/models.py:152 msgid "content" msgstr "Inhalt" -#: documents/models.py:159 +#: documents/models.py:154 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -130,222 +130,227 @@ msgstr "" "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche " "verwendet." -#: documents/models.py:164 +#: documents/models.py:159 msgid "mime type" msgstr "MIME-Typ" -#: documents/models.py:175 +#: documents/models.py:170 msgid "checksum" msgstr "Prüfsumme" -#: documents/models.py:179 +#: documents/models.py:174 msgid "The checksum of the original document." msgstr "Die Prüfsumme des originalen Dokuments." -#: documents/models.py:183 +#: documents/models.py:178 msgid "archive checksum" msgstr "Archiv-Prüfsumme" -#: documents/models.py:188 +#: documents/models.py:183 msgid "The checksum of the archived document." msgstr "Die Prüfsumme des archivierten Dokuments." -#: documents/models.py:192 documents/models.py:332 +#: documents/models.py:187 documents/models.py:330 msgid "created" -msgstr "Erstellt" +msgstr "Ausgestellt" -#: documents/models.py:196 +#: documents/models.py:191 msgid "modified" msgstr "Geändert" -#: documents/models.py:200 +#: documents/models.py:195 msgid "storage type" msgstr "Speichertyp" -#: documents/models.py:208 +#: documents/models.py:203 msgid "added" msgstr "Hinzugefügt" -#: documents/models.py:212 +#: documents/models.py:207 msgid "filename" msgstr "Dateiname" -#: documents/models.py:217 +#: documents/models.py:212 msgid "Current filename in storage" msgstr "Aktueller Dateiname im Datenspeicher" -#: documents/models.py:221 +#: documents/models.py:216 msgid "archive serial number" msgstr "Archiv-Seriennummer" -#: documents/models.py:226 +#: documents/models.py:221 msgid "The position of this document in your physical document archive." msgstr "Die Position dieses Dokuments in Ihrem physischen Dokumentenarchiv." -#: documents/models.py:232 +#: documents/models.py:227 msgid "document" msgstr "Dokument" -#: documents/models.py:233 +#: documents/models.py:228 msgid "documents" msgstr "Dokumente" -#: documents/models.py:315 +#: documents/models.py:313 msgid "debug" msgstr "Debug" -#: documents/models.py:316 +#: documents/models.py:314 msgid "information" msgstr "Information" -#: documents/models.py:317 +#: documents/models.py:315 msgid "warning" msgstr "Warnung" -#: documents/models.py:318 +#: documents/models.py:316 msgid "error" msgstr "Fehler" -#: documents/models.py:319 +#: documents/models.py:317 msgid "critical" msgstr "Kritisch" -#: documents/models.py:323 +#: documents/models.py:321 msgid "group" msgstr "Gruppe" -#: documents/models.py:326 +#: documents/models.py:324 msgid "message" msgstr "Nachricht" -#: documents/models.py:329 +#: documents/models.py:327 msgid "level" msgstr "Level" -#: documents/models.py:336 +#: documents/models.py:334 msgid "log" msgstr "Protokoll" -#: documents/models.py:337 +#: documents/models.py:335 msgid "logs" msgstr "Protokoll" -#: documents/models.py:348 documents/models.py:398 +#: documents/models.py:346 documents/models.py:396 msgid "saved view" msgstr "Gespeicherte Ansicht" -#: documents/models.py:349 +#: documents/models.py:347 msgid "saved views" msgstr "Gespeicherte Ansichten" -#: documents/models.py:352 +#: documents/models.py:350 msgid "user" msgstr "Benutzer" -#: documents/models.py:358 +#: documents/models.py:356 msgid "show on dashboard" msgstr "Auf Startseite zeigen" -#: documents/models.py:361 +#: documents/models.py:359 msgid "show in sidebar" msgstr "In Seitenleiste zeigen" -#: documents/models.py:365 +#: documents/models.py:363 msgid "sort field" msgstr "Sortierfeld" -#: documents/models.py:368 +#: documents/models.py:366 msgid "sort reverse" msgstr "Umgekehrte Sortierung" -#: documents/models.py:374 +#: documents/models.py:372 msgid "title contains" msgstr "Titel enthält" -#: documents/models.py:375 +#: documents/models.py:373 msgid "content contains" msgstr "Inhalt enthält" -#: documents/models.py:376 +#: documents/models.py:374 msgid "ASN is" msgstr "ASN ist" -#: documents/models.py:377 +#: documents/models.py:375 msgid "correspondent is" msgstr "Korrespondent ist" -#: documents/models.py:378 +#: documents/models.py:376 msgid "document type is" msgstr "Dokumenttyp ist" -#: documents/models.py:379 +#: documents/models.py:377 msgid "is in inbox" msgstr "Ist im Posteingang" -#: documents/models.py:380 +#: documents/models.py:378 msgid "has tag" msgstr "Hat Tag" -#: documents/models.py:381 +#: documents/models.py:379 msgid "has any tag" msgstr "Hat irgendein Tag" -#: documents/models.py:382 +#: documents/models.py:380 msgid "created before" -msgstr "Erstellt vor" +msgstr "Ausgestellt vor" + +#: documents/models.py:381 +msgid "created after" +msgstr "Ausgestellt nach" + +#: documents/models.py:382 +msgid "created year is" +msgstr "Ausgestellt im Jahr" #: documents/models.py:383 -msgid "created after" -msgstr "Erstellt nach" +msgid "created month is" +msgstr "Ausgestellt im Monat" #: documents/models.py:384 -msgid "created year is" -msgstr "Erstellt im Jahr" +msgid "created day is" +msgstr "Ausgestellt am Tag" #: documents/models.py:385 -msgid "created month is" -msgstr "Erstellt im Monat" - -#: documents/models.py:386 -msgid "created day is" -msgstr "Erstellt am Tag" - -#: documents/models.py:387 msgid "added before" msgstr "Hinzugefügt vor" -#: documents/models.py:388 +#: documents/models.py:386 msgid "added after" msgstr "Hinzugefügt nach" -#: documents/models.py:389 +#: documents/models.py:387 msgid "modified before" msgstr "Geändert vor" -#: documents/models.py:390 +#: documents/models.py:388 msgid "modified after" msgstr "Geändert nach" -#: documents/models.py:391 +#: documents/models.py:389 msgid "does not have tag" msgstr "Hat nicht folgendes Tag" -#: documents/models.py:402 +#: documents/models.py:400 msgid "rule type" msgstr "Regeltyp" -#: documents/models.py:406 +#: documents/models.py:404 msgid "value" msgstr "Wert" -#: documents/models.py:412 +#: documents/models.py:410 msgid "filter rule" msgstr "Filterregel" -#: documents/models.py:413 +#: documents/models.py:411 msgid "filter rules" msgstr "Filterregeln" +#: documents/serialisers.py:383 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Dateityp %(type)s nicht unterstützt" + #: documents/templates/index.html:20 msgid "Paperless-ng is loading..." msgstr "Paperless-ng wird geladen..." @@ -388,23 +393,23 @@ msgstr "Passwort" msgid "Sign in" msgstr "Anmelden" -#: paperless/settings.py:268 +#: paperless/settings.py:286 msgid "English" msgstr "Englisch" -#: paperless/settings.py:269 +#: paperless/settings.py:287 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:270 +#: paperless/settings.py:288 msgid "Dutch" msgstr "Niederländisch" -#: paperless/settings.py:271 +#: paperless/settings.py:289 msgid "French" msgstr "Französisch" -#: paperless/urls.py:108 +#: paperless/urls.py:114 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" From 2a675f8490f9fb80fefe38ef86f8f1f41635afdc Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 31 Jan 2021 14:45:58 +0000 Subject: [PATCH 110/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 330 ++++++++++++++++++++++++++---- 1 file changed, 289 insertions(+), 41 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index b6e2708ba..54acbd23e 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -1,12 +1,60 @@ <?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="de"> <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Dokument hinzugefügt</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Das Dokument <x equiv-text="status.filename" id="PH"/> wurde zu Paperless hinzugefügt.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Dokument öffnen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Konnte <x equiv-text="status.filename" id="PH"/> nicht hinzufügen: <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>Neues Dokument erkannt</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Dokument <x equiv-text="status.filename" id="PH"/> wird von Paperless verarbeitet.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="4733307402565258070"> <source>Documents</source> <target>Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">43</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> @@ -14,7 +62,7 @@ <target>Ansicht "<x equiv-text="this.list.savedView.name" id="PH"/>" erfolgreich gespeichert.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">109</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -22,7 +70,7 @@ <target>Ansicht "<x equiv-text="savedView.name" id="PH"/>" erfolgreich erstellt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -550,7 +598,7 @@ <target>Gespeicherte Ansicht "<x equiv-text="savedView.name" id="PH"/>" gelöscht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">67</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -558,7 +606,7 @@ <target>Einstellungen erfolgreich gespeichert.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">79</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -566,7 +614,7 @@ <target>Benutze Systemsprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -574,7 +622,7 @@ <target>Benutze Datumsformat der Anzeigesprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -582,7 +630,7 @@ <target>Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">111</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -606,7 +654,7 @@ <target>Gespeicherte Ansichten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">128</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -729,12 +777,68 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Benachrichtigungen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f"> + <source>Consumer status</source> + <target>Status Dokumentenverarbeitung</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">109</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3"> + <source>Show notifications when document consumption completes successfully</source> + <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">110</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2bcbcbe99e207803e21183580b98d90410dd8718"> + <source>Show notifications when document consumption fails</source> + <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden können</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Unterdrücke Benachrichtigungen auf der Startseite.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890"> + <source>This will suppress all consumer related status messages on the dashboard.</source> + <target>Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Massenbearbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -742,7 +846,7 @@ <target>Bestätigungsdialoge anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -750,7 +854,7 @@ <target>Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -758,7 +862,7 @@ <target>Anwenden beim Schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">121</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -766,7 +870,7 @@ <target>Erscheint auf</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">140</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -774,7 +878,7 @@ <target>Auf Startseite zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">143</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -782,7 +886,7 @@ <target>In Seitenleiste zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">147</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -790,7 +894,7 @@ <target>Keine gespeicherten Ansichten vorhanden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">157</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1518,28 +1622,52 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="8705589528094706681"> - <source>The document has been uploaded and will be processed by the consumer shortly.</source> - <target>Das Dokument wurde hochgeladen und wird in Kürze durch Paperless-ng verarbeitet.</target> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>Verarbeite: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="4956689020592747108"> - <source>There was an error while uploading the document: <x equiv-text="error.error.document" id="PH"/></source> - <target>Konnte Dokument nicht hochladen: <x equiv-text="error.error.document" id="PH"/></target> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Fehlgeschlagen: <x equiv-text="countFailed" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">71</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="7554858521017940575"> - <source>An error has occurred while uploading the document. Sorry!</source> - <target>Beim Hochladen trat ein Fehler auf. Entschuldigung!</target> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Hinzugefügt: <x equiv-text="countSuccess" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Verbinde...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Hochladen...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3994065460580948013"> + <source>Waiting for consumer...</source> + <target>Warte auf Consumer...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> @@ -1555,7 +1683,7 @@ <target>Dokumente hier ablegen oder</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> @@ -1563,15 +1691,31 @@ <target>Datei auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="33c76d75ce25ce3b05ab22877f1b6b09dcf603ae"> - <source>{VAR_PLURAL, plural, =1 {Uploading file...} =other {Uploading <x id="INTERPOLATION"/> files...}}</source> - <target>{VAR_PLURAL, plural, =1 {Lade Datei hoch...} =other {Lade <x id="INTERPOLATION"/> Dateien hoch...}}</target> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Fertiggestellte verbergen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265"> + <source><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> more hidden</source> + <target><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> weitere versteckt</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Dokument öffnen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> @@ -1683,7 +1827,7 @@ <target>Englisch (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">82</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1691,7 +1835,7 @@ <target>Deutsch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">83</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1699,7 +1843,7 @@ <target>Niederländisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">76</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1707,7 +1851,111 @@ <target>Französisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">77</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Dokument existiert bereits.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>Datei nicht gefunden.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Pre-Consume-Skript existiert nicht.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Fehler beim Ausführen des Pre-Consume-Skripts.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Post-Consume-Skript existiert nicht.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Fehler beim Ausführen des Post-Consume-Skripts.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Neue Datei erhalten.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>Dateityp wird nicht unterstützt.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Verarbeite Dokument...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Erzeuge Miniaturbild...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Ermittle Datum des Dokuments...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Speichere Dokument...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Abgeschlossen.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1519954996184640001"> @@ -1715,7 +1963,7 @@ <target>Fehler</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5037437391296624618"> @@ -1723,7 +1971,7 @@ <target>Information</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7517688192215738656"> From 0f1cb57c04fbb2b764f0941395d9ff64e2a74d8c Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 31 Jan 2021 15:45:35 +0000 Subject: [PATCH 111/898] Apply translations in nl_NL translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po' on the 'nl_NL' language. --- src/locale/nl_NL/LC_MESSAGES/django.po | 177 +++++++++++++------------ 1 file changed, 91 insertions(+), 86 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 36293e7b8..63391da15 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -4,17 +4,17 @@ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: -# Ben <bzweekhorst@gmail.com>, 2021 # Jo Vandeginste <jo.vandeginste@gmail.com>, 2021 +# Ben <bzweekhorst@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-10 21:41+0000\n" +"POT-Creation-Date: 2021-01-28 22:02+0100\n" "PO-Revision-Date: 2020-12-30 19:27+0000\n" -"Last-Translator: Jo Vandeginste <jo.vandeginste@gmail.com>, 2021\n" +"Last-Translator: Ben <bzweekhorst@gmail.com>, 2021\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/paperless/teams/115905/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,64 +26,64 @@ msgstr "" msgid "Documents" msgstr "Documenten" -#: documents/models.py:32 +#: documents/models.py:33 msgid "Any word" msgstr "Eender welk woord" -#: documents/models.py:33 +#: documents/models.py:34 msgid "All words" msgstr "Alle woorden" -#: documents/models.py:34 +#: documents/models.py:35 msgid "Exact match" msgstr "Exacte overeenkomst" -#: documents/models.py:35 +#: documents/models.py:36 msgid "Regular expression" msgstr "Reguliere expressie" -#: documents/models.py:36 +#: documents/models.py:37 msgid "Fuzzy word" msgstr "Gelijkaardig woord" -#: documents/models.py:37 +#: documents/models.py:38 msgid "Automatic" msgstr "Automatisch" -#: documents/models.py:41 documents/models.py:354 paperless_mail/models.py:25 +#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "naam" -#: documents/models.py:45 +#: documents/models.py:46 msgid "match" msgstr "Overeenkomst" -#: documents/models.py:49 +#: documents/models.py:50 msgid "matching algorithm" msgstr "Algoritme voor het bepalen van de overeenkomst" -#: documents/models.py:55 +#: documents/models.py:56 msgid "is insensitive" msgstr "is niet hoofdlettergevoelig" -#: documents/models.py:80 documents/models.py:140 +#: documents/models.py:75 documents/models.py:135 msgid "correspondent" msgstr "correspondent" -#: documents/models.py:81 +#: documents/models.py:76 msgid "correspondents" msgstr "correspondenten" -#: documents/models.py:103 +#: documents/models.py:98 msgid "color" msgstr "Kleur" -#: documents/models.py:107 +#: documents/models.py:102 msgid "is inbox tag" msgstr "is \"Postvak in\"-etiket" -#: documents/models.py:109 +#: documents/models.py:104 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Markeer dit etiket als een \"Postvak in\"-etiket: alle nieuw verwerkte " "documenten krijgen de \"Postvak in\"-etiketten." -#: documents/models.py:114 +#: documents/models.py:109 msgid "tag" msgstr "etiket" -#: documents/models.py:115 documents/models.py:171 +#: documents/models.py:110 documents/models.py:166 msgid "tags" msgstr "etiketten" -#: documents/models.py:121 documents/models.py:153 +#: documents/models.py:116 documents/models.py:148 msgid "document type" msgstr "documenttype" -#: documents/models.py:122 +#: documents/models.py:117 msgid "document types" msgstr "documenttypen" -#: documents/models.py:130 +#: documents/models.py:125 msgid "Unencrypted" msgstr "Niet versleuteld" -#: documents/models.py:131 +#: documents/models.py:126 msgid "Encrypted with GNU Privacy Guard" msgstr "Versleuteld met GNU Privacy Guard" -#: documents/models.py:144 +#: documents/models.py:139 msgid "title" msgstr "titel" -#: documents/models.py:157 +#: documents/models.py:152 msgid "content" msgstr "inhoud" -#: documents/models.py:159 +#: documents/models.py:154 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,222 +131,227 @@ msgstr "" "De onbewerkte gegevens van het document. Dit veld wordt voornamelijk " "gebruikt om te zoeken." -#: documents/models.py:164 +#: documents/models.py:159 msgid "mime type" msgstr "mimetype" -#: documents/models.py:175 +#: documents/models.py:170 msgid "checksum" msgstr "checksum" -#: documents/models.py:179 +#: documents/models.py:174 msgid "The checksum of the original document." msgstr "Het controlecijfer van het originele document." -#: documents/models.py:183 +#: documents/models.py:178 msgid "archive checksum" msgstr "archief checksum" -#: documents/models.py:188 +#: documents/models.py:183 msgid "The checksum of the archived document." msgstr "De checksum van het gearchiveerde document." -#: documents/models.py:192 documents/models.py:332 +#: documents/models.py:187 documents/models.py:330 msgid "created" msgstr "aangemaakt" -#: documents/models.py:196 +#: documents/models.py:191 msgid "modified" msgstr "gewijzigd" -#: documents/models.py:200 +#: documents/models.py:195 msgid "storage type" msgstr "type opslag" -#: documents/models.py:208 +#: documents/models.py:203 msgid "added" msgstr "toegevoegd" -#: documents/models.py:212 +#: documents/models.py:207 msgid "filename" msgstr "bestandsnaam" -#: documents/models.py:217 +#: documents/models.py:212 msgid "Current filename in storage" msgstr "Huidige bestandsnaam in opslag" -#: documents/models.py:221 +#: documents/models.py:216 msgid "archive serial number" msgstr "serienummer in archief" -#: documents/models.py:226 +#: documents/models.py:221 msgid "The position of this document in your physical document archive." msgstr "De positie van dit document in je fysieke documentenarchief." -#: documents/models.py:232 +#: documents/models.py:227 msgid "document" msgstr "document" -#: documents/models.py:233 +#: documents/models.py:228 msgid "documents" msgstr "documenten" -#: documents/models.py:315 +#: documents/models.py:313 msgid "debug" msgstr "debug" -#: documents/models.py:316 +#: documents/models.py:314 msgid "information" msgstr "informatie" -#: documents/models.py:317 +#: documents/models.py:315 msgid "warning" msgstr "waarschuwing" -#: documents/models.py:318 +#: documents/models.py:316 msgid "error" msgstr "fout" -#: documents/models.py:319 +#: documents/models.py:317 msgid "critical" msgstr "kritisch" -#: documents/models.py:323 +#: documents/models.py:321 msgid "group" msgstr "groep" -#: documents/models.py:326 +#: documents/models.py:324 msgid "message" msgstr "bericht" -#: documents/models.py:329 +#: documents/models.py:327 msgid "level" msgstr "niveau" -#: documents/models.py:336 +#: documents/models.py:334 msgid "log" msgstr "bericht" -#: documents/models.py:337 +#: documents/models.py:335 msgid "logs" msgstr "berichten" -#: documents/models.py:348 documents/models.py:398 +#: documents/models.py:346 documents/models.py:396 msgid "saved view" msgstr "opgeslagen view" -#: documents/models.py:349 +#: documents/models.py:347 msgid "saved views" msgstr "opgeslagen views" -#: documents/models.py:352 +#: documents/models.py:350 msgid "user" msgstr "gebruiker" -#: documents/models.py:358 +#: documents/models.py:356 msgid "show on dashboard" msgstr "weergeven op dashboard" -#: documents/models.py:361 +#: documents/models.py:359 msgid "show in sidebar" msgstr "weergeven in zijbalk" -#: documents/models.py:365 +#: documents/models.py:363 msgid "sort field" msgstr "sorteerveld" -#: documents/models.py:368 +#: documents/models.py:366 msgid "sort reverse" msgstr "omgekeerd sorteren" -#: documents/models.py:374 +#: documents/models.py:372 msgid "title contains" msgstr "titel bevat" -#: documents/models.py:375 +#: documents/models.py:373 msgid "content contains" msgstr "inhoud bevat" -#: documents/models.py:376 +#: documents/models.py:374 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:377 +#: documents/models.py:375 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:378 +#: documents/models.py:376 msgid "document type is" msgstr "documenttype is" -#: documents/models.py:379 +#: documents/models.py:377 msgid "is in inbox" msgstr "zit in \"Postvak in\"" -#: documents/models.py:380 +#: documents/models.py:378 msgid "has tag" msgstr "heeft etiket" -#: documents/models.py:381 +#: documents/models.py:379 msgid "has any tag" msgstr "heeft één van de etiketten" -#: documents/models.py:382 +#: documents/models.py:380 msgid "created before" msgstr "aangemaakt voor" -#: documents/models.py:383 +#: documents/models.py:381 msgid "created after" msgstr "aangemaakt na" -#: documents/models.py:384 +#: documents/models.py:382 msgid "created year is" msgstr "aangemaakt jaar is" -#: documents/models.py:385 +#: documents/models.py:383 msgid "created month is" msgstr "aangemaakte maand is" -#: documents/models.py:386 +#: documents/models.py:384 msgid "created day is" msgstr "aangemaakte dag is" -#: documents/models.py:387 +#: documents/models.py:385 msgid "added before" msgstr "toegevoegd voor" -#: documents/models.py:388 +#: documents/models.py:386 msgid "added after" msgstr "toegevoegd na" -#: documents/models.py:389 +#: documents/models.py:387 msgid "modified before" msgstr "gewijzigd voor" -#: documents/models.py:390 +#: documents/models.py:388 msgid "modified after" msgstr "gewijzigd na" -#: documents/models.py:391 +#: documents/models.py:389 msgid "does not have tag" msgstr "heeft geen etiket" -#: documents/models.py:402 +#: documents/models.py:400 msgid "rule type" msgstr "type regel" -#: documents/models.py:406 +#: documents/models.py:404 msgid "value" msgstr "waarde" -#: documents/models.py:412 +#: documents/models.py:410 msgid "filter rule" msgstr "filterregel" -#: documents/models.py:413 +#: documents/models.py:411 msgid "filter rules" msgstr "filterregels" +#: documents/serialisers.py:383 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Bestandstype %(type)s niet ondersteund" + #: documents/templates/index.html:20 msgid "Paperless-ng is loading..." msgstr "Paperless-ng is aan het laden..." @@ -387,23 +392,23 @@ msgstr "Wachtwoord" msgid "Sign in" msgstr "Aanmelden" -#: paperless/settings.py:268 +#: paperless/settings.py:286 msgid "English" msgstr "Engels" -#: paperless/settings.py:269 +#: paperless/settings.py:287 msgid "German" msgstr "Duits" -#: paperless/settings.py:270 +#: paperless/settings.py:288 msgid "Dutch" msgstr "Nederlands" -#: paperless/settings.py:271 +#: paperless/settings.py:289 msgid "French" msgstr "Frans" -#: paperless/urls.py:108 +#: paperless/urls.py:114 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" From ebb98fb8b06279d926c547c958d40a57046ea404 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 13:19:55 -0800 Subject: [PATCH 112/898] Add GH Ideas info to readme --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0fc3185a1..4d87119c1 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ Paperless-ng is a fork of the original project, adding a new interface and many If you already used Paperless-ng for a bit, would like to give some anonymous feedback, and help me decide on what to focus on next: I've created a survey, [see here](https://github.com/jonaswinkler/paperless-ng/issues/402). Thank you! +*See also [Feature Requests](#feature-requests)* + # How it Works Paperless does not control your scanner, it only helps you deal with what your scanner produces. @@ -78,9 +80,13 @@ Paperless is currently available in English, German, Dutch and French. Translati If you want to see paperless in your own language, request that language at transifex and you can start translating after I approve the language. -# Suggestions? Questions? Something not working? +# Feature Requests -Please open an issue and start a discussion about it! +Feature requests can be submitted via [GitHub Discussions](https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas), you can search for existing ideas, add your own and vote for the ones you care about! Note that some older feature requests can also be found under [issues](https://github.com/jonaswinkler/paperless-ng/issues). + +# Questions? Something not working? + +For bugs please [open an issue](https://github.com/jonaswinkler/paperless-ng/issues) or [start a discussion](https://github.com/jonaswinkler/paperless-ng/discussions) if you have questions. ## Feel like helping out? From 21c2abe056162c9df08170ba6a505d594bb79282 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 31 Jan 2021 22:28:26 +0100 Subject: [PATCH 113/898] added an easy install script --- install-paperless-ng.sh | 223 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100755 install-paperless-ng.sh diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh new file mode 100755 index 000000000..ad992fe8c --- /dev/null +++ b/install-paperless-ng.sh @@ -0,0 +1,223 @@ +#!/bin/bash + +set -e + +ask() { + while true ; do + if [[ -z $3 ]] ; then + read -p "$1 [$2]: " result + else + read -p "$1 ($3) [$2]: " result + fi + if [[ -z $result ]]; then + ask_result=$2 + return + fi + array=$3 + if [[ -z $3 || " ${array[@]} " =~ " ${result} " ]]; then + ask_result=$result + return + else + echo "Invalid option: $result" + fi + done +} + +echo "" +echo "############################################" +echo "### Paperless-ng docker installation ###" +echo "############################################" +echo "" +echo "This script will download, configure and start paperless-ng." + +echo "" +echo "1. Folder configuration" +echo "=======================" +echo "" +echo "The target folder is used to store the configuration files of " +echo "paperless. You can move this folder around after installing paperless." +echo "You will need this folder whenever you want to start, stop, update or " +echo "maintain your paperless instance." +echo "" + +ask "Target folder" "$(pwd)/paperless-ng" +TARGET_FOLDER=$ask_result + +echo "" +echo "The consume folder is where paperles will search for new documents." +echo "Point this to a folder where your scanner is able to put your scanned" +echo "documents." +echo "" +echo "HINT: If paperless is unable to pick up any files from this directory after" +echo "installation, you might need to configure PAPERLESS_CONSUMER_POLLING." +echo "See the documentation for details." +echo "" +echo "CAUTION: You must specify an absolute path starting with /" +echo "" + +ask "Consume folder" "$TARGET_FOLDER/consume" +CONSUME_FOLDER=$ask_result + +echo "" +echo "The media folder is where paperless stores your documents." +echo "Leave empty and docker will manage this folder for you." +echo "Docker usually stores managed folders in /var/lib/docker/volumes." +echo "" +echo "CAUTION: If specified, you must specify an absolute path starting with /" +echo "" + +ask "Media folder" "" +MEDIA_FOLDER=$ask_result + +echo "" +echo "The data folder is where paperless stores other data, such as your" +echo "SQLite database (if used), the search index and other data." +echo "As with the media folder, leave empty to have this managed by docker." +echo "" + +ask "Data folder" "" +DATA_FOLDER=$ask_result + +echo "" +echo "2. Application configuration" +echo "============================" + +echo "" +echo "The port on which the paperless webserver will listen for incoming" +echo "connections." +echo "" + +ask "Port" "8000" +PORT=$ask_result + +echo "" +echo "Database backend: PostgreSQL and SQLite are available. Use PostgreSQL" +echo "if unsure. If you're running on a low-power device such as Raspberry" +echo "Pi, use SQLite to save resources." +echo "" + +ask "Database backend" "postgres" "postgres sqlite" +DATABASE_BACKEND=$ask_result + +echo "" +echo "Paperless is able to use Apache Tika to support Office documents such as" +echo "Word, Excel, Powerpoint, and Libreoffice equivalents. This feature" +echo "requires more resources due to the required services." +echo "" + +ask "Enable Apache Tika?" "no" "yes no" +TIKA_ENABLED=$ask_result + +echo "" +echo "Specify the default language that most of your documents are written in." +echo "Use ISO 639-2, (T) variant language codes: " +echo "https://www.loc.gov/standards/iso639-2/php/code_list.php" +echo "Common values: eng (English) deu (German) nld (Dutch) fra (French)" +echo "" + +ask "OCR language" "eng" +OCR_LANGUAGE=$ask_result + +echo "" +echo "Specify the user id and group id you wish to run paperless as." +echo "Paperless will also change ownership on the data, media and consume" +echo "folder to the specified values, so it's a good idea to supply the user id" +echo "and group id of your unix user account." +echo "If unsure, leave default." +echo "" + +ask "User ID" "$(id -u)" +USERMAP_UID=$ask_result + +ask "Group ID" "$(id -g)" +USERMAP_GID=$ask_result + +echo "" +echo "3. Login credentials" +echo "====================" +echo "" +echo "Specify initial login credentials. You can change these later." +echo "A mail address is required, however it is not used in paperless. You don't" +echo "need to provide an actual mail address." +echo "" + +ask "Paperless username" "$(whoami)" +USERNAME=$ask_result + +while true; do + read -sp "Paperless password: " PASSWORD + echo "" + + if [[ -z $PASSWORD ]] ; then + echo "Password cannot be empty." + continue + fi + + read -sp "Paperless password (again): " PASSWORD_REPEAT + echo "" + + if [[ ! "$PASSWORD" == "$PASSWORD_REPEAT" ]] ; then + echo "Passwords did not match" + else + break + fi +done + +ask "Email" "$USERNAME@localhost" +EMAIL=$ask_result + +echo "Done collecting data. Press any key to install." +read + +echo "" +echo "Installing paperless..." +echo "" + +mkdir -p "$TARGET_FOLDER" + +cd "$TARGET_FOLDER" + +DOCKER_COMPOSE_VERSION=$DATABASE_BACKEND + +if [[ $TIKA_ENABLED == "yes" ]] ; then + DOCKER_COMPOSE_VERSION="$DOCKER_COMPOSE_VERSION-tika" +fi + +wget "https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/docker/compose/docker-compose.$DOCKER_COMPOSE_VERSION.yml" -O docker-compose.yml +wget "https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/docker/compose/.env" -O .env + +SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1) + +DEFAULT_LANGUAGES="deu eng fra ita spa" + +{ + if [[ ! $USERMAP_UID == "1000" ]] ; then + echo "USERMAP_UID=$USERMAP_UID" + fi + if [[ ! $USERMAP_GID == "1000" ]] ; then + echo "USERMAP_GID=$USERMAP_GID" + fi + echo "PAPERLESS_OCR_LANGUAGE=$OCR_LANGUAGE" + echo "PAPERLESS_SECRET_KEY=$SECRET_KEY" + if [[ ! " ${DEFAULT_LANGUAGES[@]} " =~ " ${OCR_LANGUAGE} " ]] ; then + echo "PAPERLESS_OCR_LANGUAGES=$OCR_LANGUAGE" + fi +} > docker-compose.env + +sed -i "s/- 8000:8000/- $PORT:8000/g" docker-compose.yml + +sed -i "s#- \./consume:/usr/src/paperless/consume#- $CONSUME_FOLDER:/usr/src/paperless/consume#g" docker-compose.yml + +if [[ -n $MEDIA_FOLDER ]] ; then + sed -i "s#- data:/usr/src/paperless/media#- $MEDIA_FOLDER:/usr/src/paperless/media#g" docker-compose.yml +fi + +if [[ -n $DATA_FOLDER ]] ; then + sed -i "s#- data:/usr/src/paperless/data#- $DATA_FOLDER:/usr/src/paperless/data#g" docker-compose.yml +fi + +docker-compose pull + +docker-compose run --rm -e DJANGO_SUPERUSER_PASSWORD="$PASSWORD" webserver createsuperuser --noinput --username "$USERNAME" --email "$EMAIL" + +docker-compose up -d From ac792f16d6f396f623e65939dc5868f736ecffeb Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 14:19:25 -0800 Subject: [PATCH 114/898] App 'submit an idea icon' --- src-ui/src/app/components/app-frame/app-frame.component.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index c4258ceae..eae597b22 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -172,6 +172,11 @@ <svg class="sidebaricon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#link"/> </svg> <ng-container i18n>GitHub</ng-container> + <a href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas" title="Suggest an idea"> + <svg xmlns="http://www.w3.org/2000/svg" width=".95rem" height=".95rem" fill="currentColor" class="bi bi-lightbulb pb-1 ml-1" viewBox="0 0 16 16"> + <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> + </svg> + </a> </a> </li> </ul> From 1117c1a5b6c5b8b1cdef9dd4924eed23b07df430 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 14:32:09 -0800 Subject: [PATCH 115/898] Remove feature request template, update others to point to Discussions --- .github/ISSUE_TEMPLATE/bug_report.md | 2 ++ .github/ISSUE_TEMPLATE/feature_request.md | 21 --------------------- .github/ISSUE_TEMPLATE/other.md | 4 +++- 3 files changed, 5 insertions(+), 22 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 0f0ac44e2..d64504494 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -12,6 +12,8 @@ assignees: '' => Please also make sure that you followed the installation instructions. => Please search the issues and look for similar issues before opening a bug report. +=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas + => If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably an issue with your system, and not an issue of paperless. => Don't remove the [BUG] prefix from the title. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 47c36c23d..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "[Feature Request] Consice and clear description of your feature request" -labels: '' -assignees: '' - ---- - -<!-- -=> We already have lots of feature requests open. Please search the existing requests first and look for feature requests similar to yours. - -=> Don't remove the [Feature Request] prefix from the title. - ---> - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md index ef394f7f9..1ceae0893 100644 --- a/.github/ISSUE_TEMPLATE/other.md +++ b/.github/ISSUE_TEMPLATE/other.md @@ -9,7 +9,9 @@ assignees: '' <!-- -=> Discussions, Feedback and other suggestions belong in the "Disussion" section and not on the issue tracker. +=> Discussions, Feedback and other suggestions belong in the "Discussion" section and not on the issue tracker. + +=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas => If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably is an issue with your system, and not an issue of paperless. From ea6b0d7e9c0f13712772b7e20ffdbdb6f85482a0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 31 Jan 2021 22:33:04 +0000 Subject: [PATCH 116/898] Apply translations in fr translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po' on the 'fr' language. --- src/locale/fr/LC_MESSAGES/django.po | 173 ++++++++++++++-------------- 1 file changed, 89 insertions(+), 84 deletions(-) diff --git a/src/locale/fr/LC_MESSAGES/django.po b/src/locale/fr/LC_MESSAGES/django.po index 7ab8aa45f..e956642d4 100644 --- a/src/locale/fr/LC_MESSAGES/django.po +++ b/src/locale/fr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-10 21:41+0000\n" +"POT-Creation-Date: 2021-01-28 22:02+0100\n" "PO-Revision-Date: 2020-12-30 19:27+0000\n" "Last-Translator: Philmo67, 2021\n" "Language-Team: French (https://www.transifex.com/paperless/teams/115905/fr/)\n" @@ -26,64 +26,64 @@ msgstr "" msgid "Documents" msgstr "Documents" -#: documents/models.py:32 +#: documents/models.py:33 msgid "Any word" msgstr "Un des mots" -#: documents/models.py:33 +#: documents/models.py:34 msgid "All words" msgstr "Tous les mots" -#: documents/models.py:34 +#: documents/models.py:35 msgid "Exact match" msgstr "Concordance exacte" -#: documents/models.py:35 +#: documents/models.py:36 msgid "Regular expression" msgstr "Expression régulière" -#: documents/models.py:36 +#: documents/models.py:37 msgid "Fuzzy word" msgstr "Mot approximatif" -#: documents/models.py:37 +#: documents/models.py:38 msgid "Automatic" msgstr "Automatique" -#: documents/models.py:41 documents/models.py:354 paperless_mail/models.py:25 +#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "nom" -#: documents/models.py:45 +#: documents/models.py:46 msgid "match" msgstr "rapprochement" -#: documents/models.py:49 +#: documents/models.py:50 msgid "matching algorithm" msgstr "algorithme de rapprochement" -#: documents/models.py:55 +#: documents/models.py:56 msgid "is insensitive" msgstr "est insensible à la casse" -#: documents/models.py:80 documents/models.py:140 +#: documents/models.py:75 documents/models.py:135 msgid "correspondent" msgstr "correspondant" -#: documents/models.py:81 +#: documents/models.py:76 msgid "correspondents" msgstr "correspondants" -#: documents/models.py:103 +#: documents/models.py:98 msgid "color" msgstr "couleur" -#: documents/models.py:107 +#: documents/models.py:102 msgid "is inbox tag" msgstr "est une étiquette de boîte de réception" -#: documents/models.py:109 +#: documents/models.py:104 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Marque cette étiquette comme étiquette de boîte de réception : ces " "étiquettes sont affectées à tous les documents nouvellement traités." -#: documents/models.py:114 +#: documents/models.py:109 msgid "tag" msgstr "étiquette" -#: documents/models.py:115 documents/models.py:171 +#: documents/models.py:110 documents/models.py:166 msgid "tags" msgstr "étiquettes" -#: documents/models.py:121 documents/models.py:153 +#: documents/models.py:116 documents/models.py:148 msgid "document type" msgstr "type de document" -#: documents/models.py:122 +#: documents/models.py:117 msgid "document types" msgstr "types de document" -#: documents/models.py:130 +#: documents/models.py:125 msgid "Unencrypted" msgstr "Non chiffré" -#: documents/models.py:131 +#: documents/models.py:126 msgid "Encrypted with GNU Privacy Guard" msgstr "Chiffré avec GNU Privacy Guard" -#: documents/models.py:144 +#: documents/models.py:139 msgid "title" msgstr "titre" -#: documents/models.py:157 +#: documents/models.py:152 msgid "content" msgstr "contenu" -#: documents/models.py:159 +#: documents/models.py:154 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,223 +131,228 @@ msgstr "" "Les données brutes du document, en format texte uniquement. Ce champ est " "principalement utilisé pour la recherche." -#: documents/models.py:164 +#: documents/models.py:159 msgid "mime type" msgstr "type mime" -#: documents/models.py:175 +#: documents/models.py:170 msgid "checksum" msgstr "somme de contrôle" -#: documents/models.py:179 +#: documents/models.py:174 msgid "The checksum of the original document." msgstr "La somme de contrôle du document original." -#: documents/models.py:183 +#: documents/models.py:178 msgid "archive checksum" msgstr "somme de contrôle de l'archive" -#: documents/models.py:188 +#: documents/models.py:183 msgid "The checksum of the archived document." msgstr "La somme de contrôle du document archivé." -#: documents/models.py:192 documents/models.py:332 +#: documents/models.py:187 documents/models.py:330 msgid "created" msgstr "créé le" -#: documents/models.py:196 +#: documents/models.py:191 msgid "modified" msgstr "modifié" -#: documents/models.py:200 +#: documents/models.py:195 msgid "storage type" msgstr "forme d'enregistrement :" -#: documents/models.py:208 +#: documents/models.py:203 msgid "added" msgstr "date d'ajout" -#: documents/models.py:212 +#: documents/models.py:207 msgid "filename" msgstr "nom du fichier" -#: documents/models.py:217 +#: documents/models.py:212 msgid "Current filename in storage" msgstr "Nom du fichier courant en base de données" -#: documents/models.py:221 +#: documents/models.py:216 msgid "archive serial number" msgstr "numéro de série de l'archive" -#: documents/models.py:226 +#: documents/models.py:221 msgid "The position of this document in your physical document archive." msgstr "" "Le classement de ce document dans votre archive de documents physiques." -#: documents/models.py:232 +#: documents/models.py:227 msgid "document" msgstr "document" -#: documents/models.py:233 +#: documents/models.py:228 msgid "documents" msgstr "documents" -#: documents/models.py:315 +#: documents/models.py:313 msgid "debug" msgstr "débogage" -#: documents/models.py:316 +#: documents/models.py:314 msgid "information" msgstr "information" -#: documents/models.py:317 +#: documents/models.py:315 msgid "warning" msgstr "avertissement" -#: documents/models.py:318 +#: documents/models.py:316 msgid "error" msgstr "erreur" -#: documents/models.py:319 +#: documents/models.py:317 msgid "critical" msgstr "critique" -#: documents/models.py:323 +#: documents/models.py:321 msgid "group" msgstr "groupe" -#: documents/models.py:326 +#: documents/models.py:324 msgid "message" msgstr "message" -#: documents/models.py:329 +#: documents/models.py:327 msgid "level" msgstr "niveau" -#: documents/models.py:336 +#: documents/models.py:334 msgid "log" msgstr "rapport" -#: documents/models.py:337 +#: documents/models.py:335 msgid "logs" msgstr "rapports" -#: documents/models.py:348 documents/models.py:398 +#: documents/models.py:346 documents/models.py:396 msgid "saved view" msgstr "vue enregistrée" -#: documents/models.py:349 +#: documents/models.py:347 msgid "saved views" msgstr "vues enregistrées" -#: documents/models.py:352 +#: documents/models.py:350 msgid "user" msgstr "utilisateur" -#: documents/models.py:358 +#: documents/models.py:356 msgid "show on dashboard" msgstr "montrer sur le tableau de bord" -#: documents/models.py:361 +#: documents/models.py:359 msgid "show in sidebar" msgstr "montrer dans la barre latérale" -#: documents/models.py:365 +#: documents/models.py:363 msgid "sort field" msgstr "champ de tri" -#: documents/models.py:368 +#: documents/models.py:366 msgid "sort reverse" msgstr "tri inverse" -#: documents/models.py:374 +#: documents/models.py:372 msgid "title contains" msgstr "le titre contient" -#: documents/models.py:375 +#: documents/models.py:373 msgid "content contains" msgstr "le contenu contient" -#: documents/models.py:376 +#: documents/models.py:374 msgid "ASN is" msgstr "le NSA est" -#: documents/models.py:377 +#: documents/models.py:375 msgid "correspondent is" msgstr "le correspondant est" -#: documents/models.py:378 +#: documents/models.py:376 msgid "document type is" msgstr "le type de document est" -#: documents/models.py:379 +#: documents/models.py:377 msgid "is in inbox" msgstr "est dans la boîte de réception" -#: documents/models.py:380 +#: documents/models.py:378 msgid "has tag" msgstr "porte l'étiquette" -#: documents/models.py:381 +#: documents/models.py:379 msgid "has any tag" msgstr "porte l'une des étiquettes" -#: documents/models.py:382 +#: documents/models.py:380 msgid "created before" msgstr "créé avant" -#: documents/models.py:383 +#: documents/models.py:381 msgid "created after" msgstr "créé après" -#: documents/models.py:384 +#: documents/models.py:382 msgid "created year is" msgstr "l'année de création est" -#: documents/models.py:385 +#: documents/models.py:383 msgid "created month is" msgstr "le mois de création est" -#: documents/models.py:386 +#: documents/models.py:384 msgid "created day is" msgstr "le jour de création est" -#: documents/models.py:387 +#: documents/models.py:385 msgid "added before" msgstr "ajouté avant" -#: documents/models.py:388 +#: documents/models.py:386 msgid "added after" msgstr "ajouté après" -#: documents/models.py:389 +#: documents/models.py:387 msgid "modified before" msgstr "modifié avant" -#: documents/models.py:390 +#: documents/models.py:388 msgid "modified after" msgstr "modifié après" -#: documents/models.py:391 +#: documents/models.py:389 msgid "does not have tag" msgstr "ne porte pas d'étiquette" -#: documents/models.py:402 +#: documents/models.py:400 msgid "rule type" msgstr "type de règle" -#: documents/models.py:406 +#: documents/models.py:404 msgid "value" msgstr "valeur" -#: documents/models.py:412 +#: documents/models.py:410 msgid "filter rule" msgstr "règle de filtrage" -#: documents/models.py:413 +#: documents/models.py:411 msgid "filter rules" msgstr "règles de filtrage" +#: documents/serialisers.py:383 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Type de fichier %(type)s non pris en charge" + #: documents/templates/index.html:20 msgid "Paperless-ng is loading..." msgstr "Paperless-ng est en cours de chargement..." @@ -390,23 +395,23 @@ msgstr "Mot de passe" msgid "Sign in" msgstr "S'identifier" -#: paperless/settings.py:268 +#: paperless/settings.py:286 msgid "English" msgstr "Anglais" -#: paperless/settings.py:269 +#: paperless/settings.py:287 msgid "German" msgstr "Allemand" -#: paperless/settings.py:270 +#: paperless/settings.py:288 msgid "Dutch" msgstr "Néerlandais" -#: paperless/settings.py:271 +#: paperless/settings.py:289 msgid "French" msgstr "Français" -#: paperless/urls.py:108 +#: paperless/urls.py:114 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" From 43ad4a2e18d201f159da5206e9e4382940b0a4fa Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 16:22:41 -0800 Subject: [PATCH 117/898] Update to use new feature-requests category of discussions --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/other.md | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index d64504494..9a4b9bc2f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -12,7 +12,7 @@ assignees: '' => Please also make sure that you followed the installation instructions. => Please search the issues and look for similar issues before opening a bug report. -=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas +=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests => If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably an issue with your system, and not an issue of paperless. diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md index 1ceae0893..8bb40d9d1 100644 --- a/.github/ISSUE_TEMPLATE/other.md +++ b/.github/ISSUE_TEMPLATE/other.md @@ -11,7 +11,7 @@ assignees: '' => Discussions, Feedback and other suggestions belong in the "Discussion" section and not on the issue tracker. -=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas +=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests => If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably is an issue with your system, and not an issue of paperless. diff --git a/README.md b/README.md index 4d87119c1..cb866e2ca 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ If you want to see paperless in your own language, request that language at tran # Feature Requests -Feature requests can be submitted via [GitHub Discussions](https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas), you can search for existing ideas, add your own and vote for the ones you care about! Note that some older feature requests can also be found under [issues](https://github.com/jonaswinkler/paperless-ng/issues). +Feature requests can be submitted via [GitHub Discussions](https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests), you can search for existing ideas, add your own and vote for the ones you care about! Note that some older feature requests can also be found under [issues](https://github.com/jonaswinkler/paperless-ng/issues). # Questions? Something not working? @@ -90,7 +90,7 @@ For bugs please [open an issue](https://github.com/jonaswinkler/paperless-ng/iss ## Feel like helping out? -There's still lots of things to be done, just have a look at that issue log. If you feel like contributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome. The documentation has some basic information on how to get started. +There's still lots of things to be done, just have a look at open issues & discussions. If you feel like contributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome. The documentation has some basic information on how to get started. If you want to implement something big: Please start a discussion about that in the issues! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. See the roadmap above. From c6a87c64ccdeec0df74f416e53a3938b5d4e5b95 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 16:23:08 -0800 Subject: [PATCH 118/898] Revert "App 'submit an idea icon'" This reverts commit 406ec170507295d05c982b720e1a53feafb445bf. --- src-ui/src/app/components/app-frame/app-frame.component.html | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index eae597b22..c4258ceae 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -172,11 +172,6 @@ <svg class="sidebaricon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#link"/> </svg> <ng-container i18n>GitHub</ng-container> - <a href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas" title="Suggest an idea"> - <svg xmlns="http://www.w3.org/2000/svg" width=".95rem" height=".95rem" fill="currentColor" class="bi bi-lightbulb pb-1 ml-1" viewBox="0 0 16 16"> - <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> - </svg> - </a> </a> </li> </ul> From d58308c6dd858321c1cb87e7c3ca14d7fcba3212 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 16:31:32 -0800 Subject: [PATCH 119/898] Change "Misc" to "Info" Also move to bottom of screen, add suggestions link, change GH icon --- .../app-frame/app-frame.component.html | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index c4258ceae..0507efc3f 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -52,12 +52,7 @@ <div class="container-fluid"> <div class="row"> <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse" [ngbCollapse]="isMenuCollapsed"> - - <div style="position: absolute; bottom: 0; left: 0;" class="text-muted p-1"> - {{versionString}} - </div> - - <div class="sidebar-sticky pt-3"> + <div class="sidebar-sticky pt-3 d-flex flex-column justify-space-around"> <ul class="nav flex-column"> <li class="nav-item"> <a class="nav-link" routerLink="dashboard" routerLinkActive="active" (click)="closeMenu()"> @@ -156,8 +151,8 @@ </li> </ul> - <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted"> - <ng-container i18n>Misc</ng-container> + <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-auto mb-1 text-muted"> + <ng-container i18n>Info</ng-container> </h6> <ul class="nav flex-column mb-2"> <li class="nav-item"> @@ -167,12 +162,21 @@ </svg> <ng-container i18n>Documentation</ng-container> </a> </li> - <li class="nav-item"> + <li class="nav-item d-flex"> <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng"> - <svg class="sidebaricon" fill="currentColor"> - <use xlink:href="assets/bootstrap-icons.svg#link"/> + <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="sidebaricon bi bi-github" viewBox="0 0 16 16"> + <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/> </svg> <ng-container i18n>GitHub</ng-container> </a> + <a class="small pt-2 mt-1 ml-1 text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas" title="Suggest an idea"> + <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> + <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> + </svg> + <ng-container i18n>Suggest an idea</ng-container> + </a> + </li> + <li class="nav-item px-3 py-2 text-muted small"> + {{versionString}} </li> </ul> </div> From dbd9dfce20446af2593b29c20a7d875aef2f0a67 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 16:33:39 -0800 Subject: [PATCH 120/898] Correct discussions category link --- src-ui/src/app/components/app-frame/app-frame.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 0507efc3f..c53d69f8a 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -168,7 +168,7 @@ <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/> </svg> <ng-container i18n>GitHub</ng-container> </a> - <a class="small pt-2 mt-1 ml-1 text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/ideas" title="Suggest an idea"> + <a class="small pt-2 mt-1 ml-1 text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> </svg> From 737618abb2205212635d972843174052a177c397 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 17:16:39 -0800 Subject: [PATCH 121/898] Use div containers --- .../app-frame/app-frame.component.html | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index c53d69f8a..854b2557d 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -162,21 +162,25 @@ </svg> <ng-container i18n>Documentation</ng-container> </a> </li> - <li class="nav-item d-flex"> - <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng"> - <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="sidebaricon bi bi-github" viewBox="0 0 16 16"> - <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/> - </svg> <ng-container i18n>GitHub</ng-container> - </a> - <a class="small pt-2 mt-1 ml-1 text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> - <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> - <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> - </svg> - <ng-container i18n>Suggest an idea</ng-container> - </a> + <li class="nav-item"> + <div class="d-flex w-100"> + <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng"> + <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="sidebaricon bi bi-github" viewBox="0 0 16 16"> + <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/> + </svg> <ng-container i18n>GitHub</ng-container> + </a> + <a class="small pt-2 mt-1 ml-1 text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> + <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> + <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> + </svg> + <ng-container i18n>Suggest an idea</ng-container> + </a> + </div> </li> - <li class="nav-item px-3 py-2 text-muted small"> - {{versionString}} + <li class="nav-item"> + <div class="px-3 py-2 text-muted small"> + {{versionString}} + </div> </li> </ul> </div> From 2e48f23f61e534b090f1ff9035e861aeedc458ab Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 19:09:31 -0800 Subject: [PATCH 122/898] Prevent safari wrap --- src-ui/src/app/components/app-frame/app-frame.component.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index e4b21add7..e62b4651d 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -57,6 +57,10 @@ text-transform: uppercase; } +.nav { + flex-wrap: nowrap; +} + /* * Navbar */ From 38039bb776cfb94cfe3147832cae8c941e7b3918 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 19:11:21 -0800 Subject: [PATCH 123/898] These arent needed on h6s --- .../src/app/components/app-frame/app-frame.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 854b2557d..95feda841 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -70,7 +70,7 @@ </li> </ul> - <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted" *ngIf='savedViewService.sidebarViews.length > 0'> + <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='savedViewService.sidebarViews.length > 0'> <ng-container i18n>Saved views</ng-container> </h6> <ul class="nav flex-column mb-2"> @@ -83,7 +83,7 @@ </li> </ul> - <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted" *ngIf='openDocuments.length > 0'> + <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='openDocuments.length > 0'> <ng-container i18n>Open documents</ng-container> </h6> <ul class="nav flex-column mb-2"> @@ -103,7 +103,7 @@ </li> </ul> - <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted"> + <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted"> <ng-container i18n>Manage</ng-container> </h6> <ul class="nav flex-column mb-2"> @@ -151,7 +151,7 @@ </li> </ul> - <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-auto mb-1 text-muted"> + <h6 class="sidebar-heading px-3 mt-auto mb-1 text-muted"> <ng-container i18n>Info</ng-container> </h6> <ul class="nav flex-column mb-2"> From bef8aa1d64f2b7e49ed442bbbd95c0d91e257c65 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 19:11:27 -0800 Subject: [PATCH 124/898] space for info heading --- src-ui/src/app/components/app-frame/app-frame.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 95feda841..fc9efd8a6 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -151,7 +151,7 @@ </li> </ul> - <h6 class="sidebar-heading px-3 mt-auto mb-1 text-muted"> + <h6 class="sidebar-heading px-3 mt-auto pt-4 mb-1 text-muted"> <ng-container i18n>Info</ng-container> </h6> <ul class="nav flex-column mb-2"> From 588c89ea48c9153e147f9d776f4c82495eee5e6b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 19:16:38 -0800 Subject: [PATCH 125/898] Fix Safari overflow issue --- src-ui/src/app/components/app-frame/app-frame.component.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index e62b4651d..6615ea9d6 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -24,6 +24,7 @@ padding-top: 0.5rem; overflow-x: hidden; overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + min-height: min-content; } @supports ((position: -webkit-sticky) or (position: sticky)) { .sidebar-sticky { From ab1f3b14ff7bf29e4fb431fa0cd7aa75e73bf616 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 19:20:00 -0800 Subject: [PATCH 126/898] Yes, 2px margin on the svg icon --- src-ui/src/app/components/app-frame/app-frame.component.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 6615ea9d6..3a8f58176 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -62,6 +62,10 @@ flex-wrap: nowrap; } +.nav-item .small svg { + margin-bottom: 2px; +} + /* * Navbar */ From 488c271d25433e9e04bddbe625a08766a5807873 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 31 Jan 2021 19:24:37 -0800 Subject: [PATCH 127/898] additional link spacing --- .../app/components/app-frame/app-frame.component.html | 2 +- .../app/components/app-frame/app-frame.component.scss | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index fc9efd8a6..70329d537 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -169,7 +169,7 @@ <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/> </svg> <ng-container i18n>GitHub</ng-container> </a> - <a class="small pt-2 mt-1 ml-1 text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> + <a class="nav-link-additional small text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> </svg> diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 3a8f58176..b6181b364 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -62,8 +62,14 @@ flex-wrap: nowrap; } -.nav-item .small svg { - margin-bottom: 2px; +.nav-item .nav-link-additional { + margin-top: 0.2rem; + margin-left: 0.25rem; + padding-top: 0.5rem; + + svg { + margin-bottom: 2px; + } } /* From 84e24dc85edef353ae483735bcc7f260119d4597 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 1 Feb 2021 09:31:34 +0000 Subject: [PATCH 128/898] Translate /src-ui/messages.xlf in nl_NL translation completed for the source file '/src-ui/messages.xlf' on the 'nl_NL' language. --- src-ui/src/locale/messages.nl_NL.xlf | 380 ++++++++++++++++++++++----- 1 file changed, 318 insertions(+), 62 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 3753bc92c..0e164d688 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1,12 +1,60 @@ <?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="nl-NL"> <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Document toegevoegd</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Document <x equiv-text="status.filename" id="PH"/> werd toegevoegd aan paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Open document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Kon niet toevoegen <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>Nieuw document gedetecteerd</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Document <x equiv-text="status.filename" id="PH"/> wordt verwerkt door paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="4733307402565258070"> <source>Documents</source> <target>Documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">43</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> @@ -14,7 +62,7 @@ <target>View "<x equiv-text="this.list.savedView.name" id="PH"/>" met succes opgeslagen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">109</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -22,7 +70,7 @@ <target>View "<x equiv-text="savedView.name" id="PH"/>" met succes gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -166,7 +214,7 @@ <target>Bevestig het verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">192</context> + <context context-type="linenumber">199</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> @@ -174,7 +222,7 @@ <target>Wilt u het document echt verwijderen "<x equiv-text="this.document.title" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">193</context> + <context context-type="linenumber">200</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6691075929777935948"> @@ -182,7 +230,7 @@ <target>De bestanden voor dit document worden definitief verwijderd. Deze bewerking kan niet ongedaan worden gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">194</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="719892092227206532"> @@ -190,7 +238,7 @@ <target>Verwijder document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">196</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1844801255494293730"> @@ -198,7 +246,7 @@ <target>Fout bij het verwijderen van het document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">210</context> </context-group> </trans-unit> <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> @@ -550,7 +598,7 @@ <target>Opgeslagen view "<x equiv-text="savedView.name" id="PH"/>" verwijderd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">67</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -558,7 +606,7 @@ <target>Instellingen succesvol opgeslagen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">79</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -566,7 +614,7 @@ <target>Gebruik de systeemtaal</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -574,7 +622,7 @@ <target>Datumopmaak van weergavetaal gebruiken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -582,7 +630,7 @@ <target>Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">111</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -606,7 +654,7 @@ <target>Opgeslagen views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">128</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -729,12 +777,68 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Meldingen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f"> + <source>Consumer status</source> + <target>Status van de verwerker</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Toon meldingen wanneer nieuwe documenten worden gedetecteerd</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">109</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3"> + <source>Show notifications when document consumption completes successfully</source> + <target>Toon meldingen wanneer documenten met succes zijn verwerkt.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">110</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2bcbcbe99e207803e21183580b98d90410dd8718"> + <source>Show notifications when document consumption fails</source> + <target>Toon meldingen wanneer het verwerken van documenten faalt.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Onderdruk meldingen op het dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890"> + <source>This will suppress all consumer related status messages on the dashboard.</source> + <target>Dit verbergt alle statusberichten op het dashboard die met de verwerker te maken hebben.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Massabewerking</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -742,7 +846,7 @@ <target>Toon dialoogvenster ter bevestiging</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -750,7 +854,7 @@ <target>Er zal altijd om bevestiging gevraagd worden voor het verwijderen van documenten.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -758,7 +862,7 @@ <target>Toepassen bij het sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">121</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -766,7 +870,7 @@ <target>Komt voor bij</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">140</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -774,7 +878,7 @@ <target>Toon op het dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">143</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -782,7 +886,7 @@ <target>Toon in de zijbalk</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">147</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -790,7 +894,7 @@ <target>Geen opgeslagen views gedefinieerd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">157</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -915,7 +1019,7 @@ </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten.</target> + <target>"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten."</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">21</context> @@ -1283,6 +1387,14 @@ <context context-type="linenumber">73</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> <target>"<x equiv-text="items[0].name" id="PH"/>" en "<x equiv-text="items[1].name" id="PH_1"/>"</target> @@ -1292,14 +1404,6 @@ </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="i.name" id="PH"/>"</source> - <target>"<x equiv-text="i.name" id="PH"/>"</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="760986369763309193"> <source>, </source> <target>, </target> @@ -1470,6 +1574,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Suggesties:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> <source>Save current view</source> <target>Huidige view opslaan</target> @@ -1510,28 +1622,52 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="8705589528094706681"> - <source>The document has been uploaded and will be processed by the consumer shortly.</source> - <target>Het document werd opgeladen en zal binnenkort worden verwerkt.</target> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>Bezig met verwerken: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="4956689020592747108"> - <source>There was an error while uploading the document: <x equiv-text="error.error.document" id="PH"/></source> - <target>Fout bij het opladen van het document: <x equiv-text="error.error.document" id="PH"/></target> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Gefaald: <x equiv-text="countFailed" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">71</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="7554858521017940575"> - <source>An error has occurred while uploading the document. Sorry!</source> - <target>Er ging iets mis bij het opladen van het document. Onze excuses!</target> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Toegevoegd: <x equiv-text="countSuccess" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Bezig met verbinden...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Bezig met opladen...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3994065460580948013"> + <source>Waiting for consumer...</source> + <target>Wachten op het verwerken...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> @@ -1547,7 +1683,7 @@ <target>Sleep documenten hierheen, of</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> @@ -1555,15 +1691,31 @@ <target>Kies bestanden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="33c76d75ce25ce3b05ab22877f1b6b09dcf603ae"> - <source>{VAR_PLURAL, plural, =1 {Uploading file...} =other {Uploading <x id="INTERPOLATION"/> files...}}</source> - <target>{VAR_PLURAL, plural, =1 {Bezig met opladen van het bestand...} =other {Bezig met opladen van <x id="INTERPOLATION"/> bestanden...}}</target> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Verberg verwerkte documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265"> + <source><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> more hidden</source> + <target><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> niet getoond</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Open document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> @@ -1675,7 +1827,7 @@ <target>Engels (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">82</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1683,7 +1835,7 @@ <target>Duits</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">83</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1691,7 +1843,7 @@ <target>Nederlands</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">76</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1699,7 +1851,111 @@ <target>Frans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">77</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Document bestaat al.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>Bestand niet gevonden.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Pre-verwerkingsscript bestaat niet.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Fout tijdens het uitvoeren van het pre-verwerkingsscript</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Post-verwerkingsscript bestaat niet.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Fout tijdens het uitvoeren van het post-verwerkingsscript</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Nieuw bestand ontvangen.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>Bestandstype niet ondersteund.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Document wordt verwerkt...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Voorbeeldweergave wordt gemaakt...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Datum wordt gezocht in document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Document wordt opgeslagen...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Klaar.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1519954996184640001"> @@ -1707,7 +1963,7 @@ <target>Fout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5037437391296624618"> @@ -1715,7 +1971,7 @@ <target>Informatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7517688192215738656"> @@ -1723,7 +1979,7 @@ <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2691296884221415710"> @@ -1731,7 +1987,7 @@ <target>Correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5701618810648052610"> @@ -1739,7 +1995,7 @@ <target>Titel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> @@ -1747,7 +2003,7 @@ <target>Documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4207916966377787111"> @@ -1755,7 +2011,7 @@ <target>Aangemaakt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit datatype="html" id="231679111972850796"> @@ -1763,7 +2019,7 @@ <target>Toegevoegd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3553216189604488439"> @@ -1771,7 +2027,7 @@ <target>Gewijzigd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2056433880533904076"> From d8abf8250c705c6b644175be85c784a3c5896eff Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Mon, 1 Feb 2021 20:14:29 +0100 Subject: [PATCH 129/898] troubleshooting for #216 --- docs/troubleshooting.rst | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index f55d57af5..ae7fe14c7 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -60,7 +60,8 @@ required so that the user running paperless inside docker has write permissions to these folders. This happens when pointing these directories to NFS shares, for example. -Ensure that `chown` is possible on these directories. +Ensure that ``chown`` is possible on these directories. + Classifier error: No training data available ############################################ @@ -73,6 +74,7 @@ This may have two reasons: with Inbox tags. Verify that there are documents in your archive without inbox tags. The algorithm will only learn from documents not in your inbox. + UserWarning in sklearn on every single document ############################################### @@ -91,6 +93,7 @@ in most cases. This warning will disappear automatically when paperless updates If you want to get rid of the warning or actually experience issues with automatic matching, delete the file ``classification_model.pickle`` in the data directory and let paperless recreate it. + Permission denied errors in the consumption directory ##################################################### @@ -106,6 +109,38 @@ different from ``1000``. See :ref:`setup-docker_hub`. Also ensure that you are able to read and write to the consumption directory on the host. + +OSError: [Errno 19] No such device when consuming files +####################################################### + +If you experience errors such as: + +.. code:: shell-session + + File "/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py", line 570, in open_compound_file + return CompoundStorage(dbfile, use_mmap=storage.supports_mmap) + File "/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py", line 75, in __init__ + self._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ) + OSError: [Errno 19] No such device + + During handling of the above exception, another exception occurred: + + Traceback (most recent call last): + File "/usr/local/lib/python3.7/site-packages/django_q/cluster.py", line 436, in worker + res = f(*task["args"], **task["kwargs"]) + File "/usr/src/paperless/src/documents/tasks.py", line 73, in consume_file + override_tag_ids=override_tag_ids) + File "/usr/src/paperless/src/documents/consumer.py", line 271, in try_consume_file + raise ConsumerError(e) + +Paperless uses a search index to provide better and faster full text searching. This search index is stored inside +the ``data`` folder. The search index uses memory-mapped files (mmap). The above error indicates that paperless +was unable to create and open these files. + +This happens when you're trying to store the data directory on certain file systems (mostly network shares) +that don't support memory-mapped files. + + Web-UI stuck at "Loading..." ############################ @@ -148,4 +183,4 @@ This might have multiple reasons. SENDFILE=0 - to your `docker-compose.env` file. \ No newline at end of file + to your `docker-compose.env` file. From 34462d9deb71840142e72f520713040b8a983b88 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Mon, 1 Feb 2021 21:43:50 +0100 Subject: [PATCH 130/898] adjustments to setup --- docs/setup.rst | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index afb3784d6..a86c4ce27 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -151,13 +151,16 @@ Install Paperless from Docker Hub .. code:: - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume - + Don't change the part after the colon or paperless wont find your documents. 5. Modify ``docker-compose.env``, following the comments in the file. The most important change is to set ``USERMAP_UID`` and ``USERMAP_GID`` - to the uid and gid of your user on the host system. This ensures that + to the uid and gid of your user on the host system. Use ``id -u`` and + ``id -g`` to get these. + + This ensures that both the docker container and you on the host machine have write access to the consumption directory. If your UID and GID on the host system is 1000 (the default for the first normal user on most systems), it will @@ -175,15 +178,11 @@ Install Paperless from Docker Hub on such a file system, paperless will not pick up new files with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``, which will disable inotify. See :ref:`here <configuration-polling>`. - -6. Now head over to: https://hub.docker.com/r/jonaswinkler/paperless-ng and choose your preferred - image and copy the link. To download this image do a `docker pull` followed by the link. Do this within the directory with the .yml files. - Depending on your network connection and CPU this will take a while. You have time to get a beverage. -7. Run ``docker-compose up -d``. This will create and start the necessary - containers, but your are not done yet! +6. Run ``docker-compose up -d``. This will pull the image, create and start the necessary + containers. -8. To be able to login, you will need a super user. To create it, execute the +7. To be able to login, you will need a super user. To create it, execute the following command: .. code-block:: shell-session @@ -193,8 +192,8 @@ Install Paperless from Docker Hub This will prompt you to set a username, an optional e-mail address and finally a password (at least 8 characters). -9. The default ``docker-compose.yml`` exports the webserver on your local port - 8000. If you haven't adapted this, you should now be able to visit your +8. The default ``docker-compose.yml`` exports the webserver on your local port + 8000. If you did not change this, you should now be able to visit your Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. Use the login credentials you have created with the previous step. From 66b18266b837d31069b3cabad1453f1233b0b291 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@jpwinkler.de> Date: Mon, 1 Feb 2021 21:45:45 +0100 Subject: [PATCH 131/898] add pull to docker setup --- docs/setup.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index a86c4ce27..5c3c9c361 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -179,8 +179,8 @@ Install Paperless from Docker Hub with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``, which will disable inotify. See :ref:`here <configuration-polling>`. -6. Run ``docker-compose up -d``. This will pull the image, create and start the necessary - containers. +6. Run ``docker-compose pull``, followed by ``docker-compose up -d``. + This will pull the image, create and start the necessary containers. 7. To be able to login, you will need a super user. To create it, execute the following command: From 0814a89a72651d9f519605269e6b21d9214dde87 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 12:56:26 +0100 Subject: [PATCH 132/898] updates messages --- src-ui/messages.xlf | 21 ++++++++++--------- .../upload-file-widget.component.html | 2 +- .../upload-file-widget.component.ts | 2 +- .../manage/settings/settings.component.html | 8 +++---- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index ff928863d..17c585c28 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -688,8 +688,8 @@ <context context-type="linenumber">102</context> </context-group> </trans-unit> - <trans-unit id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f" datatype="html"> - <source>Consumer status</source> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">106</context> @@ -702,15 +702,15 @@ <context context-type="linenumber">109</context> </context-group> </trans-unit> - <trans-unit id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3" datatype="html"> - <source>Show notifications when document consumption completes successfully</source> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">110</context> </context-group> </trans-unit> - <trans-unit id="2bcbcbe99e207803e21183580b98d90410dd8718" datatype="html"> - <source>Show notifications when document consumption fails</source> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">111</context> @@ -723,8 +723,8 @@ <context context-type="linenumber">112</context> </context-group> </trans-unit> - <trans-unit id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890" datatype="html"> - <source>This will suppress all consumer related status messages on the dashboard.</source> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">112</context> @@ -1456,8 +1456,8 @@ <context context-type="linenumber">123</context> </context-group> </trans-unit> - <trans-unit id="3994065460580948013" datatype="html"> - <source>Waiting for consumer...</source> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> @@ -1490,6 +1490,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> </trans-unit> <trans-unit id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265" datatype="html"> <source><x id="INTERPOLATION" equiv-text="{{getStatusHidden().length}}"/> more hidden</source> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 3e2908b84..252480147 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -1,7 +1,7 @@ <app-widget-frame title="Upload new documents" i18n-title> <div header-buttons> <a *ngIf="getStatusCompleted().length > 0" (click)="dismissAll()" [routerLink]="" > - <span i18n>Dismiss completed</span>  + <span i18n="This button dismisses all status messages about processed documents on the dashboard (failed and successful)">Dismiss completed</span>  <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-check2-all" viewBox="0 0 16 16"> <path d="M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7l-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z"/> <path d="M5.354 7.146l.896.897-.707.707-.897-.896a.5.5 0 1 1 .708-.708z"/> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 5ac68d42a..f604a3fc1 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -123,7 +123,7 @@ export class UploadFileWidgetComponent implements OnInit { status.message = $localize`Uploading...` } else if (event.type == HttpEventType.Response) { status.taskId = event.body["task_id"] - status.message = $localize`Waiting for consumer...` + status.message = $localize`Upload complete, waiting...` } }, error => { diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 910867ace..b95b56133 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -103,13 +103,13 @@ <div class="form-row form-group"> <div class="col-md-3 col-form-label"> - <span i18n>Consumer status</span> + <span i18n>Document processing</span> </div> <div class="col"> <app-input-check i18n-title title="Show notifications when new documents are detected" formControlName="notificationsConsumerNewDocument"></app-input-check> - <app-input-check i18n-title title="Show notifications when document consumption completes successfully" formControlName="notificationsConsumerSuccess"></app-input-check> - <app-input-check i18n-title title="Show notifications when document consumption fails" formControlName="notificationsConsumerFailed"></app-input-check> - <app-input-check i18n-title title="Suppress notifications on dashboard" formControlName="notificationsConsumerSuppressOnDashboard" i18n-hint hint="This will suppress all consumer related status messages on the dashboard."></app-input-check> + <app-input-check i18n-title title="Show notifications when document processing completes successfully" formControlName="notificationsConsumerSuccess"></app-input-check> + <app-input-check i18n-title title="Show notifications when document processing fails" formControlName="notificationsConsumerFailed"></app-input-check> + <app-input-check i18n-title title="Suppress notifications on dashboard" formControlName="notificationsConsumerSuppressOnDashboard" i18n-hint hint="This will suppress all messages about document processing status on the dashboard."></app-input-check> </div> </div> From 5084a547d13d9945c834539754908575757c7ecf Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 12:58:23 +0100 Subject: [PATCH 133/898] removed dead files --- src-ui/src/app/components/login/login.component.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src-ui/src/app/components/login/login.component.ts diff --git a/src-ui/src/app/components/login/login.component.ts b/src-ui/src/app/components/login/login.component.ts deleted file mode 100644 index e69de29bb..000000000 From f5ce8338468a88bcd5692354c4e90f07b0b0c46a Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 13:10:51 +0100 Subject: [PATCH 134/898] more message changes --- src-ui/messages.xlf | 13 +++++++++---- .../upload-file-widget.component.html | 8 ++++++-- src-ui/src/app/services/consumer-status.service.ts | 8 ++++---- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 17c585c28..d07659793 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1492,18 +1492,19 @@ </context-group> <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> </trans-unit> - <trans-unit id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265" datatype="html"> - <source><x id="INTERPOLATION" equiv-text="{{getStatusHidden().length}}"/> more hidden</source> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> @@ -1645,6 +1646,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -1652,6 +1654,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> @@ -1659,6 +1662,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> @@ -1666,6 +1670,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index 252480147..cabeb0643 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -20,8 +20,12 @@ <div *ngFor="let status of getStatus()"> <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> </div> - <div *ngIf="getStatusHidden().length" class="alerts-hidden"> - <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center"><span i18n>{{getStatusHidden().length}} more hidden</span> <button class="btn btn-sm btn-link py-0" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded" i18n>Show all</button></p> + <div *ngIf="!getStatusHidden().length" class="alerts-hidden"> + <p *ngIf="!alertsExpanded" class="mt-3 mb-0 text-center"> + <span i18n="This is shown as a summary line when there are more than 5 document in the processing pipeline.">{getStatusHidden().length, plural, =1 {One more document} other {{{getStatusHidden().length}} more documents}}</span> +  •  + <a [routerLink]="" (click)="alertsExpanded = !alertsExpanded" aria-controls="hiddenAlerts" [attr.aria-expanded]="alertsExpanded" i18n>Show all</a> + </p> <div #hiddenAlerts="ngbCollapse" [(ngbCollapse)]="!alertsExpanded"> <div *ngFor="let status of getStatusHidden()"> <ng-container [ngTemplateOutlet]="consumerAlert" [ngTemplateOutletContext]="{ $implicit: status }"></ng-container> diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 026c3c64f..9c7d0417a 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -13,10 +13,10 @@ export enum FileStatusPhase { export const FILE_STATUS_MESSAGES = { "document_already_exists": $localize`Document already exists.`, "file_not_found": $localize`File not found.`, - "pre_consume_script_not_found": $localize`Pre-consume script does not exist.`, - "pre_consume_script_error": $localize`Error while executing pre-consume script.`, - "post_consume_script_not_found": $localize`Post-consume script does not exist.`, - "post_consume_script_error": $localize`Error while executing post-consume script.`, + "pre_consume_script_not_found": $localize`:Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation:Pre-consume script does not exist.`, + "pre_consume_script_error": $localize`:Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation:Error while executing pre-consume script.`, + "post_consume_script_not_found": $localize`:Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation:Post-consume script does not exist.`, + "post_consume_script_error": $localize`:Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation:Error while executing post-consume script.`, "new_file": $localize`Received new file.`, "unsupported_type": $localize`File type not supported.`, "parsing_document": $localize`Processing document...`, From aff62c75cf07aee166bb2a5e88d7647e6136f5b2 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 2 Feb 2021 12:17:25 +0000 Subject: [PATCH 135/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 44 ++++++++++++++++++------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index 54acbd23e..ce6fa0c1b 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -785,9 +785,9 @@ <context context-type="linenumber">102</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f"> - <source>Consumer status</source> - <target>Status Dokumentenverarbeitung</target> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Dokumentverarbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">106</context> @@ -801,17 +801,17 @@ <context context-type="linenumber">109</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3"> - <source>Show notifications when document consumption completes successfully</source> - <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden.</target> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">110</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2bcbcbe99e207803e21183580b98d90410dd8718"> - <source>Show notifications when document consumption fails</source> - <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden können</target> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">111</context> @@ -825,8 +825,8 @@ <context context-type="linenumber">112</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890"> - <source>This will suppress all consumer related status messages on the dashboard.</source> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> <target>Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> @@ -1662,9 +1662,9 @@ <context context-type="linenumber">123</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="3994065460580948013"> - <source>Waiting for consumer...</source> - <target>Warte auf Consumer...</target> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Dateo hochgeladen, warte...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> @@ -1701,21 +1701,23 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> </trans-unit> - <trans-unit datatype="html" id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265"> - <source><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> more hidden</source> - <target><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> weitere versteckt</target> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Ein weiteres Dokument} other {<x id="INTERPOLATION"/> weitere Dokumente}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> </trans-unit> <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> <source>Open document</source> <target>Dokument öffnen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> @@ -1877,6 +1879,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="7742915911032564889"> <source>Error while executing pre-consume script.</source> @@ -1885,6 +1888,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="8995193730018060346"> <source>Post-consume script does not exist.</source> @@ -1893,6 +1897,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="256773668518189604"> <source>Error while executing post-consume script.</source> @@ -1901,6 +1906,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="6252258095055634191"> <source>Received new file.</source> From 918d81624d04f9684705c1484d11d626acd0cd1c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 13:27:08 +0100 Subject: [PATCH 136/898] CI: ignore translation branches --- .github/workflows/ansible.yml | 8 +++++++- .github/workflows/ci.yml | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index a27ce103c..fe5789e2c 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -1,7 +1,13 @@ --- name: Ansible Role -on: [push, pull_request] +on: + push: + branches-ignore: + - 'translations_**' + pull_request: + branches-ignore: + - 'translations_**' jobs: # https://molecule.readthedocs.io/en/latest/ci.html#github-actions diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a1e9640d4..423028275 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,12 @@ name: ci -on: [push, pull_request] +on: + push: + branches-ignore: + - 'translations_**' + pull_request: + branches-ignore: + - 'translations_**' jobs: documentation: From 94f14fa45994b2c01e905a1d17bfeb92c3b66e54 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 2 Feb 2021 12:30:13 +0000 Subject: [PATCH 137/898] Translate /src-ui/messages.xlf in de translated for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index ce6fa0c1b..fab64cb44 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -1664,7 +1664,7 @@ </trans-unit> <trans-unit datatype="html" id="7446520539098045935"> <source>Upload complete, waiting...</source> - <target>Dateo hochgeladen, warte...</target> + <target>Datei hochgeladen, warte...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> @@ -2038,7 +2038,7 @@ </trans-unit> <trans-unit datatype="html" id="2056433880533904076"> <source>Light blue</source> - <target>Hellblau</target> + <target>Blau, hell</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> <context context-type="linenumber">6</context> @@ -2054,7 +2054,7 @@ </trans-unit> <trans-unit datatype="html" id="1143414876575720034"> <source>Light green</source> - <target>Hellgrün</target> + <target>Grün, hell</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> <context context-type="linenumber">8</context> @@ -2070,7 +2070,7 @@ </trans-unit> <trans-unit datatype="html" id="3250646524116252719"> <source>Light red</source> - <target>Hellrot</target> + <target>Rot, hell</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> <context context-type="linenumber">10</context> @@ -2086,7 +2086,7 @@ </trans-unit> <trans-unit datatype="html" id="5479028842846122610"> <source>Light orange</source> - <target>Hellorange</target> + <target>Orange, hell</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> <context context-type="linenumber">12</context> @@ -2102,7 +2102,7 @@ </trans-unit> <trans-unit datatype="html" id="1789283185177957430"> <source>Light violet</source> - <target>Hellviolet</target> + <target>Violet, hell</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> <context context-type="linenumber">14</context> @@ -2134,7 +2134,7 @@ </trans-unit> <trans-unit datatype="html" id="461048771215121187"> <source>Light grey</source> - <target>Hellgrau</target> + <target>Grau, hell</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> <context context-type="linenumber">18</context> From cf68b1d09a362ed8d291aae473d9b4cd1b93868f Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 2 Feb 2021 12:34:03 +0000 Subject: [PATCH 138/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 336 ++++++++++++++++++++++++++---- 1 file changed, 295 insertions(+), 41 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index 62dbad342..b3c84f14c 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -1,12 +1,60 @@ <?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="fr"> <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Document ajouté</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Le document <x equiv-text="status.filename" id="PH"/> a été ajouté à Paperless-ng.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Ouvrir le document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Impossible d'ajouter <x equiv-text="status.filename" id="PH"/> : <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>Nouveau document détecté</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Le document <x equiv-text="status.filename" id="PH"/> est en cours de traitement par Paperless-ng.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="4733307402565258070"> <source>Documents</source> <target>Documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">43</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> @@ -14,7 +62,7 @@ <target>Vue "<x equiv-text="this.list.savedView.name" id="PH"/>" enregistrée avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">109</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -22,7 +70,7 @@ <target>Vue "<x equiv-text="savedView.name" id="PH"/>" créée avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -550,7 +598,7 @@ <target>Vue "<x equiv-text="savedView.name" id="PH"/>" supprimée.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">67</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -558,7 +606,7 @@ <target>Paramètres enregistrés avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">79</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -566,7 +614,7 @@ <target>Utiliser la langue du système</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -574,7 +622,7 @@ <target>Utiliser le format de date de la langue d'affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -582,7 +630,7 @@ <target>Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">111</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -606,7 +654,7 @@ <target>Vues enregistrées</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">128</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -729,12 +777,68 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Notifications</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Traitement de document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Afficher des notifications lorsque de nouveaux documents sont détectés</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">109</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Afficher des notifications lorsque le traitement des documents se termine avec succès</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">110</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Afficher des notifications en cas d'échec du traitement des documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Supprimer les notifications du tableau de bord</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Edition en masse</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -742,7 +846,7 @@ <target>Afficher les messages de confirmation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -750,7 +854,7 @@ <target>La suppression de documents requiert toujours une confirmation.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">120</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -758,7 +862,7 @@ <target>Appliquer lors de la fermeture</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">121</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -766,7 +870,7 @@ <target>Apparaît sur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">140</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -774,7 +878,7 @@ <target>Montrer sur le tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">143</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -782,7 +886,7 @@ <target>Montrer dans la barre latérale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">147</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -790,7 +894,7 @@ <target>Aucune vue sauvegardée n'est définie.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">157</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1518,28 +1622,52 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="8705589528094706681"> - <source>The document has been uploaded and will be processed by the consumer shortly.</source> - <target>Le document a été transmis et sera traité sous peu.</target> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>Traitement : <x equiv-text="countUploadingAndProcessing" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">63</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="4956689020592747108"> - <source>There was an error while uploading the document: <x equiv-text="error.error.document" id="PH"/></source> - <target>Une erreur s'est produite lors du téléchargement du document : <x equiv-text="error.error.document" id="PH"/></target> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Échec : <x equiv-text="countFailed" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">71</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="7554858521017940575"> - <source>An error has occurred while uploading the document. Sorry!</source> - <target>Une erreur s'est produite lors du téléchargement du document. Désolé !</target> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Ajout : <x equiv-text="countSuccess" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Connexion...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Téléchargement...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Chargement terminé, en attente...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> @@ -1555,7 +1683,7 @@ <target>Déposer des documents ici ou</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> @@ -1563,15 +1691,33 @@ <target>Parcourir les fichiers</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">5</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="33c76d75ce25ce3b05ab22877f1b6b09dcf603ae"> - <source>{VAR_PLURAL, plural, =1 {Uploading file...} =other {Uploading <x id="INTERPOLATION"/> files...}}</source> - <target>{VAR_PLURAL, plural, =1 {Chargement du fichier...} =other {Chargement des <x id="INTERPOLATION"/> fichiers...}}</target> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Masquer lorsque terminé</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">4</context> + </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + </trans-unit> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Un document supplémentaire} other {<x id="INTERPOLATION"/> documents supplémentaires}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Ouvrir le document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> @@ -1683,7 +1829,7 @@ <target>Anglais (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">82</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1691,7 +1837,7 @@ <target>Allemand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">75</context> + <context context-type="linenumber">83</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1699,7 +1845,7 @@ <target>Néerlandais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">76</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1707,7 +1853,115 @@ <target>Français</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">77</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Le document existe déjà.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>Fichier non trouvé.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Le script de pré-traitement n'existe pas.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Erreur lors de l'exécution du script de pré-traitement.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Le script de post-traitement n'existe pas.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Erreur lors de l'exécution du script de post-traitement.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Réception d'un nouveau fichier.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>Type de fichier non pris en charge.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Traitement du document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Génération de vignette...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Extraction de la date du document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Enregistrement du document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Terminé.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1519954996184640001"> @@ -1715,7 +1969,7 @@ <target>Erreur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5037437391296624618"> @@ -1723,7 +1977,7 @@ <target>Information</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7517688192215738656"> From aafd24b1697fc66a96c4455320d3eb709a8fda13 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 14:06:16 +0100 Subject: [PATCH 139/898] messages, reorganized settings --- src-ui/messages.xlf | 141 +++++++++--------- .../manage/settings/settings.component.html | 33 ++-- 2 files changed, 93 insertions(+), 81 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index d07659793..86198ca7f 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -569,11 +569,18 @@ <context context-type="linenumber">10</context> </context-group> </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">128</context> + <context context-type="linenumber">133</context> </context-group> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> @@ -681,109 +688,102 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> - <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> - <source>Notifications</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> - </context-group> - </trans-unit> - <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> - <source>Document processing</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> - </context-group> - </trans-unit> - <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> - <source>Show notifications when new documents are detected</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">109</context> - </context-group> - </trans-unit> - <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> - <source>Show notifications when document processing completes successfully</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">110</context> - </context-group> - </trans-unit> - <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> - <source>Show notifications when document processing fails</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">111</context> - </context-group> - </trans-unit> - <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> - <source>Suppress notifications on dashboard</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> - <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> - <source>This will suppress all messages about document processing status on the dashboard.</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">121</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">140</context> + <context context-type="linenumber">145</context> </context-group> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">148</context> </context-group> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">147</context> + <context context-type="linenumber">152</context> </context-group> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">157</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> @@ -980,35 +980,42 @@ <source>Manage</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">154</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> - <trans-unit id="46aa32e581922d6d2c3d7bc4c87209ad5808b029" datatype="html"> - <source>Misc</source> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">155</context> </context-group> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">167</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">174</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> </context-group> </trans-unit> <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> @@ -1022,14 +1029,14 @@ <source>Open documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">101</context> </context-group> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index b95b56133..affe2f0b0 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -99,20 +99,6 @@ </div> </div> - <h4 class="mt-4" i18n>Notifications</h4> - - <div class="form-row form-group"> - <div class="col-md-3 col-form-label"> - <span i18n>Document processing</span> - </div> - <div class="col"> - <app-input-check i18n-title title="Show notifications when new documents are detected" formControlName="notificationsConsumerNewDocument"></app-input-check> - <app-input-check i18n-title title="Show notifications when document processing completes successfully" formControlName="notificationsConsumerSuccess"></app-input-check> - <app-input-check i18n-title title="Show notifications when document processing fails" formControlName="notificationsConsumerFailed"></app-input-check> - <app-input-check i18n-title title="Suppress notifications on dashboard" formControlName="notificationsConsumerSuppressOnDashboard" i18n-hint hint="This will suppress all messages about document processing status on the dashboard."></app-input-check> - </div> - </div> - <h4 class="mt-4" i18n>Bulk editing</h4> <div class="form-row form-group"> @@ -124,7 +110,26 @@ </ng-template> </li> + <li [ngbNavItem]="2"> + <a ngbNavLink i18n>Notifications</a> + <ng-template ngbNavContent> + + <h4 i18n>Document processing</h4> + + <div class="form-row form-group"> + <div class="offset-md-3 col"> + <app-input-check i18n-title title="Show notifications when new documents are detected" formControlName="notificationsConsumerNewDocument"></app-input-check> + <app-input-check i18n-title title="Show notifications when document processing completes successfully" formControlName="notificationsConsumerSuccess"></app-input-check> + <app-input-check i18n-title title="Show notifications when document processing fails" formControlName="notificationsConsumerFailed"></app-input-check> + <app-input-check i18n-title title="Suppress notifications on dashboard" formControlName="notificationsConsumerSuppressOnDashboard" i18n-hint hint="This will suppress all messages about document processing status on the dashboard."></app-input-check> + </div> + </div> + + </ng-template> + </li> + + <li [ngbNavItem]="3"> <a ngbNavLink i18n>Saved views</a> <ng-template ngbNavContent> From 61ddd0589bca540ed52ca02462c7274805b0bf1d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 2 Feb 2021 13:07:05 +0000 Subject: [PATCH 140/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 158 ++++++++++++++++-------------- 1 file changed, 83 insertions(+), 75 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index fab64cb44..44fa03f5c 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -649,12 +649,20 @@ <context context-type="linenumber">10</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Benachrichtigungen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> <source>Saved views</source> <target>Gespeicherte Ansichten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">128</context> + <context context-type="linenumber">133</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,68 +785,12 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> - <source>Notifications</source> - <target>Benachrichtigungen</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> - <source>Document processing</source> - <target>Dokumentverarbeitung</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> - <source>Show notifications when new documents are detected</source> - <target>Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">109</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> - <source>Show notifications when document processing completes successfully</source> - <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">110</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> - <source>Show notifications when document processing fails</source> - <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">111</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> - <source>Suppress notifications on dashboard</source> - <target>Unterdrücke Benachrichtigungen auf der Startseite.</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> - <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Massenbearbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -846,7 +798,7 @@ <target>Bestätigungsdialoge anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -854,7 +806,7 @@ <target>Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -862,7 +814,55 @@ <target>Anwenden beim Schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">121</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Dokumentverarbeitung</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Unterdrücke Benachrichtigungen auf der Startseite.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -870,7 +870,7 @@ <target>Erscheint auf</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">140</context> + <context context-type="linenumber">145</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -878,7 +878,7 @@ <target>Auf Startseite zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">148</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -886,7 +886,7 @@ <target>In Seitenleiste zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">147</context> + <context context-type="linenumber">152</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -894,7 +894,7 @@ <target>Keine gespeicherten Ansichten vorhanden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">157</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1119,7 +1119,7 @@ <target>Verwalten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1127,15 +1127,15 @@ <target>Administration</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">154</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46aa32e581922d6d2c3d7bc4c87209ad5808b029"> - <source>Misc</source> - <target>Weiteres</target> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">155</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1143,7 +1143,7 @@ <target>Dokumentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">167</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1151,7 +1151,15 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">174</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Eine Idee vorschlagen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1167,7 +1175,7 @@ <target>Geöffnete Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> @@ -1175,7 +1183,7 @@ <target>Alle schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">101</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> From f9f5a621068e24716bb25fadcb5e0c519366e799 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 14:07:43 +0100 Subject: [PATCH 141/898] disable CI for translation branches --- .github/workflows/ansible.yml | 4 ++-- .github/workflows/ci.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index fe5789e2c..05419d5e8 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -4,10 +4,10 @@ name: Ansible Role on: push: branches-ignore: - - 'translations_**' + - 'translations**' pull_request: branches-ignore: - - 'translations_**' + - 'translations**' jobs: # https://molecule.readthedocs.io/en/latest/ci.html#github-actions diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 423028275..5eaca123a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,10 +3,10 @@ name: ci on: push: branches-ignore: - - 'translations_**' + - 'translations**' pull_request: branches-ignore: - - 'translations_**' + - 'translations**' jobs: documentation: From 2b8734465ff2c8b9a6dc8e9f6255290e14a7881f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 14:51:54 +0100 Subject: [PATCH 142/898] changelog --- docs/changelog.rst | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 28bcc00e6..1da8621bb 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,57 @@ Changelog ********* +paperless-ng 1.1.0 +################## + +* Document processing status + + * Paperless now shows the status of processing documents on the dashboard in real time. + * Status notifications when + + * New documents are detected in the consumption folder, in mails, uploaded on the front end, + or added with one of the mobile apps. + * Documents are successfully added to paperless. + * Document consumption failed (with error messages) + + * Configuration options to enable/disable individual notifications. + +* Live updates to document lists and saved views when new documents are added. + + .. hint:: + + For status notifications and live updates to work, paperless now requires an `ASGI <https://asgi.readthedocs.io/en/latest/>`_-enabled + web server. The docker images uses ``gunicorn`` and an ASGI-enabled worker called `uvicorn <http://www.uvicorn.org/>`_, + and there is no need to configure anything. + + For bare metal installations, changes are required for the notifications to work. Adapt the service ``paperless-webserver.service`` + to use the supplied ``gunicorn.conf.py`` configuration file and adapt the reference to the ASGI application as follows: + + .. code:: + + ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application + + Paperless will continue to work with WSGI, but you will not get any status notifications. + +* Paperless now offers suggestions for tags, correspondents and types on the document detail page. + +* Added an interactive easy install script that automatically downloads, configures and starts paperless with docker. + +* Official support for Python 3.9. + +* Other changes and fixes + + * Adjusted the default parallelization settings to run more than one task in parallel on systems with 4 or less cores. + This addresses issues with paperless not consuming any new files when other tasks are running. + + * Fixed a rare race condition that would cause paperless to process incompletely written files when using the upload on the dashboard. + + * The document classifier no longer issues warnings and errors when auto matching is not used at all. + + * Better icon for document previews. + + * Better info section in the side bar. + paperless-ng 1.0.0 ################## From 138c8be45b3a5fc04630ac609615ee3c09b1dced Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 15:11:29 +0100 Subject: [PATCH 143/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index fbd65d573..e8e801a83 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,5 +2,5 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.0.0" + version: "1.1.0" }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 8dcd08521..37a1329f2 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 0, 0) +__version__ = (1, 1, 0) From 556f9793556761cc5cd94a49ab7a1252930557dc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 16:22:36 +0100 Subject: [PATCH 144/898] configure websocket endpoint for production --- src-ui/src/app/services/consumer-status.service.ts | 14 ++++++++------ src-ui/src/environments/environment.prod.ts | 4 +++- src-ui/src/environments/environment.ts | 3 ++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 9c7d0417a..38f29a528 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; +import { environment } from 'src/environments/environment'; import { WebsocketConsumerStatusMessage } from '../data/websocket-consumer-status-message'; export enum FileStatusPhase { @@ -77,7 +78,7 @@ export class ConsumerStatusService { constructor() { } - private statusWebSocked: WebSocket + private statusWebSocket: WebSocket private consumerStatus: FileStatus[] = [] @@ -123,8 +124,9 @@ export class ConsumerStatusService { connect() { this.disconnect() - this.statusWebSocked = new WebSocket("ws://localhost:8000/ws/status/"); - this.statusWebSocked.onmessage = (ev) => { + + this.statusWebSocket = new WebSocket(`${environment.webSocketProtocol}//${environment.webSocketHost}/ws/status/`); + this.statusWebSocket.onmessage = (ev) => { let statusMessage: WebsocketConsumerStatusMessage = JSON.parse(ev['data']) let statusMessageGet = this.get(statusMessage.task_id, statusMessage.filename) @@ -160,9 +162,9 @@ export class ConsumerStatusService { } disconnect() { - if (this.statusWebSocked) { - this.statusWebSocked.close() - this.statusWebSocked = null + if (this.statusWebSocket) { + this.statusWebSocket.close() + this.statusWebSocket = null } } diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index e8e801a83..4e38813b5 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,5 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.0" + version: "1.1.0", + webSocketHost: window.location.host, + webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src-ui/src/environments/environment.ts b/src-ui/src/environments/environment.ts index 29dcb7ba1..b2c40e261 100644 --- a/src-ui/src/environments/environment.ts +++ b/src-ui/src/environments/environment.ts @@ -7,7 +7,8 @@ export const environment = { apiBaseUrl: "http://localhost:8000/api/", appTitle: "Paperless-ng", version: "DEVELOPMENT", - wsBaseUrl: "ws://localhost:8000/ws/" + webSocketHost: "localhost:8000", + webSocketProtocol: "ws:" }; /* From 9cce5c6de5eec7e67fd84a1e5abe1c71427192f1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 19:54:56 +0100 Subject: [PATCH 145/898] update the easy install script and documentation --- docs/setup.rst | 19 ++++++++ install-paperless-ng.sh | 96 +++++++++++++++++++++++++++++++++++------ 2 files changed, 103 insertions(+), 12 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index eda03550e..5e0e3e4a6 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -81,6 +81,7 @@ Installation You can go multiple routes to setup and run Paperless: +* :ref:`Use the easy install docker script <setup-docker_script>` * :ref:`Pull the image from Docker Hub <setup-docker_hub>` * :ref:`Build the Docker image yourself <setup-docker_build>` * :ref:`Install Paperless directly on your system manually (bare metal) <setup-bare_metal>` @@ -101,6 +102,24 @@ it includes the same sensible defaults, and it simultaneously provides the flexi .. _CLI Basics: https://sehn.tech/post/devops-with-docker/ .. _idempotent: https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency +.. _setup-docker_script: + +Install Paperless from Docker Hub using the installation script +=============================================================== + +Paperless provides an interactive installation script. This script will ask you +for a couple configuration options, download and create the necessary configuration files, pull the docker image, start paperless and create your user account. This script essentially +performs all the steps described in :ref:`setup-docker_hub` automatically. + +1. Make sure that docker and docker-compose are installed. +2. Download and run the installation script: + + .. code:: shell-session + + $ wget https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh + $ chmod +x install-paperless-ng.sh + $ ./install-paperless-ng.sh + .. _setup-docker_hub: Install Paperless from Docker Hub diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index ad992fe8c..8fb44e222 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -15,7 +15,7 @@ ask() { fi array=$3 if [[ -z $3 || " ${array[@]} " =~ " ${result} " ]]; then - ask_result=$result + ask_result=$result return else echo "Invalid option: $result" @@ -23,6 +23,47 @@ ask() { done } +ask_docker_folder() { + while true ; do + + read -p "$1 [$2]: " result + + if [[ -z $result ]]; then + ask_result=$2 + return + fi + + if [[ $result == /* || $result == ./* ]]; then + ask_result=$result + return + else + echo "Invalid folder: $result" + fi + + + done +} + +if [[ $(id -u) == "0" ]] ; then + echo "Do not run this script as root." + exit 1 +fi + +if [[ -z $(which wget) ]] ; then + echo "wget executable not found. Is wget installed?" + exit 1 +fi + +if [[ -z $(which docker) ]] ; then + echo "docker executable not found. Is docker installed?" + exit 1 +fi + +if [[ -z $(which docker-compose) ]] ; then + echo "docker-compose executable not found. Is docker-compose installed?" + exit 1 +fi + echo "" echo "############################################" echo "### Paperless-ng docker installation ###" @@ -48,14 +89,13 @@ echo "The consume folder is where paperles will search for new documents." echo "Point this to a folder where your scanner is able to put your scanned" echo "documents." echo "" -echo "HINT: If paperless is unable to pick up any files from this directory after" -echo "installation, you might need to configure PAPERLESS_CONSUMER_POLLING." -echo "See the documentation for details." -echo "" -echo "CAUTION: You must specify an absolute path starting with /" +echo "CAUTION: You must specify an absolute path starting with / or a relative " +echo "path starting with ./ here. Examples:" +echo " /mnt/consume" +echo " ./consume" echo "" -ask "Consume folder" "$TARGET_FOLDER/consume" +ask_docker_folder "Consume folder" "$TARGET_FOLDER/consume" CONSUME_FOLDER=$ask_result echo "" @@ -64,9 +104,10 @@ echo "Leave empty and docker will manage this folder for you." echo "Docker usually stores managed folders in /var/lib/docker/volumes." echo "" echo "CAUTION: If specified, you must specify an absolute path starting with /" +echo "or a relative path starting with ./ here." echo "" -ask "Media folder" "" +ask_docker_folder "Media folder" "" MEDIA_FOLDER=$ask_result echo "" @@ -74,8 +115,11 @@ echo "The data folder is where paperless stores other data, such as your" echo "SQLite database (if used), the search index and other data." echo "As with the media folder, leave empty to have this managed by docker." echo "" +echo "CAUTION: If specified, you must specify an absolute path starting with /" +echo "or a relative path starting with ./ here." +echo "" -ask "Data folder" "" +ask_docker_folder "Data folder" "" DATA_FOLDER=$ask_result echo "" @@ -166,8 +210,36 @@ done ask "Email" "$USERNAME@localhost" EMAIL=$ask_result -echo "Done collecting data. Press any key to install." -read +echo "" +echo "Summary" +echo "=======" +echo "" + +echo "Target folder: $TARGET_FOLDER" +echo "Consume folder: $CONSUME_FOLDER" +if [[ -z $MEDIA_FOLDER ]] ; then + echo "Media folder: Managed by docker" +else + echo "Media folder: $MEDIA_FOLDER" +fi +if [[ -z $DATA_FOLDER ]] ; then + echo "Data folder: Managed by docker" +else + echo "Data folder: $DATA_FOLDER" +fi +echo "" +echo "Port: $PORT" +echo "Database: $DATABASE_BACKEND" +echo "Tika enabled: $TIKA_ENABLED" +echo "OCR language: $OCR_LANGUAGE" +echo "User id: $USERMAP_UID" +echo "Group id: $USERMAP_GID" +echo "" +echo "Paperless username: $USERNAME" +echo "Paperless email: $EMAIL" + +echo "" +read -p "Press any key to install." echo "" echo "Installing paperless..." @@ -209,7 +281,7 @@ sed -i "s/- 8000:8000/- $PORT:8000/g" docker-compose.yml sed -i "s#- \./consume:/usr/src/paperless/consume#- $CONSUME_FOLDER:/usr/src/paperless/consume#g" docker-compose.yml if [[ -n $MEDIA_FOLDER ]] ; then - sed -i "s#- data:/usr/src/paperless/media#- $MEDIA_FOLDER:/usr/src/paperless/media#g" docker-compose.yml + sed -i "s#- media:/usr/src/paperless/media#- $MEDIA_FOLDER:/usr/src/paperless/media#g" docker-compose.yml fi if [[ -n $DATA_FOLDER ]] ; then From 308887e0a4bef33d446706b7280adbb4fd68b573 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 20:31:25 +0100 Subject: [PATCH 146/898] update dependencies --- Pipfile | 4 +- Pipfile.lock | 121 +++++++++++++++++++++++++++-------------------- requirements.txt | 10 ++-- 3 files changed, 78 insertions(+), 57 deletions(-) diff --git a/Pipfile b/Pipfile index cbe5c5103..e5e13ccac 100644 --- a/Pipfile +++ b/Pipfile @@ -25,7 +25,7 @@ pdftotext = "*" pathvalidate = "*" # pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202 pillow = "==8.1.0" -pikepdf = "~=2.2.5" +pikepdf = "~=2.5.0" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" @@ -41,7 +41,7 @@ whitenoise = "~=5.2.0" watchdog = "*" whoosh="~=2.7.4" inotifyrecursive = "~=0.3.4" -ocrmypdf = "~=11.4.5" +ocrmypdf = "~=11.6" tqdm = "*" tika = "*" # TODO: This will sadly also install daphne+dependencies, diff --git a/Pipfile.lock b/Pipfile.lock index ff9e96717..6d200ce4b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d80d2539a4528a8fd9e848875c2e2d5bcdb3e98154f45b612706094b84ecaaea" + "sha256": "3e5b28740397136ffd0a397889e232192414eca2e2e6e9284f452d60cbbceda8" }, "pipfile-spec": 6, "requires": {}, @@ -107,6 +107,7 @@ "sha256:6bc25fc545a6b3d57b5f8618e59fc13d3a3a68431e8ca5fd4c13241cd70d0009", "sha256:798caa2a2384b1cbe8a2a139d80734c9db54f9cc155c99d7cc92441a23871c03", "sha256:7c6b1dece89874d9541fc974917b631406233ea0440d0bdfbb8e03bf39a49b3b", + "sha256:7ef7d4ced6b325e92eb4d3502946c78c5367bc416398d387b39591532536734e", "sha256:840793c68105fe031f34d6a086eaea153a0cd5c491cde82a74b420edd0a2b909", "sha256:8d6603078baf4e11edc4168a514c5ce5b3ba6e3e9c374298cb88437957960a53", "sha256:9cc46bc107224ff5b6d04369e7c595acb700c3613ad7bcf2e2012f62ece80c35", @@ -218,11 +219,11 @@ }, "django": { "hashes": [ - "sha256:2d78425ba74c7a1a74b196058b261b9733a8570782f4e2828974777ccca7edf7", - "sha256:efa2ab96b33b20c2182db93147a0c3cd7769d418926f9e9f140a60dca7c64ca9" + "sha256:169e2e7b4839a7910b393eec127fd7cbae62e80fa55f89c6510426abf673fe5f", + "sha256:c6c0462b8b361f8691171af1fb87eceb4442da28477e12200c40420176206ba7" ], "index": "pypi", - "version": "==3.1.5" + "version": "==3.1.6" }, "django-cors-headers": { "hashes": [ @@ -587,11 +588,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:416a9c4321bfc844f250694b8c68ebb538f60609bbc8686bd9f84a13c5127d68", - "sha256:f45fc7e844e6026d6080a623a2936be120fc077d99aaa599df022acf35fb31e6" + "sha256:a54634d017a2f44aa2115b0b6ae5aa41a7cec018f5c53d16ad3abec1e70b3db7", + "sha256:d0e2da48d4abd90f48f0937b2cd4ba57503b56c603f5e3aa91e20e3b21a036cd" ], "index": "pypi", - "version": "==11.4.5" + "version": "==11.6.0" }, "pathvalidate": { "hashes": [ @@ -618,30 +619,32 @@ }, "pikepdf": { "hashes": [ - "sha256:0e67e5beeeed5422b3b8e862e4777fed5a4cd3c72e711e2a449a65d9ee641448", - "sha256:138155ae1f71634cd6eca79f5517f77b2067ef0bd5b627ea9414e308fe868dc5", - "sha256:15cf648dd760a47c55a4106b601b92bb653ae98155b10f04310553629c6695dd", - "sha256:1d6a011ae4c501c78509caf19cbe152c2e3cb5c267f7b47bc3db8cd3436585a7", - "sha256:211f529313953e44ae42eb896c2b688668385e6e8f9d04d21484bddb3c42b34c", - "sha256:22049ad288d603a7fc68e90a0722770d307886788373ddfe71fbf614ced0f5b2", - "sha256:24f7c371f6ecbee8f0ae30030992fc75cd32cd575dcfca8d466a03a8290377ca", - "sha256:26cdf561632866d584fedb6b1c1fce78cefa49b5cae54c65aa6a6ca5fe6de4ac", - "sha256:2c37afcd21a2eb1da1773687e853327fa8ec7d2c5cd90cdcd70180f55f0221e1", - "sha256:65b8ec6403814f51e1b9c7e18a8ff26087fcc7a199b1405583e5ff9eb931db56", - "sha256:66a03103aadb2e2738271cb18c89837ac3980fa0b4687195c4c150228b7e79de", - "sha256:6e8f0124354c53a66f83ec5a18111b760aeff1a64db3a86e7ee5fed8e8624707", - "sha256:70f2836cd468aa25bc8b09a2b9561364bd75d3e6ddb0e50a25d248d7da6cff25", - "sha256:82cebf68952cfb65c86d880eb782a0c558b37531cdae59f2e11fcd0f2bb4669c", - "sha256:84ad3e8fd5f3251fb5b534614da64b04a264ce9348f0fe35b781c0fb378b0f82", - "sha256:af13fbc022efa85d1ae161129d4cde66493479db52b9adb74d525b890a078208", - "sha256:c1d40fb8f8192c75f54f0e74a569ccf45e4e13bed8da78a78a5b488be29979bf", - "sha256:d147ec1ab58512871fdf40a161809f698eaa75720b4a230198e7e028582b20a1", - "sha256:dedad1f68d6b0b54000f7f99386351f1c6e19c8cf70a9700d8dd06b9809c54fb", - "sha256:e72c3f5b624b9c7341fd6a7e657926d4cf12a7ea453681ffd7332cabc3530c62", - "sha256:eb75f22e261b3bc69b6fc9a17b1d6966c95e79d3e792b7737a018a2bf6a2b07f" + "sha256:02815df9499d3a6dfac2e07e4d2fdbe25fcbefae208970e76bff90af4a402d49", + "sha256:06b0c3004cc9e9068ebc62bb59c3c3a54e7af13867f4a326690d79c69a1cf288", + "sha256:1a471c6ca288fbcd0e1b0e128ef12bb14c5e7db745786308ba292fc7cff30bb5", + "sha256:489ed0fd1281beb0343a34fe8b9d94407c440ed0419ab2e6f5ea297a41824a31", + "sha256:5106b27f7085ed449e057b9988f07c80a87292d2bf46c585a8635ac7a3ccf0d5", + "sha256:51acffba6f3d21674eea7a0432ce1adaf0743641d57844a5e3dc92b4a7e81c85", + "sha256:53d694d70dd072a47bd2dd71329dcef0f809dcd8084d1d11c31baf3b64cd345c", + "sha256:6a640fef52dc785abd354d6800a52ecc02656c98dbfc2ecde559323b001bd43f", + "sha256:7006ef95f847412605dea6e772019f637949eaeaf65363d5d6afd9aa96bf5623", + "sha256:81e13b62877dbc089095e7efa03c27834bdf6b49d404d064cb227b0e179ce049", + "sha256:8fc3e97b24dafbd4b1ac057c8f144c18467ce55d342a1a8c42688890ead58ef3", + "sha256:9158dc4d3ef4e2301fb1879d5825530fdb32143ced770d60fa8e5badeee70a35", + "sha256:961337a10b42bd656b59116ce1c574eafd515b45a513221df6ae1f11734bfb6c", + "sha256:994ccac972357a7b9b147217e1beea2f7688697944b862dbb2a3e64aa9a5ff14", + "sha256:a8e9abf7db0351357b55c3f935979e7dc14f3f259a25d15bcc86abce730955a7", + "sha256:b836eda7f70b9dd75ccdeaf4e78b38393118a66821a69a10054b1430f945d1fd", + "sha256:b859a225f6bd953472c50f4df612b4575df646e560189e3720310ad65b6805a0", + "sha256:cae106bd461cfad73c554c09f6db1d5f2c6a28f5b8cb0602b63046840f488226", + "sha256:cdc75b8fa5a650f4fc91214a315358fde7470e09b95a00981b73a7c4ac5ddb97", + "sha256:e2c28da4f37ad9a3efbedbbfc6f1084941bde43903d30dfdbb338d5ba94c9f50", + "sha256:e596bd8fdbf40bfb8dc8068cdbc7e5b72052188d1ad8ca84da9d6b77658a8b31", + "sha256:ee957b9c60b6def20cbdf656d35859ce211eec02dafa3abb9d5ca937d32a3c3b", + "sha256:f9428d4b1f70af4f4560be4dccbbc5ab5308c00c5b62ed2f1c44ce9e2591b3d2" ], "index": "pypi", - "version": "==2.2.5" + "version": "==2.5.2" }, "pillow": { "hashes": [ @@ -819,12 +822,12 @@ }, "python-levenshtein": { "hashes": [ - "sha256:108edd3c271f1afda8b21a8d9da81886414dfb6940a085fa7903c592e0f8f54b", - "sha256:1ff19b712c5974080b003fd26ef365cd93dfc1a5e690be621f79f3e63e00a7cc", - "sha256:554e273a88060d177e7b3c1e6ea9158dde11563bfae8f7f661f73f47e5ff0911" + "sha256:212db61934fcb819f5cb2fcb5ad5c0e2e43f3161f524eef4a135f7285dfb308a", + "sha256:d92fe5c3b10c8ad8f2d880499f5e96ed24dbc7cd0414a665c2e2505feaf4ec58", + "sha256:dc2395fbd148a1ab31090dd113c366695934b9e85fe5a4b2a032745efd0346f6" ], "index": "pypi", - "version": "==0.12.1" + "version": "==0.12.2" }, "python-magic": { "hashes": [ @@ -836,10 +839,10 @@ }, "pytz": { "hashes": [ - "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4", - "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5" + "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", + "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" ], - "version": "==2020.5" + "version": "==2021.1" }, "pyyaml": { "hashes": [ @@ -1558,12 +1561,11 @@ }, "jinja2": { "hashes": [ - "sha256:3f172970d5670703bd3812e8ca6459a9a7e069fa8e51b40195f83c81db191ec4", - "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", - "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" + "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", + "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.11.2" + "version": "==2.11.3" }, "markupsafe": { "hashes": [ @@ -1573,8 +1575,12 @@ "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", "sha256:19536834abffb3fa155017053c607cb835b2ecc6a3a2554a88043d991dffb736", + "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", + "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", + "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", "sha256:3d61f15e39611aacd91b7e71d903787da86d9e80896e683c0103fced9add7834", "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", @@ -1584,36 +1590,51 @@ "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", + "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "sha256:7952deddf24b85c88dab48f6ec366ac6e39d2761b5280f2f9594911e03fcd064", "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", + "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", + "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", + "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", + "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", + "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" + "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", + "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.1.1" }, "packaging": { "hashes": [ - "sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858", - "sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093" + "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", + "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.8" + "version": "==20.9" }, "pluggy": { "hashes": [ @@ -1722,10 +1743,10 @@ }, "pytz": { "hashes": [ - "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4", - "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5" + "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da", + "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798" ], - "version": "==2020.5" + "version": "==2021.1" }, "requests": { "hashes": [ @@ -1863,11 +1884,11 @@ }, "virtualenv": { "hashes": [ - "sha256:219ee956e38b08e32d5639289aaa5bd190cfbe7dafcb8fa65407fca08e808f9c", - "sha256:227a8fed626f2f20a6cdb0870054989f82dd27b2560a911935ba905a2a5e0034" + "sha256:147b43894e51dd6bba882cf9c282447f780e2251cd35172403745fc381a0a80d", + "sha256:2be72df684b74df0ea47679a7df93fd0e04e72520022c57b479d8f881485dbe3" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.0" + "version": "==20.4.2" }, "zipp": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index c3f32002b..536e84e3b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,7 +31,7 @@ django-extensions==3.1.0 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 -django==3.1.5 +django==3.1.6 djangorestframework==3.12.2 filelock==3.0.12 fuzzywuzzy==0.18.0 @@ -53,11 +53,11 @@ langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5; python_version >= '3.6' -ocrmypdf==11.4.5 +ocrmypdf==11.6.0 pathvalidate==2.3.2 pdfminer.six==20201018; python_version >= '3.4' pdftotext==2.1.5 -pikepdf==2.2.5 +pikepdf==2.5.2 pillow==8.1.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' psycopg2-binary==2.8.6 @@ -69,9 +69,9 @@ pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, python-dateutil==2.8.1 python-dotenv==0.15.0 python-gnupg==0.4.6 -python-levenshtein==0.12.1 +python-levenshtein==0.12.2 python-magic==0.4.18 -pytz==2020.5 +pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 regex==2020.11.13 From 283ec8fb5740222afa933c2184746f60eb57cd84 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 20:43:07 +0100 Subject: [PATCH 147/898] update dependencies --- Pipfile | 3 +-- Pipfile.lock | 6 ++++-- requirements.txt | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Pipfile b/Pipfile index e5e13ccac..293d71603 100644 --- a/Pipfile +++ b/Pipfile @@ -17,7 +17,7 @@ django-filter = "~=2.4.0" django-q = "~=1.3.4" djangorestframework = "~=3.12.2" filelock = "*" -fuzzywuzzy = "*" +fuzzywuzzy = {extras = ["speedup"], version = "*"} gunicorn = "*" imap-tools = "*" langdetect = "*" @@ -29,7 +29,6 @@ pikepdf = "~=2.5.0" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" -python-Levenshtein = "*" python-magic = "*" psycopg2-binary = "*" redis = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 6d200ce4b..78cfecf95 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3e5b28740397136ffd0a397889e232192414eca2e2e6e9284f452d60cbbceda8" + "sha256": "658e2907c680baea81e77da9081ee063ff843b185d02c95d6483b747f0acd84d" }, "pipfile-spec": 6, "requires": {}, @@ -282,6 +282,9 @@ "version": "==3.0.12" }, "fuzzywuzzy": { + "extras": [ + "speedup" + ], "hashes": [ "sha256:45016e92264780e58972dca1b3d939ac864b78437422beecebb3095f8efd00e8", "sha256:928244b28db720d1e0ee7587acf660ea49d7e4c632569cad4f1cd7e68a5f0993" @@ -826,7 +829,6 @@ "sha256:d92fe5c3b10c8ad8f2d880499f5e96ed24dbc7cd0414a665c2e2505feaf4ec58", "sha256:dc2395fbd148a1ab31090dd113c366695934b9e85fe5a4b2a032745efd0346f6" ], - "index": "pypi", "version": "==0.12.2" }, "python-magic": { diff --git a/requirements.txt b/requirements.txt index 536e84e3b..e1b76a4a0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -34,7 +34,7 @@ django-q==1.3.4 django==3.1.6 djangorestframework==3.12.2 filelock==3.0.12 -fuzzywuzzy==0.18.0 +fuzzywuzzy[speedup]==0.18.0 gunicorn==20.0.4 h11==0.12.0; python_version >= '3.6' hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' From 50cbbb972d98716a304b2263078faa5ffbbfa9ad Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 23:58:11 +0100 Subject: [PATCH 148/898] fixes layout issues #482 --- .../src/app/components/app-frame/app-frame.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 70329d537..34a978fe5 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -163,13 +163,13 @@ </a> </li> <li class="nav-item"> - <div class="d-flex w-100"> - <a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng"> + <div class="d-flex w-100 flex-wrap"> + <a class="nav-link pr-0 pb-0" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng"> <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="sidebaricon bi bi-github" viewBox="0 0 16 16"> <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/> </svg> <ng-container i18n>GitHub</ng-container> </a> - <a class="nav-link-additional small text-muted" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> + <a class="nav-link-additional small text-muted ml-3" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> </svg> @@ -177,7 +177,7 @@ </a> </div> </li> - <li class="nav-item"> + <li class="nav-item mt-2"> <div class="px-3 py-2 text-muted small"> {{versionString}} </div> From eeff7b3bdb887c912f3eb6c4088efd1ce3ca1ed5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 2 Feb 2021 23:58:25 +0100 Subject: [PATCH 149/898] code style --- src/documents/management/commands/document_consumer.py | 2 +- src/documents/parsers.py | 5 ++--- src/paperless_tesseract/parsers.py | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index 9ba1b1a87..232a5b23c 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -21,7 +21,7 @@ logger = logging.getLogger(__name__) def _tags_from_path(filepath): - """Walk up the directory tree from filepath to CONSUMPTION_DIr + """Walk up the directory tree from filepath to CONSUMPTION_DIR and get or create Tag IDs for every directory. """ tag_ids = set() diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 3f0879b3c..a2eb14cef 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -273,10 +273,9 @@ class DocumentParser(LoggingMixin): self.date = None self.progress_callback = progress_callback - def progress(self, current, max): - print(self.progress_callback) + def progress(self, current_progress, max_progress): if self.progress_callback: - self.progress_callback(current, max) + self.progress_callback(current_progress, max_progress) def extract_metadata(self, document_path, mime_type): return [] diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 52b50e983..4e5ceac1b 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -190,11 +190,11 @@ class RasterisedDocumentParser(DocumentParser): # Also, no archived file. if not self.text: # However, if we don't have anything, fail: - raise ParseError(e.__class__.__name__ + ": " + str(e)) + raise ParseError(f"{e.__class__.__name__}: {str(e)}") except Exception as e: # Anything else is probably serious. - raise ParseError(e.__class__.__name__ + ": " + str(e)) + raise ParseError(f"{e.__class__.__name__}: {str(e)}") if not self.text: # This may happen for files that don't have any text. From 7d2666148e94bba2649b77ce58624c18321d0166 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Wed, 3 Feb 2021 07:53:49 +0100 Subject: [PATCH 150/898] Apply consistent name structure to vars --- ansible/README.md | 2 +- ansible/defaults/main.yml | 16 ++++++++-------- ansible/tasks/main.yml | 16 ++++++++-------- docs/setup.rst | 20 ++++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/ansible/README.md b/ansible/README.md index 6cd9e9f9b..0940cf072 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -107,7 +107,7 @@ Example Playbook paperlessng_db_type: postgresql paperlessng_db_pass: PLEASEPROVIDEASTRONGPASSWORDHERE - paperless_secret_key: AGAINPLEASECHANGETHISNOW + paperlessng_secret_key: AGAINPLEASECHANGETHISNOW paperlessng_ocr_languages: - eng diff --git a/ansible/defaults/main.yml b/ansible/defaults/main.yml index aaeffa507..f1cbb8f88 100644 --- a/ansible/defaults/main.yml +++ b/ansible/defaults/main.yml @@ -23,14 +23,14 @@ paperlessng_filename_format: paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv" # Hosting & Security -paperless_secret_key: PLEASECHANGETHISFORTHELOVEOFGOD -paperless_allowed_hosts: "*" -paperless_cors_allowed_hosts: http://localhost:8000 -paperless_force_script_name: -paperless_static_url: /static/ -paperless_auto_login_username: -paperless_cookie_prefix: "" -paperless_enable_http_remote_user: False +paperlessng_secret_key: PLEASECHANGETHISFORTHELOVEOFGOD +paperlessng_allowed_hosts: "*" +paperlessng_cors_allowed_hosts: http://localhost:8000 +paperlessng_force_script_name: +paperlessng_static_url: /static/ +paperlessng_auto_login_username: +paperlessng_cookie_prefix: "" +paperlessng_enable_http_remote_user: False # OCR settings paperlessng_ocr_languages: diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index dba409549..ed05cd05e 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -286,21 +286,21 @@ line: "PAPERLESS_FILENAME_FORMAT={{ paperlessng_filename_format }}" # Hosting & Security - regexp: PAPERLESS_SECRET_KEY - line: "PAPERLESS_SECRET_KEY={{ paperless_secret_key }}" + line: "PAPERLESS_SECRET_KEY={{ paperlessng_secret_key }}" - regexp: PAPERLESS_ALLOWED_HOSTS - line: "PAPERLESS_ALLOWED_HOSTS={{ paperless_allowed_hosts }}" + line: "PAPERLESS_ALLOWED_HOSTS={{ paperlessng_allowed_hosts }}" - regexp: PAPERLESS_CORS_ALLOWED_HOSTS - line: "PAPERLESS_CORS_ALLOWED_HOSTS={{ paperless_cors_allowed_hosts }}" + line: "PAPERLESS_CORS_ALLOWED_HOSTS={{ paperlessng_cors_allowed_hosts }}" - regexp: PAPERLESS_FORCE_SCRIPT_NAME - line: "PAPERLESS_FORCE_SCRIPT_NAME={{ paperless_force_script_name }}" + line: "PAPERLESS_FORCE_SCRIPT_NAME={{ paperlessng_force_script_name }}" - regexp: PAPERLESS_STATIC_URL - line: "PAPERLESS_STATIC_URL={{ paperless_static_url }}" + line: "PAPERLESS_STATIC_URL={{ paperlessng_static_url }}" - regexp: PAPERLESS_AUTO_LOGIN_USERNAME - line: "PAPERLESS_AUTO_LOGIN_USERNAME={{ paperless_auto_login_username }}" + line: "PAPERLESS_AUTO_LOGIN_USERNAME={{ paperlessng_auto_login_username }}" - regexp: PAPERLESS_COOKIE_PREFIX - line: "PAPERLESS_COOKIE_PREFIX={{ paperless_cookie_prefix }}" + line: "PAPERLESS_COOKIE_PREFIX={{ paperlessng_cookie_prefix }}" - regexp: PAPERLESS_ENABLE_HTTP_REMOTE_USER - line: "PAPERLESS_ENABLE_HTTP_REMOTE_USER={{ paperless_enable_http_remote_user }}" + line: "PAPERLESS_ENABLE_HTTP_REMOTE_USER={{ paperlessng_enable_http_remote_user }}" # OCR settings - regexp: PAPERLESS_OCR_LANGUAGE line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') }}" diff --git a/docs/setup.rst b/docs/setup.rst index 5c3c9c361..e040db790 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -88,7 +88,7 @@ You can go multiple routes to setup and run Paperless: The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff from the above automatically so that it just works and uses sensible defaults for all configuration options. -Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_ +Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_ The bare metal route is complicated to setup but makes it easier should you want to contribute some code back. You need to configure and @@ -126,7 +126,7 @@ Install Paperless from Docker Hub If you want to use the included ``docker-compose.*.yml`` file, you need to have at least Docker version **17.09.0** and docker-compose - version **1.17.0**. + version **1.17.0**. To check do: `docker-compose -v` or `docker -v` See the `Docker installation guide`_ on how to install the current @@ -151,7 +151,7 @@ Install Paperless from Docker Hub .. code:: - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume - + Don't change the part after the colon or paperless wont find your documents. @@ -159,7 +159,7 @@ Install Paperless from Docker Hub most important change is to set ``USERMAP_UID`` and ``USERMAP_GID`` to the uid and gid of your user on the host system. Use ``id -u`` and ``id -g`` to get these. - + This ensures that both the docker container and you on the host machine have write access to the consumption directory. If your UID and GID on the host system is @@ -194,7 +194,7 @@ Install Paperless from Docker Hub 8. The default ``docker-compose.yml`` exports the webserver on your local port 8000. If you did not change this, you should now be able to visit your - Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. + Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000. Use the login credentials you have created with the previous step. .. _Docker: https://www.docker.com/ @@ -223,7 +223,7 @@ Build the docker image yourself webserver: image: jonaswinkler/paperless-ng:latest - + and replace it with a line that instructs docker-compose to build the image from the current working directory instead: .. code:: yaml @@ -426,7 +426,7 @@ Install Paperless using ansible This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts. -1. Install ansible 2.7+ on the management node. +1. Install ansible 2.7+ on the management node. This may be the target host paperless-ng is being installed on or any remote host which can access the target host. For further details, check the ansible `inventory <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html>`_ documentation. @@ -461,7 +461,7 @@ Install Paperless using ansible .. code:: sh cd paperless-ng - git checkout ng-0.9.14 + git checkout ng-1.0.0 3. Create an ansible ``playbook.yml`` in the paperless-ng root directory: @@ -511,7 +511,7 @@ Install Paperless using ansible .. code:: yaml - paperless_secret_key: PleaseGenerateAStrongKeyForThis + paperlessng_secret_key: PleaseGenerateAStrongKeyForThis paperlessng_superuser_name: YourUserName paperlessng_superuser_email: name@domain.tld @@ -584,7 +584,7 @@ Migration to paperless-ng is then performed in a few simple steps: .. code:: shell-session $ docker volume ls | grep _data - + and adjust the project name in the ``.env`` file so that it matches the name of the volumes before the ``_data`` part. From 701897dc3cd5576cbc0cc9194586ed4a99545795 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 14:51:04 +0100 Subject: [PATCH 151/898] fix typo --- src/paperless_tesseract/parsers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 4e5ceac1b..5a08c601b 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -200,7 +200,7 @@ class RasterisedDocumentParser(DocumentParser): # This may happen for files that don't have any text. self.log( 'warning', - f"Document {document_path} does not have any text." + f"Document {document_path} does not have any text. " f"This is probably an error or you tried to add an image " f"without text, or something is wrong with this document.") self.text = "" From e43b63697180ecbf504818ff9e9784df101b9395 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 15:22:20 +0100 Subject: [PATCH 152/898] bugfix --- .../components/document-detail/document-detail.component.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index a7cce715e..071c8e249 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -115,9 +115,13 @@ export class DocumentDetailComponent implements OnInit { this.document = doc this.documentsService.getMetadata(doc.id).subscribe(result => { this.metadata = result + }, error => { + this.metadata = null }) this.documentsService.getSuggestions(doc.id).subscribe(result => { this.suggestions = result + }, error => { + this.suggestions = null }) this.title = this.documentTitlePipe.transform(doc.title) this.documentForm.patchValue(doc) From d8db2d78e066c8ac1483b4e4fa3a9d4651635f50 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 16:01:32 +0100 Subject: [PATCH 153/898] display http errors --- src-ui/messages.xlf | 43 +++++++++++-------- .../upload-file-widget.component.ts | 2 +- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 86198ca7f..a80bd082f 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -188,35 +188,35 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">199</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">204</context> </context-group> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">207</context> </context-group> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">210</context> + <context context-type="linenumber">214</context> </context-group> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> @@ -1470,6 +1470,13 @@ <context context-type="linenumber">126</context> </context-group> </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> <context-group purpose="location"> @@ -1637,21 +1644,21 @@ <source>Document already exists.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">14</context> + <context context-type="linenumber">15</context> </context-group> </trans-unit> <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">15</context> + <context context-type="linenumber">16</context> </context-group> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1659,7 +1666,7 @@ <source>Error while executing pre-consume script.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1667,7 +1674,7 @@ <source>Post-consume script does not exist.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1675,7 +1682,7 @@ <source>Error while executing post-consume script.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1683,49 +1690,49 @@ <source>Received new file.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">23</context> + <context context-type="linenumber">24</context> </context-group> </trans-unit> <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> </trans-unit> <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">27</context> </context-group> </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index f604a3fc1..2412290c0 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -133,7 +133,7 @@ export class UploadFileWidgetComponent implements OnInit { break; } default: { - this.consumerStatusService.fail(status, `${error.status} ${error.statusText}`) + this.consumerStatusService.fail(status, $localize`HTTP error: ${error.status} ${error.statusText}`) break; } } From d8dbaebb0912f6bc4057c179eeb99b3f0a4106a7 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 3 Feb 2021 15:11:49 +0000 Subject: [PATCH 154/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 62 +++++++++++++++++-------------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index 44fa03f5c..cc5e1d68a 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -214,7 +214,7 @@ <target>Löschen bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">199</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> @@ -222,7 +222,7 @@ <target>Möchten Sie das Dokument "<x equiv-text="this.document.title" id="PH"/>" wirklich löschen?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">204</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6691075929777935948"> @@ -230,7 +230,7 @@ <target>Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="719892092227206532"> @@ -238,7 +238,7 @@ <target>Dokument löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">207</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1844801255494293730"> @@ -246,7 +246,7 @@ <target>Fehler beim Löschen des Dokuments: <x equiv-text="JSON.stringify(error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">210</context> + <context context-type="linenumber">214</context> </context-group> </trans-unit> <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> @@ -427,7 +427,7 @@ </trans-unit> <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> <source>Original document metadata</source> - <target>Original-Metadaten</target> + <target>Metadaten Original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> @@ -435,7 +435,7 @@ </trans-unit> <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> <source>Archived document metadata</source> - <target>Metadaten des archivierten Dokuments</target> + <target>Metadaten Archiv</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> @@ -451,7 +451,7 @@ </trans-unit> <trans-unit datatype="html" id="8765497970646365998"> <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Hallo <x equiv-text="this.displayName" id="PH"/>, Willkommen zu Paperless-ng</target> + <target>Hallo <x equiv-text="this.displayName" id="PH"/>, willkommen zu Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> @@ -1678,6 +1678,14 @@ <context context-type="linenumber">126</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>HTTP-Fehler: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> <source>Upload new documents</source> <target>Neue Dokumente hochladen</target> @@ -1746,7 +1754,7 @@ </trans-unit> <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Sie können Ihre Dokumente hochladen, indem Sie sie in die Hochladebox auf der rechten Seite ziehen oder in den konfigurierten Ablageordner kopieren/verschieben. Danach werden sie inder Dokumentliste erscheinen. Nachdem Sie den Dokumenten einige Metadaten zugewiesen haben, können Sie die Filtermechanismen zur Erstellung individueller Ansichten benutzen (zum Beispiel "Kürzlich hinzugefügt" oder "Mit TODO markiert") und die Ansichten werden auf der Startseite erscheinen und diese Nachricht ersetzen.</target> + <target>Sie können Ihre Dokumente hochladen, indem Sie sie in die Hochladebox auf der rechten Seite ziehen oder in den konfigurierten Ablageordner kopieren/verschieben. Danach werden sie in der Dokumentenliste erscheinen. Nachdem Sie den Dokumenten einige Metadaten zugewiesen haben, können Sie die Filtermechanismen zur Erstellung individueller Ansichten benutzen (zum Beispiel "Kürzlich hinzugefügt" oder "Mit TODO markiert") und die Ansichten werden auf der Startseite anstelle dieser Nachricht erscheinen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> @@ -1762,7 +1770,7 @@ </trans-unit> <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Nachdem Sie einige Dokumente hochgeladen und mit Metadatebn haben, kann Paperless diese Metadaten automatisch passenden neuen Dokumenten zuweisen.</target> + <target>Nachdem Sie einige Dokumente hochgeladen und diesen Korrespondenten, Tags und Dokumenttypen zugewiesen haben, kann Paperless-ng diese Metadaten automatisch passenden neuen Dokumenten zuweisen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> @@ -1770,7 +1778,7 @@ </trans-unit> <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Sie können in Paperless Ihre E-Mail-Konten einrichten und Paperless wird automatisch Dokumente aus Dateianhängen erzeugen.</target> + <target>Sie können in Paperless Ihre E-Mail-Konten einrichten und Paperless wird automatisch Dokumente aus Dateianhängen hinzufügen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> @@ -1869,7 +1877,7 @@ <target>Dokument existiert bereits.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">14</context> + <context context-type="linenumber">15</context> </context-group> </trans-unit> <trans-unit datatype="html" id="148389968432135849"> @@ -1877,7 +1885,7 @@ <target>Datei nicht gefunden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">15</context> + <context context-type="linenumber">16</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1520671543092565667"> @@ -1885,7 +1893,7 @@ <target>Pre-Consume-Skript existiert nicht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1894,7 +1902,7 @@ <target>Fehler beim Ausführen des Pre-Consume-Skripts.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1903,7 +1911,7 @@ <target>Post-Consume-Skript existiert nicht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1912,7 +1920,7 @@ <target>Fehler beim Ausführen des Post-Consume-Skripts.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1921,7 +1929,7 @@ <target>Neue Datei erhalten.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7337565919209746135"> @@ -1929,7 +1937,7 @@ <target>Dateityp wird nicht unterstützt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5002399167376099234"> @@ -1937,7 +1945,7 @@ <target>Verarbeite Dokument...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1085975194762600381"> @@ -1945,7 +1953,7 @@ <target>Erzeuge Miniaturbild...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">23</context> + <context context-type="linenumber">24</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3280851677698431426"> @@ -1953,7 +1961,7 @@ <target>Ermittle Datum des Dokuments...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7162102384876037296"> @@ -1961,7 +1969,7 @@ <target>Speichere Dokument...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4550450765009165976"> @@ -1969,7 +1977,7 @@ <target>Abgeschlossen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">27</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1519954996184640001"> @@ -2222,7 +2230,7 @@ </trans-unit> <trans-unit datatype="html" id="7517655726614958140"> <source>Any: Document contains any of these words (space separated)</source> - <target>Irgendein Wort: Dokument enthält eins der folgender Wörter</target> + <target>Irgendein Wort: Dokument enthält eins der folgenden Wörter</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> @@ -2270,7 +2278,7 @@ </trans-unit> <trans-unit datatype="html" id="7548151332424148033"> <source>Regular expression: Document matches this regular expression</source> - <target>Regulärer Ausdruck: Dokument passt zum folgenden Audruck</target> + <target>Regulärer Ausdruck: Dokument passt zum folgenden Ausdruck</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> @@ -2286,7 +2294,7 @@ </trans-unit> <trans-unit datatype="html" id="8419167206585286450"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Ungenau: Dokument enthält ein zum folgendem Wort ähnliches Wort</target> + <target>Ungenau: Dokument enthält ein zum folgenden Wort ähnliches Wort</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> From 5e8c57919342d53d2297ec0d633cb445edd82bd9 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 3 Feb 2021 15:25:14 +0000 Subject: [PATCH 155/898] Translate /src-ui/messages.xlf in nl_NL translation completed for the source file '/src-ui/messages.xlf' on the 'nl_NL' language. --- src-ui/src/locale/messages.nl_NL.xlf | 224 +++++++++++++++------------ 1 file changed, 123 insertions(+), 101 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 0e164d688..becc0e797 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -214,7 +214,7 @@ <target>Bevestig het verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">199</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> @@ -222,7 +222,7 @@ <target>Wilt u het document echt verwijderen "<x equiv-text="this.document.title" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">204</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6691075929777935948"> @@ -230,7 +230,7 @@ <target>De bestanden voor dit document worden definitief verwijderd. Deze bewerking kan niet ongedaan worden gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="719892092227206532"> @@ -238,7 +238,7 @@ <target>Verwijder document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">207</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1844801255494293730"> @@ -246,7 +246,7 @@ <target>Fout bij het verwijderen van het document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">210</context> + <context context-type="linenumber">214</context> </context-group> </trans-unit> <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> @@ -649,12 +649,20 @@ <context context-type="linenumber">10</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Meldingen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> <source>Saved views</source> <target>Opgeslagen views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">128</context> + <context context-type="linenumber">133</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,68 +785,12 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> - <source>Notifications</source> - <target>Meldingen</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="69c5a98f8aa92e4db060f10dcd37781c8f40a48f"> - <source>Consumer status</source> - <target>Status van de verwerker</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> - <source>Show notifications when new documents are detected</source> - <target>Toon meldingen wanneer nieuwe documenten worden gedetecteerd</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">109</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="f2361d3f65b6c77ef0a15fad8af8e858b043ace3"> - <source>Show notifications when document consumption completes successfully</source> - <target>Toon meldingen wanneer documenten met succes zijn verwerkt.</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">110</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2bcbcbe99e207803e21183580b98d90410dd8718"> - <source>Show notifications when document consumption fails</source> - <target>Toon meldingen wanneer het verwerken van documenten faalt.</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">111</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> - <source>Suppress notifications on dashboard</source> - <target>Onderdruk meldingen op het dashboard</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="59fe5c9233a2aaab3079a2300e4dfa439ddb1890"> - <source>This will suppress all consumer related status messages on the dashboard.</source> - <target>Dit verbergt alle statusberichten op het dashboard die met de verwerker te maken hebben.</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Massabewerking</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -846,7 +798,7 @@ <target>Toon dialoogvenster ter bevestiging</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -854,7 +806,7 @@ <target>Er zal altijd om bevestiging gevraagd worden voor het verwijderen van documenten.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -862,7 +814,55 @@ <target>Toepassen bij het sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">121</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Verwerking van documenten</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Toon meldingen wanneer nieuwe documenten worden gedetecteerd</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Toon een melding wanneer documenten met succes zijn verwerkt</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Toon meldingen wanneer het verwerken van documenten faalt</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Onderdruk meldingen op het dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Dit verbergt alle statusberichten op het dashboard die met het verwerken van documenten te maken hebben.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -870,7 +870,7 @@ <target>Komt voor bij</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">140</context> + <context context-type="linenumber">145</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -878,7 +878,7 @@ <target>Toon op het dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">148</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -886,7 +886,7 @@ <target>Toon in de zijbalk</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">147</context> + <context context-type="linenumber">152</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -894,7 +894,7 @@ <target>Geen opgeslagen views gedefinieerd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">157</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1119,7 +1119,7 @@ <target>Beheren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1127,15 +1127,15 @@ <target>Beheer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">154</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46aa32e581922d6d2c3d7bc4c87209ad5808b029"> - <source>Misc</source> - <target>Andere</target> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Informatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">155</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1143,7 +1143,7 @@ <target>Handleiding</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">167</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1151,7 +1151,15 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">174</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Ideeënbus</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1167,7 +1175,7 @@ <target>Open documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> @@ -1175,7 +1183,7 @@ <target>Alles sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">101</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1662,14 +1670,22 @@ <context context-type="linenumber">123</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="3994065460580948013"> - <source>Waiting for consumer...</source> - <target>Wachten op het verwerken...</target> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Upload voltooid, klaar voor meer...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>HTTP fout: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> <source>Upload new documents</source> <target>Nieuwe documenten opladen</target> @@ -1701,21 +1717,23 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> </trans-unit> - <trans-unit datatype="html" id="1fc4e0a1e93fdda0ed3c9e590971d283afb68265"> - <source><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> more hidden</source> - <target><x equiv-text="{{getStatusHidden().length}}" id="INTERPOLATION"/> niet getoond</target> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Nog één document} other {Nog <x id="INTERPOLATION"/> documenten}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> </trans-unit> <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> <source>Open document</source> <target>Open document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> @@ -1859,7 +1877,7 @@ <target>Document bestaat al.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">14</context> + <context context-type="linenumber">15</context> </context-group> </trans-unit> <trans-unit datatype="html" id="148389968432135849"> @@ -1867,7 +1885,7 @@ <target>Bestand niet gevonden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">15</context> + <context context-type="linenumber">16</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1520671543092565667"> @@ -1875,39 +1893,43 @@ <target>Pre-verwerkingsscript bestaat niet.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="7742915911032564889"> <source>Error while executing pre-consume script.</source> <target>Fout tijdens het uitvoeren van het pre-verwerkingsscript</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="8995193730018060346"> <source>Post-consume script does not exist.</source> <target>Post-verwerkingsscript bestaat niet.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="256773668518189604"> <source>Error while executing post-consume script.</source> <target>Fout tijdens het uitvoeren van het post-verwerkingsscript</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> <trans-unit datatype="html" id="6252258095055634191"> <source>Received new file.</source> <target>Nieuw bestand ontvangen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7337565919209746135"> @@ -1915,7 +1937,7 @@ <target>Bestandstype niet ondersteund.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5002399167376099234"> @@ -1923,7 +1945,7 @@ <target>Document wordt verwerkt...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1085975194762600381"> @@ -1931,7 +1953,7 @@ <target>Voorbeeldweergave wordt gemaakt...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">23</context> + <context context-type="linenumber">24</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3280851677698431426"> @@ -1939,7 +1961,7 @@ <target>Datum wordt gezocht in document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7162102384876037296"> @@ -1947,7 +1969,7 @@ <target>Document wordt opgeslagen...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4550450765009165976"> @@ -1955,7 +1977,7 @@ <target>Klaar.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">27</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1519954996184640001"> From 4393b3c6853d6f1f799f5dcc2514c390ea891662 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 17:07:37 +0100 Subject: [PATCH 156/898] documentation --- docs/changelog.rst | 2 ++ docs/faq.rst | 36 ++++++++++++++++++++++++++---------- docs/index.rst | 2 +- docs/setup.rst | 45 ++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 73 insertions(+), 12 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1da8621bb..2b9821408 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -37,6 +37,8 @@ paperless-ng 1.1.0 Paperless will continue to work with WSGI, but you will not get any status notifications. + Apache ``mod_wsgi`` users, see :ref:`this note <faq-mod_wsgi>`. + * Paperless now offers suggestions for tags, correspondents and types on the document detail page. * Added an interactive easy install script that automatically downloads, configures and starts paperless with docker. diff --git a/docs/faq.rst b/docs/faq.rst index e41f9aace..0f4527d62 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -62,9 +62,9 @@ file extensions do not matter. **A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B. The long answer is that certain parts of -Paperless will run very slow, such as the tesseract OCR. On Raspberry Pi, +Paperless will run very slow, such as the OCR. On Raspberry Pi, try to OCR documents before feeding them into paperless so that paperless can -reuse the text. The web interface should be a lot snappier, since it runs +reuse the text. The web interface is a lot snappier, since it runs in your browser and paperless has to do much less work to serve the data. .. note:: @@ -76,7 +76,14 @@ in your browser and paperless has to do much less work to serve the data. **Q:** *How do I install paperless-ng on Raspberry Pi?* **A:** Docker images are available for arm and arm64 hardware, so just follow -the docker-compose instructions, or go the bare metal route. +the docker-compose instructions. Apart from more required disk space compared to +a bare metal installation, docker comes with close to zero overhead, even on +Raspberry Pi. + +If you decide to got with the bare metal route, be aware that some of the +python requirements do not have precompiled packages for ARM / ARM64. Installation +of these will require additional development libraries and compilation will take +a long time. **Q:** *How do I run this on unRaid?* @@ -95,12 +102,21 @@ occasionally build the image on and see if it works. **Q:** *How do I proxy this with NGINX?* -.. code:: +**A:** See :ref:`here <setup-nginx>`. - location / { - proxy_pass http://localhost:8000/ - } +.. _faq-mod_wsgi: -And that's about it. Paperless serves everything, including static files by itself -when running the docker image. If you want to do anything fancy, you have to -install paperless bare metal. +**Q:** *How do I get WebSocket support with Apache mod_wsgi*? + +**A:** ``mod_wsgi`` by itself does not support ASGI. Paperless will continue +to work with WSGI, but certain features such as status notifications about +document consumption won't be available. + +If you want to continue using ``mod_wsgi``, you will have to run an ASGI-enabled +web server as well that processes WebSocket connections, and configure Apache to +redirect WebSocket connections to this server. Multiple options for ASGI servers +exist: + +* ``gunicorn`` with ``uvicorn`` as the worker implementation (the default of paperless) +* ``daphne`` as a standalone server, which is the reference implementation for ASGI. +* ``uvicorn`` as a standalone server diff --git a/docs/index.rst b/docs/index.rst index a083fb3d1..4035d822e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -70,8 +70,8 @@ Contents configuration api faq - extending troubleshooting + extending contributing scanners screenshots diff --git a/docs/setup.rst b/docs/setup.rst index 6d601378d..139db549a 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -588,7 +588,7 @@ Migration to paperless-ng is then performed in a few simple steps: paperless. 3. Download the latest release of paperless-ng. You can either go with the - docker-compose files from `here <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_ + docker-compose files from `here <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`__ or clone the repository to build the image yourself (see :ref:`above <setup-docker_build>`). You can either replace your current paperless folder or put paperless-ng in a different location. @@ -787,3 +787,46 @@ For details, refer to :ref:`configuration`. well as on any other device. .. _redis: https://redis.io/ + + +.. _setup-nginx: + +Using nginx as a reverse proxy +############################## + +If you want to expose paperless to the internet, you should hide it behind a +reverse proxy with SSL enabled. + +In addition to the usual configuration for SSL, +the following configuration is required for paperless to operate: + +.. code:: nginx + + http { + + # Adjust as required. This is the maximum size for file uploads. + # The default value 1M might be a little too small. + client_max_body_size 10M; + + server { + + location / { + + # Adjust host and port as required. + proxy_pass http://localhost:8000/; + + # These configuration options are required for WebSockets to work. + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + } + } + } + +Also read `this <https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu>`__, towards the end of the section. From 7a07ec2f4afd0e22c7fcfde79b480f781f5fe43a Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 3 Feb 2021 17:10:45 +0000 Subject: [PATCH 157/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 202 ++++++++++++++++-------------- 1 file changed, 109 insertions(+), 93 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index b3c84f14c..0b7e86165 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -214,7 +214,7 @@ <target>Confirmer la suppression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">199</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> @@ -222,7 +222,7 @@ <target>Voulez-vous vraiment supprimer le document "<x equiv-text="this.document.title" id="PH"/>" ?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">204</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6691075929777935948"> @@ -230,7 +230,7 @@ <target>Les fichiers liés à ce document seront supprimés définitivement. Cette action est irréversible.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="719892092227206532"> @@ -238,7 +238,7 @@ <target>Supprimer le document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">207</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1844801255494293730"> @@ -246,7 +246,7 @@ <target>Une erreur s'est produite lors de la suppression du document : <x equiv-text="JSON.stringify(error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">210</context> + <context context-type="linenumber">214</context> </context-group> </trans-unit> <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> @@ -649,12 +649,20 @@ <context context-type="linenumber">10</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Notifications</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> <source>Saved views</source> <target>Vues enregistrées</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">128</context> + <context context-type="linenumber">133</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,68 +785,12 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> - <source>Notifications</source> - <target>Notifications</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> - <source>Document processing</source> - <target>Traitement de document</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> - <source>Show notifications when new documents are detected</source> - <target>Afficher des notifications lorsque de nouveaux documents sont détectés</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">109</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> - <source>Show notifications when document processing completes successfully</source> - <target>Afficher des notifications lorsque le traitement des documents se termine avec succès</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">110</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> - <source>Show notifications when document processing fails</source> - <target>Afficher des notifications en cas d'échec du traitement des documents</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">111</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> - <source>Suppress notifications on dashboard</source> - <target>Supprimer les notifications du tableau de bord</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> - <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord.</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">112</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Edition en masse</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -846,7 +798,7 @@ <target>Afficher les messages de confirmation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -854,7 +806,7 @@ <target>La suppression de documents requiert toujours une confirmation.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">120</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -862,7 +814,55 @@ <target>Appliquer lors de la fermeture</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">121</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Traitement de document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Afficher des notifications lorsque de nouveaux documents sont détectés</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Afficher des notifications lorsque le traitement des documents se termine avec succès</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Afficher des notifications en cas d'échec du traitement des documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Supprimer les notifications du tableau de bord</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -870,7 +870,7 @@ <target>Apparaît sur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">140</context> + <context context-type="linenumber">145</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -878,7 +878,7 @@ <target>Montrer sur le tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">143</context> + <context context-type="linenumber">148</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -886,7 +886,7 @@ <target>Montrer dans la barre latérale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">147</context> + <context context-type="linenumber">152</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -894,7 +894,7 @@ <target>Aucune vue sauvegardée n'est définie.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">157</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1119,7 +1119,7 @@ <target>Gestion</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1127,15 +1127,15 @@ <target>Administration</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">154</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46aa32e581922d6d2c3d7bc4c87209ad5808b029"> - <source>Misc</source> - <target>Divers</target> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">155</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1143,7 +1143,7 @@ <target>Documentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">167</context> + <context context-type="linenumber">162</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1151,7 +1151,15 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">174</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Suggérer une idée</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1167,7 +1175,7 @@ <target>Documents ouverts</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> @@ -1175,7 +1183,7 @@ <target>Fermer tout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">101</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1670,6 +1678,14 @@ <context context-type="linenumber">126</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>Erreur HTTP : <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> <source>Upload new documents</source> <target>Charger de nouveaux documents</target> @@ -1861,7 +1877,7 @@ <target>Le document existe déjà.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">14</context> + <context context-type="linenumber">15</context> </context-group> </trans-unit> <trans-unit datatype="html" id="148389968432135849"> @@ -1869,7 +1885,7 @@ <target>Fichier non trouvé.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">15</context> + <context context-type="linenumber">16</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1520671543092565667"> @@ -1877,7 +1893,7 @@ <target>Le script de pré-traitement n'existe pas.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">16</context> + <context context-type="linenumber">17</context> </context-group> <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1886,7 +1902,7 @@ <target>Erreur lors de l'exécution du script de pré-traitement.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">17</context> + <context context-type="linenumber">18</context> </context-group> <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1895,7 +1911,7 @@ <target>Le script de post-traitement n'existe pas.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">19</context> </context-group> <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1904,7 +1920,7 @@ <target>Erreur lors de l'exécution du script de post-traitement.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">19</context> + <context context-type="linenumber">20</context> </context-group> <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> </trans-unit> @@ -1913,7 +1929,7 @@ <target>Réception d'un nouveau fichier.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">21</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7337565919209746135"> @@ -1921,7 +1937,7 @@ <target>Type de fichier non pris en charge.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5002399167376099234"> @@ -1929,7 +1945,7 @@ <target>Traitement du document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">22</context> + <context context-type="linenumber">23</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1085975194762600381"> @@ -1937,7 +1953,7 @@ <target>Génération de vignette...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">23</context> + <context context-type="linenumber">24</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3280851677698431426"> @@ -1945,7 +1961,7 @@ <target>Extraction de la date du document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">25</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7162102384876037296"> @@ -1953,7 +1969,7 @@ <target>Enregistrement du document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4550450765009165976"> @@ -1961,7 +1977,7 @@ <target>Terminé.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">27</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1519954996184640001"> From 441c8b28f0126c937b51d4842c4a5e2143d7db76 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 20:44:10 +0100 Subject: [PATCH 158/898] websocket authentication --- src/paperless/consumers.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/paperless/consumers.py b/src/paperless/consumers.py index 21a0e3ede..b3d31b402 100644 --- a/src/paperless/consumers.py +++ b/src/paperless/consumers.py @@ -1,14 +1,19 @@ import json from asgiref.sync import async_to_sync +from channels.exceptions import DenyConnection, AcceptConnection from channels.generic.websocket import WebsocketConsumer class StatusConsumer(WebsocketConsumer): + def connect(self): - self.accept() - async_to_sync(self.channel_layer.group_add)( - 'status_updates', self.channel_name) + if not self.scope['user'].is_authenticated: + raise DenyConnection() + else: + async_to_sync(self.channel_layer.group_add)( + 'status_updates', self.channel_name) + raise AcceptConnection() def disconnect(self, close_code): async_to_sync(self.channel_layer.group_discard)( From 5262202f74321e891dc4381a67b06b82c26de0c0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 21:53:39 +0100 Subject: [PATCH 159/898] close connection when not authenticated anymore. --- src/paperless/consumers.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/paperless/consumers.py b/src/paperless/consumers.py index b3d31b402..45f6ad9c5 100644 --- a/src/paperless/consumers.py +++ b/src/paperless/consumers.py @@ -7,8 +7,11 @@ from channels.generic.websocket import WebsocketConsumer class StatusConsumer(WebsocketConsumer): + def _authenticated(self): + return 'user' in self.scope and self.scope['user'].is_authenticated + def connect(self): - if not self.scope['user'].is_authenticated: + if not self._authenticated(): raise DenyConnection() else: async_to_sync(self.channel_layer.group_add)( @@ -20,4 +23,7 @@ class StatusConsumer(WebsocketConsumer): 'status_updates', self.channel_name) def status_update(self, event): - self.send(json.dumps(event['data'])) + if not self._authenticated(): + self.close() + else: + self.send(json.dumps(event['data'])) From d7f62b62c92a4e025b8f75aaf96a746ae5870428 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 3 Feb 2021 23:18:28 +0100 Subject: [PATCH 160/898] added test for web socket authentication --- src/paperless/tests/test_websockets.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/paperless/tests/test_websockets.py diff --git a/src/paperless/tests/test_websockets.py b/src/paperless/tests/test_websockets.py new file mode 100644 index 000000000..e5745ce77 --- /dev/null +++ b/src/paperless/tests/test_websockets.py @@ -0,0 +1,25 @@ +from unittest import mock + +from channels.testing import WebsocketCommunicator +from django.test import TestCase + +from paperless.asgi import application + + +class TestWebSockets(TestCase): + + async def test_no_auth(self): + communicator = WebsocketCommunicator(application, "/ws/status/") + connected, subprotocol = await communicator.connect() + self.assertFalse(connected) + await communicator.disconnect() + + @mock.patch("paperless.consumers.StatusConsumer._authenticated") + async def test_auth(self, _authenticated): + _authenticated.return_value = True + + communicator = WebsocketCommunicator(application, "/ws/status/") + connected, subprotocol = await communicator.connect() + self.assertTrue(connected) + + await communicator.disconnect() From 79a65b5a915dff27ad2d6683790505904fa1b94a Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 00:17:23 +0100 Subject: [PATCH 161/898] update gunicorn.conf --- gunicorn.conf.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/gunicorn.conf.py b/gunicorn.conf.py index 36bde9cf7..a67b20d0c 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -1,21 +1,7 @@ bind = '0.0.0.0:8000' -backlog = 2048 -workers = 3 +workers = 2 worker_class = 'uvicorn.workers.UvicornWorker' -worker_connections = 1000 timeout = 20 -keepalive = 2 -spew = False -daemon = False -pidfile = None -umask = 0 -user = None -group = None -tmp_upload_dir = None -loglevel = 'info' -errorlog = '-' -accesslog = '-' -proc_name = None def pre_fork(server, worker): pass From 95f5c9f3a6a0485b9da22a779688ac78d6a09272 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 13:17:24 +0100 Subject: [PATCH 162/898] lazy loading for parsers --- src/documents/tests/test_parsers.py | 4 ++-- src/paperless_tesseract/signals.py | 8 ++++++-- src/paperless_text/signals.py | 8 ++++++-- src/paperless_tika/__init__.py | 0 src/paperless_tika/signals.py | 8 ++++++-- 5 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 src/paperless_tika/__init__.py diff --git a/src/documents/tests/test_parsers.py b/src/documents/tests/test_parsers.py index 392c0504f..8da6470a4 100644 --- a/src/documents/tests/test_parsers.py +++ b/src/documents/tests/test_parsers.py @@ -114,8 +114,8 @@ class TestParserAvailability(TestCase): self.assertEqual(get_default_file_extension('application/zip'), ".zip") self.assertEqual(get_default_file_extension('aasdasd/dgfgf'), "") - self.assertEqual(get_parser_class_for_mime_type('application/pdf'), RasterisedDocumentParser) - self.assertEqual(get_parser_class_for_mime_type('text/plain'), TextDocumentParser) + self.assertIsInstance(get_parser_class_for_mime_type('application/pdf')(logging_group=None), RasterisedDocumentParser) + self.assertIsInstance(get_parser_class_for_mime_type('text/plain')(logging_group=None), TextDocumentParser) self.assertEqual(get_parser_class_for_mime_type('text/sdgsdf'), None) self.assertTrue(is_file_ext_supported('.pdf')) diff --git a/src/paperless_tesseract/signals.py b/src/paperless_tesseract/signals.py index 1e1cd1e1a..fedd08a92 100644 --- a/src/paperless_tesseract/signals.py +++ b/src/paperless_tesseract/signals.py @@ -1,9 +1,13 @@ -from .parsers import RasterisedDocumentParser + +def get_parser(*args, **kwargs): + from .parsers import RasterisedDocumentParser + + return RasterisedDocumentParser(*args, **kwargs) def tesseract_consumer_declaration(sender, **kwargs): return { - "parser": RasterisedDocumentParser, + "parser": get_parser, "weight": 0, "mime_types": { "application/pdf": ".pdf", diff --git a/src/paperless_text/signals.py b/src/paperless_text/signals.py index 1e0493f4f..833d0be28 100644 --- a/src/paperless_text/signals.py +++ b/src/paperless_text/signals.py @@ -1,9 +1,13 @@ -from .parsers import TextDocumentParser + +def get_parser(*args, **kwargs): + from .parsers import TextDocumentParser + + return TextDocumentParser(*args, **kwargs) def text_consumer_declaration(sender, **kwargs): return { - "parser": TextDocumentParser, + "parser": get_parser, "weight": 10, "mime_types": { "text/plain": ".txt", diff --git a/src/paperless_tika/__init__.py b/src/paperless_tika/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/paperless_tika/signals.py b/src/paperless_tika/signals.py index 137416abb..dbda377ca 100644 --- a/src/paperless_tika/signals.py +++ b/src/paperless_tika/signals.py @@ -1,9 +1,13 @@ -from .parsers import TikaDocumentParser + +def get_parser(*args, **kwargs): + from .parsers import TikaDocumentParser + + return TikaDocumentParser(*args, **kwargs) def tika_consumer_declaration(sender, **kwargs): return { - "parser": TikaDocumentParser, + "parser": get_parser, "weight": 10, "mime_types": { "application/msword": ".doc", From 32c7dd59da625042faeeb0be97b1b745e7599740 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 13:26:58 +0100 Subject: [PATCH 163/898] fix websocket test cases --- src/paperless/tests/test_websockets.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/paperless/tests/test_websockets.py b/src/paperless/tests/test_websockets.py index e5745ce77..4f98fe2b5 100644 --- a/src/paperless/tests/test_websockets.py +++ b/src/paperless/tests/test_websockets.py @@ -8,14 +8,16 @@ from paperless.asgi import application class TestWebSockets(TestCase): - async def test_no_auth(self): + @mock.patch("paperless.consumers.async_to_sync") + async def test_no_auth(self, async_to_sync): communicator = WebsocketCommunicator(application, "/ws/status/") connected, subprotocol = await communicator.connect() self.assertFalse(connected) await communicator.disconnect() + @mock.patch("paperless.consumers.async_to_sync") @mock.patch("paperless.consumers.StatusConsumer._authenticated") - async def test_auth(self, _authenticated): + async def test_auth(self, _authenticated, async_to_sync): _authenticated.return_value = True communicator = WebsocketCommunicator(application, "/ws/status/") From f9fa6fd828cfaec9c0b69d3b473d895cae5825c4 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 4 Feb 2021 13:31:20 +0100 Subject: [PATCH 164/898] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0fc3185a1..80b9c85fe 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ [![ci](https://github.com/jonaswinkler/paperless-ng/workflows/ci/badge.svg)](https://github.com/jonaswinkler/paperless-ng/actions) +![Ansible Role](https://github.com/jonaswinkler/paperless-ng/workflows/Ansible%20Role/badge.svg) [![Documentation Status](https://readthedocs.org/projects/paperless-ng/badge/?version=latest)](https://paperless-ng.readthedocs.io/en/latest/?badge=latest) [![Gitter](https://badges.gitter.im/paperless-ng/community.svg)](https://gitter.im/paperless-ng/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Docker Hub Pulls](https://img.shields.io/docker/pulls/jonaswinkler/paperless-ng.svg)](https://hub.docker.com/r/jonaswinkler/paperless-ng) From ef29f5c5129db808be3beca010fa150c46ba2823 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 14:17:18 +0100 Subject: [PATCH 165/898] websocket testing --- src/paperless/tests/test_websockets.py | 43 +++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/src/paperless/tests/test_websockets.py b/src/paperless/tests/test_websockets.py index 4f98fe2b5..e1b948edf 100644 --- a/src/paperless/tests/test_websockets.py +++ b/src/paperless/tests/test_websockets.py @@ -1,23 +1,31 @@ from unittest import mock +from channels.layers import get_channel_layer from channels.testing import WebsocketCommunicator -from django.test import TestCase +from django.test import TestCase, override_settings from paperless.asgi import application +TEST_CHANNEL_LAYERS = { + 'default': { + 'BACKEND': 'channels.layers.InMemoryChannelLayer', + }, +} + + class TestWebSockets(TestCase): - @mock.patch("paperless.consumers.async_to_sync") - async def test_no_auth(self, async_to_sync): + @override_settings(CHANNEL_LAYERS=TEST_CHANNEL_LAYERS) + async def test_no_auth(self): communicator = WebsocketCommunicator(application, "/ws/status/") connected, subprotocol = await communicator.connect() self.assertFalse(connected) await communicator.disconnect() - @mock.patch("paperless.consumers.async_to_sync") + @override_settings(CHANNEL_LAYERS=TEST_CHANNEL_LAYERS) @mock.patch("paperless.consumers.StatusConsumer._authenticated") - async def test_auth(self, _authenticated, async_to_sync): + async def test_auth(self, _authenticated): _authenticated.return_value = True communicator = WebsocketCommunicator(application, "/ws/status/") @@ -25,3 +33,28 @@ class TestWebSockets(TestCase): self.assertTrue(connected) await communicator.disconnect() + + @override_settings(CHANNEL_LAYERS=TEST_CHANNEL_LAYERS) + @mock.patch("paperless.consumers.StatusConsumer._authenticated") + async def test_receive(self, _authenticated): + _authenticated.return_value = True + + communicator = WebsocketCommunicator(application, "/ws/status/") + connected, subprotocol = await communicator.connect() + self.assertTrue(connected) + + message = { + "task_id": "test" + } + + channel_layer = get_channel_layer() + await channel_layer.group_send("status_updates", { + "type": "status_update", + "data": message + }) + + response = await communicator.receive_json_from() + + self.assertEqual(response, message) + + await communicator.disconnect() From d08a530701566d0cd34d612855cdc4a39cbfee94 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 15:15:11 +0100 Subject: [PATCH 166/898] don't load sklearn libraries unless needed --- src/documents/classifier.py | 10 ++++++---- src/documents/tests/data/model.pickle | Bin 0 -> 156345 bytes src/documents/tests/test_classifier.py | 9 +++++++++ src/paperless/settings.py | 13 ++++++++----- 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 src/documents/tests/data/model.pickle diff --git a/src/documents/classifier.py b/src/documents/classifier.py index b427264c8..3051b82a5 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -5,10 +5,6 @@ import pickle import re from django.conf import settings -from sklearn.feature_extraction.text import CountVectorizer -from sklearn.neural_network import MLPClassifier -from sklearn.preprocessing import MultiLabelBinarizer, LabelBinarizer -from sklearn.utils.multiclass import type_of_target from documents.models import Document, MatchingModel @@ -109,6 +105,10 @@ class DocumentClassifier(object): pickle.dump(self.document_type_classifier, f) def train(self): + from sklearn.feature_extraction.text import CountVectorizer + from sklearn.neural_network import MLPClassifier + from sklearn.preprocessing import MultiLabelBinarizer, LabelBinarizer + data = list() labels_tags = list() labels_correspondent = list() @@ -265,6 +265,8 @@ class DocumentClassifier(object): return None def predict_tags(self, content): + from sklearn.utils.multiclass import type_of_target + if self.tags_classifier: X = self.data_vectorizer.transform([preprocess_content(content)]) y = self.tags_classifier.predict(X) diff --git a/src/documents/tests/data/model.pickle b/src/documents/tests/data/model.pickle new file mode 100644 index 0000000000000000000000000000000000000000..db303ec807671383449aa8ac83a427d814a5ca2f GIT binary patch literal 156345 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 literal 0 HcmV?d00001 diff --git a/src/documents/tests/test_classifier.py b/src/documents/tests/test_classifier.py index 43c38b691..14673ae65 100644 --- a/src/documents/tests/test_classifier.py +++ b/src/documents/tests/test_classifier.py @@ -130,6 +130,15 @@ class TestClassifier(DirectoriesMixin, TestCase): new_classifier.reload() self.assertFalse(new_classifier.train()) + @override_settings(MODEL_FILE=os.path.join(os.path.dirname(__file__), "data", "model.pickle")) + def test_load_and_classify(self): + self.generate_test_data() + + new_classifier = DocumentClassifier() + new_classifier.reload() + + self.assertCountEqual(new_classifier.predict_tags(self.doc2.content), [45, 12]) + def test_one_correspondent_predict(self): c1 = Correspondent.objects.create(name="c1", matching_algorithm=Correspondent.MATCH_AUTO) doc1 = Document.objects.create(title="doc1", content="this is a document from c1", correspondent=c1, checksum="A") diff --git a/src/paperless/settings.py b/src/paperless/settings.py index b6d01ba53..56e91695e 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -4,7 +4,6 @@ import multiprocessing import os import re -import dateparser from dotenv import load_dotenv from django.utils.translation import gettext_lazy as _ @@ -491,7 +490,11 @@ if PAPERLESS_TIKA_ENABLED: # List dates that should be ignored when trying to parse date from document text IGNORE_DATES = set() -for s in os.getenv("PAPERLESS_IGNORE_DATES", "").split(","): - d = dateparser.parse(s) - if d: - IGNORE_DATES.add(d.date()) + +if os.getenv("PAPERLESS_IGNORE_DATES", ""): + import dateparser + + for s in os.getenv("PAPERLESS_IGNORE_DATES", "").split(","): + d = dateparser.parse(s) + if d: + IGNORE_DATES.add(d.date()) From b52792c0eddf37db98b7130c73278ef37022c6e8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 15:46:51 +0100 Subject: [PATCH 167/898] increase worker timeout for Raspberry Pi --- gunicorn.conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gunicorn.conf.py b/gunicorn.conf.py index a67b20d0c..f80be548d 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -1,7 +1,7 @@ bind = '0.0.0.0:8000' workers = 2 worker_class = 'uvicorn.workers.UvicornWorker' -timeout = 20 +timeout = 60 def pre_fork(server, worker): pass From 9a34d5c804591ad04c80d0a0319cc3762f4fb413 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 16:55:48 +0100 Subject: [PATCH 168/898] dismiss completed dismisses successful items only --- .../upload-file-widget/upload-file-widget.component.html | 2 +- .../upload-file-widget/upload-file-widget.component.ts | 4 ++-- src-ui/src/app/services/consumer-status.service.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html index eb1e1da73..c4f7fa21c 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -1,6 +1,6 @@ <app-widget-frame title="Upload new documents" i18n-title> <div header-buttons> - <a *ngIf="getStatusCompleted().length > 0" (click)="dismissAll()" [routerLink]="" > + <a *ngIf="getStatusSuccess().length > 0" (click)="dismissCompleted()" [routerLink]="" > <span i18n="This button dismisses all status messages about processed documents on the dashboard (failed and successful)">Dismiss completed</span>  <svg xmlns="http://www.w3.org/2000/svg" width="1rem" height="1rem" fill="currentColor" class="bi bi-check2-all" viewBox="0 0 16 16"> <path d="M12.354 4.354a.5.5 0 0 0-.708-.708L5 10.293 1.854 7.146a.5.5 0 1 0-.708.708l3.5 3.5a.5.5 0 0 0 .708 0l7-7zm-4.208 7l-.896-.897.707-.707.543.543 6.646-6.647a.5.5 0 0 1 .708.708l-7 7a.5.5 0 0 1-.708 0z"/> diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 2412290c0..e74e2bc41 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -92,8 +92,8 @@ export class UploadFileWidgetComponent implements OnInit { this.consumerStatusService.dismiss(status) } - dismissAll() { - this.consumerStatusService.dismissAll() + dismissCompleted() { + this.consumerStatusService.dismissCompleted() } ngOnInit(): void { diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 38f29a528..23df0871f 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -176,8 +176,8 @@ export class ConsumerStatusService { } } - dismissAll() { - this.consumerStatus = this.consumerStatus.filter(status => status.phase < FileStatusPhase.SUCCESS) + dismissCompleted() { + this.consumerStatus = this.consumerStatus.filter(status => status.phase != FileStatusPhase.SUCCESS) } onDocumentConsumptionFinished() { From a5726ae00514090b27f7b2e29767284fd1097d91 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 23:32:11 +0100 Subject: [PATCH 169/898] fix lost messages when queuing many files --- src/paperless/settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 56e91695e..5a3c206ed 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -160,6 +160,8 @@ CHANNEL_LAYERS = { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [os.getenv("PAPERLESS_REDIS", "redis://localhost:6379")], + "capacity": 2000, # default 100 + "expiry": 15, # default 60 }, }, } From 6ed228aa181b7dca41f073983341614ae4663cda Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 4 Feb 2021 23:40:53 +0100 Subject: [PATCH 170/898] remove lots of unused code --- .../management/commands/document_archiver.py | 7 +------ .../commands/document_create_classifier.py | 3 +-- .../management/commands/document_exporter.py | 3 +-- .../management/commands/document_importer.py | 3 +-- src/documents/management/commands/document_index.py | 9 +-------- src/documents/management/commands/document_logs.py | 12 ------------ .../management/commands/document_renamer.py | 9 +-------- .../management/commands/document_retagger.py | 9 +-------- .../management/commands/document_thumbnails.py | 10 +--------- src/documents/mixins.py | 9 --------- 10 files changed, 8 insertions(+), 66 deletions(-) delete mode 100644 src/documents/management/commands/document_logs.py delete mode 100755 src/documents/mixins.py diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 01bd819c5..9e0d8fabf 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -17,7 +17,6 @@ from whoosh.writing import AsyncWriter from documents.models import Document from ... import index from ...file_handling import create_source_path_directory -from ...mixins import Renderable from ...parsers import get_parser_class_for_mime_type @@ -62,7 +61,7 @@ def handle_document(document_id): parser.cleanup() -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ Using the current classification model, assigns correspondents, tags @@ -71,10 +70,6 @@ class Command(Renderable, BaseCommand): modified) after their initial import. """.replace(" ", "") - def __init__(self, *args, **kwargs): - self.verbosity = 0 - BaseCommand.__init__(self, *args, **kwargs) - def add_arguments(self, parser): parser.add_argument( "-f", "--overwrite", diff --git a/src/documents/management/commands/document_create_classifier.py b/src/documents/management/commands/document_create_classifier.py index fbfb7f7e6..a4ede88b5 100755 --- a/src/documents/management/commands/document_create_classifier.py +++ b/src/documents/management/commands/document_create_classifier.py @@ -1,10 +1,9 @@ from django.core.management.base import BaseCommand -from ...mixins import Renderable from ...tasks import train_classifier -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ Trains the classifier on your data and saves the resulting models to a diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index 37fcf2024..1505b0856 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -16,10 +16,9 @@ from documents.settings import EXPORTER_FILE_NAME, EXPORTER_THUMBNAIL_NAME, \ EXPORTER_ARCHIVE_NAME from paperless.db import GnuPG from ...file_handling import generate_filename, delete_empty_directories -from ...mixins import Renderable -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ Decrypt and rename all files in our collection into a given target diff --git a/src/documents/management/commands/document_importer.py b/src/documents/management/commands/document_importer.py index a2e19e3cc..7e5d32085 100644 --- a/src/documents/management/commands/document_importer.py +++ b/src/documents/management/commands/document_importer.py @@ -15,7 +15,6 @@ from documents.models import Document from documents.settings import EXPORTER_FILE_NAME, EXPORTER_THUMBNAIL_NAME, \ EXPORTER_ARCHIVE_NAME from ...file_handling import create_source_path_directory -from ...mixins import Renderable from ...signals.handlers import update_filename_and_move_files @@ -28,7 +27,7 @@ def disable_signal(sig, receiver, sender): sig.connect(receiver=receiver, sender=sender) -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ Using a manifest.json file, load the data from there, and import the diff --git a/src/documents/management/commands/document_index.py b/src/documents/management/commands/document_index.py index 08e20e1d2..5faa70b9f 100644 --- a/src/documents/management/commands/document_index.py +++ b/src/documents/management/commands/document_index.py @@ -1,24 +1,17 @@ from django.core.management import BaseCommand from django.db import transaction -from documents.mixins import Renderable from documents.tasks import index_reindex, index_optimize -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = "Manages the document index." - def __init__(self, *args, **kwargs): - self.verbosity = 0 - BaseCommand.__init__(self, *args, **kwargs) - def add_arguments(self, parser): parser.add_argument("command", choices=['reindex', 'optimize']) def handle(self, *args, **options): - - self.verbosity = options["verbosity"] with transaction.atomic(): if options['command'] == 'reindex': index_reindex() diff --git a/src/documents/management/commands/document_logs.py b/src/documents/management/commands/document_logs.py deleted file mode 100644 index 06efc3850..000000000 --- a/src/documents/management/commands/document_logs.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.core.management.base import BaseCommand - -from documents.models import Log - - -class Command(BaseCommand): - - help = "A quick & dirty way to see what's in the logs" - - def handle(self, *args, **options): - for log in Log.objects.order_by("pk"): - print(log) diff --git a/src/documents/management/commands/document_renamer.py b/src/documents/management/commands/document_renamer.py index 745d2d03d..f311715c6 100644 --- a/src/documents/management/commands/document_renamer.py +++ b/src/documents/management/commands/document_renamer.py @@ -5,23 +5,16 @@ from django.core.management.base import BaseCommand from django.db.models.signals import post_save from documents.models import Document -from ...mixins import Renderable -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ This will rename all documents to match the latest filename format. """.replace(" ", "") - def __init__(self, *args, **kwargs): - self.verbosity = 0 - BaseCommand.__init__(self, *args, **kwargs) - def handle(self, *args, **options): - self.verbosity = options["verbosity"] - logging.getLogger().handlers[0].level = logging.ERROR for document in tqdm.tqdm(Document.objects.all()): diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py index b2f5d8918..a37ab9ef2 100755 --- a/src/documents/management/commands/document_retagger.py +++ b/src/documents/management/commands/document_retagger.py @@ -4,11 +4,10 @@ from django.core.management.base import BaseCommand from documents.classifier import load_classifier from documents.models import Document -from ...mixins import Renderable from ...signals.handlers import set_correspondent, set_document_type, set_tags -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ Using the current classification model, assigns correspondents, tags @@ -17,10 +16,6 @@ class Command(Renderable, BaseCommand): modified) after their initial import. """.replace(" ", "") - def __init__(self, *args, **kwargs): - self.verbosity = 0 - BaseCommand.__init__(self, *args, **kwargs) - def add_arguments(self, parser): parser.add_argument( "-c", "--correspondent", @@ -61,8 +56,6 @@ class Command(Renderable, BaseCommand): def handle(self, *args, **options): - self.verbosity = options["verbosity"] - if options["inbox_only"]: queryset = Document.objects.filter(tags__is_inbox_tag=True) else: diff --git a/src/documents/management/commands/document_thumbnails.py b/src/documents/management/commands/document_thumbnails.py index 6f6451599..cf2cbeb77 100644 --- a/src/documents/management/commands/document_thumbnails.py +++ b/src/documents/management/commands/document_thumbnails.py @@ -7,7 +7,6 @@ from django import db from django.core.management.base import BaseCommand from documents.models import Document -from ...mixins import Renderable from ...parsers import get_parser_class_for_mime_type @@ -30,16 +29,12 @@ def _process_document(doc_in): parser.cleanup() -class Command(Renderable, BaseCommand): +class Command(BaseCommand): help = """ This will regenerate the thumbnails for all documents. """.replace(" ", "") - def __init__(self, *args, **kwargs): - self.verbosity = 0 - BaseCommand.__init__(self, *args, **kwargs) - def add_arguments(self, parser): parser.add_argument( "-d", "--document", @@ -51,9 +46,6 @@ class Command(Renderable, BaseCommand): ) def handle(self, *args, **options): - - self.verbosity = options["verbosity"] - logging.getLogger().handlers[0].level = logging.ERROR if options['document']: diff --git a/src/documents/mixins.py b/src/documents/mixins.py deleted file mode 100755 index 949be02e8..000000000 --- a/src/documents/mixins.py +++ /dev/null @@ -1,9 +0,0 @@ -class Renderable: - """ - A handy mixin to make it easier/cleaner to print output based on a - verbosity value. - """ - - def _render(self, text, verbosity): - if self.verbosity >= verbosity: - print(text) From e5a7dc0cc7df2ac154902429221d64591ef3a55e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 5 Feb 2021 01:10:29 +0100 Subject: [PATCH 171/898] rework most of the logging --- src/documents/classifier.py | 20 +++++----- src/documents/consumer.py | 2 + src/documents/file_handling.py | 5 ++- src/documents/index.py | 2 +- src/documents/loggers.py | 26 ++++--------- .../management/commands/document_archiver.py | 2 +- .../management/commands/document_consumer.py | 13 ++----- .../management/commands/document_retagger.py | 5 ++- src/documents/matching.py | 2 +- src/documents/parsers.py | 6 ++- src/documents/signals/handlers.py | 39 +++++++++---------- src/documents/tasks.py | 9 +++-- src/documents/views.py | 5 ++- src/paperless_mail/mail.py | 2 + src/paperless_mail/tasks.py | 7 +++- src/paperless_tesseract/parsers.py | 2 + src/paperless_text/parsers.py | 2 + src/paperless_tika/parsers.py | 2 + 18 files changed, 80 insertions(+), 71 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 3051b82a5..2acebe04a 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -13,7 +13,7 @@ class IncompatibleClassifierVersionError(Exception): pass -logger = logging.getLogger(__name__) +logger = logging.getLogger("paperless.classifier") def preprocess_content(content): @@ -115,7 +115,7 @@ class DocumentClassifier(object): labels_document_type = list() # Step 1: Extract and preprocess training data from the database. - logging.getLogger(__name__).debug("Gathering data from database...") + logger.debug("Gathering data from database...") m = hashlib.sha1() for doc in Document.objects.order_by('pk').exclude(tags__is_inbox_tag=True): # NOQA: E501 preprocessed_content = preprocess_content(doc.content) @@ -162,7 +162,7 @@ class DocumentClassifier(object): num_correspondents = len(set(labels_correspondent) | {-1}) - 1 num_document_types = len(set(labels_document_type) | {-1}) - 1 - logging.getLogger(__name__).debug( + logger.debug( "{} documents, {} tag(s), {} correspondent(s), " "{} document type(s).".format( len(data), @@ -173,7 +173,7 @@ class DocumentClassifier(object): ) # Step 2: vectorize data - logging.getLogger(__name__).debug("Vectorizing data...") + logger.debug("Vectorizing data...") self.data_vectorizer = CountVectorizer( analyzer="word", ngram_range=(1, 2), @@ -183,7 +183,7 @@ class DocumentClassifier(object): # Step 3: train the classifiers if num_tags > 0: - logging.getLogger(__name__).debug("Training tags classifier...") + logger.debug("Training tags classifier...") if num_tags == 1: # Special case where only one tag has auto: @@ -202,12 +202,12 @@ class DocumentClassifier(object): self.tags_classifier.fit(data_vectorized, labels_tags_vectorized) else: self.tags_classifier = None - logging.getLogger(__name__).debug( + logger.debug( "There are no tags. Not training tags classifier." ) if num_correspondents > 0: - logging.getLogger(__name__).debug( + logger.debug( "Training correspondent classifier..." ) self.correspondent_classifier = MLPClassifier(tol=0.01) @@ -217,13 +217,13 @@ class DocumentClassifier(object): ) else: self.correspondent_classifier = None - logging.getLogger(__name__).debug( + logger.debug( "There are no correspondents. Not training correspondent " "classifier." ) if num_document_types > 0: - logging.getLogger(__name__).debug( + logger.debug( "Training document type classifier..." ) self.document_type_classifier = MLPClassifier(tol=0.01) @@ -233,7 +233,7 @@ class DocumentClassifier(object): ) else: self.document_type_classifier = None - logging.getLogger(__name__).debug( + logger.debug( "There are no document types. Not training document type " "classifier." ) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index f8f7576ef..23988c7c1 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -47,6 +47,8 @@ MESSAGE_FINISHED = "finished" class Consumer(LoggingMixin): + logging_name = "paperless.consumer" + def _send_progress(self, current_progress, max_progress, status, message=None, document_id=None): payload = { diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index dd798e8ab..6ee97f5c3 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -8,6 +8,9 @@ from django.conf import settings from django.template.defaultfilters import slugify +logger = logging.getLogger("paperless.filehandling") + + class defaultdictNoStr(defaultdict): def __str__(self): @@ -140,7 +143,7 @@ def generate_filename(doc, counter=0, append_gpg=True): path = path.strip(os.sep) except (ValueError, KeyError, IndexError): - logging.getLogger(__name__).warning( + logger.warning( f"Invalid PAPERLESS_FILENAME_FORMAT: " f"{settings.PAPERLESS_FILENAME_FORMAT}, falling back to default") diff --git a/src/documents/index.py b/src/documents/index.py index 51197e252..bc17daeb1 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -12,7 +12,7 @@ from whoosh.qparser.dateparse import DateParserPlugin from whoosh.writing import AsyncWriter -logger = logging.getLogger(__name__) +logger = logging.getLogger("paperless.index") class JsonFormatter(Formatter): diff --git a/src/documents/loggers.py b/src/documents/loggers.py index 863bc0c34..4b0f03552 100644 --- a/src/documents/loggers.py +++ b/src/documents/loggers.py @@ -4,33 +4,21 @@ import uuid from django.conf import settings -class PaperlessHandler(logging.Handler): - def emit(self, record): - if settings.DISABLE_DBHANDLER: - return - - # We have to do the import here or Django will barf when it tries to - # load this because the apps aren't loaded at that point - from .models import Log - - kwargs = {"message": record.msg, "level": record.levelno} - - if hasattr(record, "group"): - kwargs["group"] = record.group - - Log.objects.create(**kwargs) - - class LoggingMixin: logging_group = None + logging_name = None + def renew_logging_group(self): self.logging_group = uuid.uuid4() def log(self, level, message, **kwargs): - target = ".".join([self.__class__.__module__, self.__class__.__name__]) - logger = logging.getLogger(target) + if self.logging_name: + logger = logging.getLogger(self.logging_name) + else: + name = ".".join([self.__class__.__module__, self.__class__.__name__]) + logger = logging.getLogger(name) getattr(logger, level)(message, extra={ "group": self.logging_group diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 9e0d8fabf..d2ff9c8c2 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -20,7 +20,7 @@ from ...file_handling import create_source_path_directory from ...parsers import get_parser_class_for_mime_type -logger = logging.getLogger(__name__) +logger = logging.getLogger("paperless.management.archiver") def handle_document(document_id): diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index 232a5b23c..c01743628 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -17,7 +17,7 @@ try: except ImportError: INotify = flags = None -logger = logging.getLogger(__name__) +logger = logging.getLogger("paperless.management.consumer") def _tags_from_path(filepath): @@ -108,12 +108,7 @@ class Command(BaseCommand): # This is here primarily for the tests and is irrelevant in production. stop_flag = False - def __init__(self, *args, **kwargs): - - self.logger = logging.getLogger(__name__) - - BaseCommand.__init__(self, *args, **kwargs) - self.observer = None + observer = None def add_arguments(self, parser): parser.add_argument( @@ -161,7 +156,7 @@ class Command(BaseCommand): logger.debug("Consumer exiting.") def handle_polling(self, directory, recursive): - logging.getLogger(__name__).info( + logger.info( f"Polling directory for changes: {directory}") self.observer = PollingObserver(timeout=settings.CONSUMER_POLLING) self.observer.schedule(Handler(), directory, recursive=recursive) @@ -176,7 +171,7 @@ class Command(BaseCommand): self.observer.join() def handle_inotify(self, directory, recursive): - logging.getLogger(__name__).info( + logger.info( f"Using inotify to watch directory for changes: {directory}") inotify = INotify() diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py index a37ab9ef2..854117fdd 100755 --- a/src/documents/management/commands/document_retagger.py +++ b/src/documents/management/commands/document_retagger.py @@ -7,6 +7,9 @@ from documents.models import Document from ...signals.handlers import set_correspondent, set_document_type, set_tags +logger = logging.getLogger("paperless.management.retagger") + + class Command(BaseCommand): help = """ @@ -65,7 +68,7 @@ class Command(BaseCommand): classifier = load_classifier() for document in documents: - logging.getLogger(__name__).info( + logger.info( f"Processing document {document.title}") if options['correspondent']: diff --git a/src/documents/matching.py b/src/documents/matching.py index fa9ce6af3..21102bc98 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -6,7 +6,7 @@ from fuzzywuzzy import fuzz from documents.models import MatchingModel, Correspondent, DocumentType, Tag -logger = logging.getLogger(__name__) +logger = logging.getLogger("paperless.matching") def log_reason(matching_model, document, reason): diff --git a/src/documents/parsers.py b/src/documents/parsers.py index a2eb14cef..98af4f080 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -36,7 +36,7 @@ DATE_REGEX = re.compile( ) -logger = logging.getLogger(__name__) +logger = logging.getLogger("paperless.parsing") def is_mime_type_supported(mime_type): @@ -261,6 +261,8 @@ class DocumentParser(LoggingMixin): `paperless_tesseract.parsers` for inspiration. """ + logging_name = "paperless.parsing" + def __init__(self, logging_group, progress_callback=None): super().__init__() self.logging_group = logging_group @@ -316,5 +318,5 @@ class DocumentParser(LoggingMixin): return self.date def cleanup(self): - self.log("debug", "Deleting directory {}".format(self.tempdir)) + self.log("debug", f"Deleting directory {self.tempdir}") shutil.rmtree(self.tempdir) diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 76c1e76ed..848bcb900 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -19,8 +19,7 @@ from ..file_handling import delete_empty_directories, \ from ..models import Document, Tag -def logger(message, group): - logging.getLogger(__name__).debug(message, extra={"group": group}) +logger = logging.getLogger("paperless.handlers") def add_inbox_tags(sender, document=None, logging_group=None, **kwargs): @@ -48,23 +47,23 @@ def set_correspondent(sender, selected = None if potential_count > 1: if use_first: - logger( + logger.info( f"Detected {potential_count} potential correspondents, " f"so we've opted for {selected}", - logging_group + extra={'group': logging_group} ) else: - logger( + logger.info( f"Detected {potential_count} potential correspondents, " f"not assigning any correspondent", - logging_group + extra={'group': logging_group} ) return if selected or replace: - logger( + logger.info( f"Assigning correspondent {selected} to {document}", - logging_group + extra={'group': logging_group} ) document.correspondent = selected @@ -92,23 +91,23 @@ def set_document_type(sender, if potential_count > 1: if use_first: - logger( + logger.info( f"Detected {potential_count} potential document types, " f"so we've opted for {selected}", - logging_group + extra={'group': logging_group} ) else: - logger( + logger.info( f"Detected {potential_count} potential document types, " f"not assigning any document type", - logging_group + extra={'group': logging_group} ) return if selected or replace: - logger( + logger.info( f"Assigning document type {selected} to {document}", - logging_group + extra={'group': logging_group} ) document.document_type = selected @@ -138,9 +137,9 @@ def set_tags(sender, return message = 'Tagging "{}" with "{}"' - logger( + logger.info( message.format(document, ", ".join([t.name for t in relevant_tags])), - logging_group + extra={'group': logging_group} ) document.tags.add(*relevant_tags) @@ -155,10 +154,10 @@ def cleanup_document_deletion(sender, instance, using, **kwargs): if os.path.isfile(f): try: os.unlink(f) - logging.getLogger(__name__).debug( + logger.debug( f"Deleted file {f}.") except OSError as e: - logging.getLogger(__name__).warning( + logger.warning( f"While deleting document {str(instance)}, the file " f"{f} could not be deleted: {e}" ) @@ -177,13 +176,13 @@ def cleanup_document_deletion(sender, instance, using, **kwargs): def validate_move(instance, old_path, new_path): if not os.path.isfile(old_path): # Can't do anything if the old file does not exist anymore. - logging.getLogger(__name__).fatal( + logger.fatal( f"Document {str(instance)}: File {old_path} has gone.") return False if os.path.isfile(new_path): # Can't do anything if the new file already exists. Skip updating file. - logging.getLogger(__name__).warning( + logger.warning( f"Document {str(instance)}: Cannot rename file " f"since target path {new_path} already exists.") return False diff --git a/src/documents/tasks.py b/src/documents/tasks.py index e0d726d3e..8c7d91585 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -12,6 +12,9 @@ from documents.models import Document, Tag, DocumentType, Correspondent from documents.sanity_checker import SanityFailedError +logger = logging.getLogger("paperless.tasks") + + def index_optimize(): ix = index.open_index() writer = AsyncWriter(ix) @@ -45,18 +48,18 @@ def train_classifier(): try: if classifier.train(): - logging.getLogger(__name__).info( + logger.info( "Saving updated classifier model to {}...".format( settings.MODEL_FILE) ) classifier.save_classifier() else: - logging.getLogger(__name__).debug( + logger.debug( "Training data unchanged." ) except Exception as e: - logging.getLogger(__name__).warning( + logger.warning( "Classifier error: " + str(e) ) diff --git a/src/documents/views.py b/src/documents/views.py index c2b31c996..e413d4b35 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -58,6 +58,9 @@ from .serialisers import ( ) +logger = logging.getLogger("paperless.api") + + class IndexView(TemplateView): template_name = "index.html" @@ -488,7 +491,7 @@ class SearchView(APIView): try: doc = Document.objects.get(id=r['id']) except Document.DoesNotExist: - logging.getLogger(__name__).warning( + logger.warning( f"Search index returned a non-existing document: " f"id: {r['id']}, title: {r['title']}. " f"Search index needs reindex." diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index e1916c1dd..4a62ffd95 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -102,6 +102,8 @@ def get_mailbox(server, port, security): class MailAccountHandler(LoggingMixin): + logging_name = "paperless.mail" + def _correspondent_from_name(self, name): try: return Correspondent.objects.get_or_create(name=name)[0] diff --git a/src/paperless_mail/tasks.py b/src/paperless_mail/tasks.py index 68fb859a4..086edef7b 100644 --- a/src/paperless_mail/tasks.py +++ b/src/paperless_mail/tasks.py @@ -4,6 +4,9 @@ from paperless_mail.mail import MailAccountHandler, MailError from paperless_mail.models import MailAccount +logger = logging.getLogger("paperless.mail.tasks") + + def process_mail_accounts(): total_new_documents = 0 for account in MailAccount.objects.all(): @@ -11,7 +14,7 @@ def process_mail_accounts(): total_new_documents += MailAccountHandler().handle_mail_account( account) except MailError as e: - logging.getLogger(__name__).error( + logger.error( f"Error while processing mail account {account}: {e}", exc_info=True ) @@ -27,4 +30,4 @@ def process_mail_account(name): account = MailAccount.objects.get(name=name) MailAccountHandler().handle_mail_account(account) except MailAccount.DoesNotExist: - logging.getLogger(__name__).error(f"Unknown mail acccount: {name}") + logger.error(f"Unknown mail acccount: {name}") diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 5a08c601b..0a976b569 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -19,6 +19,8 @@ class RasterisedDocumentParser(DocumentParser): image, whether it's a PDF, or other graphical format (JPEG, TIFF, etc.) """ + logging_name = "paperless.parsing.tesseract" + def extract_metadata(self, document_path, mime_type): namespace_pattern = re.compile(r"\{(.*)\}(.*)") diff --git a/src/paperless_text/parsers.py b/src/paperless_text/parsers.py index c1afe07fc..c307bf10b 100644 --- a/src/paperless_text/parsers.py +++ b/src/paperless_text/parsers.py @@ -11,6 +11,8 @@ class TextDocumentParser(DocumentParser): This parser directly parses a text document (.txt, .md, or .csv) """ + logging_name = "paperless.parsing.text" + def get_thumbnail(self, document_path, mime_type): def read_text(): diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index cde6543be..b888af820 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -14,6 +14,8 @@ class TikaDocumentParser(DocumentParser): This parser sends documents to a local tika server """ + logging_name = "paperless.parsing.tika" + def get_thumbnail(self, document_path, mime_type): if not self.archive_path: self.archive_path = self.convert_to_pdf(document_path) From 0e05b01187864b01c92f0e0b5961856bef81cc52 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 5 Feb 2021 01:11:03 +0100 Subject: [PATCH 172/898] lazy load fuzzy only when required --- src/documents/matching.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/documents/matching.py b/src/documents/matching.py index 21102bc98..edbbdc1b8 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -1,7 +1,6 @@ import logging import re -from fuzzywuzzy import fuzz from documents.models import MatchingModel, Correspondent, DocumentType, Tag @@ -123,6 +122,8 @@ def matches(matching_model, document): return bool(match) elif matching_model.matching_algorithm == MatchingModel.MATCH_FUZZY: + from fuzzywuzzy import fuzz + match = re.sub(r'[^\w\s]', '', matching_model.match) text = re.sub(r'[^\w\s]', '', document_content) if matching_model.is_insensitive: From 58af2e2493e56ea9b57397a05346a43e5b69722c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 00:13:49 +0100 Subject: [PATCH 173/898] update statistics when new documents are added --- .../saved-view-widget.component.ts | 2 +- .../statistics-widget.component.ts | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index 04e7e56bd..36feeea1e 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -12,7 +12,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; templateUrl: './saved-view-widget.component.html', styleUrls: ['./saved-view-widget.component.scss'] }) -export class SavedViewWidgetComponent implements OnInit { +export class SavedViewWidgetComponent implements OnInit, OnDestroy { constructor( private documentService: DocumentService, diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts index c3f45d63c..5207d56ab 100644 --- a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts @@ -1,6 +1,7 @@ import { HttpClient } from '@angular/common/http'; -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Observable, Subscription } from 'rxjs'; +import { ConsumerStatusService } from 'src/app/services/consumer-status.service'; import { environment } from 'src/environments/environment'; export interface Statistics { @@ -14,20 +15,34 @@ export interface Statistics { templateUrl: './statistics-widget.component.html', styleUrls: ['./statistics-widget.component.scss'] }) -export class StatisticsWidgetComponent implements OnInit { +export class StatisticsWidgetComponent implements OnInit, OnDestroy { - constructor(private http: HttpClient) { } + constructor(private http: HttpClient, + private consumerStatusService: ConsumerStatusService) { } statistics: Statistics = {} - getStatistics(): Observable<Statistics> { + subscription: Subscription + + private getStatistics(): Observable<Statistics> { return this.http.get(`${environment.apiBaseUrl}statistics/`) } - ngOnInit(): void { + reload() { this.getStatistics().subscribe(statistics => { this.statistics = statistics }) } + ngOnInit(): void { + this.reload() + this.subscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { + this.reload() + }) + } + + ngOnDestroy(): void { + this.subscription.unsubscribe() + } + } From e8e230f99bcdca0440f82981ecd9c269a9823045 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 6 Feb 2021 00:09:49 +0000 Subject: [PATCH 174/898] Apply translations in en_GB translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po' on the 'en_GB' language. --- src/locale/en_GB/LC_MESSAGES/django.po | 650 +++++++++++++++++++++++++ 1 file changed, 650 insertions(+) create mode 100644 src/locale/en_GB/LC_MESSAGES/django.po diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 000000000..5f6901f7f --- /dev/null +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,650 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +# Translators: +# Ali Bates <xadium@gmail.com>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-28 22:02+0100\n" +"PO-Revision-Date: 2020-12-30 19:27+0000\n" +"Last-Translator: Ali Bates <xadium@gmail.com>, 2021\n" +"Language-Team: English (United Kingdom) (https://www.transifex.com/paperless/teams/115905/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Documents" + +#: documents/models.py:33 +msgid "Any word" +msgstr "Any word" + +#: documents/models.py:34 +msgid "All words" +msgstr "All words" + +#: documents/models.py:35 +msgid "Exact match" +msgstr "Exact match" + +#: documents/models.py:36 +msgid "Regular expression" +msgstr "Regular expression" + +#: documents/models.py:37 +msgid "Fuzzy word" +msgstr "Fuzzy word" + +#: documents/models.py:38 +msgid "Automatic" +msgstr "Automatic" + +#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "name" + +#: documents/models.py:46 +msgid "match" +msgstr "match" + +#: documents/models.py:50 +msgid "matching algorithm" +msgstr "matching algorithm" + +#: documents/models.py:56 +msgid "is insensitive" +msgstr "is insensitive" + +#: documents/models.py:75 documents/models.py:135 +msgid "correspondent" +msgstr "correspondent" + +#: documents/models.py:76 +msgid "correspondents" +msgstr "correspondents" + +#: documents/models.py:98 +msgid "color" +msgstr "color" + +#: documents/models.py:102 +msgid "is inbox tag" +msgstr "is inbox tag" + +#: documents/models.py:104 +msgid "" +"Marks this tag as an inbox tag: All newly consumed documents will be tagged " +"with inbox tags." +msgstr "" +"Marks this tag as an inbox tag: All newly consumed documents will be tagged " +"with inbox tags." + +#: documents/models.py:109 +msgid "tag" +msgstr "tag" + +#: documents/models.py:110 documents/models.py:166 +msgid "tags" +msgstr "tags" + +#: documents/models.py:116 documents/models.py:148 +msgid "document type" +msgstr "document type" + +#: documents/models.py:117 +msgid "document types" +msgstr "document types" + +#: documents/models.py:125 +msgid "Unencrypted" +msgstr "Unencrypted" + +#: documents/models.py:126 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Encrypted with GNU Privacy Guard" + +#: documents/models.py:139 +msgid "title" +msgstr "title" + +#: documents/models.py:152 +msgid "content" +msgstr "content" + +#: documents/models.py:154 +msgid "" +"The raw, text-only data of the document. This field is primarily used for " +"searching." +msgstr "" +"The raw, text-only data of the document. This field is primarily used for " +"searching." + +#: documents/models.py:159 +msgid "mime type" +msgstr "mime type" + +#: documents/models.py:170 +msgid "checksum" +msgstr "checksum" + +#: documents/models.py:174 +msgid "The checksum of the original document." +msgstr "The checksum of the original document." + +#: documents/models.py:178 +msgid "archive checksum" +msgstr "archive checksum" + +#: documents/models.py:183 +msgid "The checksum of the archived document." +msgstr "The checksum of the archived document." + +#: documents/models.py:187 documents/models.py:330 +msgid "created" +msgstr "created" + +#: documents/models.py:191 +msgid "modified" +msgstr "modified" + +#: documents/models.py:195 +msgid "storage type" +msgstr "storage type" + +#: documents/models.py:203 +msgid "added" +msgstr "added" + +#: documents/models.py:207 +msgid "filename" +msgstr "filename" + +#: documents/models.py:212 +msgid "Current filename in storage" +msgstr "Current filename in storage" + +#: documents/models.py:216 +msgid "archive serial number" +msgstr "archive serial number" + +#: documents/models.py:221 +msgid "The position of this document in your physical document archive." +msgstr "The position of this document in your physical document archive." + +#: documents/models.py:227 +msgid "document" +msgstr "document" + +#: documents/models.py:228 +msgid "documents" +msgstr "documents" + +#: documents/models.py:313 +msgid "debug" +msgstr "debug" + +#: documents/models.py:314 +msgid "information" +msgstr "information" + +#: documents/models.py:315 +msgid "warning" +msgstr "warning" + +#: documents/models.py:316 +msgid "error" +msgstr "error" + +#: documents/models.py:317 +msgid "critical" +msgstr "critical" + +#: documents/models.py:321 +msgid "group" +msgstr "group" + +#: documents/models.py:324 +msgid "message" +msgstr "message" + +#: documents/models.py:327 +msgid "level" +msgstr "level" + +#: documents/models.py:334 +msgid "log" +msgstr "log" + +#: documents/models.py:335 +msgid "logs" +msgstr "logs" + +#: documents/models.py:346 documents/models.py:396 +msgid "saved view" +msgstr "saved view" + +#: documents/models.py:347 +msgid "saved views" +msgstr "saved views" + +#: documents/models.py:350 +msgid "user" +msgstr "user" + +#: documents/models.py:356 +msgid "show on dashboard" +msgstr "show on dashboard" + +#: documents/models.py:359 +msgid "show in sidebar" +msgstr "show in sidebar" + +#: documents/models.py:363 +msgid "sort field" +msgstr "sort field" + +#: documents/models.py:366 +msgid "sort reverse" +msgstr "sort reverse" + +#: documents/models.py:372 +msgid "title contains" +msgstr "title contains" + +#: documents/models.py:373 +msgid "content contains" +msgstr "content contains" + +#: documents/models.py:374 +msgid "ASN is" +msgstr "ASN is" + +#: documents/models.py:375 +msgid "correspondent is" +msgstr "correspondent is" + +#: documents/models.py:376 +msgid "document type is" +msgstr "document type is" + +#: documents/models.py:377 +msgid "is in inbox" +msgstr "is in inbox" + +#: documents/models.py:378 +msgid "has tag" +msgstr "has tag" + +#: documents/models.py:379 +msgid "has any tag" +msgstr "has any tag" + +#: documents/models.py:380 +msgid "created before" +msgstr "created before" + +#: documents/models.py:381 +msgid "created after" +msgstr "created after" + +#: documents/models.py:382 +msgid "created year is" +msgstr "created year is" + +#: documents/models.py:383 +msgid "created month is" +msgstr "created month is" + +#: documents/models.py:384 +msgid "created day is" +msgstr "created day is" + +#: documents/models.py:385 +msgid "added before" +msgstr "added before" + +#: documents/models.py:386 +msgid "added after" +msgstr "added after" + +#: documents/models.py:387 +msgid "modified before" +msgstr "modified before" + +#: documents/models.py:388 +msgid "modified after" +msgstr "modified after" + +#: documents/models.py:389 +msgid "does not have tag" +msgstr "does not have tag" + +#: documents/models.py:400 +msgid "rule type" +msgstr "rule type" + +#: documents/models.py:404 +msgid "value" +msgstr "value" + +#: documents/models.py:410 +msgid "filter rule" +msgstr "filter rule" + +#: documents/models.py:411 +msgid "filter rules" +msgstr "filter rules" + +#: documents/serialisers.py:383 +#, python-format +msgid "File type %(type)s not supported" +msgstr "File type %(type)s not supported" + +#: documents/templates/index.html:20 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng is loading..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Paperless-ng signed out" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "You have been successfully logged out. Bye!" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Sign in again" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Paperless-ng sign in" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Please sign in." + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Your username and password didn't match. Please try again." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Username" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Password" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Sign in" + +#: paperless/settings.py:286 +msgid "English" +msgstr "English" + +#: paperless/settings.py:287 +msgid "German" +msgstr "German" + +#: paperless/settings.py:288 +msgid "Dutch" +msgstr "Dutch" + +#: paperless/settings.py:289 +msgid "French" +msgstr "French" + +#: paperless/urls.py:114 +msgid "Paperless-ng administration" +msgstr "Paperless-ng administration" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filter" + +#: paperless_mail/admin.py:27 +msgid "" +"Paperless will only process mails that match ALL of the filters given below." +msgstr "" +"Paperless will only process mails that match ALL of the filters given below." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Actions" + +#: paperless_mail/admin.py:39 +msgid "" +"The action applied to the mail. This action is only performed when documents" +" were consumed from the mail. Mails without attachments will remain entirely" +" untouched." +msgstr "" +"The action applied to the mail. This action is only performed when documents" +" were consumed from the mail. Mails without attachments will remain entirely" +" untouched." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadata" + +#: paperless_mail/admin.py:48 +msgid "" +"Assign metadata to documents consumed from this rule automatically. If you " +"do not assign tags, types or correspondents here, paperless will still " +"process all matching rules that you have defined." +msgstr "" +"Assign metadata to documents consumed from this rule automatically. If you " +"do not assign tags, types or correspondents here, paperless will still " +"process all matching rules that you have defined." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Paperless mail" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "mail account" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "mail accounts" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "No encryption" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Use SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Use STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "IMAP server" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "IMAP port" + +#: paperless_mail/models.py:36 +msgid "" +"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " +"SSL connections." +msgstr "" +"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " +"SSL connections." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "IMAP security" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "username" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "password" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "mail rule" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "mail rules" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Only process attachments." + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Process all files, including 'inline' attachments." + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Mark as read, don't process read mails" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Flag the mail, don't process flagged mails" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Move to specified folder" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Delete" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Use subject as title" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Use attachment filename as title" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Do not assign a correspondent" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Use mail address" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Use name (or mail address if not available)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Use correspondent selected below" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "order" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "account" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "folder" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filter from" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "filter subject" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "filter body" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "filter attachment filename" + +#: paperless_mail/models.py:140 +msgid "" +"Only consume documents which entirely match this filename if specified. " +"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" +"Only consume documents which entirely match this filename if specified. " +"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "maximum age" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "Specified in days." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "attachment type" + +#: paperless_mail/models.py:154 +msgid "" +"Inline attachments include embedded images, so it's best to combine this " +"option with a filename filter." +msgstr "" +"Inline attachments include embedded images, so it's best to combine this " +"option with a filename filter." + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "action" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "action parameter" + +#: paperless_mail/models.py:167 +msgid "" +"Additional parameter for the action selected above, i.e., the target folder " +"of the move to folder action." +msgstr "" +"Additional parameter for the action selected above, i.e., the target folder " +"of the move to folder action." + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "assign title from" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "assign this tag" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "assign this document type" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "assign correspondent from" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "assign this correspondent" From 2269a888c49460dcca3580ce222007f0e1e9f1e7 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 6 Feb 2021 00:12:00 +0000 Subject: [PATCH 175/898] Translate /src-ui/messages.xlf in en_GB translation completed for the source file '/src-ui/messages.xlf' on the 'en_GB' language. --- src-ui/src/locale/messages.en_GB.xlf | 2313 ++++++++++++++++++++++++++ 1 file changed, 2313 insertions(+) create mode 100644 src-ui/src/locale/messages.en_GB.xlf diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf new file mode 100644 index 000000000..4df278c69 --- /dev/null +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -0,0 +1,2313 @@ +<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="en-GB"> + <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Document added</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Open document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>New document detected</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4733307402565258070"> + <source>Documents</source> + <target>Documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2155249406916744630"> + <source>View "<x equiv-text="this.list.savedView.name" id="PH"/>" saved successfully.</source> + <target>View &quot;<x equiv-text="this.list.savedView.name" id="PH"/>&quot; saved successfully.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">109</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6837554170707123455"> + <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> + <target>View &quot;<x equiv-text="savedView.name" id="PH"/>&quot; created successfully.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <source>Select</source> + <target>Select</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <source>Select none</source> + <target>Select none</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <source>Select page</source> + <target>Select page</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <source>Select all</source> + <target>Select all</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <source>Sort</source> + <target>Sort</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <source>Views</source> + <target>Views</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <source>Save as...</source> + <target>Save as...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="72e7d343f9165602cce1ca7faffbc565fd31ef92"> + <source>Save "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Save &quot;<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <source>(filtered)</source> + <target>(filtered)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <source>ASN</source> + <target>ASN</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <source>Correspondent</source> + <target>Correspondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <source>Title</source> + <target>Title</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <source>Document type</source> + <target>Document type</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <source>Created</source> + <target>Created</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <source>Added</source> + <target>Added</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9021887951960049161"> + <source>Confirm delete</source> + <target>Confirm delete</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5382975254277698192"> + <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> + <target>Do you really want to delete document &quot;<x equiv-text="this.document.title" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6691075929777935948"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <target>The files for this document will be deleted permanently. This operation cannot be undone.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="719892092227206532"> + <source>Delete document</source> + <target>Delete document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1844801255494293730"> + <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> + <target>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <source>Delete</source> + <target>Delete</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <source>Download</source> + <target>Download</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <source>More like this</source> + <target>More like this</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <source>Close</source> + <target>Close</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <source>Details</source> + <target>Details</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <source>Content</source> + <target>Content</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <source>Metadata</source> + <target>Metadata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <source>Discard</source> + <target>Discard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <source>Save</source> + <target>Save</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <source>Page</source> + <target>Page</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> + <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> + <target>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <source>Download original</source> + <target>Download original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <source>Archive serial number</source> + <target>Archive serial number</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <source>Date created</source> + <target>Date created</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <source>Date modified</source> + <target>Date modified</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <source>Date added</source> + <target>Date added</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <source>Media filename</source> + <target>Media filename</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <source>Original MD5 checksum</source> + <target>Original MD5 checksum</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <source>Original file size</source> + <target>Original file size</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <source>Original mime type</source> + <target>Original mime type</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <source>Archive MD5 checksum</source> + <target>Archive MD5 checksum</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <source>Archive file size</source> + <target>Archive file size</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <source>Original document metadata</source> + <target>Original document metadata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <source>Archived document metadata</source> + <target>Archived document metadata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <source>Save & next</source> + <target>Save & next</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8765497970646365998"> + <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> + <target>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7016571167317583872"> + <source>Welcome to Paperless-ng!</source> + <target>Welcome to Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <source>Dashboard</source> + <target>Dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="93754014749412887"> + <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Do you really want to delete the tag &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">30</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <source>Tags</source> + <target>Tags</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <source>Create</source> + <target>Create</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <source>Filter by:</source> + <target>Filter by:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <source>Name</source> + <target>Name</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <source>Color</source> + <target>Color</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <source>Matching</source> + <target>Matching</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <source>Document count</source> + <target>Document count</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <source>Actions</source> + <target>Actions</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <source>Documents</source> + <target>Documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <source>Edit</source> + <target>Edit</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4990731724078522539"> + <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Do you really want to delete the document type &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <source>Document types</source> + <target>Document types</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <source>Logs</source> + <target>Logs</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5ca707824ab93066c7d9b44e1b8bf216725c2c22"> + <source>Filter</source> + <target>Filter</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5610279464668232148"> + <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> + <target>Saved view &quot;<x equiv-text="savedView.name" id="PH"/>&quot; deleted.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5647210819299459618"> + <source>Settings saved successfully.</source> + <target>Settings saved successfully.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6839066544204061364"> + <source>Use system language</source> + <target>Use system language</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7729897675462249787"> + <source>Use date format of display language</source> + <target>Use date format of display language</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8488620293789898901"> + <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <source>Settings</source> + <target>Settings</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <source>General settings</source> + <target>General settings</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Notifications</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <source>Saved views</source> + <target>Saved views</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">133</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <source>Appearance</source> + <target>Appearance</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <source>Display language</source> + <target>Display language</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <source>You need to reload the page after applying a new language.</source> + <target>You need to reload the page after applying a new language.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <source>Date display</source> + <target>Date display</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <source>Date format</source> + <target>Date format</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> + <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> + <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> + <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <source>Items per page</source> + <target>Items per page</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <source>Document editor</source> + <target>Document editor</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <source>Use PDF viewer provided by the browser</source> + <target>Use PDF viewer provided by the browser</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <target>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <source>Dark mode</source> + <target>Dark mode</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <source>Use system settings</source> + <target>Use system settings</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <source>Enable dark mode</source> + <target>Enable dark mode</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <source>Bulk editing</source> + <target>Bulk editing</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <source>Show confirmation dialogs</source> + <target>Show confirmation dialogs</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <source>Deleting documents will always ask for confirmation.</source> + <target>Deleting documents will always ask for confirmation.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <source>Apply on close</source> + <target>Apply on close</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Document processing</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Show notifications when new documents are detected</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Show notifications when document processing completes successfully</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Show notifications when document processing fails</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Suppress notifications on dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>This will suppress all messages about document processing status on the dashboard.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <source>Appears on</source> + <target>Appears on</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">145</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <source>Show on dashboard</source> + <target>Show on dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">148</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <source>Show in sidebar</source> + <target>Show in sidebar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">152</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <source>No saved views defined.</source> + <target>No saved views defined.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <source>404 Not Found</source> + <target>404 Not Found</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7427874343955308724"> + <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Do you really want to delete the correspondent &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <source>Correspondents</source> + <target>Correspondents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <source>Last correspondence</source> + <target>Last correspondence</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1234709746630139322"> + <source>Confirmation</source> + <target>Confirmation</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9178182467454450952"> + <source>Confirm</source> + <target>Confirm</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <source>Cancel</source> + <target>Cancel</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6457471243969293847"> + <source>Create new correspondent</source> + <target>Create new correspondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2059822531169388684"> + <source>Edit correspondent</source> + <target>Edit correspondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <source>Matching algorithm</source> + <target>Matching algorithm</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <source>Matching pattern</source> + <target>Matching pattern</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <source>Case insensitive</source> + <target>Case insensitive</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9153094873118985366"> + <source>Create new tag</source> + <target>Create new tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5872175735754226507"> + <source>Edit tag</source> + <target>Edit tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <source>Inbox tag</source> + <target>Inbox tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <target>Inbox tags are automatically assigned to all consumed documents.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6672809941092516947"> + <source>Create new document type</source> + <target>Create new document type</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="36335016091244220"> + <source>Edit document type</source> + <target>Edit document type</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <source>Search results</source> + <target>Search results</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> + <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> + <target>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> + <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> + <target> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> + <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> + <target>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> + <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> + <target>Did you mean &quot;<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <target>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <source>Paperless-ng</source> + <target>Paperless-ng</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note from="description" priority="1">app title</note> + </trans-unit> + <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <source>Search documents</source> + <target>Search documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <source>Logout</source> + <target>Logout</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <source>Manage</source> + <target>Manage</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <source>Admin</source> + <target>Admin</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Info</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">155</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <source>Documentation</source> + <target>Documentation</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <source>GitHub</source> + <target>GitHub</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Suggest an idea</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> + <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> + <target>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <source>Open documents</source> + <target>Open documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <source>Close all</source> + <target>Close all</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">101</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5195932016807797291"> + <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> + <target>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8170755470576301659"> + <source>Without correspondent</source> + <target>Without correspondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">31</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8705701325879965907"> + <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> + <target>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4362173610367509215"> + <source>Without document type</source> + <target>Without document type</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8180755793012580465"> + <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> + <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">42</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6494566478302448576"> + <source>Without any tag</source> + <target>Without any tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">46</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <source>Filter tags</source> + <target>Filter tags</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <source>Filter correspondents</source> + <target>Filter correspondents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <source>Filter document types</source> + <target>Filter document types</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <source>Reset filters</source> + <target>Reset filters</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7593728289020204896"> + <source>Not assigned</source> + <target>Not assigned</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + </trans-unit> + <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <source>Apply</source> + <target>Apply</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4873149362496451858"> + <source>Last 7 days</source> + <target>Last 7 days</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4463380307954693363"> + <source>Last month</source> + <target>Last month</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8697368973702409683"> + <source>Last 3 months</source> + <target>Last 3 months</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3566342898065860218"> + <source>Last year</source> + <target>Last year</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <source>After</source> + <target>After</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <source>Before</source> + <target>Before</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <source>Clear</source> + <target>Clear</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <source>View</source> + <target>View</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> + <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> + <target>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <source>Filter by correspondent</source> + <target>Filter by correspondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <source>Filter by tag</source> + <target>Filter by tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <source>Score:</source> + <target>Score:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <source>View in browser</source> + <target>View in browser</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7985804062689412812"> + <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">112</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8639884465898458690"> + <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> + <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot; and &quot;<x equiv-text="items[1].name" id="PH_1"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + </trans-unit> + <trans-unit datatype="html" id="760986369763309193"> + <source>, </source> + <target>, </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">116</context> + </context-group> + <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + </trans-unit> + <trans-unit datatype="html" id="1822679894391095557"> + <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> + <target><x equiv-text="list" id="PH"/> and &quot;<x equiv-text="items[items.length - 1].name" id="PH_1"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + </trans-unit> + <trans-unit datatype="html" id="4137232459980262849"> + <source>Confirm tags assignment</source> + <target>Confirm tags assignment</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6619516195038467207"> + <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>This operation will add the tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">129</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1894412783609570695"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">131</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7181166515756808573"> + <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>This operation will remove the tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">134</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3819792277998068944"> + <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2739066218579571288"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> + <target>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">138</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2996713129519325161"> + <source>Confirm correspondent assignment</source> + <target>Confirm correspondent assignment</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">158</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6900893559485781849"> + <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>This operation will assign the correspondent &quot;<x equiv-text="correspondent.name" id="PH"/>&quot; to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">160</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1257522660364398440"> + <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5393409374423140648"> + <source>Confirm document type assignment</source> + <target>Confirm document type assignment</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">181</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="332180123895325027"> + <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>This operation will assign the document type &quot;<x equiv-text="documentType.name" id="PH"/>&quot; to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">183</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2236642492594872779"> + <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">185</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="749430623564850405"> + <source>Delete confirm</source> + <target>Delete confirm</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">200</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4303174930844518780"> + <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5641451190833696892"> + <source>This operation cannot be undone.</source> + <target>This operation cannot be undone.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6734339521247847366"> + <source>Delete document(s)</source> + <target>Delete document(s)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <source>Select:</source> + <target>Select:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <source>All</source> + <target>All</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <source>Edit:</source> + <target>Edit:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Suggestions:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <source>Save current view</source> + <target>Save current view</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <source>Show all</source> + <target>Show all</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <source>Statistics</source> + <target>Statistics</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="46c8fe557cf52c9389783627d4f85453f4ddb459"> + <source>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c327c0e67bcac7494dcbaa9afb3b42d5008c6438"> + <source>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></source> + <target>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Failed: <x equiv-text="countFailed" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Added: <x equiv-text="countSuccess" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Connecting...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Uploading...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Upload complete, waiting...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <source>Upload new documents</source> + <target>Upload new documents</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <source>Drop documents here or</source> + <target>Drop documents here or</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <source>Browse files</source> + <target>Browse files</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Dismiss completed</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + </trans-unit> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Open document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <source>First steps</source> + <target>First steps</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <source>Paperless is running! :)</source> + <target>Paperless is running! :)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <target>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <source>Paperless offers some more features that try to make your life easier:</source> + <target>Paperless offers some more features that try to make your life easier:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <target>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <target>You can configure paperless to read your mails and add documents from attached files.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <target>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="218403386307979629"> + <source>Metadata</source> + <target>Metadata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3797570084942068182"> + <source>Select</source> + <target>Select</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7103181924469214926"> + <source>Please select an object</source> + <target>Please select an object</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2807800733729323332"> + <source>Yes</source> + <target>Yes</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3542042671420335679"> + <source>No</source> + <target>No</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7536524521722799066"> + <source>(no title)</source> + <target>(no title)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1206520795340730278"> + <source>English (US)</source> + <target>English (US)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">82</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1858110241312746425"> + <source>German</source> + <target>German</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3071065188816255493"> + <source>Dutch</source> + <target>Dutch</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">84</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7633754075223722162"> + <source>French</source> + <target>French</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Document already exists.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>File not found.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Pre-consume script does not exist.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Error while executing pre-consume script.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Post-consume script does not exist.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Error while executing post-consume script.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Received new file.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>File type not supported.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Processing document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Generating thumbnail...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Retrieving date from document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Saving document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Finished.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1519954996184640001"> + <source>Error</source> + <target>Error</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5037437391296624618"> + <source>Information</source> + <target>Information</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517688192215738656"> + <source>ASN</source> + <target>ASN</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2691296884221415710"> + <source>Correspondent</source> + <target>Correspondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Title</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5066119607229701477"> + <source>Document type</source> + <target>Document type</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4207916966377787111"> + <source>Created</source> + <target>Created</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="231679111972850796"> + <source>Added</source> + <target>Added</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3553216189604488439"> + <source>Modified</source> + <target>Modified</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2056433880533904076"> + <source>Light blue</source> + <target>Light blue</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">6</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4082253113407591781"> + <source>Blue</source> + <target>Blue</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1143414876575720034"> + <source>Light green</source> + <target>Light green</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="119581980963263815"> + <source>Green</source> + <target>Green</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3250646524116252719"> + <source>Light red</source> + <target>Light red</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1628552745302385832"> + <source>Red </source> + <target>Red </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5479028842846122610"> + <source>Light orange</source> + <target>Light orange</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8598918991528773310"> + <source>Orange</source> + <target>Orange</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1789283185177957430"> + <source>Light violet</source> + <target>Light violet</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2682868487071320453"> + <source>Violet</source> + <target>Violet</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1449010446077321264"> + <source>Brown</source> + <target>Brown</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30300572504753589"> + <source>Black</source> + <target>Black</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="461048771215121187"> + <source>Light grey</source> + <target>Light grey</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4561076822163447092"> + <source>Create new item</source> + <target>Create new item</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5324147361912094446"> + <source>Edit item</source> + <target>Edit item</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1699589597032579396"> + <source>Could not save element: <x equiv-text="error" id="PH"/></source> + <target>Could not save element: <x equiv-text="error" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="810888510148304696"> + <source>Automatic</source> + <target>Automatic</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5044611416737085530"> + <source>Do you really want to delete this element?</source> + <target>Do you really want to delete this element?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8371896857609524947"> + <source>Associated documents will not be deleted.</source> + <target>Associated documents will not be deleted.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7022070615528435141"> + <source>Delete</source> + <target>Delete</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5467489005440577210"> + <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5851669019930456395"> + <source>Any word</source> + <target>Any word</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517655726614958140"> + <source>Any: Document contains any of these words (space separated)</source> + <target>Any: Document contains any of these words (space separated)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="700315718208181326"> + <source>All words</source> + <target>All words</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="111914402588955480"> + <source>All: Document contains all of these words (space separated)</source> + <target>All: Document contains all of these words (space separated)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9180173992399180575"> + <source>Exact match</source> + <target>Exact match</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7109184332944610787"> + <source>Exact: Document contains this string</source> + <target>Exact: Document contains this string</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1338733395833138319"> + <source>Regular expression</source> + <target>Regular expression</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7548151332424148033"> + <source>Regular expression: Document matches this regular expression</source> + <target>Regular expression: Document matches this regular expression</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1856513373880048959"> + <source>Fuzzy word</source> + <target>Fuzzy word</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8419167206585286450"> + <source>Fuzzy: Document contains a word similar to this word</source> + <target>Fuzzy: Document contains a word similar to this word</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2167862279705099846"> + <source>Auto: Learn matching automatically</source> + <target>Auto: Learn matching automatically</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + </body> + </file> +</xliff> \ No newline at end of file From 62ff79164ee22a85e296b07c56d6d4781b502605 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sat, 6 Feb 2021 00:40:18 -0800 Subject: [PATCH 176/898] Document popover previews --- .../document-card-small.component.html | 20 ++++++++- .../document-card-small.component.scss | 18 ++++++++ .../document-card-small.component.ts | 44 +++++++++++++++++-- .../document-list.component.html | 2 +- .../document-list/document-list.component.ts | 9 ++++ src-ui/src/theme_dark.scss | 12 +++++ 6 files changed, 99 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 28dc84236..a6ac18b83 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -37,12 +37,30 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> </a> - <a [href]="getPreviewUrl()" class="btn btn-sm btn-outline-secondary" title="View in browser" i18n-title> + <a [href]="previewUrl" target="_blank" class="btn btn-sm btn-outline-secondary" title="Hover to preview, click to view in browser" i18n-title + [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" + autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> </a> + <ng-template #previewContent> + <ng-container *ngIf="getContentType() == 'application/pdf'"> + <div class="preview pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> + <div class="spinner-border spinner-border-sm" role="status"> + <span class="sr-only">Loading...</span> + </div> + <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="false" [show-all]="true" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> + </div> + <ng-template #nativePdfViewer> + <object [data]="previewUrl | safe" type="application/pdf" class="preview" width="100%"></object> + </ng-template> + </ng-container> + <ng-container *ngIf="getContentType() == 'text/plain'"> + <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> + </ng-container> + </ng-template> <a [href]="getDownloadUrl()" class="btn btn-sm btn-outline-secondary" title="Download" (click)="$event.stopPropagation()" i18n-title> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index a4af1bb11..ba3a180c7 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -34,3 +34,21 @@ .doc-img-background-selected { background-color: $primaryFaded; } + +::ng-deep .popover { + max-width: 40rem; + + .preview { + min-width: 10rem; + min-height: 10rem; + max-height: 25rem; + overflow-y: scroll; + } + + .spinner-border { + position: absolute; + top: 4rem; + left: calc(50% - 0.5rem); + z-index: 0; + } +} diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 5db0e30c0..a19e19533 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -1,7 +1,10 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { map } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; +import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; +import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; +import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @Component({ selector: 'app-document-card-small', @@ -10,11 +13,11 @@ import { DocumentService } from 'src/app/services/rest/document.service'; }) export class DocumentCardSmallComponent implements OnInit { - constructor(private documentService: DocumentService) { } + constructor(private documentService: DocumentService, private settings: SettingsService) { } @Input() selected = false - + @Output() toggleSelected = new EventEmitter() @@ -29,7 +32,17 @@ export class DocumentCardSmallComponent implements OnInit { moreTags: number = null + @Output() + showPreview = new EventEmitter<DocumentCardSmallComponent>() + + @ViewChild('popover') popover: NgbPopover + + metadata: PaperlessDocumentMetadata + ngOnInit(): void { + this.documentService.getMetadata(this.document?.id).subscribe(result => { + this.metadata = result + }) } getThumbUrl() { @@ -40,7 +53,7 @@ export class DocumentCardSmallComponent implements OnInit { return this.documentService.getDownloadUrl(this.document.id) } - getPreviewUrl() { + get previewUrl() { return this.documentService.getPreviewUrl(this.document.id) } @@ -57,4 +70,27 @@ export class DocumentCardSmallComponent implements OnInit { ) } + get useNativePdfViewer(): boolean { + return this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER) + } + + getContentType() { + return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type + } + + mouseEnterPreview() { + this.mouseOnPreview = true + if (!this.popover.isOpen()) { + setTimeout(() => { + if (this.mouseOnPreview) { + this.showPreview.emit(this) + this.popover.open() + } + }, 600); + } + } + + mouseLeavePreview() { + this.mouseOnPreview = false + } } diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index cfc2e655d..630395b69 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -170,5 +170,5 @@ </table> <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> - <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> + <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" (showPreview)="closeAllPopovers($event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> </div> diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 0d1562c24..e1c2457e6 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -12,6 +12,7 @@ import { SavedViewService } from 'src/app/services/rest/saved-view.service'; import { Toast, ToastService } from 'src/app/services/toast.service'; import { FilterEditorComponent } from './filter-editor/filter-editor.component'; import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-view-config-dialog.component'; +import { DocumentCardSmallComponent } from './document-card-small/document-card-small.component'; @Component({ selector: 'app-document-list', @@ -41,6 +42,8 @@ export class DocumentListComponent implements OnInit, OnDestroy { private consumptionFinishedSubscription: Subscription + @ViewChildren(DocumentCardSmallComponent) smallCards: QueryList<DocumentCardSmallComponent> + get isFiltered() { return this.list.filterRules?.length > 0 } @@ -204,4 +207,10 @@ export class DocumentListComponent implements OnInit, OnDestroy { trackByDocumentId(index, item: PaperlessDocument) { return item.id } + + closeAllPopovers(cardOpening: DocumentCardSmallComponent) { + this.smallCards.forEach(card => { + if (card !== cardOpening) card.popover.close() + }) + } } diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 4e850f017..8526284a8 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -366,6 +366,18 @@ $border-color-dark-mode: #47494f; .progress-bar.bg-primary { background-color: darken($primary-dark-mode, 5%) !important; } + + .popover { + .popover-header, + .popover-body { + background-color: $bg-light-dark-mode; + border-color: $border-color-dark-mode; + } + + .arrow::after { + border-top-color: $bg-light-dark-mode; + } + } } body.color-scheme-dark { From 97811c58303122ca4c90b3492dd87cb10bfd510b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 14:54:00 +0100 Subject: [PATCH 177/898] update bare metal instructions --- docs/setup.rst | 63 +++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index 139db549a..4025b6721 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -221,7 +221,7 @@ Install Paperless from Docker Hub .. _setup-docker_build: -Build the docker image yourself +Build the Docker image yourself =============================== 1. Clone the entire repository of paperless: @@ -252,14 +252,14 @@ Build the docker image yourself 4. Run the ``compile-frontend.sh`` script. This requires ``node`` and ``npm >= v15``. -5. Follow steps 2 to 7 of :ref:`setup-docker_hub`. When asked to run - ``docker-compose up -d`` to start the containers, do +5. Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run + ``docker-compose pull`` to pull the image, do .. code:: shell-session $ docker-compose build - before that to build the image. + instead to build the image. .. _setup-bare_metal: @@ -309,7 +309,7 @@ writing. Windows is not and will never be supported. 2. Install ``redis`` >= 5.0 and configure it to start automatically. 3. Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish - to use PostgreSQL, SQLite is avialable as well. + to use PostgreSQL, SQLite is available as well. 4. Get the release archive from `<https://github.com/jonaswinkler/paperless-ng/releases>`_. If you clone the git repo as it is, you also have to compile the front end by yourself. @@ -333,8 +333,14 @@ writing. Windows is not and will never be supported. * Set ``PAPERLESS_OCR_LANGUAGE`` to the language most of your documents are written in. * Set ``PAPERLESS_TIME_ZONE`` to your local time zone. -6. Setup permissions. Create a system users under which you wish to run paperless. Ensure that these directories exist - and that the user has write permissions to the following directories +6. Create a system user under which you wish to run paperless. + + .. code:: shell-session + + adduser paperless --system --home /opt/paperless --group + +7. Ensure that these directories exist + and that the paperless user has write permissions to the following directories: * ``/opt/paperless/media`` * ``/opt/paperless/data`` @@ -342,30 +348,32 @@ writing. Windows is not and will never be supported. Adjust as necessary if you configured different folders. -7. Install python requirements from the ``requirements.txt`` file. +8. Install python requirements from the ``requirements.txt`` file. It is up to you if you wish to use a virtual environment or not. .. code:: shell-session - pip3 install -r requirements.txt + sudo -Hu paperless pip3 install -r requirements.txt + + This will install all python dependencies in the home directory of + the new paperless user. - -8. Go to ``/opt/paperless/src``, and execute the following commands: +9. Go to ``/opt/paperless/src``, and execute the following commands: .. code:: bash # This creates the database schema. - python3 manage.py migrate + sudo -Hu paperless python3 manage.py migrate # This creates your first paperless user - python3 manage.py createsuperuser + sudo -Hu paperless python3 manage.py createsuperuser -9. Optional: Test that paperless is working by executing +10. Optional: Test that paperless is working by executing .. code:: bash # This collects static files from paperless and django. - python3 manage.py runserver + sudo -Hu paperless python3 manage.py runserver and pointing your browser to http://localhost:8000/. @@ -380,7 +388,7 @@ writing. Windows is not and will never be supported. This will not start the consumer. Paperless does this in a separate process. -10. Setup systemd services to run paperless automatically. You may +11. Setup systemd services to run paperless automatically. You may use the service definition files included in the ``scripts`` folder as a starting point. @@ -396,14 +404,7 @@ writing. Windows is not and will never be supported. These services rely on redis and optionally the database server, but don't need to be started in any particular order. The example files depend on redis being started. If you use a database server, you should - add additinal dependencies. - - .. hint:: - - You may optionally set up your preferred web server to serve - paperless as a wsgi application directly instead of running the - ``webserver`` service. The module containing the wsgi application - is named ``paperless.wsgi``. + add additional dependencies. .. caution:: @@ -412,10 +413,13 @@ writing. Windows is not and will never be supported. however, the documentation of GUnicorn states that you should use a proxy server in front of gunicorn instead. -11. Optional: Install a samba server and make the consumption folder + For instructions on how to use nginx for that, + :ref:`see the instructions below <setup-nginx>`. + +12. Optional: Install a samba server and make the consumption folder available as a network share. -12. Configure ImageMagick to allow processing of PDF documents. Most distributions have +13. Configure ImageMagick to allow processing of PDF documents. Most distributions have this disabled by default, since PDF documents can contain malware. If you don't do this, paperless will fall back to ghostscript for certain steps such as thumbnail generation. @@ -432,7 +436,7 @@ writing. Windows is not and will never be supported. <policy domain="coder" rights="read|write" pattern="PDF" /> -13. Optional: Install the `jbig2enc <https://ocrmypdf.readthedocs.io/en/latest/jbig2.html>`_ +14. Optional: Install the `jbig2enc <https://ocrmypdf.readthedocs.io/en/latest/jbig2.html>`_ encoder. This will reduce the size of generated PDF documents. You'll most likely need to compile this by yourself, because this software has been patented until around 2017 and binary packages are not available for most distributions. @@ -441,9 +445,10 @@ writing. Windows is not and will never be supported. Install Paperless using ansible =============================== - .. note:: - This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts. +.. note:: + + This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts. 1. Install ansible 2.7+ on the management node. This may be the target host paperless-ng is being installed on or any remote host which can access the target host. From a8355b6aae1ac462971bf65fd0e579715261fb0a Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 15:30:47 +0100 Subject: [PATCH 178/898] fix some logging messages --- src/documents/consumer.py | 4 ++-- src/documents/matching.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 23988c7c1..3baedb5c3 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -200,8 +200,6 @@ class Consumer(LoggingMixin): MESSAGE_UNSUPPORTED_TYPE, f"Unsupported mime type {mime_type}" ) - else: - self.log("debug", f"Parser: {parser_class.__name__}") # Notify all listeners that we're going to do some work. @@ -222,6 +220,8 @@ class Consumer(LoggingMixin): document_parser = parser_class(self.logging_group, progress_callback) + self.log("debug", f"Parser: {type(document_parser).__name__}") + # However, this already created working directories which we have to # clean up. diff --git a/src/documents/matching.py b/src/documents/matching.py index edbbdc1b8..3b70930b6 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -11,7 +11,7 @@ logger = logging.getLogger("paperless.matching") def log_reason(matching_model, document, reason): class_name = type(matching_model).__name__ logger.debug( - f"Assigning {class_name} {matching_model.name} to document " + f"{class_name} {matching_model.name} matched on document " f"{document} because {reason}") From 6c00a63015d87a04fe93a0bf0ef3a4c4167c01e2 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 16:59:04 +0100 Subject: [PATCH 179/898] separate mail logging --- src/paperless_mail/mail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 4a62ffd95..28a8a0784 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -102,7 +102,7 @@ def get_mailbox(server, port, security): class MailAccountHandler(LoggingMixin): - logging_name = "paperless.mail" + logging_name = "paperless_mail" def _correspondent_from_name(self, name): try: From 723c10771f83c15ac3b94a4c9257f4520bd41bd5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:00:06 +0100 Subject: [PATCH 180/898] remove log admin --- src/documents/admin.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/documents/admin.py b/src/documents/admin.py index 78437f91c..266422d51 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -116,22 +116,6 @@ class DocumentAdmin(admin.ModelAdmin): return format_html("<{} {}/>", kind, attributes) -class LogAdmin(admin.ModelAdmin): - - def has_add_permission(self, request): - return False - - def has_change_permission(self, request, obj=None): - return False - - list_display = ("created", "message", "level",) - list_filter = ("level", "created",) - - ordering = ('-created',) - - list_display_links = ("created", "message") - - class RuleInline(admin.TabularInline): model = SavedViewFilterRule @@ -149,5 +133,4 @@ admin.site.register(Correspondent, CorrespondentAdmin) admin.site.register(Tag, TagAdmin) admin.site.register(DocumentType, DocumentTypeAdmin) admin.site.register(Document, DocumentAdmin) -admin.site.register(Log, LogAdmin) admin.site.register(SavedView, SavedViewAdmin) From 1e1f2267e7b6c0dbc84a449c4edf4deec0bc7800 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:02:00 +0100 Subject: [PATCH 181/898] update API access for logs --- src/documents/serialisers.py | 13 ------ src/documents/tests/test_api.py | 24 +++++++++++ src/documents/tests/test_logger.py | 66 ------------------------------ src/documents/tests/utils.py | 4 ++ src/documents/views.py | 36 ++++++++++------ src/paperless/urls.py | 2 +- 6 files changed, 52 insertions(+), 93 deletions(-) delete mode 100644 src/documents/tests/test_logger.py diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index aa4ef4bf8..fb0962902 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -153,19 +153,6 @@ class DocumentSerializer(DynamicFieldsModelSerializer): ) -class LogSerializer(serializers.ModelSerializer): - - class Meta: - model = Log - fields = ( - "id", - "created", - "message", - "group", - "level" - ) - - class SavedViewFilterRuleSerializer(serializers.ModelSerializer): class Meta: diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 9e4b77189..54d2b292d 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -4,7 +4,9 @@ import shutil import tempfile from unittest import mock +from django.conf import settings from django.contrib.auth.models import User +from django.test import override_settings from rest_framework.test import APITestCase from whoosh.writing import AsyncWriter @@ -717,6 +719,28 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): v1 = SavedView.objects.get(id=v1.id) self.assertEqual(v1.filter_rules.count(), 0) + def test_get_logs(self): + response = self.client.get("/api/logs/") + self.assertEqual(response.status_code, 200) + self.assertCountEqual(response.data, ["mail", "paperless"]) + + def test_get_invalid_log(self): + response = self.client.get("/api/logs/bogus_log/") + self.assertEqual(response.status_code, 404) + + @override_settings(LOGGING_DIR="bogus_dir") + def test_get_nonexistent_log(self): + response = self.client.get("/api/logs/paperless/") + self.assertEqual(response.status_code, 404) + + def test_get_log(self): + log_data = "test\ntest2\n" + with open(os.path.join(settings.LOGGING_DIR, "paperless.log"), "w") as f: + f.write(log_data) + response = self.client.get("/api/logs/paperless/") + self.assertEqual(response.status_code, 200) + self.assertListEqual(response.data, ["test", "test2"]) + class TestBulkEdit(DirectoriesMixin, APITestCase): diff --git a/src/documents/tests/test_logger.py b/src/documents/tests/test_logger.py deleted file mode 100644 index bbc9c2b5d..000000000 --- a/src/documents/tests/test_logger.py +++ /dev/null @@ -1,66 +0,0 @@ -import logging -import uuid -from unittest import mock - -from django.test import TestCase, override_settings - -from ..models import Log - - -class TestPaperlessLog(TestCase): - - def __init__(self, *args, **kwargs): - TestCase.__init__(self, *args, **kwargs) - self.logger = logging.getLogger( - "documents.management.commands.document_consumer") - - @override_settings(DISABLE_DBHANDLER=False) - def test_that_it_saves_at_all(self): - - kw = {"group": uuid.uuid4()} - - self.assertEqual(Log.objects.all().count(), 0) - - with mock.patch("logging.StreamHandler.emit") as __: - - # Debug messages are ignored by default - self.logger.debug("This is a debugging message", extra=kw) - self.assertEqual(Log.objects.all().count(), 1) - - self.logger.info("This is an informational message", extra=kw) - self.assertEqual(Log.objects.all().count(), 2) - - self.logger.warning("This is an warning message", extra=kw) - self.assertEqual(Log.objects.all().count(), 3) - - self.logger.error("This is an error message", extra=kw) - self.assertEqual(Log.objects.all().count(), 4) - - self.logger.critical("This is a critical message", extra=kw) - self.assertEqual(Log.objects.all().count(), 5) - - @override_settings(DISABLE_DBHANDLER=False) - def test_groups(self): - - kw1 = {"group": uuid.uuid4()} - kw2 = {"group": uuid.uuid4()} - - self.assertEqual(Log.objects.all().count(), 0) - - with mock.patch("logging.StreamHandler.emit") as __: - - self.logger.info("This is an informational message", extra=kw2) - self.assertEqual(Log.objects.all().count(), 1) - self.assertEqual(Log.objects.filter(group=kw2["group"]).count(), 1) - - self.logger.warning("This is an warning message", extra=kw1) - self.assertEqual(Log.objects.all().count(), 2) - self.assertEqual(Log.objects.filter(group=kw1["group"]).count(), 1) - - self.logger.error("This is an error message", extra=kw2) - self.assertEqual(Log.objects.all().count(), 3) - self.assertEqual(Log.objects.filter(group=kw2["group"]).count(), 2) - - self.logger.critical("This is a critical message", extra=kw1) - self.assertEqual(Log.objects.all().count(), 4) - self.assertEqual(Log.objects.filter(group=kw1["group"]).count(), 2) diff --git a/src/documents/tests/utils.py b/src/documents/tests/utils.py index dfefc4061..ebf79f6c5 100644 --- a/src/documents/tests/utils.py +++ b/src/documents/tests/utils.py @@ -19,12 +19,15 @@ def setup_directories(): dirs.originals_dir = os.path.join(dirs.media_dir, "documents", "originals") dirs.thumbnail_dir = os.path.join(dirs.media_dir, "documents", "thumbnails") dirs.archive_dir = os.path.join(dirs.media_dir, "documents", "archive") + dirs.logging_dir = os.path.join(dirs.data_dir, "log") os.makedirs(dirs.index_dir, exist_ok=True) os.makedirs(dirs.originals_dir, exist_ok=True) os.makedirs(dirs.thumbnail_dir, exist_ok=True) os.makedirs(dirs.archive_dir, exist_ok=True) + os.makedirs(dirs.logging_dir, exist_ok=True) + dirs.settings_override = override_settings( DATA_DIR=dirs.data_dir, SCRATCH_DIR=dirs.scratch_dir, @@ -33,6 +36,7 @@ def setup_directories(): THUMBNAIL_DIR=dirs.thumbnail_dir, ARCHIVE_DIR=dirs.archive_dir, CONSUMPTION_DIR=dirs.consumption_dir, + LOGGING_DIR=dirs.logging_dir, INDEX_DIR=dirs.index_dir, MODEL_FILE=os.path.join(dirs.data_dir, "classification_model.pickle"), MEDIA_LOCK=os.path.join(dirs.media_dir, "media.lock") diff --git a/src/documents/views.py b/src/documents/views.py index e413d4b35..2443ae342 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -29,7 +29,7 @@ from rest_framework.views import APIView from rest_framework.viewsets import ( GenericViewSet, ModelViewSet, - ReadOnlyModelViewSet + ViewSet ) import documents.index as index @@ -40,16 +40,14 @@ from .filters import ( CorrespondentFilterSet, DocumentFilterSet, TagFilterSet, - DocumentTypeFilterSet, - LogFilterSet + DocumentTypeFilterSet ) from .matching import match_correspondents, match_tags, match_document_types -from .models import Correspondent, Document, Log, Tag, DocumentType, SavedView +from .models import Correspondent, Document, Tag, DocumentType, SavedView from .parsers import get_parser_class_for_mime_type from .serialisers import ( CorrespondentSerializer, DocumentSerializer, - LogSerializer, TagSerializer, DocumentTypeSerializer, PostDocumentSerializer, @@ -307,16 +305,28 @@ class DocumentViewSet(RetrieveModelMixin, raise Http404() -class LogViewSet(ReadOnlyModelViewSet): - model = Log +class LogViewSet(ViewSet): - queryset = Log.objects.all() - serializer_class = LogSerializer - pagination_class = StandardPagination permission_classes = (IsAuthenticated,) - filter_backends = (DjangoFilterBackend, OrderingFilter) - filterset_class = LogFilterSet - ordering_fields = ("created",) + + log_files = ["paperless", "mail"] + + def retrieve(self, request, pk=None, *args, **kwargs): + if not pk in self.log_files: + raise Http404() + + filename = os.path.join(settings.LOGGING_DIR, f"{pk}.log") + + if not os.path.isfile(filename): + raise Http404() + + with open(filename, "r") as f: + lines = [l.rstrip() for l in f.readlines()] + + return Response(lines) + + def list(self, request, *args, **kwargs): + return Response(self.log_files) class SavedViewViewSet(ModelViewSet): diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 5b58de454..40f4bd754 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -31,7 +31,7 @@ api_router = DefaultRouter() api_router.register(r"correspondents", CorrespondentViewSet) api_router.register(r"document_types", DocumentTypeViewSet) api_router.register(r"documents", DocumentViewSet) -api_router.register(r"logs", LogViewSet) +api_router.register(r"logs", LogViewSet, basename="logs") api_router.register(r"tags", TagViewSet) api_router.register(r"saved_views", SavedViewViewSet) From 9537218701de3fd515b6b7cb9f9e520fe7de7213 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:05:07 +0100 Subject: [PATCH 182/898] update logging config --- Pipfile | 1 + Pipfile.lock | 158 +++++++++++++------------------------- src/paperless/settings.py | 51 +++++++----- 3 files changed, 86 insertions(+), 124 deletions(-) diff --git a/Pipfile b/Pipfile index 293d71603..43b9afd3f 100644 --- a/Pipfile +++ b/Pipfile @@ -48,6 +48,7 @@ tika = "*" channels = "~=3.0" channels-redis = "*" uvicorn = {extras = ["standard"], version = "*"} +concurrent-log-handler = "*" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 78cfecf95..4da3d625d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "658e2907c680baea81e77da9081ee063ff843b185d02c95d6483b747f0acd84d" + "sha256": "70117fd0d9bc10ab46b05ec2c58b59ca0e52b32a3c3e4e130c83bcfb70b51d5f" }, "pipfile-spec": 6, "requires": {}, @@ -60,11 +60,11 @@ }, "autobahn": { "hashes": [ - "sha256:410a93e0e29882c8b5d5ab05d220b07609b886ef5f23c0b8d39153254ffd6895", - "sha256:52ee4236ff9a1fcbbd9500439dcf3284284b37f8a6b31ecc8a36e00cf9f95049" + "sha256:93df8fc9d1821c9dabff9fed52181a9ad6eea5e9989d53102c391607d7c1666e", + "sha256:cceed2121b7a93024daa93c91fae33007f8346f0e522796421f36a6183abea99" ], "markers": "python_version >= '3.6'", - "version": "==20.12.3" + "version": "==21.1.1" }, "automat": { "hashes": [ @@ -173,6 +173,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==15.0" }, + "concurrent-log-handler": { + "hashes": [ + "sha256:00d5ca24d463a7013c3479b026f34b76da4b50df8d76194132b8d8403c014379", + "sha256:b12f79abed3f94121c25ce9c24cdb57d889282ec6ff61f5535ab2068dc37d409" + ], + "index": "pypi", + "version": "==0.9.19" + }, "constantly": { "hashes": [ "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", @@ -420,14 +428,6 @@ ], "version": "==0.4.0" }, - "importlib-metadata": { - "hashes": [ - "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", - "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" - ], - "markers": "python_version < '3.8'", - "version": "==3.4.0" - }, "incremental": { "hashes": [ "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", @@ -550,44 +550,34 @@ }, "numpy": { "hashes": [ - "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94", - "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080", - "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e", - "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c", - "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76", - "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371", - "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c", - "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2", - "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a", - "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb", - "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140", - "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28", - "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f", - "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d", - "sha256:6373751c4b6fd325606d29dd98dc2bf7092485ad20aafbfc6a177acd3b89059e", - "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff", - "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8", - "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa", - "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea", - "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc", - "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73", - "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d", - "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d", - "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4", - "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c", - "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e", - "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea", - "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd", - "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f", - "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff", - "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e", - "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7", - "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa", - "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827", - "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60" + "sha256:0d28a54afcf46f1f9ebd163e49ad6b49087f22986fefd01a23ca0c1cdda25ca6", + "sha256:1264c66129f5ef63187649dd43f1ca59532e8c098723643336a85131c0dcce3f", + "sha256:1abc02e30e3efd81a4571e00f8e62bf42e343c76698e0a3e11d9c2b3ee0d77a7", + "sha256:2445a96fbae23a4109c61be0f0af0f3bc273905dc5687a710850c1dfde0fc994", + "sha256:2bf0e68c92ef077fe766e53f8937d8ac341bdbca68ec128ae049b7d5c34e3206", + "sha256:33edfc0eb229f86f539493917b34035054313a11afbed48404aaf9f86bf4b0f6", + "sha256:3d8233c03f116d068d5365fed4477f2947c7229582dad81e5953088989294cec", + "sha256:4d592264d2a4f368afbb4288b5ceb646d4cbaf559c0249c096fbb0a149806b90", + "sha256:5ae765dd29c71a555f8102281f6fb15a3f4dbd35f6e7daf36af9df6d9dd716a5", + "sha256:894aaee60043a98b03f0ad992c810f62e3a15f98a701e1c0f58a4f4a0df13429", + "sha256:89bd70c9ad540febe6c28451ba225eb4e49d27f64728357f512c808002325dfa", + "sha256:93c2abea7bb69f47029b84ceac30ab46dfcfdb99b671ad850a333ff794a765e4", + "sha256:abdfa075e293d73638ece434708aa60b510dc6e70d805f57f481a0f550b25a9e", + "sha256:afeee581b50df20ef07b736e62ca612858f1fcdba96651d26ab44e3d567a4e6e", + "sha256:b51b9ef0624f4b01b846c981034c10d2e30db33f9f8be71e992f3900741f6f77", + "sha256:b66a6c15d793eda7cdad986e737775aa31b9306d588c14dd0277d2dda5546150", + "sha256:bd08254aac78b363b14acac456038ce6438bad848e02b275837930115e41ea21", + "sha256:cb257bb0c0a3176c32782a63cfab2eace7eabfa2a3b2dfd85a13700617ccaf28", + "sha256:cf5d9dcbdbe523fa665c5309cce5f144648d94a7fddbf5a40f8e0d5c9f5b596d", + "sha256:d1bc331e1706fd1809a1bc8a31205329e5b30cf5ba50461c624da267e99f6ae6", + "sha256:db5e69d08756a2fa75a42b4e433880b6187768fe1bc73d21819def893e5128c6", + "sha256:e3db646af9f6a145f0c57202f4b55d4a33f975e395e78fb7b394644c17c1a3a6", + "sha256:e9c5fd330d2fedf06051bafb996252de9b032fcb2ec03eefc9a543e56efa66d4", + "sha256:eee454d3aa3955d0c0069a0f265fea47f1e1384c35a110a95efed358eb6e1562", + "sha256:f1e9424e9aa3834ea27cc12f9c6ea8ace5da18ee60a720bb3a85b2f733f41782" ], - "markers": "python_version >= '3.6'", - "version": "==1.19.5" + "markers": "python_version >= '3.7'", + "version": "==1.20.0" }, "ocrmypdf": { "hashes": [ @@ -696,6 +686,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.13.1" }, + "portalocker": { + "hashes": [ + "sha256:afa66c85041d7bac1532acb74ff26cc2406472dcf7145c90c31ff8ca4f1cc146", + "sha256:e5f6ffb2f360e9aef615a7c284143d2a93bb640c62e8e45a703e6083fc5aa114" + ], + "markers": "python_version >= '3'", + "version": "==2.2.1" + }, "psycopg2-binary": { "hashes": [ "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c", @@ -1144,15 +1142,6 @@ "markers": "python_version >= '3.6'", "version": "==20.12.1" }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" - ], - "markers": "python_version < '3.8'", - "version": "==3.7.4.3" - }, "tzlocal": { "hashes": [ "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", @@ -1278,14 +1267,6 @@ "index": "pypi", "version": "==2.7.4" }, - "zipp": { - "hashes": [ - "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", - "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" - ], - "markers": "python_version >= '3.6'", - "version": "==3.4.0" - }, "zope.interface": { "hashes": [ "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", @@ -1506,11 +1487,11 @@ }, "faker": { "hashes": [ - "sha256:0783729c61501d52efea2967aff6e6fcb8370f0f6b5a558f2a81233642ae529a", - "sha256:6b2995ffff6c2b02bc5daad96f8c24c021e5bd491d9d53d31bcbd66f348181d4" + "sha256:190f0d3ce037866b5d230f0b9fd0f513f07c25dc326dcad6ee019849c68d441c", + "sha256:db7adc3b4755005fc960cf96fb4ed46b54b6eb21413741ab3f31a9595f379905" ], "markers": "python_version >= '3.6'", - "version": "==5.8.0" + "version": "==6.0.0" }, "filelock": { "hashes": [ @@ -1537,22 +1518,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.0" }, - "importlib-metadata": { - "hashes": [ - "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771", - "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d" - ], - "markers": "python_version < '3.8'", - "version": "==3.4.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:885b8eae589179f661c909d699a546cf10d83692553e34dca1bf5eb06f7f6217", - "sha256:bfdad047bce441405a49cf8eb48ddce5e56c696e185f59147a8b79e75e9e6380" - ], - "markers": "python_version < '3.7'", - "version": "==5.1.0" - }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -1861,20 +1826,11 @@ }, "tox": { "hashes": [ - "sha256:76df3db6eee929bb62bdbacca5bb6bc840669d98e86a015b7a57b7df0a6eaf8b", - "sha256:854e6e4a71c614b488f81cb88df3b92edcb1a9ec43d4102e6289e9669bbf7f18" + "sha256:65d0e90ceb816638a50d64f4b47b11da767b284c0addda2294cb3cd69bd72425", + "sha256:cf7fef81a3a2434df4d7af2a6d1bf606d2970220addfbe7dea2615bd4bb2c252" ], "index": "pypi", - "version": "==3.21.3" - }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" - ], - "markers": "python_version < '3.8'", - "version": "==3.7.4.3" + "version": "==3.21.4" }, "urllib3": { "hashes": [ @@ -1891,14 +1847,6 @@ ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==20.4.2" - }, - "zipp": { - "hashes": [ - "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108", - "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb" - ], - "markers": "python_version >= '3.6'", - "version": "==3.4.0" } } } diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 5a3c206ed..d518249c6 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -4,6 +4,7 @@ import multiprocessing import os import re +from concurrent_log_handler.queue import setup_logging_queues from dotenv import load_dotenv from django.utils.translation import gettext_lazy as _ @@ -62,6 +63,8 @@ MEDIA_LOCK = os.path.join(MEDIA_ROOT, "media.lock") INDEX_DIR = os.path.join(DATA_DIR, "index") MODEL_FILE = os.path.join(DATA_DIR, "classification_model.pickle") +LOGGING_DIR = os.getenv('PAPERLESS_LOGGING_DIR', os.path.join(DATA_DIR, "log")) + CONSUMPTION_DIR = os.getenv("PAPERLESS_CONSUMPTION_DIR", os.path.join(BASE_DIR, "..", "consume")) # This will be created if it doesn't exist @@ -306,14 +309,19 @@ USE_TZ = True # Logging # ############################################################################### -DISABLE_DBHANDLER = __get_boolean("PAPERLESS_DISABLE_DBHANDLER") +setup_logging_queues() + +os.makedirs(LOGGING_DIR, exist_ok=True) + +LOGROTATE_MAX_SIZE = os.getenv("PAPERLESS_LOGROTATE_MAX_SIZE", 1000000) +LOGROTATE_MAX_BACKUPS = os.getenv("PAPERLESS_LOGROTATE_MAX_BACKUPS", 20) LOGGING = { "version": 1, "disable_existing_loggers": False, 'formatters': { 'verbose': { - 'format': '{levelname} {asctime} {module} {message}', + 'format': '[{asctime}] [{levelname}] [{name}] {message}', 'style': '{', }, 'simple': { @@ -322,34 +330,39 @@ LOGGING = { }, }, "handlers": { - "db": { - "level": "DEBUG", - "class": "documents.loggers.PaperlessHandler", - }, "console": { "level": "DEBUG" if DEBUG else "INFO", "class": "logging.StreamHandler", "formatter": "verbose", + }, + "file_paperless": { + "class": "concurrent_log_handler.ConcurrentRotatingFileHandler", + "formatter": "verbose", + "filename": os.path.join(LOGGING_DIR, "paperless.log"), + "maxBytes": LOGROTATE_MAX_SIZE, + "backupCount": LOGROTATE_MAX_BACKUPS + }, + "file_mail": { + "class": "concurrent_log_handler.ConcurrentRotatingFileHandler", + "formatter": "verbose", + "filename": os.path.join(LOGGING_DIR, "mail.log"), + "maxBytes": LOGROTATE_MAX_SIZE, + "backupCount": LOGROTATE_MAX_BACKUPS } }, "root": { - "handlers": ["console"], - "level": "DEBUG", + "handlers": ["console"] }, "loggers": { - "documents": { - "handlers": ["db"], - "propagate": True, + "paperless": { + "handlers": ["file_paperless"], + "level": "DEBUG" }, "paperless_mail": { - "handlers": ["db"], - "propagate": True, - }, - "paperless_tesseract": { - "handlers": ["db"], - "propagate": True, - }, - }, + "handlers": ["file_mail"], + "level": "DEBUG" + } + } } ############################################################################### From 46efc14a9d74bbab51958d3f439723618399dbc6 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:07:25 +0100 Subject: [PATCH 183/898] rework of the log viewer --- .../manage/logs/logs.component.html | 33 ++++------- .../manage/logs/logs.component.scss | 8 +++ .../components/manage/logs/logs.component.ts | 57 ++++++++++--------- src-ui/src/app/data/paperless-log.ts | 27 --------- src-ui/src/app/services/rest/log.service.ts | 17 ++++-- 5 files changed, 62 insertions(+), 80 deletions(-) delete mode 100644 src-ui/src/app/data/paperless-log.ts diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index be14faf1d..8a2a28ef8 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -1,27 +1,18 @@ <app-page-header title="Logs" i18n-title> - <div ngbDropdown class="btn-group"> - <button class="btn btn-outline-primary btn-sm" id="dropdownBasic1" ngbDropdownToggle> - <svg class="toolbaricon" fill="currentColor"> - <use xlink:href="assets/bootstrap-icons.svg#funnel" /> - </svg> <ng-container i18n>Filter</ng-container> - - - </button> - <div ngbDropdownMenu aria-labelledby="dropdownBasic1"> - <button *ngFor="let f of getLevels()" ngbDropdownItem (click)="setLevel(f.id)" - [class.active]="level == f.id">{{f.name}}</button> - </div> - </div> - </app-page-header> -<div class="bg-dark p-3 mb-3 text-light text-monospace" infiniteScroll (scrolled)="onScroll()"> + +<ul ngbNav #nav="ngbNav" [(activeId)]="activeLog" (activeIdChange)="reloadLogs()" class="nav-tabs"> + <li *ngFor="let logFile of logFiles" [ngbNavItem]="logFile"> + <a ngbNavLink>{{logFile}}.log</a> + </li> +</ul> + +<div [ngbNavOutlet]="nav" class="mt-2"></div> + +<div #logContainer class="bg-dark p-3 mb-3 text-light text-monospace log-container"> <p - class="m-0 p-0 log-entry-{{log.level}}" - *ngFor="let log of logs"> - {{log.created | customDate:'short'}} - {{getLevelText(log.level)}} - {{log.message}} - </p> + class="m-0 p-0 log-entry-{{getLogLevel(log)}}" + *ngFor="let log of logs" style="white-space: pre;">{{log}}</p> </div> diff --git a/src-ui/src/app/components/manage/logs/logs.component.scss b/src-ui/src/app/components/manage/logs/logs.component.scss index dee9b10dc..a99506c12 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.scss +++ b/src-ui/src/app/components/manage/logs/logs.component.scss @@ -13,4 +13,12 @@ .log-entry-50 { color: lightcoral !important; font-weight: bold; +} + +.log-container { + + overflow: scroll; + + height: calc(100vh - 190px); + top: 70px; } \ No newline at end of file diff --git a/src-ui/src/app/components/manage/logs/logs.component.ts b/src-ui/src/app/components/manage/logs/logs.component.ts index b131796ee..0754e4253 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.ts +++ b/src-ui/src/app/components/manage/logs/logs.component.ts @@ -1,5 +1,4 @@ -import { Component, OnInit } from '@angular/core'; -import { LOG_LEVELS, LOG_LEVEL_INFO, PaperlessLog } from 'src/app/data/paperless-log'; +import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { LogService } from 'src/app/services/rest/log.service'; @Component({ @@ -11,38 +10,42 @@ export class LogsComponent implements OnInit { constructor(private logService: LogService) { } - logs: PaperlessLog[] = [] - level: number = LOG_LEVEL_INFO + @ViewChild('logContainer') private logContainer: ElementRef + + logs: string[] = [] + + logFiles: string[] = [] + + activeLog: string ngOnInit(): void { - this.reload() - } - - reload() { - this.logService.list(1, 50, 'created', true, {'level__gte': this.level}).subscribe(result => this.logs = result.results) - } - - getLevelText(level: number) { - return LOG_LEVELS.find(l => l.id == level)?.name - } - - onScroll() { - let lastCreated = null - if (this.logs.length > 0) { - lastCreated = new Date(this.logs[this.logs.length-1].created).toISOString() - } - this.logService.list(1, 25, 'created', true, {'created__lt': lastCreated, 'level__gte': this.level}).subscribe(result => { - this.logs.push(...result.results) + this.logService.list().subscribe(result => { + this.logFiles = result + if (this.logFiles.length > 0) { + this.activeLog = this.logFiles[0] + this.reloadLogs() + } }) } - getLevels() { - return LOG_LEVELS + reloadLogs() { + this.logService.get(this.activeLog).subscribe(result => { + this.logs = result + }) } - setLevel(id) { - this.level = id - this.reload() + getLogLevel(log: string) { + if (log.indexOf("[DEBUG]") != -1) { + return 10 + } else if (log.indexOf("[WARNING]") != -1) { + return 30 + } else if (log.indexOf("[ERROR]") != -1) { + return 40 + } else if (log.indexOf("[CRITICAL]") != -1) { + return 50 + } else { + return 20 + } } } diff --git a/src-ui/src/app/data/paperless-log.ts b/src-ui/src/app/data/paperless-log.ts deleted file mode 100644 index 61a6fce99..000000000 --- a/src-ui/src/app/data/paperless-log.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const LOG_LEVEL_DEBUG = 10 -export const LOG_LEVEL_INFO = 20 -export const LOG_LEVEL_WARNING = 30 -export const LOG_LEVEL_ERROR = 40 -export const LOG_LEVEL_CRITICAL = 50 - -export const LOG_LEVELS = [ - {id: LOG_LEVEL_DEBUG, name: "DEBUG"}, - {id: LOG_LEVEL_INFO, name: "INFO"}, - {id: LOG_LEVEL_WARNING, name: "WARNING"}, - {id: LOG_LEVEL_ERROR, name: "ERROR"}, - {id: LOG_LEVEL_CRITICAL, name: "CRITICAL"} -] - -export interface PaperlessLog { - - id?: number - - group?: string - - message?: string - - created?: Date - - level?: number - -} diff --git a/src-ui/src/app/services/rest/log.service.ts b/src-ui/src/app/services/rest/log.service.ts index 797d9b6b9..3abf2fb6f 100644 --- a/src-ui/src/app/services/rest/log.service.ts +++ b/src-ui/src/app/services/rest/log.service.ts @@ -1,14 +1,21 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { PaperlessLog } from 'src/app/data/paperless-log'; -import { AbstractPaperlessService } from './abstract-paperless-service'; +import { Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; @Injectable({ providedIn: 'root' }) -export class LogService extends AbstractPaperlessService<PaperlessLog> { +export class LogService { - constructor(http: HttpClient) { - super(http, 'logs') + constructor(private http: HttpClient) { + } + + list(): Observable<string[]> { + return this.http.get<string[]>(`${environment.apiBaseUrl}logs/`) + } + + get(id: string): Observable<string[]> { + return this.http.get<string[]>(`${environment.apiBaseUrl}logs/${id}/`) } } From 7195edf5e4229291b37d34d44c793c1b8234b58b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:21:32 +0100 Subject: [PATCH 184/898] pycodestyle --- src/documents/loggers.py | 5 ++++- src/documents/views.py | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/documents/loggers.py b/src/documents/loggers.py index 4b0f03552..90f6770e0 100644 --- a/src/documents/loggers.py +++ b/src/documents/loggers.py @@ -17,7 +17,10 @@ class LoggingMixin: if self.logging_name: logger = logging.getLogger(self.logging_name) else: - name = ".".join([self.__class__.__module__, self.__class__.__name__]) + name = ".".join([ + self.__class__.__module__, + self.__class__.__name__ + ]) logger = logging.getLogger(name) getattr(logger, level)(message, extra={ diff --git a/src/documents/views.py b/src/documents/views.py index 2443ae342..5ab4ca9df 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -312,7 +312,7 @@ class LogViewSet(ViewSet): log_files = ["paperless", "mail"] def retrieve(self, request, pk=None, *args, **kwargs): - if not pk in self.log_files: + if pk not in self.log_files: raise Http404() filename = os.path.join(settings.LOGGING_DIR, f"{pk}.log") @@ -321,7 +321,7 @@ class LogViewSet(ViewSet): raise Http404() with open(filename, "r") as f: - lines = [l.rstrip() for l in f.readlines()] + lines = [line.rstrip() for line in f.readlines()] return Response(lines) From 6a6b20e5fb9e190bc6bfc0cbd952b0e31ea13dc8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:21:40 +0100 Subject: [PATCH 185/898] default settings --- src/paperless/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index d518249c6..718738f71 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -313,7 +313,7 @@ setup_logging_queues() os.makedirs(LOGGING_DIR, exist_ok=True) -LOGROTATE_MAX_SIZE = os.getenv("PAPERLESS_LOGROTATE_MAX_SIZE", 1000000) +LOGROTATE_MAX_SIZE = os.getenv("PAPERLESS_LOGROTATE_MAX_SIZE", 1024*1024) LOGROTATE_MAX_BACKUPS = os.getenv("PAPERLESS_LOGROTATE_MAX_BACKUPS", 20) LOGGING = { From a73683dfd49c2f9bda913bded4f6e04f5eb25162 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:22:05 +0100 Subject: [PATCH 186/898] documentation --- docs/changelog.rst | 7 +++++++ docs/configuration.rst | 27 +++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2b9821408..537e898c7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -58,6 +58,13 @@ paperless-ng 1.1.0 * Better info section in the side bar. + * Paperless no longer logs to the database. Instead, logs are written to rotating log files. This solves many "database is locked" + issues on Raspberry Pi, especially when SQLite is used. + + * By default, log files are written to ``PAPERLESS_DATA_DIR/log/``. Logging settings can be adjusted with + ``PAPERLESS_LOGGING_DIR``, ``PAPERLESS_LOGROTATE_MAX_SIZE`` and + ``PAPERLESS_LOGROTATE_MAX_BACKUPS``. + paperless-ng 1.0.0 ################## diff --git a/docs/configuration.rst b/docs/configuration.rst index 36b124350..a307cc25a 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -72,13 +72,13 @@ PAPERLESS_CONSUMPTION_DIR=<path> container. Change the local consumption directory in the docker-compose.yml file instead. - Defaults to "../consume", relative to the "src" directory. + Defaults to "../consume/", relative to the "src" directory. PAPERLESS_DATA_DIR=<path> This is where paperless stores all its data (search index, SQLite database, classification model, etc). - Defaults to "../data", relative to the "src" directory. + Defaults to "../data/", relative to the "src" directory. PAPERLESS_MEDIA_ROOT=<path> This is where your documents and thumbnails are stored. @@ -86,7 +86,7 @@ PAPERLESS_MEDIA_ROOT=<path> You can set this and PAPERLESS_DATA_DIR to the same folder to have paperless store all its data within the same volume. - Defaults to "../media", relative to the "src" directory. + Defaults to "../media/", relative to the "src" directory. PAPERLESS_STATICDIR=<path> Override the default STATIC_ROOT here. This is where all static files @@ -94,7 +94,7 @@ PAPERLESS_STATICDIR=<path> Unless you're doing something fancy, there is no need to override this. - Defaults to "../static", relative to the "src" directory. + Defaults to "../static/", relative to the "src" directory. PAPERLESS_FILENAME_FORMAT=<format> Changes the filenames paperless uses to store documents in the media directory. @@ -102,6 +102,25 @@ PAPERLESS_FILENAME_FORMAT=<format> Default is none, which disables this feature. +PAPERLESS_LOGGING_DIR=<path> + This is where paperless will store log files. + + Defaults to "``PAPERLESS_DATA_DIR``/log/". + + +Logging +####### + +PAPERLESS_LOGROTATE_MAX_SIZE=<num> + Maximum file size for log files before they are rotated, in bytes. + + Defaults to 1 MiB. + +PAPERLESS_LOGROTATE_MAX_BACKUPS=<num> + Number of rotated log files to keep. + + Defaults to 20. + Hosting & Security ################## From 207eee7219eed53eccec4be790fc64a32daa0b04 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:36:31 +0100 Subject: [PATCH 187/898] keep numpy below 1.20, since that breaks python 3.6 --- Pipfile | 2 ++ Pipfile.lock | 66 ++++++++++++++++++++++++++++++---------------------- 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/Pipfile b/Pipfile index 43b9afd3f..504b267c4 100644 --- a/Pipfile +++ b/Pipfile @@ -21,6 +21,8 @@ fuzzywuzzy = {extras = ["speedup"], version = "*"} gunicorn = "*" imap-tools = "*" langdetect = "*" +# numpy 1.20.0 drops python 3.6 support +numpy = "~=1.19.5" pdftotext = "*" pathvalidate = "*" # pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202 diff --git a/Pipfile.lock b/Pipfile.lock index 4da3d625d..fafec4310 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "70117fd0d9bc10ab46b05ec2c58b59ca0e52b32a3c3e4e130c83bcfb70b51d5f" + "sha256": "aec5aa96fc4cad6d06f00d0ada0f8bd193f42874f476d39e76fc69d05c78f9f6" }, "pipfile-spec": 6, "requires": {}, @@ -550,34 +550,44 @@ }, "numpy": { "hashes": [ - "sha256:0d28a54afcf46f1f9ebd163e49ad6b49087f22986fefd01a23ca0c1cdda25ca6", - "sha256:1264c66129f5ef63187649dd43f1ca59532e8c098723643336a85131c0dcce3f", - "sha256:1abc02e30e3efd81a4571e00f8e62bf42e343c76698e0a3e11d9c2b3ee0d77a7", - "sha256:2445a96fbae23a4109c61be0f0af0f3bc273905dc5687a710850c1dfde0fc994", - "sha256:2bf0e68c92ef077fe766e53f8937d8ac341bdbca68ec128ae049b7d5c34e3206", - "sha256:33edfc0eb229f86f539493917b34035054313a11afbed48404aaf9f86bf4b0f6", - "sha256:3d8233c03f116d068d5365fed4477f2947c7229582dad81e5953088989294cec", - "sha256:4d592264d2a4f368afbb4288b5ceb646d4cbaf559c0249c096fbb0a149806b90", - "sha256:5ae765dd29c71a555f8102281f6fb15a3f4dbd35f6e7daf36af9df6d9dd716a5", - "sha256:894aaee60043a98b03f0ad992c810f62e3a15f98a701e1c0f58a4f4a0df13429", - "sha256:89bd70c9ad540febe6c28451ba225eb4e49d27f64728357f512c808002325dfa", - "sha256:93c2abea7bb69f47029b84ceac30ab46dfcfdb99b671ad850a333ff794a765e4", - "sha256:abdfa075e293d73638ece434708aa60b510dc6e70d805f57f481a0f550b25a9e", - "sha256:afeee581b50df20ef07b736e62ca612858f1fcdba96651d26ab44e3d567a4e6e", - "sha256:b51b9ef0624f4b01b846c981034c10d2e30db33f9f8be71e992f3900741f6f77", - "sha256:b66a6c15d793eda7cdad986e737775aa31b9306d588c14dd0277d2dda5546150", - "sha256:bd08254aac78b363b14acac456038ce6438bad848e02b275837930115e41ea21", - "sha256:cb257bb0c0a3176c32782a63cfab2eace7eabfa2a3b2dfd85a13700617ccaf28", - "sha256:cf5d9dcbdbe523fa665c5309cce5f144648d94a7fddbf5a40f8e0d5c9f5b596d", - "sha256:d1bc331e1706fd1809a1bc8a31205329e5b30cf5ba50461c624da267e99f6ae6", - "sha256:db5e69d08756a2fa75a42b4e433880b6187768fe1bc73d21819def893e5128c6", - "sha256:e3db646af9f6a145f0c57202f4b55d4a33f975e395e78fb7b394644c17c1a3a6", - "sha256:e9c5fd330d2fedf06051bafb996252de9b032fcb2ec03eefc9a543e56efa66d4", - "sha256:eee454d3aa3955d0c0069a0f265fea47f1e1384c35a110a95efed358eb6e1562", - "sha256:f1e9424e9aa3834ea27cc12f9c6ea8ace5da18ee60a720bb3a85b2f733f41782" + "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94", + "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080", + "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e", + "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c", + "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76", + "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371", + "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c", + "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2", + "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a", + "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb", + "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140", + "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28", + "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f", + "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d", + "sha256:6373751c4b6fd325606d29dd98dc2bf7092485ad20aafbfc6a177acd3b89059e", + "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff", + "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8", + "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa", + "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea", + "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc", + "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73", + "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d", + "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d", + "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4", + "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c", + "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e", + "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea", + "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd", + "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f", + "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff", + "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e", + "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7", + "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa", + "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827", + "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60" ], - "markers": "python_version >= '3.7'", - "version": "==1.20.0" + "index": "pypi", + "version": "==1.19.5" }, "ocrmypdf": { "hashes": [ From dfb80f1540689c79ffaa42ea6a4aa8d2f13685fb Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 17:37:47 +0100 Subject: [PATCH 188/898] update requirements.txt --- requirements.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index e1b76a4a0..7986f92fe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ arrow==0.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, asgiref==3.3.1; python_version >= '3.5' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -autobahn==20.12.3; python_version >= '3.6' +autobahn==21.1.1; python_version >= '3.6' automat==20.2.0 blessed==1.17.12 certifi==2020.12.5 @@ -22,6 +22,7 @@ channels==3.0.3 chardet==4.0.0; python_version >= '3.1' click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +concurrent-log-handler==0.9.19 constantly==15.1.0 cryptography==3.3.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' daphne==3.0.1; python_version >= '3.6' @@ -44,7 +45,6 @@ hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' imap-tools==0.37.0 img2pdf==0.4.0 -importlib-metadata==3.4.0; python_version < '3.8' incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 @@ -52,7 +52,7 @@ joblib==1.0.0; python_version >= '3.6' langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 -numpy==1.19.5; python_version >= '3.6' +numpy==1.19.5 ocrmypdf==11.6.0 pathvalidate==2.3.2 pdfminer.six==20201018; python_version >= '3.4' @@ -60,6 +60,7 @@ pdftotext==2.1.5 pikepdf==2.5.2 pillow==8.1.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +portalocker==2.2.1; python_version >= '3' psycopg2-binary==2.8.6 pyasn1-modules==0.2.8 pyasn1==0.4.8 @@ -88,7 +89,6 @@ tika==1.24 tqdm==4.56.0 twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' txaio==20.12.1; python_version >= '3.6' -typing-extensions==3.7.4.3; python_version < '3.8' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.3 @@ -99,5 +99,4 @@ wcwidth==0.2.5 websockets==8.1 whitenoise==5.2.0 whoosh==2.7.4 -zipp==3.4.0; python_version >= '3.6' zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From 252346aa7a2f5bf1b285d2cf4b8bc264573f0b6d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 18:51:31 +0100 Subject: [PATCH 189/898] fix log viewer for empty logs --- src-ui/src/app/components/manage/logs/logs.component.html | 2 +- src-ui/src/app/components/manage/logs/logs.component.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index 8a2a28ef8..56ffd25bb 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -11,7 +11,7 @@ <div [ngbNavOutlet]="nav" class="mt-2"></div> -<div #logContainer class="bg-dark p-3 mb-3 text-light text-monospace log-container"> +<div class="bg-dark p-3 mb-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" *ngFor="let log of logs" style="white-space: pre;">{{log}}</p> diff --git a/src-ui/src/app/components/manage/logs/logs.component.ts b/src-ui/src/app/components/manage/logs/logs.component.ts index 0754e4253..d77fcde4a 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.ts +++ b/src-ui/src/app/components/manage/logs/logs.component.ts @@ -10,8 +10,6 @@ export class LogsComponent implements OnInit { constructor(private logService: LogService) { } - @ViewChild('logContainer') private logContainer: ElementRef - logs: string[] = [] logFiles: string[] = [] @@ -31,6 +29,8 @@ export class LogsComponent implements OnInit { reloadLogs() { this.logService.get(this.activeLog).subscribe(result => { this.logs = result + }, error => { + this.logs = [] }) } From edb58727c099a53eabda6518b2cdb12f796c2698 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 18:51:53 +0100 Subject: [PATCH 190/898] increase worker timeout --- gunicorn.conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gunicorn.conf.py b/gunicorn.conf.py index f80be548d..6fcbe6b0e 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -1,7 +1,7 @@ bind = '0.0.0.0:8000' workers = 2 worker_class = 'uvicorn.workers.UvicornWorker' -timeout = 60 +timeout = 120 def pre_fork(server, worker): pass From 42d68eb414663d4e3dbad44d53a9562645b11888 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 20:48:23 +0100 Subject: [PATCH 191/898] update copyright #506 --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index b2442ddc9..71abe2079 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -28,7 +28,7 @@ master_doc = 'index' # General information about the project. project = u'Paperless-ng' -copyright = u'2015, Daniel Quinn' +copyright = u'2021, Daniel Quinn, Jonas Winkler' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From a6f53e6dc3ac159b8a1368a447538012f2d922e1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 20:51:04 +0100 Subject: [PATCH 192/898] caching --- Pipfile | 1 + Pipfile.lock | 11 ++++++++++- src/paperless/settings.py | 12 +++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Pipfile b/Pipfile index 504b267c4..7fcf3de26 100644 --- a/Pipfile +++ b/Pipfile @@ -51,6 +51,7 @@ channels = "~=3.0" channels-redis = "*" uvicorn = {extras = ["standard"], version = "*"} concurrent-log-handler = "*" +django-redis = "*" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index fafec4310..c3d57fc7d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "aec5aa96fc4cad6d06f00d0ada0f8bd193f42874f476d39e76fc69d05c78f9f6" + "sha256": "0c2003b9d3d95d1af594f749a2740b55079551ea0ae512177ee9524bb327281e" }, "pipfile-spec": 6, "requires": {}, @@ -273,6 +273,15 @@ "index": "pypi", "version": "==1.3.4" }, + "django-redis": { + "hashes": [ + "sha256:1133b26b75baa3664164c3f44b9d5d133d1b8de45d94d79f38d1adc5b1d502e5", + "sha256:306589c7021e6468b2656edc89f62b8ba67e8d5a1c8877e2688042263daa7a63", + "sha256:f2b25b62cc95b63b7059aaf8e81710e7eea94678e545d31c46e47a6f4af99e56" + ], + "index": "pypi", + "version": "==4.12.1" + }, "djangorestframework": { "hashes": [ "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7", diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 718738f71..60e7b45bd 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -169,6 +169,16 @@ CHANNEL_LAYERS = { }, } +CACHES = { + "default": { + "BACKEND": "django_redis.cache.RedisCache", + "LOCATION": os.getenv("PAPERLESS_REDIS", "redis://localhost:6379"), + "OPTIONS": { + "CLIENT_CLASS": "django_redis.client.DefaultClient", + } + } +} + ############################################################################### # Security # ############################################################################### @@ -398,7 +408,7 @@ Q_CLUSTER = { 'name': 'paperless', 'catch_up': False, 'workers': TASK_WORKERS, - 'redis': os.getenv("PAPERLESS_REDIS", "redis://localhost:6379") + 'django_redis': 'default' } From a4c1252a3bccddee3e078c4f6c4f570ca792b5d1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 20:54:58 +0100 Subject: [PATCH 193/898] classifier caching --- src/documents/classifier.py | 76 ++++++++++++-------------- src/documents/tasks.py | 2 +- src/documents/tests/test_classifier.py | 63 ++++++++++----------- src/documents/tests/test_tasks.py | 3 +- 4 files changed, 68 insertions(+), 76 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 2acebe04a..5151d453c 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -5,6 +5,7 @@ import pickle import re from django.conf import settings +from django.core.cache import cache from documents.models import Document, MatchingModel @@ -30,22 +31,28 @@ def load_classifier(): ) return None - try: + version = os.stat(settings.MODEL_FILE).st_mtime + + classifier = cache.get("paperless-classifier", version=version) + + if not classifier: classifier = DocumentClassifier() - classifier.reload() - except (EOFError, IncompatibleClassifierVersionError) as e: - # there's something wrong with the model file. - logger.error( - f"Unrecoverable error while loading document " - f"classification model: {str(e)}, deleting model file." - ) - os.unlink(settings.MODEL_FILE) - classifier = None - except OSError as e: - logger.error( - f"Error while loading document classification model: {str(e)}" - ) - classifier = None + try: + classifier.load() + cache.set("paperless-classifier", classifier, version=version) + except (EOFError, IncompatibleClassifierVersionError) as e: + # there's something wrong with the model file. + logger.error( + f"Unrecoverable error while loading document " + f"classification model: {str(e)}, deleting model file." + ) + os.unlink(settings.MODEL_FILE) + classifier = None + except OSError as e: + logger.error( + f"Error while loading document classification model: {str(e)}" + ) + classifier = None return classifier @@ -55,10 +62,6 @@ class DocumentClassifier(object): FORMAT_VERSION = 6 def __init__(self): - # mtime of the model file on disk. used to prevent reloading when - # nothing has changed. - self.classifier_version = 0 - # hash of the training data. used to prevent re-training when the # training data has not changed. self.data_hash = None @@ -69,30 +72,23 @@ class DocumentClassifier(object): self.correspondent_classifier = None self.document_type_classifier = None - def reload(self): - if os.path.getmtime(settings.MODEL_FILE) > self.classifier_version: - with open(settings.MODEL_FILE, "rb") as f: - schema_version = pickle.load(f) + def load(self): + with open(settings.MODEL_FILE, "rb") as f: + schema_version = pickle.load(f) - if schema_version != self.FORMAT_VERSION: - raise IncompatibleClassifierVersionError( - "Cannor load classifier, incompatible versions.") - else: - if self.classifier_version > 0: - # Don't be confused by this check. It's simply here - # so that we wont log anything on initial reload. - logger.info("Classifier updated on disk, " - "reloading classifier models") - self.data_hash = pickle.load(f) - self.data_vectorizer = pickle.load(f) - self.tags_binarizer = pickle.load(f) + if schema_version != self.FORMAT_VERSION: + raise IncompatibleClassifierVersionError( + "Cannor load classifier, incompatible versions.") + else: + self.data_hash = pickle.load(f) + self.data_vectorizer = pickle.load(f) + self.tags_binarizer = pickle.load(f) - self.tags_classifier = pickle.load(f) - self.correspondent_classifier = pickle.load(f) - self.document_type_classifier = pickle.load(f) - self.classifier_version = os.path.getmtime(settings.MODEL_FILE) + self.tags_classifier = pickle.load(f) + self.correspondent_classifier = pickle.load(f) + self.document_type_classifier = pickle.load(f) - def save_classifier(self): + def save(self): with open(settings.MODEL_FILE, "wb") as f: pickle.dump(self.FORMAT_VERSION, f) pickle.dump(self.data_hash, f) diff --git a/src/documents/tasks.py b/src/documents/tasks.py index 8c7d91585..f74a3d420 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -52,7 +52,7 @@ def train_classifier(): "Saving updated classifier model to {}...".format( settings.MODEL_FILE) ) - classifier.save_classifier() + classifier.save() else: logger.debug( "Training data unchanged." diff --git a/src/documents/tests/test_classifier.py b/src/documents/tests/test_classifier.py index 14673ae65..1efe564d1 100644 --- a/src/documents/tests/test_classifier.py +++ b/src/documents/tests/test_classifier.py @@ -1,7 +1,6 @@ import os import tempfile from pathlib import Path -from time import sleep from unittest import mock from django.conf import settings @@ -85,37 +84,19 @@ class TestClassifier(DirectoriesMixin, TestCase): self.assertTrue(self.classifier.train()) self.assertFalse(self.classifier.train()) - self.classifier.save_classifier() + self.classifier.save() classifier2 = DocumentClassifier() current_ver = DocumentClassifier.FORMAT_VERSION with mock.patch("documents.classifier.DocumentClassifier.FORMAT_VERSION", current_ver+1): # assure that we won't load old classifiers. - self.assertRaises(IncompatibleClassifierVersionError, classifier2.reload) + self.assertRaises(IncompatibleClassifierVersionError, classifier2.load) - self.classifier.save_classifier() + self.classifier.save() # assure that we can load the classifier after saving it. - classifier2.reload() - - def testReload(self): - - self.generate_test_data() - self.assertTrue(self.classifier.train()) - self.classifier.save_classifier() - - classifier2 = DocumentClassifier() - classifier2.reload() - v1 = classifier2.classifier_version - - # change the classifier after some time. - sleep(1) - self.classifier.save_classifier() - - classifier2.reload() - v2 = classifier2.classifier_version - self.assertNotEqual(v1, v2) + classifier2.load() @override_settings(DATA_DIR=tempfile.mkdtemp()) def testSaveClassifier(self): @@ -124,10 +105,10 @@ class TestClassifier(DirectoriesMixin, TestCase): self.classifier.train() - self.classifier.save_classifier() + self.classifier.save() new_classifier = DocumentClassifier() - new_classifier.reload() + new_classifier.load() self.assertFalse(new_classifier.train()) @override_settings(MODEL_FILE=os.path.join(os.path.dirname(__file__), "data", "model.pickle")) @@ -135,7 +116,7 @@ class TestClassifier(DirectoriesMixin, TestCase): self.generate_test_data() new_classifier = DocumentClassifier() - new_classifier.reload() + new_classifier.load() self.assertCountEqual(new_classifier.predict_tags(self.doc2.content), [45, 12]) @@ -252,25 +233,39 @@ class TestClassifier(DirectoriesMixin, TestCase): self.assertFalse(os.path.exists(settings.MODEL_FILE)) self.assertIsNone(load_classifier()) - @mock.patch("documents.classifier.DocumentClassifier.reload") - def test_load_classifier(self, reload): + @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) + @mock.patch("documents.classifier.DocumentClassifier.load") + def test_load_classifier(self, load): Path(settings.MODEL_FILE).touch() self.assertIsNotNone(load_classifier()) + load.assert_called_once() - @mock.patch("documents.classifier.DocumentClassifier.reload") - def test_load_classifier_incompatible_version(self, reload): + @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}) + @override_settings(MODEL_FILE=os.path.join(os.path.dirname(__file__), "data", "model.pickle")) + def test_load_classifier_cached(self): + classifier = load_classifier() + self.assertIsNotNone(classifier) + + with mock.patch("documents.classifier.DocumentClassifier.load") as load: + classifier2 = load_classifier() + load.assert_not_called() + + @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) + @mock.patch("documents.classifier.DocumentClassifier.load") + def test_load_classifier_incompatible_version(self, load): Path(settings.MODEL_FILE).touch() self.assertTrue(os.path.exists(settings.MODEL_FILE)) - reload.side_effect = IncompatibleClassifierVersionError() + load.side_effect = IncompatibleClassifierVersionError() self.assertIsNone(load_classifier()) self.assertFalse(os.path.exists(settings.MODEL_FILE)) - @mock.patch("documents.classifier.DocumentClassifier.reload") - def test_load_classifier_os_error(self, reload): + @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) + @mock.patch("documents.classifier.DocumentClassifier.load") + def test_load_classifier_os_error(self, load): Path(settings.MODEL_FILE).touch() self.assertTrue(os.path.exists(settings.MODEL_FILE)) - reload.side_effect = OSError() + load.side_effect = OSError() self.assertIsNone(load_classifier()) self.assertTrue(os.path.exists(settings.MODEL_FILE)) diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index d008f995a..ed280441f 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -2,7 +2,7 @@ import os from unittest import mock from django.conf import settings -from django.test import TestCase +from django.test import TestCase, override_settings from django.utils import timezone from documents import tasks @@ -52,6 +52,7 @@ class TestTasks(DirectoriesMixin, TestCase): load_classifier.assert_called_once() self.assertFalse(os.path.isfile(settings.MODEL_FILE)) + @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) def test_train_classifier(self): c = Correspondent.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test") doc = Document.objects.create(correspondent=c, content="test", title="test") From 85366024ec42f6deb7a689151e8ab947d47ae4a8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 21:03:32 +0100 Subject: [PATCH 194/898] classifier cache timeout --- src/documents/classifier.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 5151d453c..81f860314 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -39,7 +39,8 @@ def load_classifier(): classifier = DocumentClassifier() try: classifier.load() - cache.set("paperless-classifier", classifier, version=version) + cache.set("paperless-classifier", classifier, + version=version, timeout=86400) except (EOFError, IncompatibleClassifierVersionError) as e: # there's something wrong with the model file. logger.error( From a9d4a6d6177541acab8b4f00091511bdc629746e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 6 Feb 2021 21:16:06 +0100 Subject: [PATCH 195/898] update requirements.txt --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 7986f92fe..5379725b5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,6 +32,7 @@ django-extensions==3.1.0 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 +django-redis==4.12.1 django==3.1.6 djangorestframework==3.12.2 filelock==3.0.12 From 37953dd732c4890898d0c704277c9c712263ab8d Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sat, 6 Feb 2021 14:25:53 -0800 Subject: [PATCH 196/898] Dark mode popover arrow fixes --- src-ui/src/theme_dark.scss | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 8526284a8..ee59ff9af 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -373,11 +373,17 @@ $border-color-dark-mode: #47494f; background-color: $bg-light-dark-mode; border-color: $border-color-dark-mode; } + } - .arrow::after { - border-top-color: $bg-light-dark-mode; + $placements: 'top', 'right', 'bottom', 'left'; + + @each $placement in $placements { + .bs-popover-#{$placement} > .arrow::after, + .bs-popover-auto[x-placement^=#{$placement}] > .arrow::after { + border-#{$placement}-color: $bg-light-dark-mode; } } + } body.color-scheme-dark { From 927c830ef57e500c6fd76e226da052e3b722f8d8 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Feb 2021 23:26:44 +0100 Subject: [PATCH 197/898] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 80b9c85fe..7ef647561 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,6 @@ Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. -# Survey - -If you already used Paperless-ng for a bit, would like to give some anonymous feedback, and help me decide on what to focus on next: I've created a survey, [see here](https://github.com/jonaswinkler/paperless-ng/issues/402). Thank you! - # How it Works Paperless does not control your scanner, it only helps you deal with what your scanner produces. From 280d58b7c2f621b16913cbfbf45332b5ff21c269 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sat, 6 Feb 2021 14:28:26 -0800 Subject: [PATCH 198/898] Pre-load pdf contents --- .../document-card-small.component.html | 6 +++--- .../document-card-small.component.scss | 5 +++++ .../document-card-small.component.ts | 11 ++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index a6ac18b83..e689bfcbd 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -1,5 +1,5 @@ <div class="col p-2 h-100"> - <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected"> + <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected" [class.popover-hidden]="popoverHidden"> <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> <img class="card-img doc-img rounded-top" [src]="getThumbUrl()"> @@ -48,10 +48,10 @@ <ng-template #previewContent> <ng-container *ngIf="getContentType() == 'application/pdf'"> <div class="preview pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> - <div class="spinner-border spinner-border-sm" role="status"> + <div class="spinner-border text-primary spinner-border-sm" role="status"> <span class="sr-only">Loading...</span> </div> - <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="false" [show-all]="true" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> + <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="false" [show-all]="true" [render-text-mode]="2"></pdf-viewer> </div> <ng-template #nativePdfViewer> <object [data]="previewUrl | safe" type="application/pdf" class="preview" width="100%"></object> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index ba3a180c7..089072135 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -52,3 +52,8 @@ z-index: 0; } } + +.popover-hidden ::ng-deep .popover { + opacity: 0; + pointer-events: none; +} diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index a19e19533..4725add10 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -37,6 +37,9 @@ export class DocumentCardSmallComponent implements OnInit { @ViewChild('popover') popover: NgbPopover + mouseOnPreview = false + popoverHidden = true + metadata: PaperlessDocumentMetadata ngOnInit(): void { @@ -81,10 +84,16 @@ export class DocumentCardSmallComponent implements OnInit { mouseEnterPreview() { this.mouseOnPreview = true if (!this.popover.isOpen()) { + // we're going to open but hide to pre-load content during hover delay + this.popover.open() + this.popoverHidden = true setTimeout(() => { if (this.mouseOnPreview) { + // show popover + this.popoverHidden = false this.showPreview.emit(this) - this.popover.open() + } else { + this.popover.close() } }, 600); } From 9aaa7abb810562efbd7218cc91bf0fb5916b5872 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sat, 6 Feb 2021 14:30:44 -0800 Subject: [PATCH 199/898] Better minimum size for native viewer --- .../document-card-small/document-card-small.component.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 089072135..5f34d6743 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -39,9 +39,9 @@ max-width: 40rem; .preview { - min-width: 10rem; - min-height: 10rem; - max-height: 25rem; + min-width: 30rem; + min-height: 20rem; + max-height: 35rem; overflow-y: scroll; } From 247697a5e62200eb87968b7674a86eca584a1464 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sat, 6 Feb 2021 14:54:36 -0800 Subject: [PATCH 200/898] hide on card mouseleave --- .../document-card-small.component.html | 2 +- .../document-card-small/document-card-small.component.ts | 8 ++++---- .../document-list/document-list.component.html | 2 +- .../components/document-list/document-list.component.ts | 9 --------- 4 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index e689bfcbd..ca27fb697 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -1,5 +1,5 @@ <div class="col p-2 h-100"> - <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected" [class.popover-hidden]="popoverHidden"> + <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> <img class="card-img doc-img rounded-top" [src]="getThumbUrl()"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 4725add10..02eb5e0eb 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -32,9 +32,6 @@ export class DocumentCardSmallComponent implements OnInit { moreTags: number = null - @Output() - showPreview = new EventEmitter<DocumentCardSmallComponent>() - @ViewChild('popover') popover: NgbPopover mouseOnPreview = false @@ -91,7 +88,6 @@ export class DocumentCardSmallComponent implements OnInit { if (this.mouseOnPreview) { // show popover this.popoverHidden = false - this.showPreview.emit(this) } else { this.popover.close() } @@ -102,4 +98,8 @@ export class DocumentCardSmallComponent implements OnInit { mouseLeavePreview() { this.mouseOnPreview = false } + + mouseLeaveCard() { + this.popover.close() + } } diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 630395b69..cf954bde8 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -170,5 +170,5 @@ </table> <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> - <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" (showPreview)="closeAllPopovers($event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> + <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> </div> diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index e1c2457e6..0d1562c24 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -12,7 +12,6 @@ import { SavedViewService } from 'src/app/services/rest/saved-view.service'; import { Toast, ToastService } from 'src/app/services/toast.service'; import { FilterEditorComponent } from './filter-editor/filter-editor.component'; import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-view-config-dialog.component'; -import { DocumentCardSmallComponent } from './document-card-small/document-card-small.component'; @Component({ selector: 'app-document-list', @@ -42,8 +41,6 @@ export class DocumentListComponent implements OnInit, OnDestroy { private consumptionFinishedSubscription: Subscription - @ViewChildren(DocumentCardSmallComponent) smallCards: QueryList<DocumentCardSmallComponent> - get isFiltered() { return this.list.filterRules?.length > 0 } @@ -207,10 +204,4 @@ export class DocumentListComponent implements OnInit, OnDestroy { trackByDocumentId(index, item: PaperlessDocument) { return item.id } - - closeAllPopovers(cardOpening: DocumentCardSmallComponent) { - this.smallCards.forEach(card => { - if (card !== cardOpening) card.popover.close() - }) - } } From 29fa004efc6f3528760f8b74c1d640d0d52350f8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 7 Feb 2021 00:14:24 +0100 Subject: [PATCH 201/898] github actions: build release tags --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5eaca123a..08630e176 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,7 @@ name: ci on: push: + tags: ng-* branches-ignore: - 'translations**' pull_request: From 65b832c9649d9e087db552b1e50f38534bc5db7e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 7 Feb 2021 00:49:53 +0100 Subject: [PATCH 202/898] possible fix for the ansible roles --- ansible/molecule/default/verify.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index 185840783..7646b223e 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -38,7 +38,7 @@ - name: verify uploaded document has been accepted uri: - url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/paperless/" headers: Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' return_content: yes @@ -51,7 +51,7 @@ - name: verify uploaded document has been consumed uri: - url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/" + url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/paperless/" headers: Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' return_content: yes From 1e004d8727874ad8c0904db5eac979f17dc4babd Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 7 Feb 2021 08:19:00 -0800 Subject: [PATCH 203/898] Dark mode + sizing tweaks --- .../document-card-small.component.scss | 4 ++-- src-ui/src/theme_dark.scss | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 5f34d6743..62fc18d77 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -39,8 +39,8 @@ max-width: 40rem; .preview { - min-width: 30rem; - min-height: 20rem; + min-width: 25rem; + min-height: 15rem; max-height: 35rem; overflow-y: scroll; } diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index ee59ff9af..57bb9896e 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -1,6 +1,7 @@ $primary-dark-mode: #45973a; $danger-dark-mode: #b71631; $bg-dark-mode: #161618; +$bg-dark-mode-accent: #21262d; $bg-light-dark-mode: #1c1c1f; $text-color-dark-mode: #abb2bf; $text-color-dark-mode-accent: lighten($text-color-dark-mode, 10%); @@ -370,7 +371,7 @@ $border-color-dark-mode: #47494f; .popover { .popover-header, .popover-body { - background-color: $bg-light-dark-mode; + background-color: $bg-dark-mode-accent; border-color: $border-color-dark-mode; } } @@ -380,10 +381,15 @@ $border-color-dark-mode: #47494f; @each $placement in $placements { .bs-popover-#{$placement} > .arrow::after, .bs-popover-auto[x-placement^=#{$placement}] > .arrow::after { - border-#{$placement}-color: $bg-light-dark-mode; + border-#{$placement}-color: $bg-dark-mode-accent; } } - + + .bs-popover-bottom .popover-header::before, + .bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: $bg-dark-mode-accent; + } + } body.color-scheme-dark { From 817bb299a94cfe9423ef92f883d2843babba0662 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 7 Feb 2021 18:23:54 +0100 Subject: [PATCH 204/898] added a test case that replicates #511 --- src/documents/sanity_checker.py | 12 ++++++--- src/documents/tests/samples/simple.png | Bin 0 -> 7913 bytes src/documents/tests/test_consumer.py | 35 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/documents/tests/samples/simple.png diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index bc0b689d4..b8fd73f98 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -56,7 +56,8 @@ def check_sanity(): messages.append(SanityError( f"Thumbnail of document {doc.pk} does not exist.")) else: - present_files.remove(os.path.normpath(doc.thumbnail_path)) + if os.path.normpath(doc.thumbnail_path) in present_files: + present_files.remove(os.path.normpath(doc.thumbnail_path)) try: with doc.thumbnail_file as f: f.read() @@ -71,7 +72,8 @@ def check_sanity(): messages.append(SanityError( f"Original of document {doc.pk} does not exist.")) else: - present_files.remove(os.path.normpath(doc.source_path)) + if os.path.normpath(doc.source_path) in present_files: + present_files.remove(os.path.normpath(doc.source_path)) try: with doc.source_file as f: checksum = hashlib.md5(f.read()).hexdigest() @@ -92,7 +94,8 @@ def check_sanity(): f"Archived version of document {doc.pk} does not exist." )) else: - present_files.remove(os.path.normpath(doc.archive_path)) + if os.path.normpath(doc.archive_path) in present_files: + present_files.remove(os.path.normpath(doc.archive_path)) try: with doc.archive_file as f: checksum = hashlib.md5(f.read()).hexdigest() @@ -103,7 +106,8 @@ def check_sanity(): else: if not checksum == doc.archive_checksum: messages.append(SanityError( - f"Checksum mismatch of archive {doc.pk}. " + f"Checksum mismatch of archived document " + f"{doc.pk}. " f"Stored: {doc.checksum}, actual: {checksum}." )) diff --git a/src/documents/tests/samples/simple.png b/src/documents/tests/samples/simple.png new file mode 100644 index 0000000000000000000000000000000000000000..a3a76840103812c371dd78f2e8bc704ea3eec1ba GIT binary patch literal 7913 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 Ruvbl>s;I6|ENAlKe*j2SP+b53 literal 0 HcmV?d00001 diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index a6f0cc55a..8ead1ea41 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -5,12 +5,14 @@ import tempfile from unittest import mock from unittest.mock import MagicMock +from django.conf import settings from django.test import TestCase, override_settings from .utils import DirectoriesMixin from ..consumer import Consumer, ConsumerError from ..models import FileInfo, Tag, Correspondent, DocumentType, Document from ..parsers import DocumentParser, ParseError +from ..tasks import sanity_check class TestAttributes(TestCase): @@ -181,6 +183,24 @@ class DummyParser(DocumentParser): self.text = "The Text" +class CopyParser(DocumentParser): + + def get_thumbnail(self, document_path, mime_type): + return self.fake_thumb + + def get_optimised_thumbnail(self, document_path, mime_type): + return self.fake_thumb + + def __init__(self, logging_group, progress_callback=None): + super(CopyParser, self).__init__(logging_group, progress_callback) + _, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=self.tempdir) + + def parse(self, document_path, mime_type, file_name=None): + self.text = "The text" + self.archive_path = os.path.join(self.tempdir, "archive.pdf") + shutil.copy(document_path, self.archive_path) + + class FaultyParser(DocumentParser): def get_thumbnail(self, document_path, mime_type): @@ -203,6 +223,8 @@ def fake_magic_from_file(file, mime=False): if mime: if os.path.splitext(file)[1] == ".pdf": return "application/pdf" + elif os.path.splitext(file)[1] == ".png": + return "image/png" else: return "unknown" else: @@ -516,6 +538,19 @@ class TestConsumer(DirectoriesMixin, TestCase): self._assert_first_last_send_progress(last_status="FAILED") + @mock.patch("documents.parsers.document_consumer_declaration.send") + def test_similar_filenames(self, m): + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.png"), os.path.join(settings.CONSUMPTION_DIR, "simple.png")) + m.return_value = [(None, { + "parser": CopyParser, + "mime_types": {"application/pdf": ".pdf", "image/png": ".zip"}, + "weight": 0 + })] + doc1 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.png")) + doc2 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) + + sanity_check() class PreConsumeTestCase(TestCase): From d18aa683f78ab1567a25b158dd7558455bd39e42 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 7 Feb 2021 18:26:03 +0100 Subject: [PATCH 205/898] revert commit --- src/documents/sanity_checker.py | 12 +++------ src/documents/tests/samples/simple.png | Bin 7913 -> 0 bytes src/documents/tests/test_consumer.py | 35 ------------------------- 3 files changed, 4 insertions(+), 43 deletions(-) delete mode 100644 src/documents/tests/samples/simple.png diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index b8fd73f98..bc0b689d4 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -56,8 +56,7 @@ def check_sanity(): messages.append(SanityError( f"Thumbnail of document {doc.pk} does not exist.")) else: - if os.path.normpath(doc.thumbnail_path) in present_files: - present_files.remove(os.path.normpath(doc.thumbnail_path)) + present_files.remove(os.path.normpath(doc.thumbnail_path)) try: with doc.thumbnail_file as f: f.read() @@ -72,8 +71,7 @@ def check_sanity(): messages.append(SanityError( f"Original of document {doc.pk} does not exist.")) else: - if os.path.normpath(doc.source_path) in present_files: - present_files.remove(os.path.normpath(doc.source_path)) + present_files.remove(os.path.normpath(doc.source_path)) try: with doc.source_file as f: checksum = hashlib.md5(f.read()).hexdigest() @@ -94,8 +92,7 @@ def check_sanity(): f"Archived version of document {doc.pk} does not exist." )) else: - if os.path.normpath(doc.archive_path) in present_files: - present_files.remove(os.path.normpath(doc.archive_path)) + present_files.remove(os.path.normpath(doc.archive_path)) try: with doc.archive_file as f: checksum = hashlib.md5(f.read()).hexdigest() @@ -106,8 +103,7 @@ def check_sanity(): else: if not checksum == doc.archive_checksum: messages.append(SanityError( - f"Checksum mismatch of archived document " - f"{doc.pk}. " + f"Checksum mismatch of archive {doc.pk}. " f"Stored: {doc.checksum}, actual: {checksum}." )) diff --git a/src/documents/tests/samples/simple.png b/src/documents/tests/samples/simple.png deleted file mode 100644 index a3a76840103812c371dd78f2e8bc704ea3eec1ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7913 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 Ruvbl>s;I6|ENAlKe*j2SP+b53 diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 8ead1ea41..a6f0cc55a 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -5,14 +5,12 @@ import tempfile from unittest import mock from unittest.mock import MagicMock -from django.conf import settings from django.test import TestCase, override_settings from .utils import DirectoriesMixin from ..consumer import Consumer, ConsumerError from ..models import FileInfo, Tag, Correspondent, DocumentType, Document from ..parsers import DocumentParser, ParseError -from ..tasks import sanity_check class TestAttributes(TestCase): @@ -183,24 +181,6 @@ class DummyParser(DocumentParser): self.text = "The Text" -class CopyParser(DocumentParser): - - def get_thumbnail(self, document_path, mime_type): - return self.fake_thumb - - def get_optimised_thumbnail(self, document_path, mime_type): - return self.fake_thumb - - def __init__(self, logging_group, progress_callback=None): - super(CopyParser, self).__init__(logging_group, progress_callback) - _, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=self.tempdir) - - def parse(self, document_path, mime_type, file_name=None): - self.text = "The text" - self.archive_path = os.path.join(self.tempdir, "archive.pdf") - shutil.copy(document_path, self.archive_path) - - class FaultyParser(DocumentParser): def get_thumbnail(self, document_path, mime_type): @@ -223,8 +203,6 @@ def fake_magic_from_file(file, mime=False): if mime: if os.path.splitext(file)[1] == ".pdf": return "application/pdf" - elif os.path.splitext(file)[1] == ".png": - return "image/png" else: return "unknown" else: @@ -538,19 +516,6 @@ class TestConsumer(DirectoriesMixin, TestCase): self._assert_first_last_send_progress(last_status="FAILED") - @mock.patch("documents.parsers.document_consumer_declaration.send") - def test_similar_filenames(self, m): - shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) - shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.png"), os.path.join(settings.CONSUMPTION_DIR, "simple.png")) - m.return_value = [(None, { - "parser": CopyParser, - "mime_types": {"application/pdf": ".pdf", "image/png": ".zip"}, - "weight": 0 - })] - doc1 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.png")) - doc2 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) - - sanity_check() class PreConsumeTestCase(TestCase): From d5ecc5c8e5dbb728ccb2ee883b70a30d3cdc35f3 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 7 Feb 2021 19:53:08 +0100 Subject: [PATCH 206/898] make the test case fail --- src/documents/tests/test_consumer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 8ead1ea41..280124f48 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -538,6 +538,7 @@ class TestConsumer(DirectoriesMixin, TestCase): self._assert_first_last_send_progress(last_status="FAILED") + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") @mock.patch("documents.parsers.document_consumer_declaration.send") def test_similar_filenames(self, m): shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) From 61e829d963560ecab4be15ada0eb6ddbb8656444 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 00:10:52 +0100 Subject: [PATCH 207/898] updated documentation regarding execution of management commands with docker fixes #509 --- docs/administration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/administration.rst b/docs/administration.rst index c54323e6e..03a9610d1 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -180,7 +180,7 @@ tasks on your paperless instance. You can invoke these commands either by .. code:: shell-session $ cd /path/to/paperless - $ docker-compose run --rm webserver <command> <arguments> + $ docker-compose exec -u paperless webserver python3 manage.py <command> <arguments> or From b84fcac48d1e49fe32dd3ca6e3a4431c92cb066d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 13:18:08 +0100 Subject: [PATCH 208/898] code style --- src/documents/tests/test_date_parsing.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/documents/tests/test_date_parsing.py b/src/documents/tests/test_date_parsing.py index 9cbb19c2b..50543ee75 100644 --- a/src/documents/tests/test_date_parsing.py +++ b/src/documents/tests/test_date_parsing.py @@ -1,7 +1,6 @@ import datetime import os import shutil -from unittest import mock from uuid import uuid4 from dateutil import tz @@ -9,7 +8,6 @@ from django.conf import settings from django.test import TestCase, override_settings from documents.parsers import parse_date -from paperless_tesseract.parsers import RasterisedDocumentParser class TestDate(TestCase): @@ -152,4 +150,4 @@ class TestDate(TestCase): 2018, 2, 13, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE) ) - ) \ No newline at end of file + ) From bcdd6bdded3c195de43b5f341460bc5fd8744b52 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 13:18:39 +0100 Subject: [PATCH 209/898] refactor migration test case --- ...rations.py => test_migration_mime_type.py} | 45 +------------------ src/documents/tests/utils.py | 40 ++++++++++++++++- 2 files changed, 41 insertions(+), 44 deletions(-) rename src/documents/tests/{test_migrations.py => test_migration_mime_type.py} (66%) diff --git a/src/documents/tests/test_migrations.py b/src/documents/tests/test_migration_mime_type.py similarity index 66% rename from src/documents/tests/test_migrations.py rename to src/documents/tests/test_migration_mime_type.py index ee7180c63..5e825e89d 100644 --- a/src/documents/tests/test_migrations.py +++ b/src/documents/tests/test_migration_mime_type.py @@ -1,52 +1,11 @@ import os import shutil -from pathlib import Path -from django.apps import apps from django.conf import settings -from django.db import connection -from django.db.migrations.executor import MigrationExecutor -from django.test import TestCase, TransactionTestCase, override_settings +from django.test import override_settings -from documents.models import Document from documents.parsers import get_default_file_extension -from documents.tests.utils import DirectoriesMixin - - -class TestMigrations(TransactionTestCase): - - @property - def app(self): - return apps.get_containing_app_config(type(self).__module__).name - - migrate_from = None - migrate_to = None - - def setUp(self): - super(TestMigrations, self).setUp() - - assert self.migrate_from and self.migrate_to, \ - "TestCase '{}' must define migrate_from and migrate_to properties".format(type(self).__name__) - self.migrate_from = [(self.app, self.migrate_from)] - self.migrate_to = [(self.app, self.migrate_to)] - executor = MigrationExecutor(connection) - old_apps = executor.loader.project_state(self.migrate_from).apps - - # Reverse to the original migration - executor.migrate(self.migrate_from) - - self.setUpBeforeMigration(old_apps) - - # Run the migration to test - executor = MigrationExecutor(connection) - executor.loader.build_graph() # reload. - executor.migrate(self.migrate_to) - - self.apps = executor.loader.project_state(self.migrate_to).apps - - def setUpBeforeMigration(self, apps): - pass - +from documents.tests.utils import DirectoriesMixin, TestMigrations STORAGE_TYPE_UNENCRYPTED = "unencrypted" STORAGE_TYPE_GPG = "gpg" diff --git a/src/documents/tests/utils.py b/src/documents/tests/utils.py index ebf79f6c5..b9be25d70 100644 --- a/src/documents/tests/utils.py +++ b/src/documents/tests/utils.py @@ -4,7 +4,10 @@ import tempfile from collections import namedtuple from contextlib import contextmanager -from django.test import override_settings +from django.apps import apps +from django.db import connection +from django.db.migrations.executor import MigrationExecutor +from django.test import override_settings, TransactionTestCase def setup_directories(): @@ -79,3 +82,38 @@ class DirectoriesMixin: def tearDown(self) -> None: super(DirectoriesMixin, self).tearDown() remove_dirs(self.dirs) + + +class TestMigrations(TransactionTestCase): + + @property + def app(self): + return apps.get_containing_app_config(type(self).__module__).name + + migrate_from = None + migrate_to = None + + def setUp(self): + super(TestMigrations, self).setUp() + + assert self.migrate_from and self.migrate_to, \ + "TestCase '{}' must define migrate_from and migrate_to properties".format(type(self).__name__) + self.migrate_from = [(self.app, self.migrate_from)] + self.migrate_to = [(self.app, self.migrate_to)] + executor = MigrationExecutor(connection) + old_apps = executor.loader.project_state(self.migrate_from).apps + + # Reverse to the original migration + executor.migrate(self.migrate_from) + + self.setUpBeforeMigration(old_apps) + + # Run the migration to test + executor = MigrationExecutor(connection) + executor.loader.build_graph() # reload. + executor.migrate(self.migrate_to) + + self.apps = executor.loader.project_state(self.migrate_to).apps + + def setUpBeforeMigration(self, apps): + pass From 133fd0504912ff4b00491d20006acac9914768c9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 19:59:14 +0100 Subject: [PATCH 210/898] fix for #511 --- src/documents/file_handling.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index 6ee97f5c3..64858de78 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -161,5 +161,8 @@ def generate_filename(doc, counter=0, append_gpg=True): def archive_name_from_filename(filename): - - return os.path.splitext(filename)[0] + ".pdf" + name, ext = os.path.splitext(filename) + if ext == ".pdf": + return filename + else: + return filename + ".pdf" From e1376cbf40f4eacaf1c33b092cb94aa6082143c1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 20:59:14 +0100 Subject: [PATCH 211/898] migration for #511 --- .../migrations/1012_fix_archive_files.py | 181 ++++++++++++++++++ src/documents/tests/samples/simple.jpg | Bin 0 -> 17740 bytes src/documents/tests/samples/simple.txt | 1 + .../tests/test_migration_archive_files.py | 175 +++++++++++++++++ 4 files changed, 357 insertions(+) create mode 100644 src/documents/migrations/1012_fix_archive_files.py create mode 100644 src/documents/tests/samples/simple.jpg create mode 100644 src/documents/tests/samples/simple.txt create mode 100644 src/documents/tests/test_migration_archive_files.py diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py new file mode 100644 index 000000000..e95715265 --- /dev/null +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -0,0 +1,181 @@ +# Generated by Django 3.1.6 on 2021-02-07 22:26 +import hashlib +import logging +import os +import shutil + +from django.conf import settings +from django.db import migrations + + +logger = logging.getLogger("paperless.migrations") + + +def archive_name_from_filename_old(filename): + return os.path.splitext(filename)[0] + ".pdf" + + +def archive_path_old(doc): + if doc.filename: + fname = archive_name_from_filename_old(doc.filename) + else: + fname = "{:07}.pdf".format(doc.pk) + + return os.path.join( + settings.ARCHIVE_DIR, + fname + ) + + +def archive_name_from_filename_new(filename): + name, ext = os.path.splitext(filename) + if ext == ".pdf": + return filename + else: + return filename + ".pdf" + + +def archive_path_new(doc): + if doc.filename: + fname = archive_name_from_filename_new(doc.filename) + else: + fname = "{:07}.pdf".format(doc.pk) + + return os.path.join( + settings.ARCHIVE_DIR, + fname + ) + + +STORAGE_TYPE_GPG = "gpg" + + +def source_path(doc): + if doc.filename: + fname = str(doc.filename) + else: + fname = "{:07}{}".format(doc.pk, doc.file_type) + if doc.storage_type == STORAGE_TYPE_GPG: + fname += ".gpg" # pragma: no cover + + return os.path.join( + settings.ORIGINALS_DIR, + fname + ) + + +def move_old_to_new_locations(apps, schema_editor): + Document = apps.get_model("documents", "Document") + + affected_document_ids = set() + + old_archive_path_to_id = {} + + # check for documents that have incorrect archive versions + for doc in Document.objects.filter(archive_checksum__isnull=False): + old_path = archive_path_old(doc) + + if not os.path.isfile(old_path): + raise ValueError( + f"Archived document of {doc.filename} does not exist at: " + f"{old_path}") + + if old_path in old_archive_path_to_id: + affected_document_ids.add(doc.id) + affected_document_ids.add(old_archive_path_to_id[old_path]) + else: + old_archive_path_to_id[old_path] = doc.id + + # check that we can regenerate these archive versions + for doc_id in affected_document_ids: + from documents.parsers import get_parser_class_for_mime_type + + doc = Document.objects.get(id=doc_id) + parser_class = get_parser_class_for_mime_type(doc.mime_type) + if not parser_class: + raise Exception( + f"document {doc.filename} has an invalid archived document, " + f"but no parsers are available. Cannot migrate.") + + # move files + for doc in Document.objects.filter(archive_checksum__isnull=False): + old_path = archive_path_old(doc) + new_path = archive_path_new(doc) + + if old_path != new_path and not os.path.isfile(new_path): + logger.debug( + f"Moving {old_path} to {new_path}" + ) + shutil.move(old_path, new_path) + + # regenerate archive documents + for doc_id in affected_document_ids: + from documents.parsers import get_parser_class_for_mime_type, \ + DocumentParser, \ + ParseError + + doc = Document.objects.get(id=doc_id) + logger.info( + f"Regenerating archive document for {doc.filename}" + ) + parser_class = get_parser_class_for_mime_type(doc.mime_type) + parser: DocumentParser = parser_class(None, None) + try: + parser.parse(source_path(doc), doc.mime_type, os.path.basename(doc.filename)) + doc.content = parser.get_text() + if parser.archive_path and os.path.isfile(parser.archive_path): + with open(parser.archive_path, "rb") as f: + doc.archive_checksum = hashlib.md5(f.read()).hexdigest() + shutil.copy2(parser.archive_path, archive_path_new(doc)) + else: + doc.archive_checksum = None + if os.path.isfile(archive_path_new(doc)): + os.unlink(archive_path_new(doc)) + doc.save() + except ParseError: + logger.exception( + f"Unable to regenerate archive document for {doc.filename}" + ) + finally: + parser.cleanup() + + +def move_new_to_old_locations(apps, schema_editor): + Document = apps.get_model("documents", "Document") + + old_archive_paths = set() + + for doc in Document.objects.filter(archive_checksum__isnull=False): + new_archive_path = archive_path_new(doc) + old_archive_path = archive_path_old(doc) + if old_archive_path in old_archive_paths: + raise ValueError( + f"Cannot migrate: Archive file name {old_archive_path} of " + f"document {doc.filename} would clash with another archive " + f"filename.") + old_archive_paths.add(old_archive_path) + if new_archive_path != old_archive_path and os.path.isfile(old_archive_path): + raise ValueError( + f"Cannot migrate: Cannot move {new_archive_path} to " + f"{old_archive_path}: file already exists." + ) + + for doc in Document.objects.filter(archive_checksum__isnull=False): + new_archive_path = archive_path_new(doc) + old_archive_path = archive_path_old(doc) + shutil.move(new_archive_path, old_archive_path) + logger.debug(f"Moving {new_archive_path} to {old_archive_path}") + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1011_auto_20210101_2340'), + ] + + operations = [ + migrations.RunPython( + move_old_to_new_locations, + move_new_to_old_locations + ) + ] diff --git a/src/documents/tests/samples/simple.jpg b/src/documents/tests/samples/simple.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8c58af0df6e4b4e6b72179b92aa9df4e2bbd8d8 GIT binary patch literal 17740 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 literal 0 HcmV?d00001 diff --git a/src/documents/tests/samples/simple.txt b/src/documents/tests/samples/simple.txt new file mode 100644 index 000000000..6de7b8c69 --- /dev/null +++ b/src/documents/tests/samples/simple.txt @@ -0,0 +1 @@ +This is a test file. diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py new file mode 100644 index 000000000..534a5b499 --- /dev/null +++ b/src/documents/tests/test_migration_archive_files.py @@ -0,0 +1,175 @@ +import hashlib +import os +import shutil +from pathlib import Path + +from django.conf import settings +from django.test import override_settings + +from documents.sanity_checker import SanityFailedError +from documents.tasks import sanity_check +from documents.tests.utils import DirectoriesMixin, TestMigrations + + +STORAGE_TYPE_GPG = "gpg" + + +def archive_name_from_filename_old(filename): + return os.path.splitext(filename)[0] + ".pdf" + + +def archive_path_old(self): + if self.filename: + fname = archive_name_from_filename_old(self.filename) + else: + fname = "{:07}.pdf".format(self.pk) + + return os.path.join( + settings.ARCHIVE_DIR, + fname + ) + + +def archive_name_from_filename_new(filename): + name, ext = os.path.splitext(filename) + if ext == ".pdf": + return filename + else: + return filename + ".pdf" + + +def archive_path_new(self): + if self.filename: + fname = archive_name_from_filename_new(self.filename) + else: + fname = "{:07}.pdf".format(self.pk) + + return os.path.join( + settings.ARCHIVE_DIR, + fname + ) + + +def source_path(doc): + if doc.filename: + fname = str(doc.filename) + else: + fname = "{:07}{}".format(doc.pk, doc.file_type) + if doc.storage_type == STORAGE_TYPE_GPG: + fname += ".gpg" # pragma: no cover + + return os.path.join( + settings.ORIGINALS_DIR, + fname + ) + + +def thumbnail_path(doc): + file_name = "{:07}.png".format(doc.pk) + if doc.storage_type == STORAGE_TYPE_GPG: + file_name += ".gpg" + + return os.path.join( + settings.THUMBNAIL_DIR, + file_name + ) + + +def make_test_document(document_class, title: str, filename: str, mime_type: str, original: str, archive: str = None, new: bool = False): + doc = document_class() + doc.filename = filename + doc.title = title + doc.mime_type = mime_type + doc.content = "the content, does not matter for this test" + + shutil.copy2(original, source_path(doc)) + with open(original, "rb") as f: + doc.checksum = hashlib.md5(f.read()).hexdigest() + + if archive: + if new: + shutil.copy2(archive, archive_path_new(doc)) + else: + shutil.copy2(archive, archive_path_old(doc)) + with open(archive, "rb") as f: + doc.archive_checksum = hashlib.md5(f.read()).hexdigest() + + doc.save() + + Path(thumbnail_path(doc)).touch() + + return doc + + +@override_settings(PAPERLESS_FILENAME_FORMAT="{title}") +class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): + + migrate_from = '1011_auto_20210101_2340' + migrate_to = '1012_fix_archive_files' + + def setUpBeforeMigration(self, apps): + simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg") + simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") + simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") + simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") + + Document = apps.get_model("documents", "Document") + + self.doc_unrelated = make_test_document(Document, "unrelated", "unrelated.txt", "application/pdf", simple_pdf2, simple_pdf2) + self.doc_no_archive = make_test_document(Document, "no_archive", "no_archive.txt", "text/plain", simple_txt) + self.clashA = make_test_document(Document, "clash", "clash.pdf", "application/pdf", simple_pdf, simple_pdf) + self.clashB = make_test_document(Document, "clash", "clash.jpg", "image/jpeg", simple_jpg, simple_pdf) + + self.assertEqual(archive_path_old(self.clashA), archive_path_old(self.clashB)) + self.assertRaises(SanityFailedError, sanity_check) + + def testArchiveFilesMigrated(self): + Document = self.apps.get_model('documents', 'Document') + + for doc in Document.objects.all(): + self.assertTrue(os.path.isfile(archive_path_new(self.clashB))) + with open(source_path(doc), "rb") as f: + original_checksum = hashlib.md5(f.read()).hexdigest() + self.assertEqual(original_checksum, doc.checksum) + + if doc.archive_checksum: + self.assertTrue(os.path.isfile(archive_path_new(doc))) + with open(archive_path_new(doc), "rb") as f: + archive_checksum = hashlib.md5(f.read()).hexdigest() + self.assertEqual(archive_checksum, doc.archive_checksum) + + # this will raise errors when any inconsistencies remain after migration + sanity_check() + + +class TestMigrateArchiveFilesBackwards(DirectoriesMixin, TestMigrations): + + migrate_from = '1012_fix_archive_files' + migrate_to = '1011_auto_20210101_2340' + + def setUpBeforeMigration(self, apps): + simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg") + simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") + simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") + simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") + + Document = apps.get_model("documents", "Document") + + self.doc_unrelated = make_test_document(Document, "unrelated", "unrelated.txt", "application/pdf", simple_pdf2, simple_pdf2, new=True) + self.doc_no_archive = make_test_document(Document, "no_archive", "no_archive.txt", "text/plain", simple_txt, new=True) + self.clashB = make_test_document(Document, "clash", "clash.jpg", "image/jpeg", simple_jpg, simple_pdf, new=True) + + def testArchiveFilesReverted(self): + Document = self.apps.get_model('documents', 'Document') + + for doc in Document.objects.all(): + self.assertTrue(os.path.isfile(archive_path_old(self.clashB))) + with open(source_path(doc), "rb") as f: + original_checksum = hashlib.md5(f.read()).hexdigest() + self.assertEqual(original_checksum, doc.checksum) + + if doc.archive_checksum: + self.assertTrue(os.path.isfile(archive_path_old(doc))) + with open(archive_path_old(doc), "rb") as f: + archive_checksum = hashlib.md5(f.read()).hexdigest() + self.assertEqual(archive_checksum, doc.archive_checksum) From dd5e48ced981cf3bb6026ce3596a6f34a7acf0f9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 22:49:01 +0100 Subject: [PATCH 212/898] only move files if necessary --- src/documents/migrations/1012_fix_archive_files.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index e95715265..98794aad0 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -163,8 +163,9 @@ def move_new_to_old_locations(apps, schema_editor): for doc in Document.objects.filter(archive_checksum__isnull=False): new_archive_path = archive_path_new(doc) old_archive_path = archive_path_old(doc) - shutil.move(new_archive_path, old_archive_path) - logger.debug(f"Moving {new_archive_path} to {old_archive_path}") + if new_archive_path != old_archive_path: + logger.debug(f"Moving {new_archive_path} to {old_archive_path}") + shutil.move(new_archive_path, old_archive_path) class Migration(migrations.Migration): From 016a80ab886a56e9d46aae5bd9afea2b48146968 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 8 Feb 2021 23:54:07 +0100 Subject: [PATCH 213/898] only move unaffected files, regenerate affected files --- .../migrations/1012_fix_archive_files.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index 98794aad0..ab7e88a6a 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -102,11 +102,17 @@ def move_old_to_new_locations(apps, schema_editor): old_path = archive_path_old(doc) new_path = archive_path_new(doc) - if old_path != new_path and not os.path.isfile(new_path): - logger.debug( - f"Moving {old_path} to {new_path}" - ) - shutil.move(old_path, new_path) + if doc.id in affected_document_ids: + # remove affected archive versions + if os.path.isfile(old_path): + os.unlink(old_path) + else: + # move unaffected archive versions + if old_path != new_path and os.path.isfile(old_path) and not os.path.isfile(new_path): + logger.debug( + f"Moving {old_path} to {new_path}" + ) + shutil.move(old_path, new_path) # regenerate archive documents for doc_id in affected_document_ids: From 08711286382d39ad259e5baf366434b1a009ee13 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 00:00:46 +0100 Subject: [PATCH 214/898] fix some test cases --- src/documents/tests/test_api.py | 1 + src/documents/tests/test_file_handling.py | 1 + src/documents/tests/test_management.py | 1 + 3 files changed, 3 insertions(+) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 54d2b292d..c4cca8fdc 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -146,6 +146,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(response.status_code, 200) self.assertEqual(response.content, content_thumbnail) + @override_settings(PAPERLESS_FILENAME_FORMAT="") def test_download_with_archive(self): _, filename = tempfile.mkstemp(dir=self.dirs.originals_dir) diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index b24f52aa2..ae25c0f12 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -558,6 +558,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): self.assertTrue(os.path.isfile(doc.source_path)) self.assertTrue(os.path.isfile(doc.archive_path)) + @override_settings(PAPERLESS_FILENAME_FORMAT="") def test_archive_deleted(self): original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf") archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index a71baa8ba..ac119a431 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -106,6 +106,7 @@ class TestMakeIndex(TestCase): class TestRenamer(DirectoriesMixin, TestCase): + @override_settings(PAPERLESS_FILENAME_FORMAT="") def test_rename(self): doc = Document.objects.create(title="test", mime_type="application/pdf") doc.filename = generate_filename(doc) From d41f540a870d977527f8bb8fe8c0d98c093b1d21 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 00:01:11 +0100 Subject: [PATCH 215/898] more testing #511 --- src/documents/tests/samples/simple-noalpha.png | Bin 0 -> 6414 bytes .../tests/test_migration_archive_files.py | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 src/documents/tests/samples/simple-noalpha.png diff --git a/src/documents/tests/samples/simple-noalpha.png b/src/documents/tests/samples/simple-noalpha.png new file mode 100644 index 0000000000000000000000000000000000000000..9a76e76a0b0f7dc86408dcc09b809f3130201f56 GIT binary patch literal 6414 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 literal 0 HcmV?d00001 diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index 534a5b499..5970a83eb 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -112,6 +112,7 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") + simple_png = os.path.join(os.path.dirname(__file__), "samples", "simple-noalpha.png") Document = apps.get_model("documents", "Document") @@ -119,8 +120,10 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): self.doc_no_archive = make_test_document(Document, "no_archive", "no_archive.txt", "text/plain", simple_txt) self.clashA = make_test_document(Document, "clash", "clash.pdf", "application/pdf", simple_pdf, simple_pdf) self.clashB = make_test_document(Document, "clash", "clash.jpg", "image/jpeg", simple_jpg, simple_pdf) + self.clashC = make_test_document(Document, "clash", "clash.png", "image/png", simple_png, simple_pdf) self.assertEqual(archive_path_old(self.clashA), archive_path_old(self.clashB)) + self.assertEqual(archive_path_old(self.clashA), archive_path_old(self.clashC)) self.assertRaises(SanityFailedError, sanity_check) def testArchiveFilesMigrated(self): From bd47582b2df6e6ded4da9e6032deba350827597e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 00:13:13 +0100 Subject: [PATCH 216/898] validate move before migration --- src/documents/migrations/1012_fix_archive_files.py | 6 ++++++ src/documents/tests/test_migration_archive_files.py | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index ab7e88a6a..f75ae431d 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -74,12 +74,18 @@ def move_old_to_new_locations(apps, schema_editor): # check for documents that have incorrect archive versions for doc in Document.objects.filter(archive_checksum__isnull=False): old_path = archive_path_old(doc) + new_path = archive_path_new(doc) if not os.path.isfile(old_path): raise ValueError( f"Archived document of {doc.filename} does not exist at: " f"{old_path}") + if old_path != new_path and os.path.isfile(new_path): + raise ValueError( + f"Need to move {old_path} to {new_path}, but target file " + f"already exists") + if old_path in old_archive_path_to_id: affected_document_ids.add(doc.id) affected_document_ids.add(old_archive_path_to_id[old_path]) diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index 5970a83eb..69c1b51eb 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -141,6 +141,8 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): archive_checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(archive_checksum, doc.archive_checksum) + self.assertEqual(Document.objects.filter(archive_checksum__isnull=False).count(), 4) + # this will raise errors when any inconsistencies remain after migration sanity_check() From 1786ac3a9eb87e906b40b92fc7e98e3844b88069 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 01:36:39 +0100 Subject: [PATCH 217/898] version push --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 4e38813b5..95cd94d29 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.0", + version: "1.1.1", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 37a1329f2..ae805838c 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 1, 0) +__version__ = (1, 1, 1) From 4a7ccd1bae5056b0112cd81118dbffb9047f1c20 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 02:13:25 +0100 Subject: [PATCH 218/898] another way to make the test case fail --- src/documents/tests/test_consumer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 280124f48..b96e4844b 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -543,13 +543,15 @@ class TestConsumer(DirectoriesMixin, TestCase): def test_similar_filenames(self, m): shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.png"), os.path.join(settings.CONSUMPTION_DIR, "simple.png")) + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple-noalpha.png"), os.path.join(settings.CONSUMPTION_DIR, "simple.png.pdf")) m.return_value = [(None, { "parser": CopyParser, - "mime_types": {"application/pdf": ".pdf", "image/png": ".zip"}, + "mime_types": {"application/pdf": ".pdf", "image/png": ".png"}, "weight": 0 })] doc1 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.png")) doc2 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) + doc3 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.png.pdf")) sanity_check() From 7cdc867307b0ff9573ec254f910fb2958d629014 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:46:19 +0100 Subject: [PATCH 219/898] archive filenames are now stored in the database and checked for collisions just as original filenames as well, unified method for archive version checking --- src/documents/consumer.py | 7 +- src/documents/file_handling.py | 31 +-- .../management/commands/document_archiver.py | 14 +- .../management/commands/document_exporter.py | 2 +- .../migrations/1012_fix_archive_files.py | 177 +++++++++++++----- src/documents/models.py | 33 +++- src/documents/sanity_checker.py | 2 +- src/documents/signals/handlers.py | 56 +++--- src/documents/views.py | 12 +- 9 files changed, 229 insertions(+), 105 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 3baedb5c3..acb3ad33f 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -292,8 +292,7 @@ class Consumer(LoggingMixin): # After everything is in the database, copy the files into # place. If this fails, we'll also rollback the transaction. with FileLock(settings.MEDIA_LOCK): - document.filename = generate_unique_filename( - document, settings.ORIGINALS_DIR) + document.filename = generate_unique_filename(document) create_source_path_directory(document.source_path) self._write(document.storage_type, @@ -303,6 +302,10 @@ class Consumer(LoggingMixin): thumbnail, document.thumbnail_path) if archive_path and os.path.isfile(archive_path): + document.archive_filename = generate_unique_filename( + document, + archive_filename=True + ) create_source_path_directory(document.archive_path) self._write(document.storage_type, archive_path, document.archive_path) diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index 64858de78..535aa3d2c 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -79,12 +79,20 @@ def many_to_dictionary(field): return mydictionary -def generate_unique_filename(doc, root): +def generate_unique_filename(doc, archive_filename=False): + if archive_filename: + old_filename = doc.archive_filename + root = settings.ARCHIVE_DIR + else: + old_filename = doc.filename + root = settings.ORIGINALS_DIR + counter = 0 while True: - new_filename = generate_filename(doc, counter) - if new_filename == doc.filename: + new_filename = generate_filename( + doc, counter, archive_filename=archive_filename) + if new_filename == old_filename: # still the same as before. return new_filename @@ -94,7 +102,7 @@ def generate_unique_filename(doc, root): return new_filename -def generate_filename(doc, counter=0, append_gpg=True): +def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): path = "" try: @@ -148,21 +156,16 @@ def generate_filename(doc, counter=0, append_gpg=True): f"{settings.PAPERLESS_FILENAME_FORMAT}, falling back to default") counter_str = f"_{counter:02}" if counter else "" + + filetype_str = ".pdf" if archive_filename else doc.file_type + if len(path) > 0: - filename = f"{path}{counter_str}{doc.file_type}" + filename = f"{path}{counter_str}{filetype_str}" else: - filename = f"{doc.pk:07}{counter_str}{doc.file_type}" + filename = f"{doc.pk:07}{counter_str}{filetype_str}" # Append .gpg for encrypted files if append_gpg and doc.storage_type == doc.STORAGE_TYPE_GPG: filename += ".gpg" return filename - - -def archive_name_from_filename(filename): - name, ext = os.path.splitext(filename) - if ext == ".pdf": - return filename - else: - return filename + ".pdf" diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index d2ff9c8c2..fe8c8b530 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -16,7 +16,8 @@ from whoosh.writing import AsyncWriter from documents.models import Document from ... import index -from ...file_handling import create_source_path_directory +from ...file_handling import create_source_path_directory, \ + generate_unique_filename from ...parsers import get_parser_class_for_mime_type @@ -39,13 +40,16 @@ def handle_document(document_id): with transaction.atomic(): with open(parser.get_archive_path(), 'rb') as f: checksum = hashlib.md5(f.read()).hexdigest() - # i'm going to save first so that in case the file move + # I'm going to save first so that in case the file move # fails, the database is rolled back. - # we also don't use save() since that triggers the filehandling + # We also don't use save() since that triggers the filehandling # logic, and we don't want that yet (file not yet in place) + document.archive_filename = generate_unique_filename( + document, archive_filename=True) Document.objects.filter(pk=document.pk).update( archive_checksum=checksum, - content=parser.get_text() + content=parser.get_text(), + archive_filename=document.archive_filename ) with FileLock(settings.MEDIA_LOCK): create_source_path_directory(document.archive_path) @@ -101,7 +105,7 @@ class Command(BaseCommand): document_ids = list(map( lambda doc: doc.id, filter( - lambda d: overwrite or not d.archive_checksum, + lambda d: overwrite or not d.has_archive_version, documents ) )) diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index 1505b0856..d8f5861a5 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -139,7 +139,7 @@ class Command(BaseCommand): thumbnail_target = os.path.join(self.target, thumbnail_name) document_dict[EXPORTER_THUMBNAIL_NAME] = thumbnail_name - if os.path.exists(document.archive_path): + if document.has_archive_version: archive_name = base_name + "-archive.pdf" archive_target = os.path.join(self.target, archive_name) document_dict[EXPORTER_ARCHIVE_NAME] = archive_name diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index f75ae431d..5db503391 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -1,43 +1,27 @@ # Generated by Django 3.1.6 on 2021-02-07 22:26 +import datetime import hashlib import logging import os import shutil +import pathvalidate from django.conf import settings -from django.db import migrations +from django.db import migrations, models +from django.template.defaultfilters import slugify +from documents.file_handling import defaultdictNoStr, many_to_dictionary logger = logging.getLogger("paperless.migrations") -def archive_name_from_filename_old(filename): +def archive_name_from_filename(filename): return os.path.splitext(filename)[0] + ".pdf" def archive_path_old(doc): if doc.filename: - fname = archive_name_from_filename_old(doc.filename) - else: - fname = "{:07}.pdf".format(doc.pk) - - return os.path.join( - settings.ARCHIVE_DIR, - fname - ) - - -def archive_name_from_filename_new(filename): - name, ext = os.path.splitext(filename) - if ext == ".pdf": - return filename - else: - return filename + ".pdf" - - -def archive_path_new(doc): - if doc.filename: - fname = archive_name_from_filename_new(doc.filename) + fname = archive_name_from_filename(doc.filename) else: fname = "{:07}.pdf".format(doc.pk) @@ -50,6 +34,16 @@ def archive_path_new(doc): STORAGE_TYPE_GPG = "gpg" +def archive_path_new(doc): + if doc.archive_filename is not None: + return os.path.join( + settings.ARCHIVE_DIR, + str(doc.archive_filename) + ) + else: + return None + + def source_path(doc): if doc.filename: fname = str(doc.filename) @@ -64,6 +58,98 @@ def source_path(doc): ) +def generate_unique_filename(doc, archive_filename=False): + if archive_filename: + old_filename = doc.archive_filename + root = settings.ARCHIVE_DIR + else: + old_filename = doc.filename + root = settings.ORIGINALS_DIR + + counter = 0 + + while True: + new_filename = generate_filename( + doc, counter, archive_filename=archive_filename) + if new_filename == old_filename: + # still the same as before. + return new_filename + + if os.path.exists(os.path.join(root, new_filename)): + counter += 1 + else: + return new_filename + + +def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): + path = "" + + try: + if settings.PAPERLESS_FILENAME_FORMAT is not None: + tags = defaultdictNoStr(lambda: slugify(None), + many_to_dictionary(doc.tags)) + + tag_list = pathvalidate.sanitize_filename( + ",".join(sorted( + [tag.name for tag in doc.tags.all()] + )), + replacement_text="-" + ) + + if doc.correspondent: + correspondent = pathvalidate.sanitize_filename( + doc.correspondent.name, replacement_text="-" + ) + else: + correspondent = "none" + + if doc.document_type: + document_type = pathvalidate.sanitize_filename( + doc.document_type.name, replacement_text="-" + ) + else: + document_type = "none" + + path = settings.PAPERLESS_FILENAME_FORMAT.format( + title=pathvalidate.sanitize_filename( + doc.title, replacement_text="-"), + correspondent=correspondent, + document_type=document_type, + created=datetime.date.isoformat(doc.created), + created_year=doc.created.year if doc.created else "none", + created_month=f"{doc.created.month:02}" if doc.created else "none", # NOQA: E501 + created_day=f"{doc.created.day:02}" if doc.created else "none", + added=datetime.date.isoformat(doc.added), + added_year=doc.added.year if doc.added else "none", + added_month=f"{doc.added.month:02}" if doc.added else "none", + added_day=f"{doc.added.day:02}" if doc.added else "none", + tags=tags, + tag_list=tag_list + ).strip() + + path = path.strip(os.sep) + + except (ValueError, KeyError, IndexError): + logger.warning( + f"Invalid PAPERLESS_FILENAME_FORMAT: " + f"{settings.PAPERLESS_FILENAME_FORMAT}, falling back to default") + + counter_str = f"_{counter:02}" if counter else "" + + filetype_str = ".pdf" if archive_filename else doc.file_type + + if len(path) > 0: + filename = f"{path}{counter_str}{filetype_str}" + else: + filename = f"{doc.pk:07}{counter_str}{filetype_str}" + + # Append .gpg for encrypted files + if append_gpg and doc.storage_type == STORAGE_TYPE_GPG: + filename += ".gpg" + + return filename + + def move_old_to_new_locations(apps, schema_editor): Document = apps.get_model("documents", "Document") @@ -74,18 +160,12 @@ def move_old_to_new_locations(apps, schema_editor): # check for documents that have incorrect archive versions for doc in Document.objects.filter(archive_checksum__isnull=False): old_path = archive_path_old(doc) - new_path = archive_path_new(doc) if not os.path.isfile(old_path): raise ValueError( f"Archived document of {doc.filename} does not exist at: " f"{old_path}") - if old_path != new_path and os.path.isfile(new_path): - raise ValueError( - f"Need to move {old_path} to {new_path}, but target file " - f"already exists") - if old_path in old_archive_path_to_id: affected_document_ids.add(doc.id) affected_document_ids.add(old_archive_path_to_id[old_path]) @@ -103,22 +183,19 @@ def move_old_to_new_locations(apps, schema_editor): f"document {doc.filename} has an invalid archived document, " f"but no parsers are available. Cannot migrate.") - # move files for doc in Document.objects.filter(archive_checksum__isnull=False): - old_path = archive_path_old(doc) - new_path = archive_path_new(doc) if doc.id in affected_document_ids: + old_path = archive_path_old(doc) # remove affected archive versions if os.path.isfile(old_path): os.unlink(old_path) else: - # move unaffected archive versions - if old_path != new_path and os.path.isfile(old_path) and not os.path.isfile(new_path): - logger.debug( - f"Moving {old_path} to {new_path}" - ) - shutil.move(old_path, new_path) + # Set archive path for unaffected files + doc.archive_filename = archive_path_old(doc) + Document.objects.filter(id=doc.id).update( + archive_filename=doc.archive_filename + ) # regenerate archive documents for doc_id in affected_document_ids: @@ -135,14 +212,16 @@ def move_old_to_new_locations(apps, schema_editor): try: parser.parse(source_path(doc), doc.mime_type, os.path.basename(doc.filename)) doc.content = parser.get_text() - if parser.archive_path and os.path.isfile(parser.archive_path): - with open(parser.archive_path, "rb") as f: + + if parser.get_archive_path() and os.path.isfile(parser.get_archive_path()): + doc.archive_filename = generate_unique_filename( + doc, archive_filename=True) + with open(parser.get_archive_path(), "rb") as f: doc.archive_checksum = hashlib.md5(f.read()).hexdigest() - shutil.copy2(parser.archive_path, archive_path_new(doc)) + os.makedirs(os.path.dirname(archive_path_new(doc)), exist_ok=True) + shutil.copy2(parser.get_archive_path(), archive_path_new(doc)) else: doc.archive_checksum = None - if os.path.isfile(archive_path_new(doc)): - os.unlink(archive_path_new(doc)) doc.save() except ParseError: logger.exception( @@ -187,8 +266,18 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='document', + name='archive_filename', + field=models.FilePathField(default=None, editable=False, help_text='Current archive filename in storage', max_length=1024, null=True, unique=True, verbose_name='archive filename'), + ), + migrations.AlterField( + model_name='document', + name='filename', + field=models.FilePathField(default=None, editable=False, help_text='Current filename in storage', max_length=1024, null=True, unique=True, verbose_name='filename'), + ), migrations.RunPython( move_old_to_new_locations, move_new_to_old_locations - ) + ), ] diff --git a/src/documents/models.py b/src/documents/models.py index 86878dd7e..47433724a 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -16,7 +16,6 @@ from django.utils.timezone import is_aware from django.utils.translation import gettext_lazy as _ -from documents.file_handling import archive_name_from_filename from documents.parsers import get_default_file_extension @@ -208,10 +207,21 @@ class Document(models.Model): max_length=1024, editable=False, default=None, + unique=True, null=True, help_text=_("Current filename in storage") ) + archive_filename = models.FilePathField( + _("archive filename"), + max_length=1024, + editable=False, + default=None, + unique=True, + null=True, + help_text=_("Current archive filename in storage") + ) + archive_serial_number = models.IntegerField( _("archive serial number"), blank=True, @@ -256,16 +266,19 @@ class Document(models.Model): return open(self.source_path, "rb") @property - def archive_path(self): - if self.filename: - fname = archive_name_from_filename(self.filename) - else: - fname = "{:07}.pdf".format(self.pk) + def has_archive_version(self): + return self.archive_filename is not None + + @property + def archive_path(self): + if self.has_archive_version: + return os.path.join( + settings.ARCHIVE_DIR, + str(self.archive_filename) + ) + else: + return None - return os.path.join( - settings.ARCHIVE_DIR, - fname - ) @property def archive_file(self): diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index b8fd73f98..0b385e81b 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -88,7 +88,7 @@ def check_sanity(): )) # Check sanity of the archive file. - if doc.archive_checksum: + if doc.has_archive_version: if not os.path.isfile(doc.archive_path): messages.append(SanityError( f"Archived version of document {doc.pk} does not exist." diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 848bcb900..5d46dc431 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -14,7 +14,7 @@ from filelock import FileLock from .. import index, matching from ..file_handling import delete_empty_directories, \ - create_source_path_directory, archive_name_from_filename, \ + create_source_path_directory, \ generate_unique_filename from ..models import Document, Tag @@ -148,18 +148,18 @@ def set_tags(sender, @receiver(models.signals.post_delete, sender=Document) def cleanup_document_deletion(sender, instance, using, **kwargs): with FileLock(settings.MEDIA_LOCK): - for f in (instance.source_path, - instance.archive_path, - instance.thumbnail_path): - if os.path.isfile(f): + for filename in (instance.source_path, + instance.archive_path, + instance.thumbnail_path): + if filename and os.path.isfile(filename): try: - os.unlink(f) + os.unlink(filename) logger.debug( - f"Deleted file {f}.") + f"Deleted file {filename}.") except OSError as e: logger.warning( f"While deleting document {str(instance)}, the file " - f"{f} could not be deleted: {e}" + f"{filename} could not be deleted: {e}" ) delete_empty_directories( @@ -167,10 +167,11 @@ def cleanup_document_deletion(sender, instance, using, **kwargs): root=settings.ORIGINALS_DIR ) - delete_empty_directories( - os.path.dirname(instance.archive_path), - root=settings.ARCHIVE_DIR - ) + if instance.has_archive_version: + delete_empty_directories( + os.path.dirname(instance.archive_path), + root=settings.ARCHIVE_DIR + ) def validate_move(instance, old_path, new_path): @@ -207,8 +208,7 @@ def update_filename_and_move_files(sender, instance, **kwargs): with FileLock(settings.MEDIA_LOCK): old_filename = instance.filename - new_filename = generate_unique_filename( - instance, settings.ORIGINALS_DIR) + new_filename = generate_unique_filename(instance) if new_filename == instance.filename: # Don't do anything if its the same. @@ -222,8 +222,11 @@ def update_filename_and_move_files(sender, instance, **kwargs): # archive files are optional, archive checksum tells us if we have one, # since this is None for documents without archived files. - if instance.archive_checksum: - new_archive_filename = archive_name_from_filename(new_filename) + if instance.has_archive_version: + old_archive_filename = instance.archive_filename + new_archive_filename = generate_unique_filename( + instance, archive_filename=True + ) old_archive_path = instance.archive_path new_archive_path = os.path.join(settings.ARCHIVE_DIR, new_archive_filename) @@ -233,6 +236,8 @@ def update_filename_and_move_files(sender, instance, **kwargs): create_source_path_directory(new_archive_path) else: + old_archive_filename = None + new_archive_filename = None old_archive_path = None new_archive_path = None @@ -240,22 +245,28 @@ def update_filename_and_move_files(sender, instance, **kwargs): try: os.rename(old_source_path, new_source_path) - if instance.archive_checksum: - os.rename(old_archive_path, new_archive_path) instance.filename = new_filename + if instance.has_archive_version: + os.rename(old_archive_path, new_archive_path) + instance.archive_filename = new_archive_filename + # Don't save() here to prevent infinite recursion. Document.objects.filter(pk=instance.pk).update( - filename=new_filename) + filename=instance.filename, + archive_filename=instance.archive_filename, + ) except OSError as e: instance.filename = old_filename + instance.archive_filename = old_archive_filename # this happens when we can't move a file. If that's the case for # the archive file, we try our best to revert the changes. # no need to save the instance, the update() has not happened yet. try: os.rename(new_source_path, old_source_path) - os.rename(new_archive_path, old_archive_path) + if instance.has_archive_version: + os.rename(new_archive_path, old_archive_path) except Exception as e: # This is fine, since: # A: if we managed to move source from A to B, we will also @@ -271,9 +282,10 @@ def update_filename_and_move_files(sender, instance, **kwargs): # since moving them once succeeded, it's very likely going to # succeed again. os.rename(new_source_path, old_source_path) - if instance.archive_checksum: + if instance.has_archive_version: os.rename(new_archive_path, old_archive_path) instance.filename = old_filename + instance.archive_filename = old_archive_filename # again, no need to save the instance, since the actual update() # operation failed. @@ -283,7 +295,7 @@ def update_filename_and_move_files(sender, instance, **kwargs): delete_empty_directories(os.path.dirname(old_source_path), root=settings.ORIGINALS_DIR) - if old_archive_path and not os.path.isfile(old_archive_path): + if instance.has_archive_version and not os.path.isfile(old_archive_path): # NOQA: E501 delete_empty_directories(os.path.dirname(old_archive_path), root=settings.ARCHIVE_DIR) diff --git a/src/documents/views.py b/src/documents/views.py index 5ab4ca9df..3a840567d 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -192,7 +192,7 @@ class DocumentViewSet(RetrieveModelMixin, def file_response(self, pk, request, disposition): doc = Document.objects.get(id=pk) - if not self.original_requested(request) and os.path.isfile(doc.archive_path): # NOQA: E501 + if not self.original_requested(request) and doc.has_archive_version: # NOQA: E501 file_handle = doc.archive_file filename = doc.get_public_filename(archive=True) mime_type = 'application/pdf' @@ -237,18 +237,18 @@ class DocumentViewSet(RetrieveModelMixin, "original_size": os.stat(doc.source_path).st_size, "original_mime_type": doc.mime_type, "media_filename": doc.filename, - "has_archive_version": os.path.isfile(doc.archive_path), + "has_archive_version": doc.has_archive_version, "original_metadata": self.get_metadata( - doc.source_path, doc.mime_type) + doc.source_path, doc.mime_type), + "archive_checksum": doc.archive_checksum, + "archive_media_filename": doc.archive_filename } - if doc.archive_checksum and os.path.isfile(doc.archive_path): - meta['archive_checksum'] = doc.archive_checksum + if doc.has_archive_version: meta['archive_size'] = os.stat(doc.archive_path).st_size, meta['archive_metadata'] = self.get_metadata( doc.archive_path, "application/pdf") else: - meta['archive_checksum'] = None meta['archive_size'] = None meta['archive_metadata'] = None From 787197bea9cd543265b673c5c5232304e6533798 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:46:32 +0100 Subject: [PATCH 220/898] todo note --- src/documents/management/commands/document_importer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/documents/management/commands/document_importer.py b/src/documents/management/commands/document_importer.py index 7e5d32085..9347b0d4c 100644 --- a/src/documents/management/commands/document_importer.py +++ b/src/documents/management/commands/document_importer.py @@ -151,6 +151,9 @@ class Command(BaseCommand): shutil.copy2(thumbnail_path, document.thumbnail_path) if archive_path: create_source_path_directory(document.archive_path) + # TODO: this assumes that the export is valid and + # archive_filename is present on all documents with + # archived files shutil.copy2(archive_path, document.archive_path) document.save() From 8b6700a138434e8a4ed2597aff45245305e05e20 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:46:42 +0100 Subject: [PATCH 221/898] imports --- src/documents/signals/handlers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 5d46dc431..17260fa8a 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -1,6 +1,5 @@ import logging import os -from subprocess import Popen from django.conf import settings from django.contrib.admin.models import ADDITION, LogEntry From da7503801a64f11001d0e6dd75f823b361f2b04d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:46:59 +0100 Subject: [PATCH 222/898] more sanity checks regarding archive versions --- src/documents/sanity_checker.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index 0b385e81b..61e927c82 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -87,6 +87,18 @@ def check_sanity(): f"Stored: {doc.checksum}, actual: {checksum}." )) + if doc.archive_checksum and not doc.archive_filename: + messages.append(SanityError( + f"Document {doc.pk} has an archive file checksum, but no " + f"archive filename." + )) + + if not doc.archive_checksum and doc.archive_filename: + messages.append(SanityError( + f"Document {doc.pk} has an archive file, but its checksum is " + f"missing." + )) + # Check sanity of the archive file. if doc.has_archive_version: if not os.path.isfile(doc.archive_path): From 44bafa4dc95101a62d6cb5feab5e67019bf780b4 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:47:50 +0100 Subject: [PATCH 223/898] refactor migration tests to allow testing for exceptions while migrating --- src/documents/tests/utils.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/documents/tests/utils.py b/src/documents/tests/utils.py index b9be25d70..da8d3d429 100644 --- a/src/documents/tests/utils.py +++ b/src/documents/tests/utils.py @@ -92,6 +92,7 @@ class TestMigrations(TransactionTestCase): migrate_from = None migrate_to = None + auto_migrate = True def setUp(self): super(TestMigrations, self).setUp() @@ -108,6 +109,12 @@ class TestMigrations(TransactionTestCase): self.setUpBeforeMigration(old_apps) + self.apps = old_apps + + if self.auto_migrate: + self.performMigration() + + def performMigration(self): # Run the migration to test executor = MigrationExecutor(connection) executor.loader.build_graph() # reload. From 0dddf00b8a8bab94b5307b77d818066f9cfe42e6 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:49:29 +0100 Subject: [PATCH 224/898] testing the updated migration --- .../tests/test_migration_archive_files.py | 132 +++++++++++------- 1 file changed, 81 insertions(+), 51 deletions(-) diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index 69c1b51eb..5ae317e37 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -6,21 +6,19 @@ from pathlib import Path from django.conf import settings from django.test import override_settings -from documents.sanity_checker import SanityFailedError -from documents.tasks import sanity_check from documents.tests.utils import DirectoriesMixin, TestMigrations STORAGE_TYPE_GPG = "gpg" -def archive_name_from_filename_old(filename): +def archive_name_from_filename(filename): return os.path.splitext(filename)[0] + ".pdf" def archive_path_old(self): if self.filename: - fname = archive_name_from_filename_old(self.filename) + fname = archive_name_from_filename(self.filename) else: fname = "{:07}.pdf".format(self.pk) @@ -30,24 +28,14 @@ def archive_path_old(self): ) -def archive_name_from_filename_new(filename): - name, ext = os.path.splitext(filename) - if ext == ".pdf": - return filename - else: - return filename + ".pdf" - - -def archive_path_new(self): - if self.filename: - fname = archive_name_from_filename_new(self.filename) - else: - fname = "{:07}.pdf".format(self.pk) - - return os.path.join( - settings.ARCHIVE_DIR, - fname - ) +def archive_path_new(doc): + if doc.archive_filename is not None: + return os.path.join( + settings.ARCHIVE_DIR, + str(doc.archive_filename) + ) + else: + return None def source_path(doc): @@ -75,22 +63,25 @@ def thumbnail_path(doc): ) -def make_test_document(document_class, title: str, filename: str, mime_type: str, original: str, archive: str = None, new: bool = False): +def make_test_document(document_class, title: str, mime_type: str, original: str, original_filename: str, archive: str = None, archive_filename: str = None): doc = document_class() - doc.filename = filename + doc.filename = original_filename doc.title = title doc.mime_type = mime_type doc.content = "the content, does not matter for this test" + doc.save() shutil.copy2(original, source_path(doc)) with open(original, "rb") as f: doc.checksum = hashlib.md5(f.read()).hexdigest() if archive: - if new: + if archive_filename: + doc.archive_filename = archive_filename shutil.copy2(archive, archive_path_new(doc)) else: shutil.copy2(archive, archive_path_old(doc)) + with open(archive, "rb") as f: doc.archive_checksum = hashlib.md5(f.read()).hexdigest() @@ -101,36 +92,42 @@ def make_test_document(document_class, title: str, filename: str, mime_type: str return doc -@override_settings(PAPERLESS_FILENAME_FORMAT="{title}") +simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg") +simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") +simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") +simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") +simple_png = os.path.join(os.path.dirname(__file__), "samples", "simple-noalpha.png") + + +@override_settings(PAPERLESS_FILENAME_FORMAT="") class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): migrate_from = '1011_auto_20210101_2340' migrate_to = '1012_fix_archive_files' def setUpBeforeMigration(self, apps): - simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg") - simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") - simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") - simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") - simple_png = os.path.join(os.path.dirname(__file__), "samples", "simple-noalpha.png") - Document = apps.get_model("documents", "Document") - self.doc_unrelated = make_test_document(Document, "unrelated", "unrelated.txt", "application/pdf", simple_pdf2, simple_pdf2) - self.doc_no_archive = make_test_document(Document, "no_archive", "no_archive.txt", "text/plain", simple_txt) - self.clashA = make_test_document(Document, "clash", "clash.pdf", "application/pdf", simple_pdf, simple_pdf) - self.clashB = make_test_document(Document, "clash", "clash.jpg", "image/jpeg", simple_jpg, simple_pdf) - self.clashC = make_test_document(Document, "clash", "clash.png", "image/png", simple_png, simple_pdf) + doc_no_archive = make_test_document(Document, "no_archive", "text/plain", simple_txt, "no_archive.txt") + clash1 = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf) + clash2 = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf) + clash3 = make_test_document(Document, "clash", "image/png", simple_png, "clash.png", simple_pdf) + clash4 = make_test_document(Document, "clash.png", "application/pdf", simple_pdf2, "clash.png.pdf", simple_pdf2) - self.assertEqual(archive_path_old(self.clashA), archive_path_old(self.clashB)) - self.assertEqual(archive_path_old(self.clashA), archive_path_old(self.clashC)) - self.assertRaises(SanityFailedError, sanity_check) + self.assertEqual(archive_path_old(clash1), archive_path_old(clash2)) + self.assertEqual(archive_path_old(clash1), archive_path_old(clash3)) + self.assertNotEqual(archive_path_old(clash1), archive_path_old(clash4)) def testArchiveFilesMigrated(self): Document = self.apps.get_model('documents', 'Document') for doc in Document.objects.all(): - self.assertTrue(os.path.isfile(archive_path_new(self.clashB))) + if doc.archive_checksum: + self.assertIsNotNone(doc.archive_filename) + self.assertTrue(os.path.isfile(archive_path_new(doc))) + else: + self.assertIsNone(doc.archive_filename) + with open(source_path(doc), "rb") as f: original_checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(original_checksum, doc.checksum) @@ -143,32 +140,32 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): self.assertEqual(Document.objects.filter(archive_checksum__isnull=False).count(), 4) - # this will raise errors when any inconsistencies remain after migration - sanity_check() + +@override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") +class TestMigrateArchiveFilesWithFilenameFormat(TestMigrateArchiveFiles): + pass +@override_settings(PAPERLESS_FILENAME_FORMAT="") class TestMigrateArchiveFilesBackwards(DirectoriesMixin, TestMigrations): migrate_from = '1012_fix_archive_files' migrate_to = '1011_auto_20210101_2340' def setUpBeforeMigration(self, apps): - simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg") - simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") - simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") - simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") Document = apps.get_model("documents", "Document") - self.doc_unrelated = make_test_document(Document, "unrelated", "unrelated.txt", "application/pdf", simple_pdf2, simple_pdf2, new=True) - self.doc_no_archive = make_test_document(Document, "no_archive", "no_archive.txt", "text/plain", simple_txt, new=True) - self.clashB = make_test_document(Document, "clash", "clash.jpg", "image/jpeg", simple_jpg, simple_pdf, new=True) + doc_unrelated = make_test_document(Document, "unrelated", "application/pdf", simple_pdf2, "unrelated.txt", simple_pdf2, "unrelated.pdf") + doc_no_archive = make_test_document(Document, "no_archive", "text/plain", simple_txt, "no_archive.txt") + clashB = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf, "clash_02.pdf") def testArchiveFilesReverted(self): Document = self.apps.get_model('documents', 'Document') for doc in Document.objects.all(): - self.assertTrue(os.path.isfile(archive_path_old(self.clashB))) + if doc.archive_checksum: + self.assertTrue(os.path.isfile(archive_path_old(doc))) with open(source_path(doc), "rb") as f: original_checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(original_checksum, doc.checksum) @@ -178,3 +175,36 @@ class TestMigrateArchiveFilesBackwards(DirectoriesMixin, TestMigrations): with open(archive_path_old(doc), "rb") as f: archive_checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(archive_checksum, doc.archive_checksum) + + self.assertEqual(Document.objects.filter(archive_checksum__isnull=False).count(), 2) + + +@override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") +class TestMigrateArchiveFilesBackwardsWithFilenameFormat(TestMigrateArchiveFilesBackwards): + pass + + +@override_settings(PAPERLESS_FILENAME_FORMAT="") +class TestMigrateArchiveFilesBackwardsErrors(DirectoriesMixin, TestMigrations): + + migrate_from = '1012_fix_archive_files' + migrate_to = '1011_auto_20210101_2340' + auto_migrate = False + + def test_filename_clash(self): + + Document = self.apps.get_model("documents", "Document") + + self.clashA = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf, "clash_02.pdf") + self.clashB = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf, "clash_01.pdf") + + self.assertRaisesMessage(ValueError, "would clash with another archive filename", self.performMigration) + + def test_filename_exists(self): + + Document = self.apps.get_model("documents", "Document") + + self.clashA = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf, "clash.pdf") + self.clashB = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf, "clash_01.pdf") + + self.assertRaisesMessage(ValueError, "file already exists.", self.performMigration) From 866d6f814d0b5b3cbe4d50cad5d29057c3cefb2b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:51:16 +0100 Subject: [PATCH 225/898] update all test cases to address the archive filename changes --- src/documents/tests/test_api.py | 18 +++---- src/documents/tests/test_consumer.py | 13 ++++- src/documents/tests/test_file_handling.py | 52 ++++++++++++++----- src/documents/tests/test_management.py | 2 + .../tests/test_management_exporter.py | 2 +- src/documents/tests/test_sanity_check.py | 2 +- 6 files changed, 64 insertions(+), 25 deletions(-) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index c4cca8fdc..84b3bc185 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -149,19 +149,16 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): @override_settings(PAPERLESS_FILENAME_FORMAT="") def test_download_with_archive(self): - _, filename = tempfile.mkstemp(dir=self.dirs.originals_dir) - content = b"This is a test" content_archive = b"This is the same test but archived" - with open(filename, "wb") as f: - f.write(content) - - filename = os.path.basename(filename) - - doc = Document.objects.create(title="none", filename=filename, + doc = Document.objects.create(title="none", filename="my_document.pdf", + archive_filename="archived.pdf", mime_type="application/pdf") + with open(doc.source_path, "wb") as f: + f.write(content) + with open(doc.archive_path, "wb") as f: f.write(content_archive) @@ -578,7 +575,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): async_task.assert_not_called() def test_get_metadata(self): - doc = Document.objects.create(title="test", filename="file.pdf", mime_type="image/png", archive_checksum="A") + doc = Document.objects.create(title="test", filename="file.pdf", mime_type="image/png", archive_checksum="A", archive_filename="archive.pdf") shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "documents", "thumbnails", "0000001.png"), doc.source_path) shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), doc.archive_path) @@ -592,6 +589,8 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertTrue(meta['has_archive_version']) self.assertEqual(len(meta['original_metadata']), 0) self.assertGreater(len(meta['archive_metadata']), 0) + self.assertEqual(meta['media_filename'], "file.pdf") + self.assertEqual(meta['archive_media_filename'], "archive.pdf") def test_get_metadata_invalid_doc(self): response = self.client.get(f"/api/documents/34576/metadata/") @@ -611,6 +610,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertFalse(meta['has_archive_version']) self.assertGreater(len(meta['original_metadata']), 0) self.assertIsNone(meta['archive_metadata']) + self.assertIsNone(meta['archive_media_filename']) def test_get_empty_suggestions(self): doc = Document.objects.create(title="test", mime_type="application/pdf") diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index b96e4844b..1ed041187 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -296,6 +296,7 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertIsNone(document.correspondent) self.assertIsNone(document.document_type) self.assertEqual(document.filename, "0000001.pdf") + self.assertEqual(document.archive_filename, "0000001.pdf") self.assertTrue(os.path.isfile( document.source_path @@ -454,6 +455,7 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertEqual(document.title, "new docs") self.assertEqual(document.filename, "none/new docs.pdf") + self.assertEqual(document.archive_filename, "none/new docs.pdf") self._assert_first_last_send_progress() @@ -468,7 +470,7 @@ class TestConsumer(DirectoriesMixin, TestCase): filenames.insert(0, f) return f - m.side_effect = lambda f, root: get_filename() + m.side_effect = lambda f, archive_filename = False: get_filename() filename = self.get_test_file() @@ -479,6 +481,7 @@ class TestConsumer(DirectoriesMixin, TestCase): self.assertEqual(document.title, "new docs") self.assertIsNotNone(os.path.isfile(document.title)) self.assertTrue(os.path.isfile(document.source_path)) + self.assertTrue(os.path.isfile(document.archive_path)) self._assert_first_last_send_progress() @@ -553,8 +556,16 @@ class TestConsumer(DirectoriesMixin, TestCase): doc2 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.pdf")) doc3 = self.consumer.try_consume_file(os.path.join(settings.CONSUMPTION_DIR, "simple.png.pdf")) + self.assertEqual(doc1.filename, "simple.png") + self.assertEqual(doc1.archive_filename, "simple.pdf") + self.assertEqual(doc2.filename, "simple.pdf") + self.assertEqual(doc2.archive_filename, "simple_01.pdf") + self.assertEqual(doc3.filename, "simple.png.pdf") + self.assertEqual(doc3.archive_filename, "simple.png.pdf") + sanity_check() + class PreConsumeTestCase(TestCase): @mock.patch("documents.consumer.Popen") diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index ae25c0f12..fd74aad7d 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -448,7 +448,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() Path(archive).touch() - doc = Document.objects.create(mime_type="application/pdf", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", filename="0000001.pdf", checksum="A", archive_filename="0000001.pdf", archive_checksum="B") self.assertTrue(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) @@ -461,7 +461,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() Path(archive).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") self.assertFalse(os.path.isfile(original)) self.assertFalse(os.path.isfile(archive)) @@ -475,7 +475,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf") archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") self.assertTrue(os.path.isfile(original)) self.assertFalse(os.path.isfile(archive)) @@ -486,16 +486,19 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): def test_move_archive_exists(self): original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf") archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") + existing_archive_file = os.path.join(settings.ARCHIVE_DIR, "none", "my_doc.pdf") Path(original).touch() Path(archive).touch() os.makedirs(os.path.join(settings.ARCHIVE_DIR, "none")) - Path(os.path.join(settings.ARCHIVE_DIR, "none", "my_doc.pdf")).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + Path(existing_archive_file).touch() + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") - self.assertTrue(os.path.isfile(original)) - self.assertTrue(os.path.isfile(archive)) + self.assertFalse(os.path.isfile(original)) + self.assertFalse(os.path.isfile(archive)) self.assertTrue(os.path.isfile(doc.source_path)) self.assertTrue(os.path.isfile(doc.archive_path)) + self.assertTrue(os.path.isfile(existing_archive_file)) + self.assertEqual(doc.archive_filename, "none/my_doc_01.pdf") @override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") @mock.patch("documents.signals.handlers.os.rename") @@ -514,7 +517,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() Path(archive).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") self.assertTrue(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) @@ -527,7 +530,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") #Path(original).touch() Path(archive).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", archive_filename="0000001.pdf", checksum="A", archive_checksum="B") self.assertFalse(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) @@ -551,7 +554,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() Path(archive).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", archive_filename="0000001.pdf", checksum="A", archive_checksum="B") self.assertTrue(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) @@ -564,7 +567,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() Path(archive).touch() - doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") self.assertTrue(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) @@ -578,6 +581,28 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): self.assertFalse(os.path.isfile(doc.source_path)) self.assertFalse(os.path.isfile(doc.archive_path)) + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") + def test_archive_deleted2(self): + original = os.path.join(settings.ORIGINALS_DIR, "document.png") + original2 = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf") + archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") + Path(original).touch() + Path(original2).touch() + Path(archive).touch() + + doc1 = Document.objects.create(mime_type="image/png", title="document", filename="document.png", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") + doc2 = Document.objects.create(mime_type="application/pdf", title="0000001", filename="0000001.pdf", checksum="C") + + self.assertTrue(os.path.isfile(doc1.source_path)) + self.assertTrue(os.path.isfile(doc1.archive_path)) + self.assertTrue(os.path.isfile(doc2.source_path)) + + doc2.delete() + + self.assertTrue(os.path.isfile(doc1.source_path)) + self.assertTrue(os.path.isfile(doc1.archive_path)) + self.assertFalse(os.path.isfile(doc2.source_path)) + @override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") def test_database_error(self): @@ -585,7 +610,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf") Path(original).touch() Path(archive).touch() - doc = Document(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B") + doc = Document(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_filename="0000001.pdf", archive_checksum="B") with mock.patch("documents.signals.handlers.Document.objects.filter") as m: m.side_effect = DatabaseError() doc.save() @@ -595,6 +620,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): self.assertTrue(os.path.isfile(doc.source_path)) self.assertTrue(os.path.isfile(doc.archive_path)) + class TestFilenameGeneration(TestCase): @override_settings( @@ -618,7 +644,7 @@ class TestFilenameGeneration(TestCase): def run(): doc = Document.objects.create(checksum=str(uuid.uuid4()), title=str(uuid.uuid4()), content="wow") - doc.filename = generate_unique_filename(doc, settings.ORIGINALS_DIR) + doc.filename = generate_unique_filename(doc) Path(doc.thumbnail_path).touch() with open(doc.source_path, "w") as f: f.write(str(uuid.uuid4())) diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index ac119a431..38425a0aa 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -20,6 +20,7 @@ from documents.tests.utils import DirectoriesMixin sample_file = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") +@override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") class TestArchiver(DirectoriesMixin, TestCase): def make_models(self): @@ -45,6 +46,7 @@ class TestArchiver(DirectoriesMixin, TestCase): self.assertTrue(os.path.isfile(doc.archive_path)) self.assertTrue(os.path.isfile(doc.source_path)) self.assertTrue(filecmp.cmp(sample_file, doc.source_path)) + self.assertEqual(doc.archive_filename, "none/A.pdf") class TestDecryptDocuments(TestCase): diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index 986e458b9..cdc745305 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -22,7 +22,7 @@ class TestExportImport(DirectoriesMixin, TestCase): self.target = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.target) - self.d1 = Document.objects.create(content="Content", checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", title="wow1", filename="0000001.pdf", mime_type="application/pdf") + self.d1 = Document.objects.create(content="Content", checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", title="wow1", filename="0000001.pdf", mime_type="application/pdf", archive_filename="0000001.pdf") self.d2 = Document.objects.create(content="Content", checksum="9c9691e51741c1f4f41a20896af31770", title="wow2", filename="0000002.pdf", mime_type="application/pdf") self.d3 = Document.objects.create(content="Content", checksum="d38d7ed02e988e072caf924e0f3fcb76", title="wow2", filename="0000003.pdf", mime_type="application/pdf") self.d4 = Document.objects.create(content="Content", checksum="82186aaa94f0b98697d704b90fd1c072", title="wow_dec", filename="0000004.pdf.gpg", mime_type="application/pdf", storage_type=Document.STORAGE_TYPE_GPG) diff --git a/src/documents/tests/test_sanity_check.py b/src/documents/tests/test_sanity_check.py index 0554cd7cd..d7ab1e07f 100644 --- a/src/documents/tests/test_sanity_check.py +++ b/src/documents/tests/test_sanity_check.py @@ -21,7 +21,7 @@ class TestSanityCheck(DirectoriesMixin, TestCase): shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "documents", "archive", "0000001.pdf"), os.path.join(self.dirs.archive_dir, "0000001.pdf")) shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "documents", "thumbnails", "0000001.png"), os.path.join(self.dirs.thumbnail_dir, "0000001.png")) - return Document.objects.create(title="test", checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", content="test", pk=1, filename="0000001.pdf", mime_type="application/pdf") + return Document.objects.create(title="test", checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", content="test", pk=1, filename="0000001.pdf", mime_type="application/pdf", archive_filename="0000001.pdf") def test_no_docs(self): self.assertEqual(len(check_sanity()), 0) From ee09266e65a0529de1b52aad4e360f249bb7a206 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 19:51:25 +0100 Subject: [PATCH 226/898] test resources --- src/clash.pdf | Bin 0 -> 10862 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/clash.pdf diff --git a/src/clash.pdf b/src/clash.pdf new file mode 100644 index 0000000000000000000000000000000000000000..304fbe71785e0320b55414484ff07b4ebe558dd7 GIT binary patch literal 10862 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 literal 0 HcmV?d00001 From 7d1ab9f0d93a738c8082aa5123fd77ea37cc1951 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 20:46:41 +0100 Subject: [PATCH 227/898] codestyle --- src/documents/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/documents/models.py b/src/documents/models.py index 47433724a..1b94b3cc9 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -279,7 +279,6 @@ class Document(models.Model): else: return None - @property def archive_file(self): return open(self.archive_path, "rb") From ed740f74f096507e7c1f1a699e3c7cdba91f1b45 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 20:54:02 +0100 Subject: [PATCH 228/898] fix migration and more tests --- .../migrations/1012_fix_archive_files.py | 2 +- .../tests/test_migration_archive_files.py | 33 ++++++++++++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index 5db503391..5102522ba 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -192,7 +192,7 @@ def move_old_to_new_locations(apps, schema_editor): os.unlink(old_path) else: # Set archive path for unaffected files - doc.archive_filename = archive_path_old(doc) + doc.archive_filename = archive_name_from_filename(doc.filename) Document.objects.filter(id=doc.id).update( archive_filename=doc.archive_filename ) diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index 5ae317e37..c4421e8e5 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -108,15 +108,15 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): def setUpBeforeMigration(self, apps): Document = apps.get_model("documents", "Document") - doc_no_archive = make_test_document(Document, "no_archive", "text/plain", simple_txt, "no_archive.txt") - clash1 = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf) - clash2 = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf) - clash3 = make_test_document(Document, "clash", "image/png", simple_png, "clash.png", simple_pdf) - clash4 = make_test_document(Document, "clash.png", "application/pdf", simple_pdf2, "clash.png.pdf", simple_pdf2) + self.doc_no_archive = make_test_document(Document, "no_archive", "text/plain", simple_txt, "no_archive.txt") + self.clash1 = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf) + self.clash2 = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf) + self.clash3 = make_test_document(Document, "clash", "image/png", simple_png, "clash.png", simple_pdf) + self.clash4 = make_test_document(Document, "clash.png", "application/pdf", simple_pdf2, "clash.png.pdf", simple_pdf2) - self.assertEqual(archive_path_old(clash1), archive_path_old(clash2)) - self.assertEqual(archive_path_old(clash1), archive_path_old(clash3)) - self.assertNotEqual(archive_path_old(clash1), archive_path_old(clash4)) + self.assertEqual(archive_path_old(self.clash1), archive_path_old(self.clash2)) + self.assertEqual(archive_path_old(self.clash1), archive_path_old(self.clash3)) + self.assertNotEqual(archive_path_old(self.clash1), archive_path_old(self.clash4)) def testArchiveFilesMigrated(self): Document = self.apps.get_model('documents', 'Document') @@ -140,10 +140,25 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): self.assertEqual(Document.objects.filter(archive_checksum__isnull=False).count(), 4) + def test_filenames(self): + Document = self.apps.get_model('documents', 'Document') + self.assertEqual(Document.objects.get(id=self.doc_no_archive.id).archive_filename, None) + self.assertEqual(Document.objects.get(id=self.clash1.id).archive_filename, f"{self.clash1.id:07}.pdf") + self.assertEqual(Document.objects.get(id=self.clash2.id).archive_filename, f"{self.clash2.id:07}.pdf") + self.assertEqual(Document.objects.get(id=self.clash3.id).archive_filename, f"{self.clash3.id:07}.pdf") + self.assertEqual(Document.objects.get(id=self.clash4.id).archive_filename, "clash.png.pdf") + @override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") class TestMigrateArchiveFilesWithFilenameFormat(TestMigrateArchiveFiles): - pass + + def test_filenames(self): + Document = self.apps.get_model('documents', 'Document') + self.assertEqual(Document.objects.get(id=self.doc_no_archive.id).archive_filename, None) + self.assertEqual(Document.objects.get(id=self.clash1.id).archive_filename, "none/clash.pdf") + self.assertEqual(Document.objects.get(id=self.clash2.id).archive_filename, "none/clash_01.pdf") + self.assertEqual(Document.objects.get(id=self.clash3.id).archive_filename, "none/clash_02.pdf") + self.assertEqual(Document.objects.get(id=self.clash4.id).archive_filename, "clash.png.pdf") @override_settings(PAPERLESS_FILENAME_FORMAT="") From 881e644d2a7df8dca0a79a046edd8fac2f11c462 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 21:00:04 +0100 Subject: [PATCH 229/898] more info in the admin --- src/documents/admin.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/documents/admin.py b/src/documents/admin.py index 266422d51..7cc33dc20 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -50,7 +50,11 @@ class DocumentAdmin(admin.ModelAdmin): "modified", "mime_type", "storage_type", - "filename") + "filename", + "checksum", + "archive_filename", + "archive_checksum" + ) list_display_links = ("title",) From c7b46f43b8844c2573ebf3eeda1d8752f96903b2 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 21:53:10 +0100 Subject: [PATCH 230/898] todo note #520 --- src/documents/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/documents/views.py b/src/documents/views.py index 3a840567d..9d1d87235 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -291,6 +291,8 @@ class DocumentViewSet(RetrieveModelMixin, handle = GnuPG.decrypted(doc.thumbnail_file) else: handle = doc.thumbnail_file + # TODO: Send ETag information and use that to send new thumbnails + # if available return HttpResponse(handle, content_type='image/png') except (FileNotFoundError, Document.DoesNotExist): From b04d91d68c5ebcff43f2e59079a7d128e3270938 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 22:12:43 +0100 Subject: [PATCH 231/898] fix a bug with thumbnail generation when TIKA was enabled --- src/documents/consumer.py | 2 +- .../management/commands/document_thumbnails.py | 5 ++++- src/documents/parsers.py | 9 ++++++--- src/documents/tests/test_consumer.py | 12 ++++++------ src/documents/tests/test_parsers.py | 8 ++++---- src/paperless_tesseract/parsers.py | 2 +- src/paperless_text/parsers.py | 2 +- src/paperless_tika/parsers.py | 4 ++-- 8 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index acb3ad33f..3fd62fabc 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -241,7 +241,7 @@ class Consumer(LoggingMixin): self._send_progress(70, 100, 'WORKING', MESSAGE_GENERATING_THUMBNAIL) thumbnail = document_parser.get_optimised_thumbnail( - self.path, mime_type) + self.path, mime_type, self.filename) text = document_parser.get_text() date = document_parser.get_date() diff --git a/src/documents/management/commands/document_thumbnails.py b/src/documents/management/commands/document_thumbnails.py index cf2cbeb77..b7f935e3b 100644 --- a/src/documents/management/commands/document_thumbnails.py +++ b/src/documents/management/commands/document_thumbnails.py @@ -22,7 +22,10 @@ def _process_document(doc_in): try: thumb = parser.get_optimised_thumbnail( - document.source_path, document.mime_type) + document.source_path, + document.mime_type, + document.get_public_filename() + ) shutil.move(thumb, document.thumbnail_path) finally: diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 98af4f080..1ed5deb3c 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -288,14 +288,17 @@ class DocumentParser(LoggingMixin): def get_archive_path(self): return self.archive_path - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): """ Returns the path to a file we can use as a thumbnail for this document. """ raise NotImplementedError() - def get_optimised_thumbnail(self, document_path, mime_type): - thumbnail = self.get_thumbnail(document_path, mime_type) + def get_optimised_thumbnail(self, + document_path, + mime_type, + file_name=None): + thumbnail = self.get_thumbnail(document_path, mime_type, file_name) if settings.OPTIMIZE_THUMBNAILS: out_path = os.path.join(self.tempdir, "thumb_optipng.png") diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 1ed041187..44effd39e 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -167,7 +167,7 @@ class TestFieldPermutations(TestCase): class DummyParser(DocumentParser): - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): # not important during tests raise NotImplementedError() @@ -176,7 +176,7 @@ class DummyParser(DocumentParser): _, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=scratch_dir) self.archive_path = archive_path - def get_optimised_thumbnail(self, document_path, mime_type): + def get_optimised_thumbnail(self, document_path, mime_type, file_name=None): return self.fake_thumb def parse(self, document_path, mime_type, file_name=None): @@ -185,10 +185,10 @@ class DummyParser(DocumentParser): class CopyParser(DocumentParser): - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): return self.fake_thumb - def get_optimised_thumbnail(self, document_path, mime_type): + def get_optimised_thumbnail(self, document_path, mime_type, file_name=None): return self.fake_thumb def __init__(self, logging_group, progress_callback=None): @@ -203,7 +203,7 @@ class CopyParser(DocumentParser): class FaultyParser(DocumentParser): - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): # not important during tests raise NotImplementedError() @@ -211,7 +211,7 @@ class FaultyParser(DocumentParser): super(FaultyParser, self).__init__(logging_group) _, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=scratch_dir) - def get_optimised_thumbnail(self, document_path, mime_type): + def get_optimised_thumbnail(self, document_path, mime_type, file_name=None): return self.fake_thumb def parse(self, document_path, mime_type, file_name=None): diff --git a/src/documents/tests/test_parsers.py b/src/documents/tests/test_parsers.py index 8da6470a4..9dd74313f 100644 --- a/src/documents/tests/test_parsers.py +++ b/src/documents/tests/test_parsers.py @@ -68,7 +68,7 @@ class TestParserDiscovery(TestCase): ) -def fake_get_thumbnail(self, path, mimetype): +def fake_get_thumbnail(self, path, mimetype, file_name): return os.path.join(os.path.dirname(__file__), "examples", "no-text.png") @@ -89,15 +89,15 @@ class TestBaseParser(TestCase): def test_get_optimised_thumbnail(self): parser = DocumentParser(None) - parser.get_optimised_thumbnail("any", "not important") + parser.get_optimised_thumbnail("any", "not important", "document.pdf") @mock.patch("documents.parsers.DocumentParser.get_thumbnail", fake_get_thumbnail) @override_settings(OPTIMIZE_THUMBNAILS=False) def test_get_optimised_thumb_disabled(self): parser = DocumentParser(None) - path = parser.get_optimised_thumbnail("any", "not important") - self.assertEqual(path, fake_get_thumbnail(None, None, None)) + path = parser.get_optimised_thumbnail("any", "not important", "document.pdf") + self.assertEqual(path, fake_get_thumbnail(None, None, None, None)) class TestParserAvailability(TestCase): diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 0a976b569..271a840df 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -48,7 +48,7 @@ class RasterisedDocumentParser(DocumentParser): ) return result - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): return make_thumbnail_from_pdf( document_path, self.tempdir, self.logging_group) diff --git a/src/paperless_text/parsers.py b/src/paperless_text/parsers.py index c307bf10b..837f05c9f 100644 --- a/src/paperless_text/parsers.py +++ b/src/paperless_text/parsers.py @@ -13,7 +13,7 @@ class TextDocumentParser(DocumentParser): logging_name = "paperless.parsing.text" - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): def read_text(): with open(document_path, 'r') as src: diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index b888af820..6b0f62ada 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -16,9 +16,9 @@ class TikaDocumentParser(DocumentParser): logging_name = "paperless.parsing.tika" - def get_thumbnail(self, document_path, mime_type): + def get_thumbnail(self, document_path, mime_type, file_name=None): if not self.archive_path: - self.archive_path = self.convert_to_pdf(document_path) + self.archive_path = self.convert_to_pdf(document_path, file_name) return make_thumbnail_from_pdf( self.archive_path, self.tempdir, self.logging_group) From c89be9212747786f1adedf6d384c19dfb50ffd65 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 23:03:07 +0100 Subject: [PATCH 232/898] added ASN to filename format #519 --- docs/advanced_usage.rst | 1 + src/documents/file_handling.py | 6 ++++++ src/documents/tests/test_file_handling.py | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst index 8f6b91b4c..c64df4317 100644 --- a/docs/advanced_usage.rst +++ b/docs/advanced_usage.rst @@ -217,6 +217,7 @@ will create a directory structure as follows: Paperless provides the following placeholders withing filenames: +* ``{asn}``: The archive serial number of the document, or "none". * ``{correspondent}``: The name of the correspondent, or "none". * ``{document_type}``: The name of the document type, or "none". * ``{tag_list}``: A comma separated list of all tags assigned to the document. diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index 535aa3d2c..8c0e2148b 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -131,6 +131,11 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): else: document_type = "none" + if doc.archive_serial_number: + asn = str(doc.archive_serial_number) + else: + asn = "none" + path = settings.PAPERLESS_FILENAME_FORMAT.format( title=pathvalidate.sanitize_filename( doc.title, replacement_text="-"), @@ -144,6 +149,7 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): added_year=doc.added.year if doc.added else "none", added_month=f"{doc.added.month:02}" if doc.added else "none", added_day=f"{doc.added.day:02}" if doc.added else "none", + asn=asn, tags=tags, tag_list=tag_list ).strip() diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index fd74aad7d..927c865c6 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -201,6 +201,13 @@ class TestFileHandling(DirectoriesMixin, TestCase): self.assertEqual(generate_filename(d), "my_doc_type - the_doc.pdf") + @override_settings(PAPERLESS_FILENAME_FORMAT="{asn} - {title}") + def test_asn(self): + d1 = Document.objects.create(title="the_doc", mime_type="application/pdf", archive_serial_number=652, checksum="A") + d2 = Document.objects.create(title="the_doc", mime_type="application/pdf", archive_serial_number=None, checksum="B") + self.assertEqual(generate_filename(d1), "652 - the_doc.pdf") + self.assertEqual(generate_filename(d2), "none - the_doc.pdf") + @override_settings(PAPERLESS_FILENAME_FORMAT="{tags[type]}") def test_tags_with_underscore(self): document = Document() From c826b460a89a32bbeda4b41034b691568b0e2cf8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 9 Feb 2021 23:23:11 +0100 Subject: [PATCH 233/898] changelog --- docs/changelog.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 537e898c7..9ab83bc1a 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,22 @@ Changelog ********* +paperless-ng 1.1.1 +################## + +* Fixed a bug in the sanity checker that would cause it to display "x not in list" errors instead of actual issues. + +* Fixed a bug with filename generation for archive filenames that would cause the archive files of two documents to overlap. + + * This happened when ``PAPERLESS_FILENAME_FORMAT`` is used and the filename for two documents is the same, except for the file extension. + * Paperless will now store the archive filename in the database as well instead of deriving it from the original filename, and use the + same logic for detecting and avoiding filename clashes that's also used for original filenames. + * The migrations will repair any missing archive files. If you're using tika, ensure that tika is running while performing the migration. Docker will take care of that. + +* Fixed a bug with thumbnail regeneration when TIKA integration was used. + +* Added ASN as a placeholder field to the filename format. + paperless-ng 1.1.0 ################## @@ -17,7 +33,7 @@ paperless-ng 1.1.0 or added with one of the mobile apps. * Documents are successfully added to paperless. * Document consumption failed (with error messages) - + * Configuration options to enable/disable individual notifications. * Live updates to document lists and saved views when new documents are added. From 3293369f84ed8fd91ce9a92d55e2ab7cfff09148 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 00:52:01 +0100 Subject: [PATCH 234/898] better logging for the migration --- src/documents/migrations/1012_fix_archive_files.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index 5102522ba..04670829f 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -163,7 +163,7 @@ def move_old_to_new_locations(apps, schema_editor): if not os.path.isfile(old_path): raise ValueError( - f"Archived document of {doc.filename} does not exist at: " + f"Archived document ID:{doc.id} does not exist at: " f"{old_path}") if old_path in old_archive_path_to_id: @@ -180,7 +180,7 @@ def move_old_to_new_locations(apps, schema_editor): parser_class = get_parser_class_for_mime_type(doc.mime_type) if not parser_class: raise Exception( - f"document {doc.filename} has an invalid archived document, " + f"Document ID:{doc.id} has an invalid archived document, " f"but no parsers are available. Cannot migrate.") for doc in Document.objects.filter(archive_checksum__isnull=False): @@ -205,7 +205,7 @@ def move_old_to_new_locations(apps, schema_editor): doc = Document.objects.get(id=doc_id) logger.info( - f"Regenerating archive document for {doc.filename}" + f"Regenerating archive document for document ID:{doc.id}" ) parser_class = get_parser_class_for_mime_type(doc.mime_type) parser: DocumentParser = parser_class(None, None) @@ -222,10 +222,16 @@ def move_old_to_new_locations(apps, schema_editor): shutil.copy2(parser.get_archive_path(), archive_path_new(doc)) else: doc.archive_checksum = None + logger.error( + f"Parser did not return an archive document for document " + f"ID:{doc.id}. Removing archive document." + ) doc.save() except ParseError: logger.exception( - f"Unable to regenerate archive document for {doc.filename}" + f"Unable to regenerate archive document for ID:{doc.id}. You " + f"need to invoke the document_archiver management command " + f"manually for that document." ) finally: parser.cleanup() From fc3a5f2e69d27d8292481e98f7dd739cf86e7e17 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 00:52:18 +0100 Subject: [PATCH 235/898] sanity checker testing --- src/documents/sanity_checker.py | 8 +++----- src/documents/tests/test_sanity_check.py | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index 61e927c82..2d30a59d7 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -87,20 +87,18 @@ def check_sanity(): f"Stored: {doc.checksum}, actual: {checksum}." )) + # Check sanity of the archive file. if doc.archive_checksum and not doc.archive_filename: messages.append(SanityError( f"Document {doc.pk} has an archive file checksum, but no " f"archive filename." )) - - if not doc.archive_checksum and doc.archive_filename: + elif not doc.archive_checksum and doc.archive_filename: messages.append(SanityError( f"Document {doc.pk} has an archive file, but its checksum is " f"missing." )) - - # Check sanity of the archive file. - if doc.has_archive_version: + elif doc.has_archive_version: if not os.path.isfile(doc.archive_path): messages.append(SanityError( f"Archived version of document {doc.pk} does not exist." diff --git a/src/documents/tests/test_sanity_check.py b/src/documents/tests/test_sanity_check.py index d7ab1e07f..fae18aaca 100644 --- a/src/documents/tests/test_sanity_check.py +++ b/src/documents/tests/test_sanity_check.py @@ -86,6 +86,19 @@ class TestSanityCheck(DirectoriesMixin, TestCase): Path(self.dirs.originals_dir, "orphaned").touch() self.assertEqual(len(check_sanity()), 1) - def test_all(self): - Document.objects.create(title="test", checksum="dgfhj", archive_checksum="dfhg", content="", pk=1, filename="0000001.pdf") + def test_error_tostring(self): + Document.objects.create(title="test", checksum="dgfhj", archive_checksum="dfhg", content="", pk=1, filename="0000001.pdf", archive_filename="0000001.pdf") string = str(SanityFailedError(check_sanity())) + self.assertIsNotNone(string) + + def test_archive_filename_no_checksum(self): + doc = self.make_test_data() + doc.archive_checksum = None + doc.save() + self.assertEqual(len(check_sanity()), 2) + + def test_archive_checksum_no_filename(self): + doc = self.make_test_data() + doc.archive_filename = None + doc.save() + self.assertEqual(len(check_sanity()), 2) From 212093b96ce18d50bcad77751692b9fef968a23f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 01:12:45 +0100 Subject: [PATCH 236/898] document renamer testing --- src/documents/tests/test_management.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index 38425a0aa..978dff8b3 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -110,23 +110,25 @@ class TestRenamer(DirectoriesMixin, TestCase): @override_settings(PAPERLESS_FILENAME_FORMAT="") def test_rename(self): - doc = Document.objects.create(title="test", mime_type="application/pdf") + doc = Document.objects.create(title="test", mime_type="image/jpeg") doc.filename = generate_filename(doc) + doc.archive_filename = generate_filename(doc, archive_filename=True) doc.save() Path(doc.source_path).touch() + Path(doc.archive_path).touch() - old_source_path = doc.source_path - - with override_settings(PAPERLESS_FILENAME_FORMAT="{title}"): + with override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}"): call_command("document_renamer") doc2 = Document.objects.get(id=doc.id) - self.assertEqual(doc2.filename, "test.pdf") - self.assertFalse(os.path.isfile(old_source_path)) + self.assertEqual(doc2.filename, "none/test.jpg") + self.assertEqual(doc2.archive_filename, "none/test.pdf") self.assertFalse(os.path.isfile(doc.source_path)) + self.assertFalse(os.path.isfile(doc.archive_path)) self.assertTrue(os.path.isfile(doc2.source_path)) + self.assertTrue(os.path.isfile(doc2.archive_path)) class TestCreateClassifier(TestCase): From f1f0c7bd5ce1b2c9553b0461a23daa2a9a208e6c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 01:31:15 +0100 Subject: [PATCH 237/898] more testing --- .../tests/test_migration_archive_files.py | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index c4421e8e5..637aaeee0 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -95,8 +95,10 @@ def make_test_document(document_class, title: str, mime_type: str, original: str simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg") simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") simple_pdf2 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000002.pdf") +simple_pdf3 = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000003.pdf") simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt") simple_png = os.path.join(os.path.dirname(__file__), "samples", "simple-noalpha.png") +simple_png2 = os.path.join(os.path.dirname(__file__), "examples", "no-text.png") @override_settings(PAPERLESS_FILENAME_FORMAT="") @@ -108,6 +110,8 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): def setUpBeforeMigration(self, apps): Document = apps.get_model("documents", "Document") + self.unrelated = make_test_document(Document, "unrelated", "application/pdf", simple_pdf3, "unrelated.pdf", simple_pdf) + self.no_text = make_test_document(Document, "no-text", "image/png", simple_png2, "no-text.png", simple_pdf) self.doc_no_archive = make_test_document(Document, "no_archive", "text/plain", simple_txt, "no_archive.txt") self.clash1 = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf) self.clash2 = make_test_document(Document, "clash", "image/jpeg", simple_jpg, "clash.jpg", simple_pdf) @@ -138,10 +142,12 @@ class TestMigrateArchiveFiles(DirectoriesMixin, TestMigrations): archive_checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(archive_checksum, doc.archive_checksum) - self.assertEqual(Document.objects.filter(archive_checksum__isnull=False).count(), 4) + self.assertEqual(Document.objects.filter(archive_checksum__isnull=False).count(), 6) def test_filenames(self): Document = self.apps.get_model('documents', 'Document') + self.assertEqual(Document.objects.get(id=self.unrelated.id).archive_filename, "unrelated.pdf") + self.assertEqual(Document.objects.get(id=self.no_text.id).archive_filename, "no-text.pdf") self.assertEqual(Document.objects.get(id=self.doc_no_archive.id).archive_filename, None) self.assertEqual(Document.objects.get(id=self.clash1.id).archive_filename, f"{self.clash1.id:07}.pdf") self.assertEqual(Document.objects.get(id=self.clash2.id).archive_filename, f"{self.clash2.id:07}.pdf") @@ -154,6 +160,8 @@ class TestMigrateArchiveFilesWithFilenameFormat(TestMigrateArchiveFiles): def test_filenames(self): Document = self.apps.get_model('documents', 'Document') + self.assertEqual(Document.objects.get(id=self.unrelated.id).archive_filename, "unrelated.pdf") + self.assertEqual(Document.objects.get(id=self.no_text.id).archive_filename, "no-text.pdf") self.assertEqual(Document.objects.get(id=self.doc_no_archive.id).archive_filename, None) self.assertEqual(Document.objects.get(id=self.clash1.id).archive_filename, "none/clash.pdf") self.assertEqual(Document.objects.get(id=self.clash2.id).archive_filename, "none/clash_01.pdf") @@ -161,6 +169,23 @@ class TestMigrateArchiveFilesWithFilenameFormat(TestMigrateArchiveFiles): self.assertEqual(Document.objects.get(id=self.clash4.id).archive_filename, "clash.png.pdf") +@override_settings(PAPERLESS_FILENAME_FORMAT="") +class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations): + + migrate_from = '1011_auto_20210101_2340' + migrate_to = '1012_fix_archive_files' + auto_migrate = False + + def test_archive_missing(self): + + Document = self.apps.get_model("documents", "Document") + + doc = make_test_document(Document, "clash", "application/pdf", simple_pdf, "clash.pdf", simple_pdf) + os.unlink(archive_path_old(doc)) + + self.assertRaisesMessage(ValueError, "does not exist at: ", self.performMigration) + + @override_settings(PAPERLESS_FILENAME_FORMAT="") class TestMigrateArchiveFilesBackwards(DirectoriesMixin, TestMigrations): From a1744534d57f2197acf2688d4f754608f2e6b7bf Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 11:50:57 +0100 Subject: [PATCH 238/898] update dependencies --- Pipfile.lock | 80 ++++++++++++++++++++++-------------------------- requirements.txt | 10 +++--- 2 files changed, 41 insertions(+), 49 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index c3d57fc7d..f6a672b1b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -190,24 +190,16 @@ }, "cryptography": { "hashes": [ - "sha256:0003a52a123602e1acee177dc90dd201f9bb1e73f24a070db7d36c588e8f5c7d", - "sha256:0e85aaae861d0485eb5a79d33226dd6248d2a9f133b81532c8f5aae37de10ff7", - "sha256:594a1db4511bc4d960571536abe21b4e5c3003e8750ab8365fafce71c5d86901", - "sha256:69e836c9e5ff4373ce6d3ab311c1a2eed274793083858d3cd4c7d12ce20d5f9c", - "sha256:788a3c9942df5e4371c199d10383f44a105d67d401fb4304178020142f020244", - "sha256:7e177e4bea2de937a584b13645cab32f25e3d96fc0bc4a4cf99c27dc77682be6", - "sha256:83d9d2dfec70364a74f4e7c70ad04d3ca2e6a08b703606993407bf46b97868c5", - "sha256:84ef7a0c10c24a7773163f917f1cb6b4444597efd505a8aed0a22e8c4780f27e", - "sha256:982f661bffc7a24b6d4f8ebe3291f17cf3833a0941c6f4d9d55c790b9aa2cdb3", - "sha256:9e21301f7a1e7c03dbea73e8602905a4ebba641547a462b26dd03451e5769e7c", - "sha256:9f6b0492d111b43de5f70052e24c1f0951cb9e6022188ebcb1cc3a3d301469b0", - "sha256:a69bd3c68b98298f490e84519b954335154917eaab52cf582fa2c5c7efc6e812", - "sha256:b4890d5fb9b7a23e3bf8abf5a8a7da8e228f1e97dc96b30b95685df840b6914a", - "sha256:c366df0401d1ec4e548bebe8f91d55ebcc0ec3137900d214dd7aac8427ef3030", - "sha256:dc42f645f8f3a489c3dd416730a514e7a91a59510ddaadc09d04224c098d3302" + "sha256:287032b6a7d86abc98e8e977b20138c53fea40e5b24e29090d5a675a973dcd10", + "sha256:288c65eea20bd89b11102c47b118bc1e0749386b0a0dfebba414076c5d4c8188", + "sha256:7eed937ad9b53280a5f53570d3a7dc93cb4412b6a3d58d4c6bb78cc26319c729", + "sha256:dab437c2e84628703e3358f0f06555a6259bc5039209d51aa3b05af667ff4fd0", + "sha256:ee5e19f0856b6fbbdbab15c2787ca65d203801d2d65d0b8de6218f424206c848", + "sha256:f21be9ec6b44c223b2024bbe59d394fadc7be320d18a8d595419afadb6cd5620", + "sha256:f6ea140d2736b7e1f0de4f988c43f76b0b3f3d365080e091715429ba218dce28" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==3.3.1" + "markers": "python_version >= '3.6'", + "version": "==3.4.4" }, "daphne": { "hashes": [ @@ -243,11 +235,11 @@ }, "django-extensions": { "hashes": [ - "sha256:7cd002495ff0a0e5eb6cdd6be759600905b4e4079232ea27618fc46bdd853651", - "sha256:c7f88625a53f631745d4f2bef9ec4dcb999ed59476393bdbbe99db8596778846" + "sha256:674ad4c3b1587a884881824f40212d51829e662e52f85b012cd83d83fe1271d9", + "sha256:9507f8761ee760748938fd8af766d0608fb2738cf368adfa1b2451f61c15ae35" ], "index": "pypi", - "version": "==3.1.0" + "version": "==3.1.1" }, "django-filter": { "hashes": [ @@ -462,11 +454,11 @@ }, "joblib": { "hashes": [ - "sha256:75ead23f13484a2a414874779d69ade40d4fa1abe62b222a23cd50d4bc822f6f", - "sha256:7ad866067ac1fdec27d51c8678ea760601b70e32ff1881d4dc8e1171f2b64b24" + "sha256:9c17567692206d2f3fb9ecf5e991084254fe631665c450b443761c4186a613f7", + "sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5" ], "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "version": "==1.0.1" }, "langdetect": { "hashes": [ @@ -1113,11 +1105,11 @@ }, "tqdm": { "hashes": [ - "sha256:4621f6823bab46a9cc33d48105753ccbea671b68bab2c50a9f0be23d4065cb5a", - "sha256:fe3d08dd00a526850568d542ff9de9bbc2a09a791da3c334f3213d8d0bbbca65" + "sha256:2874fa525c051177583ec59c0fb4583e91f28ccd3f217ffad2acdb32d2c789ac", + "sha256:ab9b659241d82b8b51b2269ee243ec95286046bf06015c4e15a947cc15914211" ], "index": "pypi", - "version": "==4.56.0" + "version": "==4.56.1" }, "twisted": { "extras": [ @@ -1189,19 +1181,19 @@ }, "uvloop": { "hashes": [ - "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd", - "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e", - "sha256:2e57a28567d874afd803b6d8a7aeee7bfa0a34994f1b237837e6d7e525cea9a4", - "sha256:4315d2ec3ca393dd5bc0b0089d23101276778c304d42faff5dc4579cb6caef09", - "sha256:4544dcf77d74f3a84f03dd6278174575c44c67d7165d4c42c71db3fdc3860726", - "sha256:63c0bd965e73a4e8dde6a15635262ec38036d83327230552ada21298ee5fa3b7", - "sha256:afd5513c0ae414ec71d24f6f123614a80f3d27ca655a4fcf6cabe50994cc1891", - "sha256:b4f591aa4b3fa7f32fb51e2ee9fea1b495eb75b0b3c8d0ca52514ad675ae63f7", - "sha256:bcac356d62edd330080aed082e78d4b580ff260a677508718f88016333e2c9c5", - "sha256:e7514d7a48c063226b7d06617cbb12a14278d4323a065a8d46a7962686ce2e95", - "sha256:f07909cd9fc08c52d294b1570bba92186181ca01fe3dc9ffba68955273dd7362" + "sha256:08547ec0d40005da5c5f969f406cc90e6d589b41388958e326d78ea63fb5d2f9", + "sha256:1a503d5b49da6e3dd5607d6e533a5315b1caedbf629901807c65a23a09cad065", + "sha256:1c114eafd3c53cab74024d122742ed9001611e8f341421dba84a8ea7d886cc2f", + "sha256:2d76da5529025f9771855505cfde7bf16b9b0001e2fe05b0abf3e4fc01a5dfdb", + "sha256:9900020313c158cbc7befdd5ad60eb7b5443d7d1e83ad57c310e330fe7b2d858", + "sha256:9ae0b0e86ffcfe11c208fdb1552894911aa0915280e904a3757ebd4505792568", + "sha256:ad5391ce33ac1c745dec6f8a394387b3247c374e93b12a1f0403791f6be4bb8a", + "sha256:aecae1a9edd2fb727277f159fb74abab1f426442ae3c03b3b9e9817c7ffcafd2", + "sha256:cb121716f4ff5c01dd9b9a12b2193e59383243c21d14c916f588fd626bd3c74b", + "sha256:e17cc3f32288daf8476368ddb60cad0f00ab13c979f6f4003ee773f1d90cab58", + "sha256:fab95c88d0c3694089c93a8c46fdab30117c4ce0d1afa2ab7d6f4d0607495857" ], - "version": "==0.14.0" + "version": "==0.15.0" }, "watchdog": { "hashes": [ @@ -1506,11 +1498,11 @@ }, "faker": { "hashes": [ - "sha256:190f0d3ce037866b5d230f0b9fd0f513f07c25dc326dcad6ee019849c68d441c", - "sha256:db7adc3b4755005fc960cf96fb4ed46b54b6eb21413741ab3f31a9595f379905" + "sha256:bf2a9b3f8d00a5dada61fc4a3f80fe0d6795c7f02a138a7d2ef2db5817c7d017", + "sha256:d4aecdb877519d06c2fdc01ffc5ecf70658981acf5e13cd07ded9892994ef5c6" ], "markers": "python_version >= '3.6'", - "version": "==6.0.0" + "version": "==6.1.1" }, "filelock": { "hashes": [ @@ -1713,11 +1705,11 @@ }, "pytest-xdist": { "hashes": [ - "sha256:1d8edbb1a45e8e1f8e44b1260583107fc23f8bc8da6d18cb331ff61d41258ecf", - "sha256:f127e11e84ad37cc1de1088cb2990f3c354630d428af3f71282de589c5bb779b" + "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450", + "sha256:718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2" ], "index": "pypi", - "version": "==2.2.0" + "version": "==2.2.1" }, "python-dateutil": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 5379725b5..29fe08569 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,11 +24,11 @@ click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.19 constantly==15.1.0 -cryptography==3.3.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' +cryptography==3.4.4; python_version >= '3.6' daphne==3.0.1; python_version >= '3.6' dateparser==0.7.6 django-cors-headers==3.7.0 -django-extensions==3.1.0 +django-extensions==3.1.1 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 @@ -49,7 +49,7 @@ img2pdf==0.4.0 incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 -joblib==1.0.0; python_version >= '3.6' +joblib==1.0.1; python_version >= '3.6' langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 @@ -87,13 +87,13 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.56.0 +tqdm==4.56.1 twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' txaio==20.12.1; python_version >= '3.6' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.3 -uvloop==0.14.0 +uvloop==0.15.0 watchdog==1.0.2 watchgod==0.6 wcwidth==0.2.5 From 1d618dea37e4a8e94d4337d259cc40e6548e9ade Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 14:31:17 +0100 Subject: [PATCH 239/898] update dependencies --- Pipfile | 2 ++ Pipfile.lock | 27 ++++++++++++++------------- requirements.txt | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Pipfile b/Pipfile index 7fcf3de26..d9940d371 100644 --- a/Pipfile +++ b/Pipfile @@ -52,6 +52,8 @@ channels-redis = "*" uvicorn = {extras = ["standard"], version = "*"} concurrent-log-handler = "*" django-redis = "*" +# uvloop 0.15+ incompatible with python 3.6 +uvloop = "~=0.14.0" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index f6a672b1b..c05610316 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0c2003b9d3d95d1af594f749a2740b55079551ea0ae512177ee9524bb327281e" + "sha256": "d5459c3ca4499fcab45844d273d1da636fedd28e6108cb620b982175e81fdce5" }, "pipfile-spec": 6, "requires": {}, @@ -1181,19 +1181,20 @@ }, "uvloop": { "hashes": [ - "sha256:08547ec0d40005da5c5f969f406cc90e6d589b41388958e326d78ea63fb5d2f9", - "sha256:1a503d5b49da6e3dd5607d6e533a5315b1caedbf629901807c65a23a09cad065", - "sha256:1c114eafd3c53cab74024d122742ed9001611e8f341421dba84a8ea7d886cc2f", - "sha256:2d76da5529025f9771855505cfde7bf16b9b0001e2fe05b0abf3e4fc01a5dfdb", - "sha256:9900020313c158cbc7befdd5ad60eb7b5443d7d1e83ad57c310e330fe7b2d858", - "sha256:9ae0b0e86ffcfe11c208fdb1552894911aa0915280e904a3757ebd4505792568", - "sha256:ad5391ce33ac1c745dec6f8a394387b3247c374e93b12a1f0403791f6be4bb8a", - "sha256:aecae1a9edd2fb727277f159fb74abab1f426442ae3c03b3b9e9817c7ffcafd2", - "sha256:cb121716f4ff5c01dd9b9a12b2193e59383243c21d14c916f588fd626bd3c74b", - "sha256:e17cc3f32288daf8476368ddb60cad0f00ab13c979f6f4003ee773f1d90cab58", - "sha256:fab95c88d0c3694089c93a8c46fdab30117c4ce0d1afa2ab7d6f4d0607495857" + "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd", + "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e", + "sha256:2e57a28567d874afd803b6d8a7aeee7bfa0a34994f1b237837e6d7e525cea9a4", + "sha256:4315d2ec3ca393dd5bc0b0089d23101276778c304d42faff5dc4579cb6caef09", + "sha256:4544dcf77d74f3a84f03dd6278174575c44c67d7165d4c42c71db3fdc3860726", + "sha256:63c0bd965e73a4e8dde6a15635262ec38036d83327230552ada21298ee5fa3b7", + "sha256:afd5513c0ae414ec71d24f6f123614a80f3d27ca655a4fcf6cabe50994cc1891", + "sha256:b4f591aa4b3fa7f32fb51e2ee9fea1b495eb75b0b3c8d0ca52514ad675ae63f7", + "sha256:bcac356d62edd330080aed082e78d4b580ff260a677508718f88016333e2c9c5", + "sha256:e7514d7a48c063226b7d06617cbb12a14278d4323a065a8d46a7962686ce2e95", + "sha256:f07909cd9fc08c52d294b1570bba92186181ca01fe3dc9ffba68955273dd7362" ], - "version": "==0.15.0" + "index": "pypi", + "version": "==0.14.0" }, "watchdog": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 29fe08569..097cef78e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -93,7 +93,7 @@ txaio==20.12.1; python_version >= '3.6' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.3 -uvloop==0.15.0 +uvloop==0.14.0 watchdog==1.0.2 watchgod==0.6 wcwidth==0.2.5 From 2bd0bd84ffbe978cfd6c266fe82f1e4cb3c27c99 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 14:50:20 +0100 Subject: [PATCH 240/898] retries for archive generation --- .../migrations/1012_fix_archive_files.py | 100 ++++++++++++------ 1 file changed, 66 insertions(+), 34 deletions(-) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index 04670829f..4fa258b8a 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -4,6 +4,7 @@ import hashlib import logging import os import shutil +from time import sleep import pathvalidate from django.conf import settings @@ -12,8 +13,12 @@ from django.template.defaultfilters import slugify from documents.file_handling import defaultdictNoStr, many_to_dictionary + logger = logging.getLogger("paperless.migrations") +############################################################################### +# This is code copied straight paperless before the change. +############################################################################### def archive_name_from_filename(filename): return os.path.splitext(filename)[0] + ".pdf" @@ -150,6 +155,65 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): return filename +############################################################################### +# This code performs bidirection archive file transformation. +############################################################################### + + +def create_archive_version(doc, retry_count=4): + from documents.parsers import get_parser_class_for_mime_type, \ + DocumentParser, \ + ParseError + + logger.info( + f"Regenerating archive document for document ID:{doc.id}" + ) + parser_class = get_parser_class_for_mime_type(doc.mime_type) + for try_num in range(retry_count): + parser: DocumentParser = parser_class(None, None) + try: + parser.parse(source_path(doc), doc.mime_type, + os.path.basename(doc.filename)) + doc.content = parser.get_text() + + if parser.get_archive_path() and os.path.isfile( + parser.get_archive_path()): + doc.archive_filename = generate_unique_filename( + doc, archive_filename=True) + with open(parser.get_archive_path(), "rb") as f: + doc.archive_checksum = hashlib.md5(f.read()).hexdigest() + os.makedirs(os.path.dirname(archive_path_new(doc)), + exist_ok=True) + shutil.copy2(parser.get_archive_path(), archive_path_new(doc)) + else: + doc.archive_checksum = None + logger.error( + f"Parser did not return an archive document for document " + f"ID:{doc.id}. Removing archive document." + ) + doc.save() + return + except ParseError: + if try_num + 1 == retry_count: + logger.exception( + f"Unable to regenerate archive document for ID:{doc.id}. You " + f"need to invoke the document_archiver management command " + f"manually for that document." + ) + doc.archive_checksum = None + doc.save() + return + else: + # This is mostly here for the tika parser in docker + # environemnts. The servers for parsing need to come up first, + # and the docker setup doesn't ensure that tika is running + # before attempting migrations. + logger.error("Parse error, will try again in 5 seconds...") + sleep(5) + finally: + parser.cleanup() + + def move_old_to_new_locations(apps, schema_editor): Document = apps.get_model("documents", "Document") @@ -199,42 +263,10 @@ def move_old_to_new_locations(apps, schema_editor): # regenerate archive documents for doc_id in affected_document_ids: - from documents.parsers import get_parser_class_for_mime_type, \ - DocumentParser, \ - ParseError - doc = Document.objects.get(id=doc_id) - logger.info( - f"Regenerating archive document for document ID:{doc.id}" - ) - parser_class = get_parser_class_for_mime_type(doc.mime_type) - parser: DocumentParser = parser_class(None, None) - try: - parser.parse(source_path(doc), doc.mime_type, os.path.basename(doc.filename)) - doc.content = parser.get_text() + create_archive_version(doc) + - if parser.get_archive_path() and os.path.isfile(parser.get_archive_path()): - doc.archive_filename = generate_unique_filename( - doc, archive_filename=True) - with open(parser.get_archive_path(), "rb") as f: - doc.archive_checksum = hashlib.md5(f.read()).hexdigest() - os.makedirs(os.path.dirname(archive_path_new(doc)), exist_ok=True) - shutil.copy2(parser.get_archive_path(), archive_path_new(doc)) - else: - doc.archive_checksum = None - logger.error( - f"Parser did not return an archive document for document " - f"ID:{doc.id}. Removing archive document." - ) - doc.save() - except ParseError: - logger.exception( - f"Unable to regenerate archive document for ID:{doc.id}. You " - f"need to invoke the document_archiver management command " - f"manually for that document." - ) - finally: - parser.cleanup() def move_new_to_old_locations(apps, schema_editor): From 07a862e300ea2a942279d5e08c984bda7dd76b2c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 16:58:55 +0100 Subject: [PATCH 241/898] more testing of the migration --- .../migrations/1012_fix_archive_files.py | 33 ++++++--- .../tests/test_migration_archive_files.py | 74 +++++++++++++++++++ 2 files changed, 95 insertions(+), 12 deletions(-) diff --git a/src/documents/migrations/1012_fix_archive_files.py b/src/documents/migrations/1012_fix_archive_files.py index 4fa258b8a..5f5064396 100644 --- a/src/documents/migrations/1012_fix_archive_files.py +++ b/src/documents/migrations/1012_fix_archive_files.py @@ -160,7 +160,12 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): ############################################################################### -def create_archive_version(doc, retry_count=4): +def parse_wrapper(parser, path, mime_type, file_name): + # this is here so that I can mock this out for testing. + parser.parse(path, mime_type, file_name) + + +def create_archive_version(doc, retry_count=3): from documents.parsers import get_parser_class_for_mime_type, \ DocumentParser, \ ParseError @@ -172,8 +177,8 @@ def create_archive_version(doc, retry_count=4): for try_num in range(retry_count): parser: DocumentParser = parser_class(None, None) try: - parser.parse(source_path(doc), doc.mime_type, - os.path.basename(doc.filename)) + parse_wrapper(parser, source_path(doc), doc.mime_type, + os.path.basename(doc.filename)) doc.content = parser.get_text() if parser.get_archive_path() and os.path.isfile( @@ -225,25 +230,28 @@ def move_old_to_new_locations(apps, schema_editor): for doc in Document.objects.filter(archive_checksum__isnull=False): old_path = archive_path_old(doc) - if not os.path.isfile(old_path): - raise ValueError( - f"Archived document ID:{doc.id} does not exist at: " - f"{old_path}") - if old_path in old_archive_path_to_id: affected_document_ids.add(doc.id) affected_document_ids.add(old_archive_path_to_id[old_path]) else: old_archive_path_to_id[old_path] = doc.id - # check that we can regenerate these archive versions + # check that archive files of all unaffected documents are in place + for doc in Document.objects.filter(archive_checksum__isnull=False): + old_path = archive_path_old(doc) + if doc.id not in affected_document_ids and not os.path.isfile(old_path): + raise ValueError( + f"Archived document ID:{doc.id} does not exist at: " + f"{old_path}") + + # check that we can regenerate affected archive versions for doc_id in affected_document_ids: from documents.parsers import get_parser_class_for_mime_type doc = Document.objects.get(id=doc_id) parser_class = get_parser_class_for_mime_type(doc.mime_type) if not parser_class: - raise Exception( + raise ValueError( f"Document ID:{doc.id} has an invalid archived document, " f"but no parsers are available. Cannot migrate.") @@ -253,6 +261,9 @@ def move_old_to_new_locations(apps, schema_editor): old_path = archive_path_old(doc) # remove affected archive versions if os.path.isfile(old_path): + logger.debug( + f"Removing {old_path}" + ) os.unlink(old_path) else: # Set archive path for unaffected files @@ -267,8 +278,6 @@ def move_old_to_new_locations(apps, schema_editor): create_archive_version(doc) - - def move_new_to_old_locations(apps, schema_editor): Document = apps.get_model("documents", "Document") diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index 637aaeee0..b3f2e916c 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -2,10 +2,12 @@ import hashlib import os import shutil from pathlib import Path +from unittest import mock from django.conf import settings from django.test import override_settings +from documents.parsers import ParseError from documents.tests.utils import DirectoriesMixin, TestMigrations @@ -169,6 +171,11 @@ class TestMigrateArchiveFilesWithFilenameFormat(TestMigrateArchiveFiles): self.assertEqual(Document.objects.get(id=self.clash4.id).archive_filename, "clash.png.pdf") +def fake_parse_wrapper(parser, path, mime_type, file_name): + parser.archive_path = None + parser.text = "the text" + + @override_settings(PAPERLESS_FILENAME_FORMAT="") class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations): @@ -185,6 +192,73 @@ class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations): self.assertRaisesMessage(ValueError, "does not exist at: ", self.performMigration) + def test_parser_missing(self): + Document = self.apps.get_model("documents", "Document") + + doc1 = make_test_document(Document, "document", "invalid/typesss768", simple_png, "document.png", simple_pdf) + doc2 = make_test_document(Document, "document", "invalid/typesss768", simple_jpg, "document.jpg", simple_pdf) + + self.assertRaisesMessage(ValueError, "no parsers are available", self.performMigration) + + @mock.patch("documents.migrations.1012_fix_archive_files.parse_wrapper") + def test_parser_error(self, m): + m.side_effect = ParseError() + Document = self.apps.get_model("documents", "Document") + + doc1 = make_test_document(Document, "document", "image/png", simple_png, "document.png", simple_pdf) + doc2 = make_test_document(Document, "document", "application/pdf", simple_jpg, "document.jpg", simple_pdf) + + self.assertIsNotNone(doc1.archive_checksum) + self.assertIsNotNone(doc2.archive_checksum) + + with self.assertLogs() as capture: + self.performMigration() + + self.assertEqual(m.call_count, 6) + + self.assertEqual( + len(list(filter(lambda log: "Parse error, will try again in 5 seconds" in log, capture.output))), + 4) + + self.assertEqual( + len(list(filter(lambda log: "Unable to regenerate archive document for ID:" in log, capture.output))), + 2) + + Document = self.apps.get_model("documents", "Document") + + doc1 = Document.objects.get(id=doc1.id) + doc2 = Document.objects.get(id=doc2.id) + + self.assertIsNone(doc1.archive_checksum) + self.assertIsNone(doc2.archive_checksum) + self.assertIsNone(doc1.archive_filename) + self.assertIsNone(doc2.archive_filename) + + @mock.patch("documents.migrations.1012_fix_archive_files.parse_wrapper") + def test_parser_no_archive(self, m): + m.side_effect = fake_parse_wrapper + + Document = self.apps.get_model("documents", "Document") + + doc1 = make_test_document(Document, "document", "image/png", simple_png, "document.png", simple_pdf) + doc2 = make_test_document(Document, "document", "application/pdf", simple_jpg, "document.jpg", simple_pdf) + + with self.assertLogs() as capture: + self.performMigration() + + self.assertEqual( + len(list(filter(lambda log: "Parser did not return an archive document for document" in log, capture.output))), + 2) + + Document = self.apps.get_model("documents", "Document") + + doc1 = Document.objects.get(id=doc1.id) + doc2 = Document.objects.get(id=doc2.id) + + self.assertIsNone(doc1.archive_checksum) + self.assertIsNone(doc2.archive_checksum) + self.assertIsNone(doc1.archive_filename) + self.assertIsNone(doc2.archive_filename) @override_settings(PAPERLESS_FILENAME_FORMAT="") class TestMigrateArchiveFilesBackwards(DirectoriesMixin, TestMigrations): From 2dadcf6325b37b685a25525cb91f8e93fcd2f165 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 17:09:22 +0100 Subject: [PATCH 242/898] requirements --- Pipfile | 2 ++ Pipfile.lock | 28 ++++++++++++++++++---------- requirements.txt | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Pipfile b/Pipfile index d9940d371..aae5f1506 100644 --- a/Pipfile +++ b/Pipfile @@ -54,6 +54,8 @@ concurrent-log-handler = "*" django-redis = "*" # uvloop 0.15+ incompatible with python 3.6 uvloop = "~=0.14.0" +# TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/) +cryptography = "~=3.3.2" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index c05610316..9d1a75b88 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d5459c3ca4499fcab45844d273d1da636fedd28e6108cb620b982175e81fdce5" + "sha256": "b3bed0a6b8981e8fffc1b6aa3bc35a0b1472f28e6f745c62469eb8045740e57b" }, "pipfile-spec": 6, "requires": {}, @@ -190,16 +190,24 @@ }, "cryptography": { "hashes": [ - "sha256:287032b6a7d86abc98e8e977b20138c53fea40e5b24e29090d5a675a973dcd10", - "sha256:288c65eea20bd89b11102c47b118bc1e0749386b0a0dfebba414076c5d4c8188", - "sha256:7eed937ad9b53280a5f53570d3a7dc93cb4412b6a3d58d4c6bb78cc26319c729", - "sha256:dab437c2e84628703e3358f0f06555a6259bc5039209d51aa3b05af667ff4fd0", - "sha256:ee5e19f0856b6fbbdbab15c2787ca65d203801d2d65d0b8de6218f424206c848", - "sha256:f21be9ec6b44c223b2024bbe59d394fadc7be320d18a8d595419afadb6cd5620", - "sha256:f6ea140d2736b7e1f0de4f988c43f76b0b3f3d365080e091715429ba218dce28" + "sha256:0d7b69674b738068fa6ffade5c962ecd14969690585aaca0a1b1fc9058938a72", + "sha256:1bd0ccb0a1ed775cd7e2144fe46df9dc03eefd722bbcf587b3e0616ea4a81eff", + "sha256:3c284fc1e504e88e51c428db9c9274f2da9f73fdf5d7e13a36b8ecb039af6e6c", + "sha256:49570438e60f19243e7e0d504527dd5fe9b4b967b5a1ff21cc12b57602dd85d3", + "sha256:541dd758ad49b45920dda3b5b48c968f8b2533d8981bcdb43002798d8f7a89ed", + "sha256:5a60d3780149e13b7a6ff7ad6526b38846354d11a15e21068e57073e29e19bed", + "sha256:7951a966613c4211b6612b0352f5bf29989955ee592c4a885d8c7d0f830d0433", + "sha256:922f9602d67c15ade470c11d616f2b2364950602e370c76f0c94c94ae672742e", + "sha256:a0f0b96c572fc9f25c3f4ddbf4688b9b38c69836713fb255f4a2715d93cbaf44", + "sha256:a777c096a49d80f9d2979695b835b0f9c9edab73b59e4ceb51f19724dda887ed", + "sha256:a9a4ac9648d39ce71c2f63fe7dc6db144b9fa567ddfc48b9fde1b54483d26042", + "sha256:aa4969f24d536ae2268c902b2c3d62ab464b5a66bcb247630d208a79a8098e9b", + "sha256:c7390f9b2119b2b43160abb34f63277a638504ef8df99f11cb52c1fda66a2e6f", + "sha256:ddd06e71c449a4fe10d0c60846280ee35d69ce49e3e413ce46d5f129e1468083", + "sha256:e18e6ab84dfb0ab997faf8cca25a86ff15dfea4027b986322026cc99e0a892da" ], - "markers": "python_version >= '3.6'", - "version": "==3.4.4" + "index": "pypi", + "version": "==3.3.2" }, "daphne": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 097cef78e..cf63b4660 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.19 constantly==15.1.0 -cryptography==3.4.4; python_version >= '3.6' +cryptography==3.3.2 daphne==3.0.1; python_version >= '3.6' dateparser==0.7.6 django-cors-headers==3.7.0 From 8883184e6428e7bafee88f60655dbcd4a0aa488e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 18:27:41 +0100 Subject: [PATCH 243/898] downgrades --- docs/administration.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/administration.rst b/docs/administration.rst index c54323e6e..98548efd4 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -171,6 +171,35 @@ Most of the update process is automated when using the ansible role. $ ansible-playbook playbook.yml +Downgrading Paperless +##################### + +Downgrades are possible. However, some updates also contain database migrations (these change the layout of the database and may move data). +In order to move back from a version that applied database migrations, you'll have to revert the database migration *before* downgrading, +and then downgrade paperless. + +This table lists the most recent database migrations for each versions: + ++---------+-------------------------+ +| Version | Latest migration number | ++---------+-------------------------+ +| 1.0.0 | 1011 | ++---------+-------------------------+ +| 1.1.0 | 1011 | ++---------+-------------------------+ +| 1.1.1 | 1012 | ++---------+-------------------------+ + +Execute the following management command to migrate your database: + +.. code:: shell-session + + $ python3 manage.py migrate documents <migration number> + +.. note:: + + Some migrations cannot be undone. The command will issue errors if that happens. + Management utilities #################### From f0d202df13b22326d9d528580bf06d0f05fad7e5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 18:55:39 +0100 Subject: [PATCH 244/898] update document admin --- src/documents/admin.py | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/src/documents/admin.py b/src/documents/admin.py index 7cc33dc20..5447b6ef2 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -59,16 +59,19 @@ class DocumentAdmin(admin.ModelAdmin): list_display_links = ("title",) list_display = ( - "correspondent", - "title", - "tags_", "created", + "added", + "archive_serial_number", + "title", + "mime_type", + "filename", + "archive_filename" ) list_filter = ( - "document_type", - "tags", - "correspondent" + ("mime_type"), + ("archive_serial_number", admin.EmptyFieldListFilter), + ("archive_filename", admin.EmptyFieldListFilter), ) filter_horizontal = ("tags",) @@ -99,26 +102,6 @@ class DocumentAdmin(admin.ModelAdmin): index.add_or_update_document(obj) super(DocumentAdmin, self).save_model(request, obj, form, change) - @mark_safe - def tags_(self, obj): - r = "" - for tag in obj.tags.all(): - r += self._html_tag( - "span", - tag.name + ", " - ) - return r - - @staticmethod - def _html_tag(kind, inside=None, **kwargs): - attributes = format_html_join(' ', '{}="{}"', kwargs.items()) - - if inside is not None: - return format_html("<{kind} {attributes}>{inside}</{kind}>", - kind=kind, attributes=attributes, inside=inside) - - return format_html("<{} {}/>", kind, attributes) - class RuleInline(admin.TabularInline): model = SavedViewFilterRule From fc92adab7415fef21e96fcc8fc13c0a59f2d086e Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 20:01:35 +0100 Subject: [PATCH 245/898] remove invalid test cases --- src/documents/tests/test_admin.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/documents/tests/test_admin.py b/src/documents/tests/test_admin.py index 6915f595d..840747d68 100644 --- a/src/documents/tests/test_admin.py +++ b/src/documents/tests/test_admin.py @@ -23,18 +23,6 @@ class TestDocumentAdmin(DirectoriesMixin, TestCase): self.assertEqual(Document.objects.get(id=doc.id).title, "new title") m.assert_called_once() - def test_tags(self): - doc = Document.objects.create(title="test") - doc.tags.create(name="t1") - doc.tags.create(name="t2") - - self.assertEqual(self.doc_admin.tags_(doc), "<span >t1, </span><span >t2, </span>") - - def test_tags_empty(self): - doc = Document.objects.create(title="test") - - self.assertEqual(self.doc_admin.tags_(doc), "") - @mock.patch("documents.admin.index.remove_document") def test_delete_model(self, m): doc = Document.objects.create(title="test") From a5495621d865c532ddb12d98124f782cb302a6c9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 20:05:02 +0100 Subject: [PATCH 246/898] changelog --- docs/changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 9ab83bc1a..a0ca5e5c9 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,6 +8,8 @@ Changelog paperless-ng 1.1.1 ################## +This release contains new database migrations. + * Fixed a bug in the sanity checker that would cause it to display "x not in list" errors instead of actual issues. * Fixed a bug with filename generation for archive filenames that would cause the archive files of two documents to overlap. From 4a69ee23510f6138c8661ea3db1d6609b026f16c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 20:14:55 +0100 Subject: [PATCH 247/898] backup documentation --- docs/administration.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/administration.rst b/docs/administration.rst index f2c84016e..21b6ebcea 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -23,6 +23,12 @@ Options available to any installation of paperless: * The document exporter is also able to update an already existing export. Therefore, incremental backups with ``rsync`` are entirely possible. +.. caution:: + + You cannot import the export generated with one version of paperless in a + different version of paperless. The export contains an exact image of the + database, and migrations may change the database layout. + Options available to docker installations: * Backup the docker volumes. These usually reside within From 18c6ecc67a7373e4f720095cea368f6ab4d6d29b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 21:34:39 +0100 Subject: [PATCH 248/898] fix one incorrect use of archive_version --- src/documents/serialisers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index fb0962902..b01f82805 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -129,7 +129,7 @@ class DocumentSerializer(DynamicFieldsModelSerializer): return obj.get_public_filename() def get_archived_file_name(self, obj): - if obj.archive_checksum: + if obj.has_archive_version: return obj.get_public_filename(archive=True) else: return None From 738b89d4b7ccab025f9e75c1fb2b086db4327c53 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 21:34:50 +0100 Subject: [PATCH 249/898] changes to the admin document list --- src/documents/admin.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/documents/admin.py b/src/documents/admin.py index 5447b6ef2..f87ab1ec5 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -59,9 +59,7 @@ class DocumentAdmin(admin.ModelAdmin): list_display_links = ("title",) list_display = ( - "created", - "added", - "archive_serial_number", + "id", "title", "mime_type", "filename", @@ -76,7 +74,7 @@ class DocumentAdmin(admin.ModelAdmin): filter_horizontal = ("tags",) - ordering = ["-created"] + ordering = ["-id"] date_hierarchy = "created" From cbab656f8c31a7cdef0a3d3caea49b96cd9541f7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 10 Feb 2021 23:53:48 +0100 Subject: [PATCH 250/898] added some test cases that I still need to address --- src/documents/tests/test_file_handling.py | 32 +++++++++++++++++++++++ src/documents/tests/test_management.py | 16 ++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index 927c865c6..a806e1025 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -507,6 +507,38 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): self.assertTrue(os.path.isfile(existing_archive_file)) self.assertEqual(doc.archive_filename, "none/my_doc_01.pdf") + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") + def test_move_original_only(self): + original = os.path.join(settings.ORIGINALS_DIR, "document_01.pdf") + archive = os.path.join(settings.ARCHIVE_DIR, "document.pdf") + Path(original).touch() + Path(archive).touch() + + doc = Document.objects.create(mime_type="application/pdf", title="document", filename="document_01.pdf", checksum="A", + archive_checksum="B", archive_filename="document.pdf") + + self.assertEqual(doc.filename, "document.pdf") + self.assertEqual(doc.archive_filename, "document.pdf") + + self.assertTrue(os.path.isfile(doc.source_path)) + self.assertTrue(os.path.isfile(doc.archive_path)) + + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") + def test_move_archive_only(self): + original = os.path.join(settings.ORIGINALS_DIR, "document.pdf") + archive = os.path.join(settings.ARCHIVE_DIR, "document_01.pdf") + Path(original).touch() + Path(archive).touch() + + doc = Document.objects.create(mime_type="application/pdf", title="document", filename="document.pdf", checksum="A", + archive_checksum="B", archive_filename="document_01.pdf") + + self.assertEqual(doc.filename, "document.pdf") + self.assertEqual(doc.archive_filename, "document.pdf") + + self.assertTrue(os.path.isfile(doc.source_path)) + self.assertTrue(os.path.isfile(doc.archive_path)) + @override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") @mock.patch("documents.signals.handlers.os.rename") def test_move_archive_error(self, m): diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index 978dff8b3..1a550a4b4 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -43,11 +43,27 @@ class TestArchiver(DirectoriesMixin, TestCase): doc = Document.objects.get(id=doc.id) self.assertIsNotNone(doc.checksum) + self.assertIsNotNone(doc.archive_checksum) self.assertTrue(os.path.isfile(doc.archive_path)) self.assertTrue(os.path.isfile(doc.source_path)) self.assertTrue(filecmp.cmp(sample_file, doc.source_path)) self.assertEqual(doc.archive_filename, "none/A.pdf") + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") + def test_naming_priorities(self): + doc1 = Document.objects.create(checksum="A", title="document", content="first document", mime_type="application/pdf", filename="document.pdf") + doc2 = Document.objects.create(checksum="B", title="document", content="second document", mime_type="application/pdf", filename="document_01.pdf") + shutil.copy(sample_file, os.path.join(self.dirs.originals_dir, f"document.pdf")) + shutil.copy(sample_file, os.path.join(self.dirs.originals_dir, f"document_01.pdf")) + + handle_document(doc2.pk) + handle_document(doc1.pk) + + doc1 = Document.objects.get(id=doc1.id) + doc2 = Document.objects.get(id=doc2.id) + + self.assertEqual(doc1.archive_filename, "document.pdf") + self.assertEqual(doc2.archive_filename, "document_01.pdf") class TestDecryptDocuments(TestCase): From b90a5f625af3e0597c2b0cabccc42e1eca6f898a Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 11 Feb 2021 13:47:17 +0100 Subject: [PATCH 251/898] update file renaming logic --- src/documents/signals/handlers.py | 69 +++++++++---------- src/documents/tests/test_file_handling.py | 14 ++++ .../tests/test_migration_archive_files.py | 1 + 3 files changed, 46 insertions(+), 38 deletions(-) diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 17260fa8a..c5e213949 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -208,21 +208,16 @@ def update_filename_and_move_files(sender, instance, **kwargs): with FileLock(settings.MEDIA_LOCK): old_filename = instance.filename new_filename = generate_unique_filename(instance) - - if new_filename == instance.filename: - # Don't do anything if its the same. - return - + move_original = old_filename != new_filename old_source_path = instance.source_path new_source_path = os.path.join(settings.ORIGINALS_DIR, new_filename) - if not validate_move(instance, old_source_path, new_source_path): + if move_original and not validate_move(instance, old_source_path, new_source_path): return - # archive files are optional, archive checksum tells us if we have one, - # since this is None for documents without archived files. + old_archive_filename = instance.archive_filename + if instance.has_archive_version: - old_archive_filename = instance.archive_filename new_archive_filename = generate_unique_filename( instance, archive_filename=True ) @@ -230,25 +225,26 @@ def update_filename_and_move_files(sender, instance, **kwargs): new_archive_path = os.path.join(settings.ARCHIVE_DIR, new_archive_filename) - if not validate_move(instance, old_archive_path, new_archive_path): + move_archive = old_archive_filename != new_archive_filename + if move_archive and not validate_move(instance, old_archive_path, new_archive_path): return - - create_source_path_directory(new_archive_path) else: - old_archive_filename = None - new_archive_filename = None - old_archive_path = None - new_archive_path = None + move_archive = False - create_source_path_directory(new_source_path) + if not move_original and not move_archive: + # Don't do anything if filenames did not change. + return try: - os.rename(old_source_path, new_source_path) - instance.filename = new_filename + if move_original: + instance.filename = new_filename + create_source_path_directory(new_source_path) + os.rename(old_source_path, new_source_path) - if instance.has_archive_version: - os.rename(old_archive_path, new_archive_path) + if move_archive: instance.archive_filename = new_archive_filename + create_source_path_directory(new_archive_path) + os.rename(old_archive_path, new_archive_path) # Don't save() here to prevent infinite recursion. Document.objects.filter(pk=instance.pk).update( @@ -256,16 +252,24 @@ def update_filename_and_move_files(sender, instance, **kwargs): archive_filename=instance.archive_filename, ) - except OSError as e: + except Exception as e: + # This happens when either: + # - moving the files failed due to file system errors + # - saving to the database failed due to database errors + # In both cases, we need to revert to the original state. + + # restore old values on the instance instance.filename = old_filename instance.archive_filename = old_archive_filename - # this happens when we can't move a file. If that's the case for - # the archive file, we try our best to revert the changes. - # no need to save the instance, the update() has not happened yet. + + # Try to move files to their original location. try: - os.rename(new_source_path, old_source_path) - if instance.has_archive_version: + if move_original and os.path.isfile(new_source_path): + os.rename(new_source_path, old_source_path) + + if move_archive and os.path.isfile(new_archive_path): os.rename(new_archive_path, old_archive_path) + except Exception as e: # This is fine, since: # A: if we managed to move source from A to B, we will also @@ -276,17 +280,6 @@ def update_filename_and_move_files(sender, instance, **kwargs): # B: if moving the orignal file failed, nothing has changed # anyway. pass - except DatabaseError as e: - # this happens after moving files, so move them back into place. - # since moving them once succeeded, it's very likely going to - # succeed again. - os.rename(new_source_path, old_source_path) - if instance.has_archive_version: - os.rename(new_archive_path, old_archive_path) - instance.filename = old_filename - instance.archive_filename = old_archive_filename - # again, no need to save the instance, since the actual update() - # operation failed. # finally, remove any empty sub folders. This will do nothing if # something has failed above. diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index a806e1025..59af7e317 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -446,6 +446,18 @@ class TestFileHandling(DirectoriesMixin, TestCase): self.assertEqual(document2.filename, "qwe.pdf") + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") + @mock.patch("documents.signals.handlers.Document.objects.filter") + def test_no_update_without_change(self, m): + doc = Document.objects.create(title="document", filename="document.pdf", archive_filename="document.pdf", checksum="A", archive_checksum="B", mime_type="application/pdf") + Path(doc.source_path).touch() + Path(doc.archive_path).touch() + + doc.save() + + m.assert_not_called() + + class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): @@ -558,6 +570,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): Path(archive).touch() doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", checksum="A", archive_checksum="B", archive_filename="0000001.pdf") + m.assert_called() self.assertTrue(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) self.assertTrue(os.path.isfile(doc.source_path)) @@ -595,6 +608,7 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): Path(archive).touch() doc = Document.objects.create(mime_type="application/pdf", title="my_doc", filename="0000001.pdf", archive_filename="0000001.pdf", checksum="A", archive_checksum="B") + m.assert_called() self.assertTrue(os.path.isfile(original)) self.assertTrue(os.path.isfile(archive)) self.assertTrue(os.path.isfile(doc.source_path)) diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index b3f2e916c..6217ae05f 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -260,6 +260,7 @@ class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations): self.assertIsNone(doc1.archive_filename) self.assertIsNone(doc2.archive_filename) + @override_settings(PAPERLESS_FILENAME_FORMAT="") class TestMigrateArchiveFilesBackwards(DirectoriesMixin, TestMigrations): From 555e37958fedf984d66b48b39f35f549701633c3 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Thu, 11 Feb 2021 22:16:41 +0100 Subject: [PATCH 252/898] better exception logging --- src/documents/classifier.py | 4 ++-- src/documents/index.py | 4 ++-- src/documents/management/commands/document_archiver.py | 2 +- src/documents/management/commands/document_consumer.py | 6 ++---- src/paperless_mail/tasks.py | 7 ++----- 5 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 81f860314..c880e50d6 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -43,9 +43,9 @@ def load_classifier(): version=version, timeout=86400) except (EOFError, IncompatibleClassifierVersionError) as e: # there's something wrong with the model file. - logger.error( + logger.exception( f"Unrecoverable error while loading document " - f"classification model: {str(e)}, deleting model file." + f"classification model, deleting model file." ) os.unlink(settings.MODEL_FILE) classifier = None diff --git a/src/documents/index.py b/src/documents/index.py index bc17daeb1..ea788f4b3 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -78,8 +78,8 @@ def open_index(recreate=False): try: if exists_in(settings.INDEX_DIR) and not recreate: return open_dir(settings.INDEX_DIR, schema=get_schema()) - except Exception as e: - logger.error(f"Error while opening the index: {e}, recreating.") + except Exception: + logger.exception(f"Error while opening the index, recreating.") if not os.path.isdir(settings.INDEX_DIR): os.makedirs(settings.INDEX_DIR, exist_ok=True) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index fe8c8b530..297c95121 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -60,7 +60,7 @@ def handle_document(document_id): index.update_document(writer, document) except Exception as e: - logger.error(f"Error while parsing document {document}: {str(e)}") + logger.exception(f"Error while parsing document {document}") finally: parser.cleanup() diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index c01743628..aaa644891 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -54,8 +54,7 @@ def _consume(filepath): if settings.CONSUMER_SUBDIRS_AS_TAGS: tag_ids = _tags_from_path(filepath) except Exception as e: - logger.error( - "Error creating tags from path: {}".format(e)) + logger.exception("Error creating tags from path") try: async_task("documents.tasks.consume_file", @@ -66,8 +65,7 @@ def _consume(filepath): # Catch all so that the consumer won't crash. # This is also what the test case is listening for to check for # errors. - logger.error( - "Error while consuming document: {}".format(e)) + logger.exception("Error while consuming document") def _consume_wait_unmodified(file, num_tries=20, wait_time=1): diff --git a/src/paperless_mail/tasks.py b/src/paperless_mail/tasks.py index 086edef7b..c591f04b9 100644 --- a/src/paperless_mail/tasks.py +++ b/src/paperless_mail/tasks.py @@ -13,11 +13,8 @@ def process_mail_accounts(): try: total_new_documents += MailAccountHandler().handle_mail_account( account) - except MailError as e: - logger.error( - f"Error while processing mail account {account}: {e}", - exc_info=True - ) + except MailError: + logger.exception(f"Error while processing mail account {account}") if total_new_documents > 0: return f"Added {total_new_documents} document(s)." From 819620863226df80fe84a4296f700134b5963ec5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 12 Feb 2021 01:31:50 +0100 Subject: [PATCH 253/898] fix test case --- src/documents/file_handling.py | 22 +++++++- src/documents/signals/handlers.py | 93 +++++++++++++++---------------- 2 files changed, 66 insertions(+), 49 deletions(-) diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index 8c0e2148b..d7a42db24 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -79,7 +79,19 @@ def many_to_dictionary(field): return mydictionary -def generate_unique_filename(doc, archive_filename=False): +def generate_unique_filename(doc, + archive_filename=False): + """ + Generates a unique filename for doc in settings.ORIGINALS_DIR. + + The returned filename is guaranteed to be either the current filename + of the document if unchanged, or a new filename that does not correspondent + to any existing files. The function will append _01, _02, etc to the + filename before the extension to avoid conflicts. + + If archive_filename is True, return a unique archive filename instead. + + """ if archive_filename: old_filename = doc.archive_filename root = settings.ARCHIVE_DIR @@ -87,6 +99,14 @@ def generate_unique_filename(doc, archive_filename=False): old_filename = doc.filename root = settings.ORIGINALS_DIR + # If generating archive filenames, try to make a name that is similar to + # the original filename first. + + if archive_filename and doc.filename: + new_filename = os.path.splitext(doc.filename)[0] + ".pdf" + if new_filename == old_filename or not os.path.exists(os.path.join(root, new_filename)): # NOQA: E501 + return new_filename + counter = 0 while True: diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index c5e213949..eb981661c 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -173,21 +173,23 @@ def cleanup_document_deletion(sender, instance, using, **kwargs): ) +class CannotMoveFilesException(Exception): + pass + + def validate_move(instance, old_path, new_path): if not os.path.isfile(old_path): # Can't do anything if the old file does not exist anymore. logger.fatal( f"Document {str(instance)}: File {old_path} has gone.") - return False + raise CannotMoveFilesException() if os.path.isfile(new_path): # Can't do anything if the new file already exists. Skip updating file. logger.warning( f"Document {str(instance)}: Cannot rename file " f"since target path {new_path} already exists.") - return False - - return True + raise CannotMoveFilesException() @receiver(models.signals.m2m_changed, sender=Document.tags.through) @@ -206,45 +208,40 @@ def update_filename_and_move_files(sender, instance, **kwargs): return with FileLock(settings.MEDIA_LOCK): - old_filename = instance.filename - new_filename = generate_unique_filename(instance) - move_original = old_filename != new_filename - old_source_path = instance.source_path - new_source_path = os.path.join(settings.ORIGINALS_DIR, new_filename) - - if move_original and not validate_move(instance, old_source_path, new_source_path): - return - - old_archive_filename = instance.archive_filename - - if instance.has_archive_version: - new_archive_filename = generate_unique_filename( - instance, archive_filename=True - ) - old_archive_path = instance.archive_path - new_archive_path = os.path.join(settings.ARCHIVE_DIR, - new_archive_filename) - - move_archive = old_archive_filename != new_archive_filename - if move_archive and not validate_move(instance, old_archive_path, new_archive_path): - return - else: - move_archive = False - - if not move_original and not move_archive: - # Don't do anything if filenames did not change. - return - try: + old_filename = instance.filename + old_source_path = instance.source_path + + instance.filename = generate_unique_filename(instance) + move_original = old_filename != instance.filename + + old_archive_filename = instance.archive_filename + old_archive_path = instance.archive_path + + if instance.has_archive_version: + + instance.archive_filename = generate_unique_filename( + instance, archive_filename=True + ) + + move_archive = old_archive_filename != instance.archive_filename # NOQA: E501 + else: + move_archive = False + + if not move_original and not move_archive: + # Don't do anything if filenames did not change. + return + if move_original: - instance.filename = new_filename - create_source_path_directory(new_source_path) - os.rename(old_source_path, new_source_path) + validate_move(instance, old_source_path, instance.source_path) + create_source_path_directory(instance.source_path) + os.rename(old_source_path, instance.source_path) if move_archive: - instance.archive_filename = new_archive_filename - create_source_path_directory(new_archive_path) - os.rename(old_archive_path, new_archive_path) + validate_move( + instance, old_archive_path, instance.archive_path) + create_source_path_directory(instance.archive_path) + os.rename(old_archive_path, instance.archive_path) # Don't save() here to prevent infinite recursion. Document.objects.filter(pk=instance.pk).update( @@ -252,23 +249,19 @@ def update_filename_and_move_files(sender, instance, **kwargs): archive_filename=instance.archive_filename, ) - except Exception as e: + except (OSError, DatabaseError, CannotMoveFilesException): # This happens when either: # - moving the files failed due to file system errors # - saving to the database failed due to database errors # In both cases, we need to revert to the original state. - # restore old values on the instance - instance.filename = old_filename - instance.archive_filename = old_archive_filename - # Try to move files to their original location. try: - if move_original and os.path.isfile(new_source_path): - os.rename(new_source_path, old_source_path) + if move_original and os.path.isfile(instance.source_path): + os.rename(instance.source_path, old_source_path) - if move_archive and os.path.isfile(new_archive_path): - os.rename(new_archive_path, old_archive_path) + if move_archive and os.path.isfile(instance.archive_path): + os.rename(instance.archive_path, old_archive_path) except Exception as e: # This is fine, since: @@ -281,6 +274,10 @@ def update_filename_and_move_files(sender, instance, **kwargs): # anyway. pass + # restore old values on the instance + instance.filename = old_filename + instance.archive_filename = old_archive_filename + # finally, remove any empty sub folders. This will do nothing if # something has failed above. if not os.path.isfile(old_source_path): From 6220b7f020a4f2e59dc2558d2265229ad6d80e7d Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 12 Feb 2021 16:53:51 +0100 Subject: [PATCH 254/898] reprganized docker file, less layers, new shortcuts for management commands --- Dockerfile | 59 +++++++++++++-------------- docker/install_management_commands.sh | 6 +++ docker/management_script.sh | 15 +++++++ 3 files changed, 50 insertions(+), 30 deletions(-) create mode 100755 docker/install_management_commands.sh create mode 100644 docker/management_script.sh diff --git a/Dockerfile b/Dockerfile index 6247ef009..57f96c39f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,10 +10,6 @@ RUN ./configure && make FROM python:3.7-slim -WORKDIR /usr/src/paperless/ - -COPY requirements.txt ./ - # Binary dependencies RUN apt-get update \ && apt-get -y --no-install-recommends install \ @@ -49,16 +45,24 @@ RUN apt-get update \ tesseract-ocr-spa \ unpaper \ zlib1g \ - && rm -rf /var/lib/apt/lists/* # This pulls in updated dependencies from bullseye to fix some issues with file type detection. # TODO: Remove this once bullseye releases. -RUN echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ + && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ && apt-get update \ && apt-get install --no-install-recommends -y file libmagic-dev \ && rm -rf /var/lib/apt/lists/* \ && rm /etc/apt/sources.list.d/bullseye.list +# copy jbig2enc +COPY --from=jbig2enc /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/ +COPY --from=jbig2enc /usr/src/jbig2enc/src/jbig2 /usr/local/bin/ +COPY --from=jbig2enc /usr/src/jbig2enc/src/*.h /usr/local/include/ + +WORKDIR /usr/src/paperless/src/ + +COPY requirements.txt ../ + # Python dependencies RUN apt-get update \ && apt-get -y --no-install-recommends install \ @@ -67,41 +71,36 @@ RUN apt-get update \ libpq-dev \ libqpdf-dev \ && python3 -m pip install --upgrade --no-cache-dir supervisor \ - && python3 -m pip install --no-cache-dir -r requirements.txt \ + && python3 -m pip install --no-cache-dir -r ../requirements.txt \ && apt-get -y purge build-essential libqpdf-dev \ && apt-get -y autoremove --purge \ - && rm -rf /var/lib/apt/lists/* \ - && mkdir /var/log/supervisord /var/run/supervisord + && rm -rf /var/lib/apt/lists/* +# setup docker-specific things +COPY docker/ ./docker/ -# copy scripts -# this fixes issues with imagemagick and PDF -COPY docker/imagemagick-policy.xml /etc/ImageMagick-6/policy.xml - -COPY gunicorn.conf.py ./ -COPY docker/supervisord.conf /etc/supervisord.conf -COPY docker/docker-entrypoint.sh /sbin/docker-entrypoint.sh - -# copy jbig2enc -COPY --from=jbig2enc /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/ -COPY --from=jbig2enc /usr/src/jbig2enc/src/jbig2 /usr/local/bin/ -COPY --from=jbig2enc /usr/src/jbig2enc/src/*.h /usr/local/include/ +RUN cd docker \ + && cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \ + && mkdir /var/log/supervisord /var/run/supervisord \ + && cp supervisord.conf /etc/supervisord.conf \ + && cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \ + && chmod 755 /sbin/docker-entrypoint.sh \ + && chmod +x install_management_commands.sh \ + && ./install_management_commands.sh \ + && cd .. \ + && rm docker -rf +COPY gunicorn.conf.py ../ # copy app -COPY src/ ./src/ +COPY src/ ./ # add users, setup scripts RUN addgroup --gid 1000 paperless \ && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ - && chown -R paperless:paperless . \ - && chmod 755 /sbin/docker-entrypoint.sh - -WORKDIR /usr/src/paperless/src/ - -RUN sudo -HEu paperless python3 manage.py collectstatic --clear --no-input - -RUN sudo -HEu paperless python3 manage.py compilemessages + && chown -R paperless:paperless ../ \ + && sudo -HEu paperless python3 manage.py collectstatic --clear --no-input \ + && sudo -HEu paperless python3 manage.py compilemessages VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/media", "/usr/src/paperless/consume", "/usr/src/paperless/export"] ENTRYPOINT ["/sbin/docker-entrypoint.sh"] diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh new file mode 100755 index 000000000..6aeca635d --- /dev/null +++ b/docker/install_management_commands.sh @@ -0,0 +1,6 @@ +for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails; +do + echo "installing $command..." + sed "s/management_command/$command/g" management_script.sh > /usr/local/bin/$command + chmod +x /usr/local/bin/$command +done diff --git a/docker/management_script.sh b/docker/management_script.sh new file mode 100644 index 000000000..bffa26e98 --- /dev/null +++ b/docker/management_script.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -e + +cd /usr/src/paperless/src/ + +if [[ $(id -u) == 0 ]] ; +then + sudo -HEu paperless python3 manage.py management_command "$@" +elif [[ $(id -un) == "paperless" ]] ; +then + python3 manage.py management_command "$@" +else + echo "Unknown user." +fi From 3a95e17e195b23883fc161fa70ac877f1c1af94b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 12 Feb 2021 16:54:00 +0100 Subject: [PATCH 255/898] documentation and changelog --- docs/administration.rst | 18 +++++++++++++----- docs/changelog.rst | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index 21b6ebcea..5773a80cc 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -206,26 +206,34 @@ Execute the following management command to migrate your database: Some migrations cannot be undone. The command will issue errors if that happens. +.. _utilities-management-commands: + Management utilities #################### Paperless comes with some management commands that perform various maintenance -tasks on your paperless instance. You can invoke these commands either by +tasks on your paperless instance. You can invoke these commands in the following way: + +With docker-compose, while paperless is running: .. code:: shell-session $ cd /path/to/paperless - $ docker-compose exec -u paperless webserver python3 manage.py <command> <arguments> + $ docker-compose exec webserver <command> <arguments> -or +With docker, while paperless is running: + +.. code:: shell-session + + $ docker exec -it <container-name> <command> <arguments> + +Bare metal: .. code:: shell-session $ cd /path/to/paperless/src $ python3 manage.py <command> <arguments> -depending on whether you use docker or not. - All commands have built-in help, which can be accessed by executing them with the argument ``--help``. diff --git a/docs/changelog.rst b/docs/changelog.rst index a0ca5e5c9..bf07a3c6a 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -23,6 +23,9 @@ This release contains new database migrations. * Added ASN as a placeholder field to the filename format. +* The docker image now comes with built-in shortcuts for most management commands. These are now the recommended way to execute management commands, since these + also ensure that they're always executed as the paperless user and you're less likely to run into permission issues. See :ref:`utilities-management-commands`. + paperless-ng 1.1.0 ################## From d6c7dc6372401e3c529985bbd7830220b57fe2c1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 12 Feb 2021 18:04:15 +0100 Subject: [PATCH 256/898] changelog --- docs/changelog.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index bf07a3c6a..d0d38cce4 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -14,10 +14,10 @@ This release contains new database migrations. * Fixed a bug with filename generation for archive filenames that would cause the archive files of two documents to overlap. - * This happened when ``PAPERLESS_FILENAME_FORMAT`` is used and the filename for two documents is the same, except for the file extension. + * This happened when ``PAPERLESS_FILENAME_FORMAT`` is used and the filenames of two or more documents are the same, except for the file extension. * Paperless will now store the archive filename in the database as well instead of deriving it from the original filename, and use the same logic for detecting and avoiding filename clashes that's also used for original filenames. - * The migrations will repair any missing archive files. If you're using tika, ensure that tika is running while performing the migration. Docker will take care of that. + * The migrations will repair any missing archive files. If you're using tika, ensure that tika is running while performing the migration. Docker-compose will take care of that. * Fixed a bug with thumbnail regeneration when TIKA integration was used. From 508260c6a9e2c732547bb6685398c0b92d0e6f65 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Fri, 12 Feb 2021 18:20:17 +0100 Subject: [PATCH 257/898] change thumbnail display for extra wide images #433 --- docs/changelog.rst | 5 +++++ .../document-card-large/document-card-large.component.scss | 2 +- .../document-card-small/document-card-small.component.scss | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index d0d38cce4..47dd1bc02 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,11 @@ Changelog ********* +paperless-ng 1.1.2 +################## + +* Always show top left corner of thumbnails, even for extra wide documents. + paperless-ng 1.1.1 ################## diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index a549b6f53..c49de93b5 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -6,7 +6,7 @@ .doc-img { object-fit: cover; - object-position: top; + object-position: top left; height: 100%; position: absolute; mix-blend-mode: multiply; diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index a4af1bb11..cbe8fa6f6 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -2,7 +2,7 @@ .doc-img { object-fit: cover; - object-position: top; + object-position: top left; height: 200px; mix-blend-mode: multiply; } From a0c1887fc3278f1e4e98614b3b4392c9170f9153 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 13 Feb 2021 16:39:29 +0100 Subject: [PATCH 258/898] added sanity checker management command for manual execution #534 --- docker/install_management_commands.sh | 2 +- docs/administration.rst | 28 +++++++++++++++ docs/changelog.rst | 2 ++ .../commands/document_sanity_checker.py | 27 ++++++++++++++ src/documents/sanity_checker.py | 10 ++++-- src/documents/tests/test_management.py | 35 +++++++++++++++++++ 6 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 src/documents/management/commands/document_sanity_checker.py diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh index 6aeca635d..17fb8f277 100755 --- a/docker/install_management_commands.sh +++ b/docker/install_management_commands.sh @@ -1,4 +1,4 @@ -for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails; +for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker; do echo "installing $command..." sed "s/management_command/$command/g" management_script.sh > /usr/local/bin/$command diff --git a/docs/administration.rst b/docs/administration.rst index 5773a80cc..c91f501bd 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -410,6 +410,34 @@ the naming scheme. The command takes no arguments and processes all your documents at once. +.. _utilities-sanity-checker: + +Sanity checker +============== + +Paperless has a built-in sanity checker that inspects your document collection for issues. + +The issues detected by the sanity checker are as follows: + +* Missing original files. +* Missing archive files. +* Inaccessible original files due to improper permissions. +* Inaccessible archive files due to improper permissions. +* Corrupted original documents by comparing their checksum against what is stored in the database. +* Corrupted archive documents by comparing their checksum against what is stored in the database. +* Missing thumbnails. +* Inaccessible thumbnails due to improper permissions. +* Documents without any content (warning). +* Orphaned files in the media directory (warning). These are files that are not referenced by any document im paperless. + + +.. code:: + + document_sanity_checker + +The command takes no arguments. Depending on the size of your document archive, this may take some time. + + Fetching e-mail =============== diff --git a/docs/changelog.rst b/docs/changelog.rst index 47dd1bc02..f15c73605 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,6 +10,8 @@ paperless-ng 1.1.2 * Always show top left corner of thumbnails, even for extra wide documents. +* Added a management command for executing the sanity checker directly. See :ref:`utilities-sanity-checker`. + paperless-ng 1.1.1 ################## diff --git a/src/documents/management/commands/document_sanity_checker.py b/src/documents/management/commands/document_sanity_checker.py new file mode 100644 index 000000000..b5982ed90 --- /dev/null +++ b/src/documents/management/commands/document_sanity_checker.py @@ -0,0 +1,27 @@ +import logging +from django.core.management.base import BaseCommand +from documents.sanity_checker import check_sanity, SanityError, SanityWarning + +logger = logging.getLogger("paperless.management.sanity_checker") + + +class Command(BaseCommand): + + help = """ + This command checks your document archive for issues. + """.replace(" ", "") + + def handle(self, *args, **options): + + messages = check_sanity(progress=True) + + if len(messages) == 0: + logger.info("No issues found.") + else: + for msg in messages: + if type(msg) == SanityError: + logger.error(str(msg)) + elif type(msg) == SanityWarning: + logger.warning(str(msg)) + else: + logger.info((str(msg))) diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index 2d30a59d7..f42062154 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -2,6 +2,7 @@ import hashlib import os from django.conf import settings +from tqdm import tqdm from documents.models import Document @@ -38,7 +39,7 @@ class SanityFailedError(Exception): f"{message_string}\n\n===============\n\n") -def check_sanity(): +def check_sanity(progress=False): messages = [] present_files = [] @@ -50,7 +51,12 @@ def check_sanity(): if lockfile in present_files: present_files.remove(lockfile) - for doc in Document.objects.all(): + if progress: + docs = tqdm(Document.objects.all()) + else: + docs = Document.objects.all() + + for doc in docs: # Check sanity of the thumbnail if not os.path.isfile(doc.thumbnail_path): messages.append(SanityError( diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index 1a550a4b4..56710c6e5 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -65,6 +65,7 @@ class TestArchiver(DirectoriesMixin, TestCase): self.assertEqual(doc1.archive_filename, "document.pdf") self.assertEqual(doc2.archive_filename, "document_01.pdf") + class TestDecryptDocuments(TestCase): @override_settings( @@ -154,3 +155,37 @@ class TestCreateClassifier(TestCase): call_command("document_create_classifier") m.assert_called_once() + + +class TestSanityChecker(DirectoriesMixin, TestCase): + + def test_no_errors(self): + with self.assertLogs() as capture: + call_command("document_sanity_checker") + + self.assertEqual(len(capture.output), 1) + self.assertIn("No issues found.", capture.output[0]) + + @mock.patch("documents.management.commands.document_sanity_checker.logger.warning") + @mock.patch("documents.management.commands.document_sanity_checker.logger.error") + def test_warnings(self, error, warning): + doc = Document.objects.create(title="test", filename="test.pdf", checksum="d41d8cd98f00b204e9800998ecf8427e") + Path(doc.source_path).touch() + Path(doc.thumbnail_path).touch() + + call_command("document_sanity_checker") + + error.assert_not_called() + warning.assert_called() + + @mock.patch("documents.management.commands.document_sanity_checker.logger.warning") + @mock.patch("documents.management.commands.document_sanity_checker.logger.error") + def test_errors(self, error, warning): + doc = Document.objects.create(title="test", content="test", filename="test.pdf", checksum="abc") + Path(doc.source_path).touch() + Path(doc.thumbnail_path).touch() + + call_command("document_sanity_checker") + + warning.assert_not_called() + error.assert_called() From 691713ed40acd05c4e3bf47121a8524951701391 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 13 Feb 2021 16:41:03 +0100 Subject: [PATCH 259/898] metadata tab not showing anything if files are missing #534 --- docs/changelog.rst | 2 ++ src/documents/tests/test_api.py | 24 ++++++++++++++++++++++-- src/documents/views.py | 10 ++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index f15c73605..4c40a71ab 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -11,6 +11,8 @@ paperless-ng 1.1.2 * Always show top left corner of thumbnails, even for extra wide documents. * Added a management command for executing the sanity checker directly. See :ref:`utilities-sanity-checker`. + +* Fixed an issue with the metadata tab not reporting anything in case of missing files. paperless-ng 1.1.1 ################## diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 84b3bc185..20eba6628 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -577,8 +577,11 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): def test_get_metadata(self): doc = Document.objects.create(title="test", filename="file.pdf", mime_type="image/png", archive_checksum="A", archive_filename="archive.pdf") - shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "documents", "thumbnails", "0000001.png"), doc.source_path) - shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), doc.archive_path) + source_file = os.path.join(os.path.dirname(__file__), "samples", "documents", "thumbnails", "0000001.png") + archive_file = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf") + + shutil.copy(source_file, doc.source_path) + shutil.copy(archive_file, doc.archive_path) response = self.client.get(f"/api/documents/{doc.pk}/metadata/") self.assertEqual(response.status_code, 200) @@ -591,6 +594,8 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertGreater(len(meta['archive_metadata']), 0) self.assertEqual(meta['media_filename'], "file.pdf") self.assertEqual(meta['archive_media_filename'], "archive.pdf") + self.assertEqual(meta['original_size'], os.stat(source_file).st_size) + self.assertEqual(meta['archive_size'], os.stat(archive_file).st_size) def test_get_metadata_invalid_doc(self): response = self.client.get(f"/api/documents/34576/metadata/") @@ -612,6 +617,21 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertIsNone(meta['archive_metadata']) self.assertIsNone(meta['archive_media_filename']) + def test_get_metadata_missing_files(self): + doc = Document.objects.create(title="test", filename="file.pdf", mime_type="application/pdf", archive_filename="file.pdf", archive_checksum="B", checksum="A") + + response = self.client.get(f"/api/documents/{doc.pk}/metadata/") + self.assertEqual(response.status_code, 200) + + meta = response.data + + self.assertTrue(meta['has_archive_version']) + self.assertIsNone(meta['original_metadata']) + self.assertIsNone(meta['original_size']) + self.assertIsNone(meta['archive_metadata']) + self.assertIsNone(meta['archive_size']) + + def test_get_empty_suggestions(self): doc = Document.objects.create(title="test", mime_type="application/pdf") diff --git a/src/documents/views.py b/src/documents/views.py index 9d1d87235..b2e5b4cd3 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -225,6 +225,12 @@ class DocumentViewSet(RetrieveModelMixin, else: return [] + def get_filesize(self, filename): + if os.path.isfile(filename): + return os.stat(filename).st_size + else: + return None + @action(methods=['get'], detail=True) def metadata(self, request, pk=None): try: @@ -234,7 +240,7 @@ class DocumentViewSet(RetrieveModelMixin, meta = { "original_checksum": doc.checksum, - "original_size": os.stat(doc.source_path).st_size, + "original_size": self.get_filesize(doc.source_path), "original_mime_type": doc.mime_type, "media_filename": doc.filename, "has_archive_version": doc.has_archive_version, @@ -245,7 +251,7 @@ class DocumentViewSet(RetrieveModelMixin, } if doc.has_archive_version: - meta['archive_size'] = os.stat(doc.archive_path).st_size, + meta['archive_size'] = self.get_filesize(doc.archive_path) meta['archive_metadata'] = self.get_metadata( doc.archive_path, "application/pdf") else: From de71556db724a4c1661fd67cb4bb715a49868d14 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 13 Feb 2021 18:01:19 +0100 Subject: [PATCH 260/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 95cd94d29..e2c66690e 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.1", + version: "1.1.2", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index ae805838c..728d237e2 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 1, 1) +__version__ = (1, 1, 2) From 2554bc9821190b6849f3ed9f21a5f0955aa33ab7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 13 Feb 2021 18:09:00 +0100 Subject: [PATCH 261/898] Gotenberg troubleshooting --- docs/troubleshooting.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index ae7fe14c7..d2a76e7b3 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -94,6 +94,30 @@ If you want to get rid of the warning or actually experience issues with automat the file ``classification_model.pickle`` in the data directory and let paperless recreate it. +504 Server Error: Gateway Timeout when adding Office documents +############################################################## + +You may experience these errors when using the optional TIKA integration: + +.. code:: + + requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/convert/office + +Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 10 seconds. +When conversion takes longer, Gotenberg raises this error. + +You can increase the timeout by configuring an environment variable for gotenberg (see also `here <https://thecodingmachine.github.io/gotenberg/#environment_variables.default_wait_timeout>`__). +If using docker-compose, this is achieved by the following configuration change in the ``docker-compose.yml`` file: + +.. code:: yaml + + gotenberg: + image: thecodingmachine/gotenberg + restart: unless-stopped + environment: + DISABLE_GOOGLE_CHROME: 1 + DEFAULT_WAIT_TIMEOUT: 30 + Permission denied errors in the consumption directory ##################################################### From c946263f316cd84531d5314bb766b403aee1cbda Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 13 Feb 2021 19:51:04 +0100 Subject: [PATCH 262/898] revert a faulty change that caused memory usage to explode #537 --- src/documents/classifier.py | 39 +++++++++++--------------- src/documents/tests/test_classifier.py | 5 ++-- src/documents/tests/test_tasks.py | 1 - src/paperless/settings.py | 10 ------- 4 files changed, 18 insertions(+), 37 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index c880e50d6..b577997e3 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -5,7 +5,6 @@ import pickle import re from django.conf import settings -from django.core.cache import cache from documents.models import Document, MatchingModel @@ -31,29 +30,23 @@ def load_classifier(): ) return None - version = os.stat(settings.MODEL_FILE).st_mtime + classifier = DocumentClassifier() + try: + classifier.load() - classifier = cache.get("paperless-classifier", version=version) - - if not classifier: - classifier = DocumentClassifier() - try: - classifier.load() - cache.set("paperless-classifier", classifier, - version=version, timeout=86400) - except (EOFError, IncompatibleClassifierVersionError) as e: - # there's something wrong with the model file. - logger.exception( - f"Unrecoverable error while loading document " - f"classification model, deleting model file." - ) - os.unlink(settings.MODEL_FILE) - classifier = None - except OSError as e: - logger.error( - f"Error while loading document classification model: {str(e)}" - ) - classifier = None + except (EOFError, IncompatibleClassifierVersionError) as e: + # there's something wrong with the model file. + logger.exception( + f"Unrecoverable error while loading document " + f"classification model, deleting model file." + ) + os.unlink(settings.MODEL_FILE) + classifier = None + except OSError as e: + logger.error( + f"Error while loading document classification model: {str(e)}" + ) + classifier = None return classifier diff --git a/src/documents/tests/test_classifier.py b/src/documents/tests/test_classifier.py index 1efe564d1..fcc08f842 100644 --- a/src/documents/tests/test_classifier.py +++ b/src/documents/tests/test_classifier.py @@ -3,6 +3,7 @@ import tempfile from pathlib import Path from unittest import mock +import pytest from django.conf import settings from django.test import TestCase, override_settings @@ -233,7 +234,6 @@ class TestClassifier(DirectoriesMixin, TestCase): self.assertFalse(os.path.exists(settings.MODEL_FILE)) self.assertIsNone(load_classifier()) - @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) @mock.patch("documents.classifier.DocumentClassifier.load") def test_load_classifier(self, load): Path(settings.MODEL_FILE).touch() @@ -242,6 +242,7 @@ class TestClassifier(DirectoriesMixin, TestCase): @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}) @override_settings(MODEL_FILE=os.path.join(os.path.dirname(__file__), "data", "model.pickle")) + @pytest.mark.skip(reason="Disabled caching due to high memory usage - need to investigate.") def test_load_classifier_cached(self): classifier = load_classifier() self.assertIsNotNone(classifier) @@ -250,7 +251,6 @@ class TestClassifier(DirectoriesMixin, TestCase): classifier2 = load_classifier() load.assert_not_called() - @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) @mock.patch("documents.classifier.DocumentClassifier.load") def test_load_classifier_incompatible_version(self, load): Path(settings.MODEL_FILE).touch() @@ -260,7 +260,6 @@ class TestClassifier(DirectoriesMixin, TestCase): self.assertIsNone(load_classifier()) self.assertFalse(os.path.exists(settings.MODEL_FILE)) - @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) @mock.patch("documents.classifier.DocumentClassifier.load") def test_load_classifier_os_error(self, load): Path(settings.MODEL_FILE).touch() diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index ed280441f..8c5a1b5df 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -52,7 +52,6 @@ class TestTasks(DirectoriesMixin, TestCase): load_classifier.assert_called_once() self.assertFalse(os.path.isfile(settings.MODEL_FILE)) - @override_settings(CACHES={'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'}}) def test_train_classifier(self): c = Correspondent.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test") doc = Document.objects.create(correspondent=c, content="test", title="test") diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 60e7b45bd..150709bb1 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -169,16 +169,6 @@ CHANNEL_LAYERS = { }, } -CACHES = { - "default": { - "BACKEND": "django_redis.cache.RedisCache", - "LOCATION": os.getenv("PAPERLESS_REDIS", "redis://localhost:6379"), - "OPTIONS": { - "CLIENT_CLASS": "django_redis.client.DefaultClient", - } - } -} - ############################################################################### # Security # ############################################################################### From 3c5bf9c3d30f850ad817d3e64916731c72a71f24 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sat, 13 Feb 2021 20:25:52 +0100 Subject: [PATCH 263/898] revert django-q configuration --- docs/changelog.rst | 2 ++ src/paperless/settings.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 4c40a71ab..52b53dca8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -14,6 +14,8 @@ paperless-ng 1.1.2 * Fixed an issue with the metadata tab not reporting anything in case of missing files. +* Reverted a change from 1.1.0 that caused huge memory usage due to redis caching. + paperless-ng 1.1.1 ################## diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 150709bb1..718738f71 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -398,7 +398,7 @@ Q_CLUSTER = { 'name': 'paperless', 'catch_up': False, 'workers': TASK_WORKERS, - 'django_redis': 'default' + 'redis': os.getenv("PAPERLESS_REDIS", "redis://localhost:6379") } From 3df3ee575604028d1da125e24b3460dd6b8f8e9d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 14 Feb 2021 07:05:05 +0000 Subject: [PATCH 264/898] Apply translations in cs translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po' on the 'cs' language. --- src/locale/cs/LC_MESSAGES/django.po | 650 ++++++++++++++++++++++++++++ 1 file changed, 650 insertions(+) create mode 100644 src/locale/cs/LC_MESSAGES/django.po diff --git a/src/locale/cs/LC_MESSAGES/django.po b/src/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..959246aab --- /dev/null +++ b/src/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,650 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +# Translators: +# Štěpán Šebestian <mys.orangeorange0123@gmail.com>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-28 22:02+0100\n" +"PO-Revision-Date: 2020-12-30 19:27+0000\n" +"Last-Translator: Štěpán Šebestian <mys.orangeorange0123@gmail.com>, 2021\n" +"Language-Team: Czech (https://www.transifex.com/paperless/teams/115905/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Dokumenty" + +#: documents/models.py:33 +msgid "Any word" +msgstr "Jakékoliv slovo" + +#: documents/models.py:34 +msgid "All words" +msgstr "Všechna slova" + +#: documents/models.py:35 +msgid "Exact match" +msgstr "Přesná shoda" + +#: documents/models.py:36 +msgid "Regular expression" +msgstr "Regulární výraz" + +#: documents/models.py:37 +msgid "Fuzzy word" +msgstr "Fuzzy slovo" + +#: documents/models.py:38 +msgid "Automatic" +msgstr "Automatický" + +#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "název" + +#: documents/models.py:46 +msgid "match" +msgstr "shoda" + +#: documents/models.py:50 +msgid "matching algorithm" +msgstr "algoritmus pro shodu" + +#: documents/models.py:56 +msgid "is insensitive" +msgstr "je ignorováno" + +#: documents/models.py:75 documents/models.py:135 +msgid "correspondent" +msgstr "korespondent" + +#: documents/models.py:76 +msgid "correspondents" +msgstr "korespondenti" + +#: documents/models.py:98 +msgid "color" +msgstr "barva" + +#: documents/models.py:102 +msgid "is inbox tag" +msgstr "tag přichozí" + +#: documents/models.py:104 +msgid "" +"Marks this tag as an inbox tag: All newly consumed documents will be tagged " +"with inbox tags." +msgstr "" +"Označí tento tag jako tag pro příchozí: Všechny nově zkonzumované dokumenty " +"budou označeny tagem pro přichozí" + +#: documents/models.py:109 +msgid "tag" +msgstr "tag" + +#: documents/models.py:110 documents/models.py:166 +msgid "tags" +msgstr "tagy" + +#: documents/models.py:116 documents/models.py:148 +msgid "document type" +msgstr "typ dokumentu" + +#: documents/models.py:117 +msgid "document types" +msgstr "typy dokumentu" + +#: documents/models.py:125 +msgid "Unencrypted" +msgstr "Nešifrované" + +#: documents/models.py:126 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Šifrované pomocí GNU Privacy Guard" + +#: documents/models.py:139 +msgid "title" +msgstr "titulek" + +#: documents/models.py:152 +msgid "content" +msgstr "obsah" + +#: documents/models.py:154 +msgid "" +"The raw, text-only data of the document. This field is primarily used for " +"searching." +msgstr "" +"Nezpracovaná, pouze textová data dokumentu. Toto pole je používáno především" +" pro vyhledávání." + +#: documents/models.py:159 +msgid "mime type" +msgstr "mime typ" + +#: documents/models.py:170 +msgid "checksum" +msgstr "kontrolní součet" + +#: documents/models.py:174 +msgid "The checksum of the original document." +msgstr "Kontrolní součet původního dokumentu" + +#: documents/models.py:178 +msgid "archive checksum" +msgstr "kontrolní součet archivu" + +#: documents/models.py:183 +msgid "The checksum of the archived document." +msgstr "Kontrolní součet archivovaného dokumentu." + +#: documents/models.py:187 documents/models.py:330 +msgid "created" +msgstr "vytvořeno" + +#: documents/models.py:191 +msgid "modified" +msgstr "upraveno" + +#: documents/models.py:195 +msgid "storage type" +msgstr "typ úložiště" + +#: documents/models.py:203 +msgid "added" +msgstr "přidáno" + +#: documents/models.py:207 +msgid "filename" +msgstr "název souboru" + +#: documents/models.py:212 +msgid "Current filename in storage" +msgstr "Aktuální název souboru v úložišti" + +#: documents/models.py:216 +msgid "archive serial number" +msgstr "sériové číslo archivu" + +#: documents/models.py:221 +msgid "The position of this document in your physical document archive." +msgstr "Pozice dokumentu ve vašem archivu fyzických dokumentů" + +#: documents/models.py:227 +msgid "document" +msgstr "dokument" + +#: documents/models.py:228 +msgid "documents" +msgstr "dokumenty" + +#: documents/models.py:313 +msgid "debug" +msgstr "debug" + +#: documents/models.py:314 +msgid "information" +msgstr "informace" + +#: documents/models.py:315 +msgid "warning" +msgstr "varování" + +#: documents/models.py:316 +msgid "error" +msgstr "chyba" + +#: documents/models.py:317 +msgid "critical" +msgstr "kritická" + +#: documents/models.py:321 +msgid "group" +msgstr "skupina" + +#: documents/models.py:324 +msgid "message" +msgstr "zpráva" + +#: documents/models.py:327 +msgid "level" +msgstr "úroveň" + +#: documents/models.py:334 +msgid "log" +msgstr "záznam" + +#: documents/models.py:335 +msgid "logs" +msgstr "záznamy" + +#: documents/models.py:346 documents/models.py:396 +msgid "saved view" +msgstr "uložený pohled" + +#: documents/models.py:347 +msgid "saved views" +msgstr "uložené pohledy" + +#: documents/models.py:350 +msgid "user" +msgstr "uživatel" + +#: documents/models.py:356 +msgid "show on dashboard" +msgstr "zobrazit v dashboardu" + +#: documents/models.py:359 +msgid "show in sidebar" +msgstr "zobrazit v postranním menu" + +#: documents/models.py:363 +msgid "sort field" +msgstr "pole na řazení" + +#: documents/models.py:366 +msgid "sort reverse" +msgstr "třídit opačně" + +#: documents/models.py:372 +msgid "title contains" +msgstr "titulek obsahuje" + +#: documents/models.py:373 +msgid "content contains" +msgstr "obsah obsahuje" + +#: documents/models.py:374 +msgid "ASN is" +msgstr "ASN je" + +#: documents/models.py:375 +msgid "correspondent is" +msgstr "korespondent je" + +#: documents/models.py:376 +msgid "document type is" +msgstr "typ dokumentu je" + +#: documents/models.py:377 +msgid "is in inbox" +msgstr "je v příchozích" + +#: documents/models.py:378 +msgid "has tag" +msgstr "má tag" + +#: documents/models.py:379 +msgid "has any tag" +msgstr "má jakýkoliv tag" + +#: documents/models.py:380 +msgid "created before" +msgstr "vytvořeno před" + +#: documents/models.py:381 +msgid "created after" +msgstr "vytvořeno po" + +#: documents/models.py:382 +msgid "created year is" +msgstr "rok vytvoření je" + +#: documents/models.py:383 +msgid "created month is" +msgstr "měsíc vytvoření je" + +#: documents/models.py:384 +msgid "created day is" +msgstr "den vytvoření je" + +#: documents/models.py:385 +msgid "added before" +msgstr "přidáno před" + +#: documents/models.py:386 +msgid "added after" +msgstr "přidáno po" + +#: documents/models.py:387 +msgid "modified before" +msgstr "upraveno před" + +#: documents/models.py:388 +msgid "modified after" +msgstr "upraveno po" + +#: documents/models.py:389 +msgid "does not have tag" +msgstr "nemá tag" + +#: documents/models.py:400 +msgid "rule type" +msgstr "typ pravidla" + +#: documents/models.py:404 +msgid "value" +msgstr "hodnota" + +#: documents/models.py:410 +msgid "filter rule" +msgstr "filtrovací pravidlo" + +#: documents/models.py:411 +msgid "filter rules" +msgstr "filtrovací pravidla" + +#: documents/serialisers.py:383 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Typ souboru %(type)s není podporován" + +#: documents/templates/index.html:20 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng se načítá..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Odhlášeno od Paperless-ng" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "Byli jste úspěšně odhlášeni. Nashledanou!" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Přihlašte se znovu" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Paperless-ng přihlášení" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Prosím přihlaste se." + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Vaše uživatelské jméno a heslo se neshodují. Prosím, zkuste to znovu." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Uživatelské jméno" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Heslo" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Přihlásit se" + +#: paperless/settings.py:286 +msgid "English" +msgstr "Angličtina" + +#: paperless/settings.py:287 +msgid "German" +msgstr "Němčina" + +#: paperless/settings.py:288 +msgid "Dutch" +msgstr "Holandština" + +#: paperless/settings.py:289 +msgid "French" +msgstr "Francouzština" + +#: paperless/urls.py:114 +msgid "Paperless-ng administration" +msgstr "Správa Paperless-ng" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filtr" + +#: paperless_mail/admin.py:27 +msgid "" +"Paperless will only process mails that match ALL of the filters given below." +msgstr "" +"Paperless zpracuje pouze emaily které odpovídají VŠEM níže zadaným filtrům." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Akce" + +#: paperless_mail/admin.py:39 +msgid "" +"The action applied to the mail. This action is only performed when documents" +" were consumed from the mail. Mails without attachments will remain entirely" +" untouched." +msgstr "" +"Akce provedena na emailu. Tato akce je provedena jen pokud byly dokumenty " +"zkonzumovány z emailu. Emaily bez příloh zůstanou nedotčeny." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadata" + +#: paperless_mail/admin.py:48 +msgid "" +"Assign metadata to documents consumed from this rule automatically. If you " +"do not assign tags, types or correspondents here, paperless will still " +"process all matching rules that you have defined." +msgstr "" +"Automaticky přiřadit metadata dokumentům zkonzumovaných z tohoto pravidla. " +"Pokud zde nepřiřadíte tagy, typy nebo korespondenty, paperless stále " +"zpracuje všechna shodující-se pravidla které jste definovali." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Paperless pošta" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "emailový účet" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "emailové účty" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Žádné šifrování" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Používat SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Používat STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "IMAP server" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "IMAP port" + +#: paperless_mail/models.py:36 +msgid "" +"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " +"SSL connections." +msgstr "" +"Toto je většinou 143 pro nešifrovaná připojení/připojení používající " +"STARTTLS a 993 pro SSL připojení." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "IMAP bezpečnost" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "uživatelské jméno" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "heslo" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "mailové pravidlo" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "mailová pravidla" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Zpracovávat jen přílohy" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Zpracovat všechny soubory, včetně vložených příloh" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Označit jako přečtené, nezpracovávat přečtené emaily" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Označit email, nezpracovávat označené emaily" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Přesunout do specifikované složky" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Odstranit" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Použít předmět jako titulek" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Použít název souboru u přílohy jako titulek" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Nepřiřazovat korespondenta" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Použít emailovou adresu" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Použít jméno (nebo emailovou adresu pokud jméno není dostupné)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Použít korespondenta vybraného níže" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "pořadí" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "účet" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "složka" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filtrovat z" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "název filtru" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "tělo filtru" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "název souboru u přílohy filtru" + +#: paperless_mail/models.py:140 +msgid "" +"Only consume documents which entirely match this filename if specified. " +"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" +"Konzumovat jen dokumenty které přesně odpovídají tomuto názvu souboru pokud " +"specifikováno. Zástupné znaky jako *.pdf nebo *invoice* jsou povoleny. " +"Nezáleží na velikosti písmen." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "maximální stáří" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "Specifikováno ve dnech." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "typ přílohy" + +#: paperless_mail/models.py:154 +msgid "" +"Inline attachments include embedded images, so it's best to combine this " +"option with a filename filter." +msgstr "" +"Vložené přílohy zahrnují vložené obrázky, takže je nejlepší tuto možnost " +"kombinovat s filtrem na název souboru" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "akce" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "parametr akce" + +#: paperless_mail/models.py:167 +msgid "" +"Additional parameter for the action selected above, i.e., the target folder " +"of the move to folder action." +msgstr "" +"Další parametr pro výše vybranou akci, napříkad cílová složka akce přesunutí" +" do složky." + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "nastavit titulek z" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "přiřadit tento tag" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "přiřadit tento typ dokumentu" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "přiřadit korespondenta z" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "přiřadit tohoto korespondenta" From 3649fcaffd4dd4038e2f7320994f1ee37122a973 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 14 Feb 2021 12:29:55 +0100 Subject: [PATCH 265/898] release worker memory after tasks are done. --- src/paperless/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 718738f71..59133dd45 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -397,6 +397,7 @@ TASK_WORKERS = int(os.getenv("PAPERLESS_TASK_WORKERS", default_task_workers())) Q_CLUSTER = { 'name': 'paperless', 'catch_up': False, + 'recycle': 1, 'workers': TASK_WORKERS, 'redis': os.getenv("PAPERLESS_REDIS", "redis://localhost:6379") } From 7f8988ad859d1804d3401ce09f15371dcfd4381a Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 14 Feb 2021 12:50:30 +0100 Subject: [PATCH 266/898] only load channels app if DEBUG is enabled; its only purpose is to monkey-patch the runserver command. --- src/paperless/settings.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 59133dd45..8d14262d1 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -102,10 +102,11 @@ INSTALLED_APPS = [ "django_q", - "channels", - ] + env_apps +if DEBUG: + INSTALLED_APPS.append("channels") + REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.BasicAuthentication', From 547efeed3dd6148d6f94ddcaad37f74527fb5e05 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 14 Feb 2021 14:05:42 +0100 Subject: [PATCH 267/898] changelog --- docs/changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 52b53dca8..fcd14c59d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -16,6 +16,8 @@ paperless-ng 1.1.2 * Reverted a change from 1.1.0 that caused huge memory usage due to redis caching. +* Some memory usage optimizations. + paperless-ng 1.1.1 ################## From ecfe7667ef820f2047d3e3f8f7cfd475e8130991 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 14 Feb 2021 15:38:47 +0100 Subject: [PATCH 268/898] update dependencies --- Pipfile | 3 +- Pipfile.lock | 109 ++++++++++++++++++++++------------------------- requirements.txt | 7 ++- 3 files changed, 54 insertions(+), 65 deletions(-) diff --git a/Pipfile b/Pipfile index aae5f1506..8bacba7a4 100644 --- a/Pipfile +++ b/Pipfile @@ -39,7 +39,7 @@ scikit-learn="==0.24.0" # Prevent scipy updates because 1.6 is incompatible with python 3.6 scipy="~=1.5.4" whitenoise = "~=5.2.0" -watchdog = "*" +watchdog = "~=1.0.0" whoosh="~=2.7.4" inotifyrecursive = "~=0.3.4" ocrmypdf = "~=11.6" @@ -51,7 +51,6 @@ channels = "~=3.0" channels-redis = "*" uvicorn = {extras = ["standard"], version = "*"} concurrent-log-handler = "*" -django-redis = "*" # uvloop 0.15+ incompatible with python 3.6 uvloop = "~=0.14.0" # TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/) diff --git a/Pipfile.lock b/Pipfile.lock index 9d1a75b88..fee6359da 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "b3bed0a6b8981e8fffc1b6aa3bc35a0b1472f28e6f745c62469eb8045740e57b" + "sha256": "bd8b69979d91f4d8c52cac127c891d750c52959807220a98dcf74fed126bfa26" }, "pipfile-spec": 6, "requires": {}, @@ -60,11 +60,11 @@ }, "autobahn": { "hashes": [ - "sha256:93df8fc9d1821c9dabff9fed52181a9ad6eea5e9989d53102c391607d7c1666e", - "sha256:cceed2121b7a93024daa93c91fae33007f8346f0e522796421f36a6183abea99" + "sha256:41a3a3f89cde48643baf4e105d9491c566295f9abee951379e59121784044b8b", + "sha256:7e6b1bf95196b733978bab2d54a7ab8899c16ce11be369dc58422c07b7eea726" ], "markers": "python_version >= '3.6'", - "version": "==21.1.1" + "version": "==21.2.1" }, "automat": { "hashes": [ @@ -90,47 +90,47 @@ }, "cffi": { "hashes": [ - "sha256:00a1ba5e2e95684448de9b89888ccd02c98d512064b4cb987d48f4b40aa0421e", - "sha256:00e28066507bfc3fe865a31f325c8391a1ac2916219340f87dfad602c3e48e5d", - "sha256:045d792900a75e8b1e1b0ab6787dd733a8190ffcf80e8c8ceb2fb10a29ff238a", - "sha256:0638c3ae1a0edfb77c6765d487fee624d2b1ee1bdfeffc1f0b58c64d149e7eec", - "sha256:105abaf8a6075dc96c1fe5ae7aae073f4696f2905fde6aeada4c9d2926752362", - "sha256:155136b51fd733fa94e1c2ea5211dcd4c8879869008fc811648f16541bf99668", - "sha256:1a465cbe98a7fd391d47dce4b8f7e5b921e6cd805ef421d04f5f66ba8f06086c", - "sha256:1d2c4994f515e5b485fd6d3a73d05526aa0fcf248eb135996b088d25dfa1865b", - "sha256:23f318bf74b170c6e9adb390e8bd282457f6de46c19d03b52f3fd042b5e19654", - "sha256:2c24d61263f511551f740d1a065eb0212db1dbbbbd241db758f5244281590c06", - "sha256:51a8b381b16ddd370178a65360ebe15fbc1c71cf6f584613a7ea08bfad946698", - "sha256:594234691ac0e9b770aee9fcdb8fa02c22e43e5c619456efd0d6c2bf276f3eb2", - "sha256:5cf4be6c304ad0b6602f5c4e90e2f59b47653ac1ed9c662ed379fe48a8f26b0c", - "sha256:64081b3f8f6f3c3de6191ec89d7dc6c86a8a43911f7ecb422c60e90c70be41c7", - "sha256:6bc25fc545a6b3d57b5f8618e59fc13d3a3a68431e8ca5fd4c13241cd70d0009", - "sha256:798caa2a2384b1cbe8a2a139d80734c9db54f9cc155c99d7cc92441a23871c03", - "sha256:7c6b1dece89874d9541fc974917b631406233ea0440d0bdfbb8e03bf39a49b3b", - "sha256:7ef7d4ced6b325e92eb4d3502946c78c5367bc416398d387b39591532536734e", - "sha256:840793c68105fe031f34d6a086eaea153a0cd5c491cde82a74b420edd0a2b909", - "sha256:8d6603078baf4e11edc4168a514c5ce5b3ba6e3e9c374298cb88437957960a53", - "sha256:9cc46bc107224ff5b6d04369e7c595acb700c3613ad7bcf2e2012f62ece80c35", - "sha256:9f7a31251289b2ab6d4012f6e83e58bc3b96bd151f5b5262467f4bb6b34a7c26", - "sha256:9ffb888f19d54a4d4dfd4b3f29bc2c16aa4972f1c2ab9c4ab09b8ab8685b9c2b", - "sha256:a5ed8c05548b54b998b9498753fb9cadbfd92ee88e884641377d8a8b291bcc01", - "sha256:a7711edca4dcef1a75257b50a2fbfe92a65187c47dab5a0f1b9b332c5919a3fb", - "sha256:af5c59122a011049aad5dd87424b8e65a80e4a6477419c0c1015f73fb5ea0293", - "sha256:b18e0a9ef57d2b41f5c68beefa32317d286c3d6ac0484efd10d6e07491bb95dd", - "sha256:b4e248d1087abf9f4c10f3c398896c87ce82a9856494a7155823eb45a892395d", - "sha256:ba4e9e0ae13fc41c6b23299545e5ef73055213e466bd107953e4a013a5ddd7e3", - "sha256:be8661bcee1bc2fc4b033a6ab65bd1f87ce5008492601695d0b9a4e820c3bde5", - "sha256:c6332685306b6417a91b1ff9fae889b3ba65c2292d64bd9245c093b1b284809d", - "sha256:d5ff0621c88ce83a28a10d2ce719b2ee85635e85c515f12bac99a95306da4b2e", - "sha256:d9efd8b7a3ef378dd61a1e77367f1924375befc2eba06168b6ebfa903a5e59ca", - "sha256:df5169c4396adc04f9b0a05f13c074df878b6052430e03f50e68adf3a57aa28d", - "sha256:ebb253464a5d0482b191274f1c8bf00e33f7e0b9c66405fbffc61ed2c839c775", - "sha256:ec80dc47f54e6e9a78181ce05feb71a0353854cc26999db963695f950b5fb375", - "sha256:f032b34669220030f905152045dfa27741ce1a6db3324a5bc0b96b6c7420c87b", - "sha256:f60567825f791c6f8a592f3c6e3bd93dd2934e3f9dac189308426bd76b00ef3b", - "sha256:f803eaa94c2fcda012c047e62bc7a51b0bdabda1cad7a92a522694ea2d76e49f" + "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", + "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", + "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", + "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", + "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", + "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", + "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", + "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", + "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", + "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", + "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", + "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", + "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", + "sha256:5560dbf8deedbffb638d8a2da31da91094db361cc07f8a501a339b2daae2cbcc", + "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", + "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", + "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", + "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", + "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", + "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", + "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", + "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", + "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", + "sha256:9338beed13d880320450d95c9e07ccf839faa3ea7b75d788f4ed46d845044a71", + "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", + "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", + "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", + "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", + "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", + "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", + "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", + "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", + "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", + "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", + "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", + "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", + "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", + "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", + "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" ], - "version": "==1.14.4" + "version": "==1.14.5" }, "channels": { "hashes": [ @@ -273,15 +273,6 @@ "index": "pypi", "version": "==1.3.4" }, - "django-redis": { - "hashes": [ - "sha256:1133b26b75baa3664164c3f44b9d5d133d1b8de45d94d79f38d1adc5b1d502e5", - "sha256:306589c7021e6468b2656edc89f62b8ba67e8d5a1c8877e2688042263daa7a63", - "sha256:f2b25b62cc95b63b7059aaf8e81710e7eea94678e545d31c46e47a6f4af99e56" - ], - "index": "pypi", - "version": "==4.12.1" - }, "djangorestframework": { "hashes": [ "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7", @@ -1113,11 +1104,11 @@ }, "tqdm": { "hashes": [ - "sha256:2874fa525c051177583ec59c0fb4583e91f28ccd3f217ffad2acdb32d2c789ac", - "sha256:ab9b659241d82b8b51b2269ee243ec95286046bf06015c4e15a947cc15914211" + "sha256:11d544652edbdfc9cc41aa4c8a5c166513e279f3f2d9f1a9e1c89935b51de6ff", + "sha256:a89be573bfddb81bb0b395a416d5e55e3ecc73ce95a368a4f6360bedea33195e" ], "index": "pypi", - "version": "==4.56.1" + "version": "==4.56.2" }, "twisted": { "extras": [ @@ -1649,11 +1640,11 @@ }, "pygments": { "hashes": [ - "sha256:bc9591213a8f0e0ca1a5e68a479b4887fdc3e75d0774e5c71c31920c427de435", - "sha256:df49d09b498e83c1a73128295860250b0b7edd4c723a32e9bc0d295c7c2ec337" + "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0", + "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88" ], "markers": "python_version >= '3.5'", - "version": "==2.7.4" + "version": "==2.8.0" }, "pyparsing": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index cf63b4660..0a0ae75c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,11 +12,11 @@ arrow==0.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, asgiref==3.3.1; python_version >= '3.5' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -autobahn==21.1.1; python_version >= '3.6' +autobahn==21.2.1; python_version >= '3.6' automat==20.2.0 blessed==1.17.12 certifi==2020.12.5 -cffi==1.14.4 +cffi==1.14.5 channels-redis==3.2.0 channels==3.0.3 chardet==4.0.0; python_version >= '3.1' @@ -32,7 +32,6 @@ django-extensions==3.1.1 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 -django-redis==4.12.1 django==3.1.6 djangorestframework==3.12.2 filelock==3.0.12 @@ -87,7 +86,7 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.56.1 +tqdm==4.56.2 twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' txaio==20.12.1; python_version >= '3.6' tzlocal==2.1 From bec06bf249c68dfc3750a9d74b05abf9c5c53789 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 14 Feb 2021 17:08:29 +0100 Subject: [PATCH 269/898] better sanity checker that logs messages in the log files and does not fail on warnings. --- docs/changelog.rst | 6 +- .../commands/document_sanity_checker.py | 16 +-- src/documents/sanity_checker.py | 116 ++++++++--------- src/documents/tasks.py | 14 ++- src/documents/tests/test_management.py | 27 ++-- src/documents/tests/test_sanity_check.py | 119 +++++++++++++++--- src/documents/tests/test_tasks.py | 36 ++++-- 7 files changed, 212 insertions(+), 122 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index fcd14c59d..e5048a097 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,8 +10,10 @@ paperless-ng 1.1.2 * Always show top left corner of thumbnails, even for extra wide documents. -* Added a management command for executing the sanity checker directly. See :ref:`utilities-sanity-checker`. - +* Added a management command for executing the sanity checker directly. + See :ref:`utilities-sanity-checker`. + The sanity checker will also report errors in the log files. + * Fixed an issue with the metadata tab not reporting anything in case of missing files. * Reverted a change from 1.1.0 that caused huge memory usage due to redis caching. diff --git a/src/documents/management/commands/document_sanity_checker.py b/src/documents/management/commands/document_sanity_checker.py index b5982ed90..c04a5efef 100644 --- a/src/documents/management/commands/document_sanity_checker.py +++ b/src/documents/management/commands/document_sanity_checker.py @@ -1,8 +1,5 @@ -import logging from django.core.management.base import BaseCommand -from documents.sanity_checker import check_sanity, SanityError, SanityWarning - -logger = logging.getLogger("paperless.management.sanity_checker") +from documents.sanity_checker import check_sanity class Command(BaseCommand): @@ -15,13 +12,4 @@ class Command(BaseCommand): messages = check_sanity(progress=True) - if len(messages) == 0: - logger.info("No issues found.") - else: - for msg in messages: - if type(msg) == SanityError: - logger.error(str(msg)) - elif type(msg) == SanityWarning: - logger.warning(str(msg)) - else: - logger.info((str(msg))) + messages.log_messages() diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index f42062154..2e1777841 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -1,4 +1,5 @@ import hashlib +import logging import os from django.conf import settings @@ -7,40 +8,48 @@ from tqdm import tqdm from documents.models import Document -class SanityMessage: - message = None +class SanityCheckMessages: + + def __init__(self): + self._messages = [] + + def error(self, message): + self._messages.append({"level": logging.ERROR, "message": message}) + + def warning(self, message): + self._messages.append({"level": logging.WARNING, "message": message}) + + def info(self, message): + self._messages.append({"level": logging.INFO, "message": message}) + + def log_messages(self): + logger = logging.getLogger("paperless.sanity_checker") + + if len(self._messages) == 0: + logger.info("Sanity checker detected no issues.") + else: + for msg in self._messages: + logger.log(msg['level'], msg['message']) + + def __len__(self): + return len(self._messages) + + def __getitem__(self, item): + return self._messages[item] + + def has_error(self): + return any([msg['level'] == logging.ERROR for msg in self._messages]) + + def has_warning(self): + return any([msg['level'] == logging.WARNING for msg in self._messages]) -class SanityWarning(SanityMessage): - def __init__(self, message): - self.message = message - - def __str__(self): - return f"Warning: {self.message}" - - -class SanityError(SanityMessage): - def __init__(self, message): - self.message = message - - def __str__(self): - return f"ERROR: {self.message}" - - -class SanityFailedError(Exception): - - def __init__(self, messages): - self.messages = messages - - def __str__(self): - message_string = "\n".join([str(m) for m in self.messages]) - return ( - f"The following issuse were found by the sanity checker:\n" - f"{message_string}\n\n===============\n\n") +class SanityCheckFailedException(Exception): + pass def check_sanity(progress=False): - messages = [] + messages = SanityCheckMessages() present_files = [] for root, subdirs, files in os.walk(settings.MEDIA_ROOT): @@ -59,8 +68,7 @@ def check_sanity(progress=False): for doc in docs: # Check sanity of the thumbnail if not os.path.isfile(doc.thumbnail_path): - messages.append(SanityError( - f"Thumbnail of document {doc.pk} does not exist.")) + messages.error(f"Thumbnail of document {doc.pk} does not exist.") else: if os.path.normpath(doc.thumbnail_path) in present_files: present_files.remove(os.path.normpath(doc.thumbnail_path)) @@ -68,15 +76,14 @@ def check_sanity(progress=False): with doc.thumbnail_file as f: f.read() except OSError as e: - messages.append(SanityError( + messages.error( f"Cannot read thumbnail file of document {doc.pk}: {e}" - )) + ) # Check sanity of the original file # TODO: extract method if not os.path.isfile(doc.source_path): - messages.append(SanityError( - f"Original of document {doc.pk} does not exist.")) + messages.error(f"Original of document {doc.pk} does not exist.") else: if os.path.normpath(doc.source_path) in present_files: present_files.remove(os.path.normpath(doc.source_path)) @@ -84,31 +91,31 @@ def check_sanity(progress=False): with doc.source_file as f: checksum = hashlib.md5(f.read()).hexdigest() except OSError as e: - messages.append(SanityError( - f"Cannot read original file of document {doc.pk}: {e}")) + messages.error( + f"Cannot read original file of document {doc.pk}: {e}") else: if not checksum == doc.checksum: - messages.append(SanityError( + messages.error( f"Checksum mismatch of document {doc.pk}. " f"Stored: {doc.checksum}, actual: {checksum}." - )) + ) # Check sanity of the archive file. if doc.archive_checksum and not doc.archive_filename: - messages.append(SanityError( + messages.error( f"Document {doc.pk} has an archive file checksum, but no " f"archive filename." - )) + ) elif not doc.archive_checksum and doc.archive_filename: - messages.append(SanityError( + messages.error( f"Document {doc.pk} has an archive file, but its checksum is " f"missing." - )) + ) elif doc.has_archive_version: if not os.path.isfile(doc.archive_path): - messages.append(SanityError( + messages.error( f"Archived version of document {doc.pk} does not exist." - )) + ) else: if os.path.normpath(doc.archive_path) in present_files: present_files.remove(os.path.normpath(doc.archive_path)) @@ -116,26 +123,23 @@ def check_sanity(progress=False): with doc.archive_file as f: checksum = hashlib.md5(f.read()).hexdigest() except OSError as e: - messages.append(SanityError( + messages.error( f"Cannot read archive file of document {doc.pk}: {e}" - )) + ) else: if not checksum == doc.archive_checksum: - messages.append(SanityError( + messages.error( f"Checksum mismatch of archived document " f"{doc.pk}. " - f"Stored: {doc.checksum}, actual: {checksum}." - )) + f"Stored: {doc.archive_checksum}, " + f"actual: {checksum}." + ) # other document checks if not doc.content: - messages.append(SanityWarning( - f"Document {doc.pk} has no content." - )) + messages.info(f"Document {doc.pk} has no content.") for extra_file in present_files: - messages.append(SanityWarning( - f"Orphaned file in media dir: {extra_file}" - )) + messages.warning(f"Orphaned file in media dir: {extra_file}") return messages diff --git a/src/documents/tasks.py b/src/documents/tasks.py index f74a3d420..ddfd2eac3 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -9,8 +9,7 @@ from documents import index, sanity_checker from documents.classifier import DocumentClassifier, load_classifier from documents.consumer import Consumer, ConsumerError from documents.models import Document, Tag, DocumentType, Correspondent -from documents.sanity_checker import SanityFailedError - +from documents.sanity_checker import SanityCheckFailedException logger = logging.getLogger("paperless.tasks") @@ -94,8 +93,15 @@ def consume_file(path, def sanity_check(): messages = sanity_checker.check_sanity() - if len(messages) > 0: - raise SanityFailedError(messages) + messages.log_messages() + + if messages.has_error(): + raise SanityCheckFailedException( + "Sanity check failed with errors. See log.") + elif messages.has_warning(): + return "Sanity check exited with warnings. See log." + elif len(messages) > 0: + return "Sanity check exited with infos. See log." else: return "No issues detected." diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index 56710c6e5..40eaaf277 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -159,33 +159,20 @@ class TestCreateClassifier(TestCase): class TestSanityChecker(DirectoriesMixin, TestCase): - def test_no_errors(self): + def test_no_issues(self): with self.assertLogs() as capture: call_command("document_sanity_checker") self.assertEqual(len(capture.output), 1) - self.assertIn("No issues found.", capture.output[0]) + self.assertIn("Sanity checker detected no issues.", capture.output[0]) - @mock.patch("documents.management.commands.document_sanity_checker.logger.warning") - @mock.patch("documents.management.commands.document_sanity_checker.logger.error") - def test_warnings(self, error, warning): - doc = Document.objects.create(title="test", filename="test.pdf", checksum="d41d8cd98f00b204e9800998ecf8427e") - Path(doc.source_path).touch() - Path(doc.thumbnail_path).touch() - - call_command("document_sanity_checker") - - error.assert_not_called() - warning.assert_called() - - @mock.patch("documents.management.commands.document_sanity_checker.logger.warning") - @mock.patch("documents.management.commands.document_sanity_checker.logger.error") - def test_errors(self, error, warning): + def test_errors(self): doc = Document.objects.create(title="test", content="test", filename="test.pdf", checksum="abc") Path(doc.source_path).touch() Path(doc.thumbnail_path).touch() - call_command("document_sanity_checker") + with self.assertLogs() as capture: + call_command("document_sanity_checker") - warning.assert_not_called() - error.assert_called() + self.assertEqual(len(capture.output), 1) + self.assertIn("Checksum mismatch of document", capture.output[0]) diff --git a/src/documents/tests/test_sanity_check.py b/src/documents/tests/test_sanity_check.py index fae18aaca..6f73e4962 100644 --- a/src/documents/tests/test_sanity_check.py +++ b/src/documents/tests/test_sanity_check.py @@ -1,3 +1,4 @@ +import logging import os import shutil from pathlib import Path @@ -7,10 +8,59 @@ from django.conf import settings from django.test import TestCase from documents.models import Document -from documents.sanity_checker import check_sanity, SanityFailedError +from documents.sanity_checker import check_sanity, SanityCheckMessages from documents.tests.utils import DirectoriesMixin +class TestSanityCheckMessages(TestCase): + + def test_no_messages(self): + messages = SanityCheckMessages() + self.assertEqual(len(messages), 0) + self.assertFalse(messages.has_error()) + self.assertFalse(messages.has_warning()) + with self.assertLogs() as capture: + messages.log_messages() + self.assertEqual(len(capture.output), 1) + self.assertEqual(capture.records[0].levelno, logging.INFO) + self.assertEqual(capture.records[0].message, "Sanity checker detected no issues.") + + def test_info(self): + messages = SanityCheckMessages() + messages.info("Something might be wrong") + self.assertEqual(len(messages), 1) + self.assertFalse(messages.has_error()) + self.assertFalse(messages.has_warning()) + with self.assertLogs() as capture: + messages.log_messages() + self.assertEqual(len(capture.output), 1) + self.assertEqual(capture.records[0].levelno, logging.INFO) + self.assertEqual(capture.records[0].message, "Something might be wrong") + + def test_warning(self): + messages = SanityCheckMessages() + messages.warning("Something is wrong") + self.assertEqual(len(messages), 1) + self.assertFalse(messages.has_error()) + self.assertTrue(messages.has_warning()) + with self.assertLogs() as capture: + messages.log_messages() + self.assertEqual(len(capture.output), 1) + self.assertEqual(capture.records[0].levelno, logging.WARNING) + self.assertEqual(capture.records[0].message, "Something is wrong") + + def test_error(self): + messages = SanityCheckMessages() + messages.error("Something is seriously wrong") + self.assertEqual(len(messages), 1) + self.assertTrue(messages.has_error()) + self.assertFalse(messages.has_warning()) + with self.assertLogs() as capture: + messages.log_messages() + self.assertEqual(len(capture.output), 1) + self.assertEqual(capture.records[0].levelno, logging.ERROR) + self.assertEqual(capture.records[0].message, "Something is seriously wrong") + class TestSanityCheck(DirectoriesMixin, TestCase): def make_test_data(self): @@ -33,72 +83,105 @@ class TestSanityCheck(DirectoriesMixin, TestCase): def test_no_thumbnail(self): doc = self.make_test_data() os.remove(doc.thumbnail_path) - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Thumbnail of document .* does not exist") def test_thumbnail_no_access(self): doc = self.make_test_data() os.chmod(doc.thumbnail_path, 0o000) - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Cannot read thumbnail file of document") os.chmod(doc.thumbnail_path, 0o777) def test_no_original(self): doc = self.make_test_data() os.remove(doc.source_path) - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Original of document .* does not exist.") def test_original_no_access(self): doc = self.make_test_data() os.chmod(doc.source_path, 0o000) - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Cannot read original file of document") os.chmod(doc.source_path, 0o777) def test_original_checksum_mismatch(self): doc = self.make_test_data() doc.checksum = "WOW" doc.save() - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Checksum mismatch of document") def test_no_archive(self): doc = self.make_test_data() os.remove(doc.archive_path) - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Archived version of document .* does not exist.") def test_archive_no_access(self): doc = self.make_test_data() os.chmod(doc.archive_path, 0o000) - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Cannot read archive file of document") os.chmod(doc.archive_path, 0o777) def test_archive_checksum_mismatch(self): doc = self.make_test_data() doc.archive_checksum = "WOW" doc.save() - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Checksum mismatch of archived document") def test_empty_content(self): doc = self.make_test_data() doc.content = "" doc.save() - self.assertEqual(len(check_sanity()), 1) + messages = check_sanity() + self.assertFalse(messages.has_error()) + self.assertFalse(messages.has_warning()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Document .* has no content.") def test_orphaned_file(self): doc = self.make_test_data() Path(self.dirs.originals_dir, "orphaned").touch() - self.assertEqual(len(check_sanity()), 1) - - def test_error_tostring(self): - Document.objects.create(title="test", checksum="dgfhj", archive_checksum="dfhg", content="", pk=1, filename="0000001.pdf", archive_filename="0000001.pdf") - string = str(SanityFailedError(check_sanity())) - self.assertIsNotNone(string) + messages = check_sanity() + self.assertFalse(messages.has_error()) + self.assertTrue(messages.has_warning()) + self.assertEqual(len(messages), 1) + self.assertRegex(messages[0]['message'], "Orphaned file in media dir") def test_archive_filename_no_checksum(self): doc = self.make_test_data() doc.archive_checksum = None doc.save() - self.assertEqual(len(check_sanity()), 2) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 2) + self.assertRegex(messages[0]['message'], "has an archive file, but its checksum is missing.") def test_archive_checksum_no_filename(self): doc = self.make_test_data() doc.archive_filename = None doc.save() - self.assertEqual(len(check_sanity()), 2) + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertEqual(len(messages), 2) + self.assertRegex(messages[0]['message'], "has an archive file checksum, but no archive filename.") diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index 8c5a1b5df..dab8ebfb9 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -2,12 +2,12 @@ import os from unittest import mock from django.conf import settings -from django.test import TestCase, override_settings +from django.test import TestCase from django.utils import timezone from documents import tasks from documents.models import Document, Tag, Correspondent, DocumentType -from documents.sanity_checker import SanityError, SanityFailedError +from documents.sanity_checker import SanityCheckMessages, SanityCheckFailedException from documents.tests.utils import DirectoriesMixin @@ -74,13 +74,33 @@ class TestTasks(DirectoriesMixin, TestCase): self.assertNotEqual(mtime2, mtime3) @mock.patch("documents.tasks.sanity_checker.check_sanity") - def test_sanity_check(self, m): - m.return_value = [] - tasks.sanity_check() + def test_sanity_check_success(self, m): + m.return_value = SanityCheckMessages() + self.assertEqual(tasks.sanity_check(), "No issues detected.") m.assert_called_once() - m.reset_mock() - m.return_value = [SanityError("")] - self.assertRaises(SanityFailedError, tasks.sanity_check) + + @mock.patch("documents.tasks.sanity_checker.check_sanity") + def test_sanity_check_error(self, m): + messages = SanityCheckMessages() + messages.error("Some error") + m.return_value = messages + self.assertRaises(SanityCheckFailedException, tasks.sanity_check) + m.assert_called_once() + + @mock.patch("documents.tasks.sanity_checker.check_sanity") + def test_sanity_check_warning(self, m): + messages = SanityCheckMessages() + messages.warning("Some warning") + m.return_value = messages + self.assertEqual(tasks.sanity_check(), "Sanity check exited with warnings. See log.") + m.assert_called_once() + + @mock.patch("documents.tasks.sanity_checker.check_sanity") + def test_sanity_check_info(self, m): + messages = SanityCheckMessages() + messages.info("Some info") + m.return_value = messages + self.assertEqual(tasks.sanity_check(), "Sanity check exited with infos. See log.") m.assert_called_once() def test_bulk_update_documents(self): From fc68c3f1447051d9f584ff87c6e795901f421545 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Sun, 14 Feb 2021 17:24:31 +0100 Subject: [PATCH 270/898] reorganized test case --- docs/changelog.rst | 3 +- src/documents/tests/test_sanity_check.py | 55 +++++++----------------- 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index e5048a097..f51360258 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -12,7 +12,8 @@ paperless-ng 1.1.2 * Added a management command for executing the sanity checker directly. See :ref:`utilities-sanity-checker`. - The sanity checker will also report errors in the log files. + +* The weekly sanity check now reports messages in the log files. * Fixed an issue with the metadata tab not reporting anything in case of missing files. diff --git a/src/documents/tests/test_sanity_check.py b/src/documents/tests/test_sanity_check.py index 6f73e4962..b07ba930a 100644 --- a/src/documents/tests/test_sanity_check.py +++ b/src/documents/tests/test_sanity_check.py @@ -73,6 +73,11 @@ class TestSanityCheck(DirectoriesMixin, TestCase): return Document.objects.create(title="test", checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", content="test", pk=1, filename="0000001.pdf", mime_type="application/pdf", archive_filename="0000001.pdf") + def assertSanityError(self, messageRegex): + messages = check_sanity() + self.assertTrue(messages.has_error()) + self.assertRegex(messages[0]['message'], messageRegex) + def test_no_docs(self): self.assertEqual(len(check_sanity()), 0) @@ -83,71 +88,47 @@ class TestSanityCheck(DirectoriesMixin, TestCase): def test_no_thumbnail(self): doc = self.make_test_data() os.remove(doc.thumbnail_path) - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Thumbnail of document .* does not exist") + self.assertSanityError("Thumbnail of document .* does not exist") def test_thumbnail_no_access(self): doc = self.make_test_data() os.chmod(doc.thumbnail_path, 0o000) - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Cannot read thumbnail file of document") + self.assertSanityError("Cannot read thumbnail file of document") os.chmod(doc.thumbnail_path, 0o777) def test_no_original(self): doc = self.make_test_data() os.remove(doc.source_path) - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Original of document .* does not exist.") + self.assertSanityError("Original of document .* does not exist.") def test_original_no_access(self): doc = self.make_test_data() os.chmod(doc.source_path, 0o000) - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Cannot read original file of document") + self.assertSanityError("Cannot read original file of document") os.chmod(doc.source_path, 0o777) def test_original_checksum_mismatch(self): doc = self.make_test_data() doc.checksum = "WOW" doc.save() - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Checksum mismatch of document") + self.assertSanityError("Checksum mismatch of document") def test_no_archive(self): doc = self.make_test_data() os.remove(doc.archive_path) - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Archived version of document .* does not exist.") + self.assertSanityError("Archived version of document .* does not exist.") def test_archive_no_access(self): doc = self.make_test_data() os.chmod(doc.archive_path, 0o000) - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Cannot read archive file of document") + self.assertSanityError("Cannot read archive file of document") os.chmod(doc.archive_path, 0o777) def test_archive_checksum_mismatch(self): doc = self.make_test_data() doc.archive_checksum = "WOW" doc.save() - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 1) - self.assertRegex(messages[0]['message'], "Checksum mismatch of archived document") + self.assertSanityError("Checksum mismatch of archived document") def test_empty_content(self): doc = self.make_test_data() @@ -172,16 +153,10 @@ class TestSanityCheck(DirectoriesMixin, TestCase): doc = self.make_test_data() doc.archive_checksum = None doc.save() - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 2) - self.assertRegex(messages[0]['message'], "has an archive file, but its checksum is missing.") + self.assertSanityError("has an archive file, but its checksum is missing.") def test_archive_checksum_no_filename(self): doc = self.make_test_data() doc.archive_filename = None doc.save() - messages = check_sanity() - self.assertTrue(messages.has_error()) - self.assertEqual(len(messages), 2) - self.assertRegex(messages[0]['message'], "has an archive file checksum, but no archive filename.") + self.assertSanityError("has an archive file checksum, but no archive filename.") From dac21862fe1393c818047f96c687b008a5168c3f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 11:25:25 +0100 Subject: [PATCH 271/898] load sklearn modules only when training data has changed --- src/documents/classifier.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index b577997e3..47dd7dfc7 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -95,9 +95,6 @@ class DocumentClassifier(object): pickle.dump(self.document_type_classifier, f) def train(self): - from sklearn.feature_extraction.text import CountVectorizer - from sklearn.neural_network import MLPClassifier - from sklearn.preprocessing import MultiLabelBinarizer, LabelBinarizer data = list() labels_tags = list() @@ -162,6 +159,10 @@ class DocumentClassifier(object): ) ) + from sklearn.feature_extraction.text import CountVectorizer + from sklearn.neural_network import MLPClassifier + from sklearn.preprocessing import MultiLabelBinarizer, LabelBinarizer + # Step 2: vectorize data logger.debug("Vectorizing data...") self.data_vectorizer = CountVectorizer( From a417be18b753e8d7086f01092ec9ca711681ab17 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 11:26:13 +0100 Subject: [PATCH 272/898] remove unused imports --- src/documents/admin.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/documents/admin.py b/src/documents/admin.py index f87ab1ec5..47e6c7f89 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -1,10 +1,8 @@ from django.contrib import admin -from django.utils.html import format_html, format_html_join -from django.utils.safestring import mark_safe from whoosh.writing import AsyncWriter from . import index -from .models import Correspondent, Document, DocumentType, Log, Tag, \ +from .models import Correspondent, Document, DocumentType, Tag, \ SavedView, SavedViewFilterRule From f8f49bac75ad112dc0e16bb0c19a3604deff34b7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 11:52:46 +0100 Subject: [PATCH 273/898] only import dateparser when required --- src/documents/parsers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 1ed5deb3c..b2714f6a3 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -6,7 +6,6 @@ import shutil import subprocess import tempfile -import dateparser import magic from django.conf import settings from django.utils import timezone @@ -200,6 +199,8 @@ def parse_date(filename, text): """ Call dateparser.parse with a particular date ordering """ + import dateparser + return dateparser.parse( ds, settings={ From 94cc9876d97e8df988d0aa3378bc308cdedf94fc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 12:18:10 +0100 Subject: [PATCH 274/898] local import of ocrmypdf so that the webserver does not load that --- src/paperless_tesseract/parsers.py | 10 ++++++---- src/paperless_tesseract/tests/test_parser.py | 11 +++-------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 271a840df..78c335ac3 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -2,12 +2,8 @@ import json import os import re -import ocrmypdf -import pdftotext -import pikepdf from PIL import Image from django.conf import settings -from ocrmypdf import InputFileError, EncryptedPdfError from documents.parsers import DocumentParser, ParseError, \ make_thumbnail_from_pdf @@ -22,6 +18,8 @@ class RasterisedDocumentParser(DocumentParser): logging_name = "paperless.parsing.tesseract" def extract_metadata(self, document_path, mime_type): + import pikepdf + namespace_pattern = re.compile(r"\{(.*)\}(.*)") result = [] @@ -91,6 +89,9 @@ class RasterisedDocumentParser(DocumentParser): return None def parse(self, document_path, mime_type, file_name=None): + import ocrmypdf + from ocrmypdf import InputFileError, EncryptedPdfError + mode = settings.OCR_MODE text_original = get_text_from_pdf(document_path) @@ -223,6 +224,7 @@ def strip_excess_whitespace(text): def get_text_from_pdf(pdf_file): + import pdftotext if not os.path.isfile(pdf_file): return None diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 644587de0..4fd314667 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -164,17 +164,12 @@ class TestParser(DirectoriesMixin, TestCase): self.assertRaises(ParseError, f) - @mock.patch("paperless_tesseract.parsers.ocrmypdf.ocr") - def test_image_calc_a4_dpi(self, m): + def test_image_calc_a4_dpi(self): parser = RasterisedDocumentParser(None) - parser.parse(os.path.join(self.SAMPLE_FILES, "simple-no-dpi.png"), "image/png") + dpi = parser.calculate_a4_dpi(os.path.join(self.SAMPLE_FILES, "simple-no-dpi.png")) - m.assert_called_once() - - args, kwargs = m.call_args - - self.assertEqual(kwargs['image_dpi'], 62) + self.assertEqual(dpi, 62) @mock.patch("paperless_tesseract.parsers.RasterisedDocumentParser.calculate_a4_dpi") def test_image_dpi_fail(self, m): From d1f206b4cd66e2ab267ca6f98a29d8db21909451 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 13:26:36 +0100 Subject: [PATCH 275/898] some search index optimizations --- src/documents/admin.py | 10 ++++---- src/documents/bulk_edit.py | 7 +++--- src/documents/index.py | 22 +++++++++++++---- src/documents/signals/handlers.py | 4 +++- src/documents/tests/test_admin.py | 40 +++++++++++++++++++++---------- src/documents/views.py | 22 ++++++++--------- 6 files changed, 69 insertions(+), 36 deletions(-) diff --git a/src/documents/admin.py b/src/documents/admin.py index 47e6c7f89..aee45b49d 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -1,7 +1,5 @@ from django.contrib import admin -from whoosh.writing import AsyncWriter -from . import index from .models import Correspondent, Document, DocumentType, Tag, \ SavedView, SavedViewFilterRule @@ -84,17 +82,21 @@ class DocumentAdmin(admin.ModelAdmin): created_.short_description = "Created" def delete_queryset(self, request, queryset): - ix = index.open_index() - with AsyncWriter(ix) as writer: + from documents import index + + with index.open_index_writer() as writer: for o in queryset: index.remove_document(writer, o) + super(DocumentAdmin, self).delete_queryset(request, queryset) def delete_model(self, request, obj): + from documents import index index.remove_document_from_index(obj) super(DocumentAdmin, self).delete_model(request, obj) def save_model(self, request, obj, form, change): + from documents import index index.add_or_update_document(obj) super(DocumentAdmin, self).save_model(request, obj, form, change) diff --git a/src/documents/bulk_edit.py b/src/documents/bulk_edit.py index c0c80a795..7503eafc5 100644 --- a/src/documents/bulk_edit.py +++ b/src/documents/bulk_edit.py @@ -2,9 +2,7 @@ import itertools from django.db.models import Q from django_q.tasks import async_task -from whoosh.writing import AsyncWriter -from documents import index from documents.models import Document, Correspondent, DocumentType @@ -99,8 +97,9 @@ def modify_tags(doc_ids, add_tags, remove_tags): def delete(doc_ids): Document.objects.filter(id__in=doc_ids).delete() - ix = index.open_index() - with AsyncWriter(ix) as writer: + from documents import index + + with index.open_index_writer() as writer: for id in doc_ids: index.remove_document_by_id(writer, id) diff --git a/src/documents/index.py b/src/documents/index.py index ea788f4b3..89e56e930 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -86,6 +86,22 @@ def open_index(recreate=False): return create_in(settings.INDEX_DIR, get_schema()) +@contextmanager +def open_index_writer(ix=None, optimize=False): + if ix: + writer = AsyncWriter(ix) + else: + writer = AsyncWriter(open_index()) + + try: + yield writer + except Exception as e: + logger.exception(str(e)) + writer.cancel() + finally: + writer.commit(optimize=optimize) + + def update_document(writer, doc): tags = ",".join([t.name for t in doc.tags.all()]) writer.update_document( @@ -110,14 +126,12 @@ def remove_document_by_id(writer, doc_id): def add_or_update_document(document): - ix = open_index() - with AsyncWriter(ix) as writer: + with open_index_writer() as writer: update_document(writer, document) def remove_document_from_index(document): - ix = open_index() - with AsyncWriter(ix) as writer: + with open_index_writer() as writer: remove_document(writer, document) diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index eb981661c..ad63bf301 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -11,7 +11,7 @@ from django.dispatch import receiver from django.utils import timezone from filelock import FileLock -from .. import index, matching +from .. import matching from ..file_handling import delete_empty_directories, \ create_source_path_directory, \ generate_unique_filename @@ -305,4 +305,6 @@ def set_log_entry(sender, document=None, logging_group=None, **kwargs): def add_to_index(sender, document, **kwargs): + from documents import index + index.add_or_update_document(document) diff --git a/src/documents/tests/test_admin.py b/src/documents/tests/test_admin.py index 840747d68..ce00a0698 100644 --- a/src/documents/tests/test_admin.py +++ b/src/documents/tests/test_admin.py @@ -4,6 +4,7 @@ from django.contrib.admin.sites import AdminSite from django.test import TestCase from django.utils import timezone +from documents import index from documents.admin import DocumentAdmin from documents.models import Document from documents.tests.utils import DirectoriesMixin @@ -11,37 +12,52 @@ from documents.tests.utils import DirectoriesMixin class TestDocumentAdmin(DirectoriesMixin, TestCase): + def get_document_from_index(self, doc): + ix = index.open_index() + with ix.searcher() as searcher: + return searcher.document(id=doc.id) + def setUp(self) -> None: super(TestDocumentAdmin, self).setUp() self.doc_admin = DocumentAdmin(model=Document, admin_site=AdminSite()) - @mock.patch("documents.admin.index.add_or_update_document") - def test_save_model(self, m): + def test_save_model(self): doc = Document.objects.create(title="test") + doc.title = "new title" self.doc_admin.save_model(None, doc, None, None) self.assertEqual(Document.objects.get(id=doc.id).title, "new title") - m.assert_called_once() + self.assertEqual(self.get_document_from_index(doc)['title'], "new title") - @mock.patch("documents.admin.index.remove_document") - def test_delete_model(self, m): + def test_delete_model(self): doc = Document.objects.create(title="test") - self.doc_admin.delete_model(None, doc) - self.assertRaises(Document.DoesNotExist, Document.objects.get, id=doc.id) - m.assert_called_once() + index.add_or_update_document(doc) + self.assertIsNotNone(self.get_document_from_index(doc)) - @mock.patch("documents.admin.index.remove_document") - def test_delete_queryset(self, m): + self.doc_admin.delete_model(None, doc) + + self.assertRaises(Document.DoesNotExist, Document.objects.get, id=doc.id) + self.assertIsNone(self.get_document_from_index(doc)) + + def test_delete_queryset(self): + docs = [] for i in range(42): - Document.objects.create(title="Many documents with the same title", checksum=f"{i:02}") + doc = Document.objects.create(title="Many documents with the same title", checksum=f"{i:02}") + docs.append(doc) + index.add_or_update_document(doc) self.assertEqual(Document.objects.count(), 42) + for doc in docs: + self.assertIsNotNone(self.get_document_from_index(doc)) + self.doc_admin.delete_queryset(None, Document.objects.all()) - self.assertEqual(m.call_count, 42) self.assertEqual(Document.objects.count(), 0) + for doc in docs: + self.assertIsNone(self.get_document_from_index(doc)) + def test_created(self): doc = Document.objects.create(title="test", created=timezone.datetime(2020, 4, 12)) self.assertEqual(self.doc_admin.created_(doc), "2020-04-12") diff --git a/src/documents/views.py b/src/documents/views.py index b2e5b4cd3..9d7b04508 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -32,7 +32,6 @@ from rest_framework.viewsets import ( ViewSet ) -import documents.index as index from paperless.db import GnuPG from paperless.views import StandardPagination from .classifier import load_classifier @@ -176,10 +175,12 @@ class DocumentViewSet(RetrieveModelMixin, def update(self, request, *args, **kwargs): response = super(DocumentViewSet, self).update( request, *args, **kwargs) + from documents import index index.add_or_update_document(self.get_object()) return response def destroy(self, request, *args, **kwargs): + from documents import index index.remove_document_from_index(self.get_object()) return super(DocumentViewSet, self).destroy(request, *args, **kwargs) @@ -501,10 +502,6 @@ class SearchView(APIView): permission_classes = (IsAuthenticated,) - def __init__(self, *args, **kwargs): - super(SearchView, self).__init__(*args, **kwargs) - self.ix = index.open_index() - def add_infos_to_hit(self, r): try: doc = Document.objects.get(id=r['id']) @@ -525,6 +522,7 @@ class SearchView(APIView): } def get(self, request, format=None): + from documents import index if 'query' in request.query_params: query = request.query_params['query'] @@ -554,8 +552,10 @@ class SearchView(APIView): if page < 1: page = 1 + ix = index.open_index() + try: - with index.query_page(self.ix, page, query, more_like_id, more_like_content) as (result_page, corrected_query): # NOQA: E501 + with index.query_page(ix, page, query, more_like_id, more_like_content) as (result_page, corrected_query): # NOQA: E501 return Response( {'count': len(result_page), 'page': result_page.pagenum, @@ -570,10 +570,6 @@ class SearchAutoCompleteView(APIView): permission_classes = (IsAuthenticated,) - def __init__(self, *args, **kwargs): - super(SearchAutoCompleteView, self).__init__(*args, **kwargs) - self.ix = index.open_index() - def get(self, request, format=None): if 'term' in request.query_params: term = request.query_params['term'] @@ -587,7 +583,11 @@ class SearchAutoCompleteView(APIView): else: limit = 10 - return Response(index.autocomplete(self.ix, term, limit)) + from documents import index + + ix = index.open_index() + + return Response(index.autocomplete(ix, term, limit)) class StatisticsView(APIView): From 0bb5dce4b9a39226803c1d39769b63fa9fd6bd51 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 14:52:47 +0100 Subject: [PATCH 276/898] bugfix dismissing wrong status messages --- src-ui/src/app/services/consumer-status.service.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 23df0871f..e03282175 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -169,7 +169,12 @@ export class ConsumerStatusService { } dismiss(status: FileStatus) { - let index = this.consumerStatus.findIndex(s => s.filename == status.filename) + let index + if (status.taskId != null) { + index = this.consumerStatus.findIndex(s => s.taskId == status.taskId) + } else { + index = this.consumerStatus.findIndex(s => s.filename == status.filename) + } if (index > -1) { this.consumerStatus.splice(index, 1) From a20bfeecd4b735493baa94a9dc3aded6aaa0f278 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 16:27:35 +0100 Subject: [PATCH 277/898] PAPERLESS_WEBSERVER_WORKERS option --- docs/changelog.rst | 8 ++++++ docs/configuration.rst | 62 ++++++++++++++++++++++++++++++++++++++++++ docs/setup.rst | 5 +++- gunicorn.conf.py | 4 ++- 4 files changed, 77 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index f51360258..1b3434117 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,14 @@ Changelog ********* +paperless-ng 1.1.3 +################## + +* Added a docker-specific configuration option to adjust the number of + worker processes of the web server. See :ref:`configuration-docker`. + +* Some more memory usage optimizations. + paperless-ng 1.1.2 ################## diff --git a/docs/configuration.rst b/docs/configuration.rst index a307cc25a..95914e836 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -555,3 +555,65 @@ PAPERLESS_GS_BINARY=<path> PAPERLESS_OPTIPNG_BINARY=<path> Defaults to "/usr/bin/optipng". + + +.. _configuration-docker: + +Docker-specific options +####################### + +These options don't have any effect in ``paperless.conf``. These options adjust +the behavior of the docker container. Configure these in `docker-compose.env`. + +PAPERLESS_WEBSERVER_WORKERS=<num> + The number of worker processes the webserver should spawn. More worker processes + usually result in the front end to load data much quicker. However, each worker process + also loads the entire application into memory separately, so increasing this value + will increase RAM usage. + + Consider configuring this to 1 on low power devices with limited amount of RAM. + + Defaults to 2. + +USERMAP_UID=<uid> + The ID of the paperless user in the container. Set this to your actual user ID on the + host system, which you can get by executing + + .. code:: shell-session + + $ id -u + + Paperless will change ownership on its folders to this user, so you need to get this right + in order to be able to write to the consumption directory. + + Defaults to 1000. + +USERMAP_GID=<gid> + The ID of the paperless Group in the container. Set this to your actual group ID on the + host system, which you can get by executing + + .. code:: shell-session + + $ id -g + + Paperless will change ownership on its folders to this group, so you need to get this right + in order to be able to write to the consumption directory. + + Defaults to 1000. + +PAPERLESS_OCR_LANGUAGES=<list> + Additional OCR languages to install. By default, paperless comes with + English, German, Italian, Spanish and French. If your language is not in this list, install + additional languages with this configuration option: + + .. code:: bash + + PAPERLESS_OCR_LANGUAGES=tur ces + + To actually use these languages, also set the default OCR language of paperless: + + .. code:: bash + + PAPERLESS_OCR_LANGUAGE=tur + + Defaults to none, which does not install any additional languages. diff --git a/docs/setup.rst b/docs/setup.rst index 4025b6721..8ebb6f83c 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -763,7 +763,8 @@ configuring some options in paperless can help improve performance immensely: * Stick with SQLite to save some resources. * Consider setting ``PAPERLESS_OCR_PAGES`` to 1, so that paperless will only OCR - the first page of your documents. + the first page of your documents. In most cases, this page contains enough + information to be able to find it. * ``PAPERLESS_TASK_WORKERS`` and ``PAPERLESS_THREADS_PER_WORKER`` are configured to use all cores. The Raspberry Pi models 3 and up have 4 cores, meaning that paperless will use 2 workers and 2 threads per worker. This may result in @@ -776,6 +777,8 @@ configuring some options in paperless can help improve performance immensely: file generation for already ocr'ed documents entirely. * Set ``PAPERLESS_OPTIMIZE_THUMBNAILS`` to 'false' if you want faster consumption times. Thumbnails will be about 20% larger. +* If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to + 1. This will save some memory. For details, refer to :ref:`configuration`. diff --git a/gunicorn.conf.py b/gunicorn.conf.py index 6fcbe6b0e..995b4fb9d 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -1,5 +1,7 @@ +import os + bind = '0.0.0.0:8000' -workers = 2 +workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 2)) worker_class = 'uvicorn.workers.UvicornWorker' timeout = 120 From c84ed25f11d7dad2d4b2258d82e4e3b3a0ce1430 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 16:37:44 +0100 Subject: [PATCH 278/898] added a note regarding python 3.6 --- docs/changelog.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1b3434117..978a2e966 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -13,6 +13,16 @@ paperless-ng 1.1.3 * Some more memory usage optimizations. +.. note:: + + Many packages that paperless depends on are slowly dropping Python 3.6 + support one after another, including the web server. + + At some point, paperless will drop Python 3.6 support. If using a bare + metal installation upgrade to python 3.7 or newer if you're still on 3.6. + + If using docker, this does not affect you. + paperless-ng 1.1.2 ################## From 9fe1aa0bf35cb882bca0402b5d1c60b33e882a06 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 16:46:06 +0100 Subject: [PATCH 279/898] note regarding Python 3.6 --- docs/changelog.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 978a2e966..fa1be64fd 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -15,11 +15,12 @@ paperless-ng 1.1.3 .. note:: - Many packages that paperless depends on are slowly dropping Python 3.6 - support one after another, including the web server. + Some packages that paperless depends on are slowly dropping Python 3.6 + support one after another, including the web server. Supporting Python + 3.6 means that I cannot update these packages anymore. At some point, paperless will drop Python 3.6 support. If using a bare - metal installation upgrade to python 3.7 or newer if you're still on 3.6. + metal installation and you're still on Python 3.6, upgrade to 3.7 or newer. If using docker, this does not affect you. From 062db1400deda7677f82d25d848fd4dad340674c Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 16:52:45 +0100 Subject: [PATCH 280/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index e2c66690e..b2ffebc09 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.2", + version: "1.1.3", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 728d237e2..08f427169 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 1, 2) +__version__ = (1, 1, 3) From aced453d8215b750bf325be3024f4280204fd2e9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 23:14:54 +0100 Subject: [PATCH 281/898] only show inbox statistics if inbox tags are defined --- .../statistics-widget.component.html | 4 ++-- src/documents/tests/test_api.py | 7 +++++++ src/documents/views.py | 12 +++++++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html index 6ab996675..a29b50f78 100644 --- a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html @@ -1,6 +1,6 @@ <app-widget-frame title="Statistics" i18n-title> <ng-container content> - <p class="card-text" i18n>Documents in inbox: {{statistics.documents_inbox}}</p> - <p class="card-text" i18n>Total documents: {{statistics.documents_total}}</p> + <p class="card-text" i18n *ngIf="statistics?.documents_inbox != null">Documents in inbox: {{statistics?.documents_inbox}}</p> + <p class="card-text" i18n>Total documents: {{statistics?.documents_total}}</p> </ng-container> </app-widget-frame> diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 20eba6628..01e7210a5 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -442,6 +442,13 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(response.data['documents_total'], 3) self.assertEqual(response.data['documents_inbox'], 1) + def test_statistics_no_inbox_tag(self): + Document.objects.create(title="none1", checksum="A") + + response = self.client.get("/api/statistics/") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data['documents_inbox'], None) + @mock.patch("documents.views.async_task") def test_upload(self, m): diff --git a/src/documents/views.py b/src/documents/views.py index 9d7b04508..68d6e3c77 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -595,8 +595,14 @@ class StatisticsView(APIView): permission_classes = (IsAuthenticated,) def get(self, request, format=None): - return Response({ - 'documents_total': Document.objects.all().count(), - 'documents_inbox': Document.objects.filter( + documents_total = Document.objects.all().count() + if Tag.objects.filter(is_inbox_tag=True).exists(): + documents_inbox = Document.objects.filter( tags__is_inbox_tag=True).distinct().count() + else: + documents_inbox = None + + return Response({ + 'documents_total': documents_total, + 'documents_inbox': documents_inbox, }) From 3d31b9567b3d77219994aebc2a10f727c5b2b3c5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Mon, 15 Feb 2021 23:44:48 +0100 Subject: [PATCH 282/898] changelog --- docs/changelog.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index fa1be64fd..8b87e642e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -13,12 +13,14 @@ paperless-ng 1.1.3 * Some more memory usage optimizations. +* Don't show inbox statistics if no inbox tag is defined. + .. note:: Some packages that paperless depends on are slowly dropping Python 3.6 support one after another, including the web server. Supporting Python 3.6 means that I cannot update these packages anymore. - + At some point, paperless will drop Python 3.6 support. If using a bare metal installation and you're still on Python 3.6, upgrade to 3.7 or newer. From cd3d5e8d638b187362ed2d6abfc47d78cc9e379f Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Tue, 16 Feb 2021 14:54:18 +0100 Subject: [PATCH 283/898] added en-GB language --- src-ui/angular.json | 3 +- src-ui/src/app/app.module.ts | 2 + .../manage/settings/settings.component.html | 2 +- src-ui/src/app/services/settings.service.ts | 1 + src-ui/src/locale/messages.en_GB.xlf | 2 +- src/locale/en_GB/LC_MESSAGES/django.po | 6 +- .../{en-us => en_US}/LC_MESSAGES/django.po | 178 ++++++++++-------- src/paperless/settings.py | 3 +- 8 files changed, 107 insertions(+), 90 deletions(-) rename src/locale/{en-us => en_US}/LC_MESSAGES/django.po (81%) diff --git a/src-ui/angular.json b/src-ui/angular.json index 829a482af..a26dd8713 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -18,7 +18,8 @@ "locales": { "de": "src/locale/messages.de.xlf", "nl-NL": "src/locale/messages.nl_NL.xlf", - "fr": "src/locale/messages.fr.xlf" + "fr": "src/locale/messages.fr.xlf", + "en-GB": "src/locale/messages.en_GB.xlf" } }, "architect": { diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 49e937c0b..54c19a216 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -64,10 +64,12 @@ import { CustomDatePipe } from './pipes/custom-date.pipe'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; import localeDe from '@angular/common/locales/de'; +import localeEnGb from '@angular/common/locales/en-GB'; registerLocaleData(localeFr) registerLocaleData(localeNl) registerLocaleData(localeDe) +registerLocaleData(localeEnGb) @NgModule({ declarations: [ diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index affe2f0b0..aa7ea05d3 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -167,7 +167,7 @@ </li> </ul> - <div [ngbNavOutlet]="nav" class="border-left border-right border-bottom p-3 mb-3 shadow"></div> + <div [ngbNavOutlet]="nav" class="border-left border-right border-bottom p-3 mb-3 shadow-sm"></div> <button type="submit" class="btn btn-primary" i18n>Save</button> </form> diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index f3e437ada..a145ae5a7 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -80,6 +80,7 @@ export class SettingsService { getLanguageOptions(): LanguageOption[] { return [ {code: "en-US", name: $localize`English (US)`, englishName: "English (US)"}, + {code: "en-GB", name: $localize`English (GB)`, englishName: "English (GB)"}, {code: "de", name: $localize`German`, englishName: "German"}, {code: "nl", name: $localize`Dutch`, englishName: "Dutch"}, {code: "fr", name: $localize`French`, englishName: "French"} diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 4df278c69..49baa77ed 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -515,7 +515,7 @@ </trans-unit> <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> <source>Color</source> - <target>Color</target> + <target>Colour</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 5f6901f7f..de13e5d34 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,10 +2,10 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# +# # Translators: # Ali Bates <xadium@gmail.com>, 2021 -# +# #, fuzzy msgid "" msgstr "" @@ -76,7 +76,7 @@ msgstr "correspondents" #: documents/models.py:98 msgid "color" -msgstr "color" +msgstr "colour" #: documents/models.py:102 msgid "is inbox tag" diff --git a/src/locale/en-us/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po similarity index 81% rename from src/locale/en-us/LC_MESSAGES/django.po rename to src/locale/en_US/LC_MESSAGES/django.po index fdf3fd809..cb31bbc8c 100644 --- a/src/locale/en-us/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-28 22:02+0100\n" +"POT-Creation-Date: 2021-02-16 14:52+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" @@ -21,144 +21,144 @@ msgstr "" msgid "Documents" msgstr "" -#: documents/models.py:33 +#: documents/models.py:32 msgid "Any word" msgstr "" -#: documents/models.py:34 +#: documents/models.py:33 msgid "All words" msgstr "" -#: documents/models.py:35 +#: documents/models.py:34 msgid "Exact match" msgstr "" -#: documents/models.py:36 +#: documents/models.py:35 msgid "Regular expression" msgstr "" -#: documents/models.py:37 +#: documents/models.py:36 msgid "Fuzzy word" msgstr "" -#: documents/models.py:38 +#: documents/models.py:37 msgid "Automatic" msgstr "" -#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "" -#: documents/models.py:46 +#: documents/models.py:45 msgid "match" msgstr "" -#: documents/models.py:50 +#: documents/models.py:49 msgid "matching algorithm" msgstr "" -#: documents/models.py:56 +#: documents/models.py:55 msgid "is insensitive" msgstr "" -#: documents/models.py:75 documents/models.py:135 +#: documents/models.py:74 documents/models.py:134 msgid "correspondent" msgstr "" -#: documents/models.py:76 +#: documents/models.py:75 msgid "correspondents" msgstr "" -#: documents/models.py:98 +#: documents/models.py:97 msgid "color" msgstr "" -#: documents/models.py:102 +#: documents/models.py:101 msgid "is inbox tag" msgstr "" -#: documents/models.py:104 +#: documents/models.py:103 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." msgstr "" -#: documents/models.py:109 +#: documents/models.py:108 msgid "tag" msgstr "" -#: documents/models.py:110 documents/models.py:166 +#: documents/models.py:109 documents/models.py:165 msgid "tags" msgstr "" -#: documents/models.py:116 documents/models.py:148 +#: documents/models.py:115 documents/models.py:147 msgid "document type" msgstr "" -#: documents/models.py:117 +#: documents/models.py:116 msgid "document types" msgstr "" -#: documents/models.py:125 +#: documents/models.py:124 msgid "Unencrypted" msgstr "" -#: documents/models.py:126 +#: documents/models.py:125 msgid "Encrypted with GNU Privacy Guard" msgstr "" -#: documents/models.py:139 +#: documents/models.py:138 msgid "title" msgstr "" -#: documents/models.py:152 +#: documents/models.py:151 msgid "content" msgstr "" -#: documents/models.py:154 +#: documents/models.py:153 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." msgstr "" -#: documents/models.py:159 +#: documents/models.py:158 msgid "mime type" msgstr "" -#: documents/models.py:170 +#: documents/models.py:169 msgid "checksum" msgstr "" -#: documents/models.py:174 +#: documents/models.py:173 msgid "The checksum of the original document." msgstr "" -#: documents/models.py:178 +#: documents/models.py:177 msgid "archive checksum" msgstr "" -#: documents/models.py:183 +#: documents/models.py:182 msgid "The checksum of the archived document." msgstr "" -#: documents/models.py:187 documents/models.py:330 +#: documents/models.py:186 documents/models.py:342 msgid "created" msgstr "" -#: documents/models.py:191 +#: documents/models.py:190 msgid "modified" msgstr "" -#: documents/models.py:195 +#: documents/models.py:194 msgid "storage type" msgstr "" -#: documents/models.py:203 +#: documents/models.py:202 msgid "added" msgstr "" -#: documents/models.py:207 +#: documents/models.py:206 msgid "filename" msgstr "" @@ -167,178 +167,186 @@ msgid "Current filename in storage" msgstr "" #: documents/models.py:216 +msgid "archive filename" +msgstr "" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:226 msgid "archive serial number" msgstr "" -#: documents/models.py:221 +#: documents/models.py:231 msgid "The position of this document in your physical document archive." msgstr "" -#: documents/models.py:227 +#: documents/models.py:237 msgid "document" msgstr "" -#: documents/models.py:228 +#: documents/models.py:238 msgid "documents" msgstr "" -#: documents/models.py:313 +#: documents/models.py:325 msgid "debug" msgstr "" -#: documents/models.py:314 +#: documents/models.py:326 msgid "information" msgstr "" -#: documents/models.py:315 +#: documents/models.py:327 msgid "warning" msgstr "" -#: documents/models.py:316 +#: documents/models.py:328 msgid "error" msgstr "" -#: documents/models.py:317 +#: documents/models.py:329 msgid "critical" msgstr "" -#: documents/models.py:321 +#: documents/models.py:333 msgid "group" msgstr "" -#: documents/models.py:324 +#: documents/models.py:336 msgid "message" msgstr "" -#: documents/models.py:327 +#: documents/models.py:339 msgid "level" msgstr "" -#: documents/models.py:334 +#: documents/models.py:346 msgid "log" msgstr "" -#: documents/models.py:335 +#: documents/models.py:347 msgid "logs" msgstr "" -#: documents/models.py:346 documents/models.py:396 +#: documents/models.py:358 documents/models.py:408 msgid "saved view" msgstr "" -#: documents/models.py:347 +#: documents/models.py:359 msgid "saved views" msgstr "" -#: documents/models.py:350 +#: documents/models.py:362 msgid "user" msgstr "" -#: documents/models.py:356 +#: documents/models.py:368 msgid "show on dashboard" msgstr "" -#: documents/models.py:359 +#: documents/models.py:371 msgid "show in sidebar" msgstr "" -#: documents/models.py:363 +#: documents/models.py:375 msgid "sort field" msgstr "" -#: documents/models.py:366 +#: documents/models.py:378 msgid "sort reverse" msgstr "" -#: documents/models.py:372 +#: documents/models.py:384 msgid "title contains" msgstr "" -#: documents/models.py:373 +#: documents/models.py:385 msgid "content contains" msgstr "" -#: documents/models.py:374 +#: documents/models.py:386 msgid "ASN is" msgstr "" -#: documents/models.py:375 +#: documents/models.py:387 msgid "correspondent is" msgstr "" -#: documents/models.py:376 +#: documents/models.py:388 msgid "document type is" msgstr "" -#: documents/models.py:377 +#: documents/models.py:389 msgid "is in inbox" msgstr "" -#: documents/models.py:378 +#: documents/models.py:390 msgid "has tag" msgstr "" -#: documents/models.py:379 +#: documents/models.py:391 msgid "has any tag" msgstr "" -#: documents/models.py:380 +#: documents/models.py:392 msgid "created before" msgstr "" -#: documents/models.py:381 +#: documents/models.py:393 msgid "created after" msgstr "" -#: documents/models.py:382 +#: documents/models.py:394 msgid "created year is" msgstr "" -#: documents/models.py:383 +#: documents/models.py:395 msgid "created month is" msgstr "" -#: documents/models.py:384 +#: documents/models.py:396 msgid "created day is" msgstr "" -#: documents/models.py:385 +#: documents/models.py:397 msgid "added before" msgstr "" -#: documents/models.py:386 +#: documents/models.py:398 msgid "added after" msgstr "" -#: documents/models.py:387 +#: documents/models.py:399 msgid "modified before" msgstr "" -#: documents/models.py:388 +#: documents/models.py:400 msgid "modified after" msgstr "" -#: documents/models.py:389 +#: documents/models.py:401 msgid "does not have tag" msgstr "" -#: documents/models.py:400 +#: documents/models.py:412 msgid "rule type" msgstr "" -#: documents/models.py:404 +#: documents/models.py:416 msgid "value" msgstr "" -#: documents/models.py:410 +#: documents/models.py:422 msgid "filter rule" msgstr "" -#: documents/models.py:411 +#: documents/models.py:423 msgid "filter rules" msgstr "" -#: documents/serialisers.py:383 +#: documents/serialisers.py:370 #, python-format msgid "File type %(type)s not supported" msgstr "" @@ -383,19 +391,23 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:286 -msgid "English" +#: paperless/settings.py:291 +msgid "English (US)" msgstr "" -#: paperless/settings.py:287 +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:293 msgid "German" msgstr "" -#: paperless/settings.py:288 +#: paperless/settings.py:294 msgid "Dutch" msgstr "" -#: paperless/settings.py:289 +#: paperless/settings.py:295 msgid "French" msgstr "" diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 8d14262d1..42ddec88d 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -288,7 +288,8 @@ if os.getenv("PAPERLESS_DBHOST"): LANGUAGE_CODE = 'en-us' LANGUAGES = [ - ("en-us", _("English")), + ("en-us", _("English (US)")), + ("en-gb", _("English (GB)")), ("de", _("German")), ("nl-nl", _("Dutch")), ("fr", _("French")) From 8e89c4ddabfb7a6ccbd197eaadfaae802ad632dc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 17 Feb 2021 12:15:22 +0100 Subject: [PATCH 284/898] add support for iso 8601 date display --- .../manage/settings/settings.component.html | 2 +- .../manage/settings/settings.component.ts | 7 +++++-- src-ui/src/app/pipes/custom-date.pipe.ts | 17 ++++++++++++++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index aa7ea05d3..3674bbcb9 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -34,7 +34,7 @@ <div class="col"> <select class="form-control" formControlName="dateLocale"> - <option *ngFor="let lang of dateLocaleOptions" [ngValue]="lang.code">{{lang.name}}<span *ngIf="lang.code"> - {{today | date:'shortDate':null:lang.code}}</span></option> + <option *ngFor="let lang of dateLocaleOptions" [ngValue]="lang.code">{{lang.name}}<span *ngIf="lang.code"> - {{today | customDate:'shortDate':null:lang.code}}</span></option> </select> </div> diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 47c7b8d7b..15cfb8a19 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -35,7 +35,7 @@ export class SettingsComponent implements OnInit { savedViews: PaperlessSavedView[] get computedDateLocale(): string { - return this.settingsForm.value.dateLocale || this.settingsForm.value.displayLanguage + return this.settingsForm.value.dateLocale || this.settingsForm.value.displayLanguage || this.currentLocale } constructor( @@ -92,7 +92,10 @@ export class SettingsComponent implements OnInit { } get dateLocaleOptions(): LanguageOption[] { - return [{code: "", name: $localize`Use date format of display language`}].concat(this.settings.getLanguageOptions()) + return [ + {code: "", name: $localize`Use date format of display language`}, + {code: "iso-8601", name: $localize`ISO 8601`} + ].concat(this.settings.getLanguageOptions()) } get today() { diff --git a/src-ui/src/app/pipes/custom-date.pipe.ts b/src-ui/src/app/pipes/custom-date.pipe.ts index 19989fbdd..cf5a931cb 100644 --- a/src-ui/src/app/pipes/custom-date.pipe.ts +++ b/src-ui/src/app/pipes/custom-date.pipe.ts @@ -2,18 +2,29 @@ import { DatePipe } from '@angular/common'; import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'; import { SettingsService, SETTINGS_KEYS } from '../services/settings.service'; +const FORMAT_TO_ISO_FORMAT = { + "longDate": "y-MM-dd", + "mediumDate": "yy-MM-dd", + "shortDate": "yy-MM-dd" +} + @Pipe({ name: 'customDate' }) export class CustomDatePipe extends DatePipe implements PipeTransform { constructor(@Inject(LOCALE_ID) locale: string, private settings: SettingsService) { - super(settings.get(SETTINGS_KEYS.DATE_LOCALE) || locale) - + super(locale) } transform(value: any, format?: string, timezone?: string, locale?: string): string | null { - return super.transform(value, format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT), timezone, locale) + let l = locale || this.settings.get(SETTINGS_KEYS.DATE_LOCALE) + let f = format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT) + if (l == "iso-8601") { + return super.transform(value, FORMAT_TO_ISO_FORMAT[f], timezone) + } else { + return super.transform(value, format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT), timezone, locale) + } } } From 1f113b77abb2fad04a2620ff61b2b046b640adf9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 17 Feb 2021 12:25:34 +0100 Subject: [PATCH 285/898] update requirements --- Pipfile.lock | 18 +++++++++--------- requirements.txt | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index fee6359da..f75949d20 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -591,11 +591,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:a54634d017a2f44aa2115b0b6ae5aa41a7cec018f5c53d16ad3abec1e70b3db7", - "sha256:d0e2da48d4abd90f48f0937b2cd4ba57503b56c603f5e3aa91e20e3b21a036cd" + "sha256:0f624456a50be0b0bc8c0b59704d159f637616c093a1cabe8bb383706561bcf7", + "sha256:b829ad640a6160423162012e094ee2f7cd074ec99efadd7f7486954ec9182985" ], "index": "pypi", - "version": "==11.6.0" + "version": "==11.6.2" }, "pathvalidate": { "hashes": [ @@ -841,11 +841,11 @@ }, "python-magic": { "hashes": [ - "sha256:356efa93c8899047d1eb7d3eb91e871ba2f5b1376edbaf4cc305e3c872207355", - "sha256:b757db2a5289ea3f1ced9e60f072965243ea43a2221430048fd8cacab17be0ce" + "sha256:8551e804c09a3398790bd9e392acb26554ae2609f29c72abb0b9dee9a5571eae", + "sha256:ca884349f2c92ce830e3f498c5b7c7051fe2942c3ee4332f65213b8ebff15a62" ], "index": "pypi", - "version": "==0.4.18" + "version": "==0.4.22" }, "pytz": { "hashes": [ @@ -1837,11 +1837,11 @@ }, "tox": { "hashes": [ - "sha256:65d0e90ceb816638a50d64f4b47b11da767b284c0addda2294cb3cd69bd72425", - "sha256:cf7fef81a3a2434df4d7af2a6d1bf606d2970220addfbe7dea2615bd4bb2c252" + "sha256:89afa9c59c04beb55eda789c7a65feb1a70fde117f85f1bd1c27c66758456e60", + "sha256:ed1e650cf6368bcbc4a071eeeba363c480920e0ed8a9ad1793c7caaa5ad33d49" ], "index": "pypi", - "version": "==3.21.4" + "version": "==3.22.0" }, "urllib3": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 0a0ae75c0..7100ba953 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,7 +53,7 @@ langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.6.0 +ocrmypdf==11.6.2 pathvalidate==2.3.2 pdfminer.six==20201018; python_version >= '3.4' pdftotext==2.1.5 @@ -71,7 +71,7 @@ python-dateutil==2.8.1 python-dotenv==0.15.0 python-gnupg==0.4.6 python-levenshtein==0.12.2 -python-magic==0.4.18 +python-magic==0.4.22 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 From b714f1b425ef964a7559a69a2992498bd48ef4dc Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 17 Feb 2021 12:31:19 +0100 Subject: [PATCH 286/898] changelog and version --- docs/changelog.rst | 19 +++++++++++++------ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 8b87e642e..ad45becab 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,15 +5,12 @@ Changelog ********* -paperless-ng 1.1.3 +paperless-ng 1.1.4 ################## -* Added a docker-specific configuration option to adjust the number of - worker processes of the web server. See :ref:`configuration-docker`. +* Added English (GB) locale. -* Some more memory usage optimizations. - -* Don't show inbox statistics if no inbox tag is defined. +* Added ISO-8601 date display option. .. note:: @@ -26,6 +23,16 @@ paperless-ng 1.1.3 If using docker, this does not affect you. +paperless-ng 1.1.3 +################## + +* Added a docker-specific configuration option to adjust the number of + worker processes of the web server. See :ref:`configuration-docker`. + +* Some more memory usage optimizations. + +* Don't show inbox statistics if no inbox tag is defined. + paperless-ng 1.1.2 ################## diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index b2ffebc09..6df8ec565 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.3", + version: "1.1.4", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 08f427169..f336d581e 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 1, 3) +__version__ = (1, 1, 4) From 378ed3038529068920ac0af9d2a8562f1aef0d35 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 17 Feb 2021 11:50:01 +0000 Subject: [PATCH 287/898] Apply translations in de translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 182 +++++++++++++++------------- 1 file changed, 97 insertions(+), 85 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index c53985275..358c9b721 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-28 22:02+0100\n" -"PO-Revision-Date: 2020-12-30 19:27+0000\n" +"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" "MIME-Version: 1.0\n" @@ -25,64 +25,64 @@ msgstr "" msgid "Documents" msgstr "Dokumente" -#: documents/models.py:33 +#: documents/models.py:32 msgid "Any word" msgstr "Irgendein Wort" -#: documents/models.py:34 +#: documents/models.py:33 msgid "All words" msgstr "Alle Wörter" -#: documents/models.py:35 +#: documents/models.py:34 msgid "Exact match" msgstr "Exakte Übereinstimmung" -#: documents/models.py:36 +#: documents/models.py:35 msgid "Regular expression" msgstr "Regulärer Ausdruck" -#: documents/models.py:37 +#: documents/models.py:36 msgid "Fuzzy word" msgstr "Ungenaues Wort" -#: documents/models.py:38 +#: documents/models.py:37 msgid "Automatic" msgstr "Automatisch" -#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "Name" -#: documents/models.py:46 +#: documents/models.py:45 msgid "match" msgstr "Zuweisungsmuster" -#: documents/models.py:50 +#: documents/models.py:49 msgid "matching algorithm" msgstr "Zuweisungsalgorithmus" -#: documents/models.py:56 +#: documents/models.py:55 msgid "is insensitive" msgstr "Groß-/Kleinschreibung irrelevant" -#: documents/models.py:75 documents/models.py:135 +#: documents/models.py:74 documents/models.py:134 msgid "correspondent" msgstr "Korrespondent" -#: documents/models.py:76 +#: documents/models.py:75 msgid "correspondents" msgstr "Korrespondenten" -#: documents/models.py:98 +#: documents/models.py:97 msgid "color" msgstr "Farbe" -#: documents/models.py:102 +#: documents/models.py:101 msgid "is inbox tag" msgstr "Posteingangs-Tag" -#: documents/models.py:104 +#: documents/models.py:103 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -90,39 +90,39 @@ msgstr "" "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit " "diesem Tag versehen." -#: documents/models.py:109 +#: documents/models.py:108 msgid "tag" msgstr "Tag" -#: documents/models.py:110 documents/models.py:166 +#: documents/models.py:109 documents/models.py:165 msgid "tags" msgstr "Tags" -#: documents/models.py:116 documents/models.py:148 +#: documents/models.py:115 documents/models.py:147 msgid "document type" msgstr "Dokumenttyp" -#: documents/models.py:117 +#: documents/models.py:116 msgid "document types" msgstr "Dokumenttypen" -#: documents/models.py:125 +#: documents/models.py:124 msgid "Unencrypted" msgstr "Nicht verschlüsselt" -#: documents/models.py:126 +#: documents/models.py:125 msgid "Encrypted with GNU Privacy Guard" msgstr "Verschlüsselt mit GNU Privacy Guard" -#: documents/models.py:139 +#: documents/models.py:138 msgid "title" msgstr "Titel" -#: documents/models.py:152 +#: documents/models.py:151 msgid "content" msgstr "Inhalt" -#: documents/models.py:154 +#: documents/models.py:153 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -130,43 +130,43 @@ msgstr "" "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche " "verwendet." -#: documents/models.py:159 +#: documents/models.py:158 msgid "mime type" msgstr "MIME-Typ" -#: documents/models.py:170 +#: documents/models.py:169 msgid "checksum" msgstr "Prüfsumme" -#: documents/models.py:174 +#: documents/models.py:173 msgid "The checksum of the original document." msgstr "Die Prüfsumme des originalen Dokuments." -#: documents/models.py:178 +#: documents/models.py:177 msgid "archive checksum" msgstr "Archiv-Prüfsumme" -#: documents/models.py:183 +#: documents/models.py:182 msgid "The checksum of the archived document." msgstr "Die Prüfsumme des archivierten Dokuments." -#: documents/models.py:187 documents/models.py:330 +#: documents/models.py:186 documents/models.py:342 msgid "created" msgstr "Ausgestellt" -#: documents/models.py:191 +#: documents/models.py:190 msgid "modified" msgstr "Geändert" -#: documents/models.py:195 +#: documents/models.py:194 msgid "storage type" msgstr "Speichertyp" -#: documents/models.py:203 +#: documents/models.py:202 msgid "added" msgstr "Hinzugefügt" -#: documents/models.py:207 +#: documents/models.py:206 msgid "filename" msgstr "Dateiname" @@ -175,178 +175,186 @@ msgid "Current filename in storage" msgstr "Aktueller Dateiname im Datenspeicher" #: documents/models.py:216 +msgid "archive filename" +msgstr "Archiv-Dateiname" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "Aktueller Dateiname im Archiv" + +#: documents/models.py:226 msgid "archive serial number" msgstr "Archiv-Seriennummer" -#: documents/models.py:221 +#: documents/models.py:231 msgid "The position of this document in your physical document archive." msgstr "Die Position dieses Dokuments in Ihrem physischen Dokumentenarchiv." -#: documents/models.py:227 +#: documents/models.py:237 msgid "document" msgstr "Dokument" -#: documents/models.py:228 +#: documents/models.py:238 msgid "documents" msgstr "Dokumente" -#: documents/models.py:313 +#: documents/models.py:325 msgid "debug" msgstr "Debug" -#: documents/models.py:314 +#: documents/models.py:326 msgid "information" msgstr "Information" -#: documents/models.py:315 +#: documents/models.py:327 msgid "warning" msgstr "Warnung" -#: documents/models.py:316 +#: documents/models.py:328 msgid "error" msgstr "Fehler" -#: documents/models.py:317 +#: documents/models.py:329 msgid "critical" msgstr "Kritisch" -#: documents/models.py:321 +#: documents/models.py:333 msgid "group" msgstr "Gruppe" -#: documents/models.py:324 +#: documents/models.py:336 msgid "message" msgstr "Nachricht" -#: documents/models.py:327 +#: documents/models.py:339 msgid "level" msgstr "Level" -#: documents/models.py:334 +#: documents/models.py:346 msgid "log" msgstr "Protokoll" -#: documents/models.py:335 +#: documents/models.py:347 msgid "logs" msgstr "Protokoll" -#: documents/models.py:346 documents/models.py:396 +#: documents/models.py:358 documents/models.py:408 msgid "saved view" msgstr "Gespeicherte Ansicht" -#: documents/models.py:347 +#: documents/models.py:359 msgid "saved views" msgstr "Gespeicherte Ansichten" -#: documents/models.py:350 +#: documents/models.py:362 msgid "user" msgstr "Benutzer" -#: documents/models.py:356 +#: documents/models.py:368 msgid "show on dashboard" msgstr "Auf Startseite zeigen" -#: documents/models.py:359 +#: documents/models.py:371 msgid "show in sidebar" msgstr "In Seitenleiste zeigen" -#: documents/models.py:363 +#: documents/models.py:375 msgid "sort field" msgstr "Sortierfeld" -#: documents/models.py:366 +#: documents/models.py:378 msgid "sort reverse" msgstr "Umgekehrte Sortierung" -#: documents/models.py:372 +#: documents/models.py:384 msgid "title contains" msgstr "Titel enthält" -#: documents/models.py:373 +#: documents/models.py:385 msgid "content contains" msgstr "Inhalt enthält" -#: documents/models.py:374 +#: documents/models.py:386 msgid "ASN is" msgstr "ASN ist" -#: documents/models.py:375 +#: documents/models.py:387 msgid "correspondent is" msgstr "Korrespondent ist" -#: documents/models.py:376 +#: documents/models.py:388 msgid "document type is" msgstr "Dokumenttyp ist" -#: documents/models.py:377 +#: documents/models.py:389 msgid "is in inbox" msgstr "Ist im Posteingang" -#: documents/models.py:378 +#: documents/models.py:390 msgid "has tag" msgstr "Hat Tag" -#: documents/models.py:379 +#: documents/models.py:391 msgid "has any tag" msgstr "Hat irgendein Tag" -#: documents/models.py:380 +#: documents/models.py:392 msgid "created before" msgstr "Ausgestellt vor" -#: documents/models.py:381 +#: documents/models.py:393 msgid "created after" msgstr "Ausgestellt nach" -#: documents/models.py:382 +#: documents/models.py:394 msgid "created year is" msgstr "Ausgestellt im Jahr" -#: documents/models.py:383 +#: documents/models.py:395 msgid "created month is" msgstr "Ausgestellt im Monat" -#: documents/models.py:384 +#: documents/models.py:396 msgid "created day is" msgstr "Ausgestellt am Tag" -#: documents/models.py:385 +#: documents/models.py:397 msgid "added before" msgstr "Hinzugefügt vor" -#: documents/models.py:386 +#: documents/models.py:398 msgid "added after" msgstr "Hinzugefügt nach" -#: documents/models.py:387 +#: documents/models.py:399 msgid "modified before" msgstr "Geändert vor" -#: documents/models.py:388 +#: documents/models.py:400 msgid "modified after" msgstr "Geändert nach" -#: documents/models.py:389 +#: documents/models.py:401 msgid "does not have tag" msgstr "Hat nicht folgendes Tag" -#: documents/models.py:400 +#: documents/models.py:412 msgid "rule type" msgstr "Regeltyp" -#: documents/models.py:404 +#: documents/models.py:416 msgid "value" msgstr "Wert" -#: documents/models.py:410 +#: documents/models.py:422 msgid "filter rule" msgstr "Filterregel" -#: documents/models.py:411 +#: documents/models.py:423 msgid "filter rules" msgstr "Filterregeln" -#: documents/serialisers.py:383 +#: documents/serialisers.py:370 #, python-format msgid "File type %(type)s not supported" msgstr "Dateityp %(type)s nicht unterstützt" @@ -393,19 +401,23 @@ msgstr "Passwort" msgid "Sign in" msgstr "Anmelden" -#: paperless/settings.py:286 -msgid "English" -msgstr "Englisch" +#: paperless/settings.py:291 +msgid "English (US)" +msgstr "Englisch (US)" -#: paperless/settings.py:287 +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "Englisch (UK)" + +#: paperless/settings.py:293 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:288 +#: paperless/settings.py:294 msgid "Dutch" msgstr "Niederländisch" -#: paperless/settings.py:289 +#: paperless/settings.py:295 msgid "French" msgstr "Französisch" From 2da7c381074d37f504c98a61f2c7369b2c4a850b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Feb 2021 13:18:19 +0100 Subject: [PATCH 288/898] Update Crowdin configuration file --- crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index f5a7765dd..a121e80b8 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,5 +1,5 @@ files: - - source: /src/locale/en-us/LC_MESSAGES/django.po + - source: /src/locale/en_US/LC_MESSAGES/django.po translation: /src/locale/%two_letters_code%/LC_MESSAGES/django.po - source: /src-ui/messages.xlf translation: /src-ui/src/locale/messages.%two_letters_code%.xlf From 229e64d828b83a799c1e182e6e0f4c0ef459d01e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Feb 2021 13:22:45 +0100 Subject: [PATCH 289/898] Update Crowdin configuration file --- crowdin.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crowdin.yml b/crowdin.yml index a121e80b8..0e6a46a31 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,5 +1,5 @@ files: - source: /src/locale/en_US/LC_MESSAGES/django.po - translation: /src/locale/%two_letters_code%/LC_MESSAGES/django.po + translation: /src/locale/%locale_with_underscore%/LC_MESSAGES/django.po - source: /src-ui/messages.xlf - translation: /src-ui/src/locale/messages.%two_letters_code%.xlf + translation: /src-ui/src/locale/messages.%locale_with_underscore%.xlf From 741591af0d426995cf8bc5b36e732a3aea1567de Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 17 Feb 2021 12:57:48 +0000 Subject: [PATCH 290/898] Apply translations in nl_NL translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'nl_NL' language. --- src/locale/nl_NL/LC_MESSAGES/django.po | 186 +++++++++++++------------ 1 file changed, 99 insertions(+), 87 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 63391da15..eefba7fbb 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -4,17 +4,17 @@ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: +# Jonas Winkler, 2021 # Jo Vandeginste <jo.vandeginste@gmail.com>, 2021 -# Ben <bzweekhorst@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-28 22:02+0100\n" -"PO-Revision-Date: 2020-12-30 19:27+0000\n" -"Last-Translator: Ben <bzweekhorst@gmail.com>, 2021\n" +"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" +"Last-Translator: Jo Vandeginste <jo.vandeginste@gmail.com>, 2021\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/paperless/teams/115905/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,64 +26,64 @@ msgstr "" msgid "Documents" msgstr "Documenten" -#: documents/models.py:33 +#: documents/models.py:32 msgid "Any word" msgstr "Eender welk woord" -#: documents/models.py:34 +#: documents/models.py:33 msgid "All words" msgstr "Alle woorden" -#: documents/models.py:35 +#: documents/models.py:34 msgid "Exact match" msgstr "Exacte overeenkomst" -#: documents/models.py:36 +#: documents/models.py:35 msgid "Regular expression" msgstr "Reguliere expressie" -#: documents/models.py:37 +#: documents/models.py:36 msgid "Fuzzy word" msgstr "Gelijkaardig woord" -#: documents/models.py:38 +#: documents/models.py:37 msgid "Automatic" msgstr "Automatisch" -#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "naam" -#: documents/models.py:46 +#: documents/models.py:45 msgid "match" msgstr "Overeenkomst" -#: documents/models.py:50 +#: documents/models.py:49 msgid "matching algorithm" msgstr "Algoritme voor het bepalen van de overeenkomst" -#: documents/models.py:56 +#: documents/models.py:55 msgid "is insensitive" msgstr "is niet hoofdlettergevoelig" -#: documents/models.py:75 documents/models.py:135 +#: documents/models.py:74 documents/models.py:134 msgid "correspondent" msgstr "correspondent" -#: documents/models.py:76 +#: documents/models.py:75 msgid "correspondents" msgstr "correspondenten" -#: documents/models.py:98 +#: documents/models.py:97 msgid "color" msgstr "Kleur" -#: documents/models.py:102 +#: documents/models.py:101 msgid "is inbox tag" msgstr "is \"Postvak in\"-etiket" -#: documents/models.py:104 +#: documents/models.py:103 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Markeer dit etiket als een \"Postvak in\"-etiket: alle nieuw verwerkte " "documenten krijgen de \"Postvak in\"-etiketten." -#: documents/models.py:109 +#: documents/models.py:108 msgid "tag" msgstr "etiket" -#: documents/models.py:110 documents/models.py:166 +#: documents/models.py:109 documents/models.py:165 msgid "tags" msgstr "etiketten" -#: documents/models.py:116 documents/models.py:148 +#: documents/models.py:115 documents/models.py:147 msgid "document type" msgstr "documenttype" -#: documents/models.py:117 +#: documents/models.py:116 msgid "document types" msgstr "documenttypen" -#: documents/models.py:125 +#: documents/models.py:124 msgid "Unencrypted" msgstr "Niet versleuteld" -#: documents/models.py:126 +#: documents/models.py:125 msgid "Encrypted with GNU Privacy Guard" msgstr "Versleuteld met GNU Privacy Guard" -#: documents/models.py:139 +#: documents/models.py:138 msgid "title" msgstr "titel" -#: documents/models.py:152 +#: documents/models.py:151 msgid "content" msgstr "inhoud" -#: documents/models.py:154 +#: documents/models.py:153 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,43 +131,43 @@ msgstr "" "De onbewerkte gegevens van het document. Dit veld wordt voornamelijk " "gebruikt om te zoeken." -#: documents/models.py:159 +#: documents/models.py:158 msgid "mime type" msgstr "mimetype" -#: documents/models.py:170 +#: documents/models.py:169 msgid "checksum" msgstr "checksum" -#: documents/models.py:174 +#: documents/models.py:173 msgid "The checksum of the original document." msgstr "Het controlecijfer van het originele document." -#: documents/models.py:178 +#: documents/models.py:177 msgid "archive checksum" msgstr "archief checksum" -#: documents/models.py:183 +#: documents/models.py:182 msgid "The checksum of the archived document." msgstr "De checksum van het gearchiveerde document." -#: documents/models.py:187 documents/models.py:330 +#: documents/models.py:186 documents/models.py:342 msgid "created" msgstr "aangemaakt" -#: documents/models.py:191 +#: documents/models.py:190 msgid "modified" msgstr "gewijzigd" -#: documents/models.py:195 +#: documents/models.py:194 msgid "storage type" msgstr "type opslag" -#: documents/models.py:203 +#: documents/models.py:202 msgid "added" msgstr "toegevoegd" -#: documents/models.py:207 +#: documents/models.py:206 msgid "filename" msgstr "bestandsnaam" @@ -176,178 +176,186 @@ msgid "Current filename in storage" msgstr "Huidige bestandsnaam in opslag" #: documents/models.py:216 +msgid "archive filename" +msgstr "Bestandsnaam in archief" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "Huidige bestandsnaam in archief" + +#: documents/models.py:226 msgid "archive serial number" msgstr "serienummer in archief" -#: documents/models.py:221 +#: documents/models.py:231 msgid "The position of this document in your physical document archive." msgstr "De positie van dit document in je fysieke documentenarchief." -#: documents/models.py:227 +#: documents/models.py:237 msgid "document" msgstr "document" -#: documents/models.py:228 +#: documents/models.py:238 msgid "documents" msgstr "documenten" -#: documents/models.py:313 +#: documents/models.py:325 msgid "debug" msgstr "debug" -#: documents/models.py:314 +#: documents/models.py:326 msgid "information" msgstr "informatie" -#: documents/models.py:315 +#: documents/models.py:327 msgid "warning" msgstr "waarschuwing" -#: documents/models.py:316 +#: documents/models.py:328 msgid "error" msgstr "fout" -#: documents/models.py:317 +#: documents/models.py:329 msgid "critical" msgstr "kritisch" -#: documents/models.py:321 +#: documents/models.py:333 msgid "group" msgstr "groep" -#: documents/models.py:324 +#: documents/models.py:336 msgid "message" msgstr "bericht" -#: documents/models.py:327 +#: documents/models.py:339 msgid "level" msgstr "niveau" -#: documents/models.py:334 +#: documents/models.py:346 msgid "log" msgstr "bericht" -#: documents/models.py:335 +#: documents/models.py:347 msgid "logs" msgstr "berichten" -#: documents/models.py:346 documents/models.py:396 +#: documents/models.py:358 documents/models.py:408 msgid "saved view" msgstr "opgeslagen view" -#: documents/models.py:347 +#: documents/models.py:359 msgid "saved views" msgstr "opgeslagen views" -#: documents/models.py:350 +#: documents/models.py:362 msgid "user" msgstr "gebruiker" -#: documents/models.py:356 +#: documents/models.py:368 msgid "show on dashboard" msgstr "weergeven op dashboard" -#: documents/models.py:359 +#: documents/models.py:371 msgid "show in sidebar" msgstr "weergeven in zijbalk" -#: documents/models.py:363 +#: documents/models.py:375 msgid "sort field" msgstr "sorteerveld" -#: documents/models.py:366 +#: documents/models.py:378 msgid "sort reverse" msgstr "omgekeerd sorteren" -#: documents/models.py:372 +#: documents/models.py:384 msgid "title contains" msgstr "titel bevat" -#: documents/models.py:373 +#: documents/models.py:385 msgid "content contains" msgstr "inhoud bevat" -#: documents/models.py:374 +#: documents/models.py:386 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:375 +#: documents/models.py:387 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:376 +#: documents/models.py:388 msgid "document type is" msgstr "documenttype is" -#: documents/models.py:377 +#: documents/models.py:389 msgid "is in inbox" msgstr "zit in \"Postvak in\"" -#: documents/models.py:378 +#: documents/models.py:390 msgid "has tag" msgstr "heeft etiket" -#: documents/models.py:379 +#: documents/models.py:391 msgid "has any tag" msgstr "heeft één van de etiketten" -#: documents/models.py:380 +#: documents/models.py:392 msgid "created before" msgstr "aangemaakt voor" -#: documents/models.py:381 +#: documents/models.py:393 msgid "created after" msgstr "aangemaakt na" -#: documents/models.py:382 +#: documents/models.py:394 msgid "created year is" msgstr "aangemaakt jaar is" -#: documents/models.py:383 +#: documents/models.py:395 msgid "created month is" msgstr "aangemaakte maand is" -#: documents/models.py:384 +#: documents/models.py:396 msgid "created day is" msgstr "aangemaakte dag is" -#: documents/models.py:385 +#: documents/models.py:397 msgid "added before" msgstr "toegevoegd voor" -#: documents/models.py:386 +#: documents/models.py:398 msgid "added after" msgstr "toegevoegd na" -#: documents/models.py:387 +#: documents/models.py:399 msgid "modified before" msgstr "gewijzigd voor" -#: documents/models.py:388 +#: documents/models.py:400 msgid "modified after" msgstr "gewijzigd na" -#: documents/models.py:389 +#: documents/models.py:401 msgid "does not have tag" msgstr "heeft geen etiket" -#: documents/models.py:400 +#: documents/models.py:412 msgid "rule type" msgstr "type regel" -#: documents/models.py:404 +#: documents/models.py:416 msgid "value" msgstr "waarde" -#: documents/models.py:410 +#: documents/models.py:422 msgid "filter rule" msgstr "filterregel" -#: documents/models.py:411 +#: documents/models.py:423 msgid "filter rules" msgstr "filterregels" -#: documents/serialisers.py:383 +#: documents/serialisers.py:370 #, python-format msgid "File type %(type)s not supported" msgstr "Bestandstype %(type)s niet ondersteund" @@ -392,19 +400,23 @@ msgstr "Wachtwoord" msgid "Sign in" msgstr "Aanmelden" -#: paperless/settings.py:286 -msgid "English" -msgstr "Engels" +#: paperless/settings.py:291 +msgid "English (US)" +msgstr "Engels (US)" -#: paperless/settings.py:287 +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "Engels (Brits)" + +#: paperless/settings.py:293 msgid "German" msgstr "Duits" -#: paperless/settings.py:288 +#: paperless/settings.py:294 msgid "Dutch" msgstr "Nederlands" -#: paperless/settings.py:289 +#: paperless/settings.py:295 msgid "French" msgstr "Frans" From 4f56ccd8ab6d87cd97ed95bac9c2bfb9cbdc1d5b Mon Sep 17 00:00:00 2001 From: jonaswinkler <jonas.winkler@jpwinkler.de> Date: Wed, 17 Feb 2021 14:26:06 +0100 Subject: [PATCH 291/898] fixed paperless not properly selecting en-gb --- src-ui/src/app/services/settings.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index a145ae5a7..d511fa65f 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -79,8 +79,8 @@ export class SettingsService { getLanguageOptions(): LanguageOption[] { return [ - {code: "en-US", name: $localize`English (US)`, englishName: "English (US)"}, - {code: "en-GB", name: $localize`English (GB)`, englishName: "English (GB)"}, + {code: "en-us", name: $localize`English (US)`, englishName: "English (US)"}, + {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)"}, {code: "de", name: $localize`German`, englishName: "German"}, {code: "nl", name: $localize`Dutch`, englishName: "Dutch"}, {code: "fr", name: $localize`French`, englishName: "French"} From 5f13e0af1f777d91e0cd9ca21fef893b7acb762d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 17 Feb 2021 13:36:15 +0000 Subject: [PATCH 292/898] Apply translations in en_GB translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'en_GB' language. --- src/locale/en_GB/LC_MESSAGES/django.po | 191 +++++++++++++------------ 1 file changed, 102 insertions(+), 89 deletions(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index de13e5d34..f0c5b0381 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,18 +2,19 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# +# # Translators: -# Ali Bates <xadium@gmail.com>, 2021 -# +# Ali Bates, 2021 +# Jonas Winkler, 2021 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-28 22:02+0100\n" -"PO-Revision-Date: 2020-12-30 19:27+0000\n" -"Last-Translator: Ali Bates <xadium@gmail.com>, 2021\n" +"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" +"Last-Translator: Jonas Winkler, 2021\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/paperless/teams/115905/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,64 +26,64 @@ msgstr "" msgid "Documents" msgstr "Documents" -#: documents/models.py:33 +#: documents/models.py:32 msgid "Any word" msgstr "Any word" -#: documents/models.py:34 +#: documents/models.py:33 msgid "All words" msgstr "All words" -#: documents/models.py:35 +#: documents/models.py:34 msgid "Exact match" msgstr "Exact match" -#: documents/models.py:36 +#: documents/models.py:35 msgid "Regular expression" msgstr "Regular expression" -#: documents/models.py:37 +#: documents/models.py:36 msgid "Fuzzy word" msgstr "Fuzzy word" -#: documents/models.py:38 +#: documents/models.py:37 msgid "Automatic" msgstr "Automatic" -#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "name" -#: documents/models.py:46 +#: documents/models.py:45 msgid "match" msgstr "match" -#: documents/models.py:50 +#: documents/models.py:49 msgid "matching algorithm" msgstr "matching algorithm" -#: documents/models.py:56 +#: documents/models.py:55 msgid "is insensitive" msgstr "is insensitive" -#: documents/models.py:75 documents/models.py:135 +#: documents/models.py:74 documents/models.py:134 msgid "correspondent" msgstr "correspondent" -#: documents/models.py:76 +#: documents/models.py:75 msgid "correspondents" msgstr "correspondents" -#: documents/models.py:98 +#: documents/models.py:97 msgid "color" msgstr "colour" -#: documents/models.py:102 +#: documents/models.py:101 msgid "is inbox tag" msgstr "is inbox tag" -#: documents/models.py:104 +#: documents/models.py:103 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -90,39 +91,39 @@ msgstr "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." -#: documents/models.py:109 +#: documents/models.py:108 msgid "tag" msgstr "tag" -#: documents/models.py:110 documents/models.py:166 +#: documents/models.py:109 documents/models.py:165 msgid "tags" msgstr "tags" -#: documents/models.py:116 documents/models.py:148 +#: documents/models.py:115 documents/models.py:147 msgid "document type" msgstr "document type" -#: documents/models.py:117 +#: documents/models.py:116 msgid "document types" msgstr "document types" -#: documents/models.py:125 +#: documents/models.py:124 msgid "Unencrypted" msgstr "Unencrypted" -#: documents/models.py:126 +#: documents/models.py:125 msgid "Encrypted with GNU Privacy Guard" msgstr "Encrypted with GNU Privacy Guard" -#: documents/models.py:139 +#: documents/models.py:138 msgid "title" msgstr "title" -#: documents/models.py:152 +#: documents/models.py:151 msgid "content" msgstr "content" -#: documents/models.py:154 +#: documents/models.py:153 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -130,43 +131,43 @@ msgstr "" "The raw, text-only data of the document. This field is primarily used for " "searching." -#: documents/models.py:159 +#: documents/models.py:158 msgid "mime type" msgstr "mime type" -#: documents/models.py:170 +#: documents/models.py:169 msgid "checksum" msgstr "checksum" -#: documents/models.py:174 +#: documents/models.py:173 msgid "The checksum of the original document." msgstr "The checksum of the original document." -#: documents/models.py:178 +#: documents/models.py:177 msgid "archive checksum" msgstr "archive checksum" -#: documents/models.py:183 +#: documents/models.py:182 msgid "The checksum of the archived document." msgstr "The checksum of the archived document." -#: documents/models.py:187 documents/models.py:330 +#: documents/models.py:186 documents/models.py:342 msgid "created" msgstr "created" -#: documents/models.py:191 +#: documents/models.py:190 msgid "modified" msgstr "modified" -#: documents/models.py:195 +#: documents/models.py:194 msgid "storage type" msgstr "storage type" -#: documents/models.py:203 +#: documents/models.py:202 msgid "added" msgstr "added" -#: documents/models.py:207 +#: documents/models.py:206 msgid "filename" msgstr "filename" @@ -175,178 +176,186 @@ msgid "Current filename in storage" msgstr "Current filename in storage" #: documents/models.py:216 +msgid "archive filename" +msgstr "archive filename" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "Current archive filename in storage" + +#: documents/models.py:226 msgid "archive serial number" msgstr "archive serial number" -#: documents/models.py:221 +#: documents/models.py:231 msgid "The position of this document in your physical document archive." msgstr "The position of this document in your physical document archive." -#: documents/models.py:227 +#: documents/models.py:237 msgid "document" msgstr "document" -#: documents/models.py:228 +#: documents/models.py:238 msgid "documents" msgstr "documents" -#: documents/models.py:313 +#: documents/models.py:325 msgid "debug" msgstr "debug" -#: documents/models.py:314 +#: documents/models.py:326 msgid "information" msgstr "information" -#: documents/models.py:315 +#: documents/models.py:327 msgid "warning" msgstr "warning" -#: documents/models.py:316 +#: documents/models.py:328 msgid "error" msgstr "error" -#: documents/models.py:317 +#: documents/models.py:329 msgid "critical" msgstr "critical" -#: documents/models.py:321 +#: documents/models.py:333 msgid "group" msgstr "group" -#: documents/models.py:324 +#: documents/models.py:336 msgid "message" msgstr "message" -#: documents/models.py:327 +#: documents/models.py:339 msgid "level" msgstr "level" -#: documents/models.py:334 +#: documents/models.py:346 msgid "log" msgstr "log" -#: documents/models.py:335 +#: documents/models.py:347 msgid "logs" msgstr "logs" -#: documents/models.py:346 documents/models.py:396 +#: documents/models.py:358 documents/models.py:408 msgid "saved view" msgstr "saved view" -#: documents/models.py:347 +#: documents/models.py:359 msgid "saved views" msgstr "saved views" -#: documents/models.py:350 +#: documents/models.py:362 msgid "user" msgstr "user" -#: documents/models.py:356 +#: documents/models.py:368 msgid "show on dashboard" msgstr "show on dashboard" -#: documents/models.py:359 +#: documents/models.py:371 msgid "show in sidebar" msgstr "show in sidebar" -#: documents/models.py:363 +#: documents/models.py:375 msgid "sort field" msgstr "sort field" -#: documents/models.py:366 +#: documents/models.py:378 msgid "sort reverse" msgstr "sort reverse" -#: documents/models.py:372 +#: documents/models.py:384 msgid "title contains" msgstr "title contains" -#: documents/models.py:373 +#: documents/models.py:385 msgid "content contains" msgstr "content contains" -#: documents/models.py:374 +#: documents/models.py:386 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:375 +#: documents/models.py:387 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:376 +#: documents/models.py:388 msgid "document type is" msgstr "document type is" -#: documents/models.py:377 +#: documents/models.py:389 msgid "is in inbox" msgstr "is in inbox" -#: documents/models.py:378 +#: documents/models.py:390 msgid "has tag" msgstr "has tag" -#: documents/models.py:379 +#: documents/models.py:391 msgid "has any tag" msgstr "has any tag" -#: documents/models.py:380 +#: documents/models.py:392 msgid "created before" msgstr "created before" -#: documents/models.py:381 +#: documents/models.py:393 msgid "created after" msgstr "created after" -#: documents/models.py:382 +#: documents/models.py:394 msgid "created year is" msgstr "created year is" -#: documents/models.py:383 +#: documents/models.py:395 msgid "created month is" msgstr "created month is" -#: documents/models.py:384 +#: documents/models.py:396 msgid "created day is" msgstr "created day is" -#: documents/models.py:385 +#: documents/models.py:397 msgid "added before" msgstr "added before" -#: documents/models.py:386 +#: documents/models.py:398 msgid "added after" msgstr "added after" -#: documents/models.py:387 +#: documents/models.py:399 msgid "modified before" msgstr "modified before" -#: documents/models.py:388 +#: documents/models.py:400 msgid "modified after" msgstr "modified after" -#: documents/models.py:389 +#: documents/models.py:401 msgid "does not have tag" msgstr "does not have tag" -#: documents/models.py:400 +#: documents/models.py:412 msgid "rule type" msgstr "rule type" -#: documents/models.py:404 +#: documents/models.py:416 msgid "value" msgstr "value" -#: documents/models.py:410 +#: documents/models.py:422 msgid "filter rule" msgstr "filter rule" -#: documents/models.py:411 +#: documents/models.py:423 msgid "filter rules" msgstr "filter rules" -#: documents/serialisers.py:383 +#: documents/serialisers.py:370 #, python-format msgid "File type %(type)s not supported" msgstr "File type %(type)s not supported" @@ -391,19 +400,23 @@ msgstr "Password" msgid "Sign in" msgstr "Sign in" -#: paperless/settings.py:286 -msgid "English" -msgstr "English" +#: paperless/settings.py:291 +msgid "English (US)" +msgstr "English (US)" -#: paperless/settings.py:287 +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "English (GB)" + +#: paperless/settings.py:293 msgid "German" msgstr "German" -#: paperless/settings.py:288 +#: paperless/settings.py:294 msgid "Dutch" msgstr "Dutch" -#: paperless/settings.py:289 +#: paperless/settings.py:295 msgid "French" msgstr "French" From 819d99580bbfabbb78d32f924aa068c7f238fb6b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 18 Feb 2021 17:11:47 +0100 Subject: [PATCH 293/898] messages --- src-ui/messages.xlf | 66 +++++++++++-------- .../filter-editor/filter-editor.component.ts | 4 +- 2 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index a80bd082f..731fdff7f 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -52,17 +52,17 @@ </context-group> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> - <source>View "<x id="PH" equiv-text="this.list.savedView.name"/>" saved successfully.</source> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">109</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">130</context> + <context context-type="linenumber">136</context> </context-group> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> @@ -114,8 +114,8 @@ <context context-type="linenumber">72</context> </context-group> </trans-unit> - <trans-unit id="72e7d343f9165602cce1ca7faffbc565fd31ef92" datatype="html"> - <source>Save "<x id="INTERPOLATION" equiv-text="{{list.savedViewTitle}}"/>"</source> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -513,13 +513,6 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit id="5ca707824ab93066c7d9b44e1b8bf216725c2c22" datatype="html"> - <source>Filter</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> @@ -545,14 +538,21 @@ <source>Use date format of display language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">114</context> </context-group> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> @@ -1081,6 +1081,13 @@ <context context-type="linenumber">46</context> </context-group> </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1414,20 +1421,20 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit id="46c8fe557cf52c9389783627d4f85453f4ddb459" datatype="html"> - <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics.documents_inbox}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> - <context context-type="linenumber">3</context> - </context-group> - </trans-unit> - <trans-unit id="c327c0e67bcac7494dcbaa9afb3b42d5008c6438" datatype="html"> - <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics.documents_total}}"/></source> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> @@ -1619,25 +1626,32 @@ <context context-type="linenumber">82</context> </context-group> </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index a9111bc9f..a6506efde 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -46,6 +46,8 @@ export class FilterEditorComponent implements OnInit, OnDestroy { return $localize`Without any tag` } + case FILTER_TITLE: + return $localize`Title: ${rule.value}` } } @@ -117,7 +119,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { }) } - get filterRules() { + get filterRules(): FilterRule[] { let filterRules: FilterRule[] = [] if (this._titleFilter) { filterRules.push({rule_type: FILTER_TITLE, value: this._titleFilter}) From 923057e2ea563096572c3dba10ae1d978ed88015 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 18 Feb 2021 17:29:21 +0100 Subject: [PATCH 294/898] refactored most of the list view; fixes #147, much snappier UX when switching between views --- .../saved-view-widget.component.ts | 2 +- .../document-detail.component.ts | 4 +- .../bulk-editor/bulk-editor.component.ts | 2 +- .../document-list.component.html | 6 +- .../document-list/document-list.component.ts | 38 +-- .../services/document-list-view.service.ts | 236 ++++++++++-------- 6 files changed, 163 insertions(+), 125 deletions(-) diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index 36feeea1e..20bc26cdc 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -48,7 +48,7 @@ export class SavedViewWidgetComponent implements OnInit, OnDestroy { if (this.savedView.show_in_sidebar) { this.router.navigate(['view', this.savedView.id]) } else { - this.list.load(this.savedView) + this.list.loadSavedView(this.savedView, true) this.router.navigate(["documents"]) } } diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 071c8e249..af98a6f7f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -191,8 +191,8 @@ export class DocumentDetailComponent implements OnInit { close() { this.openDocumentService.closeDocument(this.document) - if (this.documentListViewService.savedViewId) { - this.router.navigate(['view', this.documentListViewService.savedViewId]) + if (this.documentListViewService.activeSavedViewId) { + this.router.navigate(['view', this.documentListViewService.activeSavedViewId]) } else { this.router.navigate(['documents']) } diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts index 04fc2a978..ebc7a8c11 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts @@ -137,7 +137,7 @@ export class BulkEditorComponent { } else { modal.componentInstance.message = $localize`This operation will add the tags ${this._localizeList(changedTags.itemsToAdd)} and remove the tags ${this._localizeList(changedTags.itemsToRemove)} on ${this.list.selected.size} selected document(s).` } - + modal.componentInstance.btnClass = "btn-warning" modal.componentInstance.btnCaption = $localize`Confirm` modal.componentInstance.confirmClicked.subscribe(() => { diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index cfc2e655d..75a9804a2 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -63,12 +63,12 @@ <div class="btn-group ml-2 flex-fill" ngbDropdown role="group"> <button class="btn btn-sm btn-outline-primary dropdown-toggle flex-fill" ngbDropdownToggle i18n>Views</button> <div class="dropdown-menu shadow dropdown-menu-right" ngbDropdownMenu> - <ng-container *ngIf="!list.savedViewId"> + <ng-container *ngIf="!list.activeSavedViewId"> <button ngbDropdownItem *ngFor="let view of savedViewService.allViews" (click)="loadViewConfig(view)">{{view.name}}</button> <div class="dropdown-divider" *ngIf="savedViewService.allViews.length > 0"></div> </ng-container> - <button ngbDropdownItem (click)="saveViewConfig()" *ngIf="list.savedViewId" i18n>Save "{{list.savedViewTitle}}"</button> + <button ngbDropdownItem (click)="saveViewConfig()" *ngIf="list.activeSavedViewId" i18n>Save "{{list.activeSavedViewTitle}}"</button> <button ngbDropdownItem (click)="saveViewConfigAs()" i18n>Save as...</button> </div> </div> @@ -86,7 +86,7 @@ <span i18n *ngIf="list.selected.size == 0">{list.collectionSize, plural, =1 {One document} other {{{list.collectionSize || 0}} documents}}</span> <span i18n *ngIf="isFiltered">(filtered)</span> </p> <ngb-pagination [pageSize]="list.currentPageSize" [collectionSize]="list.collectionSize" [(page)]="list.currentPage" [maxSize]="5" - [rotate]="true" (pageChange)="list.reload()" aria-label="Default pagination"></ngb-pagination> + [rotate]="true" aria-label="Default pagination"></ngb-pagination> </div> <div *ngIf="displayMode == 'largeCards'"> diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 0d1562c24..cf7afb845 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -1,4 +1,4 @@ -import { AfterViewInit, Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; +import { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Subscription } from 'rxjs'; @@ -9,7 +9,7 @@ import { ConsumerStatusService } from 'src/app/services/consumer-status.service' import { DocumentListViewService } from 'src/app/services/document-list-view.service'; import { DOCUMENT_SORT_FIELDS } from 'src/app/services/rest/document.service'; import { SavedViewService } from 'src/app/services/rest/saved-view.service'; -import { Toast, ToastService } from 'src/app/services/toast.service'; +import { ToastService } from 'src/app/services/toast.service'; import { FilterEditorComponent } from './filter-editor/filter-editor.component'; import { SaveViewConfigDialogComponent } from './save-view-config-dialog/save-view-config-dialog.component'; @@ -46,7 +46,7 @@ export class DocumentListComponent implements OnInit, OnDestroy { } getTitle() { - return this.list.savedViewTitle || $localize`Documents` + return this.list.activeSavedViewTitle || $localize`Documents` } getSortFields() { @@ -73,19 +73,18 @@ export class DocumentListComponent implements OnInit, OnDestroy { this.list.reload() }) this.route.paramMap.subscribe(params => { - this.list.clear() if (params.has('id')) { this.savedViewService.getCached(+params.get('id')).subscribe(view => { if (!view) { this.router.navigate(["404"]) return } - this.list.savedView = view + this.list.activateSavedView(view) this.list.reload() this.rulesChanged() }) } else { - this.list.savedView = null + this.list.activateSavedView(null) this.list.reload() this.rulesChanged() } @@ -99,16 +98,23 @@ export class DocumentListComponent implements OnInit, OnDestroy { } loadViewConfig(view: PaperlessSavedView) { - this.list.load(view) + this.list.loadSavedView(view) this.list.reload() this.rulesChanged() } saveViewConfig() { - this.savedViewService.update(this.list.savedView).subscribe(result => { - this.toastService.showInfo($localize`View "${this.list.savedView.name}" saved successfully.`) - }) - + if (this.list.activeSavedViewId != null) { + let savedView: PaperlessSavedView = { + id: this.list.activeSavedViewId, + filter_rules: this.list.filterRules, + sort_field: this.list.sortField, + sort_reverse: this.list.sortReverse + } + this.savedViewService.patch(savedView).subscribe(result => { + this.toastService.showInfo($localize`View "${this.list.activeSavedViewTitle}" saved successfully.`) + }) + } } saveViewConfigAs() { @@ -116,7 +122,7 @@ export class DocumentListComponent implements OnInit, OnDestroy { modal.componentInstance.defaultName = this.filterEditor.generateFilterName() modal.componentInstance.saveClicked.subscribe(formValue => { modal.componentInstance.buttonsEnabled = false - let savedView = { + let savedView: PaperlessSavedView = { name: formValue.name, show_on_dashboard: formValue.showOnDashboard, show_in_sidebar: formValue.showInSideBar, @@ -137,8 +143,8 @@ export class DocumentListComponent implements OnInit, OnDestroy { resetFilters(): void { this.filterRulesModified = false - if (this.list.savedViewId) { - this.savedViewService.getCached(this.list.savedViewId).subscribe(viewUntouched => { + if (this.list.activeSavedViewId) { + this.savedViewService.getCached(this.list.activeSavedViewId).subscribe(viewUntouched => { this.list.filterRules = viewUntouched.filter_rules this.list.reload() }) @@ -150,11 +156,11 @@ export class DocumentListComponent implements OnInit, OnDestroy { rulesChanged() { let modified = false - if (this.list.savedView == null) { + if (this.list.activeSavedViewId == null) { modified = this.list.filterRules.length > 0 // documents list is modified if it has any filters } else { // compare savedView current filters vs original - this.savedViewService.getCached(this.list.savedViewId).subscribe(view => { + this.savedViewService.getCached(this.list.activeSavedViewId).subscribe(view => { let filterRulesInitial = view.filter_rules if (this.list.filterRules.length !== filterRulesInitial.length) modified = true diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 4eb0c276c..334706a3c 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -8,6 +8,23 @@ import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'; import { DocumentService } from './rest/document.service'; import { SettingsService, SETTINGS_KEYS } from './settings.service'; +interface ListViewState { + + title?: string + + documents?: PaperlessDocument[] + + currentPage: number + collectionSize: number + + sortField: string + sortReverse: boolean + + filterRules: FilterRule[] + + selected?: Set<number> + +} /** * This service manages the document list which is displayed using the document list view. @@ -20,156 +37,174 @@ import { SettingsService, SETTINGS_KEYS } from './settings.service'; }) export class DocumentListViewService { - static DEFAULT_SORT_FIELD = 'created' - isReloading: boolean = false - documents: PaperlessDocument[] = [] - currentPage = 1 - currentPageSize: number = this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE) - collectionSize: number + rangeSelectionAnchorIndex: number lastRangeSelectionToIndex: number - /** - * This is the current config for the document list. The service will always remember the last settings used for the document list. - */ - private _documentListViewConfig: PaperlessSavedView - /** - * Optionally, this is the currently selected saved view, which might be null. - */ - private _savedViewConfig: PaperlessSavedView + currentPageSize: number = this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE) - get savedView(): PaperlessSavedView { - return this._savedViewConfig + private listViewStates: Map<number, ListViewState> = new Map() + + private _activeSavedViewId: number = null + + get activeSavedViewId() { + return this._activeSavedViewId } - set savedView(value: PaperlessSavedView) { - if (value && !this._savedViewConfig || value && value.id != this._savedViewConfig.id) { - //saved view inactive and should be active now, or saved view active, but a different view is requested - //this is here so that we don't modify value, which might be the actual instance of the saved view. - this.selectNone() - this._savedViewConfig = Object.assign({}, value) - } else if (this._savedViewConfig && !value) { - //saved view active, but document list requested - this.selectNone() - this._savedViewConfig = null + get activeSavedViewTitle() { + return this.activeListViewState.title + } + + private defaultListViewState(): ListViewState { + return { + title: null, + documents: [], + currentPage: 1, + collectionSize: null, + sortField: "created", + sortReverse: true, + filterRules: [], + selected: new Set<number>() } } - get savedViewId() { - return this.savedView?.id + private get activeListViewState() { + if (!this.listViewStates.has(this._activeSavedViewId)) { + this.listViewStates.set(this._activeSavedViewId, this.defaultListViewState()) + } + return this.listViewStates.get(this._activeSavedViewId) } - get savedViewTitle() { - return this.savedView?.name - } - - get documentListView() { - return this._documentListViewConfig - } - - set documentListView(value) { - if (value) { - this._documentListViewConfig = Object.assign({}, value) - this.saveDocumentListView() + activateSavedView(view: PaperlessSavedView) { + this.rangeSelectionAnchorIndex = this.lastRangeSelectionToIndex = null + if (view) { + this._activeSavedViewId = view.id + this.loadSavedView(view) + } else { + this._activeSavedViewId = null } } - /** - * This is what switches between the saved views and the document list view. Everything on the document list uses - * this property to determine the settings for the currently displayed document list. - */ - get view() { - return this.savedView || this.documentListView - } - - load(view: PaperlessSavedView) { - this.documentListView.filter_rules = cloneFilterRules(view.filter_rules) - this.documentListView.sort_reverse = view.sort_reverse - this.documentListView.sort_field = view.sort_field - this.saveDocumentListView() - } - - clear() { - this.collectionSize = null - this.documents = [] - this.currentPage = 1 + loadSavedView(view: PaperlessSavedView, closeCurrentView: boolean = false) { + if (closeCurrentView) { + this._activeSavedViewId = null + } + this.activeListViewState.filterRules = cloneFilterRules(view.filter_rules) + this.activeListViewState.sortField = view.sort_field + this.activeListViewState.sortReverse = view.sort_reverse + if (this._activeSavedViewId) { + this.activeListViewState.title = view.name + } + this.reduceSelectionToFilter() } reload(onFinish?) { this.isReloading = true + let activeListViewState = this.activeListViewState + this.documentService.listFiltered( - this.currentPage, + activeListViewState.currentPage, this.currentPageSize, - this.view.sort_field, - this.view.sort_reverse, - this.view.filter_rules).subscribe( + activeListViewState.sortField, + activeListViewState.sortReverse, + activeListViewState.filterRules).subscribe( result => { - this.collectionSize = result.count - this.documents = result.results + this.isReloading = false + activeListViewState.collectionSize = result.count + activeListViewState.documents = result.results if (onFinish) { onFinish() } this.rangeSelectionAnchorIndex = this.lastRangeSelectionToIndex = null - this.isReloading = false }, error => { - if (this.currentPage != 1 && error.status == 404) { + this.isReloading = false + if (activeListViewState.currentPage != 1 && error.status == 404) { // this happens when applying a filter: the current page might not be available anymore due to the reduced result set. - this.currentPage = 1 + activeListViewState.currentPage = 1 this.reload() } - this.isReloading = false }) } set filterRules(filterRules: FilterRule[]) { - //we're going to clone the filterRules object, since we don't - //want changes in the filter editor to propagate into here right away. - this.view.filter_rules = filterRules + this.activeListViewState.filterRules = filterRules this.reload() this.reduceSelectionToFilter() this.saveDocumentListView() } get filterRules(): FilterRule[] { - return this.view.filter_rules + return this.activeListViewState.filterRules } set sortField(field: string) { - this.view.sort_field = field - this.saveDocumentListView() + this.activeListViewState.sortField = field this.reload() + this.saveDocumentListView() } get sortField(): string { - return this.view.sort_field + return this.activeListViewState.sortField } set sortReverse(reverse: boolean) { - this.view.sort_reverse = reverse - this.saveDocumentListView() + this.activeListViewState.sortReverse = reverse this.reload() + this.saveDocumentListView() } get sortReverse(): boolean { - return this.view.sort_reverse + return this.activeListViewState.sortReverse + } + + get collectionSize(): number { + return this.activeListViewState.collectionSize + } + + get currentPage(): number { + return this.activeListViewState.currentPage + } + + set currentPage(page: number) { + this.activeListViewState.currentPage = page + this.reload() + this.saveDocumentListView() + } + + get documents(): PaperlessDocument[] { + return this.activeListViewState.documents + } + + get selected(): Set<number> { + return this.activeListViewState.selected } setSort(field: string, reverse: boolean) { - this.view.sort_field = field - this.view.sort_reverse = reverse - this.saveDocumentListView() + this.activeListViewState.sortField = field + this.activeListViewState.sortReverse = reverse this.reload() + this.saveDocumentListView() } private saveDocumentListView() { - sessionStorage.setItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG, JSON.stringify(this.documentListView)) + if (this._activeSavedViewId == null) { + let savedState: ListViewState = { + collectionSize: this.activeListViewState.collectionSize, + currentPage: this.activeListViewState.currentPage, + filterRules: this.activeListViewState.filterRules, + sortField: this.activeListViewState.sortField, + sortReverse: this.activeListViewState.sortReverse + } + sessionStorage.setItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG, JSON.stringify(savedState)) + } } quickFilter(filterRules: FilterRule[]) { - this.savedView = null - this.view.filter_rules = filterRules + this._activeSavedViewId = null + this.activeListViewState.filterRules = filterRules + this.activeListViewState.currentPage = 1 this.reduceSelectionToFilter() this.saveDocumentListView() this.router.navigate(["documents"]) @@ -217,8 +252,6 @@ export class DocumentListViewService { } } - selected = new Set<number>() - selectNone() { this.selected.clear() this.rangeSelectionAnchorIndex = this.lastRangeSelectionToIndex = null @@ -227,13 +260,11 @@ export class DocumentListViewService { reduceSelectionToFilter() { if (this.selected.size > 0) { this.documentService.listAllFilteredIds(this.filterRules).subscribe(ids => { - let subset = new Set<number>() - for (let id of ids) { - if (this.selected.has(id)) { - subset.add(id) + for (let id of this.selected) { + if (!ids.includes(id)) { + this.selected.delete(id) } } - this.selected = subset }) } } @@ -287,20 +318,21 @@ export class DocumentListViewService { } constructor(private documentService: DocumentService, private settings: SettingsService, private router: Router) { - let documentListViewConfigJson = sessionStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) + let documentListViewConfigJson = sessionStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) if (documentListViewConfigJson) { try { - this.documentListView = JSON.parse(documentListViewConfigJson) + let savedState: ListViewState = JSON.parse(documentListViewConfigJson) + // Remove null elements from the restored state + Object.keys(savedState).forEach(k => { + if (savedState[k] == null) { + delete savedState[k] + } + }) + //only use restored state attributes instead of defaults if they are not null + let newState = Object.assign(this.defaultListViewState(), savedState) + this.listViewStates.set(null, newState) } catch (e) { sessionStorage.removeItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) - this.documentListView = null - } - } - if (!this.documentListView || this.documentListView.filter_rules == null || this.documentListView.sort_reverse == null || this.documentListView.sort_field == null) { - this.documentListView = { - filter_rules: [], - sort_reverse: true, - sort_field: 'created' } } } From 1b06e3c64546c4b860eb85fd97f5fd119a41a659 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Thu, 18 Feb 2021 16:43:41 +0000 Subject: [PATCH 295/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 78 +++++++++++++++++++------------ 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index cc5e1d68a..aa57afdab 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -58,11 +58,11 @@ </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.savedView.name" id="PH"/>" saved successfully.</source> - <target>Ansicht "<x equiv-text="this.list.savedView.name" id="PH"/>" erfolgreich gespeichert.</target> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>Ansicht "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" erfolgreich gespeichert.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">109</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -70,7 +70,7 @@ <target>Ansicht "<x equiv-text="savedView.name" id="PH"/>" erfolgreich erstellt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">130</context> + <context context-type="linenumber">136</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -129,9 +129,9 @@ <context context-type="linenumber">72</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="72e7d343f9165602cce1ca7faffbc565fd31ef92"> - <source>Save "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>"<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>" speichern</target> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>"<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>" speichern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -585,14 +585,6 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5ca707824ab93066c7d9b44e1b8bf216725c2c22"> - <source>Filter</source> - <target>Filtern</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> <target>Gespeicherte Ansicht "<x equiv-text="savedView.name" id="PH"/>" gelöscht.</target> @@ -622,7 +614,15 @@ <target>Benutze Datumsformat der Anzeigesprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +630,7 @@ <target>Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">114</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1234,6 +1234,14 @@ <context context-type="linenumber">46</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Titel: <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> <source>Filter tags</source> <target>Tags filtern</target> @@ -1614,22 +1622,22 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46c8fe557cf52c9389783627d4f85453f4ddb459"> - <source>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Dokumente im Posteingang: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> - <context context-type="linenumber">3</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="c327c0e67bcac7494dcbaa9afb3b42d5008c6438"> - <source>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></source> - <target>Anzahl Dokumente gesamt: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Anzahl Dokumente gesamt: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Dokumente im Posteingang: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="6443586946875325554"> <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> <target>Verarbeite: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> @@ -1848,12 +1856,20 @@ <context context-type="linenumber">82</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>Englisch (UK)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> <source>German</source> <target>Deutsch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1861,7 +1877,7 @@ <target>Niederländisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1869,7 +1885,7 @@ <target>Französisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From fcbbcf4d65578402706cc8227126c0b89cf6ff49 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Thu, 18 Feb 2021 16:44:55 +0000 Subject: [PATCH 296/898] Translate /src-ui/messages.xlf in en_GB translation completed for the source file '/src-ui/messages.xlf' on the 'en_GB' language. --- src-ui/src/locale/messages.en_GB.xlf | 78 +++++++++++++++++----------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 49baa77ed..14ab56659 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -58,11 +58,11 @@ </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.savedView.name" id="PH"/>" saved successfully.</source> - <target>View &quot;<x equiv-text="this.list.savedView.name" id="PH"/>&quot; saved successfully.</target> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>View &quot;<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>&quot; saved successfully.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">109</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -70,7 +70,7 @@ <target>View &quot;<x equiv-text="savedView.name" id="PH"/>&quot; created successfully.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">130</context> + <context context-type="linenumber">136</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -129,9 +129,9 @@ <context context-type="linenumber">72</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="72e7d343f9165602cce1ca7faffbc565fd31ef92"> - <source>Save "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Save &quot;<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Save &quot;<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>&quot;</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -585,14 +585,6 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5ca707824ab93066c7d9b44e1b8bf216725c2c22"> - <source>Filter</source> - <target>Filter</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> <target>Saved view &quot;<x equiv-text="savedView.name" id="PH"/>&quot; deleted.</target> @@ -622,7 +614,15 @@ <target>Use date format of display language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +630,7 @@ <target>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">114</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1234,6 +1234,14 @@ <context context-type="linenumber">46</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Title: <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> <source>Filter tags</source> <target>Filter tags</target> @@ -1614,22 +1622,22 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46c8fe557cf52c9389783627d4f85453f4ddb459"> - <source>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> - <context context-type="linenumber">3</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="c327c0e67bcac7494dcbaa9afb3b42d5008c6438"> - <source>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></source> - <target>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="6443586946875325554"> <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> <target>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> @@ -1848,12 +1856,20 @@ <context context-type="linenumber">82</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>English (GB)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> <source>German</source> <target>German</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1861,7 +1877,7 @@ <target>Dutch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1869,7 +1885,7 @@ <target>French</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From ecba05202c99eb6d4f6e1050b2c107401044b799 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 19 Feb 2021 11:22:43 +0100 Subject: [PATCH 297/898] Update README.md --- README.md | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c90be0912..ea47248dc 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,16 @@ # Paperless-ng -[Paperless](https://github.com/the-paperless-project/paperless) is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents. +[Paperless (click me)](https://github.com/the-paperless-project/paperless) is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents. -Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. +Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. These key points should help you decide whether Paperless-ng is something you would prefer over Paperless: + +* Interface: The new front end is the main interface for paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed. +* Encryption: Paperless-ng does not support GnuPG anymore, since storing your data on encrypted file systems (that you optionally mount on demand) achieves about the same result. +* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM, depending on the configuration. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. +* API changes: If you rely on the REST API of paperless, some of its functionality has been changed. + +For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. # How it Works @@ -32,8 +39,8 @@ Here's what you get: * Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents. * Supports PDF documents, images, plain text files, and Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents). * Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ng.readthedocs.io/en/latest/configuration.html#tika-settings)) -* Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and can be configured freely. -* Single page application front end. Should be pretty snappy. Will be mobile friendly in the future. +* Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and their format can be configured freely. +* Single page application front end. * Includes a dashboard that shows basic statistics and has document upload. * Filtering by tags, correspondents, types, and more. * Customizable views can be saved and displayed on the dashboard. @@ -44,14 +51,13 @@ Here's what you get: * Searching for similar documents ("More like this") * Email processing: Paperless adds documents from your email accounts. * Configure multiple accounts and filters for each account. - * When adding documents from mails, paperless can move these mails to a new folder, mark them as read, flag them or delete them. + * When adding documents from mails, paperless can move these mails to a new folder, mark them as read, flag them as important or delete them. * Machine learning powered document matching. * Paperless learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless. -* A task processor that processes documents in parallel and also tells you when something goes wrong. On modern multi core systems, consumption is blazing fast. +* Optimized for multi core systems: Paperless-ng consumes multiple documents in parallel. +* The integrated sanity checker makes sure that your document archive is in good health. -If you want to see some screenshots of paperless-ng in action, [some are available in the documentation](https://paperless-ng.readthedocs.io/en/latest/screenshots.html). However, some parts of the UI have changed since I took these. - -For a complete list of changes from paperless, check out the [changelog](https://paperless-ng.readthedocs.io/en/latest/changelog.html) +If you want to see some screenshots of paperless-ng in action, [some are available in the documentation](https://paperless-ng.readthedocs.io/en/latest/screenshots.html). # Getting started @@ -103,4 +109,4 @@ These projects also exist, but their status and compatibility with paperless-ng # Important Note -Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption by default (it needs to be searchable, so if someone has ideas on how to do that on encrypted data, I'm all ears). This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home. +Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption. This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home. From 6f5ed6ddb7f1cfec536e7d3305072b91672f3813 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 19 Feb 2021 11:24:21 +0100 Subject: [PATCH 298/898] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea47248dc..745c3b8f9 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Paperless-ng is a fork of the original project, adding a new interface and many * Interface: The new front end is the main interface for paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed. * Encryption: Paperless-ng does not support GnuPG anymore, since storing your data on encrypted file systems (that you optionally mount on demand) achieves about the same result. -* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM, depending on the configuration. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. +* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. * API changes: If you rely on the REST API of paperless, some of its functionality has been changed. For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. From f443738aead08c0d3a38578ff9a88202e3ba409e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 19 Feb 2021 11:31:14 +0100 Subject: [PATCH 299/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 6df8ec565..51beb3fba 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.4", + version: "1.1.5", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index f336d581e..b21fef930 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 1, 4) +__version__ = (1, 1, 5) From f9669501a16063f499700fb937c1f46446bf8918 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 19 Feb 2021 11:34:51 +0100 Subject: [PATCH 300/898] this took way too much time --- resources/logo.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 resources/logo.txt diff --git a/resources/logo.txt b/resources/logo.txt new file mode 100644 index 000000000..75a1d2c75 --- /dev/null +++ b/resources/logo.txt @@ -0,0 +1,16 @@ + 9w + {@@N + Q@@@@H + G@@@@@@@\ + SilN@@@@@@@ + *Q *@@@@@@@@S /= = = = = = = = = = = = = = = = = =\ + *@ B@@@@@@@@N || || + N R$ A@@@@@@@@@@ || PAPERLESS-NG || +x@@ $U B@@@@@@@@@R || || +N@@N^ @ N@@@@@@@@@* \= = = = = = = = = = = = = = = = = =/ +|@@@u @ E@@@@@@@@l + Q@@@ \ Px@@@@@@P + 1@@S` @@@o' + z$ ; + v + / From 7c3347bb3e96070f34d473be2e95efac390eaf44 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 19 Feb 2021 11:51:59 +0100 Subject: [PATCH 301/898] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 745c3b8f9..83ef1c1ed 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Paperless-ng is a fork of the original project, adding a new interface and many * Interface: The new front end is the main interface for paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed. * Encryption: Paperless-ng does not support GnuPG anymore, since storing your data on encrypted file systems (that you optionally mount on demand) achieves about the same result. -* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. +* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. While adding documents, it requires about 300MB additional RAM, depending on the document. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. * API changes: If you rely on the REST API of paperless, some of its functionality has been changed. For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. From 02f93792c1440b3a443155b8a88eb16c74a7d1b2 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 20 Feb 2021 16:09:29 +0100 Subject: [PATCH 302/898] API support for downloading compressed archives of multiple documents --- src/documents/bulk_download.py | 60 +++++++++++++++++ src/documents/serialisers.py | 65 ++++++++++++------- src/documents/tests/test_api.py | 111 ++++++++++++++++++++++++++++++++ src/documents/views.py | 58 ++++++++++++++++- src/paperless/urls.py | 6 +- 5 files changed, 274 insertions(+), 26 deletions(-) create mode 100644 src/documents/bulk_download.py diff --git a/src/documents/bulk_download.py b/src/documents/bulk_download.py new file mode 100644 index 000000000..8c675b4b5 --- /dev/null +++ b/src/documents/bulk_download.py @@ -0,0 +1,60 @@ +from zipfile import ZipFile + +from documents.models import Document + + +class BulkArchiveStrategy: + + def __init__(self, zipf: ZipFile): + self.zipf = zipf + + def make_unique_filename(self, + doc: Document, + archive: bool = False, + folder: str = ""): + counter = 0 + while True: + filename = folder + doc.get_public_filename(archive, counter) + if filename in self.zipf.namelist(): + counter += 1 + else: + return filename + + def add_document(self, doc: Document): + raise NotImplementedError() # pragma: no cover + + +class OriginalsOnlyStrategy(BulkArchiveStrategy): + + def add_document(self, doc: Document): + self.zipf.write(doc.source_path, self.make_unique_filename(doc)) + + +class ArchiveOnlyStrategy(BulkArchiveStrategy): + + def __init__(self, zipf): + super(ArchiveOnlyStrategy, self).__init__(zipf) + + def add_document(self, doc: Document): + if doc.has_archive_version: + self.zipf.write(doc.archive_path, + self.make_unique_filename(doc, archive=True)) + else: + self.zipf.write(doc.source_path, + self.make_unique_filename(doc)) + + +class OriginalAndArchiveStrategy(BulkArchiveStrategy): + + def add_document(self, doc: Document): + if doc.has_archive_version: + self.zipf.write( + doc.archive_path, self.make_unique_filename( + doc, archive=True, folder="archive/" + ) + ) + + self.zipf.write( + doc.source_path, + self.make_unique_filename(doc, folder="originals/") + ) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index b01f82805..66736bdbf 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -192,14 +192,34 @@ class SavedViewSerializer(serializers.ModelSerializer): return saved_view -class BulkEditSerializer(serializers.Serializer): +class DocumentListSerializer(serializers.Serializer): documents = serializers.ListField( - child=serializers.IntegerField(), + required=True, label="Documents", - write_only=True + write_only=True, + child=serializers.IntegerField() ) + def _validate_document_id_list(self, documents, name="documents"): + if not type(documents) == list: + raise serializers.ValidationError(f"{name} must be a list") + if not all([type(i) == int for i in documents]): + raise serializers.ValidationError( + f"{name} must be a list of integers") + count = Document.objects.filter(id__in=documents).count() + if not count == len(documents): + raise serializers.ValidationError( + f"Some documents in {name} don't exist or were " + f"specified twice.") + + def validate_documents(self, documents): + self._validate_document_id_list(documents) + return documents + + +class BulkEditSerializer(DocumentListSerializer): + method = serializers.ChoiceField( choices=[ "set_correspondent", @@ -215,18 +235,6 @@ class BulkEditSerializer(serializers.Serializer): parameters = serializers.DictField(allow_empty=True) - def _validate_document_id_list(self, documents, name="documents"): - if not type(documents) == list: - raise serializers.ValidationError(f"{name} must be a list") - if not all([type(i) == int for i in documents]): - raise serializers.ValidationError( - f"{name} must be a list of integers") - count = Document.objects.filter(id__in=documents).count() - if not count == len(documents): - raise serializers.ValidationError( - f"Some documents in {name} don't exist or were " - f"specified twice.") - def _validate_tag_id_list(self, tags, name="tags"): if not type(tags) == list: raise serializers.ValidationError(f"{name} must be a list") @@ -238,10 +246,6 @@ class BulkEditSerializer(serializers.Serializer): raise serializers.ValidationError( f"Some tags in {name} don't exist or were specified twice.") - def validate_documents(self, documents): - self._validate_document_id_list(documents) - return documents - def validate_method(self, method): if method == "set_correspondent": return bulk_edit.set_correspondent @@ -392,9 +396,24 @@ class PostDocumentSerializer(serializers.Serializer): return None -class SelectionDataSerializer(serializers.Serializer): +class BulkDownloadSerializer(DocumentListSerializer): - documents = serializers.ListField( - required=True, - child=serializers.IntegerField() + content = serializers.ChoiceField( + choices=["archive", "originals", "both"], + default="archive" ) + + compression = serializers.ChoiceField( + choices=["none", "deflated", "bzip2", "lzma"], + default="none" + ) + + def validate_compression(self, compression): + import zipfile + + return { + "none": zipfile.ZIP_STORED, + "deflated": zipfile.ZIP_DEFLATED, + "bzip2": zipfile.ZIP_BZIP2, + "lzma": zipfile.ZIP_LZMA + }[compression] diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 01e7210a5..7486154e1 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -1,7 +1,10 @@ +import datetime +import io import json import os import shutil import tempfile +import zipfile from unittest import mock from django.conf import settings @@ -1123,6 +1126,113 @@ class TestBulkEdit(DirectoriesMixin, APITestCase): self.assertCountEqual(response.data['selected_document_types'], [{"id": self.c1.id, "document_count": 1}, {"id": self.c2.id, "document_count": 0}]) +class TestBulkDownload(DirectoriesMixin, APITestCase): + + def setUp(self): + super(TestBulkDownload, self).setUp() + + user = User.objects.create_superuser(username="temp_admin") + self.client.force_login(user=user) + + self.doc1 = Document.objects.create(title="unrelated", checksum="A") + self.doc2 = Document.objects.create(title="document A", filename="docA.pdf", mime_type="application/pdf", checksum="B", created=datetime.datetime(2021, 1, 1)) + self.doc2b = Document.objects.create(title="document A", filename="docA2.pdf", mime_type="application/pdf", checksum="D", created=datetime.datetime(2021, 1, 1)) + self.doc3 = Document.objects.create(title="document B", filename="docB.jpg", mime_type="image/jpeg", checksum="C", created=datetime.datetime(2020, 3, 21), archive_filename="docB.pdf", archive_checksum="D") + + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.pdf"), self.doc2.source_path) + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.png"), self.doc2b.source_path) + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "simple.jpg"), self.doc3.source_path) + shutil.copy(os.path.join(os.path.dirname(__file__), "samples", "test_with_bom.pdf"), self.doc3.archive_path) + + def test_download_originals(self): + response = self.client.post("/api/documents/bulk_download/", json.dumps({ + "documents": [self.doc2.id, self.doc3.id], + "content": "originals" + }), content_type='application/json') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/zip') + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 2) + self.assertIn("2021-01-01 document A.pdf", zipf.namelist()) + self.assertIn("2020-03-21 document B.jpg", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual(f.read(), zipf.read("2021-01-01 document A.pdf")) + + with self.doc3.source_file as f: + self.assertEqual(f.read(), zipf.read("2020-03-21 document B.jpg")) + + def test_download_default(self): + response = self.client.post("/api/documents/bulk_download/", json.dumps({ + "documents": [self.doc2.id, self.doc3.id] + }), content_type='application/json') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/zip') + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 2) + self.assertIn("2021-01-01 document A.pdf", zipf.namelist()) + self.assertIn("2020-03-21 document B.pdf", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual(f.read(), zipf.read("2021-01-01 document A.pdf")) + + with self.doc3.archive_file as f: + self.assertEqual(f.read(), zipf.read("2020-03-21 document B.pdf")) + + def test_download_both(self): + response = self.client.post("/api/documents/bulk_download/", json.dumps({ + "documents": [self.doc2.id, self.doc3.id], + "content": "both" + }), content_type='application/json') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/zip') + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 3) + self.assertIn("originals/2021-01-01 document A.pdf", zipf.namelist()) + self.assertIn("archive/2020-03-21 document B.pdf", zipf.namelist()) + self.assertIn("originals/2020-03-21 document B.jpg", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual(f.read(), zipf.read("originals/2021-01-01 document A.pdf")) + + with self.doc3.archive_file as f: + self.assertEqual(f.read(), zipf.read("archive/2020-03-21 document B.pdf")) + + with self.doc3.source_file as f: + self.assertEqual(f.read(), zipf.read("originals/2020-03-21 document B.jpg")) + + def test_filename_clashes(self): + response = self.client.post("/api/documents/bulk_download/", json.dumps({ + "documents": [self.doc2.id, self.doc2b.id] + }), content_type='application/json') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response['Content-Type'], 'application/zip') + + with zipfile.ZipFile(io.BytesIO(response.content)) as zipf: + self.assertEqual(len(zipf.filelist), 2) + + self.assertIn("2021-01-01 document A.pdf", zipf.namelist()) + self.assertIn("2021-01-01 document A_01.pdf", zipf.namelist()) + + with self.doc2.source_file as f: + self.assertEqual(f.read(), zipf.read("2021-01-01 document A.pdf")) + + with self.doc2b.source_file as f: + self.assertEqual(f.read(), zipf.read("2021-01-01 document A_01.pdf")) + + def test_compression(self): + response = self.client.post("/api/documents/bulk_download/", json.dumps({ + "documents": [self.doc2.id, self.doc2b.id], + "compression": "lzma" + }), content_type='application/json') + class TestApiAuth(APITestCase): def test_auth_required(self): @@ -1146,4 +1256,5 @@ class TestApiAuth(APITestCase): self.assertEqual(self.client.get("/api/search/").status_code, 401) self.assertEqual(self.client.get("/api/search/auto_complete/").status_code, 401) self.assertEqual(self.client.get("/api/documents/bulk_edit/").status_code, 401) + self.assertEqual(self.client.get("/api/documents/bulk_download/").status_code, 401) self.assertEqual(self.client.get("/api/documents/selection_data/").status_code, 401) diff --git a/src/documents/views.py b/src/documents/views.py index 68d6e3c77..d886324ae 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -2,6 +2,7 @@ import logging import os import tempfile import uuid +import zipfile from datetime import datetime from time import mktime @@ -34,6 +35,8 @@ from rest_framework.viewsets import ( from paperless.db import GnuPG from paperless.views import StandardPagination +from .bulk_download import OriginalAndArchiveStrategy, OriginalsOnlyStrategy, \ + ArchiveOnlyStrategy from .classifier import load_classifier from .filters import ( CorrespondentFilterSet, @@ -51,7 +54,9 @@ from .serialisers import ( DocumentTypeSerializer, PostDocumentSerializer, SavedViewSerializer, - BulkEditSerializer, SelectionDataSerializer + BulkEditSerializer, + DocumentListSerializer, + BulkDownloadSerializer ) @@ -444,7 +449,7 @@ class PostDocumentView(APIView): class SelectionDataView(APIView): permission_classes = (IsAuthenticated,) - serializer_class = SelectionDataSerializer + serializer_class = DocumentListSerializer parser_classes = (parsers.MultiPartParser, parsers.JSONParser) def get_serializer_context(self): @@ -606,3 +611,52 @@ class StatisticsView(APIView): 'documents_total': documents_total, 'documents_inbox': documents_inbox, }) + + +class BulkDownloadView(APIView): + + permission_classes = (IsAuthenticated,) + serializer_class = BulkDownloadSerializer + parser_classes = (parsers.JSONParser,) + + def get_serializer_context(self): + return { + 'request': self.request, + 'format': self.format_kwarg, + 'view': self + } + + def get_serializer(self, *args, **kwargs): + kwargs['context'] = self.get_serializer_context() + return self.serializer_class(*args, **kwargs) + + def post(self, request, format=None): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + ids = serializer.validated_data.get('documents') + compression = serializer.validated_data.get('compression') + content = serializer.validated_data.get('content') + + os.makedirs(settings.SCRATCH_DIR, exist_ok=True) + temp = tempfile.NamedTemporaryFile(dir=settings.SCRATCH_DIR, suffix="-compressed-archive", delete=False) + + if content == 'both': + strategy_class = OriginalAndArchiveStrategy + elif content == 'originals': + strategy_class = OriginalsOnlyStrategy + else: + strategy_class = ArchiveOnlyStrategy + + with zipfile.ZipFile(temp.name, "w", compression) as zipf: + strategy = strategy_class(zipf) + for id in ids: + doc = Document.objects.get(id=id) + strategy.add_document(doc) + + with open(temp.name, "rb") as f: + response = HttpResponse(f, content_type="application/zip") + response["Content-Disposition"] = '{}; filename="{}"'.format( + "attachment", "documents.zip") + + return response diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 40f4bd754..4e0b8f191 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -23,7 +23,8 @@ from documents.views import ( PostDocumentView, SavedViewViewSet, BulkEditView, - SelectionDataView + SelectionDataView, + BulkDownloadView ) from paperless.views import FaviconView @@ -63,6 +64,9 @@ urlpatterns = [ re_path(r"^documents/selection_data/", SelectionDataView.as_view(), name="selection_data"), + re_path(r"^documents/bulk_download/", BulkDownloadView.as_view(), + name="bulk_download"), + path('token/', views.obtain_auth_token) ] + api_router.urls)), From 99a9b63964ffb29f55d1f8886983f275894cdae2 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 20 Feb 2021 16:10:50 +0100 Subject: [PATCH 303/898] front end support for downloading multiple documents --- src-ui/messages.xlf | 49 +++++++++++-------- src-ui/package-lock.json | 5 ++ src-ui/package.json | 1 + .../bulk-editor/bulk-editor.component.html | 14 ++++++ .../bulk-editor/bulk-editor.component.ts | 7 +++ .../src/app/services/rest/document.service.ts | 4 ++ 6 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 731fdff7f..95e0fad15 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1226,21 +1226,21 @@ <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">113</context> </context-group> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> @@ -1248,7 +1248,7 @@ <source>, </source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> </trans-unit> @@ -1256,7 +1256,7 @@ <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> </trans-unit> @@ -1264,112 +1264,112 @@ <source>Confirm tags assignment</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">127</context> </context-group> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">131</context> + <context context-type="linenumber">132</context> </context-group> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">134</context> + <context context-type="linenumber">135</context> </context-group> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">137</context> </context-group> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">138</context> + <context context-type="linenumber">139</context> </context-group> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">158</context> + <context context-type="linenumber">159</context> </context-group> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">161</context> </context-group> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">181</context> + <context context-type="linenumber">182</context> </context-group> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">183</context> + <context context-type="linenumber">184</context> </context-group> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">185</context> + <context context-type="linenumber">186</context> </context-group> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">202</context> </context-group> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">202</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> @@ -1393,6 +1393,13 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> <context-group purpose="location"> diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index c3827f80c..148bc72eb 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -5545,6 +5545,11 @@ "schema-utils": "^2.6.5" } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index 14d828483..d6082c6b9 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -23,6 +23,7 @@ "@ng-bootstrap/ng-bootstrap": "^8.0.0", "@ng-select/ng-select": "^5.0.9", "bootstrap": "^4.5.0", + "file-saver": "^2.0.5", "ng-bootstrap": "^1.6.3", "ng2-pdf-viewer": "^6.3.2", "ngx-cookie-service": "^10.1.1", diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html index 053126445..98716e2f9 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -56,6 +56,20 @@ </div> </div> <div class="col-auto ml-auto mb-2 mb-xl-0 d-flex"> + <div class="btn-group btn-group-sm mr-2"> + <button type="button" class="btn btn-outline-primary btn-sm" (click)="downloadSelected()"> + <svg width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"> + <use xlink:href="assets/bootstrap-icons.svg#download" /> + </svg> <ng-container i18n>Download</ng-container> + </button> + <div class="btn-group" ngbDropdown role="group" aria-label="Button group with nested dropdown"> + <button class="btn btn-outline-primary btn-sm dropdown-toggle-split" ngbDropdownToggle></button> + <div class="dropdown-menu" ngbDropdownMenu> + <button ngbDropdownItem i18n (click)="downloadSelected('originals')">Download originals</button> + </div> + </div> + </div> + <button type="button" class="btn btn-sm btn-outline-danger" (click)="applyDelete()"> <svg width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#trash" /> diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts index ebc7a8c11..310290291 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts @@ -15,6 +15,7 @@ import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable import { MatchingModel } from 'src/app/data/matching-model'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { ToastService } from 'src/app/services/toast.service'; +import { saveAs } from 'file-saver'; @Component({ selector: 'app-bulk-editor', @@ -207,4 +208,10 @@ export class BulkEditorComponent { this.executeBulkOperation(modal, "delete", {}) }) } + + downloadSelected(content = "archive") { + this.documentService.bulkDownload(Array.from(this.list.selected), content).subscribe((result: any) => { + saveAs(result, 'documents.zip'); + }) + } } diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index 19b18cfeb..40dbc64f7 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -134,4 +134,8 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> return this.http.get<PaperlessDocumentSuggestions>(this.getResourceUrl(id, 'suggestions')) } + bulkDownload(ids: number[], content="both") { + return this.http.post(this.getResourceUrl(null, 'bulk_download'), {"documents": ids, "content": content}, { responseType: 'blob' }) + } + } From d88b705f264abcc12598d82ffcc1f9b73f5a9f76 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 15:44:19 +0000 Subject: [PATCH 304/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 50 ++++++++++++++++++------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index aa57afdab..6802f8dce 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -1400,7 +1400,7 @@ <target>Fehler beim Ausführung der Massenverarbeitung: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7894972847287473517"> @@ -1408,7 +1408,7 @@ <target>"<x equiv-text="items[0].name" id="PH"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">113</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> @@ -1416,7 +1416,7 @@ <target>"<x equiv-text="items[0].name" id="PH"/>" und "<x equiv-text="items[1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> @@ -1425,7 +1425,7 @@ <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">117</context> </context-group> <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> </trans-unit> @@ -1434,7 +1434,7 @@ <target><x equiv-text="list" id="PH"/> und "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">118</context> </context-group> <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> </trans-unit> @@ -1443,7 +1443,7 @@ <target>Tag-Zuweisung bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">127</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6619516195038467207"> @@ -1451,7 +1451,7 @@ <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten das Tag "<x equiv-text="tag.name" id="PH"/>" hinzufügen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1894412783609570695"> @@ -1459,7 +1459,7 @@ <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> hinzufügen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">131</context> + <context context-type="linenumber">132</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7181166515756808573"> @@ -1467,7 +1467,7 @@ <target>Diese Aktion wird das Tag "<x equiv-text="tag.name" id="PH"/>" von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">134</context> + <context context-type="linenumber">135</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3819792277998068944"> @@ -1475,7 +1475,7 @@ <target>Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">137</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2739066218579571288"> @@ -1483,7 +1483,7 @@ <target>Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> den <x equiv-text="this.list.selected.size" id="PH_2"/> ausgewählten Dokumenten hinzufügen und die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> entfernen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">138</context> + <context context-type="linenumber">139</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2996713129519325161"> @@ -1491,7 +1491,7 @@ <target>Korrespondent-Zuweisung bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">158</context> + <context context-type="linenumber">159</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6900893559485781849"> @@ -1499,7 +1499,7 @@ <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Korrespondent "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">161</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1257522660364398440"> @@ -1507,7 +1507,7 @@ <target>Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Korrespondent entfernen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5393409374423140648"> @@ -1515,7 +1515,7 @@ <target>Dokumenttyp-Zuweisung bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">181</context> + <context context-type="linenumber">182</context> </context-group> </trans-unit> <trans-unit datatype="html" id="332180123895325027"> @@ -1523,7 +1523,7 @@ <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Dokumenttyp "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">183</context> + <context context-type="linenumber">184</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2236642492594872779"> @@ -1531,7 +1531,7 @@ <target>Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Dokumenttyp entfernen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">185</context> + <context context-type="linenumber">186</context> </context-group> </trans-unit> <trans-unit datatype="html" id="749430623564850405"> @@ -1539,7 +1539,7 @@ <target>Löschen bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4303174930844518780"> @@ -1547,7 +1547,7 @@ <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH"/> ausgewählte Dokumente unwiderruflich löschen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">202</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5641451190833696892"> @@ -1555,7 +1555,7 @@ <target>Diese Aktion kann nicht rückgängig gemacht werden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">202</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6734339521247847366"> @@ -1563,7 +1563,7 @@ <target>Dokument(e) löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> @@ -1590,6 +1590,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Originale herunterladen</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> <source>Suggestions:</source> <target>Vorschläge:</target> From 70bb56cd9fb6a2b7a9767e4f7f467acce829515d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sat, 20 Feb 2021 17:45:27 +0000 Subject: [PATCH 305/898] Translate /src-ui/messages.xlf in nl_NL translation completed for the source file '/src-ui/messages.xlf' on the 'nl_NL' language. --- src-ui/src/locale/messages.nl_NL.xlf | 128 ++++++++++++++++----------- 1 file changed, 76 insertions(+), 52 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index becc0e797..fa997d375 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -58,11 +58,11 @@ </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.savedView.name" id="PH"/>" saved successfully.</source> - <target>View "<x equiv-text="this.list.savedView.name" id="PH"/>" met succes opgeslagen.</target> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" met succes opgeslagen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">109</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -70,7 +70,7 @@ <target>View "<x equiv-text="savedView.name" id="PH"/>" met succes gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">130</context> + <context context-type="linenumber">136</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -129,9 +129,9 @@ <context context-type="linenumber">72</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="72e7d343f9165602cce1ca7faffbc565fd31ef92"> - <source>Save "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Opslaan "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Opslaan "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -585,14 +585,6 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5ca707824ab93066c7d9b44e1b8bf216725c2c22"> - <source>Filter</source> - <target>Filter</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> <target>Opgeslagen view "<x equiv-text="savedView.name" id="PH"/>" verwijderd.</target> @@ -622,7 +614,15 @@ <target>Datumopmaak van weergavetaal gebruiken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +630,7 @@ <target>Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">114</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1234,6 +1234,14 @@ <context context-type="linenumber">46</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Titel: <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> <source>Filter tags</source> <target>Etiketten filteren</target> @@ -1392,7 +1400,7 @@ <target>Fout bij het uitvoeren van een massabewerking: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7894972847287473517"> @@ -1400,7 +1408,7 @@ <target>"<x equiv-text="items[0].name" id="PH"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">113</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> @@ -1408,7 +1416,7 @@ <target>"<x equiv-text="items[0].name" id="PH"/>" en "<x equiv-text="items[1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> @@ -1417,7 +1425,7 @@ <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">117</context> </context-group> <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> </trans-unit> @@ -1426,7 +1434,7 @@ <target><x equiv-text="list" id="PH"/> en "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">118</context> </context-group> <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> </trans-unit> @@ -1435,7 +1443,7 @@ <target>Bevestig toewijzen van etiketten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">127</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6619516195038467207"> @@ -1443,7 +1451,7 @@ <target>Het etiket "<x equiv-text="tag.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1894412783609570695"> @@ -1451,7 +1459,7 @@ <target>De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">131</context> + <context context-type="linenumber">132</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7181166515756808573"> @@ -1459,7 +1467,7 @@ <target>Het etiket "<x equiv-text="tag.name" id="PH"/>" zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">134</context> + <context context-type="linenumber">135</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3819792277998068944"> @@ -1467,7 +1475,7 @@ <target>De etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">137</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2739066218579571288"> @@ -1475,7 +1483,7 @@ <target>De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen toegevoegd worden aan, en de etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_2"/> geselecteerd(e) document(en).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">138</context> + <context context-type="linenumber">139</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2996713129519325161"> @@ -1483,7 +1491,7 @@ <target>Bevestig toewijzen van correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">158</context> + <context context-type="linenumber">159</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6900893559485781849"> @@ -1491,7 +1499,7 @@ <target>De correspondent "<x equiv-text="correspondent.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">161</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1257522660364398440"> @@ -1499,7 +1507,7 @@ <target>De correspondent zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5393409374423140648"> @@ -1507,7 +1515,7 @@ <target>Bevestig toewijzen van documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">181</context> + <context context-type="linenumber">182</context> </context-group> </trans-unit> <trans-unit datatype="html" id="332180123895325027"> @@ -1515,7 +1523,7 @@ <target>Het documenttype "<x equiv-text="documentType.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">183</context> + <context context-type="linenumber">184</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2236642492594872779"> @@ -1523,7 +1531,7 @@ <target>Het documenttype zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">185</context> + <context context-type="linenumber">186</context> </context-group> </trans-unit> <trans-unit datatype="html" id="749430623564850405"> @@ -1531,7 +1539,7 @@ <target>Bevestig verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4303174930844518780"> @@ -1539,7 +1547,7 @@ <target><x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en) zullen permanent worden verwijderd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">202</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5641451190833696892"> @@ -1547,7 +1555,7 @@ <target>Deze actie kan niet ongedaan worden gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">202</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6734339521247847366"> @@ -1555,7 +1563,7 @@ <target>Verwijder document(en)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> @@ -1582,6 +1590,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Originelen downloaden</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> <source>Suggestions:</source> <target>Suggesties:</target> @@ -1614,22 +1630,22 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46c8fe557cf52c9389783627d4f85453f4ddb459"> - <source>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documenten in "Postvak in": <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> - <context context-type="linenumber">3</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="c327c0e67bcac7494dcbaa9afb3b42d5008c6438"> - <source>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></source> - <target>Totaal aantal documenten: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Totaal aantal documenten: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documenten in "Postvak in": <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="6443586946875325554"> <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> <target>Bezig met verwerken: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> @@ -1848,12 +1864,20 @@ <context context-type="linenumber">82</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>Engels (Brits)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> <source>German</source> <target>Duits</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1861,7 +1885,7 @@ <target>Nederlands</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1869,7 +1893,7 @@ <target>Frans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From 99cb3714830979fe4e27caf94d0c1f366241e45e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:13:08 +0100 Subject: [PATCH 306/898] add some test files --- .../tests/samples/encrypted.pdf | Bin 0 -> 81455 bytes .../tests/samples/rotated.pdf | Bin 0 -> 1322136 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/paperless_tesseract/tests/samples/encrypted.pdf create mode 100644 src/paperless_tesseract/tests/samples/rotated.pdf diff --git a/src/paperless_tesseract/tests/samples/encrypted.pdf b/src/paperless_tesseract/tests/samples/encrypted.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5996edeea62b1509a42a7087d75f3770f4be4beb GIT binary patch literal 81455 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 bdG(8uBBP=sHN7|rW+<_EojUFvJc|E6HwKH> literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/rotated.pdf b/src/paperless_tesseract/tests/samples/rotated.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8b79a9082dd19d5846238dc2f2b0481fa215cb49 GIT binary patch literal 1322136 zcmeEu=UY?Vw`~-p7g0JwR6u$WDbf-VX(FPc^dbUMVu<umqaZCb0RaU8r6VOG9YW|J zAiYToBvE=vkP;z;oA=!N;oS2N{LY7WKlzX+S$pqfWUjg99Am7AKe(eWcU@kMMI28U z9%s3JS@AOLna5=oEiD!WUDyklx7kZaCzs0#cU=74om>pO9Rpbu%>17D2EL@dXase1 zbzxC3ba8ie^SyjsO;M3WLErs_uZuVB1l`AXT%2IewD%wX*I-N2XC5w2zAUs${qynz zM{lUl|Gm#cKgSpDzJZr-Dzbn;ED9Fx&c1G!m6ZOu+HH4Vp9e19x-jTVn5T=U@8z2; z3in(*U1<YuDBZk%UFDxMe0;rK9HA_yKTqcXx&Q|Ha}4L`85qtnFfuYQv7BdNVP<CG z=HO&I&&SQr&&SQnD<~`u6ciG@#LIhG_Oj?T2`OnQ0ic|soTQ?-q?F`o8-SIGp@8ZA znKN8~(=GrI0625*%zqt#|96}@OGmp2BNH<VD{VmSdBE8-baZFw>CT;_r>Bh$rM(ZJ z=Q?-c%5@!viw_+cuX=GSy-xnjBzn85o#)XgQS8Pu?{H=oUOs*SLGf!6l2X#jDynKX z)ireQ=;<368r?N}{KVYC(#qP&+2y&bo4bdPub+PaJTNHYO=MJbOe``b^<7$e#`_PM zdHDr}Ma3nhU%pk>)YjEEG&Xf~c6Imke(&oa8=sh*n*KR6i^CIs{a#*KU0WyZ{@L3< zI3)i)I-LbDojC&lfB{EENXfi^AO9loF9QD}@Gk=YBJeK)|03`&0{<fLF9QD}@Gk=Y zBJeK)|LYMbQGm&n%h@j<;AMh+e;1^6d^s^HscA7YovfgoNFPldun~ULeQ>rtd7Nw^ z`DHNBGoxw-T~hx@f2=(4S6&+1;w{TCzvsyCsdd)RSL)NmxxSC8n`KuPpEGSJUCl$T zs5o4LyBbXq##FRDhUOl<&8t8sMTui}R_ug%KJd2Y50=#BGL#kfg*CFj$dGhlJegmv zSuIi6k=r|#+EH*ZgnrT$OS#_mgib6o2N`Z$;?xv1YsBUH{)YaW-FB}O&<7rE?uS;G z%hSHC9Ba$RHkhcM5k+0u!N|T<DPLij35g*yGb%QieJeGkOj#~X?2_Q<7s0yP!qwG; zG7oceX^K=+_Eq-1c|DtOx5}qRPm`UII%&S@^g-d$ccoiu7g{E!ug~?TXxHRCZb!U6 zD1(BItxO5#(lQ_Lb@eI1(U!Pa<L0XW`h33LvdQH!x}pFb;r8NDJ)R*q%uV7@;}^__ z0*JpwX1LVza4DrF4zz{A!$DbpBDz|m_rh7L`K2@KMqe_`YYW$LL#d@d7wM0CW_>eY z)9yFR_MQZ8FV$sE3H*MX{`<$v()CTAkFQSwXUxHomU*9|)|ppw_<tK@o~8f7DQWnf zk@#PTqfH17>|}fRXA(!XYjL0Sj$Zb`w#Z})cdRT#%vtFsJ=eTo=yO}htTyIT-Np4f zuEly|*G9c}r+_x2LHAL^E`U+Vi^__f&8_V%aifZr1Q(><>T2iZq>|Eg)~ph_OrD%O z@jvi4J1=>9Gq)WsP3%3?Gn?F((H6a*a|(FWkT^TW)nsH#%)hx@N``dJD#UKNG!PF8 zp(Qq5R2wvVgN)P73S?>Ny1(F)`dJm@IUC6vNlMF45`6ZZkfD)Vm7hH_RMpPU&$Y^k z$qSo~AglB&kh@spwF=(HYKnP%SLyo8cv(!R-6>zXdDycj`07UIt?#DlT<+Jn6fW%{ znb+7&>W#ALa`-7zVI}Mon6#O73J7fQ@AmaI_smAQ9c6c=A9+?3FAU`d-ITwe?@+>c zwWj3DVa8i4{S>>qRr&pIOP%7Izdms&6?=k|=B$~k#noQ;-1zvy`#*o^B>;r+tHpUp z8NM#8)Cfg^O^F=+xNe;AJ}sdb`Z;F9TJZU2_b+Qxhev*00jdE^Vo0~4Clh;DD<0}` z|EC{;YP~>?IdZB6QLm_B_!Pi2?$DpHF239DAM;mT^rR}Orwks@K@}n+NNV>SSd7?n zvdVtW7f#mC{)okh3W+BCc=@s`Or?srZ0JaiCdg@;PHy{YGClqFUUnMgD_7`q6W)1U zEOf-nKFuCNGR93)BrsP-O?o~fimfbX=a(S@cf19JakB+EKWPyhI2he7B!d##5EO-@ zx@BOFuI?`{*|YB|58hNK6mPd$FP;LTe8*Z>y-3ki2Gl8l%MRQo<n|(jE1<Abd79B= z67}L&rc+~~?|aH(3F>YhdYcnT6{w!rPXKoXO=TBhEf<Ymd>yzZkPqO2^{Tj1c@H~J z0Y^f<xyL8ANnNLa7!U^u7!8$Gh9XQc6GD%_!apJJRX<z5inupjGX;xvY;GiOm%)nq zelHHVOWR<)>TbW0qL3Uk*AT1}0bu*j+BuV{9QnHOgj2vA`&?{ZOM+UOq|GJ6hBf<0 z5~Eoif~;GcrR^OIy>Dl18e=`Ts8sR8yFc%ao310qTxEmjHHp!<af-r>7nbglYHAr@ zsf)SZHcv_e4xu%Ba_P%`*_DQZ5xnriUyTz`Ss(GG**y0#CAe@zSX%2TfNiZ1F+w14 zQrI1+S3lsuXJ<k*$-ST2MXJg@Tpy34%)#~d#db4qFyCDAv!y=SerF+0fC>I2>za-7 zSvAzxjH7a#Q}EB*ZpSu+`5F9obPOnRJJF|rJ=Hbv;Za!#OXe)0efrPOrao8s>JlS5 zl)kR_FRm^7SbJd<ne{fwqNnw|5upJy>d_Qhw)S%1<*2?Ho4EQTbvDKoYb;=_#!hg& z2XxWy34Ww}=V1lE1Ah)y$}#bFsr1*Ubm=>b*d~SWdT)D**0&VnzkcGzSq)cPGR;Ki z^)r<6)Sae(KeQW!_r`!&yYa33<Y=pj+CiAHnuX-kIMc?*1_@7N)wpW@G@Aaltq%t= z{UpcfhTbN0=SaOd`L;c8AiUIO=_wZDDjnDnRs%m?vd{fYmav_4Bss*cKxEV_wLa`{ z7i2xiF8+Oh`V<28V#h`l&D(hHUaLzqJoKA=%$3`Lnw0b0Dp!UaH%us}6OE)JM$#T3 z3SZ8e_JHYZ*Zfnl@T|M_jVauL&)fs`FFQYJCEF}=o&r{(V~Cx7p98EE@emoN41bPb zUr%p}jkwopG|Mp5W_`Bt1TwYp;}qZ~cYQyJZr1wy?zQ)R#=507&?w$4(v=e(icAiS zj%?5dk|!2bEd3G58Cw(vZL6T&FSr#%nf+n(8GR?XTGO{xfl;fi{7^n`*B+QZ?BnAM z%YiSYJ%1zfM(oY}rRl<HMv_yzDWMF?dH>jMFdNOcjK|}rZl&tyF+cIoJ^TRa-wtD% z(IaGQ>NxO_3p#y@=dtK0qUR6qTdz34YsG6ervTzmro{;dNRhTkOr8SpGOkO{lNqB_ zz(Qnip@D%JSrvY(;^x%graqXE!am9}uR+@Y|NQl5c>R-6v{C7dd(q4lINNZ<Wxqa3 zg2I1~u0|Nr;i492dB{zYTx3$LZ*x|20tk+ab?I}Je0eSiLkq*pCSYm{;S?~UXNUS2 z!bnW*5IlHYI!sXcqxI-;S}MT%FfoZc+^nW#A@ThR2IAV)gbqMd??+Yn;5Fm4gL>~- zJ<DM|h+WQp%%*7m_fTo?5an~*N=H;cSnArjJU?N>s~BezV>=W2I<fALRU-))Gj8^E zjIvUT+zgaa>dlT|J){dun^M?ZD}3tO1CrN54C7A$B$Zr=PHix5F)@Vm3wyBLL<-@_ zF)%IITUZyZwE6V<Pvj8`av2?pj|mYiobljGVl(%4(1mJ!`zY(Sa;}x7?-UT(LOcaf zqZTBnr+|m20M=mKDd2>?$@GL;ehPS_k(gUXj_aL`O7LUH=6Zd(O)}x?uRoH#MIiC4 z`4JEo(V|7<V*E~Y9trLqqIr@5PQG~0Nx#{O`{P>!N;SC9bSackhX_m1(#4(dZbA20 zw={%CVF%ytC}pIm{rvq+i92A+2FNI39@p*fKU*<W;pkGKrCM*nXX5S8@A&L>pID@< zf%TsCE=+_X<sb}SUNOT=?wcr0X$l3yIkIoYH#5G+5Ot_T%0>)vx?M=v=`l&JnOxm{ zy}NK7_$&#!G~f9>>XE6)H)>j=&#{&}p3j+-giH%hVYQ1$8f#t*w>ZBLB2Fx*Yo}B> z3bL<ANUP>f2yU&Slt(bv$@)+gA=~M_0d^z%JDCfGJv|npz)uyN|KH>ST_d3)DP{yt zKs#>BW8gt^gcY`rZd*EP_N5WU%f8cAt!KmJ_9*~o5WBVaa(TakV-$#Wq33(J|G<D? z?^8<ACaS&hwG-+VVNbq1;d@-Bp5I_o=i|kls$VH=?8KHB%uzc7PsC3x;)f#&$Nd_y zcxoW7X*}g`rj#h}*w@tlq0!p6K8gElwS6IG#CePyF{DXWLCnFusaDBY=p3A2MF?;K zeSSQhKu%gpNYAPyJDEmzhe^3iqQvS`4A6|v3ehQ~-TiCesU}XctBDLX8pw}W@}R{R z4-97-3DsgHnRW@X2__bo8i7)w@M?#<!f7Eh4^V)B?qC(3Zg?)9BN+$d(<y>S9gUk- z=XA~YYVFkf#HyxI8cPs3SP1wO@VVaT6wo@!zS5l=T|H~U3a>VjxvG@B5`?TKYEq3j z-yk-H`F1Pu|M_mEhhz||yvSy4V+T>YK07<CF~|J-X-RzBTgw#1n<zDMszfI^M%Osb zj+7q$;zdD<E_YCkq}_*?U}VE0**q7}y6Q3xCL(~R03Q3#MC5eatgS|3Dsk7wYHMkC zxhV%r80Hv80~{p8UZ|}4T4aWp67361*8MRO#N3#RIwbaT2Un#*Y93y0F5Hl5|3Ibp z6yQh+nwXeffM;}0sSY1jR-`H<9e4rB7GEgp#7NX@iUcHY)<nELz9!XF0-LF??h3YE zD?uqbMA-98sz4!TB>e<viT$F3k;ZrDw_E}}qn(^VSyXP<PQ(#U1!8Bfm15`JdI7`_ zm+6>2ms9%LP4yt?O;BNYw^H8~QNM|&`>@-P`Hk1Pc(w3-6z9Titn}y$@x~~_dlmsB z1<4m!C<D#N-C$Uh!&zReN^ZBHZK`y_w#sUc>B+tghKo4dp2P}|zTZlu78WnA4|)l= ze7ROsFaOPOPKQZou~G)>R_-7`_8#uW2w+D2c$4L}-*PI6Mkl;xD=(fn&kkRATfC%9 zg!(%0!h<bp;<v1}xdXp|=l+6AEAw%!or6KW-5221y|Z|a*}t#mZoRF%QWyX6Et<o0 zyd|iRrw4xAb|9iU;VV8>k=H!7S&(V;DLDpfrHV2Q`X>bn5ErSD5QpOvg;M~Z0Y!2+ zidJ{XSf2tG*AV0;L|ZT<Sm7LY*78&05WCX@Bt5Vr&U=Y-tVtWzg9VPL6ppJbm=BnI z*y`@k{<X%UkuLMfGSOS6kK#njrEkKNNp{Qicrd?P^?<CG!G-SfZeV%|7`tO7ibJ(s zM*MObOFHSLEiL%6c{DR9&I_k`5$7B0YuVZPLiD)M$^Tx`i_(fCnQrvMr6m4U5i!gJ zND!XWKd54rxg09-uv7G2mnWQRmQ?6GOiShX;)IU1Q^5HUqhjk-S%X=*n(i|z4}9V` zsjZR0lND(5x>1|CPlnHQ1SMCw+0Hzg6!xCksj<5~bT!W=F7WE3ptJqA1_P&3i4tw+ z-Tl2B$lg=I1+lzVT5Dm?=~55Zr~fBBz2jN}xJ8B#SK==a|M=CfeAae<?sLs=&yJis z?mEicI|W>Tn1_jsda9ThA+6@Nlp1>bS<ek?H=?x3ab*-O(o}><QYm@7bHnA}{mOg! zQkIM-Vq1)UFM-4g&>6(YKoMez3Z_ao@4T6H=tOXC@Cm{?H_Bw@=Hh&`yNLFzd7>5% zqn_SZ58Ahui6rMQ&7e)8jwSAb&8tDwlwtAgqmxNC#Z^L+BHb<uWG6%T-BEs>oZHE8 z?G%vlebf|aDsg0yN0BC8C+a7`Gcw;a<)BJzg~~Q&GzP9v)8-!9`&5L`%BNVgOBn<t zJ+`%fMngxqZpBZM%kafg;@&X%VJ<tZ(lW25rMEF!&h#4$F(K<N$?@S9V^!q9o#}Ol z=}jTKos#KhRpFO_E%u$CPXXUAnw|nsa9W&k*&b445lngkfe-{<SjM!uCVT65`0nn_ zk4m|>7i4;_k^_kMS3-{J<9y5F{@N8}I!_U9btfH9dQ5i!&uXblPFCzgm5v~$i(+&Z zMgvMmmpx5F`Doqn-Uigh7(I?6T$r`%Al{26Cr2?+65!r&3;aryRZS}cyxDM4xk2%3 zcd7IToX&_^-wDLE{S?4KaVUW|b#}F0^jlR}88_BWh|I+E7l@u4rpr9IEAx(=fHOq9 z6j-@uxL>N131#p8ao_NQezZ8e9QZ$>@I`dQlVPWT+qI|@YQ`xbt|W|oO(QG<MLxbe z3Qd_dt(&}R`T3Ed?c5zx2OqnnShQ6>++)2%*#8LIt`O4BeW+Ca@a(G#0`KEpResZ= zdNYiNqBFg@6JkJMzhDT3{^087MO_f?{*&8cJ57-RzjD}9TFWJalTHCh)HAZBmK0<3 z^D3gm+ga^|0h_;XjhFNLYVF>G?(bmK2mO^TQYd$b7BLkR18^)xgq%L7H?fl@imt`9 z*EdNP$aoiXFxGo4Z)=H@P+i2jEIjz4+mU~U{3HJ=o#pS*CH(in*X<{9p%=zGb414X zLT@V8e2a8U^6I<HQ9Qq2aaX2qPvJF|ojPbv;)s9*elgrN(&{k+J%27y9V&ea_@6Ur zrFJnI!%c+6Q|JP4*&?j0eftrt-&53Ob6wvj4*+%S+rQZN7OiCjR7YL6x%20yy%7uZ zO-k7?#R)%rmfYNaIC}?kV+5KvafPY7mgz}&iYD&?N|l!1+=;BzD7zb{07eomKA%j5 zsE$xCk{!BLAxq60tS6qwArJZe&NabDuJ|uqpH-~g+_R7&33VuvJ3H~CD3|daxgwip z&DF3Ibl;(ESncmB_goSBXEF-h@MlLH;X7`_YkbyQ7;Xx<mDr6ftsrMvLTLr?C%uM- z9xkq+tDL4plzv`=0w3k(D8+@q3N`3TKfn0X=4TchAMn&%_u3|<!2b(^m=6-771$M! zQvjlnmdMs+TEoHYxY|rpvR;M$_n#|68DCEUVYL`WMBf!+(n&-f^~wByn$F;UXuFt5 zk#Hf%sSe+td?;Rp+}8Zy_yYgn69pX#8PKvJw&JKC2)PV1YSEj}P1x+ZI`{V_<I4&6 zJi=fV{$OH3*d@eBnd>Pal(rIen_F}k3k%&QrxH#$J5}G#txYXH^ZuH0`|iWTE5qa9 z?4Si6JP1S-FHXX!7&zifE3@<>4ET8cM~$nj9n>JHWG<Ur_7KG!fe9_Er8zlT)p>l4 zzOJeInge#O9Dl1HwI8QaO^n)J-?%lggqbLs6znu_u1?%`W!u$H+Wm#xc0=(@hN;@Q zVXjQolv02wkKAWy_#=GBqVJ1{V#1TclTVcQvqtDM`0x0K>Cfxhc>3W<y+`uRU)b-` zDqPpNN<V&NA8UX0Ijf7?!bq<pi&4y_9Q;b>tV{Q5_xx0qk)kML;4Pb^ia_&PqEm-P z!0TE_?4FFxf~Sm3EN0Aj*{JRYT>`eDlp;XPz|~dZ<V2_noR$l$afTlUF}e+D0#pU- zKGI>hmcWvoaeKxQL#(^&mjOJh;j^FHR+Cw50EspG4ZXnWtuw-#tt_=Mdw;QuUT;ig z5rI$tSo{#B(q;Y<!r4a?r!9%gjX0S&vM0C(TJD){bXeGB))2o9e8kB!>tW(o6!LWB zk=(OwV>|1qox$<KjO(A{_08|tFBnoFBa)Sj_~OKEE%s}%vKl7K73{yh^@_KA4F3Js z>@t!7#v#Bb7l-*y0ZVeu<OqU%F5ZS&){isVUa|4Dn9!IqyuV>zQm1lY2~@_jpI8Ph zf<Hg*%#_RTJ%HFuJl))BDR@zjk@-Y&?F^;srivw*k>uh9-#nOQb^Dz9@@GK0+*^Z6 znc)y^T5RnPcOiIJr^A5Xz%IsCw1k+{1?BtE=1D!!^Bbq|k|AuSvRM8q!x7KtN`?SB z>bd(TITBF>oJick<2k61tu8aLCr%3~MCuOG=K0ea4dPtIYD{X`e1Z2vZ`(or;@;C4 zc-8mCpMN$Bpsw*uN=<lD&-VGK#lXt_w69^eK#Ob`tAM&d(Q|($fbuPxoztd>PwpA1 zY{p&??n>>MGvJ{b>BL4q@$}ddyUrw4)<E%ld;O)Ne=Xvy!bUD?e^iiorS(MS+gW>= z7oTr#dgz~gs{1Ar0w#IXM6(Fa36ujF$+`DZd#xWgadx(Htz}j$bl41(dVoTZZ*PPV zU4G(Q=6agw?WKr=+X*k*pEm#e20YL$<08LC?t){%Y#`vO>MZ>l?pO%ot`Y|c{vc>U z*Z*QgtbVK+NPYz70Ixo&J_TTY{ZoFic4PvhX}KP62kbZsZOI$P{ZaYhbsc2GJT1_t zts55Jl8B@w(0D4Zg8+P|T|>S~rJw9g*wTl8PIdjDq%UxWl3+<>jHm#KP;NJj_zJ~U z<#`0zVB_2i7k>?Mm%J&}RuTuMK|@s2*B84mN~6V7^81#`#|>;sc6Y^6u82wZC>eYn zUa{Nf`IVzgZuG%{1=p=_z@03nt{^3y6HPRPacc60KKtdVq?2CC`2USCZ>khI`4fEb zS(Xji3BN(U2fr6sCZM||&>fuH3B9{vLA;-aK)8#)8y5vu8%7F>W81kSRzF#2(Ut=( zVMNJ#P*iKa^}5>hw6|?drR{lsB3jLZK)pawAcx|Cbe8t^@UZ^%lY7Z_s)zk|D|K$u z`Im$#g=i8v-++YIgBGG*J3&HUI6++HS9~!~JC^FhAlQ5;sqC%A<x3(HN6S<(c0F3Y zxRUpQq4a<mGxY3u?%)#i5XG5<14ZBv(Y*E=#0Banl{p#1TAhG{_;Lcvb|IpvQ)L}- zUW9Ou1bd?*Wb$mA%dfQ8Q6)P2_yfT?Rl@b~b^BltJ5O)OBhm{hJ8@62qBef|6tI?j z`+z9FCT2c#o74KwDS+%Sd<wYpr<?YS^|1;pQT1rBa40K)c-XyrXCpS>@B{x@#LRLn zhG9cBAn2gb=@VJ=F%kRjshSy$5)*qftnTtaR~_7Gx09&FT0kB<HiDhE=?-vmTCSfd z7!v*n;Ls7iZVyxF<OJxEJmh!@x4s!$)%a+g7XV(kd+l$`-)1%ohf@HH0j~Fir4Dg8 zpG$f2h<w&}wPumm(#=a(<bxAxzSHv=wBN!*a9=~FZJR2vmU})-mONxCXcVk8ljZU? zT<YLz2PqVn^b#SsfdQ_5>s{J854VRx9!3cRAEx)S{`x3O>ipd+?Lzu#l=P`G0(Y&@ zuZ*HLq5#`AS(r#)GJ1*lUHZr(fDk`zrw7+7?ky|9xmBV$@tQOF$pkfC{~4qSD!u|_ zI?FmhH%La{yXarB+7ME0vsV&o1_nd@?7+BOq$7zhD=T=eVc9p_;HE;gKltvEv2B$G zZCYE(#0*ZN-!h0^36K&vfplZUX?%)WbeNC>w*8Zh++g|3oyKzmXO=Gq^z3Z^nzn%w zU2%m!xQ1c4Eaod-jl#}vqZnJUmHs;&SZ<<059b*@T!QrM*un8utn{6(Tv^@h`OJfU znf_KcVUbXT5pn9>;l=g>?8XC|bq0pnd-wPOq4m%&A|mAAqL3TpXxuchW;)pt0t(Gu zs2LB8`SG@<grLp2{hb0S7!lmKPi`z<1JCgVOqs1EJH$a^15VO)Z<MmG7C0q&?6JuF z2ot9mHxNycvgHh~OChR<s!`B7E|~9A^2%)E@PCgdOOQAjRRG6K-K=$pqAIl1-)>{- ziqYl=$|Cm_!jC>oYF)BZhGg^hutwKcS2f=Lrgt`SmIEQU<Mto-E0=G<tiFz3txGj) zFosu3*!U)YXAyoaDt5x|Bcf4DbV%4^R?ZH1JnmfoOw7Re`y|0}^xaB?{rxcRx!1q+ zNX3tgFRg6i$xf#L1H|2Zg*Q!{ZzyuEp?UDTYcTPc!tUSg@9u7odCpozA4fH>575|5 z<y?06o>PE*YyH<6Hon0Rb@4gjXjCtViCEu-y6E17EyM@reQm5xoV#btIuSpAGtlb$ zJjZ>eOF@FmwGOXa*_5-|A!X#b$JNbm5nq}nxAFskw_i;+k~KRs9U`?f-Sbx!|5}Ft z-uG;EfAhA?`L$93eQ2)}NNR2e@lE?>i&_Sj!=NZ<D|+)Gyy-z7U5gJ@{p6Dt`xmmN z^|)`}4oX3x{C5qKr`EBt;C4Q0swJY0fkNi%?6tD6Gd>1!)<hq7n92pXE~-}?t<aiU zesaLWs>Ee&`*x?dp);;}j+;6vgv{ZNB(?<oU=%}$UT#N6fRc7g_U`-F;Ds|2Nkb^I zW*g`{u{UPZZvoPC1D<R5CqI15IP3EjBQa=ME#38DP%TX#`3P?{Bd&BISl6k-qZDK3 z!6sgGFyyVE<RfSI`-lZ|fwjSx7enaD-kG;Oyvfa0CX%@Hty&u|=2O7y_oSm~cVaYd z@ij%=$EyOa`#97y(4r60+mg89MqPCVu<T3Aydh^1vM;s;SPLJ<<aeWYjW5j0y3C5! zYn|B`qfw-WA?m<C7tl14T^-z!O*HLh?6FrRVVjHEHOT(!#(Fg=&a?J+;+%88TYR0; zK8)GRVs|)JJvzcpt+vVE%DMIWZIwN<wzo_;ISpre4!#|1GlMo__)u<5`MS=lwwh8x zU0carv6Uq26)q+-#!?kLG+Ls(q1F`X+~ai%nnV=FLhW^6v(m$T<{!Jv34{IqSSjkS z8?l(C(rBr17$2gEJ3fZU!K|vPni>U=QomVjeRu4Q{fN4qAW;&iUKNG6d%RK4XJ$7D zbwcp(K1<QR&K}83=O_#T>yu@OUre5B(vwVv3Il|;HC{B;T)3dKBPgk|CoSEBj5%Av z4|oYEo@5Vmj<`MXJcTD)v@Ut}+Uk;&rs;HHpj^_H0C7vUViG04bcLJ0JOAxR-!;n| zF>-T0e51>rWh{jKU~YiCKM-7M+xGAg58F3a@aA{O>fQW`^|~PW4=U6`N#xjt=6PC| zZ7B)<z!Qg;X=R4T={1ejhML~Z>G|z%B+#sryg$rC;3TH>j2{Ye_Gp{lACF$BJBB}H zq%hn876zOGm_uZ6oDAz1XWW8N2bkti=7z@R6x{RVQGSm6?fCDY+I1dNi-}ENs0QT3 zd|k-+riE|n-MJ?QjVNhybUxe^UtrB!=z}ke=$wjjLvI+@#QkV^+a+rIRV!XZyW9I{ zr7bC{Ng$ziSYZ7K0-jgPtVQc#vIsmIt?VIJKEc&GJH|WyrVIt#sO`Kf?*20gZTS*X zo`*(tgZV<lmk<ITnGP`_1I86^`^AwAK8jL{BH1!Zgo6}v@Fg~qy~901o?QM}gvRPA zz;!%qkqHexDP`4>@7*PMg;xb8&>DS07GzY01IX*9G~jp9qwc`~RCDfo>iwAh^_TE# z==>fqM~FljWZHTqTI(fNaKbb3IO^*J*CVGBJRRqXRS=EVWOnB>Lc!<o^i(OR=E>EY z+m)SpX*<=y=||5o(RmH1^W?ZYB;m?doUo`vl>?WltCz>u@>VqRcBHr0aKE9-Z&Dbo zbl})lo`GE@J#Uo%_~F8jrjHDl4eSPg<LjwB6h(4iF{IOm*wZW#1FHZ%N#5tLd_$jf z^qhfHdt;`gQWqZ(yEn|_<{#A42uSY{`k6N8?!={jrcJopE0;J*yEbA~Jn$6o${P`B zMh+yDXdy`7{yZX1Sjc^{S$#GY9Gm}B&=IsxNA$5@unMYcDOyvjGoMYHHy;i_ca1eX z(FBM&pFk4G$$4an-dSJXqq;`dbKPZs)2IEXM+?5Hm8c(i*?TN9Z@B_pTgk(vcJ3!8 z)r)Mvp-14m2jHl55uq_Hts~QjOtr7$%WfifpvQ%6{^B%6nnK9jfY7W3G9zdO?hEkf zC$-}#{xbsE2Roq2-}Vw@GhC7o8G8yao1_>AWdy|}LWFEs$<uz{bOpCr9`C=rZy+qg zVj2!)h1Tj6*^zr69DBXUVy+E-xgARQ$sS6Vzc!VrpW$BYK2px>UnTqSP7BwqHXctT zNn7pU6_F#ut&Z>8u%p+Dor`nb9>1Ng#1N1xAV~_0xPnAq0Yxs=wYE&}Jbz`CH=7*G z`}iddLw`(sTtIqr8|Uk{+8%QHyK<n8<=tP&>}Zo4Z<TJB^p(5s)1<BSBb!d2FKahu z7P_Mojo*LwbsPx~mFe~j<65orZh{-&YpJiFA%2g^-O}Lf*Q+eXp~BI?rBlGg&H!Lc zZkLF}gmGJj1)s6(dnVggXKwyAs|e=N_48sctjXYeWWdHH6_ET>`pfGSBW(amo-_wH z!xu+gMgqCpc_W>I<W*R+AcZksm<k@SDz*)LqdxiWu?V0FyQhy}J+KN><y%QdrQ3d% zqNZe4WjM-!Y_#OS0yntd&_s-!^SHkF))^C=)}TZ<spaogSsb<ZBGKU;q9}Cu0ZWR0 z0;`=BZ{qUJxT;RVb4JhoD1<v_v?%qNTJf5z1o_F%%!YZ>G+G-kY;7FqIKERm&|IN) zPq9aU330+y8&vThH-&IpNRfov4=^`JH}@(G8OEo!HDd|be&;8Qzv)9EeP{!s8E!k5 zki@(eS5RY~nKAq3%XGENjHtODef?BZF4+|pmAiMAX0f3wrZsYFt&BCHd>y&x(Sf*D z4jX<bR4=|*NjcK^PS_*MTp#ju<@84~;cnG5ND8jeYh4$<-7dScox(h7C*q<gDF(dt zYx?~LmY%r3xFuEW#$H^mp}RU5BnK^U%Qrf_iG9uV6V8Jo_Ts?d6g!-xU+V>H;|d7h z&`zL__GaPKtrbcCR*!8A!xtO)-Q)YUO={+X&rAKBTxE>V@42WCn_I2-G-SFwK~fYA zBDNK^hPj$31HCJ!Zzgecaj+HKbASAi0cjDZ-KaFTkoR3(NV$)j8Z1*WL6ulN5=p?Z zw)nY5!MF<anQ%#PeZSj2n_BI5TX5A{qEP#k2+L%x(23&0#><&`TXdhFqQyHI#mk=i z-PXkVHbm5HeUxw3pF-{S#u}uPwEbXoKZm{$wi@j~>}>~g`YAAO2=cxsI@HI=Zsjld z$!ueLwRk~kd*{4Q0o=tobGTyUN{zT{(%nX1(UPmzRDR_Oqxo<x7ne*14<d`KX6I+y zU%Xwgxmu7Sigs)N=#7gAC{ad4fw)^p&m(XrM%OfMuRdIV=pMCedd(&s`t2^m<_bS$ zqhypK`iabl$40_%l7mQ(sSKIGXVukZvW|C+q9iW;3RBs9Z1Is|MFK~oB}&M&57X^+ z<(s=if{WWdj17M;@m0|Db=v&y#c@(7x~G8fQZO009wI<8?!<`Kk=U1!U8|YG<vs(7 zv2S<9o}Xb7rbkrxhMgt(XAzP(bSqXdh@ZdxZ(TD<NV}<Jp-sq*Y~o9#JmmO{4~Esw z&dr?UNT$2Smu1MB_8WNoS)g00@0>dY2*Xi^xkgSR*#~B9w|5`hM%%<5V{0dJXBKfq z;9ut?PXYBb9fsUAagyUwpNbPfrhA;LVfUhc!J+#mM-K~X7!1-5^pC`aUhJ|5llF&W ze9PGN*EO4imH8f&=iLnJV|~>eEg)|K4@<z6og1Y}tq*7~6dt6NXKP@onx*vVQ$;YT zcJ<$PoT*RNsPg3N#AAKpwa=yQb<w8H-)e%(pe8VJY>ITc!O*6Nmwh{~tQ3V-FSJ`= zvo&?+{>FLm;S9L6LVA#NLmCb<cfGY<my!~l&mN5=wcH@Mb{P5&+$@A&@r~7qclY!^ zuMyfmK1Nj~vuv1+?=7-44U{@ybv&vnvN{xZ&xvK{f2za+MOMcscXHd^rh#*cb8%58 zi`xfV>@+UV(LyU2N5bbauM3LuSniw^O)>l%Q0ke}Hl08-!=O61m_tBQN1C0&%P5$u zrpji)i;!R5^S(Tjh)&HA<x{{X?nSaNO+n^+9KwZj;DECdg59tJ)v6nTpH#YD4ejz= zUE;(`R0Nv@9(FeiLCsg%gX~KM2MVzeWCmA5e_tIo;Ev-wuO6lB2j)6lqO*)-gB$w5 zkp_houTS3y{WiN0Qd0DjJN${)@St@L1KDC}=i(wc9mb`jS{2|}I#_%=!(yzlu0AOy zHEM6a617ClaKSD3^w<lHx&|skHMV){V}B_e_@~H?=`-(vhgv{L(hd(zSpdHY39Oif z*Iq^L6YBkZJjMksx{mC9DI*Qw1TV#vyh}2X);R@yvoKQY&gL{Fd(l|r2e$Gbg8jtK zGday~YW4AOC~1@jqI7B-61S&>V(zaN>Ri3#bU7ZmJJ9+X#5q+PYV(97pEI3tIGr*d z80#bZR22Bm(bB)t7>8&#jmC%(L0P4X?n)*Bl3q7h`}BqFUh}hWnUE`p!EGY!MBZYQ z`>cB6cAHpLU`F-%l^;L}xkZ&dWhh4FDbsgGhLmR=5|T<wmpFrnLI@@|i33mQ3-`KS zOKNwjnZ~PI@}RM2^3H!4)d#(?EJVg=7)6sfH1xMpZc}BoxM2c1wlzkh7#=*McSZdO zvIs2?0TWwaX*n#Nn01(+0%oiuhl<jbZl^ZK#n=hKrGErH6{NNK(d6dxH4u<^5><%j zzhI{-tk0>8cA=nC|2z${;Q61kd<_GnJS6tUhZvkB;28c~jvCx9f?fH{q?`BZ4Bc^0 z9Tf;a)FW*b?)QXGGia()hZS;pJDUaYUqbZBp+)ec9fKr?xZ&{^@k67`0<4<nSo?FG z?483{LO?)n@YgIOFArZYcvV)Pj_aSgi`g@4$aMrR8zYDqVS!ONa%qBA85jVq*}8F$ z^gJoA`}fbarjtQ50<G|t_r}C@sYNE%&DtRbq`a6A)H8PSqDIpR!aiYq74<<G_me?5 z?3PS#?;GED<WiD0v|>3Htyx$&m3k1Eqgs>EcY#xZajF@`PT?l|mBK~(kGAKwzS&vJ zbv2dQ8#T^k$R5`_RYEXi^<dCvVsGa(p9RCR8LWEP^V^rIC$KI6<Xaw^Q<vOM?7TZp zsG8(uwb=-OFTZi$xi-y#h=bZTkPnHo{bP7L2EB|&Kkr<Zdy^cPG-Lb%b!UnaobQHJ z8`F{r@&wna+*xG!zWcuKQa!8*65voBYOFI+{>;Tn9$FA-?0fFrE7KKwcGAVAq}N(1 z#DhN%lT7@Y>kM^=JPR*BH=JA)YPn(Oc9KmM6w!~C0`8yuGmS0#mcYz3n_&GCn5@5d zP~SLVy?c$_M=Y9^Apk(LM5fxW*(&rjj1h2@gYhcf47EDdX)*sO<A&r@fWFG_#Trxu z8eHTSCZJ)S1}SE3d4}yEY<k6*8yY&**1gV2E6k_J68%x6i(NtH6)?Gl#Q5}$qP1_> zyH0h;JJ{d)n@f$_#}>N8<IY)&@GxnJ24fVfUZJhKmxHm(a&=rFy5m(sS8^jFEvTF4 zcP<wNh66If@uO%5ZV%V-m?-}`_oNHE4S*8}e~1^Ew%&jhla3>eP61sOrUex95g3}Q z65e>P_|~{*NM!O=&0j)JEAG7{qoj^z1-1?U95LcaVpWj<d-mpSxA?f)y4;7>zW)nk ztky2@Id_c4NKe)m<&pQlF3!!j&AHUS^YsPQ5;&JkFZBAp5G8NoZoEoT+aaw{n^iVi z*)YI0?3ppzgfDJDqnlHQn$eBWvHR4bW@!ROlze}qYs#NbL!`jB0&(yCuv1{Ycc~~u zlw-9sf@~qN1Uv&z>Fuo#Qzb{1uT5JcXHF97zdcIU6Y(~hXZ)*@jOTm<=AhW&jmrkW zTqe*!`0s6~@}R!lx2jWs6GIClZur#}<sAD-RC1tJrtFyP)IqiIpeMN#cO2CQnw%N6 z55V<>C?N2Q=iSXS#SZHqU=0s5>Uj-E%74)DcSRHNRa!<Q8C*a#+DJaS)Mh5G#9^QT zzPChb3l$DO1;|d9R@6prwR{X`4g8e!qHg8sQ*=l<=3~&4en?&u&r1QrcE-=BGbF~2 zvRu}Abz*c^BSpOU{<7Zqw(H4{K<e@ePc`uvXPIhWO;ST@x%l8WHbk>@mzVj06Cu61 z{Vh44&~;G<V-TBy3pz^5-d9%p^_fugQ&cYUAG5JMVg$Kv$br5fwtg`BMDCgHZjYfY zaJU|4*W0zoL>B5gP_=fA**6Z=z_&e{vfOcsg6lJyEHnt033UMJYaH0tXFXeREs#eU z55u8jcBYCSJg;bJ-H`<5)&>jnbcPtTjwo*#cUD8D)Pm9`QjO20Ww(57P}00+`3{7v zb?DXDd5z{Qm|F*lj=!i#U)n-)Jxh?e<ec!yJgF0Qfo#*AdFL>PE0I3Zd3XD&jTdXa zQ+}n)mzvu8>Uu-D%Sa}($V4%g{MB<N_An9{*NuvWIZkh?4774U>b%}Z6+*7HISns_ z>HlMZb0yB%k(66!X6t+0Rg8IoEj8cX^SuoMVu8OPi(2Y=Gw=Z2>M`F2beW7{msh3F zYwIV=IqF1Lq)?YPJPx;9?_RW?p;*pWcR0EezI4rBjm6OMW2iJuZlkXyT15Dj!Gt_i z)v7l#luSzoZqP^mh&acv8BF!-TXUdEKb;l#1KFcmO4e0nzSl%QOu)zI9$KhuVmQYt zeZlNM-2*a)ON`usDfRNrRwI|L?HtrCUEHuyF}5`X>P_(O>Izred>8kcG;{BxlqC@F zP%lntN%0m!KZ)n0!C2mJtFSWR7X?v^B0q&8ob8JjF#_a>t`Ya3OXj2NY`<&_r_NrH z;oMf$pgvj8b*|@&+SEDUB=!449s6&e?8XgbP8He?H>lQ)6+w^smE5aSlcqa&^Qq2v z7wwp<XnC6AO5@*b@{4~`py^`^`n;?&y&oe;sT7$p3=c)Mnh3#qq^xIXVCzfHtgKte zHD(*!Qr8MoS@jzv)4n+?evt!|Q~$`yt{~ROJ&+GupUv^GcVs%-4agDVjv%q>lYm`v z!6vP7dKSl*{I9<sxWVQLd&hYScmnQi<p2T6b6uz~>{UVk+RMyp2mYTgD7PU3?|VZE z$Uel5PTWDEFBXVyqW)-(ymOGjzU=wI^g_f>LcGQ2hxVZ=!%<my7iz|}RIkzvJ}w=( zuBg7}QIm>K)YOj~+sl(Kkq>G8x8Iww{W2Ndum_sGu;TI}6>Zk@H&HrctyO-*oYuz0 z-R^$*wwKe-adApzlw2{SrlIuUNr@odY)y-nDT)-KESI6~vs60%qUv0r^Y%|!29JzL z%!L8G-0i939*6VKNs)!`^6pe4?M7fgY$tHd{!kC@fCTZ9m#o%j8Q*9b7tfIm%-mUN zglEWr%i9!EPk-?*b(IMSmYL{A4lE$w=oU;s`%gXS`D!B9ucPS9|A#v#y2ATNp-q8( zj=wgEgB<syVbU@A+P8^o4aRR`-yKPwdA*17&1>XD@&$=UMYspzZ@M<rMo}4%Sf-Gb zoM&?n&j$2qOBc14kkvZFE{a^9-ixzS{r>v6bo0D%!=A}2;Cn)$F0r!*!%B)<sDJYe zDOBbs;;TQQBVDTHd}dr_e%5NvS~d<s|DZh4*-`M^d~eyM02S?*G#?ff_!B-mJLJAo z`OoGmC%K$_w_~waxrn>FF(GI0CU=+I$0$C5cu%$mCLi7hd8tC?Lg;YpH`=I|BJ@Yo zDDT9vRvh+LoEA>&ki1GdyjnzUg2ThF)95Q@28HCPe$`jXq`z<HZ}(nP6Zs%ej*1dt zoCpywC8u^_)h9RQYeQ{|XT{=vg)2WCU#6qnth5Sa2vM8bx5_e_md~7A{1K|!`7j}G zc;xIY3S^QBBs);gZ_ynK3iZjCU;Z%o{#^*MBakbVVyV8|<RLQ@b}5&6!#snx2^1+d zRp&jx)r$UlD}zJq%E9-rQ@~&jgo6|5z*0z39CbntY%w4%+ag?1Z=Lu4Tu<t0@iaDe z_x#+L!jyx*e8>CS+3%dTA~U7yl@-Oa>$5IXxh1!&XBPBF28DcG9K&T+PAqUm6}VVT zFU`;wH|`b$UzQO%e*HfB(?BBlj9q;PZIj6P)uvvGxL|KgWyr&d0lqYz&EZB--5GV2 z^|Vxc3&(gD_R@qh)F5C6_UyX4?jQLeu5C^g!XJtPX}h(2RS`bkE$Cl}I}urvAMbxt z*xjjMLU97eR?vJ*AQmDpq1I4*%I{~*!t<YjS0Tpa&+n7A71f7-o55L^sA)@f{&SCs zQ-xsxJtPO#`U@vjhW#Jo0Xi#%K?yu<@Vev9x*Y9s#|hto3L8swwR02`lo$6b()OaL z>vnwdpcy$D-x`fQlQJcYFs(i|86FgFX$d#{#ffhdmMJEBmg0ta;8qG+n!@F?Dnq}o zm!ILzi7$WSw?F91b?0qYRR=P;<jfO&0Nqy}@&5%>(z_7v`c@LdXPg3qm4k^R1ZDd} zLE;UL^4{qWOA>0Y@`e?eYYCzt2)8jn4iV=Zbm4zeedpfyRHdy@=^>3|qaw9PEfYM9 zan8d+BPzML8|vpF4-B4-MUOa2j2{L9t@j0Gx-eJC9;UGlyyKmMg<FHIQ8g8+nrmB2 zp+$HL|A)Dscp{4_Ohgl!H^?YIH1mKpSVl%*3#(a#O^|As_eN~IN8Kl@_ys6LdX~d> z<{qWqosd`lh4vq~pRCIB{%DCntlUKsLk;lUt!yd^JZsj`(fh$=WefU{6Qy7p|NinC z;FXOQkCtFHv9+@v#6i|8b=a6ynJPwY=-ZSvyH!y73gkhSKM~-HAcszfP{j@0V$=&2 z{#ngts47+<`KV0Rg9&{5x}ErQc<uwJXs2~u{)L@jO(RbpQxf;>wy?B6ExGN35>Loh zp#)Rj`9%+`Xv<i^q}KGuNPWe>F#wT|=C!C-zOB(O$-3Pl+|8KkoP+iLv4g&qMIQY9 zCzelXX1#@EhufpJoW0r>kH*4;7BR6>(GQ!_StVV7yFUh`i*_hMG{wN-Oo%9Mi_;+G zNeia6ak5-azVdm)<?r9-uYv&kY>;wd{TsP30m|Jm<s=RdJ_G$}xov9`4LnRyS4_w9 zZmuo9B@_7v5yw|AA~H$2j(<1qxi1VhPQhz_FDER@x+_0rK6?m2fvs^`63UBwVT!Zx zB0Kr*xsF-(Dr1E@y_&(7H2){{Yzt!>X?`KZh!j@tTehIl6CAARhF#~BT+n(B9XqqC zcE&zZ5AKSjNYFY^Q~Y*y{>EYbLo%$h?%-$j>jUQH560WzSG`LzLI&iEOAET)82NFW z@$vPd0gt*=9p8Ws`*YrbhuRxcAkKBQ%-mNm3TQr>1t0op-l#v+usb)<w;jmm?@hbw zh3wOQs3|Z{?c#ZIR?neY{R4y2dCQ+xVucs@pLys1S+4ShMG6Whb;b?zxn)c@$+r|4 zmkh9v&4;`X$2;r242su37kcFr7E}1yy?#t0LwvBtM+xEkElPC1Y(E2^#jFBj^EmQl z<ApS<SBxgz8j938fvh<2hTNLeGFg&=MO#Zmsbra6oY&>e^-Z<eL~=i%d%L)BQ;TL0 z0wT3;D%1EEg$@mlq(EOeKOtt&47Why%(D;HM%l;L0aU*YUyCe?KW6eO(Jv?avz?IU z0>rFtEV6BbDebH2+R=12ym(11eD5aZI!kA$pWHTzy|8O+UU*DY?9JZVp~2k^${Ack zm`KQ75dX-|w(E$Wu#yeV#Y^EmR6NlzRrDnNLfEsGpnqIA2^!Fq_z*js1HCw9N<)tl zz!wzJ@p8Ao=4AxQ<9B5kJzN-cb?u11s`;4hNN;csSc~~{)#PkMZb4M@DIj9%kDCRC z=C?oiIGYv~=X1U$(|_Trfvh8?2)voQVxOi5pGImq(~Q=~T^dnUdF%C=p0&d0^l9_+ zv49k@-5)03+jq#5uy76N-UE0(o-funD{a!REJ9Ybk1LQ+2lV3!Jp~j702wwt%e5F` z!dq`LU!>SA%!|`Hz6wIhvca9+<8rXZRtYK_%}nexA(y&)5nv+2!J$4S^MePFCm##^ zM+)L!Gk_P$<s@*+X}H`sbq?n#;Najwa(K_&RwPZKU9jD9IxaSw`FbwYKxikyhTapf zbWl94P6ApqjA+r}*{uhF9@SOpZq+BmVqgWFFD8t|Egi_Lg5ZXXFM5PYY6N0ZmTe-E zl#38t`;{$PbVVW3q=2YeP9}S-jm>&yxchXF@A%*3p~~`rSApjY8CrUfIFO?FW)Q;% z+Wu0dbtSi>kAm^(U**@FW7Qa#H0y+Ddn%y^m5Y}^SK;160|paUh&gdmXiP9!t4cOv zyXXcv>{^RFf29IQrPq%kH2~t`RA35G+57s!I6BZ#I%cs8V6L+I*digseAJVsh}|$C znhfp_7QN=pJgVKjHD}Tz&h^EWvR~;&ORrkFTty?8UU;2xe&KAg@7$Xx*GGuUGGidN zxMn#uyAjV?0Tsg<6O&Eo_HXFWXrNbvf%Z(ukALb<_EPdSg*Y%b<vvEbxmknbwU}zU zzhYmN)vV(7${(H#T<hzcixct`n*-Mg<>nR{3)KS)|HC`VEOJY4MM8h6Y=T+*f-8b? z*vOJ~rSd}`8@y3QL3u$XX}^bN(~(4F$zv{igmDs8re8fJZr6p_@MrdqSwgGX+864E z;x$9C*^scE_A#>QK_HCPdeuTBrwZZr=y7fIkM4o^9iP==;Nf6!y!0b6b7&WUdB1pC zfRt*7CN6d=oL_Hp;>Lt8p8vXD{^Pvjk>@bZUK39f|3!pG!hpl29*^wTt^cOXn+C{r zI_4M=3@&pXCbjrk8-%|I<D-$1^E5ghZK7$L4zbBra<4C)V>P^XZ*SHtw<6e%hbFy> z*gV3Fp~1M8YrDq0)BAU-8XA&z#54tRf#K84C<-I-eg+=MuvTS_HR8<=)Z%-jJ&MIa zUEYR*oP}j-$gX(`ueE}|z`^$>JU#dH#|aY^TiedqsTa=9lAMP&D4ab?FVLdPB#^>R zVi@n{n>9J1#`zQpYgm;#{;{9c%lIJ_6}G|9J7J+oOvmo@fX~x>^|97N89oq~Ulo<f z>_6ad^%;LGg)#n7nWspGuMXfBZWD}~#wzyNUAE=6DxdAne~J=Q;-Zc|f?)pRP8-@L zZ6rCZl<e9`&?j*s_vxN04`c*eJg_PVh#gIJqksD(=`P+6Mm7Lxo`l0#;dQ3~(<}oe z0ros)vu6+TF*pCp)RL`mrtD->qox|-BymD4-9c%0Yn#{IB~{oidbe^G`Fj~8Qb&&F z-d#5*!4sEzH%r~dO9CA^Y|m#KF>0Ma(#Wrgv06^}QWbxaJgTr;1?~T5&JxoudArM* zX7fn$*rtf%7SuX&fHk8vmReatE?2lerWo~!9g5}DqW;-3t{Z&m!pyMnPczT&=C>A9 z2_L89*IF-Ngciu5T4##kiMp79<EsL{qwbw|+U*^(5J_`tUu2?yaj=W-^+7AKJGB+| zbJ-wa{nayE`-xi1Eh)&Au*){9_4XHA;<^r#f37*_YY%)E-Th!^#eaS2eA^S#OXQ$A zJYR%)|FC(mr3BowVrPrVTlK4-v--h?l><A5*FB86wP9kAnqRhI!S&ZPw8VJ%=Dih< zBbGhsfBp{=r9=uyKywoR^zdayHGV-0Ru)6)z1uHAuRT&az7z@E8$mAn!2sl7yx!JM z!evrjA!Br{c)SUFd8=zIx^|cNyR~G;z7-eDu3$_&Nl1KkRnV4;zJ511XiMZ|;}P;V zg*!wO=2K}!_IXs_l(jWxXWxFQf0?-etav$e^er5;ztTr!z1KLo+%SdKDfbX`TIlm{ zGBf%%&lmcOM_4~BZFBuBfE)1X<vERicD(%#6IYGojEY=ADu6nRe=g|2>j9KLS#O!5 zo9bfmzB{(O#drlKir3dT9pWNVzFc8T{=$j9WRBF=SMimbh_EJbBu%kgiGcY5H@D2~ z9PHnpLpL=yTDby5xL+UY1&Q+vkTa-U8weh_|FP9X#pb@DwcCpeMrr?tx$g>VYVEp3 zQRyJP6A=)Vt`wz;ND~ni=}n|}5h4KsQF=!}Kv8-xA+!)`kS-v-X{ZUkC)5Zb`z-hQ zpa0^!IhWsgSoc}1ch33FGRBznJ({%r7tZD`+mfCV9icv@8`IUqSi@2Kx(FSbYNaP7 z%Pcg*NPxkIw+8AAy0g1lW@gqJvg1Q%%NZJzzfR=F|Lt8u$e9EKEGk4w1phN&!;pV= z+ncrJSxa(ljTa>seNT-qEF_C(bocNK!2+p2F|3ZUQ5@>oU$Lv7o3N!>!z141)wbv| zX8T}wo-UX}#`Q8VI=dNKw0SpP@CqMtiDtBa)f*$(;QRGC^(NESo-|j>>%!>78=p1P zdA9>IyF~!T;1z)+9u4Z5PRgBIvx{9i4Qmd&7RR5D3<&>Ql$d0Z9uh>upsY9*r7r6m z6V?D#XFJ8Llh1X?F*=iL<$($<(@>*?-2;F_)f4!MpdCqaDm68;m<ftmagPpLysI|c z44OYg=o0;N)>ZlNT|8dl1qmLi@~<7u9u?^_%{$t*+sy-o>F3ej$Q`IhWno02=jqO7 zr`*cNOud{(7<g^T523?KP}c(Gj<Pl`)8NH~vMyY^*p-#0Xk21tA7@u}Yj|bDy1dZT ze8b!W9+6Gk?&QJKNv}J~tVIC|H~$;Us-S*Og_{D5QxZ^h#hDEj%ny_yC*4ZXefO*| zlWz;ev+oP+hs|x5T~vj$cxM*N**fNRe#b~db6?&6<ED*W>$G74@^vPEAH<wnmZ%Jy znbdBm9-mW9(c8-bne0Cy+Yo<=!><U|P5Dz_V-v#cjK1su%b$L(3u#A}2rpG{LfDA= zo%#_Ht|!`Q{fo2OK90e`&p*9?E7NI+<{>GKL8(0aj%h0Qy!N={CU=&<u6#~3v?~1X z7lr@Ys6VJzVPqS;aB<7}X2#5!WaqO~5mcsM<iYi8s%pO+t~CBei;(VC0f3q<^QVa7 znXY3K<Mf(#x9b-Rx<;>b`1EJ2qnS1_0<BBKJeyfp<JGD~V*2midH7n_lXFP&<yECS z)0NLH({cd|>O751sDRply@cG1T~@kq4_R|5Qjh+`gX^AaLV`}ZvzeXAg41=spfotp zRdpAbu(!3@qm_$<@IQ7cx8e!S-AYdv!c-;a_Aa%N9GiAb02aWguiE9hVD6U5J+NH3 z94pst53W2;@r&Qy8d&<uts{Zl-gJ*7Q~rDK9x4Vm<ZNv>CjCR*?r_L$jZ4`CUq=Gk zc3}a#OOIpC^>5`0ZO56;RoHtmvbKcYuT1Q+x!M9+x({V{$+yxhCFX+lXs-6UpDof| zuj^{GzA`ttcWBHR-y&8>9PS)nZ`$?}iR(5CQSG_>RQ(FVnMXe>H1D^IxxJ&9*u6Ba zkI6dE?k!KA-b5%7tC#pq+5vXLSKUzra=5Nf_U*6Vx9;4d`8X>kAodZUCe7hsr^2dI z0CkQ9peB`Vv@k8fm?05TEUpS<=E=H(n)<lkF4NUq%Z({4X}`?0e8NGgfXa@tdMPox zW9qaBl{f3`S97=AY%udX<@?$9{*`$xQZ|z$PAn*%e65ubzw$o)`S_0c?Cb*vX?OaB z&lF3LcGB(iaMc@7=}{yTw|RZJtw4BSK)SRA{Ojj}IWMjhY9aEzNe+oh2Gz+guV*Si zM<d#lHgsQge+Kz8o&&ac`7Z&)0AR{70aqNqo$17(l9^!hr2T;;osMY`?$@&b`s&J> z7%`<T!#+14py8-~iyPPch+l7~xzb|slsJb=DaND`4RPgZGPmw((-+#`TZ!Clo}7`2 zA&X7R1&J9XVtb?OqAI0cneBOc6x?D{>e=@J@tOEj#egG;U)3T(o#{ZzTk-`Q46TRl z9`=@OO_<nO+n#C6Yz!|3Dz&=mL}V9l)~Ba*it2rydZKI-Qw?;d2~u4);eblWJnN*d zgyEBjErSU)e{l}aaF2QJ=j~lV_t_g47g&f+-Pt@t`HLOtGQIiw0{Q-Y3@l1@BcI#F zFF5`&Z%vC?2H+xqg_EVGe1i-uk^Y{CrOE?uYuNcUY~OF*$!o&g%xekkUSO5mqlavn zjBP_faANYPP{^Y|>fd3P(^Kzh991k3t>%GJI!^;gT+ax=@$*#1EcFW98b@>dB8HNg zRUZCBVcysX4ifJf9i(?OnQ45O(s6lb)}#=lb70;rTrGP?@rrX_-$QMU!_xBAy~z3N zK$e7HaJA+osH`T5%=%3~o7I)5{xqAL8gu{EH&Phw-~<%52)9_&PmjnTfTdWpU!}d1 zAMg<Bm!$a3{la8p9-a4Oo0oiizp#vloZ^IVMl~51bEoz1--xiMSHG>T9FxD8P3sa& z2apXU!`YI4Km6G*9JH;+m#ptOs_Cu9(V|@fvFJQDPfKy|DY0aD$Q7SilYCHa&&EYX zidk&K`a!bE(M+-bQ0#TJkzAV$BD0hTOtCFy!itGuatKD3Dl?^3GRJe-nGt#!^-(|L zy-pjpErDCL6NS^z`{0~D58sh)zU7qLOgQd~&9@1#7)~_T-^&Wb<d!AXSbHY6;bX4N z-xcf}-u0oY`GIPIV~uZObT<8AVpP-QN<_7tSD~x9`$cc|iVwnB3ZLHQsqIQvHZQ77 zWx{N60CtM$f$fOrQKLwWfJqwdAL&R3(3~Vs>%*930PP$(4;m-=1>w%zTsX~J5(iR$ zh7~`cq5GAY*VGRjH{E06C=TM@l7e6A!VIShC&g|#TNYp~<2#uRkC@`ncbcoS77U1H zxMs1&mlX;u7CKw3?_MjH9cBi0^Ymmc?XYUp;a3J%Q=xIwJQ=JtzvA$a-r^UE({`2$ zy}Z;%YGG(mWX7tPk=sMEdn7IG$4=4N5>ULqNel^wFI#Irb#wOP0j^wIZwIgopYfCA z2QQp|#YO!?(Zt{@+GEX3$nIXa+!p2-`)p#TupxPKRqUNr+CLPIsc(MvtHr0s9Am`N zh#wa9nR+oEt?5y@X{Hh@2l@L2H`}Wd@|sMqC(LtU!yjt$gc<R_U!+Zr5gP~=hMbt; zBjYOIzQYWg=<BG4sylM6VGeOmg?kRdRT?S-$((-C04?|<v5id91CFV@a1`o+b4#Rv zgm(E54W1`Hi&#ES)XtLE#ayfY&@+2tH(p)2){zlE1;-95{zLI>e0kh+SI|tPE@kgw zZ&}9V{|B|qL1JuEaj0)Og2@s>rWP6hnIf*Wx-c9Kaw6QA5{+2`22%IW0a(OZWP}?2 zA&fZa*GAuB2b2M-`F4xG^*qMksxqghR;f>P+pY;3ZPbpp`n@zV-P<XcSR0=*Qh1}m zx34|-e4s453*ZW*nin-!I1jDS<|GGEl*n$)1Zf-8x7K=#z<=t=KE0wKL?8Nxr`8gf zLTv5mb!A;cR*%5pvPxnbuL8$?p##z1FaL;jDm~h<e3wtCIU=c-&p_<jr%!iN@_&rl z*v#}_8EXr4UHbOwWXHO#z?B12pXyZdOGmh_Ib0MtxRy9d%0E0Pvw2||pz#<1c8W3| zXnnbuRJBZLEmTaLS!8iJ&a?1hj5M8KmW;4!@AX+eg2z+gq&nQJUiU1tKXd+v0&{XA zV}7l6-28Xq=d-sq{d^|1qegOKXC8`kqAjVf;|pUbde8P1dqN407vZBu*V~ZkFB+;7 zj1-L5ll4Gg6LB`O5`#shSZ~wHR7xepaaw2e+9WvePf-G;T;GRln)+k+U%_W6xynGS z!NS>>DiiG(lO*9diRZ@_8^>dI_cs0Pim~P(#uhiV7?WqnNneXhCd=^{x@PW~;E}~o z4zE;Sy@B1{xryK=q(`AST?CXSafBUo2H22|0e$*??u!05kMrN%PKo@a3x-Kd5g!CH zm;r3I+?D{<^ft*5`_;-$->TlQuAGXiUpOwtdzVwLRnur30SDg{2)xf>I_C09_#I?6 zKe7E&Vh7yFN{c-6H0G9+h-tD}KI&oMk8O5Ng0N9pE@IXKvu>W+z3-n^HKQxscfL%k z$21@}K(y;l7sH>Eba5Ux7Bt3l>o}jcGxTLnQGAV9d@k)h;$s;Z8hm%b%@5-am?h$H zm}wJ5=V4bSn>(7Ba8>$y&r**YfW!vjc1|LF_ZWX$68kTI)zW_mlGO!$;Zj~~dbRs} z_H_dj@hQydABsO%Y$EAuHu<iVU#Axzk<)A{`ynxi|KkUbtbHFRXOARm-)FR+EK}Nm zA|S6!59T3I>Q&rQhVtnaCiKoF(Nd{>NK#WoX#%QOJ4hv)I<v<$ovX@$>1RJyxPs}6 z;M2?=mGc7xG2_w0OxoXYcs?rq`9wkE&F;*nlcpW~T>v8-0<QGwZsXW<Z*c)*5!8?u zdtK@EHw6wmrK2>mW=q#H4w<MRF*DuPe6>^V`Dr&L*;a2w2q+leUhk}?r-qk_tqqFx zfG8_=9w{P=Vg+*f5^CY|$xff{`DBjyD^IQvzv68)&AeLfUx@(ge5$+UR#3;HGyj29 zDK_U^)>L>@|E1W<X5q159Wr_?LnE2_s^{zA_dG~VL$@=d3EViw=*&Jzc?<M5#>kZH zsixRy8QC@HP$wZ|&`>`nG>N1EQ%h{av%GHl59u&8Q*m*Zfv&0w!a6Q5o>>`KR<UfN zB&#%RU2b`c7ZWv7$*G{uVbB6FA<fnzNJZ?nC{+}IToY)PS;R*H>W~Fx?zPvgv@!eH z(Wh&jbG$vqPB{M7uXP#zXG-(tyd{Lyw-+zDg96st{x{~p{*5`nz$2T@d0u>U*Hc-# zn&JA;I_AOXjqW!kaXK%qjHdTutsK~m$H<s{+%cU$<$!~92pIHzh2??T-j}OnIoGny z^ka<mSDzr*&4{u2yW%whF*){Gw<p;<pmzxD^R;;c0ls?rpw8-+a>sut+{E{_5;_BK zd}rfhJ&E^Lg!M)vin0w+_=voD`UpGvj9)3c^h^GUUQe}yk9K8EqzI}Wk~7}}x-cXO z`A<n#8sh_MJh>6lKytoz4Eu*7OMvSiigud6Ue>k<1Cit#3G5NEc(RJD)#l}{kpAzO zotN?15}zy&y8(2P@h%xN6nN9qp1IFoCgieO4_4p_6OrB>MvK&ZS=(0Mnz1Y9Vyul! z|M8h=F{o??c7xrs0e005Ro}+!doH9g0!JW<t6g@zBqihME?s<bp+jEReafH<7IT;A z)iq_!gI|l>Ro1}KMWF#*f%F09-c4Pqu_jm~S=@kgeaz}SV#%NxmAT_3Ua3lAm83Bw zUUdU>3I8@={;Q7|T~{#A7;<Y+amgHoYKr;sqmSXIp0K;syX6RhR2o2UDIl9}UCm~j z2qR{!ps)U#-@x?7+QJz5Idw7!p1$X!n%rQAKhw-vUEW8CCwVP4IGavjfKKehSx%c% z#UMfS7U~6n1_NgA;tFXiv~DLUc)fk^B>Xk3Bav`&&S7vh*axU*PGhzfBNO#2+6aEg z4YI~r(OoQYgN$x1{?0LmfiQKxn|`ir*jY5AE$k`X-yw2|dF$KMIV3WQ6=xC-mbz+2 zy!!w-d3bKUsW;<R`=+|}Tk<)+zxSJfrYDiI-F*5znKfQWC!uGr%a3=ZAuu{db4_<5 zjaC;UGxN>FW6??gsP@IwM|Zic1L?Rt3LMtWuHF(NTtVHgFLp+qf+zE<jk0b;Rc%tz zo2b|=N>R1DT%y4aGCrpj55)Aa^ipz*dU%ti@cS;oO8B7OP!g}(H54#BG04J9Q7<LX zsJ_r$+%t^i0<_G`^BQ1r7|q=_{OR7~v4Ui=t*_-G3C`_vjFQ+J>WRDWE$|2c$r}z@ z+B+4`x<*<94E*pvzSWj015wEe9~q@=NEHPx-vRI1)k2WG@MW~}$TJSdvlhQyvB|9v zVr~&JY}PsW8a^K0N-oXsyCr}3p1L<%H1fOMXv7t<6k-q-!2yZI*`x0hj=yqznyO#0 zAFn(5sAD%g|5jbK_~5v5rXxVBAxoYh(2VG`^GyF}jxpDCyZ<Q)cPH8MleKPIv!d9S zCcI4~LT+Zqz<AvE{Nd)o0B9p^^vAPn-{~5RZDLw@v8F9bC9<ka<B|@}+$>^x)RzVu zJa}m+Gf?<cIUTgX`pDMln{n_x+x;RGZP}fI_+Qpn7B7(85P9f#24PvUQ*!)1&#DRJ zYV4LC-27B$TkuXet*3ow++(Vr_c!K?{^M&MaS`>FR5&g1$N8|O9jC6ecNk<r@~`1F zc8mzOPm?i7$~yH><@vPl;pCydhJI>HufLZ_GxIOSRJ9>=FyTr(!KT|9REOut&olkC z5!x5BXOXZdoyOKHcsJ|&5`X!GvJDpgVz;wXkt%Y>{q=}=<@QQLvf1MwRWm;ln6FCS z-Df;n7&Rq}j)+4wTs*wWdim<BEDQT$UNR<_<h%;>F{1j=a$Q@1W5oL(idTRAYKg>L zG+YEV1!&o|(A!N;5tSZ7G`>}uEOms;V#m%C?x!$Xfb-mkz5`LPA|ytWBtVhKnYjya zxL1bN!-)nVAB)RzsSaxLOfYPv37HL+*tT8+2|WPv%fwNDRIS##aA>Bi{%80fir%ep zG~<RslW1qF!jnlJ<JS7L75n68e!Ao&!C9a4MRk%J5+Oo}foyfm-<bqwUtTvxU#p$E z9%eu}BpB$QZ}omZ*g-4?)&Vde$n5y}#&TDJ#T=x~yuqz+$>m*+TBiV>sZ`~3+5$hU zIpGVU(R6_$n_b^pTF%Y#zJ3z8lDVv;%dZ-+SyHL}m>7svQj$fbKOB>Ce9^tuP!qlU z_Nne`;|2gbqRN4+9+&+M<z9@X8+7Dd-!<}ZUwpuBFeLn%ik^mjD`%N9#(b50!@?jC zztnA<mZUswxS`;!$wFV-{BV&%MOSXA53klc!v=~oKV7PF875B`|A!mR5^WcmSRiUR z^#%e}j2wtnT{T5k*BiXbOi7ccbZ2PJUoAXP#e0FxH^{_z#KQr<@qUZPVcX=mdgx7Z zjnhp7_XxQ)MdQ$=Y!FFj<fx6``Qy5xYUr1oI<qM|*)=|VP~^&dD<i*<RWmU!V?LK5 zPEjQxQ!X<n!O`E|UpP9p3Ue_|dxX`hkbP)NfOS+Z=$(pzc}*?axBg7l+o~h^cKl5A zg-G*=z4k1YdSse6R)xhtLeCvgHyHdd0!2pRwR)eAlLS=~%JWncB=#IFbbeiLo=N%q zyPnUJVn=OvIu97%;k+VLB?#JGY8<WsYVk+|dec7eMPd0K{o0+nFm6>dHt-M9Z3GEm zVSr$xfU@Em06Yd&w6T&n2s>?&h*huXfa7|W>%C9Clw-fat|*g_4qMp|>T3&0hT|;? zev1-J4{IC891kSm$Ryvg7r%d<ABtXE%-A_fyts++YX70kfW3Ek;_tzb***9(LXNln zK$w<oIa!zFHX#(J&69UNNx{^SX%>8A6yBndYvtnCd(N?VGv)o;+z?q@cXM9s(n zZ2YA}4^<HPMni+IT>;c-tO&mlmWvvV|5QIcU1g!k=KO1c_r`e2`FL-@QGnPWSpni> zOnCYg+p44v;6(=7cEFz&)IUyb)=zW0hcLZSJgH>;fA|TSD1zNF>EuyuE#5*+E5<Jz z*Co@<#LrZ+b#j1`4PGlABQz1R#8@}npip;O@GZP!sux`0S4PKfhi=%DzP5lSnZ0C9 zN2n0KI9h0$q_G6!#&j}8$r+i#x2K-OLSDWJi#uhqPMwA-jvi&+BSxHcxi|^rmThY7 z_1As;k<=p?BWu;IF3NoBSK0Aj&JzBe6G;(~P6e*2ckuk#(Nk1o0;?-=eq8$npEb{r z?&szW3sD_R(b;UWut<ytz&&vp;cb0s)<BVTV)tWdoO}xKN97Yeum)U^;tq`5#KC&n z8?!kL`f>k=DcvXSOH}0Fq1MHk{t8`coRD?k&kmU67g_2t#MoHQy3#)^adM!rjXZJV z-B|zuy#jVD)7efNam5A7IIRpWq5B0jD*ml&$A2`dAILvE%r|iNN}|*K2XEO<FIcz# zoy*w~2iFqYPq%)Dcp7*3T;=!s<B>SczQhw5MY@Y$Sfuw;Wz6W8(0*1EbB|{(eJBGv zLMddIJdg~d%`Jw?g<_`w#a<T8AZV6k<Ai%|>w@?G9QX2bap7RmY}Zr8nB`zGNY-A5 zDs{_b-GCgr%_N5Un%(<h;h0dhlS%*K8M0dTpD^Mh*mocV^HpFGQ2ScKYBXbMk@MYQ z6?nUzjwikM0MF;xZ^^;lNeQzVCtC_>dOFrPsT+=(QUW_OTnSo%xPSA-maP7T&OrjA z+dMLgA!=efr&eC-T|d3_AN$&(-E39=9ZS(jsEi$9xMyCJz!@d!bpt;a2dE;B*+m#$ z{iFSJ=?__M%jWWKQ42B1X>DGG7!p{14<UTtEh?`eS@vzvq^6&&NjR*-j^Nf6kOh|t zIn=)(YoWAJ@j7r#)ji?{Mz?dyBo1klU_8$<<utL~qTpf2UjSF0N|sKOrPj4qIz2+z z5WywH>=&btvSh|~#J!{o1*VpM>VAsb?KM)JKbjl`4g>%@kBQMGGC8MVem~DQfMZ0C zk1<)sxHoHOg(1`IgtXlmlU6*U6LiH&!-X+dTA{pnky^q8HSm4i0BezT5s%KqpW))H zLHNPR(XqY5XoRGAQT9(}UB2q;{VEDnLU@F2UduQR6$>>i+-l;CY+)$+J-3O;(3eRg zRP*U_aSsbkH725<KqZl55~j8XjFXpAr8)+Ea8J-O)9z61BA0ae>iHg2Jo`|m^WY_W ze^;MInb3sB!9b6{QyP;{A}esmeIT>D2H&=QEw^->0@b_OkhV4G{wVN#o8E-82tv7S zL*qpJ3g5(pS<5;<EoWG=40OClSb+4d*}UxdNf1)pd7YEA?s62nWaUL>Zlm7f8HpU0 z=cuuas*Rs{`OW0xZ?|j#FrALqwGomS{oR}-p`@>GE;(h-PkA<0Lfxt-TNDA!k<K!Q zwtYAb^{FI7gDqP;tnCRUaT@Jhy8y@?kGs~p*g-eGcqH52?wSAaox6PE@5`qWi#i`p zs48sS!a46aBrtHVR444Y#0{>Ix~^=tKb&SQGqr$v5IajYP856$78e-5ml<O$g-;~* z#;3`D5RZsb7sfr5^>Qud^#hBXF}1&c56EWO2?xJ?`dainWZ5MDxwRBdjg$0vQrW8# z=<hHc#&cKr`X$`*l;gOcG)L(j!Txdq3d6u~Mp!<eg|t9=+XQ-lIvor4y0Vc>%<EX# zhCA@ixH8XqB`?}h{?r&vga^a}-<`dK<Sj&IH;B@x6_=nD{@MCSOOpk3wupRV!v%&* zb<R_aLq+j83#A|ptA>QBF_rs~rzo|%Az3Z-XA@0So#%J4e(``Bc%+vXLr=NzR7M!f zaB7ng%AdYD(8C^-8JNo64z(g!qp+C@x{)0iC?{s999nO@@#a^&uJLOFp)+K6P&3fJ zJHOZ>2uP8k0Dmq+a}cPyKa+*5%-sT>Ci-8iMkV7gbckC*QGGWV!_s(%7y(73{r?YQ z_}@~q8ft+J0(E1QHnIe(^#<ex>t(K$GlnsTFg(L6yjNCObQX>6RD6r^CmvY-7*kp* zGK-cg&m#tEj|w-XXpf6;Tko{=4Ymj>_Z;2ZGXG?xIS%JE^3ZvZ?d7c5_!T4*C-bW9 zNwVvle^x$0t;3pW>?mzwOy%}w|EbRE`0L-t(U}X^?Vl=8QT?1-cSDaH=~?+`R!@p^ zAq%%@ylHGhjNaQO9m)l?$e$S#YjJI?kZ>rwf6hjLYI^W#KoF9~--<#!7&rh(fDyl+ zE^$jBI{0K>7++dv;s2!LUc$~-M(?w1cmP#<AISoYwYa5hjd?k$>vE|+1*0pN{K$TI zPlK^l(In@&wVwmt>HE82A^o=t55uJ<NfQEgpC<uh6cXk4->{0v#qNM!OjH~(XgsNH zY^za%SBga4?eNL|l%=hjTB`YSQg%z<cyLFKnkCTj_8@NpjWK;O{u&R;vN%R=NAw|q zF<u^dxrO;>O*==a((MYyciH0AXU*TwZ!=LqwSjR&!X7x*i%DO+S1;*>8Mkx-SCz5G zEPv!!^X<RQV*t+VE=jtd2jLfwKvWFgq1o+uAsnN!4U<AV1~j;;Re>~ZWEi*x4;M(U z^N5fI_E*HnO3W4~nt$R2tLyZpx#@AaAjWnEWJx*Iii=rl0pn*n&`QZPP`yI<Pkemo zZJp7k#N8Dg9MX4zX5HK`f-2I(cfeuv9h-bybJB<VO10CXQ+2+XcY1Zkan)n+Yqhme z%zV<<9;tuBQ$0oj?aRY0{rjFA{d3n?f1a>xgMzj1JE|^Eda<MmfF@8I3z!&*g299f zXF4-v1Vj7Wcm~d%*u7XDq}Pe@sLVZ%K6<B<lkiI{icZ>yC64s%Tkw_E8zqpC^Ex=y ziwPE~`*4YZZ`#>tBRxApHzYU=AQCHU=KtQ}Fz*fDk&w#Mi?U6-F<a6pq}Hs`x~0^e z*2XK&7<r={LG;v2d5Ma+Kr8*TLdS|2y9-7H;g{T)@;jh<>|y4`s;<A9>r^1OO)1U6 z+7@FK;6cfyr<3sfrkVz;n$Bz3@VDg4L>nxKa&FKMJ9yJ#?s2oZ$(NN^ZF85SzgNZ# zbe^iDRfEegE@^LE{WMtTw6C)0k`Ea5U7s6?j>7@@0=<nz?PjEjsff_$&iA|^OInoW z75GvcJ<-sR06NCaY$(WYrn~E^-^lw)VG{SoDnhv>&_r`Fo6UtRgCERl&i@kJ32t`E z_-e}jx`6q}&;q#>EHgzG+617&M^;qd-)?Xin?K>$lRfFzO)b3i{+^0-;JY%=uk636 zkrO`h{M3sq1Bmk0o)5?GDl53o3#aQejZvq*%2G(#v6wP`!N*(|7dqDZHs)Z^X>s8L zxb14D*Nc&*wDX0ZpQ8C+7$4bFU1^$g>&%dBW@u3yN_Bv-H+x1)3YxJqRms6MO<Iwt z3Gqq^sq4D%N+IXM_&<zs((1?8vpp`o8_}c}tG_vN{pNPgE7~=ZN4X0|IKVg;ZYEs+ z-1?>)>X~u(7c(G`&T%W<oe6S+xB>ME)L@BUqf=3C#>)D4m!p6Fg`79Ep~&|8*QzQp z4PLS2>r*W%*sq3Ih{wv5934@1%g6hKdF38GY&ZbhRvrA;69xfKI0ihS*7pM;W*Fyg zjEN}4#-7!W(+|>d+l6(AP~JC1lMPmE9`rWkNK&}Jz3^jDwGqJw;q9EiSDi53)f6yS z@Tg9|HEBt-l)ium7S_U<12NDD5_&kkR9~HP<7J<ZpwOji<t#Ccha+|Hi$5{W0pQAP zcgw~Yj37^%%G1j(&y6Hx&-5&|W*V+NYHGPT&B9p2ZdIP0!&NSoS?qjiDHm}odx<jy zdJAhMQz=v20IN|=bdPbY0b?igsa9wqq-yKR0_jV>vd9B+Y$?=*059LN7HGrIrxxlf zmwI{m#@W**^!4q}G-V7CcCvc_AewpjZY|D$k(Zj?K7Bjt(Pu_QM^Is4ddP5ePYS9h zw%{KM7cslw&-+}NL2nkXx&`Mn{Y#{CYe;tU|JW<+d8e}ARS1)vrCPY^RfuQ@X6?8q zHm`znNrby7S)E&Lj{d1wnHQ7u9^yv*sYAZ&dY1V-S7Zh!SI=&%m~l*LP%*}p$#uF) z`>y#<Nx?Z13&jK5y%5(q@6&}CUl0Sa@;O4H@{91XAa0_P`?)8J{OeIF<rP2A8S<Py zeyi79E%DIhNS|UhD2p32*G1U&_)a;#-qBPBbh4ZF5`+o$*?{aFK!8p=PziPA<TUBL zb~D9sbQ-N>3_6zT1-655lYmP&7|<AqGfE7pfohT`rt%03L*cMujWPp<f%5(oZE4!x z0bcn}N|ENrW&hn?>%YHVd$i;B6i-f9Ev%U9c5$E{7!dr<z6?LpgQ{92id(vhsIBGH z-6Q)WUgD>tWD#sGS2r`*w@uRSthpzhCUgm?3#7s|y)lu|M|OnEP=);U;}dBOC-#+{ z?Gr6QYQH2SqlfaVs%9#hKEcYwQonp+7sR9k&C^KWsQO438-@G)=(@&U=&;ZMJm|(W zK*wRL)AO(~!_U>Bq?>2@yh>&$<tj>kL56~;D>u3F>%*^ybKFaMSa$RKvwIY@$t^c* zxBx<&9swZSkmMF`f&(v<>XJX#Qa=g1%%xgzVJZ(0-+(@=8LzBFf+C)EJ6tjl-V<5> z{@{LbHVA5dCKxe;4R}QRT3&CmgFe8d4&v__8F|=VYQI2d8n)7?>e$|_mf-fVrMbI} zzl8xC|I|u#m+V$v^0}bgiSzT-gq&|5%(E^M5m+g{Szar;XKEf4*)_9Tb{{{ii?!x8 z4o6vE|JpInnQd5C?V*L&XJ~EBLwCw1_g9y#p`=cYP2!b(=c({QZs?oUF-n6SvbD7h zcd3%ln^ZT^k;Fh_(J*CiwK%WDNM)bJK3^9v4@@9Ligs4Rk7sB0{&PTPjk@xnGmCpv zS?*F55%#!tJTDccIP>VL%+Wn~z=2wvBD%T2)tcjLCl9^i&Oa2{N_0+wI$fr-6#-Xi zNLyckMrAa?iyZwL&^vuomX^(ezA<ZUL#GxYKMcMU&G5rwwAJDjm;qQBW&3A32w!VN zc!!j)^<UCwt~1CGMj{WO-QO7+Kb+#4Pgh#}mi8DS979TpEUt7Ot84wyFI$rBD%pH2 zZ={}Sk<=zU$7biPfA1~of!&SNSZEM7A*Q>wy0+kC(P#aeZ@C22uN3Ar>|KUr8xvG> z%XKiCtwqr;{wk@hzni5b`eL*m;#5A<rK)vX2L~$|_yv{BInOgq$Vt&|)YO@nx7_ii zn@m$_6e1w>>+$K~o?vIF#+B$obRIEFX$55?z5HgT`rA^gZ)zsa%$kYOwWj9{0rR*& zsDnkUOBTdWdQmsB{i>R1!Sq`wL@suqiMetlpUZmUTmxs*^{cQZ0+^4-H>q^ZTQwvf zLdV_@QJi$7m}i*8qHk`QAE!8#60fdfe5`srE63LFn|@e}InF@9{5^_)8~6t)8y{B* zCY#y6DvP-<oMNpWbfybcK{iPj&Yh1?3Al3<+mcK}tz#Dv-0Rlz;|wQ}QcKP6`70Z4 z6SB1oe^kcAEGt{!;tll)s*$<Qicfe_R}0w=nk}t93)Lq`gnA3|efvW39bgaR{JN&` z5#@#J8Cub*%{YEdJ;2<*N{13-U!8*b3-CMhi39_khS2UTjszfwY}oho-O&<B%>f!) z#=TlpC6!xG#<vffsm1GNOg%iVStWJSUVbU?o-x(6#iBdwCZQ;nAZiiYVa*U}9oFtH z+;DK|Nw(P4u#>F}fa^xbiJLxW=>|Z_SR+}lXd70~x@L<^F>H8UngVn5D`%;ff`-;8 z{Jzy|7?sO7B;yKda>XPt%5=F$ubPfXZ=z`pUTTXAX22VrnQoqj_64^E&tvWi6`#$8 zYc3|n2h$M}3Nqe(fe9<@^H;0;F-QFf;w+Kdcxh}93ogL#g&%o1>ijIXb(83e<Ky^M zSbb{DOGNK!;`yheTU?4Y3dNcISEuF|hp;-l&yvd&lD$9l%JmZO;#&8j5x!dnED*^p z?a`y3y>|YxdCs193c|eW?B0f2M`QP>A%2~;gYuzy8>hbG^g72Q;tr8mi^+DV6MDiI zSfgY*oVSs*iCTJr+J}R<KJAL~or?ibq5tbyuK#+L3qcI$p3zbz)yZpDszLjs?|5{T z`dby>DJwUryo%_BfNWV4<bGyJ;>VqNpz>es)bAxZd}^~9klR2;0yrxU=Paf%#zLGJ zaeK!Hsb^n{$}3sUI1qzj46%pP7jHC7yfz%umC&(Svu-WeG!8&#dcle;yTJ}`KHxI$ zrh-+vE%F+6#JUxW%9k>obZSR|SWtaf`hw<&M)HSWQl1%YfjXmi3yj@+{u;3t28xqY zVFD^8G=XJ9+k=FE!aCr&nN!*aGT*8@=WL(9j~rKidCHL)DDqQRR)LeF#DTKPJt438 zvDjK0BXJ35mGy08eSt9-UCsK_u30ZU%;1ZKRGn|>kykW~)nmJFGMLLkq$1&Ciri)m zhu_Nwu*F9&QCafD=92bfIpRCtgZnhcC3`RHG*sN?Z&mh3nf;)>qARy-zP7^zlqq_x zfwnMkK;M+!J>@P^ANwyN9Zo8u#g872oqM1!u5qXR`lnQ?QbQ{+dp~eBbe*92W3?l- z$EJ-Yj`UV)BIefiUqTbMSL(AUG-g`uNjk(RC{6B0vXx7GiCa@#$ozsq-Nz*1Oni3$ zqmq#tEir^CN)Lwphk}>*$mKM(reNO%^WGv1(sxZKEYVsO2?&MU_>yBPkq~X`Ve42> z6*Dg#n=-Lz9PTgLH3;kG5$&S8f=>+3BV6j$_mbvht`i#M=Q}+$HXw-`#KI2sOaSex z@E7B%B2fLt7=Pb|2>D$!G+IV)l#JxH3*DtY7aK=&&O;KPk5nR*ZHqG%o@ecA>peW{ zdT#shJ&e*S{BQT?zx$YchFU~EZX!5+kbvqf%g2hWv_p2O_w5^)gO}xl241&b_6?Hp zAcc=tbb$_jK4^xCzi!#Xe&f+k?;7SaC)!?1d}3NL4}s&aCv5*|@AxntZh1Cc`rO)L z>4);)O&pxVIJL{`Rc=)_zq?)h9fWb5+R+8KuBZG%VMR^4jcVVcfh1}fun>#8j;GeT zGiK4Y$b+h+yu{=?OYhVyy{)`D^*LXT*2O>A>X-yGXgqIdOI9+G;tRIB$i{ME2QU;| zMs`o{2vh^^au=d!JrUgNFZ>YKG2`p5)>93APAEF-QstYd^8f+w62owu>mgDR3@)W^ zZh!JE$n7_Y(jl;j2<kjmEFC;YhFu*V3I;!5+7t_@fm(=6ShGzPjQbof*L=yDnf^&V z<4wdh8iWF%f5Y!Qvh#d(RcSO5c6Xjs=O!&<6!z{7ZLi6t61)sXD!^(qb2AoZGsKTu z#%}f_J*Bcy4o08(-Wm>w%54Htg9Is!wrSEWaUSuHz2!5*mv>V1Pn6f~&Da#G#S(j3 z;D>4;fE0;{EFiQ+!hNNf04f=Lk&{jV<G`;dkbMp_Kg`tDnU(`Z2gnzT%S*2ZJW&v^ zh#oMIP0q1tuDeW0MJ%t&1E^{^R6+q>7Q?nxFy~rrH6ZTAP!PDv^(3Ti3fP(BEYeGg z5&%%3-ycsA#lV$r<lBVw7_gPVp7uD>(6v4d<!Y?4A|&Vz>Hw;{{Xx~<M-%9Kkk4)- znAy#b=H@WRUf;5nR~WrIfOb0mWVIRYqdg+&+t-6C-ax#%`lrn$TK@8hu(###_Y_vB zY!ye`a521l%<L{$z5}NYAbPnf$uW43cQd%iNC_l@j%c7>2e7`*V!yZ}0nt&+sAy7V zYHFg<9X_6o!(qxT0d}GkD6B<+BipBRz(bgI(EF|?m%sXgC~eo0ib{CEjZnMu^xO?h zu=<%u-5aNA*Kl%bK*`oLlT)s%g3RSR8Xm$iT=w?2gn)i7d-ZwFfgPppq5-?oHn+3K z+pwkT!!pI<grm0TjJ<H*LAv(S)vpX$)gC2QRtufgEcbq`{h1z_0C<)@XM9=QW4TkN zlF^dY&Kc2;m@IX#CAGP^`erLNt<jvC1QoTX<4biId2#7$PXZ}qtYJmw&KSSmh|ta| z%*>!<yx8VPOj+I)R?U^W7fAMZgV{HIO|qbRH3YddQ~{*8JtGKR8t8E8*hHRHZ-pD1 zn(tmNaKSh(7(5KUjYmZzNP*>$liqjFO<nJPmk@VP(+31SW6?VQP$*|?LuvB2-Zkw- zBNMN7I(W&K%Bnu$Ncj??%@=sZG;iO3$10P3+4?TA5y(#6N;g;_PR5hT_pnJK<2iHj z1EYiXYC9LiO7#pP=fwj<R5jhKnO3Y&-!r9*M#&t`_2#4-4C>Hnh((3#e)H{YsC4CN z%s%2nfMci+Hd-ni{*8Psd2?~I=10syY@!^BO2uUX<h#J6jz4*hZb8<D8irpOchZ@3 zvdAS@XwCU#O>SP@lM(!AdmP_6pKXek9aX~$;}dH0{-B??)g{mBo{#lEki!Yw7*o9o z)r~d47stqoserU%Aj=bAE=i5paGPC8AEHSKr0vlZSl_LaBf|q8CIA|jx{l5;P7TX$ zrst52lT=DLnjN)t>Neoe1Dek>uA`;{B^UhJ47_MPlO}63L#F^JnzJylDvJt8frvE5 zs=Qm~Yw>7_SxA;X<+D-Qo3gO&BhEhLYRV8JHEA%=h<ycpvu+d&ipPi`qF-Q~(;p}6 z%k$<GDKs7g2jv{S$uY^9bv}JE1;0F%X)A(Obzc5JYqzciNB|3G_&y`nEOZv#%~6Lx zPE$3zB2E9Co1L0`LC`%|ZsU_l0`VJE9ROn-on>E!1dm&e%ax{Wdu7@M>LuP1daW+> zHd~yh6<^%mwD&<3WKG_jI_nMy+Y5Xv^3_!t{;PqCl(B{8Sx*n<!^<ZXx*D*~&vZdo zV|UXX#l4A0-wBgYQ&M1{n~#^zVm7mt9(^KrR{ywkA2O;x&{!%FeZ$R$Sy{#h3!^83 zy53Ds@9@ONHbCp5#L9PvNmtNGankV`-|FwnZeq#uwZ$F7%&9IcLY|j)K=W7ApWgx< z4};x_c3SvJbi4<!Vss_pv+U}F*MZI>`An7x$Sz{WfW|l=1t(G$7^vs*4rlSfx4yq@ z%=`~avOQ(V!NtYX>9SEv?QVWCi{`p9IU8DSFI8mTd{CvB|BUObVDu8?;8$u20{Ld1 z6~7nP;y}>q?VeW|T^y~bgIFukF-w2?Vo{#V^ym9w<(}3kvQJfbQxRwu#<#}&Vo)7Y z^2ca<uck}>d3HhhjTkbor4y(Q((&3c+Z8kF6JUsEMO@oDvsV(As@m<<;hjq|*+dia z-{5Gzp-MTk<&nG9lpR&!I9@P`jE&ctAF_>%xGxh&Ms6Jbckl0if8E=LO%2P89?Kb3 z28+}g^TbLg=tV!$sSLf(sDqg$SW5uFjbdzs@@MkxC-rIvyK>F$u<VZ3MC?mz#<7Y@ zlG@^Zc%_8<BOgnBuRBBh%d;1pF0E99_A7V)4jRO|m7f!+y4Jc+5fNy1qV@EP#+o2Z z_)6bzdY^kks{0|3qY8aioK3fd&Ym1UtiwEr9B=C_f!r9k7x29yg?{*j(QQGte9Ob+ zN!^6FJqu>;VQuF%vhXWvwWM;R%jXmCj1@Qyod!bWQ>&+G@4!-_dvKB((V${pwX^`T zx$qzjP{uY6s9?^OAh#<U_r3=-&pO-9S1R-EaDlL^kP!dmDH@T9*A1!WS{V7fEX6E; zgx|kNxJ9xA5kLh8yvz3INW&C0g4KS@&Y1T8+;1Qot@^3nBd%SkF8)1$HDJ{C39f13 zfZv=omM*M;{zGvb9+2K?!(&M-;yqJw(@obVFn(T7uYdaX3gMHl%IJHw)OQoW9wU>n zV17vF%OIt046;6@!lggUYQS3C<92y`r;FVIQz!flM>Z{)!=I38gEO0y7+JQMbu&Jr zAu$A9SlrqXeTH8tnCE9^5LB3%p?*M9BPv5`*xBbZ9{f9<vU%p_P}S&$3mJLT1628b zj;iiwc5(;H3v6hiEk%iW<e~wssXA8gUY1TJlA|kGlWRHrfU3CF*P4NtxMV8FFR*}9 zi}0wZK>8(!sXT5!(OlJ0edOI*-MnQzuIZDd(mZl)glD0<h`GQ<r#|`1FL67V{!bmu zy)A17g$_jckL?V<ZmQ}!&w9d^@rv8HDhnVxh98`00)5!qL5ej;nQyMHiWM}xqwdcS zlxq3L1pgn-UouI9unI4L{2+RL7vR^o=|WwV7@SS!uhsy~JzNv|GkvQFvbXfm6%*gO z5LRcU?mNyi*Y0*xSL<+A9wfV#XlFeQEL*@pYCDY;CqsUGw7Rh;`5f3vCzu*paxJl= zz66o2Y=N~2SG^06Gz_~(ATX26#4Ov1-0<HY+7E<Y`;*GrB1wYy{0>e#n^wXn)$0@D z>S=7*h7qr+$;+<(a)(xblWr4Hf<{-9UzoCpJgUrs7g6&gV*c{ku*|&&Xwr0&Yp@D& zhVz%G0PBeRtF}f93ujN>JDjg{=FWCiH@3w_gZUt9rc+?IHYQ^4Ll4$2`H|T7F=yC@ z$aiz=3)ZuL;WFL?*YWS@>-(}y{PPy34RLcb!*cx=H3xN{-l+tY_X`mX@$KI<{RvMk zzRLVVA-Myexj=@|p4dd*AvyyBxJ2>q7_G0jkjAKwy1ep}Z#6>vf(R*F8Jo_3ZM#JP z7L_GGb;NtFhUE;a`%@Pr?}SvCwikZ7>A&Bz%thK{q9vIUb}GNxRT9@artCUU5YZRo z7GJ><C}?!+klO8&Q!${djL0rr=R^feEo@Kdqj=woRVR#p4D_*4T_8ykUrxUr%!g`Q z3EW~dr?YZh7#JSO*a>D|&t_ESu9(3P?aWbAM>|jIZY=Fo&;De8_QR)+R33J?6?1(1 zZ+{YThlp7E(sHY8BLfyGE47o&;TqL<N$7p`tv>OfyOy^hOG}@u1wG_#Xd!Ri3hO!J z-S~18(rlbA4NuE$gBVE`pg3R3pyT@$Qm?)MVAs{N<AdUPjXyCP>;F3U-=FyJJvj6= zh+ZdJdZG^4$aQ;Gn|Dx{!`<r9U~NjO5U;jeA`o#wSj0Ik9=7-dSUP6)jHu*>J!k4g ztKm-~JOo4Lhum}(v;~8C#M$~pdCdSl$3{)aT9?=`A0!fIiZ2e8D-XIdHLb7rXE#ew z=!e<wi|^GB;lq)NiLv2rQOasKrLVj@fQHmh&gRFOZ<58hes?6OZVZV9Vpm&BAfb;M zQ_Si^W?s~`X7ykte$_eTLmhP2F1>Eb5Q`>y<<71LB*t^BUX2c_90;NhC7TN;J%T-? zM%)29On1hPKx}}>iuI)l$<^k`J&{Pm1_u5TGteH33Dp6@74H}aRl)LeYPnp3+d8pV ze`IQTelg|Lc<|YDGPkdUmeQA&C;^OS@)OVfiP8Z(^kx5{FL)^|pg&%T76@5+^7zpz z&TF1NXs>Mn?vo{pH~63`;5JV?Asf#zk2&>tH$V5%KuE@TR^k0HNjTJ+py>_bh64OZ zJM8&!eolo)=@&uN`yY2o#`;SD)b@f=_d1@Wi??pgn}w8jO$CrsO09bBys6)7P3;MG z-1&G#D`47BwXNbeRI6&#OTzuD_C!vWo*B;Zzz9eExIx+1bMn`7OM`e>v2s9$fyiVW z!lXF!q^XIM@+`#Soe`}4J!y+_Nuair=+iB5b;=jPxM@y6S^UVN<NE!@ui_Q!`=Hw= z9SzFbrEZFQF(k9XqD0j~{#ImVcAIaK2F=Hn;gjf()A^&;UT~-!-X@l0TfVS$?7f-s z-qg<d%d&ysL+=w)@Rm^}nu;Wi3el}pR`6hxsa$>6^!c(tTQHnFj7m#yqlPLUKZ|-5 zqwt<-k1gpFibNd(<2iH{`z{W{x<a-Lr@{JE-SXxFnRcZHc5bha+fV!r62I+K0xN|U zSS+EUv0WH&!Z!@Og{3dh?d=e!uhP_m@W5S-m_6U}t_j%zy&pX+IJVDB5BjOeVAoox zL2*3-+iIa7f2^`nP`^1JK2ixYUzRxB8i2ibD;#trxH1#Hwh^vZOdm_sr+(kdSUlvn z>k&{(?95;#DxN$T_5HIWDdlx^(Wro9yOKlhrs~19wTu(Y-$jNw>+>RG6|%$3Kk|Ak z))PPd?%KU$tQ;bf1-rcl!)lP^fLz>~iA0kPKsPI3m)Fspc)wn;L8^{ZsC-cnji<=| zvXe~Ba7eNDy;&}xI86iC3b7bOtf#U8wvCo3`YiNu!z2sN1yK;E+8xD6aqV>C9}0$D zWxIT0#z_ZRc2WXa%8)*@jaW(?5U1SseM9wnz>4Vu_}s>DqD8%s7=!8O-I0Wh$bFSb zFkOyQtePA0mzxG`B(hHID^pCc%%n&dul@_n_f7?CJ2U3=KcJoleHgHT2cO;5#-W}= z1Q|^~&6}#x@aD3A&;G%v=1k{2&?KJ(Fkczy+S34(Qq*Rxp32Iv*j@43$NM#iDyc+Z zP$kwUs}=$*C;+S6QR?&kjMQ#$N<z@rYB`8R4^d9b5&W>I&NfQojWuf|{-{DhKE<Ms z<!iJ-W^}smE6&|UL~wj(Uc>r#X5x4`W$)=vvH<>RV}-d^&8+F~0dF3Kheo=qEuMX7 zF`}PVEup9p7bs!yM2vlK_mf1&&WHXryUS<ad5#R&wlG7{I4`E2w5dDmim902dV)@@ z-9kd_*Mi0xpNS#z8WLlgM21ks&R2$5m0V7D;tzV%Vr0{q{#+5oR{#n@C#WXJMC`fV z(=jiw|2FuuCj&f#BWXhWrYHr-JQu(3#Y#l=taYni9|3h@f->XMjOA0R@BXm&b@Kbc z1!|^51|ZqnAp_ro*$COO9y484BIkpx(fe@jxr@25qc1O%2rt#JkDz~z#QcAZq@>O1 zWK3wJMZ4Jfsy2H<cIDiRpq99>WrSf0xsMW$c%IjyWSN3fh*uSaq(8x<qILk$U+1?P z)Hh}yAJq1MM1_jwenF&637&<E14Pdh{gmzihuO3{Ern_G@ANA`E8M)Pk*@14l$Clo zn=2cN-GdGF4bAVBt3p2}ev>A(1AAhliT86YiEiKDVN?!PUml}O+_L|y7vZ!_NH0UJ z@8-Iq<p@;obBKY(#OnZ*KSsyAXU$}SeJT37qtX}kr;uTIkR0FZdy|~IB^1GIn`^4q zez}~YLcwATj<8yn6WZ#*8#Ep10$HtUJS+d{B9%U5W-ls0pIbBp4*Xvh7^_Vg>z>Wz z=1*O&MpZvy81`K@lW$P>DUwFfMuxywEVpg_Brtgw=h%Fn`kviUBGD$TriBNsgh#~H z&4GFXj!;p)J7ywRpH@W`gg8$JGg93)(g$Y<v{kev%BeAJ8P|)^zl#oX@^&9gkNfdM zBVzsghp}c_vFL_TN$nmteuyS|WZlrTcJ16Eddd4w2<-L}SqSpg0-xQ@);8KASVoMp zTpyi*<(7xXckL_uY-a#x)6|`NGAI~NLJhsxvk-6_-VF&MkB&KL!_p(sMmj*QzUjYr z)&FmnAr?x^$8Qecq>eSwaBpvh)KAHeadXE?9G3Jf4Bl$^pIOwvpl<IfFgSP(BQzb_ zL}oJ`f+$?ZF^~Wn*5Nk?dUyBysgLBQMy=Hepoau<F@cA7k7B_kz<kEVjUJ^?Vli~* z@p8@|E`GGB8eS@3ZHL57=wUEEd7k)p^0T{tFE2wg>{~@({Tra?=21Qw%mcAr>ImlI zP>laG0lrn7yt}(yxghVtEAIWr#OQBt*>K8(2Ur+|uGONQzN&lG?pIAx_Ed}U!m%CR z85Ly!L&&yMyt62{kf64e2?*jWDuhC1Dra1eOG~WgXQY!kS{mk=BcT-c5hi&J!*M*p z`4v#*N!dY`dj)N+(lb3GXJrER#y;eAVKV!wd2tB&-sZ=d?jT$n-Q$l2?ERpdA;R$| zg20md&CB56i@=Vn@$Qdq3(QbWhtdIuOG#!Hzj|2i{ro&XxG(wiirA#{-&1bM?pe5W zsKy6rI<TBZ$X#*~in*6x_gTB{8d<!w!iMOmMw#8_hiE&ScKIv+Tm|uaRE6J-b}3jt z#?5z(%4>27FM^e`iiI=A@>-ac6$pN3UR{1!tW!|6f(;Y~{<F^m%q;o9hvx^(cLAcs zWR7saui?&Iq;ltpZ4XhSl01fQC9dBvHnYljKobU@4?IBxj&I|ts_W}eToLmk;Z%7g z-^>3kAw&oY?H`GIoukgv=`8Bbp7|Me+?}bG_~L4WA|Ov`k2fFz=rRCyK*<V(#%VA7 z64oXn7^Lsxozs55xxp$?r3-DhGxRRuGr!vH-F1W%u`M6cX-1$5PyA3RdnPs@2!1=A z9`m?&zvsg}<Fob|l<P96y^YVtJl4pI9b&RWuxKsQT>%}rZ+6-JI8wJx#J6>1v_(oB z=?$}P4wSn!6>LfTT>mQctQ^U#&3D17``_0N?>&=;m~Z`Tm_!^!ptH2o487i#3#{H> zWGlxQY%eWZsXYtXnSR;2Z+fR23~r<m$hnDd%&S)RI&LFs$PtPy=*pLDy^jOme(kF9 z_drtbrF@7X(4YlKu3tNfJ8J-uh`~Z$Tj$reyZ*eg<86ssZAxSy3gLj59bNZzFA9BY z+)H-u4h*U3RNRgF`S~JS_5SpS6zlH42Ft#>z=CFV0kknR9D*vXthK#dTy1rB?5VqB zcV~64H2yvROR(X+C^fu{8gVY5I7C?}A0S*M>fq0-Lq@q8XS=`rI(ltjXmMx~4Qy^- zVBIBOC#D$UwTkmy<nQnXdLK`S6w^>EwM|xG3v7W&y+dM%ssg6<ABrSkUdLbobAIY6 zX?;`o^$I%;cjzcbYkIr+rC?5cWqMxs-KXL?%-q>~I&)@;6U$R`f8Y1R(lFEiVeUJl zntHcBQB;&(1O$X2RjGm$rHV)w0V$ydX;LB}JwPBz?+6Ge2$3!|(tEFpNGAePl1Og} zQUZiH=YQXsS@X`UHDB*t%MW~VWu3Fne)h9}EtwUjYBDxwE9jZOpMYH80AU~&0KWKj z8F@k`Fp#eZ0}vFDnGT2yldlm$=HzLhGLeSVMnbLG-)~=CbD;ni89@RGNL}<{C6~q* zd|pHRGljx?A;l{?dS0A5ygsiHu_mD^huw=Xd0hI=VdTnaT$>1*jajK-n~xtVEe$%c zJD-vL1((K0$H`PW8=~6+tL8UPr>CyD0*1JbhL0+&C|9gkl8b_r|EYlgfPb<vhC25z z=ASt={wqEtBo5_NHfw9UIBWSM^_RtUmQN36n>=hMP~-pnT39iP0K(E2U_+n=c=oUz z;9wNls3>e{X*NIBE%<nGtN+C&S(>=OlNR&`#-LlDX!o{mBZSAEB7|_ZJH2ju4X%z= zWg>dacwS$pE75kxri#`#Cz-U;HZNZMn0KU7zc6m3{GF*9oF!{Fb?<`7-eILee<j=M zuAsbeWgV|vfc64=-1xtapk)<N;-ncKbtIk~RcBNIwXB=ax<n_`e}UbHIW&C$(PKjx zCdd9r0qhQe(|~v=`5Nv?5ZW75s0Z``Jc%BOo@-jrkgIaH-t^ib*Jv*&1%aE!pJbTC z2Iy|aZw|78=EXbLu%NST69u^v=ZcNDZk)cuvK6zlynA74=W6A3z`HXQcQ#Dc9p5|T zn9dSa43xMj`HV@AQJIKho>aL-g3N3KuCs{f7U%~0w&0tUc0&sW_3z;)rXWV*7EV0d zRT8m0qB8J65|j8CJf5Z~#rp^myx2b9+lW3*N~8NxS)^CE*Z?2a5z>hR9gn@$a5XYK zubL-^0)4!r-z*tiooTLM9dPwHpP}yk)Y@@y!`h$ngMUg2qJuMtQ30%ej~BV|pvYU( zOHZTjND4PKF^PP*VnUlTe`2OZ5?s33x&CnjM7#@Jl9SDj0rMncYagcoWj`lPKRtT? z(6l9S#=gp=Tq_6gW*@B&Dq_8v*2~nFIuJenp1P=PE6XF@PJHL^x755wWAGjo2QS0a z|9m&NjyuGbt?mwvxZ@|2PfJT}Z2BFbZd{%p#3GiR@v>`6_)L=bAStbqALz&c?-w@> z)*&qQn-WN7L4#qRoS=NGJ!r$or{h9O%NB$k$U#KSMUztgyv;jPXure&#mhX!|3|@w z>rKBrG;M}no3R6e()1dMjs|TahyQ$A;BZTlJ`ssk13F%~(q(6#d=AKcp_Uf&#fO!3 zAK4+xGXe1=KSJ?fZ)PTVk#<t1)g>LGSJ$4Hp#JJFMe+0wgm&t%(n{wKT<?=gbZBM$ zCwZe^S8#ixw>E4pv(ngDl`~HEUEQRKE0?RbV=Hocek^rf^(XMng|8vu;wRK&|0>i! zlChym1fF<oj%sf%4IT?sDC#eV3^`>FYhxK|=Q}%tRy#2gM8JIT@frXgbw?mbK`8hw zLUht$qJeQeK{ZP1W#%6Z!QbrFck5nVKM|Do;C1v?hR*))dFbEx$NpZzB7^5ms0zdQ zo?x>Lwcdxt6W%mC_i8qvsCYn?z{0dw2CfW9yE&2MD<J%55(8dc55JUjs5sA3Za!-j z@BbxLbQ=hh3oKjq*7Sl*WZrF`YS<8wAzXIlr%I>$$gGTab0YxyH9f**6`=)G?@(PS zA9=7=UL9bsouIAc$n`mEB*1SJX$uI)mz+s1f5<9-DMnEMxp=RZEW5r$3$TGzd!)3m zowbQCtm5NiXBKKXKL`a-fC{KLxBA+&aA!GG1Ds3IWKN=Hh!6N4P5U#oTjuuZ(^@J- zqYd*T+Z#&u?w*B&fY$=<S2zS}J9E1eqUbusvNOk==h~Ol&#sO8{wWMZ%oZ=I)&?R1 zzRk%w%zKC&zJPu30QFkd%<BKP$<}!+y*poh#9f*D^S&%rh50-Oe(N*QLAM>9W|C&w zT%QEZ_ZU4LFf{NCGGGq<!Nb<bY2_l972fK`C_b~*+4|C8@9NM2%5_|3OO<AQrUB&9 zlEvzE-FwNJ!_j^)@>ifrSOYYcICT0h^g@&SWe0b2Tl0{2I>%2sUq-vA%vQ0C63_lp zsB{1WP{$~7{J%XisArcPg1JfwN(XcT?0CVK#+uw4p<TZ+Q}UI7XIcxXw5ICcV|H0& zs+o{&*X^-UHw|0wFS6>=PSyFX`KaJ$IcTD77ZC?g4{=l5JK31;QtdxemK%e^S6e=P z-5XqiB;s59W_Uz0&D#`YPUT~;FwC^L1em#$=By*Q6q3F;4!MIxMEct@hKg(*tB410 z$js|OAAiwy{#o8^_5B=tSU~0|!0eImzzP9>7oY|~N%TZ0C`=|IS4UPf_yj(kJF<J+ zO|EXZt2W?&dF>avcn;wBv1hxB=<#4%-~D#H$wXu_Mu%DG6C$j)D0|+zFytp%8M3V& z#$<w^naT`LRx5!lJrH6I-Gexu1w5Hb%eo0TlZmQr33s^2mxV|8=GdX<H=ZxAEw-;- zzC$hQM}6V*-ps;wiPZwqN$N``VqreX$5v?`ZcX4^zua*X#%2XXwi({Y?`%(b?UHBh zMPx9x0!l3L^OizxWHGQSdzq!X_)A0L1Dxyon_a4r8%GZFSx1|qqoMa*GFABTRmg(* z5g9XdOJ$*aG27gT$7nR=0jV6Y?ul|H1_Lm&tSX6C6=MQ0s9q}wW#Z<86GhJ;lln<R zO>JSM!u+l8hXbKI!EvLsK1CnW^}7?A9);R}dTsTGuL7J2w@4e%!S2zbUh{uRJ+DBK zFd<~r@DlWNjdk?ozdZ+_0+KubY++Q-wt?9>07U%~4t95{Sb%N31e>(Cvs|uuIl!pS z$#8zLHESOf6Z!z)x5;Pp_Nd%MLI_DkP_AG7ER3bsog$q6`5>(qk%R!Oi9+OoC8`%u zr)5{W<Ms3Vlj<w_y$KDl1C$;9@@ir!OkKYNKc&Z({wh)I_7%Addvgc0KQu4DBM=|m zrBBt@qQ1o=6Qa9i-P+s~xWW#<`J`JL*JN}u+2(X64>Mz+v(>?rD?hTaF+S&p{7E45 zwTJg~@JzyKKIyq%KHqX3Th*V79Dnzy;EVXNNf21ada$3(kLZM5jX~aZIgZpm+_z<2 z4MQXYs^w&Z|7t6)02=jwJO>DVrKG=7y?^d{hg7&)yjBh1KtPv`yo(gl9waBA9I6zt zx#f8-p-dqTePeY;Ss{J$hJzfvb?eLhjZ{_J;PfRDg!my|G21ix8q_sdy4x+&r||>- z7eOujX%IL7KR<8{o6NMJjsh~)9}*JN-!rRweNCN3?(qlM;QpX=^V`C)&b>cFZ^55T z?8t5awNY7DD#X|=@%>j|nRI9wLbntce8=&}<dDOEm5G@O6N$eLA6i?w)Hj#&LGQ$D zMz($7`q57=nopZS=qfcY+C339KJBs2OkOHQD~jc_<+!XiEvszoYr<Z9X4hMnnhm~F z?g0`e0%_kkbYmyM_`g>M4`OiX<PeWMKSB(&8+T=e?4~cb(-=&DurjQ#iR1XzfN3|R z3}4DxKwSbc9a>q<pHpE#VS>|jI|`fTtF3|5U4qWeuR8HU%9{;o1SojgH`{^0)wRk% zy&1{4$tab2`SKUq@LXxpbzRYT;;`pu8`50@T}LASAVRR=XPn$bs9ieMFUL^XUX8PR zBvtb+*r5&=2)2-NE-H6?<cD9$j3ud@igAAQzo?VAy#+VZuI8~9@j`Y&Fpe3grbS5~ zkG-|e;GeTrZT3g%9DnDUFFR&+0=I#5l4iyty9%w9|4dTV<40@fMj*%Lh1PkFDy{!t zPc0+bI^jllMjW0I!?LWs^*k@PxBQediEzCEkggD-<6FaIQDRGPcMCbi&mn)bg4lD) zA-3)A{*`uY#pXEJNy`oAK&&L_DnFmKhTo6V$zbw5B3P3T9zRt!P>l>i_R{(25P06G zlotH_YA0~)&9&v4`7*_Z_8MjK-YZ~1`0qqz{%ax;9qkZ>DVh@^e}wbIS1zpEI;Oe` zcGRo38Ge2J=?YaAt`nmN7=*=B#r~z(2d-v372FJ%rMP-kAa?aJh>c{xJ&-JLD``z} z!u%MhW}8D&`84?kjPtC!z$C=DuW|8KONYzXTs-4CBjXi4xgfL;#2E-}frvE`uB)&T z121Q7B3`fuWF8|oEA#D5DY$3jatDjNjfhsb_W1KWC1{@8CBKFY#xmUIEz~ojA65r$ zig~{WNVAgiuGd&D&Sfn89_3>7qw18M9JdDbob!b68xscSmK{^~AQ_tvw6W&7x4$i) zd5eCpB=c=r$`t??SDJMQ!?a(BrMvxML5f3vgFtA-V){<Ul?eenFoep8^I$bnp@1Pt zPG+9t!xB)shbaT2)z^Sen`UFQBeHeXpMFU9Uj^87K!n|mLA#gH*wI+=SqDRV^;;%g z>#89Zz_lj;i=rFOr$NR;gkgT-YBD=#A78q%Hh>Nn%TLi3c_d!K<&5^CrA;Jr{Q_k1 z+loZ!pzqDXg!T*Hqffv!K*r+|69Wy*@{ft0SzA*=q1jRSadDQ`HBN@|yQte~y$EhU z@R>=j#JJ3>CI6Wl;SoG*-&DV&4S?ToODO(;g^|PwoQk5^@$Ut4drhjbipi2(<C&DS zl$2xO&*RqYNxp%59k)ozQ>hDUbzfRqS=_B7q^%kTRW*%HX4nT1*CoT@R?8!9`qF<X zo+Zh2#PmC6FG*Bi=!X!EC8|--Qvh%9%i*+P=6)m^Y^C_%F9rGrR$Bf&`GYj!;2%Gl zXn-I@2e`-@aBXHa<lvOSz5d>Vw65Iope0s_`D+}SH4}jSYzIIG=1K;@Izg3q_?*as zS&IW?lKQF^jl@PQOyk=N?MB5L3p!xylf_Ty78pp)lNJUx7+*ZnJFb7kxoQ;kHbYE@ zL#4hMa;M4-$xQO8a5I9dv`)%!Q}=A@Nrm`Re)SV@um46@aWQJ>2bJz81jdWVyl|Kp zU^+oEF0cw0U#Sq`&#|Xmy$!Elf3OGHaQ0zcDP))1=HW<j)I5A9O{Z@WDpH+hitnf{ znQxe_+FpIbP@upH`q4D3ct>2-IpxJss?{$oOxn$i-E132wx;J=RX)~ik=S!9tVU;) zl5!ytY*PCL2#(JMo@A$fOxQv?KDR>Gz9Rxy62^6KO~H*ZXEv%@o!L*D*~h+n-g>D- zU6?vNv<gtIp8dnB$?wJ@NWj-OSbiatn^;a}X;uPW3R~NgMoI&H%?C6O03K*!l+s?w z8YB&m#{4M7D0^=i&$Ky|5>qYQJ4SA_)1BqD23%?d7lJ7P7=P|4TO~6OCh=o&t<SRL z{rFdJFS<ITohAM=co#KB6~jW@N3A9Exadog2y(b#)su_uESTt6KO6r+zzs&@oxcj- zgfknux@R_VKQGnfFNM>a(Pe0Tev>Ml%j7H|;w>(cVOViv%L)whR<TWS1RI8a;>6UC z#ux)UbYy&mJ6x(_3!J&<f~UD(6V0}HS3gL;Cr8+DLW#+hzVZ4iw|gVX+jy;GyTIZ= zU4~*3*j583gv2}d@4U1nvjNQSYXSjma^F|)Q%WhCoYZIH5Ydo3cx1HjOchximTP6@ z%Ev<S<8Gozf&A%icP-HjLlneXd@BM%S#22?=Td3kKH*M%$e@0<d8{x>ps)1&w62g; z8Qi)(Be!q;wXxLX*&rw#);tM#SyZw=i?*6jl5~|HrF&x_XFhf0zdx#)2ql8eiIErs zrj0CvK3CrzEB$FfxtW%nw{znLVc$|ErZHi;3*|pus%UWZi7M5FM8r@d^j$5wLZT!V z?B$YS2uglFOA<*Qbhm@67QlSWgZ0XXw*8u3z}z!^-txcmCAmfSF4$TSmXcZe*;RO2 z#t!tv6|59J8>(h^Ar}1hUgzB_<QMI3ar?lQFq8rfx55r9j)3|(qoaAlhI;<YN-c<T z+^c)N>6HY{0S0kNpy!>6@c`|62uTY10>6dd>xT$Lo49m{6SMBf>}ZB4n9{DTCRYEY z03@BWp<KkLxbD+SGwdxRKkEHthkp$RdS4BALE)1cq6{rZ@e`^Vf&K(5Fap|5um9x1 zy39h#;$~y-t3MW$+X;5f)V-?W_QkP;!QN#cg}X<q0G1?hQuqZH;m&(twm+yEgM#3r znyF&jq>7<t)org9dup#P?cGu~Ij7fnX=DxR=H>~Z!~kY*ft0-go&o+fnKz_Cbzh^8 zFFi*mtV00Jus(iHGCGJVq8{9uaizLxO2U5Do%$Z5<0#J7pfA_j?R8q+g*1aIDAp`F z5X(ThIcJuAD{g;NHtEiVf!?N@Yx5i^;3N9KAB?PLbgsxG+~(7I8p)a<=jYpWcer_g zhqtmWS+PlYzv@r7EsbC0Kj85I3OC|lt7rOF%RT7EXNgvwOG7{!W2G06#jT`|z%1~M z%ZRdeqW!qiYri!5)YC?=iLITLmFb}5fkW?)64J$!+eK~{u@Yt#rFPP7Q_>4;+%j;+ zQ%dr<Ry~*ctsAK;67CGU9?RY)_YZihuA(02Hz`)~Aczpo(3&xsjA*soaYvez>-n(x zw4XJAcWxTMV?q$sI>h^ZeU-sr`7D7~THF!AKQKzsS({`gE2wx0)Dlp({Q*K}gW@5T zu@7AMnFcul!H-MKKD7NmVG{WfD!P#?HC07YTD;WW@TD_KCjrfVr$z8lcodgaX_Wz) zX*3yepg?p6gj!mEDQ;AiV}xHHdeTCmL8Ebg>C=ZhHu-;69?!*9hh1kF9rHzL=eK2I z*-ENlECUlnl>XSRY$ZMUo2ZQ@7vx1G#+6!Ixmrl{qUxOL(<yT+;2J;>-_2k0{`K$^ zu<fe&rz?esnoh!{#K?S)<H1vVLQ@{k)zc%3Ud9ZLJqJ5$1lGV%ruZ3D8KTG5NesfB zajNE8c17^{6TA?p3%TIcuLbB~juJ8AEurtZED6_f$DAR^JuZP)R@_uuHpnnZ;VC%B zC&)tQ2Opo3`4Q2-6oGTH0^}DB<%)e?daBX&+V0c2uHsIQO*hT+C>RC+XJ$NlFk*5i z1yBq8eE0a1SVmV3VT_EcG;qc*VI?}TbZlE#;dtMz1xdZuq!V#5yZH|DQI1<IOX$kr z9M-S!XA`pA&fSxPdGG&HG>AKgoet?8Te>(|m>N{i#{JPeFL+tkd*pc?rr6iwkzYc0 zv8UqRp*`|jgA!fE7J{kGtAv;oa%Jl={wT#$dM@OPJ+##6g3h4R1?bP)RjPyFP=V^H zI;&*bjWwe<xeqAu?;Ym8b9XOnv?||wl7_X7%)|dWojxkeFgx0|&*e&~fdM&7UklE< z&&$~{?8&<-yilH7Eo|&^3Qw-NA6;s)mWf&P04}6&+(GF<?yR`QyJO_rHn2VOX1rW| z@rI>!EQP8^JmNj(f#_Mo#zd_kzH=}Z=Tb-*jV{o<vBdg?Rt4FFdO~!<+$J$BS1LYC zTK<*&d}WpYidKNwAjqsLKMwx^?o|fo>zq1BMDzxw12)2i9l3z(^h<WwHJQXaiQNO# znf#TeQz}vrlKP}ao9Z%%dUG!j!DZFHvTc7~e7yVFwh7YmSf8g`rk!WdASNSe;_C9V z;0VJ{<aF=PTb(ZC-l@?3&K+Clw6FW*qw^9E<v)PXO&EJt7%a{($kwZiUc9w3WP2C# z+}pv21o<4ub2z-U#36<v*%iWky0;|qZH?-IrH$bmpG!=2Wz@U7R>h(9+jU?T0@Q#& zUxeAZ4F}2ipSEl=e!V#%@jHfg<^6L45ljWJiq{5Fr`+&+!0Mp@Q0kf;_aZ1@nNJBh z=y)YRRCn3tp7YTS<~ik*ex{J$zTD@n=rSV+lwh*eLf@QE?CfnZ$!e;O3Kl)Pk-P_4 zH0Ihh@RJIyA4;ABKMpukg0K-3mweAuXD5N-uLFn@@?W|pUO!xnhU;UY4BNvCZm>l~ z=1`YgiE_M%qhtXzkZBWK0gJc7@5LQL+W}!-D?aHK$TeD0u=eH2(lGfpU;&|}8<3<T zMzrn8(yyOwv(d#8C}-!)zohED4q_ej44NQ<D{YC<T@4Bi)ii1$K7!pDY&WFr1Fs8{ zE>WmbZ+%8xoKTV_REzm<0KQgYVoHN@M`-`EqFDKlq9EakG*hB00o;F7UIbejXfby2 z*!1A5ZtNZUw8pWIK0$YAhRK*1b=|nW*-Pk%gX=8sKs9wP=_6dlTRNS@3MnD#z|CP7 z*UO|;LOko?T**Z-&I)8yi}v0D^+kLk*L!LbUQ`nt`dZkJoTE{7C|cJ{=x1xlQq`nl z$uI4}so&_vaqG_HLc*mWr!=D3Wu&3i&)NKxZ~T4tn(kfb+Auxnj8PCcbw3=aR6P>^ zkxMmSDfv@Nu=x;BlN-Fa$+<%2fg1rfoM+hUN2eM^zf^99^?>76U5?_L&CK7W9~u56 z>HiZ5j9@<SjA19s)HV|lW#$_$ErCf`tDnaMYu|^A_T`ngE)hL(<Dh*-m<wY5GtlZ- zf06j{`h#J<Ttj}!k2ftF@&W}9cV_Miq!Uu9Fg7EsSh65Nt{UGuz<GE8<a|z(#4Da= zcDj7A8HL`B<$r}6J9$3i9Xb|nW9+<)qJqvPRgg3@nM5>8roUBpq0ESWc>vky()y|C zcD(pX+l^d}^$964K(qFS#fF=8wS$!qRZ=KkoI|)czRk1p&0<rmuV2o5TZe&Eo5`JQ z*+;A;WDP#nt7PfPeNl>~OJ0>N+tcG!Xhpt6*8mT+?@V78;GPGyH$-Sp3nXe(b0dS6 z(OJOU@qn;Jj<%%*C<Z`n;aG!vfV5tB)ug&kW|AgBHuv+X?$;wx=<OrE+Tt1E-$s-3 z^}&Ly-6X4;nIvQ(G?cy0YRC3*`<bOBOSl)8CSfT2SH;H=(eSjRwDFyf^GihIzA@V* zy5`0w<O+rj8~I+Y#Nd7vktw)S<p%S5gQrVYDAGywbS63UDCJ!G71cz$ZXBk~s*ISd zMX&}3`KPOtVh(ElQap*GJevlV<Dr5|iWjC`{Q&V*F4MS@6i=&9xw_!Tu9Is_3j&qr z(~#!VDOD;ZFamH{G@JGl<v0K^v-fTON3{t`hB5gf4BW>oM0Ci10AdNwBDtX9YHlr5 z(MrI12W>eY?&ba-9>bR?KLoTgDTs3^NsQo!jF+L4wvFrH53YQwm<f%Pegk^<`4v^p zl3!4A&(;#toLkUfWSc`UTTw`{7F~Zw9_Nlcqh1>wu9lJmrIFuOj%817Gc6&Gz-5;` zX$LD72VXQcG8^1Y<Tra^NX38FS!wtGK#Wj08<4x>*I91`EALHYZGkLk`U$kf_IcDa z*h#JVUnjjz);;_t+D%fcfIlX5#`x`BBYNEMt>l~A)eFw?FiKnbOW{R@>fA5S<t9QU zd+z#qQd#5#(ke>steLR8C*vAl-TzBb<&3I=PLVhQ&hwVf=?{8oudEJSOE8r9IqB>6 zs^AL;w!tl<{<Bu$I{GwW`F+LC@1|FZ5zqR7P{YK*s8C+mU{_{`+ziR<vn!LHlTd+s z(MJD-Y=Tz%h2ErsP3R~5baVn4G>932Z1tmg`0+<YvX$)%^`}U=r5)O`q$G>j-ut+? z;}+3$Vh*+h?;P$a`(7;TbX7j-w);EW_f#ztBV;)^8_{F;zwp;L0D42%1oQyJdQV&k z&k`7~U-n^VZ2;;1xku^niqhAnRthjb`4kmYo4(c%XJHo{$bG@Z=8enOo29%dDLcmK z9JnnZAVx{dSG!HLFwqjAv1FLD&5uP4*@s+yHPcC1Z@{>q8rv37spW$`x{d$Ts3W#> zbdXrUe;mF~f{wRQRc>Y>0asOVAB}Lmw#l6x(=7fbgQk%`{C-lT&fCfls<3ec1otR* zj|;BV1}IJaipONyg%<DB)2ypW*QJITUAek_Zwf35FbAT@GRgfsw`wOsg`xIa+Nn#< zbMeF1$&PAdKWWewWEzjQZX+;+?@0QY^M{*&Gv)~VXZf%~mnEKAbsG&<Oe2W7LjY=7 zRi;F<9IUq^^6kj#mXDur^#@M5xu-OhPQ>y7B&R#+UYSAga;5x}hNKy@)FaXL;rY+j zd!Y6mKmfjHjXoR!{UE4DXKS<?HuZn^DeOwveHO7C%(=Ol)afIb8~OQHmzRv(gmyH? zNm#0?5#;ifSe$2)Ttf}<3!>-2GN!?_HYSvePfG9^Lwp1q6mJA{(%>c!=oEG8r{E6) zOXsyN;}ajx^sjN8J;Z(ICpvNya;LZ7foTZYeJz<$aGn|$rV7CRGJrnE{)S`VM8gHu z*RsDug@{f#J>jtz(<;JSmBFQMQnL#4ZSgm`rhmRWUprF?YiGdxftB<^q&%;|Q06xN zGpj%Jc2o@=XXW^P!HI*af5vY9MwgC5ya)z^3Tx4R?pzx9+}ABXs!PRc%5;SK9w*SI zh6J9Az5`CGR$S&eOAY`aUt#*EypR}VLdPu#vDe}YK{!&a!K%(;adBUgn3)lI)tYU% z^d?~og4TeICMy}^<^kdkQN3%1@%BC@<<NET>x-(ka|5cGGMLZu6!}6^c%KR=OWdbV z`{qK?X(T&Wl0oXy{@3=CV_@J5DC=m(nEP>5Xd(rU*%d4OcU<CrX*b!OlT|$7Xgv)$ zp=g~fPwYX@Z4$p7_d;$$KiEy~yrlF5jQCnVM%k)wS%hByLO@5hU2wvcdvZXw<fOVh z_UdvT*1hg4S=(Ru_~&&n_2~<FX1*3=`fI)%3!b|(1^A`NdUrRMESGKZ!e*DL<u8U$ zRdoqx2HbF$DRFE|H8HR#+v1(l3%#jlCg)D9>J|j_0F8~oBhJilG51T2t^8qJ#KF0r zeQV!@zu(^gBuBW%tt}lBmAig)DmHSPkH2TsXs60(O?s!&L8?T7mE$4k8qtkTOS9Vj z5dme_Xr%#?ng7bA)gG7%2cgOQzj6YwRmJXAq?!gx_ZXXuI7Hi1?;x*Jbl~!ix_JY^ z2^r<r&NeVM>sqS>p3!OGim<q4w8C)m;=#$=W16{k&bWQscuQoQpY077@>RUe>4x!w zWk+7{X9sawYRr`-Z=X{z4MWc!dq1w(7mA4M;A1JyYQ$pI`7e%$3Qa_LAjN}#LwLm2 zVoIi6?<v73Oy5Vd9m*A(cSC0|BURv&|F2Z)9TybWKPIW%BRG9qbv#vs_@Rq$agt(u zc4^<kR$e%5P14~*Vka(R0)esKpd>H-i-|A+MDwY}DQRJpRSd4Xc+cOdOT<i(r*Fmw zNhS8H{YnV>1If{VZ?$3>21H#CVjo*lMNDXhZJxbw>Yyf`|J=TRYSxy^n!P;prs69m zhi}Phtcus?ZgZmkce+MU+jFXHhO)z(=;m?j(Y{e;<W(4rB|3#o=jF0Er@W^3qtB{% zAy$lv7@j?OvWFR#*@s{}40eCmCa`f-v2k5U$4HKp>XWz-8319aB?R;WySnu`z^K9k zuAc{$I3gJMMp#=tt*(3RSj${^YY$*@y;@>Zaz-ql3+pQgrTV#BJ!`WPwF;S6^RAc` zCR19=|6eo^6BTyCXx|#~jgNB`OzzJ0xkvjJmP<W!E$nZvX|ApLGk~_yZAK7Nf^mO` z<V2g1!zUO>H;#O4SSx)^5UcnM#N%-0V?7g(S2!A2hL!D^g_{vZbB;=&Lu$1t)yHx; z{@FqPiFSD)xIUn&zjCD1l~TL4af+^Wo|&WOR?O~;n-3J5RNhxL{QJ?1+f_b&5N`4` z;La}#TV)z4u-22f`r{yjJu!L{&?a_>!+ZuTJ4!G+T3zy|PKjjXQDmTJ4fthQ_?zm^ zR&d7+qWm*F`Y5*mtM62gWOPf2+Qhx+(|GuZkKy4BvfqM{#a5w(M5|B@FQs9yU!Cil z2U4PJG|8p1c_s%Va+6P@%qyO2KeH%odR4He!_W4Dq$BGcM-Vs0=C*rcZ9MhxTD|k_ zZZkbQn3k3##2rfnj?7}>XB*eaoT=C9Ni@xD$hLPlO0HiU#_c&cyB#n@go;cl8DUyo zWo;Q2H<*js9xKHuedxB{O-Pzvn6@z+5I4|k`_jx2w#go5aBQKinpfqebT5FRCz+_x zN6-h%ZzmuBoJ+uh#N;Q7Uhyy!{cu|&S{j})xk5F~6TY$hx$_2-X>M&Pe<{kPLE_$2 zMZr$2$SPMh%iWJhoP{cWwF=tC0`Q^kcfW&JuhfYY&bfa)EvhOIyNYfYZ!`R+bsN?A z3S^UCISvUSI1D&<@4Fyp$)Ic-wC74HmnbaT^@erx4~Cauz!D9JA+|kd7F{CI|E1XR z-Ma|aC%h=YC2ICU@Nz}&96(FE>?miKS^oQuNYGlN?9KsLv54q%raH)Z)Oz#NV7Zm$ z00H+Fe-i%SKm@msQX<%flLbd`BOU;UfOn!Ugv(@~Q!7<f`qg+J<6CN``I&b9Zl0Ur zJrMTl@ygZIWveJjrOr?Qa%gRAej!Y#oD+#kF0^oES`b2Bjg;_kY<+j}>4u~Gk6))* z*~Zlk(=uDxTtu^Az4vo>>^+hIXEl<DOM$t)Hjc~aAw|#ygEEDc>H3V=&kJre9Y1IS z1wVLw{PfJ+VFMyqOnOcjIgens1oZ@O)O}@?Z9~2s_zm3Kz$PR$f))0relZOyDl<c> z{ouBbH)vFVz<6?Bc&2@{H>j}XN8;t3AK8J$db}r<9#dj5A$WZ^@B<tIcxpX5PQ?SM z6~;f^%vus&4yU{?q}9Soi}GW4!?E0mN0V9+5@I`t!Q77&hgMq7!rks4s4kVM(vg_3 z-1n@T3819IgBib#=Vt<s7Ua}C>6iO>yMCvjFShf=jkZjPRn^CHKZB{;npebn3Te*? zP~0Dc@37{XY}d^zinh*YyD&f4b7cOdkmUG0Pfax}u300HAu*JHGfOy0mX4vDe61OM zc-1}*x{;sxoGbG;)rxZYJu(}h>o^qvcM`dQbeS!mWklj3V5Vi%Uq$pk9qCHxKQY}G zR<R>xljwpfS$_bbje8`%Tuyy%Ckwl<RScFl<mc}XzfDz^@3a0^0QD@zWVYC#qTygH z^eX(;wVy|pL8}(nAO82=53(LmP|#9amIIEdZY@rWNCfkUs~?M+jQe;>)KyZVj;kkk zPKDgq#V<W!vX{~#DJipnU8jCsXYMzvCjJlGt7jUmcUK?C)$D@8Ih!@SkgOylPYj4o ztyI5Qr))v?x1ojQ;BhXdwiZ<RN)=zPBIrQYVLc{OA&y##iby7ex?F|0c?)7-sTzv~ z+nIQ4tdrWR!^m%XMf-LFm-m%!4sJSy=C35hRrsS?g4nay<E}Lu69Za{W~mRZC+8WT zpxFtcJxh#|ZJt-Em+5SEC;8nUysQ#vv)SoO_)8)3{wIR53WaHmD8ffY%C_$o2$hyD z{E}VR*$%(rYEJP~k>Wb_*6oTjI-!AKqbbiyyK8=*6?9&ms6No3F4<>=C&ZN(xz1!g z&2}%@7!z#Iskw@cy>DVPM%}0Z<3SP-eQ2*HJh+!@L|r{fD~cw)Nvb^Z{t(ywGKe^E z-{xHEZA|?|y4O5uXFB}rtJkUs?eVkp9TjRcN=dCSyHe{>=eUGvgKYgW$7w0IhA-<V z=^=iTSlgY|5H%5Fd2})M4#&@P)6R>RjfpvVo4NdWw!EVCeXGGT{oi#4Qhc($=^)|c zBWN0+XoEWm$8G~MSU^TUmp=U(QEf4+Rde;jRKbH2u<)fLlzD#bp+4WRY3kR#W#;<y zo&~E^?K`(Gt9xw^)QNly^2>Lt*@RxC*|4(;0Bleb^`uKr*?=zm4>Xdi(u(hl+m;!n zCqBdVah@;ay^le@7-GeHzY1P$ULsl|m;vX;6bP^(2>43@1w?JvLV1bFeVjjvN{G=t z@<-2?bfZ?4QLN3>s(yD4K{M@1{{d%Se%$jEjt{JFoX)y<G*sfSp#mhG@ixlKU#6a| z?vnTT=DtlR?++)dZCF#Bf6AI?aU)X_WE0<Py&C(?FosY#vY|AuMjr&*80+SEh<O-) zk5l_)7RmY{f4w0{X|6Eiw&A9{d+>c>-f!Q^v`@ELy-(*v=O65Nu*2{1Yi^}V7d}sj z^Z4N4S-dgRAm>^$Hzyb+_*KzJlVWttH0yS;QcQNh7p|l$2F3>YrCXfoxyi*gZVK-< zJe^-gSvZBp6|}?Zmg+cvRj2imsR$C~4s#p4B9$kUq^%~RJ3(HXu(dF6(H&T_nemz{ zp62I~-VNog_WYVdapqB@>AFN+4A)MOb*hd>*MTILX4h#L*FmLj9<<QHaua>}j&Y~0 zgQ>DFJ9d%(k}yZtfPrqO#&u)96v2mtniigjo8boeZMB04jsp}Ov}Qf)MSAJhX&e7B z-j(3NnA<(-_H~S`;<~@-KLZiLuhwGnUSaR=O6K$N4OZJ<5uJ1S?CGB0UY9$wLfI`X z<5AL*5+*{&pdYR|{!*q@dC94!F=<YGP}u&qQQE=959J$jmMwGQBo&vs=A>QF`^40| zZ;h;Z!0%D&`=iv}8+xx%35(S50Wm6h77*DrIFp*ivK_syGd^nloinPT_6z+U(fjb1 z$jLrQiSWoApi6oR|D~u*o@ux3<`J8KLor0Z5NaRsiilELxthD16^fio`8C^hR*K4q zXEV2+HD*P;8dP+SV)DEi+T>%IuC6}uvQAlATvac6s5Yir`<QKDRV+{-w?f}GKh7~# zK&M6XYDeMZda)j#2A7WLC5=n9EU&3bQ7lsk7tse2g$C3_FoZx?;a;~e*Y)^`mNnot z6Ut43OeoovHzX=Y736Q((T0s0#@qREPaOm7r<%hZ=3$$-ABu-!;u4tlc-L+V2lsE# zXSIJRYF;L_w0w;w3yHpTztoz1n%^CVD_P{Iq`sa1;byFm|J|3&^z^S>55PGjEn;;6 zpi_+2lM6U)XcP&Ix3gnArrBIfAF>P`du8<`x?hE!a3%J|(*Cg+?RfGSxM9w^HxNoU zQdlnAHYAYr_<`9o>8mPH#rd^L^7*r{U>$w=Cyz3!zlz00thuIYzD+K+p2}KHb3(bw zb9$6A<T$@-bxiiM>3y(CA8dMhJO91o!_COo{y(k+-Y*$9Uz8w7WMafGu9>4fF1II8 zc)WB>4Z6+!^#H{O>>b`@*{xZ?RR|jW$)qDjoN6A~Z^M?pEx3Sqte3H;bx%vY^&~*9 z@mh^JXgt#Iotc$Oh9}mg9vk7tG^hOb6-?@0`CF|jL$e~o3Ey~eK~&a&q}bxG`d_59 z7BdPqfCHcbysLjBmH2;hhQ5d1wS;8>@q!;A)SV4qrj_Q?)~qFdUt96M+FkXJqk6LK zfg%k0zi_$$^@&jF#>6(g%O&wjDzaDErWV=&-}lxuU*{KNw+^nf2Vj1*SGlolw#dgX zS0_Uz+6rVc#0EH04g0y(y;U$(i*4m5Xc<pBl4morZ*ty3mYnPf__Fz$I@n5BBveN$ zUt270wHoClLcYybNwjGd^iwBfKz|ZQTUkVQ@pg2?A<d2)3w>H}ImG(s9sTejSCwb% zUxa1X>%bYXUR+~X+Z~j(D`#Z?@5YS5mpyY!u!K{V6zi3>9mQoY=Lfa=rd1a~x0OFr zk0enoqSS#tMWaq2XGq9c)k8ny%$gf`qu<1=`w-F27NG!)mtqTit*8f`2b7RIdBk8` z!TJmx6er2h?=eGor{n&{mrIN4m^BR-!i5vBad9t)b@uL8WL37AkxjpFIom&yIv;(4 zh8DOXnBl^oH)3&H?KI{Seq2r48vRM@#ZeaYQ}=(CfmIWOF9!l8p<j;Q#X>);OqR?; zEPgF@U4aj~?D7X{oddBxGM!vRW5XJqZ6)<W<&OJ&yHd&a_ximmv2-kbNKTSc2S-ao zXUpWa$6ty%4|fa4$FU8U9^uYAydaet-bhALNFI#xNz^eA6MNI=>q=jWrp-ci?&ZKW zk_`H_vY#jE(qD?L>Aw`0NpL*C+|yHeC!9Ls=rS|1o93Kr?ya1J$O$@U#pa4kbO_jz zbO<y=Dw|1}a@n{kT}eKM_9Gr-tH(4Ii66n!x$ciglP@NdrOc7EbpTo=+|$4wB-f5< zK3JY8vsfJHBGokU)@W@q1RVi-1n3g}9n5Ud40gG#mde6zp>;TgI|Z$bAA$z8C1Y%3 z;fndgSULuij_OIc8c%JoAl62^T6y5)1MV%`z_NoAsSIF)>~X>#sa}Md1<V!agosa9 zyzO<mG%Qy0?c1ZvhCWkqdrGo&{hiS=pFL}jns)efYR~bn<+rlNKYQ%*)iq>bS7z?> zJ=<5jdD&1}2gQ+nlu1O~j5M=(ssZZD_!wGTx)?f{OZ!Kh?VGYj`kHA@QN#R7U(lCc zpSgBq@7!uOR$PQzPop(yf53V><6d`ncO~btii~=NH7wvsbT61`ZgaG3o+hx!W+>Wg zC5nL+P|L{wgJ*csA^r=__>seoyG=~USnF@OHvQwB)1QtXN+{vcfeEGDW|R@0z7_i! zt|1=<_iwRod0QtxbDZV%Jhks8{}nSzS{mvDh5fylmWIqva6`O*ITjqpE$;3q{;ByL zUB>ZKJKpM@cV?`!oe6DsGgbo#JaN1O@ZJ!%rBOd`&{fm{knR+Ef10EkHSU4RGk>8L zk!2eBxT0Vy?qE*zM<_4c0iXG%-f!ZtJUgTFwt&>U`s#J6;$Sd9W}=f_X0WjW8iVTT z;S}jMu{sa_sNTF%*xWDj+5YU^Tkj|n5)QdV$6ZjlO5%BN$ENWKeaikI?%Xtinrs&d z_g)>&z!KDMXuTd*B9V|g+#OUj(2U)=5~3humT_Oa%b#oTT<R2TC`lHB@k}2gIowpZ z(K4bhWwG;j;$XN@iB7&!{xNg|Sd{Q=Zu1y}iW9Fpe9@ArpTkcbC@=tH)#~O^#G4gi z=0V%a4mu5W+NNydB}u}sFZ5g&P5>+7kjyXygwPn~+fIEtX@q`0ow1y)Wuf0joxHm1 zq<Wh_0bFTh4v`^1(w0Xq+Bn!Y-L=qsv|>_wkLUG;DRd^HS06@+HUsb~19H1W%9$2S z{uzPULS}N-b&p<SVM^m+rmF9o-02;cVZP``9NI(tO(ozIxZWhm3qfETf~!t%`!;9l z3Ssv67L$~ADNeYuz5$C?PaOK3evuRSZvlXCKop6WNF$`Lpnqgy5%i5I<p$i}th?qN z-(M2b<Qp<hfsEp}Y&!^7QUcEFp>$QK5}Wo&tW~v3+Z1)cEv4mX)@gJaETGSlAzI}& zY;m|x-aji86%s)AU7r1Eb$q;M?LbV~;8~G5*a8d0P%1th-*uXi9l5o`DM!cDl%#%p zaN#P$2vQe?hb&roM&@!R!E)KoczqMe`~1v?p#1cznK;6N^HDsWExpuwR(T-r75+hD zVPnIuh~!7wBMzI$y5n&Env}Yqeh;b!<g~=U7zQ3LKpK}v+1GRLO?1}59|Se}cQ<rg zFw+DKUGpkWaUFNXe<A7W`zEd2|2)oTJMiABBl`gorbH63g3O!mwIx!k68nATc9RJi zAa<fX*C@M-wA;P<p<3U@3oJ}d#|**~?KC|Kok?{D%o}s;eH=2-!)c{)=im}HO$JU+ zk#$o|x$q&B5lWUg9^h20vwUu4^YD}|s-_0QW;4vQ?xg+OZoO*w1Z_c;K$7zE5RUE( zy4RzrUbzh;9fR4I7aVj5paJn<WBm7&Uq9zJ4Cf(`hxcwa@;FGp?%hj&lJJiaq_upX zXB-a)F+{Kea;xd1wRNcr5Tx?myP$KT2}N{8Q3P!+5w8JM%gW9uBxjo}E>Sl`fh!ye zcXnzB^P8I-P+;0a#~mvC+Xn<dmwb%vOa^rYaMBIC9%n^XPSx~_v3W(m!$@BpZTAM@ z$BsY;LNH(wq!=X590NPjm}^*Pf=8n#Cj0D0MWvmm2-GkWoKSv;Km5<Di=U5=D^<f8 zirjL!k$noD(J#iTWOd@L`xWo$+<IgpB~C<t0;r7_ab0sG+lw58@ktZGHn3Or$qeJ; zM843Sub1xbCwXm(zWGA*!VCTQZB28|{L-7*{iQ-E#3{%&qRj{6Za?jQFk<ke@$RU2 zp;^2SqdmWWqV8=~-^j~eKjXGtP}2B}@@0UnzojB!g=E~2YYYf#Yh=+1P%_lvy8du@ z*s)5>^4D~m-EzC0URw=<jToZQCwa~8bMM<54rkN0T7>8@Uk3WwpBmVOD~@04wADBx z6muM&_|l;%535>rJM;~7Yda$?99klUO+7wIhg~3TiicwL^eLY;N4yaOV4}i=ga`pI zh`8OEh9wu5k7_u{SggZx4_0~Mk=M`N(tP5GJ2uBwbHcritFm9_H1P|I8=J$oh`<5~ zdf0PCwDD)#4a>a&t`HhyeEk$!!CEvJTCQ!7&XsU?PQh9ETqDTT5ms(hJtkuzd1#;C zr$@_N>);maq+K&hX0&#mm&LUpdpq9*CE~1=k0L4M1;r1G5*bLBbmBJJgeyogc#WNo zSWNi>^UT~Xhfv0<;`(fWrr`ztjI+VOfe_J2F;8*SPAc{rmMaFd`;{iz_<*mZiVDlQ z&IoJm&dQAO6SZQfHt@!0*Ti4X&J$64!S4#X1JeEZ58t6Xn*3sv0kJ#)B8ybZEFij$ zcm!wsA_*C<C)}VOi5yeB7nI(1IjsJraBHz;fR*SFSda2N^B1j_1m7lq&z*D1khW%~ z5Ha9qZHB1hB;$vd_qaA&lvg9mH&Y5<4YRl&VR}3u>NjVcNixdO=ht$@fJQ1smi0d# zFq|c^)X#V*@%#BeLwv-vv>ViEw7B$z<S*a!<v0{-SMTL?k4pPwKD!~uZ%~t@H0XAL z$87I?6$3oYGW|D?crDQs*Ibg;pSHp1=8tBvXwE$sue#pPe~XHqURu@2g3~`12t#2z zwmeFfOAbLevHa@koOAV(Gx1H-J4D${C~4$F;V!2gIiWun;-T-}z1h8<HC-`!UBgo~ z$`9rl5R$5=lj>d|Z1;!@6a`Jj1E>f~K2cF)lBGYCTh+NHiZ2vRt8w&+E6xLVe?+lw zkr%JhmgP2#6Tc|=WvMr`)$a!VYRvCDCoN_bNJhBGi`vF7Xy5X)?DCkMf~bl8J0PEr zl&=>=E2<=cRwM`{PFBjoc2-+7+T-p#54*dso%r@q_+pbJ(IuGSltsw`;2JrQpis<G zpEf)I7sa;7H6_#6Fj**Vy~&pU;Km333#@N8rm$6T;f@KCei<~EFTSTSNT{kd`%ZD| z!s^q4T!57sWaG`FGzAxJLHCknpscl1c3CF!yRl6B3C|P1haT^#fz%-oBy9&}(cp)p zbB^Y}6lQ))0G(VDoDVY|2&GQ2UT@LND=@cm{X-KB!?nadGjsqi+@KpeAq)a!gl9J{ z(yJAr<fG1dazOw<9-?lF_8k`2+@-m{D7xVgnQ7m2nIrpcSHihy{{K^cN+2x5C75&X z(VPj7^q7#gr5Uqa0fjI;@fKO~sJsflSPR99b8;IPxF4luGBv2tvVQv=eA6rkpfI03 z?1y^H%tc4SwF3PvrD_QF7v;Y%6zOvcb&Iwk{&6mMl{b?kUm?(@eebZ=3we&Z@@EpZ zFwu&L$(%DQ!Wl5Y^sMpqGbm_Ci&M*RpxpMo<JVi0os~hR&ReGy3OsL0H_>)ki#>Bz zrH|-!`7(Hem%+)z<ZjzbaE(wjx+OXq+x&jlzkWKE@%Ql@h&2zBjf}LV_Ylj+_b<k! zy0L_0L7Vn)AIAL^!}&7>B#e1J^aoXCmzr<B4Lo()ssH_8@PntwQ1fZ2tVfe=yxFP7 zkK_W?7)id`+Qu1iiA!l^@8kK`pc%ZE`T2km9;1SHKBvp&0pzj?sw7hf`4}ZexMMCa z@JI(A{z>hwP(tlom8u&OSjbtNZZCulKANc?-5y~vs-1FT+wtDFe43h1(fvv{?dyoI zDZsj5CJO-@@oU&EQN2X|XHz>K+X-<QjM08xLaOOLOaJ{u=?KUDZYFwSk*tzYl6J2l zDhm(n_Ju!Qk70iqAn>vA(-9DhmzbML6<*<S;LciS?swq`T?^j>d;Qq{leM|^9q!#p zN3sn;6vD9jB8np-POn31Hr!XZ3X%+s8n4W$zc~bQkr}#>lyz3qt&N>y!nvv+LMJQ4 zJ|VjFu<i2Q<OgF)rp4yg8*}L?O)Zg5XP`Nw;)Imcicf2NEpej5DjZw6RQS$_{7HL) zTr88t?#;^nsk=|)pX@~2EIhnV5;Yi50QgZP15E2VAA$q0>haI!d_2V~2weDrP@A^Q zaFBz87y)1swfI_Bu%XA=QbD_AQLC+-tD%BWW0+6ZX+!nP?3LOCU3Q8!TIstXwGdZe z`ev~EOYz7#UKLM^NVLW`_M0oY;}WS1>hZ<pj>7^I%8NxWsNUtXV{U-nrM<BVz0onz zrbjTgPDRkzSZ>Z;+rKp}EM{i<vUGn?E#;K+pll89TE3p;o><u!OCCPYF8%S+QC{OQ z@B6~EwS|GJ3CX3bzXL#YDwjsRoylY4Z&}iA1}$GZ2~3|S>h-HKv?=>YM$6Eg)AtNq zb;uEj+r4%D`^wbo`3`5U2b+Pc>#v5n`$Wa0#ZvBnYmrmq`4pGhw$~?3gz6Ge4i(Ur z_QXi6E5jvd&<3;ghj&q6dzI(jca@>RWR|@vpp$GRWkAbw13@h7$1lYwG3BXLjKhW> zzTITsx4rAGd7=8_?Ku_CBj{%!?*ph-=6Rc6t}I3UmF>e;fdqvX?Qa(ZbyKgdHvA_H zQ-C{la-xjt#Z48^RGZe#Fsi_O9o(~3KI5~3svxjD@M8J#TV%vuCmxs%ds;dHq=VTv zIR>271Q7JI1=GWNKR71jy+GXKr<!!$0vLU3xuQhdJmTO$BWGh=-8yOqY!EgxOIveG z(?ZBu7)n1OZUXdS8vG<V64r?qL69YykqmHJyn9D{nLbvP`a`kRe94<z%^wQo7NLQ+ z9;w>A$5jR_QRPpGlh`s&bK1|FqBdbW{GER(APxDN`|4-g{r=M{OZZawWvnvTeCkkN zLEMZSJgao_q-MaugMhL2CD+H}_QH|$zR8qZbCDh4P*>UdhzSivYyEv~#%-m}DiKdA zI4=>31zlU8>&92y_T0uciynO-F22U?ouN?{bG=T^mn&;thFv!wSH4br!4$4Z7{u%t z6&py)*1xN9=6bE3lC`g_c$7d4phrTPTG}HDbvw-Kd}=9+-43I7E-ddjm`%!zP(#b( zx6X##jT{?Yy6DezfZd*Lels$rgUf)OXy(rL9Odri<2G4(e}UOrOCVfjGvc3{Ej2r) z<eZv-SO%UP$>#Z{>P019C8vV(<lehL3?vOSxgp$7UiyWqX!+XNbRI_a+ANTOn`!}* z*PPmxxg##<u2Cp4lPtOWU4y3jWN_qTFuDrNPN3|8@DQT%@+@F^X4u<{uDrGO--O&h zek=v~`j{`_^T@!RZwy66zBCFfG|)`Igc^mQuQ!MZl^e6_J(^T2(t!#ndN?Uw`a)XQ z4*g#82lX899M-11JRBSYzgJuo5g^86YQcT{_AbMBec$xoi^9ZO4Co>ZXE6!DmvvS) zLvM9fwP<wK=sx;xB&8dZIkhlo5}-FnEVKM`QiEQ@br=$q?l@P?<>>`CyzAqt>Q5gx zz+MLpv~Y@k6A!&gR5=X+_?dkz0`e_6t9b#we**Wbp6M*SwKHdE>Lrw^ND%3kQ!x70 zu;5-PI=~|RNNGWz+-f&_jO6y3sfF9(<9o<l_{^i|s5Yrm$vFG?b9#4?z+7_=e|VLT zkX#hXb24GX?j;)9u-sRyw*GVN@U!3VI2#(HB&??pRYQtnCdbdBr&joz=#Q?Q7s;F| zNVncz{I76kCiyubp67#$1LVUYk}eU7-|CqpKIz7sIkBHku}SxM2nuQcrY|7^2i9BY zxQuOh$Hj43D;qss{DB;L=7&I(Y3?(l=uq>xy{!adDOOyxr-eJJx~gm9=lmvPhSR0@ zu|xC}TgkeBgt9P{8!>u*OunE>G~0U(sBRF09k)Xyd-Y|$(q%8`3sm1Ydb^(YP<4;< zAV@Tlu-CgII;g@sE<|Ac2yU^7Y@c{<srAS)C2!8VkSC>a%>seX3*|(Nq1efn4S*Lv zLm!Uk?_RS6QqCHq?8zhYQaQ33zh?K_-X9+zPBvOAeUVq{P7cc5eGH-vrVh@p(0q|; zlI4Z>Ck(W9eHDH|!nX6ZEm;v=mpj>sz2GU?v-|aW_%8$FGO5CE^X{KjC>)mkA<+>X zXn}P!XJe8e#|vm_7v)w*6VPHiX*zgdotPiV<%=*k4v9joI18nd%<nD>ZyP9&=d+Hv zskDJxMZCMDb|c#i+i=b8Hv+eRc%|y>fwy{nJ(D{q#$^sCJs_I{P%tcOQ8D1{E&AXo z^io~&oBnrePjdHH4<vW(pw4Ri{v4>6K#Zbi(MT0c(ssh#!VHi#88p==B0o7NzGK-* zvwlXpOmv|D__Ox>$)`bpCt{Kr!~bCJy`q|my0BeT6r}}FKx&Yx(o~w#A|Opf6ok-G z>BJC`7HW_ddR0&mkPcEp4<&$fq<4@Ws`Nx!gb>g6T%0lf@BH`QHwG76W{<tsT64|$ zzRw%(PmNSu_(hjRvIAGr5zoFVPfC(~y!5@BkB<%tmkGSdi<mG=9_8~xGNMvqQ)Brt z+Pp(EZxYcG>+1|y*6r~g-$z4kh^vmW^7dh~;!)UP@U6<zV~%z&8emTQ`2R;?EEQ7b z@KpeF2ocH%hq$D{tP(<$`D5Qgw%0j;#&?Mxa{CZ*i3|Ybf}HK^2ov$FA?+Kh-CF{6 zwlw*Dy6)9$C?<aar2ThZscL0GlUE5_di)BXmL0F0*Q<R<-U9!}0`yp5z#(2O@7(@N zWiZ0pT#3iQ94y9)v{;!VnY`bv|1PbM*caFPw=F2DFAXxmEJa5$$3&WHqrW2LU)*9b z>)^d?1a6N)aXONK-JXV*Ju;ts_V1IL6v-xEBgA|pY_{%M5pq}3`9gnkE;^3(?EjfN zy6EeUF($d5eFG9jP_3#JrI;hFj-k}OKcCh;8{OPj>LptcX!)cs$%&44of6EYx+g<T z;(By=--5|Yb+J)a^nj63?mM)84vQ|yN|`X`cwQ=WM%YhwvzDB5wW!9lfI^8?P&Nuj zh{@Yut!vH@;>kfhP}w-KdF#DDv`~A2J=OjAO{}6LLGGrzQqg<h@#0B<ZW?mDKmuCQ zcvEFI(i|Sajx5p{B0mu7=;)Zy#`V%^FzXBZ?oaLlEfUcfQsm-{9#>nIu~V6*OYV#l z*r`6O++vgOGZnS#@thvs*y=yl7;E!))MZpF!dIBk2PVY&g@XC~zP&li_Duz#0}xO6 z8?yLNa-07>;-%EDj`De__(u^^Ec0x4Q`2_2+iDZbN=3(t0*T21<Xg*nY%|#KOr6t6 zAAW&KJGbfFzf=>pT6-POfGw37=!1tK0f`xK=+>e_ni-UNkXaz+;(6YhT1wwUX>rzP zXWO>+>-XIJTgpk$YLZTyyk_u0#`XfpMEql%M`91ujw`jWmj!0`KQJkxYxk(Xfg7#n z@%Axp>K@>e)93FrnWWiszt8#_=Ep*(SKZH;%2OlfHBe9(Yta?4?9b9xqFzAC(wVy_ z%0qiZuyky)XulU!`R3l+v#{R@C6sb7m9NL{vd|G_~cz_%FtJt8UMPwEml$e+Dy z*}@XVg&g?Z3vH}->~GBNq;_aqrB|$JDUE!3mZo^l9f9y+%P(<adrBQ%f5>_3+%NwZ zKysg7bZ%ovbYt!ZZH5vY?Ar7EbIcl4yx$EYN(#+1eO|f3q*x=6DRQ^ps>TOJ^bD2w z%DLEbbE<B5zMbLk_~ctB8*t~Ix{JR=%x@GJX{2{?<4BI?X+5Ao_%Jm4JygL<*@P+2 zlSLW$H1{lX)vvwKurWzsbKf`7p&k^ZKmYJxEjJ5?T^>Z^6iOWHb-SXfvjIS#ltNW} z@9GbM3cTS{P@~sza1%Y?>W;dqgKuVqO>Qw#r(0|~KRF3v^$}@{MW4_FNdMWvDP8-V z7Bnbbf%pecoE$da`ib<IX@~01^}cqu(CqDlGKNguoX&i)Z|Lj77Hf;&nzDL2x(?h? z@Dbzb*E!#{IS-96DU6Wspv`Ltyz#K5T59=moaK{6Elh*s4YS)W-BgoMbyn_?E(Be# zRIv-6P}%?$Z%#@=L~e;`>KP}c-{N_x_)3_R8`p=ZjDaT0VPHng)ihRe5KNpXl>O$y zHida1(0nTPx@*g_2rn5xVIXuiI~J)<1E{vjD}1N$?zd6$ch0GM_p`<>!NetYN2Yb( z8E02l)#}8J%6~&xHPm9SujNE6JW3heaZ$_Hc2Yq-cus3wH#bs?q882r9GEg&XAr%b z*jBlk?n2j#efPwYnZF=t(R}y7L(n{cLU+woQ&cOyqCC3hK8?cDb1h^BKofjQ%xKL3 z*%KQ(ivW!&tA!(!ovFR%=;+;!-?uv^0nxFh7F<WZB+t@~xJ^!vhSG(NQTm)nKP~~( ziu}<YgM+sxT3SI@L>+4^CZ1^XJSgLxwvx8uL>g;9$y1jwUfq0T`Dxm3HfaXeF~^+{ zXeQY7U=tQc!d@IJ+c>hM896v@W-+r=N0t{8REMeg(l*;!IJCK;g|`IHYbX^uWMz3- zM`s(k8^!HB)Dv_00{Z@<3VMZ@p*liVS*)ohG8WWZ#<TVr%+7v3&lKT(US(x6hNOen zYlU2&{ei$Yvu|Os%o0b@&aGv<wGJUbTf7Yw(!@bv7$5HpOJ-S^75-sgpV}8!>Kf~` zS5S(A))2^?+onn7N*_EE%+8W-xbsu>aJfu#75>=K-@5e=4>)IG>iCQ52Aj$?e{1U- zDsSjBT+P>8B9&bA2ssleXMrYSp6^nrO-2w0Mhe+naq*p6KnBXq0(_D}n7*-vP59Wo z3hq#v%u6|0P5KQ4kyZsiCzvENa_K}IzV7P6+BjvLpgJeD>hfnY%Q2%e|9vr{WKTHR zaE$s1$Bo7Yqp-7w&oc%Z^CJ3);vq5lnRC-l11v3L9G}Xbv1&PM|GJ-N+>*J;<aKms z1N-c1>^;`#Nr74D6;3O2U#rnQ@?9Xf9zRvW+p7=A0|P=86;b?Y--}T4hnzRFvP`TU zQ&`>aeZBaB_XYQ2{9cg$u%#$*y^WWCtU68M1z?s4%Nr3}s(~R{=HUt5r^i>LqqHuJ z0G%iXUs{smQlr#PJt*9LM|DtvW4TFH>eu(K4j(}3B$SPmd>E@u*yc6NDu35^`g7{g zPHFJ*FNgnuss27FQarnB8Fa39De+Cc{Os&5tg%Teqvvd53Axq4+D4ktg)D<Qb_80J z<X~QSIPWFgnCZlmF2T>Od8=fabqjPWTuz&C97BHf6>0SREF8|7+fri^RRnjr@kzc= zFg`8<HvS94O?q#;EP2iMnLG`e{9F?4)@vc5Fo6`9-B)=0%O`es97K8nVS@ZB-vW~^ zE&Ri*(Gk`o4nFNI=o3ZfH(&*ps&I)nW!qa)LHBwaAa{Rs-nIOpj=YqJAna)qCu8u$ z?Rm}&gW7S1_IFOgx2~)4-!ks}OI813t?1XhFv*_14Q|yoJ&(!N%QKyyj}*0Y5e<tf zeSJ5k5yZL;rdQkt;+jLZ;kA^W>iu(vzmw{{yNC(1a=|hk71VQFSK9g9C0A<}CRy>* z>#<}>yj6h5#5_$?1!oB`F&$E|>0K}0{i;wAqZZ@6pArK>bAsFaL|fP=Fe}L6L(!W# zi8~DSE4}>1#O(oEs(vetVRJ}lnx659Kd;p+(!&-zW@*f)-94Bf_?f90Utg<7dSS&B zYZYZ$c4C74M_-92>~*Esx9d`Y!X}SB-<i(c$7SfT<UGz3>wKQm)nDtnW2ItRyaA(~ z)2f)geNHeel{J++?%vxgJ1Ob7*yZT-h?Bkd)nL|s8#gYUKM8B|n-7`E-C7!aXN#p@ zGfG~o0U>kgyrkspO@HojU#0x%SrhXaD=xX1`>}VW%>s$(3~(~Imasb54&v%x#8mQd z;438H1~$UWQhU=7vB}csmO6kdHBA8MvzL<fJo8L|m`u9~11qigc&ezqyGehk5Dz-u zHqjH-(8Qn)OK~DLav7EZYI{&IN<AWdlm98Eg*Tfh+-SAvMnSdtfFxE+cW$I_&X3>+ zo+J@xwc>$$CzWC8QN$lgTN{K4=Tiuqj__5*5zdM^bNfHY8clQr3hGt4xqnNSC7CRz zLTF%~>{eF~;ZHBW$&25P&iqTI^$fl8m&$D67i`j>+ff<N65qrV<-#=TZoF`?l?|j( ziLGzHyKq=qUqLo-1mp(vPDlRUGiO-?4!&#mnRiv?uI_x99PkLj>ydA%mnB#+nvqh( zZ>~KY_A9U~Mj^Ex{G~D$%_qi2;5e2dW2p!8tv2e>k?e+LzZuFw_dqgFzO}nOaqjo& zXI%rrwUt`{tL{<g^xELI;lvIn`3I#~z4i=<Rq=%Pzs+Emfh%;S0Ck~1H|Z&59>(>V ze5PHsVVH1J0PHIIeeVRS1|&5(@Y0f6Q$&JlS`e<;y~>$35}eOsxyvu-+z4-DT7i~7 zw}cYieGR{nDqAVsgwEO%hDNfdfw`qd>X%P}Oxcu^V(|aD>XPx$V4Q6>X{H_GNc=FF zR5MvFK5a2|;b^;sW4>g~_A)i2)JS7z1fkz!p+(-abCB5*NwJ_+@p|QSq^5tjHteQb zyoX%rxdLAiAZXh3Mf$yAfFdPH(r`uy)MBf=nDMp_*7K}>iX8xm_2M0H$O&TV0)xU1 zJIZ?gj{o3Mp)U@Y!MIoksUtzbzHmI^JXx^0`SfWjdxW(d|K`s*|8ep4Pk*UIW1IZn z_`I&W*~GiS32xB@9D5?^U@l$ev7Np2)e-eCWa3SZt&ygJ;PP<#AjXH?$N7^GBHgp5 z5ns9`22E|Mg=u45MGlJv`AmVBGXN`(3AJK6RFa*b=tX*ek#uFzUF~vuT#EmKDgpOY zDyjhnd~g2}e6~n?w88TvxK2-~W`&rz*^du@ayT9=GLt5UIK|kHrfqSi)!Wd??%JfK zn~ERfPJ(-__lw5Yz*RCI)7IZ_=ZxouxHTvljcopYVC9f<F_AH7HuOw1apEvGBn28q z7AYo~p0>%#8P%hc6{fCdou9*hG($cg%{QGQ<mKaa&6d9;H_@dGtmY2q%YQivI)1Z; z^sUhIgvjA7yVSj`BGw6K`JMf@*E`-#wbA|>Ji3DT%y#2`>iV=<c1RcATw0dXzH=}t zCAZ_0YmWx$e=(3Mf%)1#)*zllQEj}i7;NO>VJSRPrGTmWWolP0)EMcN?(pdDqaDuj z?b02~RCS~?HVe7c1!lrMhv$)|*V{}j6UFYRFjQUad%pyo^|w7d%s~W0n5gcPx{BQZ z?xV&(fM~<1@~<X=QAOt5CTz(WRxf1$aJwZ8_9TtQ)-^x4f6NNx{q-+^O8i+jnm7R} z>-9OLorNvJIlI2D4w-I(@;>D;|E;VqZ>a0pVR?DH>73(<`%$4aYRODV=|*`Jvv`mB zw;kQa{gI{=)yE9WG~A;_!K6hw@+~6M%Qdjj6TI?qf}j=9j$7a=8c>!-R;p*Tq(B3k zxGgs-EMSQpj@+g&0kLOSf3&*sKum|r2zsG_<yxJflpiveIksmCgZ+wbv8#U%Uv(A8 zR7z9#iT<~Mxtx8~&(gj+HeDM-RZ3LrJ{QYvq)Vi|J_j^MnqVJ+rK?7~K#Aln2WDeH z)>qfJ*bp4ua+>H;$TSFSKKp|=10gmE_4Z6jzG?gEa+%FCLWB><f^<4L5BMF!kLKBf zmO<!42zP(3Y{K-538GrTy=&SNhA&sSN)5yM{~=hy{W*UrD^4ap8Ly&)UwARfCk5P) zN*bPEZkJuYzj}GlX~UmdIZ+%Pk<r>hgHAPzo7%Q0fOez(Th8WA%Pq727aYSh#GrP6 z(2%cm(Q<df`qTQvUL99Zip{IR3)47ED~ijXiKH=atSFbW$;RBLro~^y;kv7{Ru4g= zILQ}_kV*TxqnSaP>?|7Mb0xvT8-vFY$AE~gX4q1V2(ciB7A;3wQIjq$E$G#rUT<z1 zvors5H~IGY)8kS(9YS)4G|{dk@29U;0<7^K9W3#vAW~iOi_M?6t^mO?cHQy^VX&Q@ za)a<Q*|a8R5?WcC(0Oz}#$X@{9|34ty(dl7kr@#?P4pYef@8oP?@p>_s!83KLCEwA zT$r(&f+lO+^ul)rWs!yoEP*`96eQ?)1by8n@3-3FqZzFDJO^2+fqp)O;j4Q;tRv>k zktJvkJ2w>jc;^2qHA~TKUwB`mEF|C26e8-Rb1Tlg<JJ4-(?z!H<RWXsvn+owptpv% zI*ty?Km9hzE-PApdA~Q?9!PR@B^=e|ks=?X^@p98aplPhLQ#abZ($mBk`d{*5?kgk zj#Z~3FZR#+@MD7y5}<D*AhH-XA~>{3TrGdf$$K((zGw5~WV-L?&(g8r!P}h=EE(mX zs71484iciHrs+CyARAsXy~(649-2%0#*g?C_YRcVtvtSY0NhlJ+FB~7H?Yl2!d1Gm zBSy@*KhI_wN+EF=*;CK$y|aJweZ^+7uE)O;8u+1Wl&!XT`qU?tS`nYJgD<Q9c$M&s ziH`Z--h%<kIX1Fn<@nbToL@cwu-RnR;CbY+ntly&^#1zB7rXM}CW!Ctis3}9>QPMg zD6<EhVVRXA@29zlU1df99W)p%U0dvyh_Ehbjk40!A~!~W40-N$V|21`EKAEv;PwS( z7>W?FRSwK~O>MW6n0v~1lh(8bc$zYzt&z6Mw}6<H<PHzYt=M)p*^1ecfzQ6mjsn;e zt=SxO=Gi=o^F&e?7x{d&1Ofm3sxDmk$zLk>P|f`!8R(0enEfXWHJ^{vr6sxKzTQ@W zlpy6kpDO*#nt9?25p6%uezzeBV#qz-DB203CQB8XSRmoj#(P4aU&=9kH~ea}x%wF} z^Br?>HTaww?-u8WF3qcaNMdJ<Qc~e@@?P^7fTi;SJ3=r*f@~=O=lC9KoGy7sry*-+ zFJr@!2d@_icySd4T!2K@VaaW~PjD}Rs@^*Xy$?$EKxAK%pX<^Z^F!&W(pP;cQAdGt zj-Gy#qKTu8KK1vyGlxO}9rf<5@ioYGU!5fdT}>52*ZT?T$-~53>{3y=Rd)kS{?JU| z4skrh$Dr%ezm}J5)_(hNR5PsczveYB&+E^p)W`NTLh;UZrJGDn^^nMAEay?|J$31c zzf_y+nij<F=I0qb4fUek6#i-Q?J}Zn$6h-})ejkk+GSCm>0}%A>(^<e%)7@R_5nye z;CqqI0Du?yZ72?sPshnM7NoO}tyUt;M8nXMijnH3{68K@D$a^XvlvOL_vtqP6!wMm z?b`0F=_~PLhnpA9w2G94&ax=H3yxjR$*u+F9igELz1MCs`prZfWn2Q1GKuLQ&$98o z;|(<o)dboKS@}Ck42TJ6q|7Ir0zMjQl13kIY^MFTTfWRt1f1);gE93r8B?S|EyFcC z{!&d%5U07O+<JwkRjv706qdIv2GOZq^XG{`-(_jed7(XpvB>pErtbHV9zx-~f$}$x zc*|ZucFVG@sDQ%bNS!cbm6_LaZR!rq<yAde*bmCwsls0>*R}-`ND^psScn9WT?tsd zNwY@;w`rxY+OWrV;l3XMhCpx`$NjZN|A^lUF}xxqRL-=C;{wx8$X@!BGPB}Kn$PY_ z+#TI76>VGKX}U`Cd@OGlnFrKCEZU(8H>$(8zF;BI?x-tGVkEitNrMeed6iuA>b6KT z6;R?)aHm?p{U2*U$So0a-O2I+5fgieqDO-D(JCVcub3LgOysnF*YDA0gt(^j03Tw< zr#+dURT(^`*~-zrZ~Ak|HeK(03sx0@s@g2JwXyg6$uA-#xT?{<TXxU$vS;xAYO{t_ z%X`)abtKOU_`I80c(Hq(n?kh4gX?;N-6LA&>F-{=&|YeOugu+9nAMWii+a<N#Wd6W ziP5{z7UMR2XaO-Pi#gV6#5PtX?)Fo^AEWS>P9VZ%lpq>Ih-wC>N3put@N^INSy|8P zd+DDrY0}^b6t%Bhv21oG$$xW#be_$jxZeKsYcqg-6xq2#I9hH$@oP2J=7_sz?j*<d zP=~3j`y9u8NKfPX)28aNZSg&~Kg+dMwJL)8oj;+#5|Mdb3yNwI9aoh4YOIEDaM+dE zF+EaJ22e}P3y`}fuW^+|gxC%pT|h&EU0|`(X|!9?dKf6Rs;bW+ys>a*DG$x{l^P=( z*q2(747v==EH~LEHoRa3W)j1$=U$`VZnvPfEaTO^GCC9_(cwiuolwknqrHA#THp-p z0$f<OXAk<{{-tt0OZ!Vz2hf;l0AWlxMw9ev8FgvvXmrD$IlcArwk`5?WpJ@=9IE%x zQ)Poer@jA$4#XNx8}A@9$U?F<{y6FpsW@_Z{?3w$pgQC{;{?rg{S(mR&Qa;hZxnS( zV7G30xyxXURI{(Fir#EFo-=y^y#>p>-XuJ~MbtYNv#t{{Vk~F(@P}wc6Qo{^nFM8B z_7hop0%odaQ2Tx*M<_kp9!@{W-k%W7oD7J3X7s#wDBQ@`2wIZu8w@5UyP#h>8H%;B z9!OV9eyIR8Q1`;3DXhO-wk(Cmd^NK-IIB*Q@`Yya&6ySV#osHvy3YMFbi*_S(*~k3 z-@v{#B|+OJj#*lXUAH&NqN6m<;e9xp7p-VEESZOQUY3n+^EI&ztGT<voy)mG)jQYt zTnF@&t49r$?Db*|M<lEM?61tV2sJF9mgeg1f3sv9S|+TANJn$fBaXO?ccvdb4Ad~B zs!_0s8bPME5w?amilj@JDw+e&JOVtcG;ipYmwXdVB7MxnhT(3B2OG3q?8-n$gYLF^ zmG{Mb^Url5jq63G7*!V`wXe1k&H9UGtW4)0CNosiso!q?XE_H-Ro}bIW|(VjOL}1^ zA@A#|LbZzBPA{I#nh_hPjs>X{09KT_WUMa;u?%8D>MuVJoY>MGSx?s~GU+sWNMtpL zA-&B{0mlEd3*Y}z9f%--O6p=90D+K6%<>f{%x5e$LSIl?hZ(9C>|ytfI`6<O?|9xL zwg?7w<$5!)_B;Bs1$K3w9EV{A6P)5^9vNo;$-YZt5PEO}y=oy$lWUDsc!+MZ<gFR` z`Y|tt=3{Uapuvh-KXjVTszacs&k+ujFwT{2GF2xf<72!gr;!4?H~q%3v8}lDg_Z?Y zi5(32o}^m|xYc#eBB|DD-a=YRS1<|!z7sRPXT%n7JT)_ICNaeq{aXFN@H+Tw;bv$v zP-(y%<df2xd)bpl%yucehoTu1wU|rfn}od2c=+u>BSOu4*Mbfhx2KfShj+;zZZdk_ zTUl9)Wg!a_YQEMZ04h`!od5#G(0(dSLZ{JYq)UbDieiTk(jXdTI^x1T)1AXtL>a17 zrK!IpTyufKz7PjPGKm)HpQ(TIiznqG3SKQUR(R<p1oO7rK-H@so@SM&J`5xMP*hvP zeyL%2wQ9XOZNuU`SgIlF6tU`FLOtiJN|?ve69lGa=2XO<`g;k)3Dd^fJ<lk42Vmf< znt=dXiyRmj^mSA)U4dge-)HT+p%=e@#?b&)nVn>1I0SbG>?~I|wF{AGqcnS5lF$t2 zMT<gCkUDsv!AW#r2A}t_(D%_KSp_g0>yE!{44hW5sSnd#`CtU)GJa{lT9QFBqR;>m zY=yQAk{BA;iM};6P{12Nl<rQe<B9!I#TCQ7lAR<uH%GdQb5V=u0p3&zYrn5DA%~Zd zFzv{;n~<d|9jJ0$zh%{)>Ll(usI`RD_7L4p;cOnx|M)dx=e%^-Inhv>6Qglf^m3Xo zk84Z)TC&SMvo<e#F>xtEInb>E=bLsBW8N1!Wn8XiIDauh*9b1U9pK!`p;(qreKY`z zCk%%A^KVgvMh+#z*-tE*(sKKcK1rY5N0od!&zja)f$aBTW$pCUCj<~nWAhw;U$&fQ z(4Y8?v=w<XluaQrD!oYg;wwkE|Cj3X|M#559wc47>(ap(8hyZ=8+q0FO>^bawC%p! zmAhD;d!j?xhL30iZodzpd3bBQe->$Ug~De_%A7Mbc3UrFzIS25Fz&um7+-8>y&|yd z5hmU<hMv@g+JD%T`)$>PkB-7?3~$R$jI;J4tySQn9qHoDF%C90;}U#d__=ZVVz*;T z4$oajHCnnCIY3xn0$?6IA!=F{u;OADV5jhwg?m@&T@u(SKV!x>)9HsY34=h6JLj}f zio*Rz{;<QiLoxrHL|{+-M54p9qoom`+?odb89TtI{Iim<=JO&ghe7n3U@ZlIz69BY zmkg;!F)U1N@bVHUX@2+M5gXFKK6JWHu9{EUW;)1gymuxzcw5Az(MLBfS7D6}V+(07 zIzp9*G;PmGZ7nIK@5Sa-=R3-DupX_KU%D*BiN3r18XL|ZC><fqWylP8@2NyZjR<7< z*f2LGlNFof$6lYA7{Pr}nS*%XH;OL9FIEF}Exmc03q3ohb3w9`5M+zpx(L|UtE*#I zje*N_)gY@Sh;ftmQeY1ps@v#Q?s57|v_(*Ji&F8K(A7#2su({6F_Dh-YjBf@8#)g7 zYIAiMZ8<!9Qq0vdQXNp;g;Bs$q{Joln8uQyKb<(;n?4=Ap5CB-Z@aHnv@O7Mg|+Da zve%_8W`x#*Lk}5L|G1U#&1s{=`@anR%u*_T@|D`CQ{#@e_oUZ<|MJZmy%fvh*mS+B zrhdZNy1F{uz2<69%X5zReC2{KT}+w@6^fw0RBEwk2*DoshgFj-7JC7Z9WCPr$sB-m zzr%14gsgl-1afAYf(mAw=<Ld?MooJvG?V8-=<_k%F#m`}vgTK06scypJ)LtbGv<{o z0)Ccp|EyywM*9=`eh+w_TnynAjToccA1tbH@IOD~ECXh%vrU;-rI)pRI%3h%c5WM1 zM^eg%r67WNL9B5ny;kNw6eEvq#BV4hpCwv!unxk~WeJ@@zBS$e<+OpW=3KBG`_1T} z1?q|IdtENHI&{VH@}Wj*ao-R4#y&vVt%+(aa!HQT=_13$vuD2~_A(=kySIDHA}RrJ zg}}cv>plrMvn~Op6!AqDDSq)NePVvF-BkB*e7xObSjExnTIs+})myHK`c2Uc;sjbQ zTv1N=Gu%t)1I878vo;LB%si`k>$cz9FVKq^@-qk{n=WKYATl-f<_~M1mqBui9uAeK z*g^7z^lIpLc7FvTq+J2TOiI?~grfU%`#g+H&Q{E#Y!uVCFZw94YMM+)@33_2xkqln zxE|eiEET-`^~7cz1wzKE6NPYzzc_Q#v+3d0^V84pdYN61C$j4L5uNkkA(`A!nK`3g z-OoE6tx78!wDL)!0md=!Za4quO9YHV|M}d8<@m;TUG1iiOw&K!N$-Ki3w&Tw3-(ae zta$;<HCLfmO389)gNap~g+Uv}%hSipW}8JvI>Ad2M8|yzPq9%t;anyg5JBzDSH)zM zMDVhoZ;T{~=rmexc!-iSHnV8zFg_#M4pj}(aZFpZq8Fw@Se+u)#eH4zI{oI3Mos)9 zc4H=euYXF!1Cm{il}Sx?J5r))CE+O2<(tzJ{ecC?kDbcTj3vAPfIq6Wn*cduROSZc z#$N!rG59~fT7zE{8NzO334^5CgqVy%`~~y!%3AG@tR~QeoI?rGoUGbrP9y?4Au}gp zG$ivXZ_aUI@^0SBe4=#p6*|7%jQX9y$4l-RF_4!FnKQrS*wf`%&N5DK|HO44FYkE; zkswy<7NC{}Nj9?#W^>XGKWFahtm_5P$=7uKfJn;jUCTuES0r>t6E9)rQ9Y&dRlany zi?jU;@dN6K^fW)m!k_A1`Q~lzj<<JX9L(kKA5yy)NkavImjZ5OwwO0vAfX?R?(T^A zc)i5oVnpckhp>-P|M?CL;hIb6K(TGRI^J8u&QG+A)!=^g3Caq$Lsupp)vZarI*Aql zcsWOnze^(1S}9Ax%|P(Y*NlN$af41z2%T?%qPzEWXt;#Y;EU^W92b<$%VTk<8E{ys zrz#N?O}RnBwt26ZN;#&}U>jL9xzWeR91#zNA=?ZKl=@@u+fA8%uzZtVPm~Kob+Jyp zcHY~t?6Jg=3bNAD0tgwus(Zn7^iU+sPQ510yx@?}Xq7c+3Bl$t&skrFwrIkZ=`7q) zSL!Re_V6opsGR^uzdq1AjbB8aaQgxim7x28lox`xL4ql0Fe7Sl05F48;bfL{CEE#> zdYN+_UNHEB8abv~<XoUAPccY<QPeJCKg~d!D2c9~^J$-!*_KO6_PpZal0ADT`iUdr z+MA6VrwOr=%{`ipF4M7{N;;kU648XnCrP^}k1j3iH^kb=sx)L6P`ogDq*vB{d1R#_ zv1)hQF}|utUm(wxOWdzPANVY1(EfDldfZ54OT3hI{YFi~25TE{`_+kh`P-$1KD?=U z7V`twJK$IQ@Lqy91($!9I)TE|X_BrlP*~2+$pv^cWz)tVa(&YynehIrle&O9NeZZw zBJzKd04eWuDCSk3qx?~7!GdL_n2X7r=3TC5bz;}P(9>?-EH&%$=V>OgI4tXo+l=Iw zHOakR6QXZBX6dA&3A~aR=VMoE;kkT=;HsNN%GY%y8>dpU)jQk79J{pEyWh&##mXS? z(*E}wh#r^{<Zh3`4IgXTX){%SGdC73-x^>}w+65`DsXB`;#_S>KU^?QN#1S}GtYNz zjoZK~>D984#g5af5thFuCnhJNv`k7?7;|ENvikq`RYx~V5ncXQD~L&{_W4c)2~!=O zJbh&~E;pa~TPjztri+uTfX>7d;$YC5)V3qpBe@-S?g*Q=LU9^-G7!0m1~5q<!U*|g z2%H2>z?^WYNE9y=6P@X+O{Adlsao)ZEkyYPW9=J4H&5f%HvkEOa|E$DT$!H89^J&> z|H`^#Fo*Q&pvZRY3B-Rfy!34($(<~k9fX$*l|Eyc?tNGT7ydnzTr&obJ$d|qBJ6tH zvYQ_<P4Z!^LuBcJBP7%ZvLu}$zF)u9BNS)@pI*A#;dTHG*idFCNH;wo4wFL8;w6eC z@@xY(*>4A%*58VfF!mXbrUf>>TZBqO!dm$fgOb~h^3f5OqSI|5<0KP$p~p4aw3@4y znS@T0U4L$*kx$=Qp031rj`&!4xT}Q>a-f=E-74?-z8V&OAZj+}EGin_G@`SnT_bfN zdcL-h%t1)T*OcSMc`1@0<2kxWtuOseYPBCZD3Yc>h{u779E%n@Ey*XB!X53u^)AtA zy`I`N8Be9B64|iaQg=aJzcIdxqj3j?e$gzh9#8&hexS+j!qcUMMmeo3G83${MpiNm zh;Bguv#~*6LSk>S@2L;JoQi1*IMf}(Nb1t9t{9h)P!#6-lAF_BY1;gwTCw$A_XAqc z;{$ooAO7+VC(ilBBu>4niV#AydVvnlrmkdC)F7SLqf;8IiHd_N0w`Enctg&gb?iWt zOJR%alcYY~FLH5a^s@E-TmQp1<lCtlh%if8bn9`rXResh(@w5f`J3y)ew+CKDzVY1 z7Q^N%H>7B_q;&{knQAFeXZTtZ!6C<h_Imx3+ItCi+_peR0h^OGiO$iU_)~$S7u87< zv)yEkVc)(>dwVue3rGthw5<JiKR)tW^rbax!2l}A;)}hXOGsyB=3mXWx;4Yq?RVnI z4wc=R&D>BR0-Y|8EINjRW1KwG<;R_E34NT^TaG8vZ=P$NK0*5idmr(BoFZYq19%^7 zJ-V$B`fxmHc=>lp_IbLv0@WhEPHq%kjAo<vr7uF9eq|ZTZ^J!z6?eNH6v=#E@^QrA z<i1Ut_S~qgtxCF?BXZ6pF2HqL*LU3-h+NGe<R-W$YE=<!I88qFA;u-Lo1!7}KssDd zuE)G05fpmp<;z-Nyd`UZjNA0Ma?L3DYlA>fy3;*Tzqw-X$*KvFXt&Ea1AOWnCqA&n zv)l%<jW!Y>USM58vG`y2g$%)~u8acfZej$+HgSAUx|HU_&jD>jt_OsW<Ijy6Dzg7e z<@W<9D~;Ggq#=w*o#pm=NXWsdk9tPi8tl{3Yu}oyrBVsrp=TF;cmUcl`vK@00O6x> zjgrNSw6nh-VY4X2OIl%#*q-JcmiuI<wGe`RE2kW=t5(9_EbLqiM(Zy`mfzgq?|z`K zRAl{K*78OfZt^8jB4;{Idzmd+NY**B$MV~KhA-=^Q_n3qFeJ}bPYBoHX+{|MXDt1R zd(lQO>RrM6hc?N9n!bh^)aE31&Dc(VPWg#w_E7)n#F@^M2<j_>cPm5SXBUFz>j&Q_ z<^W?2=_71y!dkzC#Bxo#s*d*g*&YGGj3d=aKTDv<q*3HS6>NHkHfNh|%1utbGp{N& zXSz<n$vFYB^khkr-xBzOv8AO08x*=ZqV6_ty($Fd%RJZc0>YupL!xN~Gaf2Aw>>Pc zZmPLkU774!Z*}L@TeD`Fz2`Ng@ov#LMv#-AYX*z{njYH!rVg`!MNP6>Sy&U%^(wrp z$;BKTqzpogqr)hI3xLBtyzWKvS`C&rEZBN<X1Y2y*c}W)MydmI1)~#V#Ro!1r;U<X zs<K+HS18xSqkjOUjaTx{mAsBZByT@rRydKd$Wb;s`Dgu@cK9X#V1L8j`3)efT~Txi zLkr_&ZX6Pm5NMXgTG=*5p#!ySXpnP1Ke(EuT-<%{LhPSuosMq&RX@C*`pnD>BQF%E z%h+{a@Dd*Y#I&oE<VLb<6LXIe=J~J@yPaMAh)V4*3iqkF1La@irmaGGsUnxgOvMM@ z+ay&wP<)v<z$}l26~g{B&_iDV_cKj=*BNaM>UcJTY^YB<@Aj)|fz8;#MUD5fHD<QW z`8B);>ck0%gWJd|ge`O8dOPH*S}_c2<bT<$)@=I@kns^`I<qcvn$}cT+Ov$WNwkN< zM1opLJ})X_ZP;bYSLFXvy|aaEJ<G5fs0W?PD@bP?VYjmLdtru|Hi^;pCr=!*?xO<8 ztb`>!Mkgan`DAqjGaWFdaF#%P6cS&PozS<6jf-(YuplGb>e1gB9$?5ScJl(|qj9EQ za$n8;a$nqR6|fg9z+^EcJv4q9-~G*dHGHf}SGC1l!?|Q7;4TMUoz~zMpsEqYOTNb` z5T+?d4CjA3!>!SN-4e#2yBC_|P@cl|Gl(DvgT%`i9~AwRHeGc0mSFH5CCZ^I)}M`# zAE<l>Nh?Y3Xf%<GU3jCdFD&@yHTUkyWX-?W-E2J~Z($zEd$eV8;pfShl!8lp986tD zuz)@kWRTUM)#{?JXx0YSWz%TgYz%=uu{a|vh-Mf<T1c*@O^m~2wQOV_W#;+#uDdRS zSeDr>iMwkz=Kq+0$W?F7?N7R@BfHwq=pK&wOOm|TyFhl+7aTpAT6kuc?o-A}i#=^( z%FD@x>CB1W(^-jKVbVJyM#JL1N`)I`PYIDEa{L{y=dB5IlN={NRO*J?aV7DEH^Xql z@QsNTom;-6x3}-Kniz&Zc-B!g`afXnida$xFghBiEx%iqXFkE*S{J*dw97}Hc1oS? zRxhWskPwc`bdJfb3)ibp`{nsB%xDUJj#UbifPD1vY>U0%&~#zgN^dAQcCGodi;EOG z$^OvV!j^Rf%w$hIY9R8F5H0m{r6IQPye>cS_OdISMqWI3?tzYBQWPdcH2A<kteF7# zQ6lOHoP(V;#03U~N!gfmST)xa&l4g0t70Qpc#K^_6GbjHrqo8mme9cmASNpZ3g7t4 z(bAnq@bDjJOZB_m-!Zqx#3|=DPnvSS!2q9f!NP*MOk4M)R2LS~dcJJwGyK)*1JnB{ zA|sJEx<Rh4BER}zzZlL_c+6Bs-MJk4o>|Ojx^OZFe%ri$fyCLYHPtfs_|Ln&HY*T@ zY$Bc!;D6H+>HK>aLHb?xksNemJD3$rB4Tt1kQTU9+q__q<-}p5PP_b=Vv7tp_>bne zhTcBLB&!w^CBIhk6?y*TxGn4MH;$LskX4Qs_xj>@A;;rytq8%sjsh9sNqncqB7lIS z*aN5sJCvlBWZyG%MN4m;sro2Xat+#t1wS5Q*Px}D7xFs7WQr^9RjMB~W;jeM4oWI` zT7R*x25wXxriftaEuS-|=NCUDUvb{&jZdNu^sB{464xV?nMiB8cYzQrUFFSz9?iIi zg7IpV^zWdo{U~cn|HA&HE}(JRYNkjus^J-q-=~P{Jtn#E6qHr|&P~_x>#$gve_*!~ zCvXNE`h{U55%bB)4NYaK9hL$J5Hj#ufAwln*%y)8XUJk6_Qf3KTca-<#+pR7=J|(g z{{+LNyxviH+om;t^cg_s{&c8U&r8cyjWeFn5D1n2_3ic{>!Jrx<FolXeuH_Q$VC>r z@!Xr#uPqN8nl6r_*24;ZI4U0GA*n6(#|FC3q?s)-q^+efM2(o6MM_^XZnuB8Zl4F6 zqHwh=g-J_Wv2Pl2e%LM;8iZff=+L6vK@N`8_x#?VNFqT-L%SsyoH{IDPf=e*Oh0i= z_34ZCi2Wis*O99Za>OiJ)`az;J!~ek_Wk6Z(O$3!N#H9fNH?`*<CR3Uiz`ocS&WHo zoOE=hK%WSY_atr@7*52#8j?^HDNtKF#_BSUvNI@b8*(hJmk->vQYIOEmuC+z6)Y$D z5hJa1jG@9EHgWgzN8L~-3_g%HaA=BTfc~z|l~T!Sg=W&9rh32MKMoIA=Y}oKh|Z^- zP+k$jWGMM+!OVtUL5Hj2WaT5l?~(RB=V(q32Z0M212LNtVVg{$0=^q&U6NiNS)~Ff z{`tmmYI&QoHIqb!hdR!Nd3M-fbW{NqSkj^E=|!L1cf2=AX#4{0R=ndp|JaRD@)n}1 zL#&H-*<<9A!ekOMWor=?fz$CUL1q9qWV+7@_lLapyH=^e+sr1*+GnYNLeK>8h%CY< zfnKKN>LQPx_BdJSl{>yWfd>p?_{JadoZERg>fFp~X<)>k$|c@-!kQJ2rFO2bS}h?X z%sv^uSn;tPE`f@Qx(HmQ9iWC^eQC>sOe)8L<S00_ePreiQlRO>r?D6`^_R)2VPjt9 z@lrQQYFK?~2Imh?YipUl$8CHSH)K{)JVX3toQ&8e`-$v&SUF~~CjBW5RcDT_llmV- z_Ryx=8z~DR(ZCxL!{lWc{D#w+gcz^fdF*-T%3yafg!6>vk*>B|gG;HlqeK?_@t{*w zIosj0_V{PWN{ed3AbR&OS`A`TO*<0*Q|F=xVF1>L^IVP%NtYhsAF0k@b=-T2WuDb$ zvgdtih41cg0cPw#QRhiM97Pf2_x@5vmLB897uw8}?AEnNFrFf9q4K)Agt;`5hT*x- zKOUT|KR$F4?WHIflQ>T`s;qdNg0w$#H-4ObYJ^;9>bn4hb`9d>2<ej7H*{st9gQfH z;VZxAZ?3!nA3a?M2EL;${?|toZ{WB5zz+k|Z5e%b?XAZ@9SdU}FwB$a_GUKnL!t~i z1gB$<KNHnRxXx-hrS&^G+-9yPW6ygGzKDuCHKRz_#xGNRuL3cx6MNf4a0K+bw_-gd z*V-pn$NH*?n9IFE+QnDg2QO)Ot2e8^>k(aBl1u?`aS_a;-fuOnZASarO3+6o*bn>& z%Dyu?!(goH^z<iBPSWC>dA3%c7v8kwr}im?<keZ2Es?5phTVG^rKeatAWtRuTJ%@X z?W7tp01<9s-A(DgQ(L#+&HM-X2Wwv=Wp(dY69d7cvP3o+$P!w^<ROF-^+HW9A76g= z`Rt!g)>mkl%wE)6q=WJ+hK*#Z`S=O1(|U*S6pa*M6iGjdkO{p{hu$dixL!=pE!uRn zJ}QipZ_VWiZ=pF&|JaTCKUNOcH(u6Zim)RvgxZ6b;tX>)*>&>G^xiqcQJ!MLCarwa z*NSe@13H>Zb+H`Cg+~PUft2(c4LS-w%lx_R=*z_c+~87JFAi2r<{;KIAPSJ#?VRo> zGiF@Kulsfnb841;s)~Y6!AAhsEWO^ILSq4Raox8w=&B{@7f9Yn95eTote@u9Rd(ls zJ*HxeQ46SCkAGq0|Ls37a2J;n>*2x$CuPx;?q9OW`$GMVV*vtx;^LxIPFpNgAg1l; zb}I%&C8DI}82Q0Bl8;_>ZAD#8lPrSUh4-}s_TsW4=L`wrg73`;<CRNov9gnwYO^t) z&g<6gv|p(5H^G<#a2{ho?p&fQ?wBH;5t6d3R*OBOlrlGa9>>fr2b{YQv}GBh&f2x$ zD^Hj&0#vflNw-u6{iVHLx}zeS#GV(rwbT*#CT<esdrD~0Qvbc<wrTqMv>43&Q^lnC zy_gF@Y?qYrtVKi+&_)NjSzUxdvC2F{Zvstv1U{K|MuA_=R4teKiDF3hF5>HL7<%*B zM`isIsm|LG4XTNp2Ruc&#m(2I{hHf28#B^@L&~8t1^gg}+9xi${nTD&KkX~Y04V04 zzY$DsOQHxzK7J4<ZRNyX1fFMML`~3ckgb<6mylV@Em9kkC(fBm9pi5lgWjn11@#-; zF6X(*RcX1e{tj~O(9hrz!Eom&D2w6U8STZ2yPq$dpH0Y4jKLWVh9EHR5QYuxbakZT zNiabyak~6Rc=syID58ak3Kdg?+S}U~sdFE_wGirU5qmXakr_Gya)$MhT^9dRU2yQ1 zA-tYP`lwcp?5@@a>QBVyAZ|r@J?;XV`%D5hMcTIS83!W2z@&3v5>%A%;n&dui!Ul4 zX*%7*!@IDpDeJ%{lWL8&yuU-<nkc}~Pr}Jp^L^hCS=VD%hjQ4H*f2IS0$gE%Xl-_D z??p~@t3MFxkgL5c&Sqhz3S82h)_yBQ`e?@UvKfUc;i02_ml|RN@-7gXbx)~Y<@;sr zZTobBep1FIlQT$+qC*ZCWs=Jhf*GbPL{y5Y!`ltNDc;qpuAS<UP<bt9Ls+Nc>Fw}l zxCTwyg3yvB^O5X^OeECfrt#(STAPNX9x1_u?bo2Ebsb<3j-3FwMg8MZw)jENyy%Q( zlU{{Jf3w3ZS4`cYX$R?Z7E-g-6dS~)HY^QOa`y8dejPLalLZ=9!yQ2L^vl01#;a2` z6O(x)Z;!62F;u5=94>(o_;?il)#T1ErEbJXof5*BWRi=FZS@`u!QiB<-C+e@u8r>_ z_{8Tq46z|R^6n+Ev`+rl#+x4e@L8-Y-Zi!0bS)fofOrhpqk9F9UHAQ2x80x_zUoBD zFgM6G<m(w#LM4oC()C(h{bjwMFFw-HEALT%NxzR#$pWV6f2qzpSn?BDoKh%h_Jx;s z)T`dkJ*>FxyBbM<1{*v8(ID9=Y{?M^x@v7Fmp=#<AIVmjcJ&GK0R;2o{V!1K0$&A^ zXa3KAFBBfdI5VS~yON}H|Kl^pm8Am8AiJnLArUw!+C5r!1%l|XcZ+{tynjLqn84Te z&=bwH2MY{N@{lNJoRmZb7W;h8d={rC*4*e9Q|bl2#dABaVF^R+v_MsLCV%>(yqPGT zo*p;Vc{yoS!q6jc{?CS$?hT<!#Gn|*@x-N>-Ubl8Q?j>R##z1(Lj%qTwLcethj9KN zS(P|Z_y`ujsU22jowW(7GwsV39;cyI#qu%7FaVTN%}BSKiaPky5`Mzc{QAqps8zL4 z0bWvvmuH9GB_#Oa=mFOxVIJ-Hy1t`g{&9^<zzz8Kz5A!1J3Qh5Fckf;SUggvZA5@R z)a-hg!0%FnHZ}@)xJhX+2l=#3uO`glBF1Py=s7olFyrFsR#N`BbpVYd>(vl&V4z)8 zNLqv6s!AHk!$$C^#AQ9LD5AMJr(z@^quE9gBEi0r_APa#j0k5n@4q?5ea?!|nwZOj zel(`$eiv-xR+_x1wsCI?3B(OCA-$^W7-Bl6Lwv(Lx50A@4Xm5e(DYwT!bEzY4tDor zTyI^QRE^*vZc@xZN&)8Q=Ro>*$6hzmMu>*T;$wqXabuD)7IZpe7)gnoI<Hdr^C<+x zQxM8daBZPbPx@YUa>glT&N)qB1lfNG6~o2e6-Uw53h-x<@c3A2q#k}PyTAmAQmq)* zOg>^sibs2S22x#LZ}fR%gL5)|6-FKV*!^uY_Z!ASLTdX_xC=vrOyMiRk;_By8wBHn zfmwf<)p?PzrmHIWw0oy*QY4R2qq4e+`Wjh^skwwmRPF0a{%fu&zYx`Xmykir?18)F zTb}s~TY0eeo-Pg-t~!h7fN?H+QPAq=<{&_w$h<}28Wxkl-Nn}sFV0xpuF~Q9u}Tll zpc}+4Tl81rYKXY<PdT<1vqco1%G>2;)itvs6|{(kl+UsajtD=5_1edp+Ayss^K<Eb zcP(9g@SyW1zE)Kudt{|d6-S@!L>S$4d!h7}Tpta0t+_wzOmmy$IexapR%NiErMB!{ zD#+vSq>HYvWK);AtM0?IhZiSz^@nDt1Z<|!QGT$og8#lHt`etKVvO|Es2_Lt3Bgv> zSp3%Vq5U20+G$0H^T{y-(h3_x4(23Ym%#k4o)?Vw*MH_Zs$6Z=J^?;YmSfFH8BYqL zozoBw=%VXgyFuX-pout$Mc*SmMKNlM1aziL2d;x(Ka6Z{!UuTzc>!sJKu@AGvHe6^ z{^MGPd!gx!#q^tfBS#}hQ^R`><&WzqW-=Y&xGTA+zzSwGAz$o7g{x?a7UV<uJm`1j z)N9E=vn3PfVgBNYrc6AoqB|M_*H7Nh5HVgO5<Arl!aYZA6eS5h?XSy-?jBm=OyKP~ zuZcpULJKxs07tNyF48Q}t^cvm%P;ity+!IE*PjjZrr1nhmfB&2^UjVNU8>TZ%e&6z zehaQ!BtyV)Z;Ec&>PJcjERV1oU-r0Gja;2saEw<W7ft?qb;UbCJ7Ji=Ceff)2U#j& z<`&;g%ky49@QmRlse!@-@E2VjO(~f<bH=?t3_Jpg7^4`G0uwkd$|Vw=OSmGcpd^`m zigNs}`J3`_3q|kNd<E$-u%$vUYvDJePG4RA@OWUvnW`ZspBa!0o38qzmUn2rdw7hJ z0+$}iNv^hCyZc!%?zlAqFS&r1j8N2eEZDlb;hmm|X%FmoR)O4({tDV<ah>E5m4u=K zyoJlA?XqEC)%~t+yRi-OY4Ai|<Zo<yaw>A<hdr{7KLU&U#tQIS_W3rrbl%-Ca`^Xv z3<{mfyv-F6YvQk4SXAOFX8G?N@umERu#j(%T#KAsH%+a=2SOBAK121!_>Dhh9O;q9 zfy0D!0l)CxJr!;$jySb8OR~WR`lMEUZtM17h-fw#l-c<Ri0s(d4Cdya#F?pZ=?Ip- zWqx5(e#E+xlH3joZDy|0DUeZmgtFVH$lWGdv=4{JKRrivwkjC&QO9W1|I!A)O0D*@ z{;HloAA8`%CW4aU4XcCXdNk8I`(AX<o7E<)x{YIJ6#?IZ+N!KeC*dJtpy3<v<%#m1 zwtMS_V$M?i{17m=m+X9cd=I;gG1TdGtR23ZgsuR8KF!M$hh~B}?Df#y=@aP`<uk8k z<?-*+WS|^aZ+Exiw%qjSepj=<>GEa}Z@GnkaPXN70gC*~ze3zTVa;a3G?*?=b*i4) z>cXHGfhcHYW<poEf$I1nTLdZO9y7DUBEx9ktM8=-j|qb<TahJtdPq03GtH+UC358% zalm5gU~A(!Qsfy4EEf*{N@zC)AALt1c$`WVAppcqnoC9|2L5jq6>NEzq(|oIq6#1L zR|S_IL)wyPL2K%^FjF8ktVCk{>A1T%|60$gV%=+>0>byBEz4UFpj1UK8FAXj>{XrG zZ6Vn5uRMbdQ`ktJEz0zDi5i6Hb}01tS?cGt{Ru}4=78Qi$BFrk-byc#GadDizyrB) zUzK++tLX(SzL})Osy~xY*@wGYko1<>N66|+It^T(@{G!`p?@ylt%dj3qONf8IAuh@ zm8nT)&rUBjSZA7923!e;=X{7d*}l~1(~4F{fPQAsokgB<=bu2PzB9v*x>!s8-A`V% zE%jeAan6Dp^>D!ReY{v4hdC^sf~Y4yA@}h4ZOv@3ds}o%*G6QtpW4=zjq&T<IVpRv z{=0bY0zRY7>he6QRplEpzPcfmd0oKLvg@X9W2>a;@wDg<3`GzCm#>&&L-HnMzYk;6 z#3HOCUZ`>$Jy;}&in}emFToFzv_fKmF-pawbiH)zSNngdJRR2|A#RW>n5OGi=0F1C zr-R)37rdVF&cnLc1@F)fZ(HCevnCh8rkxXgY~h6#9dC|(`gBD@49d=H=uOmF0aCz= z#I+A8s4#aPSwpoZ4r`oxg7Be1%I{%<+;@p3Q4AOmUB3iuQ<Y9{m;az1A2m~{;b+8| z51KD~U3fa0E4xq!?`?K)-A6H>Ew0bkn*yKmfB6rH{XXA14MlfM8Q7jRTCeY(HYg4* z9nIC$T20G6t!My10}E9%Y65ztUDUbB3d@qb&rbD8Pz{o64)VCuL;froy;DuysD@z7 ziVI=uy#Cqu>lyZH$}H*WJdafvMF!oXYkL+~bEJFE_~UQ3mCtQ&=(^N7I=shO^%YL- z$3;d*4CUUc^R&kwzlf_ZBtJp?F|1#v2yI{|m3f+*0XdM~<GS*y6o-!NubQ^{ZAjY( z8#|`y7wc1>5j4?z2<{*5|8E>|dhrfR0!qr<GrWm`WZy9_Hg<?%HA(II@+givU8~P2 zJSeSLK4nRfhG2l-t(m{U?yd7fD5l)it^ixf5TDHufNvDl>u5el;oh*kHi5v8tkfh- z4>%gxHGT-b9en)814wGKcS~Mi#NBo0=BG}5QsW-R9ehb>k#hs~LlF$KhkS>da)rH$ zCpT)%<rFa5v-IQ2lzxl;@MX<JKKExMi%%%(S=*(!)qm_W4H+v?c6Rp76h*mu$Kc#B zYQ!m$7s3<os3;EXKP#4el<9Ia$?fvX@j*}Cw|SwyKg$?t?1{)PT$pjJ*-%=^x<Bpk zm0siB|HIsSMm5=X-J+l%(xrEz6j7=TP+AnEiHLyGi;4VjV^1VZmcKtNGI={+KZ z8bCTquK_|!=siJ7fRJb3@3;5Zdw=g4<NQ10J!9lAjO4zrwXU`1nrqIzyYUQ!K88he z>6-6u*fdjX$&SN*F&?h__umhCNpNH=P=zy1db_B%hrL*xo{pExYNt&9_IujE$kEGE zQnbO~GEI(OIJFmcKJ+uoI}h3P5$Pc9I^L2F-3!q`FU^UQuM>}qNZn!kog-E<h6dZ3 z&!JO4w~|W5LaaA!jVQNk+l@|W0a!SA6hJKA&xcNH#Nv&j?9_<!k#ccLH91|Tp9MAZ zbHLYSjp`{-EHngTfyDbl%HLl2`>p@*6%r$5NIsf2!weX)L9A-G6$z&@neu;@LG3vn zEJGpXH=XYzQ7*$|ONO>!;;Mm46tS}LR5}2&VW*oVHLW&FbyA1ckeLqm5VtE;{CP)t zH%PMj_rOlppC1Ao$e>^V7cd?5Vun3p$QXGbCNYAmJkJkba-Iof$qVFphZ!Wu)s*IL zHj9i`?{c{O7Fnr<IH^a&`|G1|EHqO|qZ3WHFhW*<-q$8Oy~}hw^^@B{o$HRg-Rp)= zGJkkJT~hWVl*6qT!0j;Wb``_pk*tN8Y3-Y-3UAt%8N^w4E$0--4hz|l4e6l=@yw6m z3b+nl@8O+>)FXF?EN0N7lXG>*_*^g(Lbp-FqPDLN0Dr8pNUCZ>9cX%bqQ9BFRrba& zL}?FwWALBr3_G9#X?+Tqc&bhQU93%zQ+@E$@;%P?&RPZGVXb?H@lD!hLkc^>EHQjA zEQd@;A`7oWTOMYjxkp(7pFA8oei*ih>_ajg3QFgt9}c^`wa~xD=fk0|X1tiD_eUoC zS5NlQxOG_~$J*YenLeFLb79^O*qnFPT17y@{>#L+9~#UXd?(rMu&bLEjsCrRqusK* z<A03A&L3YZ3A{(P{tn;mytE-IRdZ@v-jqE>h<*eAQ~$1mlIM+5AJSk(sJD=?G5gW` zX*bvB9dC3fNYcr4)@3(s+UlQWQUx8T_e~N{0|5yv;2ND;vGxU62E}i_S>MNA()qP? zSAWTNaWf8^i_NAehD_UPbywQx3a6VutK{112G;tFk6(o1Uh@214OIhwGa@4G#=KxE zv*qP#HkC6r7rV%=l-`$@S?=LNpd-zIR&HBaE!n-;C=bM}ixd{xU%xYW`H9r|BS$9B ziKc1JE{R(XffqbBjY=Bw&uY>OX6NUDYZ)EBbM-@rrr5bYBn_)oK~Ljw#G@q#@gkHm zabKk(p7hR8FaY^%{C)j<EjZ_K?yKbJ@mow{hl=CyqxQv44X&{}I?|PMbh;8rd%GsH z>cJ>M(ow5@<TNKapnTsaLbcy+ZonHlr8jxpvs||(QvwvM-ejN_xqrQdr~*hU6_Lf; znuUpcU5CS%+izeKfA2%1X)~9kwSR#+jI0hb77#v5*->Ejz%lM$3i2U4B3DmUxha7M zZ^0bZwzr?26(Shux5LYbvydZuXMJ%NNt|$pn+WL%*}f2Q=jZ5wzq;FeyYc1?7xSb! ztzuc##dAI!;hdh!QNJom7px&y=R1eVwu|oU+T{&XzPd}Gy0AK<L!XqG119P6{4?}& z=l&%<QS0krT&N@Au4LMOXb?S-q|)ar_Cn<cwyJFzkx~2Z94-w3<H<U`?#zWB+WVfq z%V%8kTWM0lWb7^&g&vgKn~ft33en4F2TQf0uWWkxFLp2Un~9Vr1N<jb{BE=wd%=d! z^y3uUKf;gO_KYLVU+A3oH`S1#h!Pn>5%k5I)7}XVjXxM=?Hso{RDDC2mK#@^Bjank z%4h{>7ABlxI{NXjmoU%6P^TNQB0jEn&w#w`<6ba$D&tlYAr29ZhsmA?dHwiGeT`Ml zTN7pcfg#)b5WcX=&jGHRF1Q^B?Fj#-v?bp>;*$}NjE!9+{$ePhJ2*1*Nwg?Rva`)b z{^Kj5a%%r|jTc6T9~~68?>x8eJ%y^q^1DeeN^W({(ViV~U_JpfEeB8X^OEo7>$@e8 z5v%SZyY(${XXh8`KP{Sn+V?AT@$_B!lIhW|2LX>(O;U^|c4YBci$Z;mDpMI~knpj2 zj%E-9@QNB<#1j7Q<HT=QYwBnYv}*1ZPGUcULbBN-JK49cj@Vdb3fsxP*?Ve9*$!Lv z_IuTkO?GmR$lgB(D1e<W1ejtQgTI7es*gw2EOXZ?eZ5uOT0GrByUa`UaR-VU&;HZk zGPkj%#<d|=gweOTwUcTcYoWTnch~M}d<&fnwKH}nmVnter;*VV_eI>9>64+sFD?zy z7k`M}u<Z35P&ET5sCf{jx@w2Bx$GpzJG6QYQfnLHg4gT0J?wz1q&17_XVz$k28}bJ z%HO-jy|TYqCVU_ev6N<_4h7sCILN8^c|m9kue{JN>gB|Tmz--tmT}p)Z_m1lu;-c? zQDg=I{Au4rw&g0I6yT-XA$pGd+x^>ysXaooI%`4|Vr3EZvgw>~;(^yTK&5F}%7j}} zTg_TdB%!$|K{9HA^`2KW!l;0Z$FP^o(xl7;eA8wf817oIeW!~hR@~Mk3c{yJvH<88 zk1%>wCa~Wt^Zj$>BteT3A0X)nrH{{3s!5ViB7RG_JM;or%b+*3(_S<RO@XQ;6no(3 zc{l7ttH<}I!{ZoNv{Y{Z(hMxTA}(o#gqAQW3$e`Z`~=!UeyiN!RBfV5Dl?iv$~PYF zIspz*6C&z%lIE=8iVn(sVG&#d@|U|w-##t{X#4M9bcp83%zN>T&-L|bMsl4(f*H29 zg>_f%{bx+34s=#S)%W(11a$ITc3;fjM6!9d5MWi7XBh|-2VH9bG1iyVLXFW*Uz(@5 zHLwT!y=egyl)IGz<;K&^#*JN>XHZ@@d+t+8rvMM=q=jvTu4WM>70gdul(3DK5A#;? zoc7v=|0@j7zQNi~U?*ss$Mwp<kRS;$yiIL9!PZh_i1MimnVio?b_&Mi6|%SaRKj+f zcKDA5^S#kMh=)Y&mbh{`0r#EiCaW$jxwP-jlWDx-bpC)D+}r63k>3y^O=D{Mi-Uq1 zxn&zJV#+>I&!_mvCO2#oAB>LFt7hsRB1rC0b9<!nf$z6>oRZwib5o-?{FshF7vM$) z#Qdfu72dV|(|YPiT5E6&=lz~IZ__w{0FJ;rF0{l5=2KgI@kRo;b(Mz=6FD!@j`vLD z^XSgnXG9O&sXVK|g80dGUi%azsbOFYBSn(Z#;QqrErR%Q8`DmQXUS(-Hy+H{Cob^p zmn#n2GS#u<y$Bt`4roXdMQTIcmtxyNyymTkKkGk0%*`Eo6T!2lm%;h&2nDjgL-A%! z^VJEA-<)#u=-|n{gav)ps;os8WWImu10;n0?Bij2lI+B2*Ra0Od&id{tnjp4q6Sa$ zxED%r!xIiR{AkmiKO4}K>MvmMo^n0=QnMI^n`B|Y&b@JI<J>t!y;yCXDkF6(s%4@! zPzWxA?{9|yI&$qb2?{@YehorZZ|e!X9sUE78r?%#<zONgbz%ttK3##FwM4s$2A!NV zzp%u2$knXV`?@RIo?s$M15gJZ*852TQdImfFnajAh&<ztRruXPp7mqjqNL~&6EzJ! z(^VDMbKa$1J$+cOxaPGCOqmf3`Ow>1gqs8iLcDCcdr7{Wn;?13ck<Y=2dGY&_O?~q zQpg2M5Uav&xR-$?9I9%NKYwE%7*wCJ27vJWyuIxWfNM*B=dz`hj(EK1SEdov9TK)( zDBi~=#hQqXQ3SDUU^&W^-%ZD_zbm<sKl*M@-P1xzFtI%`w3$1lO>nNBwY}b{F~&J= z<nimxdT!C13FzR3`11>VF^c+f2(UX;aetu%H>3Y94!-)T2MG`zf(zv1b1c@2J=Fh9 zYyK!3{UMLnp?$?*)nZfF>6slqcT40Sno1OSUkjV8MciF<O5q1_lnv32vLFvLRsZ|B zX(0mZ-*2Kx2^I(#s=M4)|C=6BFI0$Yn<MVM$mT4RuM;2~B5d)vem={nUdMNJFA7;M z-eX~Z#fl&y@uy9^YwL&LY8Kv_^}Q&!UGCrfz@xFI@@#@G27=bJ1QIr_6RpxatZE8! z2gV)K`~Gr!o2GOx+NIbWC19i+7DedyamP}@Y1&zHE3=0N?zhgSE**+taF2)@*}#Ye z81mo<paiG!iWgDSI3q-sMU?0-w^!Y$M=Ka(0y0Qc5o@+<lXVX@K%4!$F-SilI41Z6 zTR~=Sof94sT{I;|TU2j9;!jL*zk2FDtzpSG6X$80%Cn$xnV8+7?oQB++rjV<KD{@* z=YCl?=04K*a#gJav9OYd{ofMxAVQ01-U(A~osOT6LIATE$c++o=MOpoKKMU01;|Gy zX)#2jsOIyPL+H|SYhYQ36O3m_H}+IJ{Ao)U;j??$Wbs%qcL5cd7AQYnUV$+r-9x~5 zVx!ZILKf~kXtLDGUXoeMkm*1?AWGPu<+MK`1r`^=%~sqsU;^d{gTHQ97~MZQO^(2O zyMbk$g5ht(nwFyJ`AN%?jt}kJqq5c)hNHzr?(g5pX2<Xl)9vErn?--h&8D{5Fn_w5 zvdwWT>u$Of<m6RTTg+dDglV^`(se4&Phux|^Z=sxeQ6eS>=bK|Y_!Dc0s4Q9C2w%m zctN299{7RNo3$aQ&tmQB4Pt};p^+1ouvFaeYNePHHBt!u8q>h$yJ_~r=26Bp-189k z>)U^^D?N)O6kqIvrm;fm;FrS)bOxX5BklLi4v9tw<NNGEYFF~f;_XkJPo(RE8GX{U z(o+Y`95$f2|8bxL01f|W+;$#@=XSQRQ&fw2VZ3{XE6}>o7mtST+j5`zmQZgIcSEYd z!f+*-eo%XjplN%cq-FWH1l}v+UEA#pO{xoPLtH>N9onkELEI=WB}|68)jrgd*h?Ie z_vrN7=1J9PEU@0Z4Z$jV6YaF!McNr{<Q=@dY`AuXp0(io%+Khyki;wCu6l(ipN53e zoSF4zficXjXdjp?mjM#~$J8(NPZ$HX$rW)g`TRn;{KPatHL397oz)D5y1fUdh0+1c zS1QslT$<#7e8eNtYMkP(U|B<)l1g62^Z49HzlHTL37m#`^}kt1GGe&E5t!#ihU|xO zU7t(s@@sN=#-d<mQpaot4l#%Gkqz+^s0A?FhDstO&~}|@bo1a%ygs=6Jx>Z@GxiH0 z;9$;s@6<-g^f#NzE=Q$3mS>SFNDjbfDlf1!WUMQht7Ohc&Yf8IMwwYYPISlM6U9?3 zPfEzV?Bx4S#QI@VU}yvTVbS%;fwMs*=jF9TGUDe{e*mkt@dR2%U95ZCFD_Q3C6h%P z_YERp0pJIsjs?J9tlRH%RRTP-uzzR-QAL|+Ib99~8!D!AFpZ~KYqE|l)8bN~2R6Fx zyERro$lBFoQTx{MMs_jxUPeAjUD6}e(6SMJd43M}3-DFwR#$Q7-V|jfLK-q~h7)e9 z{u5CPn77(1t`x%;Q2PrQddI~?M#v3#fJUbe>*kY!l~*=7UC&ZlX0W=%$S2jr?l?7D zye-qAK_=&KSjDUG<-Z!;63xzVAW&*vETa9;Jd34xb!Fg}iXcqA2>yDzgyFKXS3hd& zgb3%JCuPQDG0vdxuOr#E5Dtr_Mm$z<w}Ekq>OF@BJ+bM6NvB?6(4R(yV0jd=+h9)= zB5P(4_7l>4jOOaOB1N4Fub{?sRg-vQy@dNk&T@`T``tDrO2YJo!-ZdD?_Mtj|6d0R zz%l@1s-k(wk>^IUU}(Fa<i1r$xSQ=xo*wPH@Ao_XMsB<}6S>&`hFo%DtI&4RdG>QB zYhnPhC|Xuz!QN*cybivorYO~lo9BTN^-JL~r@AT6{ClIbWyITF^V1ym+hzZviV*LJ zGLWRg+aXrV{j>4aA0*p35Gl80ql|H9Wu#G_eIA|_a5ZaQMq$`~Jg6^O)zI3y@<-$A zyBY?+2R8xXOW+<*1K~>*7-g-lMmxS%Y=o~STf>8H9=}`l|3Q6|OSB;7fdw5C@u!mk z35Hj2rio9aVPUbduf+E#--*_RE{9e!x1UZ_Z-bvz|7@<0V2=Idm?17sPw#LIl=2Ua zEpPT&Z9a1736NaRaZ#Y+9Sz$(KTYwOTJ8N_jVsil2I*krg2279mQbb5e7NErz9w{2 z(}*Lyq5yp_3KKbaY*a9%?c+sISq&}MkfcDcFwE1xMmc2fiDB5*!*JuJ&z8Mkk&Q8f zBUCmxvoXm$-c`QZs}}tudF(!Erl){rNG6%l-QEV9L*c~$)-d?FuSa|l|IqZL5hjEt zHa)pbF%T(2iA;SC#&p3w_`RG_+a9nBpz=H`ALWu>`);P!_u{8qxsK>+HwKV*ok0<W z0rcxk<r(ZMNI;uL=|W$Zg7&26auC<oRS`I<h%mp5`b2|ZS)9mzc2If>lhJJ+^SXd@ zg3zUNeRbl<Npn*rvg)4I18n{wlmGclARz0JHqM632>&;DkL&@=s%C(G;I-+^EXgs9 z+P3fO_fP{stzJ^{NU`<J3<I$XI=<OQ1%JUMGFUjD1oT?f)R$VVn+#++B$&5?^F63? zWQ7G=HZUX3+PO{3tE?UBAzRDIm&)>vlf9oh=xVkaOi|A#a}j2;K*YSA4BNw0$?bu! zPPdpLoO-DeLeb)H-+`G9nPhqp00julPkB33-S4M>h6o16Dt#BJ3ivH`yF{4EPbm?x z)*;F#kskTOe4Y?H6VlH@xnzCbT6gm9R_ig+2Ced!D+F~L3fe~zh`0#ij9*7-!6kiB zOTFH(K~=i&N<hZ=wKjoOVtzv@-XF%=`L&m2QzH1uBBvg}f&aN_`fr)%?|kgdjb_>5 zoqaj3=R}MkY$T^waeOg4*qr4)(@ly7dM!h=5LWJdXq6eui^haIMMt$tw~HT-ZyX=t zk?kVP-6xKN@oHYMtED9_SRb}Z{o5thIe&UC(Z3vpc~+9S+O7CnZ2{|exA#acOY5@| zq3X=;%v+Tmj?A7d{M}6fT0(sBmg&$-jG`Y;7Mj&&Y^^9D(&IE16HmyGA6s#)KuIMc zXH%E}XxSUIff#ojehlv~D{Z@=eD834wmuWP(Kn#u_e{2#IdYL9%qZx~Bilzhbq4z* zEP<9adluAv-R^njM8Crg8L-)S+52MG3%PgRo>d^L+6L|mQECyd_m3T1z%~1*6UIq^ z$f=2pe~R@QYH*Fz9J{02viPE@0ms+;Xo;HIhmeRd)L86LQc0y|`j*bwHCHJg`d76J zKJhLI0WjFKt4)F!Cjv6koWR~$&ehgX-m(78a{ZmlXsZzH?|eVUH7VS^vUZ~TuUm-6 z*$-joZWhLKs;0)fy`j@{@{-G>2ASIv@0s*I0z7k_0<HqC+$W_|Q$`YBdSd^?Q!v20 zvx(XN*F5k){iy@!C_qD27@iN<Ab54WRh>zzd=ve(EZ94ZpMjtAUBHIB2w)$-nvmR& zFnWQFb+*ho=afj_a5kb&4~6@*pO{Bf*X?g#=wfER`&;aq`FW{gjl!9Ue4Z5zMY1g( z(CMD@Z{cL9&%!;ajkqiR>3ck43g_E>RFz0(ENdY<u}6aTSsH<ha|);~KoOt|8lq%W z`>k0UNG+>6db{&uvaat{iJO1!zZ~?4IdW%!Lmv|pBg?C8*`y-cX6oZbdOujkiW=1` zqU|ip0DB4l1$IuC3G<WUP?M%QKINotmgKOMUhUu0Y#Pt3+8fAVfP-#6woFPZE}OAk zKl!?H%n9u<P`V{Dmq|r$o8@r0^P~4DnYnNJV7P>v3FC5RWA3o(Q|2$d>t-_6@GMB4 zTTINYjx+jqROT_v^+o%0O)U|YZ-}J${lA>zooMfc0=A3C)&~V}WxP))M#$TZqMp+U z^9gD8@7b$k_#yv9rW(*riS`qTjK+v-#FyI0@+$i%MPHYT|7FwVeSTwdTD|}6JaGU7 z>_!Us08QXeWc)k9$W~Nj4Ve2*Hk;Dtcd!FF4M@tFl3}le>%GnOj01&p2#J4rfkuu| z)Sc9n-8sUl(^)T1KQUrhw>|R!NGRw;X7W2$8Cw!;WLhr#ck;-6=9@{m?=MS-=t=k6 z=#;`1+^5em+iz_npE5jp^TxnvM(=#kJ+{IGnL08Ak76d9Yo|OR`nO8Z9vO)}x$1*7 ze>vB1B9oZdX~&&Ncs2*Jj_Qt;tT7h5_(e`IRIJ$5A*kbE_qif)aZ*`Hpy=1wgZ|5Q z8@Hq*AXigfPT$bDKe=vOj=5>oD$GmDd)oD#^Nx*l(E<&_eQ6h&u2*Ef1@}v{E*TZ2 zEJwAq8L3Mn{UW{J=w|fyUV!lH2RwraeX_s;h!xIdHBnZL%dVcpeNG8j`qV>#dK#Q% zHwyyFeEA2>U*Iq6qTf88(;xoGF+bOoe@TqqF6f1+e3;I(v1e_Mw9oE(t?&xQ-;kV6 z{B!ikh-STEKb9^nd+KSU#HVS~UK+i2fo{L51!O3dk*E;0El-_S->HwY`iBN$D}MJV zo(6EL_l{YnibDal*VRbvqqx`4MzuSveIAayd9FH2`{3RmCt_{~fPVwVEbgpUT4kDw ztYQu#TS5}f?T$|-{(SIL-ZaBpSvWi2ddTX82SgG1g?9oz%dU=pN;V=u{bK&kN87XS zvxDHFnxP$WBf1cn_pnu7xIph6nmX~H3&?rR`hRHtJ&5QKf@J>+XtUhN&Yj+rtMNs? z(!IV?HybY4Z`zG7u+uqbogZ-;#oVL&U~PD_&MVpUiu`@M!YS?d<12HwNZ8;&5cwzJ zukDydf7v`vTez~5>rdAmdE-yl?w)SjOrVI1zmQz+1*Gw=CV%<Q-k0vi;9u6BO-@D3 z)NgNqtq!)&;S8&WUAL<roLm3UC0={!#<fdtZ)iIk+xWC+^N>wDer$M<l~%4hpzGh% zTP(g7eH~}fBL1P<V{oFF?1X0zrYM%g8$B8#SRcUF@BGB%vzP2h@yrcd*r`@UJ_Xub z*9y1f0p?5<f`GjJPDi=Wxz)+@*=?A$Kp<uqDD4VhqLLA*LbnTfp&11C@0jDLruNlC z1MEm!d1jcDdpDEA0xq6GhcVZQMy+-{B>IA?Tnn4d02hmn!S_2Co)s@-YuTmRU^}kw zGaIp@cVjB(YrX(crD@y2opz6BsN$Z~Tb^GoR;xi&RbbLVOn{u6EqPk^)qcAl!Pxv% z$J}rKc(aiFav_lseg#!VQC698kwuP5X5by`z`Kiu8f}f!GKnPi7+_nOy!vod5gL_C z5?O-rL^*$|nc`=0J0H}~4>C3;_u|vTC{88T8yZ(fS-1N*j`a}7mtX^aGE5uq%T)&T zNAZ=Taxbf^!o9m$uJJteqmiBk=quRPK?e9>m#El;;#l(Di9ykasKVEKnmEmKA5=-% zT~%J$Q;Yc7ilhJ)i`j?6Z9Bqq8r<Ph>QHe!wiO&1C_~hUF8`f3(=E6BQ(vrn>l5pI zOSykdc>eU7pJGCKVXkE6*XwlBeHLNH!M`_0Q0B>26muX)u<E$8X_ZA;$`?SCIwg|2 zWqJk{;ryq4<6pj0xQKiaXsEi~KQzzln>?gGzsZPS3Vh-h5_(>}35s(rvlrYD)JVtM zKH2Q(x|u60DIZ$=qG$fP4O{&HSTIMNxZ8oE4YS|hW!o^OQA&^XD-C41(R*Tw-~-~S zjmo6Y5K$fFI`;s*G&3m9uGyzwQ4&K4yaw0RCp8sB=56jJz4B5}{mo`v=ve#Z;>DA+ z6S;TDe^0RHK!U9WaiIrU^b2fwYJS!>g~fLFusr$!P5`SM0IZdHR*dq(g(i1aYeUAy zi;{n@LT=aI-8@j7GN&gobOJI;PpS%`S=TYA^4~6}P2gTtHFk6gP@gjd8ACrzVB{8z z5{&qwzhe*1L!1~USFA1Rm}n$>KBzd6OGgo`d21@5NI3wzVhZ@W{x<ni>$MNOI|k?8 z1puNh|LF<=;9wyyksThAq^6Ly?|Y#@?ecr2eYIdaenaL}%r%rG&>pp$E+V72W)rzw zGQd;&z0Q~>6&PUK(^Pj4=?14j1^%IN8kSB?@21Mb2cJVL(CbthVpk$S;%3##A;Wj7 zYrWa}@UwYRE3&#IbA4^ZKQwvpQ2bFS!gCP^=9`Da7ujw^toCQk^v&5s75=%ab@T*& zRHDM(kr<%_W<MxD|8z{w?ao0{)2T?})N4fBUZV~-58zYUREYm-euHwCSZ)5N*Gn|r z_2>Dq8_^Fc(!SRNi>=ev{+~uH95s`57N!5_TofM~2eFco`oxJ0**iiPWo3`j_rBY( zb{CgFx>lh|Xa*)Hj8Y*^BlJgy$myM}(QRp*m749tK&`XCiRtq^t3WRJCPa<livtto z8x$h58LN%x$Vq63Vt|&}#7cBd3{3OwKr!WkwqF3Sq%AzJRf$C~m&0?Q?puwln$Oba zyyifCQ9)#YWc5*S^$l<-4YU(<V#^^a&Dri;Q?^!iz4T>KOetIsg%}5=p*du5sk7fv zq8hXWu6c*rktTDk?>A$#WS#xp`lt7|dhP190lAi&ImkAB;EOXHI@TUy)0YFPoOYE? z-qbkf#1NyX%p!q*&Bt})(Wh5@i{}gv{h2d=bbpDydmf9O%U0Mr$nT@YQeF~Zk6PJ| zLN<1nF8iIB*IIVcDSha6E~!}yc6fIB{r)14q9eIrLiN8C+&!Pj5$dWk_&)8&-MVCP zc01#^i=Bre2L_ak@S=@%BRLZ(kDT>R#d(#X0z&O!yO#%`xg@?01qSkfJ-wAP*4QQR znypFO!<#q_^0}V!oATztwO;;bJm~~5`?`kYXnaJI1O3_Ox7267sWU2qO;C5%{A#nq z%DfvL!Q$~3c%HG)FnlX6$^n3d!r;UNgdv`+)8d~SkUT=_wdnontE>)Gyv>1jNTwB| zEvk`yl-&)W_-xo`kI-NkM$qTmLZ)T+X8I+XVKaYwM9tr+)To#{YQybXO34asU?Iwb zfJLERTKU|<X>@&E(4QBR0wOnPyGWtr=L$@S$K;o}E~2;4Ftavwro#jI7q!;PH}xCl zZeG2ld$xpnKxT7rk5F+<`=Q3mY2+pM^<BVnE%dV>Fx&sdg#Bi0F(*s}+<jZn$d{0` z8jwp$|Cb)aM%>s$KQ|!b#W}i71%&-RXI!K2`s~U6<$9ZL!&RYACoD_Y^u(#NNXnQ3 zAJFqWhmcJdYGUyyuF1{mf~L|<mGG)peH+RG7ni&b6gS7rKLrjQo_LZ)2X?KJuN1DI zl;<xIe~+vvrm*u7%8=5F2m=xy9(i~ac3{i=Z1hUQ=mGnj0sWWn);<x>-g<zZXuH9c zJDLSZPF+<+<Qw^Y9&4kzMRU66A0}+yxq8EZ#_~rwps(t%VaGqLsP58j-ZCmzp{NQX zAJ%*IcJ3=yYIB>%0!f6?C>G&P2(W=ST8vO|b?IBvuBY5EbeLoJQ36=@xh2@?i+}1( zd-7tZk9YU3mgInz`46~*;b=9IeG+nV*|-4rP&^d6Bc$8nH=5Jz25jyt03PVXiF|wu z*Bpe?wmZO!wIdlPVE9MCA~y}#i@RSotJ_Uw8gHhXf<sVzCL{@OMkfc?nh~{}1=gfg z$-vCb4T*u)mR*MotHLsfx5~s9jqDPfwwI&IcCx^Q=aEgoCFPh4`2jh3UTs$MRKDkX z+{<TvO!eA4zbJOZN>X@sWOZe!QNGi&zk$Q9r&o_*g?M%p_=92>vMtE{<l6r{X<Hin z6vbgRT3@7O>cQOi(zzmKKINa0sUJnbEZA?ub_yiTqjpgcxgEdl*?FXdbPSM(>MhnK z_Ft;|a5vqVVJvP!Cy8_$pO!@8v%>tCkcI7+8yE&X5v%?nk<zu7@J#otiw8?#Xc$Fp zshJ}2Yb+|PbF~sRT7ULh?XO<i%010*H!u3n56QK8vI9!3EjJq6vTuqJC_Ptb-ae9F z8N^$0n+3*}T5WRJ>c6olM~~GcyYZhbxjwJlPO{=z$^sLmq7lX<Hp0<;66`2KE_Y=6 z8$^yEFK=V;?(N&nBQ5sRjh|q=5&4uFdlmh^wBR@Mfk`f`6sQ({)DauV&HFAXGw9w; zMge{P>MuQ)H3Ay2-<-YQL8cYMQ#)sBtE_(|srStXzIjg5=>PRi1$I!SHX)F6E$bSI zK0Wrm!98^NnB;AJjkI*hs>DT^6VuD&N}|fZ1NDN)m)yVqR9gv(2QoOLe24>iUfHbc zD!E-^P@G=Hqw^o~hm^opBSnhLMO&_J@&$wGbTAo*3hvjV?{Pg|A}SMylRF_R5*fGr zOKEi1T>716T@EK2=CbquSlHU@%6<sCE2iF91?YCf3{`*$1Bpn$Bzdp^!u1;#pg#LK zfuLc<T5Ejs1G0e|sE3cJ+`xip%i2$<{l6Su0vp(A5O+xIk(lRfl>~NCdvg5C5WQEm z^|jY7)!Y2Iszcp=FM5uc@ExCN)WN3`8Rf1B2c$PO_$zM5I{rR3mpDoIv?lWtB~Ko& zfEzrhC(dFMT*Wb?kE==;<vP|-%SW1Q&`{txe<$)$g9PoV7r6jv0i{pYUqrFO>o(G| zSgH+RGEXeta?ae(U;4{P%V1P*7p?6ywJ}kf(VSb*VKFm#G2?~q`98V|u(%bEsreXS z8S-UTXD!Ly>HN$i-KRzQiEFHeP?Z^+mYVOBG=t4St3WZd4F>RsN2o{UO;zORk~Q91 zmHe$?3vD-B2ebMQA?z6%#Cz*=v8YhdyNxv&bDN77P_kTCbaj5ZUP5j+`B24(cHc`j z=KxbblE`v=MZ&K^2(PzoaAMP7&AmaZ?akXAoeU8N4r1vKAo9x$bn%gK*uiOJ$6&C> z`r&VI<o>X9$M;ZY=he%8+bgwdw@KFccbn6&?2z}ddWta34H@kl>#uN;Z_5nmd3J%L zjVhg9H+bXL%Z|3yg@`gxsy)N|osBIIRnX|e{Nl-97K4Qix_8BcY|qC9vdCy+dI_~* ziu1gH{%meL^-3dg(`wr8xORe+F6D`PrN&^_sJ}^3>_@g`la9`K4S~E$g9F|=)(D>+ z={Jyy2XjJd=WaBODH=LRdMQP9%QEy{yeKsI*e_-i!TNoM?AcZ$`24U?quA3ePkreh zn!v}EYG=0-+iFYOsFwk|$-+pg7?hW)G6JhWGm6z-mpJj8J@-YuwevN5448Io$yw!v z_~?Bjsu)md9YvK>Eb%gOE(4&eBTIj-Xq|N=B>^6#f@?)3f^6l`3dqw9Uiyq_lU4&3 z;Zh#8fM??;gX3r@Ox{*SHK!G|6P~B4gM>f-<b=Bj)vTY7n(zU})Vo|3Q#!938b)@$ zg)@*;AO2$R!=|%`&S`-DS}LL_bnaBJm7Orzlu!=tXs|0RN9d1vH9`gA2m^$%5>;16 z;p4*7xm4_07RT6o;6VBfMpdY3`Fc47aCY;4I^HYq!S$?y+SgPvwn_)7cQ*XkQt(jK zd0xx%xkR?_v>8fqda4T_#aBefSL}(^8s`8=`n&<40d)>Z;+a86lfxGVIp86N?7z$| zO;2|_A9)^|g-mHNJT$JRJzG3BFB!I6H3N1l!-AZbvTKA)y)WFIYH|Oo_+8tHj5Mpk zR$Hr^{HjDZ#u*5_3=Q43;vq}})pR27CRLfFlMnQVPl^4honzK=+Y9oNGEk<^w<PQ~ z6WdDvA1~YxXf($a5DfT1w)Hu==FzJokNtPcKbG3i^Di;*A8bHJuc0#T%tzVN?{7Ll z%bj_pj3X?0k*a$7^Kj4XuP8+?jT?x|BS&*^C(WO>wzQ|psd;jZw}D!TFXlu#W)O>p z+Oq4_kD;c*(RHj>jFV|Ezo$SoV+L)lrZ5lW6PN>jsy=HJ7j|`e4JyePs$d`-MJfVS zE7`ACb8L0QEq7dPF@R~uncMow?YM;eAPO`V$Q9tl-4odiES0wQ9~w|aDIVKC3vK5+ z$zN$&RGq&xV`nXgd1uHN|Ba^dPxAKJ#x&UhZ>ZHu6$wy%j@>!fjL2L$H5~A{25!66 z=P{4++br!4l!vGP$`U1^L*b`}5nBd@N#_ln<)6K>`*IPS`7RrHh3Ap~=MDaA)6zDN zJouoYiMU-Cs*i4fs=g54+bc<`RP}$?y;m{v|AY1mrATfkE^A2q{$^ospeE>8U1g|N zv-Q38dRW(jKb9FNy9*a~PguyIR4Op}?^*-@%nk)Ei7Sbhkn@vBfPmr-Ano7~gv5z} z{E+qBjF5Ly@SCWfM_h?6+naq$BU^ynqIr4g?W*-@!@L^a6%&qFgL}T-p}*<xSFl;j zBm#{bk0M#fYOGvM@|$aI?5W0LFPDvIAs8SHj0Um~!l}Y7KgJZ6$MQzJWHMD$e<!S8 z)thIsIdbzLoBL>cW_U$L%ApN5_2$}Oj|ljkf(V`Xe3oBM%bRhp>gQwAKIr3BXQdug z{z&gocG2i&>ZRk%4Nd*%F20jwi;B!^Nq;b!H*wh@K)-xZ`KI`VXX(x}v?5g*LuLQa zT*CeK`L<y;#L}-`UHR?cRTvY|5PWD(Y+pa@4=9Ct%zhf{t2E#pBCiT06aw5-QzG*0 z0^-3xG{~3#;=k1sj~4PH+Xq3D8`JdT+v8Q!HV@vrWwP}hJKhXZXJ57(wqfsP0S9Hw zK_jcH8^&Z|6%`zZ{NMeH+JC6mfy>|73n}se$lo3I^JFmxhmy^72#h^>74bCXZ?k9C zg4aPYMGCJ=hAjdM+Uwq;m&X-_MBdCTyUC#$DZeD5pLZ0gat&dB8e7<jqlZ~nGK)4x zr#laIJZKw|cyA5Vf&Ghrm2z3HeXt6saDG3zUD-I`rTy4%N6lP_m@MKVr`ySCx1MCN zW?mce*Klv=%14oQPWD+Y%6%`CZVtx0yXE|r#%1!+vk9-$#!Y9nqAO_LicoL9RVnGf zR3Q5P`?1-mC_R-WyQoX=7|J}GC}^>;z~%jHugnHr12?YQYeJr41RcNLic@==b7TL? zeMJ{cB7Q7GBQ}SO>awct-rg*B0lWH2O5n<T*my57ZgB^Ct%~vyyU>LBa~tzq2Pkf+ zid(e_;iUCt9gdEpyDsSIfmUsyu=z-!2qwj3=uYqPM~Pac%Eucj7hcmPPE<?R<ikX^ z!~4tn%&rrhXNp^ybl7BMG||M_&W~>)%=xqJuCcr?_m-w<e*Na@BsZx3rUc+E)%Xf0 zXGByssaH+4JkRlOFCD+u{5+#~3II4weyKd|h!;eE_-5PTw7@O7>e?ao_OAP{qxENW z{IMCx_UmL-YN*ELe`s2M0BZpaVEji4=pUK~+5an!d|ECvix##Q9h@l*SQd;rHRzY; zXMSu9T-S1<@!?rJSP4`cl|9&v3FH{{`V2Z%cXfAj2zq4fcGWzH=B;mA<=qO^?szYf z!XlmBg;BJ1qXPT7QVV2Uw97DVgsbB<Rs63a4k1}vH|%A^O|~;M*?d+tB7fyn_UN5& zikQJAPa)-iJdXq5)z)Kw61QukD)JlCIyM>-(?3;+F#j+{YZkARkO^|4z3tc^&6$OR z9$w7tJf&(k?kq>le$Tt?lTUuhRu5ZH7sGbGz35d6$9(>kWbZwqS@Uf118qe`%<)L? z;p<^Vy`^UCfr!<-NqvU?n;6Dd*O>3!1xXtH*Lm4O_BeEajt)UoWpg#~DR@1QmE;q7 zFvvFVqI`SW?u}zZvU(|_E?wNU15l=a=eulPH>WD{OG0C;j$@YkEqqdXk%r|;9eY$p zO*XM*fzXK;3UNQU^uglsPv7K0@!-=TBhv(=^!FUN*eSjoP$NCKNiek9eLA*Fs2rDb ztMF;RnaZD>JFd4_4%oW=e`8!~X8_c2a;Odz-}>K;BjvPdugny&rqXK;*Hi8u2XET| zlJ?o5Eo-+4?5C&ffUHq2RlulqeqVsZaCR06(EqR~#O>i7g!%$2gI)`bt)-R3Et&^Q z?8df=zCPiy`=^P~f%hg3ERlqlg?62E`m!BzWgy3>NanAIB{VR348wqZNu@RbKI~4> zs(_qmH{qt&dL2BLVb6iFWOnag#jR{6MeA};{9JgE%Wb*Nr5~^KgZ`nh`txX);*s6e zFfH?ixbp>H3Po-;-K;*Xm#g)SZMY{%SEG;c9K&8AxiJ^N9NogO=dT|HO4MLtNDh_@ z;W-x{sE$WT+)BQSGBMGki}N?ZDv-chbtHu#bh%*P8~;f}J|H~mhfM;?lYfg7BeEly z0jP_dfZ=Y-hkr%RW-}+{dJP#$$h6##-l@3Li@O_~ygXEwYP+ZL^ls~gCOgb3;Q%la zTn(u%e+0Qag7W$%FCcOA_zP_1ebfiP+caRNrNA3AGn=B<iM8z@W_yFe?sqH=q0>sD z%#OnBL)6q3;$LkfJsF^RwWUpWeJ@@&fh29*)Gg|hOrE7o#09<8Fxw;p<(CZ=1;djS zC(&}R{IBgw)Sk*}Zak#@sI*wEY??BiKVhmf;_BGYP(3<CqbVD5jndVn88RuLu~I)6 z%Imk1jn^+%Jf-_-v9qjnu_|wVt;|P9`HFa4lI;PoardA8*g;5<CZwlhY6{=r(ub@n zM;2M{llPq4qtdP&?O#4<-JY&bBtK}rgB*VR6M&fL0P4JSZF`dx!7#A{bxF&gkg059 z?dgmq_`k|=eDCTyePMz&FjHo3twNjtYFA*R+*cZb4h_h|f-Ndw`Fl%Det?{aR-4_0 zA<T7r<j{L-vxv5*b8a@r$-MlMUn)GT0)>a}46?363!T%VA#W-M#56tX6ZBWm*H8k0 zJ`zG4Z|l&FJvm#+bgIxUol%?fyj<^mgXID3@h6`37=Ti~5Ww6O$bzL_LFmq<TYapu zu{M&}zJv}B#A~t_Ew0-g5l415pOSs>vHjY;b2gB)kw2@Yw{`MTj<Ncdb7D<jo)D>p z{!soj!rX*qPTaotGg$_LHryw&8WcwrAKE{IXk4DO(k*%*GIC$`!?E)QKl?#om>Dt- zAxE+|RN>A@Pu$w+XedWx&Tl<ZdbAYox#x`v1XvjuKQ(5;^{v&hUuR2c&cC?=&I?cE zn@sGN%6aNHj4JB!68<c+yz7|d7sRWv0~)WQtXMF5ztO)K^$`|hP~6w72cG38H0%?* z60)S+FU3kyr<^g_XuelCa0Bh#^ThHDnLZ8KnnX~X8iPWN;m@^APtW>_!(%a|%#n5U zV#Ss@`=aHYe`w;seAS6e7PIB6;ni@#zs69@+rr6COkdK8piFNN<NH~uc0fBcA{cM^ zU}!t1x=yM0W-6>g;x@x`iR4=xhJH;vggJ$Df>d;~_@<y#n3@*k+j_%e-km|f{rGdf ziGT6FqV<25ts6PZf?@1I5im!rB9!?|B<%OO<A*jny)xI2BmX>0RovnR+zb9SB2_ac zFrwpirnlwY_|@AUyfv13IopjI<-u;uT^jO2vg6jwPu?5l-7l$}mboPs&VQas=YDyQ znBEn=oTrsJ;ZId*jmnS$a_w*}8|%x4!#}=iGMG@UVP_t8A{Fp|&3Smp3^3S&|K^pF zxhZWJ9q;32zk!YOjn|g$uA=T0Es{OHQ<O(A904v=-FT46&lr7;Aza1dpVEV(eGA`M z#`j@7t%%nXUfWV_haO~Oe5Bc!mr#Jpy=B@okYdg5<;1@kgcdvldH5e1?OWYIAN?=* zqAXKJlbl~jF^OPAI2O1lcN-|v%}m3h@m#c37il+UwF6kb)W}oZy6>)Mc)g=)5S5}A zn{LU-1u}}fOz97?_?nlbT$1z@p$42;;9pwWSd#<iw4up@kb)FMGRFqgy4_A-m~tmw zKgUw8s3CnIn{D7V!a<_)YK=2WGSY-NkVH!F#0E+=j>@9xYpS5vQF(ejK{`I4dXcqX z33c`t;GSCKRsx_~hwCJv2P5%crywB^L2eEy^MyoXa*7=aSi=J2n<CTSVZA>Ldbva1 zu3j~O??~uH1K5}})?XWO^vw!kPwI@_tkJk#IqbTc^*W+=E2ism@~s!i*;^R{<Z!%w ztcrc8m%+9*fxdkC<3*Ijb>|Wb2GQt!lo!#qHfsBQ3VZDC`_t29SJ^|4J1^7EzWJZY zd@FK;5gKZfnWHB3Bux_HZVBkM(wToIBNyyL?tnQSlvz&OU}|<(9<X5P@!?hD&rVOU z9z}3_-7&9CkvAuOhQ$`ZJ~F0n_Y{@03d)BW+qsiQw?M>1XIO<RwbRyZ7}b}((P5o9 z4@{T5XRwSUPqR^sFN$oA9}L^wUa73l9vu7fB-K(Z<mS;W4BJ06`R_GYi7UYisJQDn za8*~{BNer(4PH%r{zX#nr5H{AuQ%DW0SgiU2H~o}xR;Rs8WLMV6#ZcWY+p~}J7<1G zGs8Y!ZT*16$ngF5AW2zB%U&$Cb+8t!Xn9!-NjoVc+Lonl{jC1}EIlrv`|Sd@*4WMm z=mJ8iJfw+|j4TxEn0X_eyIfh<ZE3dPx|If11qNrcW)35k)>p+jCB8@}Oa9kRQnDAN zq_WVZd5|<ejdWNcByHW@(KY05&XcIzAEh77gUGsFbG$@_HUpr(tzNH$7u<d)U!IBG zHktEH+^aiXUFoioNsh(uBz>oFBZbHzzIamgu*j3S;~iTG%fUg;;H)N@jVJ^D4?Q=Q zSQ7mL-r4gi;&xdPDp+)Y<kNX8>z!D558a2`3FHAJ)89`N9#Z+(oor55anEtHwp$ET ztujMhV5a|mSBPw;+9EtTXE%fXgZnJ|>miPJmF3*uq|N}w0_N62T>R5t*hYr0FX(iv zn`izemRpq>@x$%)NfDt+i6~q^!5<U;piWDR_b+rcWwOXVL{z)RxyE|T@Z~yxT=?V> zpUH6o-|4qQ5t*D3ghKARN+-3naOxtOnG#U&Zma*QijxFj(z0wPlihxpE%d%Lo2S=- zMJ5+KDcSPcB8=dk4RK501BJgOPC~MUG;X=1^KH3fMDS$Zi|6znnhwl9(Oo=d+Gh{p zu$-ELe|a>t(>(eelF^ZND7WJK{Zc1awM+NUMzkO7KYif?701)xET(EO3FloQcg=Rm zCpVMU-nzK_1<Fv09-63luuG9R9C=W1e9l^^DCv`p9_=in_)fE~z#`9gBC0DIID!nV zDBYKGAqFyCSCWphKQ7+;Rnb<(R{2J;H&breVyAqYP!C(8G0{!p1I6j?mm=M&0bki7 z@a{s%Q+TLB`jdth<saIPu-mv^wF(ZN;hGu?U_o{ye!^mW@kLMj<<Jk>8udn86g6UY z3@Z7^erQ|4ZH%6??#d5U&WrtS{dtfo$S~wD<S^OdA-7~>Te)EHD3i_w>9Ly<91>4+ z^7PJ?6#X)uq%|=%)?)D{<~_~n=Dha&AwLttefrn%mgkt^YUDPv5O1@^Rh{|>MLDUY zMz$V?xfl1k(H^24<lbC(J3%5#U`XywLyfhk@?n&u>E-v+I{pVJ)3P(qXEnoHW;^@a zVS}vA$mz7_(MZ+->26#(cy)vQlq}u2$$S1;^=M}Y%<EmUK4&q*6{VeZDzUiiKuC4U zO}wh1w$9&YZ-qmTA6R{weW4<Vww$I$7r-M8fo;dK?@d+jn6+;$Kaoxk!+?N%f6=;^ zA!5HVK;xd?E#LdgJqJ=LR#t)Oh3m~uhhFjJs0<%)5@&ba$yYX)WuA)>cQRKwzI`5( z(YSZ{b&%1w-^Ha}2uISN!B#7O+~%}RcSn*9|C6jQxt8L;JAPj=Vd6*x7&u1tr?BuQ zY^sEq^MsN7g9w{AAn%*WC>UU66@`2qV+e{IGe)khljlUQTU`b6>4&k}ldkNSFFpJ{ zeVA~#u92SB*0v(Rkh#=Cd`hDBt*+!kKjxhtPyQnKn!3vYPd5(GmV(s+uH6igcgP3# zsm__Ex&P3>6=oTT70IiQM|XDcjSZFPj1Be!Q+=kYZt5mS68ZTbX@T!Cc+JPrVx<>o zBXl10fS+m`+92aFPJCes+ZA3tk2QpouX5VwxnBu+0cYbD7H5kbd(IvP;(S3)Ep#!j z$$)jn@urJvezs8lbn|PRInuH=qcgJr?Nl(MCtlYO0*&f@ajx=?OS?u(ll??_K*K0C z@Eg#7gp@oeU&nH8$cT&~NeYhEk+SEyKe8XS%!*Z5+T!M|x;>rLOmRKR5|wuyUv6A1 z-pn95g{Ubn(lU~+Ccy#$SjcST^{vwjCae%kXRGIFF&TyhnGn%Wv1r&stv_9!@dXu@ zR=6o^3EsEbbQd)&2=_}gf}ZU^yV1_m@G+cI@r|rz97{@aU|vQ(!5~v}RI{mWxSaEl zdM&oowZHn2E^&1X`_&rZF@#nSS)=j~Z=u}sn^mP!bDiUX$Lcklu3nF_Dp6S}bkAAy zizxMN+^SL9v+1pVy`?StRwHO^-mO|(?7t2xdJbJU-S5O*YkZvU$qavP!8!1(27K8C ze!zSkRroVzXU?F9`_2!Epx^xJ%-5FAo0Zh$zl4-n3_2F!I=!4!xYGcyMU|`$!B%2+ z5Jmwnu#(-LAy*#um$iblR4MvdVq&&A{Uyv-akeSG%-j=M{#oofz(@2A`b`0jEAs;` z8;NZ}fuu(=iyzn+X-<ThGBBuadp<ce2Hr}(=rRd|p1grC+%7o9i;0>bx(mWP4Ea79 zOxW~JQSOlgbWQTO`%BBPTLH`cunEV4T1U@-;%V8Q6v*Fl%=bz5Po2WKqPW+fa_dvC zLdw|#0I{Pt4(+gdJguHq<i3sniNP%y+>UBbTf4BcI)W~$&;m$E3$yk%)X6c7`b&?Z zG`10p?_7YzdvH`m;?t4+Gd&$eAtCEZfj^9ROQmer1nFfS;h}C1=1w)J#FKnW;nz3R zAMi+eYABL~fxWRmRH#|HF6YOV3`Hk@N146fXuof2$`keT5lEi>-6%WpiT!P{KOT@m z8k2*>-#4U$*~Zs-GD}@18XUVm^We6WkFHK!z5C09I~mB$w9zGl|2xNARP>jLw=z@_ z7%?bXu#R|sk5(WiG`l1t-KeE%tQ>Quu`{>9lKS`Z2bCo+0Uno1#B)51t26Do6G2XC zjyfykC)=A@zQJz%gm@J3-kxop!C?434r*{t-`T+k*zJ7cw>pP{oCIWjabJQ=q#b@( z)v)0RvpJ(FefFPkShYRu)F;rVhMw(y;P8P=k%>atE(q!s#OzwGVMn;R$rHU@3os8Q zpq%XfbO@n{x0Zn!bgI;BXT24>HmoauAB?Rmw~x%aJc0gv5Wvu_;+R^4F1(oc!TKg# zUM$7C`{^9%$4X;el9;yMnDn(@G%sk4P~zkyBCf6ZCTX&n6i(1#%cd{?%Itk5>689V zhtS{u&{*UW%VKw@Ht~U9OHM*<a5BQ@HNO7<4f5bnZ7nRINF*`hq8nR;egF9Z)pqy! z5A#-Acj8rWdLyp;IJ&)Uxhn>6(|gk~-=8_HNiX}(ceuyS@e@S|78^#MKE-t`vReRG zpLXquUZ<y>=vfX$ym;f%)P~Y@LCjxaiCSWKT=r3@;9<}M0dBNbhhWgidl3WU7Z<B) zk{3efU!_q~yVnD+P291MNEekM^-kWF`_{xeap{icji(%<mN-vNkBmh%5DC;hDj!<` z&uu?>Ey^?DCRQ80ohRo1QieW8mu}&^g#TYVoCxOTpFLe}i1^vzbDG+*qhe?>x%e9n z{-u>KLz_ZsbyPd-TG5x7q|^5hs+*lmH319$ZM2`7$EPm;sINY?nOO3W^*K%XD{QVy z9K|~YQxr;TYViURSsp_7ZR~v4XgBWe+De5`n7@+&ZA>f7@RhWCXb9#sbB~Wc_?6P? zx8r`V=ZS<t&UFp0q1AEpW<I(yHe`v@A}fYw!zkaE_N-9t`U<ZtS4X@vczMC98<+^` zn3uy9Iy1m=`+5iV?6a|7bR><0Ecw06MB?3sZPaTj335gRv-14O-vziemB-#I-pLHf zzIjOoJSM{QG!A4Vt3`mh7ZrGWBJlD?mJk`1x1N4Imqww&i`UWg3Y9hl+@mftMBymw zCIALdlN+@S@2qVjlCPKN(e`78>-G6G`XU;vWZF^|B7?ooe9W_L>P~eUy^3sY`&rRc zrqY3(pl|DYNw|sB7N^1RUPO%>R+AL*Q0nRNAbz3=WJkOZjM}sVjeGG+`u8)2PW}9I zpYD<lex6?2tJ*vPUU(QzOp7k=FPwT%3^jkMG{qWrC70oh&{m@%LU}`MN$>(~;col9 zEP0Ux4dB;79_dL4?l;IJk<%+&rsb0g6##>Aw4s)9NE>e>%PYgB<xkh?7Ot0pVl?iK zBk1ukIZl2>B)5xcd1jeMmqUU+dqCq)RiE7_M80T@wL+AAd-kRMCY1@QwGIZI)!M6l zOGdiklKyc7X**`$`AW>(O<@iR<Aj(P8c<NNOkbb^oUgt4=J@_~wU@p;HR(>Qe}b@L z7kppe*ltySdkL%Rd#XygRatv`F1GH9$m=vp4%O*@F!x?jO?J_`FbXP&fPnNS0-}T> zT`7r*G!aqhEeME|2$3FYq<119pdg@BX^E6jLk&eKBE6Rc=`9g~2qEA9etVDek8}39 zIG1~m!3|do);rf+vpgk!8!#bl>&#M(@HM2@*Do5zzJBz#K@P_?n{K~j3yGlKDWT}% z{j7u&lQX!(A{}(*78SYgX#RDy2DH$0D4B$z7*eP2Y#hq~U|sG0-0*i>gK(bJ5>S!O zSa*8OU30T~*;ss^%CzeqW<>Rk!@#PW>)UFgH~UO-0f$aqDZ%nmJ_i2W_$9!*Bf(~z zs_sp+<Cp{bGxfit*4hlL7(vFtn3Vpvp{7F@K|?-(RGRvjPcw>7o6rKGUB3My1U~?I z_4^8;P;iN6i<)TJ5v^A^EfPZwI`w8<@etcGHWNwqS)0({B(f;nbci>Y2NS1Xydzx3 zz4}!3hYxdO6zEJbQOEDD8)~A_KVL(Iv=G!Dm~}hAp`{70hl)p-k$#ODesSG<dye!@ zRE+X21Xeo|%=CE!sxq!&?s}=b!cG3KIjfTd<KI9zcoV3!EU>4<xxh7(Kf2UY2%Fx- zlVQoqb$1U6@;)&{7&_TI6;PrN=MjqdSJ_B&i~%KR`INqQ#wRmWq{&(Sa?L%d?Tl+k z9Cm!z2HaLbiMNZ*5El6<KI*>1-L(iE@~3|^rSQu1E*kfde-#+Q-6Knfg6l|j_<6O? zee)B@47#{g`dXN}kJ#)!*H|!k(t~PTxPT|RD=bW!k9y4X9ZrcT$Pi2;ije@0#_yeZ z0ws^Y77=W@eCl!1tr~<i*l>UaA>a?Z7$+D<-))UEmHFG%taYB;A%t(BKV`uiQr!d$ zPS0%FF4U81@M?=uN^sUql_L(<EPdlw`3@B-iI-9)<9A&!(&V*Xk&6^9i!^=T)^TOM zhSY`5tE-CZT`3VyD4^xuC=KHZtwLO2bQ<yw^A&$G18eWstGTcV7c`s*ZuBJ#F>E%W zv#)sD-H)#$e?PL)_0_&WwzmjXB1eBF9TB>F>WR)(ZR5sFf@Ud7?E0XPF}|0#w}!9| z2(ccpI?8r<J5<!A$+xJkPSA4jMX!%Sq^m}$Nm{t6(PLtZ6*Iye&nTLFwO9OFSlU*% z!G8#WUUY@t8u1AdVV~D_FTD4KIlDNZOFWF>+b4N|PB8gfxjPR?wr{IXEP2Am&;<E5 zb@{E_^r>JK3XH(Ugb(o~7>iFFC*HqlG57b|rY76tgXSf+b1n<?!!Jf~npdi3^c8Jx zW!(SONGBW`4=O@C_qMA3#4#7LXmzQEKJb{mmc-+eTAz;z{Jq}h+Q#(ZUc)d>7w(4O zVFN<tkJ@1fz2#T(`4sok4W66cPOqB_($(0l{s;8C+MW<j4b@5*bCFvpM_YZ(<ev{v z18<)~yj0VU&+9wC9Dk!>gtj*t`aH>U8Zh$t;~#4_2=I4zmiJ&&TnL#KlnX<X>Z7qT z>fKhf=1MoeqtQ+I4hH#-SN0ayV!z%0J)jS^r<Pad<FbugNGmbDpshBpIlz>Vxxgw( z0XFgANxtPkvjLL#HWd_0qM-_d-6)wvJ9b2*z!1}hz$+ihj83xT?SAk*5xXw)BI?Ck zx&(nO8So0)r<}!XbEKnx?;ko{-A=ms_SF{d_}@d(nN1RHNx^V<kVGx?MhMhcGPmz~ z>Z03Ub?@(YbJItu25qFl`bb|cvd@Iw^bYgOo74K<$!8<RTjY&{<qZlco&?`9RpzQ< zYbJl+`4u$aD`q;j{dw$9f3rYJ6Z89Az6)hvrI0xYl@b!3s2eN&3MWAnx$Nq`wB@Yr zy7M!kl!)2|B|2)VA7Y-8;gNgF1)l(`Rqi^q>v_KJ-pXI=r1u$xY{l3b&e^>~GNJnb z5(?_<991LpM9*3OBqVMOvNdI^^WqdV)T)GtF(6Bn!~mQv&ZpJzo$N0oOB(}~f+_`= zxuwA6nYuqBOcZ##9XC$B1fi}{4V|_@7r524T>qnOESSvuQK)OO7LcMQd$>!@cIVPJ zkRflC9^e{SkLUt!zIHhM{tDPyR6&z7>yq5piU!Uvifl1Ncz|0#gQ0vwg*Mbj<gNui znBV9nKbS_w?4xJ4sN0Rt)JW!l2#|ROV!4xcr;e<>3t*<6jx4)B<R!LX$4pXMZ{636 zr2i)9ZARlkTzEzTB%Bx@7r{M=ArGCKn_4ndG87eqob>58)v`81MG%3=O9&{7$|1=P z%2d*jyRKU^m};4O-*a|vnS@S`Ck>rPv~>bhZ9oCcSLWf?<9hOyz~avm+tPjYijWxz z`7ak%ucGB`>|%oH3l^y2;~F8$ADoOh-I!F0;30>ZaZ9f_xd((BJE+<rAVPNBE>*S2 zW&zndFp;7!cd~K@f`&b;##z<F3ARp3bEl0J#g`p1AHMGNE(5$H=0(a&WX!P=lsjY4 z-rA+B>Vb(`e=U6Bf_lxz)oQTZf=i8C>lJLgwSKVSDfZ>76kfiR;BketMd!?q{~C+e zccED3DcSh%=hFl0)GCVx{OinFo71l+{_+s&eF{YqP%$*ciPo#G3pXeqzPJKr)-OJD zt7N@)4;vzXMD2I`XDkSe%@RQf)YGx0tRDh=(iPjp`Wp@$8m|U^SnNWY=|64Rx^u1M zvA_69pp-9d1Y1qGmPjP+O+)uxVr?=b_+)zgRvU6GmG+YC_;s>go**NFHC<N?fAs~I z?(!a&u8pF0vvz1K)2>;M>z6fo@ZND65T^hpY~n*FJ#j?+!`QC0M4Bb$Sw61buxZ#G zd<XFkhH~ewlqvc=3SD!NIX}UAO_G-7th@+2no+Jxe|>y97#ZlPwVGZ3l+P|?&ip1x zvLC{twC|Fb6=Y+Jjjw<D%HxH+Gwn=W^D(I1cP~bSL*NmPlo5sAV5cZ-%!v(D$bJr6 z^h}8A*s|SiTVnpu%5O~p;hPH8eBab@dk-pCeOQpTuZn)cdwen(8qa?AOJ~@do8#Yu ztt}S`{t4VaIq!_@o{id~RZOM_KPJ~l|5=POJHCJq>gO3#_7qAls>|J4m8!pFA$fH< zIVdX?5|b-PaWAJZtb4r=HdOv&mMP)E3cvOOe!KR?>2M<HHYPM5H@jRgEg9`os{EBT zM!4qXOsrF1fB>*9LVAbJO$HQ0Hzrls`-^R644i9Uxd=UUoJt1$P@1je-(Q|pjVZ!r z_zV~ES7dZsGV|sCj!2<8u2MncH!y0HBtqMjA&eyg)vh|Ba@?gd=%mE6`AD(T`t`=o z=%F<e8YhL`g0%Cag($+gIJ-c>Sc(m%UJd?|uG?2o^7m{L@(jh}<Zg^brp1`Un6J<? z>cXJXlYkp-&B?dI3{>fK)Q<qF4ta;!l7tQ;i}fBYNZ>|aVXFc-E9xJ|uZ~$i;Ov*o zvmrJh=_tDQDEX~7C}HGte6=Udneq6c2A7P5c}VPK9Zk*KVC;6=d5q*3V5jc4y6N1I zQu&5c|ESPZ!W7l`gaxQXGJ?;y40GZYrn{AEL$4)oF1ZaiGT&*~xAyd$$UC_Qb+IF1 z{uNxbb{-dh<eK7Pe5VPrIpB!)hGui`-P9O>x6dDxOo$}?xkA>B@|EE$0enId+#ccH ze-tcdE1-jYZzI@J?~&ngN_G^B<2sZ|MB!suGl6r@Jqn>w9rV<+?m(R?LZyKTxhJCB zu+$ozQiw~_eIYaSLA;W)x8Zy9SMM2Mb3f3kBqVJ^k)Rp^ONi&!tNFJFQPPm<)!zwg z6#wN)PZ17G?H;hXxlEN`5@J0BRi0&;Y$~^Wcq!;gaA`U)-JRhYqpA-BQn6I?iCQ^E z5zs?58*^2&IQ55b=l)g{>~Wa9+u4EEYX`vNc73cNNi*WD5-Q}b8I!o;e(zeHdNBOQ zmE2@=_dv~+okTOZ^88@6)$(e<izn}oB;$cmMmSsXAX|bn>35G3pK_yNTq0d$z*DA+ z$m$m?z%)|!e*jwUUrO~?4eO;nHcBhwXY%!Q_s|p$$NhVAk;m-c$^(sJYLmpY`E|03 zXJ$9vaGfahs9X;GCER#ao}r@B6!NvcsxExy+=ifh<WtJUDs6;wS02SARDMF1K+Y(D z*;ly!#uh+kG(N=It%5R1Yf-Id5rMze0TQO(4wlbBeOOM8A)fIcIwzBttw}$zya!2~ zMq^86dKmZR25pbewpw&ZwU&Q@1NZ#h&+Syy)xYl5to`;(ukcCVrViuPgY%6;%v4QM zUKHk63yBuv>ga!MN1=!5l`vkMSnn{ZM8Wd38339rZ{1<(Q4bO|nH?pIZ1WrP;?+tb zcWSrX<$Cj+Z6%+*G@O)VkG|L7Jtp#yR7_%P=k#o&aU9Xp0ul~p|DpTzvZbD&Q?S&7 z#SMc+1pG&934*DbH6A(vs=kij;q&|d32!hLBeF#=u#s8O%7!rfp{oDfOLMJ^Uc>g+ zi%CAJO^<Vs?m{gGNtJ^*#LX)|%k!6>KWC4x`*h=s4xQjdU-L1K5xh}T^E-~W4@SNU z={-%OmanmKuG^grw)8r#pk2j|dh7y{N7yEIYA^apDb2K=bO?!9U>>i??#xO@7ga9U z=(=8tUjC7-(7K?0W()fF--F{yA;MYKX*Wg<V`7ykayv|y#6EaOY_dIZ&E+Q5#SsiH zRFi1gaK~3WjUy5#Yh$?wNW)QSrG_jSmA;7|D(W9(2o@dS!ZT*;m}`_OPf~vu|Hme_ zF6MG;gINjPXnm*Og|k<OzAbz-&)x`Sq?{?4FC0PSt1p$rqA?v>2QvkKCx@ZT6H4>` zc)!eJj<OB+R?zED=cWZ}pMMeJ`2`d`>p%z=US*H4Nk)+-JDOA)PpgV3ft|BYFL?C} zBBnx2d_>-$lWpaUvY#X$TML-C#@fsBb1B?7bWi|>l7j&M%i`xBce?uc49<f2zPhx( zOT6u&;NU|{?w$q{>Fn-GA*$P999WK)B|Lc&K|6kiv^qdW`rEN7HP?~$@THX=%+}cX zuCMy5oY)kdLrtS0Xu*G+TtB6}9m-7(=`yCEw6U$Z5;Lj#Z~HVA3eCC#Wiy%{SXqo# zLTawvjdQU#=J>LHHYFYlV^I03d#*zN68oD{{u`!G*Xc^XU~;I=aFThiIjR)a)Kd4M zyb7c;n|Ix&wD$*Y-!xdpo}}KMrczV1b!)RJ{j0*=>rEWr8<0cFXLMj2Qvb3U%dC1b z?JGBGEZipE&QCv*7gs>9*js`*NxIS0YuAMZMr5`xEpG8^WWc*pVbFeq(QW74AdrBy zYl(VMDz7QO)@BzglD|<qpuRgtt6eo3K&m`Qo#1tfoWCc5-|k>2ox;EE#04(4+tJxK za6l5Wd@r2ZWQC`nUgkdnK%mEMF<8Tk7Qup|{3>~OYGT_Vey`)#;Ppecw*Lbf9;gwy z-vIErE?HV+?fo*p(WFxvq+~ui(>kGUFAJppvr^+cVN~Hze(K%o5v3Npr!7AZ5<qdG zgCRHG;+15$`Sj?+1t+za`jf2KgeWBs#(m=stYHZ0-5o39jT8dM-wpuy@@bzJy$g&* zt_53>>fgW#)stvh@U&Dw0v8VKc<zTnh?==5K+aTNVzadd=GTzpgW+IlN(W(2xbM(x z@+^z_V0M3Pik|B=GYK1H`z^yjC$3d_iY}oCa3@r?D#}0webJ<b6Ai`<w<LY}b}aJP zH6%!Fk4TRjy}3USnqleH+22wag1TBQr)vY(xHjzA_Lj#rm<d~y%8?2695B-Z##>dp zNsoVOUU;}zvB=T#D^zgY?jhe8_lWT;HQFChAc>(IT78FUy!s+|z0j*uh;kb+h&Du< zR1kPOtR4_*AD0OitG7DH6LM3-R)q3S{>gy`S>M5ISMK`kUvU>C4@rIgg(l&Vjui9H z!<N8wl{K4Sdw$DuVi!DQ|LRQ2VTQ&>I=W5$tLE=SW?=2~6fB&|@DJVAm|0sbDnbr- z&)KDV-fCk+XVp6U%f;AV4DKQ~!3R5anYR|KwY_0d25>1Rjt6(lo+&UYD|_ZbMl|Fq zHm$A*%NV#8n185TYNGG+oBrXw4w9o?7KuXsVIcLM?u$?+%sXb2&WZ?APIO5{*hDL* zin`QZiMPU*GOT=FntVp9u*n-3X0lzF9TC!f8U)ycR+U+~syXFU)NxOEGg3RQy6<|i z=|0>5^uYPklRprVjNdVK-)2mS-OgX?CUdT(^8R|_AI|iw7wbX2F@|L^?%*EX;&C{n zffC9sJxtHWC8}~f5InPa+1y?`Kr${ALJ_$;fv#<C+$(9szU{qPU$+q7{^v&k8fkJ` zg5y_eE*>F_{c2^G54&D>F>&cNZ}bMVd<i1BF03}ne}vC0e;pSl?eq}$;P5%DxQzd} z^O!ro{?T`ji4i6~9X;C;@ldX{8M`nr7dYE(cmph$s}g7V;;oKlk6PAhFx+v8jS05E z+(25*{@h#IkDkS^OqcOpf;Tch599#Nf5E6wD9U^|0cWRTJHwKq!%~>Dzdy76=WyMr z!Q=SVKSnXbR2jfaYPVJhZr)Hew)-P5#5L%)Z^+NS?^in$FMormZC9?1Z-Zsf*`5`K z0flb-Hb<UT`hs_7^##9T`uaY{r-+_R1D9pFRSd9aIKpoQS!!r$^i66<%4_lY2m3CQ zxjK+|Lj?V#8PKg7(OO)nV9E*s$wLWWduR~hsyHX@cb2G7yz&t9Yxc+!+N>QgfgzyI zz=Y+;*T`Jx?0~YUuou=#ZOyiMvUA5{JfRmU1~7Mt?uitF#pfh_fBVaHY&|8Xd2)oY z(94uS7=nX$<j&PIJZEr?e5!2dIhyi%t@&W<MT!w5S*f{=6Gpo}=^p&}C{rF)Gv{ut zFZSW>4c;MA@^YnL(`pToIWH^&3aXkY{yM(>XE@-tUOr-1$b8L=we{1V?!cK_K9|(v zeND%GnQbK>HH|4VWiYE-Wc{b=iP0}mugKvC(%Gtu$K_|{tdIwr9|7P=Z-i6pD6!U> z%#g<JD}6ZiyI>~NK0JunQlm5e%C|*f@#zTKv8lSjmTbt^_q80`N7Wwv!(wFc6-zeH z@L6k%VUpEo6kl^|MMh5WP_IImA?p_isFPI)xdL)tgxOU@5TgWVoZd+3kd2o3P!XOY zSbC=~RnxSC`mZzfGK4Ew(Q_H7fJ9=HS)S4G_+Eo7Qe|N?OV@@}sqr84^R<A7n%7#V zu-GI{l(p)M?S`Qf%RyqjtT61^j<m<8Ws!Eq%DrgSz>0#dCcnl~l~QnKxn_mA5x<y{ z4sYR;4mv(zdm&I=KCZu4L?BpbY0%GB%&Y;IdVKX#9Q-`#1K+P-=4wb+4Bax#VUYsx zF(%P?f^OG5Cs8<!(_&61tM;{cW`>36XOA;If#{$~q;>!#1~4bC+j<mF_;bqo+mdg3 zwb^9fHbHQg;b71ku-b;l2y>DQCn}3v!GgAr7c9i<lO+;si(cM0rmuPeTPU!<2BOos zt1((0OPLHPwFs6X%S^<Gr)*xH$<RgZN&SM0(de6SQ&c$=VX*ZBage^NX>f2%)i3|R zxq*e{m%^jiWx7BW?LfIWS!H)QqH0u@jKj+jU(4d!yvK;;sf)Av*P6cCo;n@?fxo8V zzii0UJ|lNn66?V);6PMjjGCW1q%#K)^Z#4e8xSxvA|1z*alb|vhz0_x@sMl8O@-_t z@m;M+5&U3~Ay)^b?Jmiqewh(M0EPE#?yA$TXa$y6Iqu(iZWK&56=+9Z9CNC*WBwv^ z*afLHInBfT>2G1{s++mOJ?xsHb}+}i;{nze>#I(o+!A>MH2wem-3BO}Qo58qB&1b1 z)lsqFs^Yg_yZ_zw`ZRA;XJ{iDctV{g0#cnR5yZMIjcsoTh%)&pScwu)g19*H_towm zd{3^>QWh@vVo^Lw=e!XXXjDIL@_>1U!Lo~PSrauSQ*LYp);(gaKCxH!i~pufp?2Ti zJyiaQ><n4L|3jzf9MeW}1Tg4a7Oh-lw(ww0rvNxlq7PH(aFBOkH<s7y(nxJ&$lhUj z8EK-~iKuyNaU)rxR&ns6ULjXnf6CkHlrau$CDf=q_yWnV1-+To7Au36-NT@*yuQCC zM_tHY;&-awCX*JJGK{t@3umbu(1+%~=b@Ew2D3VH2b{l`!HtXk{Mj$ObZ4H88$$1_ zj$p1;hh#pxzs2dy>s4|AVnt@QoBr)xBCRS6Cg0xYIU-f|?tX{2%5PXhxhQ=01+Xl? zk}s4r+ll0yt63w=-}eO{s|lKaeQKlI12U97YOm?8oR`T#%}V$GSm(QZT6~K+{O)X8 z#L%Ph1M*t<*f}FEgwL6uEIRCfL#dhaUTiSCKXDLb4d-(?YrqUk@Qro5Wgpq2V6*_} zr200OP)6^K`)-9u>H?Vw6!$#CPsN|<R-$NP@T`7Ma0jZ$C%v1hO9?0nzN==VMoBdg zkWAIOc<26hf7m|T!(VNLk6=OMPg!83OaB58dfdaYFXhm8@CQvJ+&W}LQ|iC@E8=3t zs>HL_*D=@0L!IS&yoixC^UQ9mo)nL_x-7MRfDinI&=3XKrO+WQpCVicv0%;dM|Zoh z^90~W0~Ps7!o*1X7)k)6w9yy#v(f?LsX?jw${6i{m^WAe@9wZ@Rfl9>pP1y>;;A+i z8XS1iFYtG}NKYp1NLRU(*v3JT>=Nc1_X!Ag{B%Dns-mt^YV$Hj*``U#e$dz`^*-q( z>a+eeM7DMlw_kVU>&4CygQ~zAEZ+f9`I@B2l=9?AdQ)tW(GH8$?*Z^oZ712I$MZj| z&JExvw}UmT5fdS5oBH?P3>|(yzq~b3kCP;sw=Zx{h>k1eh(`U9^m%5e{(U9y2~!Vj zcpa@pjER<|IucOZ)|&T2!0HLHv|%L{EH&lm%`qA3E4NMEzoH1NnQWp}=CXGcYmX<L zNwWmMyrmGG{b&5eCFPs-^0EATPcnmIJH9;yF3&JDWZ9UoB^SGJ1#ki?ot`pqcMbX# zQkCKuYJY*X%iX>i1%<(BoO|a*{$^`v0)R_iB&Do-I9O{b2V^;kJx9)XvsZ4@`+9RG zkxo?anKWBA?Zc!YAQ|A=DjuSHBD@M}kS@8b+{GcC(#$(dGkfNZ53@F14V9%R5>UL9 z;(cqfw4$w{l4m!6uVRmwiEwYrOS$be()?p&wXD&^p&d=C#YlHly4GD`@$sn4G9V;# zH$|Jb^9z?(Jn0MgoZb9)?;zxI8;8|`?ZD`uP-V|$`8%abL(^-9@dhU2!A~)pS?<l} z`Gfaqzuty`=Kft+*>Gn<SgA(bMdB&bD%qZE8nDK6hFALZjY2SWEiy9Pr;@*~M~(~O z`fTP(?5nmg-9GtIe=g%LVNpPnCgk&+{<6?n#iGR!?ETGK)V01;4UueGmRVP*I%&M8 zsCeV}Wlf2js`=>qXX>CYD^6V=E3w9-j7YUjP$s}`J&_Z1@pR=cP@Mvg3jWSdWiDG= z`L<!BN>z-(qmIwb1Bw%`@|JBg-_QgRcI~-A2$&)F$Pan(N-@1{O@%J9Z3x$D9%rcF z0%fgB4VdSX-fmiHM!jRH*;d$b1gYA6ySRedKJIapr-TvPG|(e7<ZX-*C1hz{y?sH1 z-z;OluM%XWbi~%AUkJx-hdc%q<>N+m#x%qTL&Aue5H0A)_5pKqgT^}iWipSAwT{ln z0P{_jzpG6;<h=;StALi=+&^?<IwCZwDyjfcgn{DRd2E)z1|-SUo_U!GoiY1!ov5R7 zG-(%ezU7naG4_+ad(c@M9g%RZXdR^5Fh(%p(2u0lQ9SPMf!=%JpK2L35QnQ8x(n0N zr7)59AC8IQBD4b}Vt4Op4y4`yH|uu?=5R$USIVAPkupk(UCoVL1AN)zBz12L|N4DT zc>LGUiAGE<H)eV7it<-F#z%`+d$B$=dWxna0nX8jfx?=8G?r=!=rUwQ&UT4L3(#*s zKWo26ULg+i!<lRm(Z|fZGQLsi5)CtA(pNv!H9DLPzhGAc`@f%ruZW0_%aopdsIdIc zOZ6(Zrg__H?c3RL$!!1T!t|dmq0++#J66B@wc4;_;C=?<@5&Y5r5%IxK6{m5b_ad_ z6|}hw=5i4RPrAdY4^xM@uvOtV3f}gHTYJ8WUyIpZCM_Wc{{LL~2g8hj>ye64!kM2e zb)6mgq{Z$(*5A~>Bc3(+Kj5X7Vv_w7zbX(Qp`GR4qa>NpYZD?BD8;z@Id#|iMG8M6 z-Ab=xMa!At^tD^yKITd=n1lj!Fnv9V26_jeDWxr!jQRP|Z;9XUu%(Ob3E^q<rbF$h z=!i4|;yh$y6>vIf$cuzr3Kd3RI&0>Q2wMRQGsncCA?vs|AD(Gpdqf(#gZ!hFSQPR6 z()^F3Tx66e2E2qz13aG60S-pbU}iN~8GpTz74}W5%BYW#FJ!tqb@YxoKx+FvG+u0N zF5%$x=ERMe`=tSV4s=8GzOP)ZqUy?vXYHmQ)>zr}NW^Qe_vv!E<>$KWe9CbB@a)D| zv-~<8pZI8g%JsMxaS=W3T=qXBjK0Wve8QTjDik{CbBoV~?#p+gN|iOeMc8YT6rm(s z7PL{VyTsPkO1yDs4>IBa5)oN^&I#EuR|J%)L<pGEizMXIqkrhAww`Jzyj+YKlBX8Q zDi>2(82%5PVU~HM&7(&iiHwf>M>g>Xa!kRBBvizK%2=>!fv#iVFz=%TY1BJ$j#~pE z=lqn<?W|yvYHXl$TJW={8`odQg9|6jsn>=1|DpSwpaZm0>ur=WTb^!yaAT?6)P`CV zc5dR{rG*D&OBeVUF2g+H!$I#Q8gm(obTZE7Ke+Ht{Dt!-@I{#ozQ9HI-JSHW&3)s0 ztYeZcM!Gt7u%aTu2o~9@cC$*SrL&d>cz#*XSMJC#0oymEc|BJpeMEIO4#l@I0kWiU z!Y;Oa1`#^J+-z~_ZEdFFWg8!;UE9O;T2%PrC9I~@k7K!uou$4PAAOn|e9L!_2FP3m zmc4mH2YzyMJjs)o$7bC(Yy)dDc~*)S&rB)3Fvn@KOZ6orxXOsBt>%E{AJ>s9RBx;W z`TSt<sWnkmePYcU`CI&@IeYPP(m>!D<EKvqzGxF?loAf3wWNvzq!<}!FH8<P5l0=Z z{N%j2+8Y{198iHE>-zA)oXk)t-B7yNE(x*(9nb#1J`#kjl@9>(`~E}6=UR>Mn;|IW z81=<#H)aa(otXv-NG1mJY6_%NO(dfBZv{^Ed7Vmi-%G^!bcYw+(18B>Ik>5ik@=|4 zrx@cg>23V!V(sIq-D8hyUjRCeJppsfTMMVM0z~5Yaxnj-51`5JdU-SO!IoxWVU+zQ zD`Taalz_n(Ihj=Agh>_;pSjjsZNn!Ew)dQ1GJ|uaEI5P4U*2yDCW<TMgl1=;2(d1e zne@e}?U$oyv4+N;z3Yks=Y##*#c5ms8>cgd0{e&VK2C(f2?1;qY;;jz;6M9!>l)1C z%oF4OaI+rcD%04IEn9RO*+!KV$pI$)U=E51zNw|PJl{p$%5FB*;ls;!>EAjC?~~K# z$BYfRaB|YSDP0lLyRYdE#3yvA610DVFGd##z9}I1oMIAcg$!)@!8v7CwhP(F+Nf}+ zx3A`Ff3v`cpM;cg`nf+yID8X+|HGPxXI5@}_`)W0+;t0aU6&WXSLjYB+HZp?*Ge$* zxPPSpxe=JItlat%e3=`Izo1t}`WU`$<}&As{p<yDnHr!cAs6ju#r@gq_#Czj4;SN` z*?cb6nHv!Jjp9fuCoIO(MAogwhoUN@y64N3nmr`x5dzkf(|Z`_5v5sMk%zUTwUh@c zepS-9dYIIo>d>vC%}kGC{}?bwho4xEx|cw!27O}jBuVA$GQ>$|lY3;nH|*H4TUeD5 zUEud?={1W_Y`+w!;JgkWgBN4T7?1yx>Go0Ehba#j&%Ix|^zkC_-@)EL&t-H<;V_5> zaisOXWxfo4!=Ky87Q4XzlWNW#QH*$3FrA}2VDM6$`NKKf)T3}VdT-z$K^JIOAb7iD zt|j1?55S(JiKt{0jbugBK$IA~F21hDdUpCABFy9Ez$1M#t(ar}17M|o0S{#kDkk-0 z3PspNaqOflzJ}%@@~k$c&;?(nUBAX*1^QunaqR&s7L$-?FjX2S8w>JhcL8$A$Bt@h zK-gn<4HZk?HRS&dD#Yeg7P(B_GKaRXz=r=Fga7ybaIM*K2ZJgR=p+2kb^h^%C<$EJ zcZt(#?i&{!J?Q1^08If>Nie_z)=sklP7IhSE&oAw=8)F_br;|~&j90C)FhnL+`(TG z@edtVe1iJam#E&nnwXss8?V5?aHhX5aMB;D4!C0sMd7rFauj_H7<#a9s@sX>qoL4< zbrNC4G2=OM?Gq8#H`?AtuPl(_E`svq7C)Va4_~IqT^6Yfxw*8*;tJ&;9iUS_-4*>B z$r0g4?E07?*$BqgYa?<$keu<Yl4R8cWfZ@K%4cuSvTyG1ZJWZ*cg;Zj@QWB_Z=iVx z3;#p+(l$vI{~7-1k*G|F=Nrm0%_?y6DXG3a(C!UR{i5Y;wn3vi5k``Iff(qE2%;Of zyQT@MsmoO_N37MSya?B3O)e3Aml)1sOcqqIq4=9bGssETRp;N>wD?SC9>0OSpyAi# zln-QwnTZ`w4tlye#})F?z5Qm>Jc@Cv#y@oV-_gh=5R!b{oKKY?o1&YG7Pmw=l?@#x z`c`BOKOT08Czd4UDg8qyb!fE;mO$8QI4x}fzMqMg=M6lZQXVrt$Ps@P^fuCbh#&Q) zmC<!l=G<Bri}9dwc-3MdaQuR?@dwBVBpdbI=Rw)#rRKx&HQ!s<<$389-PgCygT~h} zij>Bs2AnsV0`7fktP;o7-Ie*ZqDNt|QJqbYgv<dxZ*(xl3CL`VG$Y`9llzJYc40LB zVGZ{$Zm(Ts;IK3GA@ao5j~cJ8{4FG$dQP->%Gw8&x{sK+5-*PEut^Er77tn)8(+@7 zMe!#B{!d31W3_gCZeZRTm!-RPq)g8A$3`4-kJGhiSN2d4KnyC6auE=NLj9KmI<Pyt zu7Ggt%nC(m?r(C;lwWA_nR1dy;Lv%jc092YOjx#yT4b%Aw|+LJ;Z2;KSNVtTX-h-P z<?i6vi~6A3omV9Pp~IMJ2$A}iTHDI-tRIL8^Dmc#I)4x;EI`pO6yHn26y+z0COO8L zvfsV<>G_#;sfUAPC51T(+%$Z_(_N!3wa}Y;M$94d{Lm|5Z>a9l&>P|NX`M|5TgUYM zWi1tkK8D-)qvrE_4NJa55A8TYheDZe76V)I^@}k(r0kZXntk`Yg)^C3iRNYNS<rNX zA^+r~Dj9c&q?NmAa~hG{8dsggPtU^~8uAhX&zBJG*rqm)CAMcmrpH7xcitvqo6!26 zfa%Wl2FQOo8wlYsWgk!zYXlgRfF?ojRw>1mv~NYKYw<0E(G+oH>FU{#40-P}T9+3a zmOk*eT*nP9OTO`e@D3I(Qp!y;AC35YL96x)b>7?8bLg=QqYK@hOhlcdGN&RXX`H9V z$P@Fj3#We^dbjNEQx!=uF~K5)@jB9bHYcxzfQJ3x(K}*$9(w?iX1S@iGe@i^?@F*% z8KQL<vu(C8qRz!5o%{3*u3MB*^X}G`Ig*eE=0pAj;L~Z75UN*2umHubm?H4lAg@Zm z-R+*Z|9SOBVO1mfcqap{Z?-Khu;EG%(dLA~x^xMYr){5?0xKgGpvAN+!6Tu!v-*D| z5TRB1g@6|9l<uppyUb~*gT*yv|Nk?Z-iI<%dX^Xu*b=N-c0OPI&QMojc9+fQ;9wVv zT9&zau*V3?dY~Zv%#B-d22`)Dpwq`h-C7g!Ce(MJ*cSAi%Mn|q@tcY<v5N)Od9PDE zZHGGLV(cyv$46~R8Rgd-gItgJVIA^s@(%Cvf>&GW{zW1rK?TyfbNNSo-s;z8n_^W{ zD#8^d8jv69x4uE5oRD~MumbRy105$2F2GH#cn>~9xxd)+*2ZeR)eI$+XVTWdA@egW z`jUtyXsV0Ut>G7Ly5GlR^0NO5!&xLiq3WYaPz1U{LFA&GA7R9xJr?crxsIu;GuLRY z3eNU;%*0pZe+i6rK+#Bjc?eK6TBDr>K7a^D2T;bf9%5WqwAi$on^~Egl=GI@9^Q7A zru*dq-#wnRgtCw!gv@YR4WkM~c5m+Wrjf^=r9<y)Bi^2kV{lEXD6Hzs%^m;d(#8g6 z+{zrbvY?DUZO)lpsn0rnat9Cx*8yz|3OuSEuFW=7HH>;*gH6=F0vk4AJ!g}T6Kl^q zi@W({{pCrIn&YO`c=upenoahGyyRXUj7_F}#nVi~?nIL!LsbsekS81@Slj>)3<cde zQ$rhjk9kDujs7EY*2QbqmGPC*x9{m0uu^fo)5k9y!)%4T+O8<|55n55da{daWLCyt zf{$8EG67A^edPb^?!Y^cmx6Wk5oNuWlYsp=B3xbjtuD;h!{qE%?b~2HwS0Ulno_^i zEF$QV<(q*CkjTw;4V0688GlcJ!NSSr{ME32)C5l0?i}?}G*W_gbu((8s@jLA9kV+g zU|v(Sm*5vD=7w4O9p0x+pe5CX?65oUSZ8Cn)|JfDfXzB#9F^R9(=`>5Ods%hX5-nJ zvvUDK&im#JQKDZ>^7`@sm6N}uep*x;H5a(<%kKcb&xKkeCRku{sc^148W`|=#i>^3 z{dq=bYTtaJ&FX+xRy1ctPh6j$=l3tVHP~}OkzjV?|L!6KC~<%aqT9OCZ`GX*59Mj) zciOFy4!5Q{RTAQ~?%X?FetYiq+M!RKD|lEkiTZeQK6H335#V|DG|NS$!m`XN0g1n^ zrVryQqa4iH21hpfGPve;HrmMhZy23?oO3snvl>8P8+`@Z<~7~nKQ8FcHPZJrs{582 zd#fEuWy64D03-P*LFv@`!H7(4GmM!@)VvGC=k41P_N{kb@WlKniJbswom?Z%bZ(&k zWNYfI&OXk`3q5fP799#bSpQ=lw+UdFjLRqy)?@C$$Vx=$%<iFneod|PlbgMRT?J_t z3lbF5WfmU%Om1-=cd(JCL{3HhHK7rflgl5G=)+PUOk}J0q>{Du7Cce-dPdLjywjsS z^^{4-{_M}m#`O#_gW(Ek`oG~53%6BMl4eb0kq-_1pBjp3jrra*_p+S*{<=>+^4a1D zPG^z8TC=<Zp0y_TCSrY?a7oVGDr_sWv*mR6Z`|3)!a6UV!U(cOg^L@xH^!9VtaA%^ z#~}MJLJJmI+DT6L)uZjZgVKSrul7<Vl2m@c9K=K$lK6EvVRVDWkl~Yr`ZfNY(o3)l zr^*vrSd>m#hx`wFa^Nyu%RZ?(M^DS69XDAlhm`;rs`au?y8BXqOyvyi$J&Wm=ZGyi z|EjTIqT+9%Ug3kCE9QB@W+cC=W#*jonmpFcKU=?xj~IlwArYU`&fLAkrre9{%p@aE zx!E}Xq5EY-)3i_%!MAa_g^H6|W5F_%T=gVjJuRUh{)JV0#<b?GzvkuCTO{S92%Rs- zC2??^mT&NIn&y(|&#PB2WxP5-ui_GVvdr4ZY&}gSF%{H%-k&H)y?A!7SCp(xOLGL@ zc9<t+LK;%Don;(Sjt^BQb7kb?DpK`?^pEJdHrg&>vv>SE>N2f5b+QVLWQvwhyB|KM z<a=qx-G`Os1AN3b{3%-xe@T4s(`A7x<Gy?c+07=&>mGX7;`*e{ZOk+_YDg^I4rRC7 zYzm)twHmKD4y(mQ+g<m`05x`r-i2(3#UG2|N9SzT`ClCM*X>%n<T~}-S~+9?cePe3 zCRXNG^G{!p%lVgCGZsIc`2giGvLR%tB+>C}ofg@-D`UIri@fODvgbY`trdA(RCTg> z^vdwLp>7N(PA%h8mfz_Q6{YxDw&Ok1Q&`1M+GRv|KXhd8z$ngY7Xx?l%7i#Ju|Cs* zzFF1!*BmmDQd;gd;~yilgHspxbUUv6W#wD@Th{D+ns}pdU*TlV;E9IBNp_B7udqb( zn82RV8r$d{bOK>Kw|QxZuRanR;uYfmu(>+*$f&7Fq&2pST+r3qcH9mdcfp8KS_l-X zGg+VmEHIvHv@MyudyFuxi_5(lX7Uf+BC^tWEL4!fKScD)E*bpfddu~hOQx}gN0@1$ z<xabU(Q96sZzbuzkmBPp4aY(RbZ-aDU)`E$xsy4lmy^#T?Q+@<UxSuv2e2j3_z|eC zT-9-9clDk?O!W3jGVh2wH>6bxS9PWr4FDOgv?W5;zaoGvdJRe5>>x?vhptfSfugbo zPKI}p65b7@c=*XTrJ@`6Tkc_eNZ@dQD~HZ2XxYx(bBk0SC}0tlwn$Y7fqCIL7TcSK zx@TXK*<ypuOE-?S$3}!82BWhMy^IcJHb>rxxl%$#gdZ4E$s+(Z9)+_mgIc@xA0`Yc zK5-}8+%H(87h=7GK_+#jlw;<fGnSakkss2w3@C77(2nMSzu&RX?+43eU$r7Az8KL- z@D+qHzU{2C0lC<E9>!Fdofe|Dmo_NBcJ=VrL~Ao)5qMOHJQ2IWf^}A*&E8*_Ei0vq zL|U;g97Pem_O;&7MQzVKu3*(KloI@5Qz#0llH(=!`TfHEDFm0kL}tq1YY|cr)eh+D zBD(&e`wLt^l-b#TgNiEYg>a(DAU=4U&&^8o;`VL~#tU2uSTy?4B1ypDbBsF!S0+j- z5xvG_aiGe~k`EL(((>D7^26w1<S6NEv4HGKvmB!f|3H>d$<!e2a}eF>zGz4Sf8dK> zSu3N5zTq?XyzQ5focBW2jMftK_75<3DNnz^I9;uB(}=Lx-Gd~KzZFhRrn84pzegUt zP423Q_>CsUlZ7Dd$L7hcw-BRG$v*T?6ZA6{diqB02RHoeMC;R+N|b|p+aatasNScP zRQ$uQ*qRAp-j}Wn=NIIvXY0Rt_evwx{tQLbXQ~1(s>U7fAf>c{!vc=)M}>FwbigZj zAxVBF=HadY5h@ru(G9%IPFpi~Q*}KZU;S`=qsWOh%C-zurT7x_m?&N$ZhOSZxD|jh zEPCtGGUG^@A`-nV0EzMt35QC2ECV`zGRsaWP<3`pi_`sqv|_x0rHM+tCt>KETT@Y_ zfy}miRK3o+lON*;pklg(0c9?6Ei{~4OrZK>pqt4GJ01iv<MlG{_%Tv(6dKUTjgBj7 zi^V7pvB2ac%6dcg4Pa_LBR7ptN2*ew-?anmdS{t@0p&=9XGsPN#A3p+zD53{Vi)@y zI^>X+o<c-M=Uy1b=`RK8X+TP}oV<fPS%%&>?sL6bdoC2Ww)!NXyzNqjlF$WWW~>tG zoRNUbU`e;HzdOUiE0rUi`=4%ZKlDbq9c+U7fdZ7?mJCmj-ctg2e8Pg^%wo(#0NbeI z#g7sC(w;kLpbT#V=5PP|m5TvVIwDo*X+EW%=u$X}<@>W?qL`PZ(n~!&!Z=aj1a;Jf zbxsTDma5wL7*LMNtb7xle}CqO{+|Ot0`9-vYXB5QDIrukTVh9*Axuzh7*Xb$U+&Kz z5MQb49Yo%A%x^RUWp>$1b$XVt@P3k>W>wk#dx)k@!_HBqNfT|w-^*dGN=@~7U1~Kt z63J7cn+rEOnD~*453=^w%OKN!&X)XDks)o{tCNG@htiw<=0XC{Vm*r&aFWY#4p}Ub zS9Yz5UD}$%D<vKJkquMnucnjjT(D7h9QpzNFX4_Mp0|g~{HJLj2)_s1-w^6Oj3L49 zva1?2O_^GKkL8d0#|Y}(zlI%UO(kJ8rL8(e*QTK)ANJz8o5`MV_m~%&I>9N_?jT6C z5+YcWFsP`D^-pDHb^%6Q<qS_g<@MEWwiY<EelD4twv}C%z2@@5&eT5Qn4i>uZk0!z zpH>PIVm2Z}(_ts&27@%4Rrw?Tq*IvIgHf6|;>dQSgghP<6I08gvZ=mUb$8)K{j(nb ztB#GWPhJQ4U|!{afvGv=))yO<Y(9zGxlX6{B5~=L*Byq-AoX4-=ctA|VY=4#)uUHM zzJBcBp1zOCFi5)ytA^sz?NwpHufLt%pAr9kCqR(3D{K1(<_-l@jOcyVOxj0q9L{vo z_^vD3*c7j)Uu5NV_b6_JP;|k-{`Kb;A&+`agzC_QiOi)R$H@m(Zh>!3n43>x{St=K zIo+gs7@t5O_eNT-#sAI|S<h7&##ySygM}+|{<cJkjw$uy!$eV{;#w&`SV7sq=nOu= zJ3T`I8I15zRQ)-28NtBRyC`tzO)$_6F_uJbE5$UZdUx>~Bt$O_Dpm!EkY8SJ;+M+! zP&B>qk~GzM?Zg&uYZ(4`!-8dyvSgk+70g1?tdEnJl=zzU`&fTwnMaZ5?zVSMi`wyI z$*|>uSiB`wvrNmQVqYI7bq({Zn~^S5nK<Jg-Kudt?^WEg2y0iq#F-a$=Q5LHj)dHR z?+Umr0rU3DF7<Zo8rCJyjX>Ku|L?Ajtn<Hn5Z@VdX)Un1b+j?jF4`m5n2_dN3=N4f zsn1pK2c<T$8}ap}f(ER6>;$&iraf@<MT?Kxev{$10YLd*&iG9lzl*SR6IrM?A@r(d zg<9HdNb-;oc16ZPnlDasDqU#k;h#;Z^o2}k|1VQ^bN7XJyBh1$G>Q*q7T=={h^n1? ztknBWU-P>3eO3o8#V!v#xjgj)DYZ_OBMeG*&S+Rc!<>Y2-UVD!`u<&0Uotfmi_u0L zB`QJUd7$bOvcW8su1#i{;;-os*X#c#bEdX6d*px=?3k&DT$OkuK}w*KeG=K44!>~{ z|7R!~%7JR9T^y}t+-3P*#|m}0^}^q4!1KUu^9F_~cb4dnZ_X}<Fm9L$i<9~v?OSPy zZRd_#Ch#^TCWmaQ#t`$m3i%;%N-z;-ik|~`ZtMErwFHeG+(+l!*PsQHb986AWwe4| zEC+=XlTRx$_QiC?-G|>LUWS28NUJ%e2puHrk80TuGMK69r=(8J=GOunHfwJ}IVigA z^+^GrEg-Y;=_lG<(Yka8^drripg0P)gaYVo9lQgxWvPeQ`ZB&qcIEMUaNcX+7J>=_ zW_^*~%af<9t$e^x_9>vU3-SjFRAA+?v7ppMc1}K^DBId@)9`1lb*pdZ%i)qE+Uf%j ztU!aUk_cqCOoauapj~k`$?XR>Hfv<-)O3zvcXnIL>&~9d8*)j{N!p=HsEDiIe%@bq znfBk4K>Y-8=>MRiXuNHti73z0=D_-yg#xdm$<eEw0TpyJZQE}?UEID=rjq4Ugf0pC zqII!oem&9Xs>b)Pmm81iZCL9`x*dUQ2_C^(<<mB{3pTe?^%lIYiC+pC2H=8+q+Zxr zt+V2<dp<wC{9G!Tj?SdkJj_*?pE8x9?$gHUlEE$Pm>mRb4jJjn{=tPx+t4qgDpAUb zC#EAf__FQIT2)_Fc8giUuP5G#e__<EMX`JQQa6?^UG#N84BboU7UmkOwJbuI{pRE! z$Z_;2!>`|kL<MkCGMC{o?bQvWj1QQ<!7>N9W{r+bJn{mGt8pnuq!%nfewjx!ihVNe z>NoS;+rDTfr+2`2>V@C;Z6m(DkruD`f-+aXz)y8NKLNP&>&&Mw@={G8po{I4ge4&! zB5O9xiFmHzmUaJ{WQtsdzoU@bWEhp}6GiM1jE!ZgvO;#Y(7iiXYjYq#d3YFVPL|W5 zgdvv=)bnDFi;^=EO5X2Ew4j1Lf(N2R#Jm^28b#AI0aTG#eRRxe6N)Ae45c6pa|p?M zIA9(2xTxHXC)Ex*?|4?<j_+zH*WCYz-GT@YkbAC7*;2e8kkl+$>@2fhaLy+d>R$<( zqS-;y0l5o@U?eaW%j*<5+GwM6Ym>;WQXOPATkM2fu=<z6>*JWQ+NvEhty+8?xZy%& zP&d~gqNW$hOM3UVm#F!2qSI36mp;=Rev<xr<08fOA3DIL&aDQ}-SI+_l`%_lvBDzc z0Unn8#e3pE`>$!Xz1J9wUokyAm}z$gA51-kG9f>~7I}j0i6)I?p~EDCyYNBnlzW9W zi>I{X+Dizk<vB%_@Dk(Xgx<{MAfqv^rLI{?;}uWmz!b^Ltq_FfU(6>Bo{BtngqHS% z733yno7i{*64`WK?4UC1Gm-gl1X$TU(Zj9Q)}?w1hyFE{LG^MG`8laRWNwsmg(Xaw zr?$2=PF6J9BHOFrQX*~p@Tg*u+lu<?tD0aIx{c7tZTM_~m*ECpp-R-BDAzdAa)eK+ z0Hc`5(q`;#AODs+?EXAhDt*r4I&NtG3_#%j-NUMXahG1Q9WhiqXChpfMPTdMi=oHF zSNub_7YCtaB~LEvhGAJk`ybUzx{IGYymO)@pTvc~%AUI9HH%t-rWW2}5R5Q@I+9C_ zCkxZ?q1>dRy(wkQ&`rG=66^D5@kLQ#N_RkUB}vm=!<n$7iE|>V<~>VZ)%U>deN=iF z=}0?11&xJr3wi5K94s;+5=`BnZ&Y>oIwNm%Ro|0;>yGr555;a=F;AlOT2oNvRIPCz zku&{;mX@x!tZ}1@H?Nz$<Dgsm1L%bUn_UO${|b;DAV6SLx<)d#H+sjqD|Lg%>K;c0 zXV34D^1!}6t#Fl;w}IxB!#0mw$mZ?G=L?jhD~al$pl^?-ul>z=do1*6Lbj4TNjNS3 z;O_~;%tD8*JlcTsH@NDF_;56QN1x!2cQc7HcjRgfwt}{RO-RPu2Kzj%_>nSxT7HvG zRH@tJ=8+#W2H~xruhc;v{_R{NEVM1l#ngx1CTAvK@A=B+T`zIBcbmN$rO_tO!&kY; zN^!KNz~F=&e?zj)=Teu<{h8UtjrtwjjRvQ?<lJt{?htzI*NZ$<?Mg%tUZtdyG}~X{ z#zS(QSY6%~>wC@n4_)p79{HaqkPTdse^21$2K_QuUe{D50F}q{9Jv?sWpOL?GDSW- z?^P8-&FgCoLwVk{p_}?epOO_~Pr-CIu|@7UG?0Z$-AlS}g7`jE;gZ|^(Z)0$BmkJ= z|2Hb;@~DP(B<HThONchJwyz_~>H)GcE6n_v9XToyEoU|r^r)bQe4K92Aykx-L{>Eh zdSvw6I#hVr{d3T?i~z@+!L5aI${FfbI%%&XJCf`iSE*zqfC%s0(+~0uUmpCiFE09n zB%h1j$-AT+bPDgt$W$B3@YO5I{jrlTB4%(2!>Mq>@c~^O{}*UU$6A#r6XORMHaiOZ z;Ye|=Nqv2jj>0+J7r*|x&l@@;4u_UKvI#Qxk1WZOF)Wc6s|^kxTzhmuNRe%%rN6_u zYgvDGS$hOon_kuSDB#lL)`r)N%56{PjJPUsX>)p2TKt&-LSM^1y+}2>XTwQ#qxdA6 z;>;aW)&>8e+r~adCWFtOyv&2cFjjLiV++>(``6l4Qu+GNguT763{7{}Fux^!_`C3H zQ?x#N1c>d4wt>xso=T+YPpZhJPywl?AEhDZGhM}el2&fdQyg$<-FfFEs<ZL?Zmr6b zd%iM&o^)TpK#OW&;zQ?@qoB#pRQ2jf4ZdYNing+0ATU(HRiz$w2DKfK-si9{OE#P? zDR2HUe@8W(4EB^vss(gms1Vvf{fBLVCk;)ld}khHt0cFOXTG*ofgwP7J49eR`LjrM zsGtJ&<8p_^Se{r9AJD0q&@+UGEz~6I&KonZ#dPiGIY3hJsSPR)DAOUGM?L*^lNH;$ z?U(EwEZ=A<T;cD52+#!C{$~BJ=<orbA?Kznhn!!0HoR;97Uwo<T@jXhUTpWa5R1>4 z`Hw)!2<%Yeuq`63OZev4pLq`Ars?RPEuI+$y%mK;8#CP~4GA<ti-65T)v|GI8V6hs zsoOWexs!}I(poN*JjNbe@?sJ*w`*!=r;L_oP>P5Gn2QK{tBF69XRu~HEgjU60XOr| zTGsx(!eC^I7P3=|aQnN+>mDQ8a7DsYsFDR@6wmI)KN;=efoAEP?XA;}tLts-%67a^ z^2q$B8f-x`s&R}M4jPI0p(lv5Z;o;}BSzwKtI^QLY(ND@vjEfUw(y=oJ!9#?u(Y4% zJis}(5qeKq%#cUBMzrh2q@(V(3zUSeR2KlA=r$7Y6vwH!%~`{J?#eBZTQj$hF!%Ct zF+^PMHL_}QZQfZ5+$>E85QsaF(K!^13w}$p&=zYHr=@q!QrRuQ*T5;x%Mgxx(t!?c zXLp?cQt^tCw0>waDfP%A&0xG1#c3;ZSeb99oR}HrclueQHbwA+c<(RZUGU$F75MkB zn_6e9!%BCG8^UkC#CnU%_A$l9r%RVq;crph#vfz=Q=x|`W&PJxztYPje^8d;T3Jva z<wZM^cZL#hzNd-DcSap*V%>rs7Ut_ZzM*>YS4%6S!g%V>G6x~g1r(AbM)MOxU%fH6 z1)wy9g#-es)>gN8<NE2ItaE*H_%J&$TGt^Zn*R31yXejMc2a#z+Wi(X!_NVzruh@K zutdypz00x=-(H$9lK=OPE<rU>S;pHslCoe3={!#Qb7bV?%q;-|y(o1%beHP<|CoEv zpr*RF?Hfe_>AgdgB1#7-N{fhektRe41QC%ELO@!m5v3y_AfO;19i&Px0fbOg6r@H& z4ZV{{ix6_X`+8^IdFQ$BdA>dK-2bmI!wh?`z1F$T^EiITw8^-f$|--JZRRHlj>}YT z3mVYt$_G;x3o$em{Ff)xY+paL!+N+e``CX5Ag4)psyyjvEHr4Y?_;?M7e<RC`89TF z2(fo=%mC%;6%w>}WJ!U}!Trl9o3gv4v(gm-E1N(o!*Xi}ouUfLrEw`WoCQkOBsNtf z%4*@vh6OgR#kQcpy_Id-La1b8nsv|oIiu%$v8h-#?c0EI^mG1iJKDjko%iu`LZ<FJ zJ4Hs1;xG6Py!8AS`J6_CrlOJ_M%)eoDumgGrYke<$DH5ZyM=t^G8h7Sd2HX>@)PDb zNDA>tf0+>mc-?wSJ33D=SbWap3;QExbOVGcKo&J;=t28cY#wV&wN)r<uN)3Sekpz| zs(+O~++i=>7#KJ@Zx$@f!Bmkdp5}U6B;(lwrOn$jzy6^KshY4Q>LJ;a8Pcu|7(K9{ z*GBQk@htkH{0O+nX&ZE$451=`MbEOWGk$N;xI_{2&NAi#)xlCSzt>#ILnAqfz>g8j z{xRE_3RSUHGL-PPj<v85y{QGMKsjMG3}d_~xkC5qKDpU&sg|^3SL^tP5VWdIHitq+ z0W3P3-<G{!tX_@L-K=5&7u1A+nN9hyY-D}gZBywDse90vd*{RQWtDh7lT8Wc@pRS2 zv*fJ-&Mn^Td+~C)Q5=7L;@O=AI(-jn-3lum@ldC})H!IshD4%tRRTY~?M&5;8FmKM zr-gsSZv3U%2TunE=R_bnee+E+6ZUK4<~T<WQ@GuAE|YY}bMB1E?b@zt>mlDTZU35A z7kO}4<E%RWJVpKWW#ZHQt<nMdv%>~ZwLg^^fGy|9A+2z7DnA$(nR4FN_<u$005>WF z{dm4(FM5!oRKkJ1480j~J5W?<s%gDs?LkX(!oy~ubk=#ql3%n$tkos~VYLFAdABAH z<!A@=?u@A_Nc<4y@P7LyPRa>8)hX1|CDH(VXxsjdDqp6i${%RO%5NLXe*agj-=uH* zslK@`3hR2omc-|wW>8?T_V~MxCh#j+V!tn!zLv49*`$ar{U(dCzB6jiAiXbw38&&N z@o=TPA#+xwT}Ju!C5l;aR6fu%mO&s(wvMRmjwW*|$pN88Yd(bFnLAwh)ebLv(X1Gx zPO9I+mO0~Bqzg)_D|u>|YqifMHLS&=d+t&2L9NZ$!KwDu0U0^9DJD~+81Wc}UNP2I z#+y9ebz07Zb&9d8%cY#JnL`%M-SJ1e*#67DgRK`LRMSZ=SizA56&VIC^@{#d&%hwk zoW8I0E>n|(3y3H^LPijePO<pv;f}==b_dkUK6Q2`WTR1s6@QEOuf*x>1AFNPJE%4# zsG8Z}kBWQR<D!rvc01hzNy8Oe&ufnoI9IQYGJOidE48KgS&hQ<D#<QA5u!jD6J|(a zaOc#kH0Q#L7+V=we7fMuxHJ*?!>|Yz#x}KUJASW`=+L6<6F0>^(0A&s>xjmhpWDb| z`ssB!0efE%6ZrMwkHgOPqG7{lzrNNCC-e{vV_k?f&)dx~U9OlQKF<C>OOK6jeBmO_ zC;TyETNp`@iouzXoRU~@(K~O^eKlipiPAAM93#RJ0edPop{JUNJKx}@Tc{d@o1Spp zx5(6q!waH?RS(RWtxSc}43cDnul1dWXbB5uCJ?%$$#<svU%N|Lsg>OuSLNyKNM2u5 zk9Y9_cwh5+)xPyx`RA@=eL;osLeFwFu7Zw#-iv5z0mh)QT}%@ceYNgVj|joepKc8a zn(o!x1k{vGFq4s@Qu=E!;~}HWc{FQro<;*n%&gwsOLBZU1$ojJ%+WLA#SPB&&F2hb zS=<R4;63S%3bPb_k?+jwmoF9C%6WqXq{TrX#Qk1&)QvlEZcJ-;d!Ac+2awE~w&->` zJURZKaBuw*W<p9w>6tXa<ut+}54&@=r_>bBHi~;58*hJLPKSAF>5|S;@&M6)iTU4! zr$XIeolY)7{wp8}2Of^B@~~PzIm!|14|lmT+>3pt+!EmISk1Ep#M<X(rRZpczwG;n z)6hvN(hp#H_n2cP6LN7_I~^2ln+QDn=Y}a5yRuC@0Dmo+e)!OsvFpmip`7Y%Rs)^& zHGF%@^AtA96+Yf6KC__W-<#@cc>nFw<7pWJYv?hM#FF4rKM?&s+CtfQ;oN;I{`0K5 zCFN_`n(*MOxszf^rX8Zs&!w56{JV6>6^jK&do(DW0g;Q-YRC4)&y6+EVN!2f=}FaK zCKS+6I`Qr-+W>Q6ZXnA_ixit1CuD`S%#=>c7c^bK_D9k(!`<!z^1vYt+2lRqI?FTt zx>J>BNx3AuAq4tbnNCXS?Y>BM!G;KWoQUM@?IdZ;LE{HDB$9TEAk2dkf(?c4RDNR1 zK$7(I=RZ(r(^>AwQFU~2$I{)~rMLLqmNk>Lx9~vs|52*IJDy0_)6b&%Itlv<aS__M zZPi2K{Bw+sYA5PW!;H$0dZq_1(R0skfh`@XBCe8GN<odDR5n126nVC6d*hrUXq$Qf zv`t_g1Q5GDsuJ5QIGiU8bsX%p)s4BsDqwVYfdl#g5=~JjqYKE`2PE?ZEtkjHHAOlN zL7u6zEMG5J-qOF_sR>b+io(#d^~#(<ETD2S_D%T~YFV#`mWR{&gKkD$qd$AC<a8Gm z5}KGxdoS;A;Or2B>wD{f@CRA2)>JgNwdh^5j$bT;v{Dsiqkyn38Dohcu(6tdoYhqw zqBHu?92sQnE0bFxm||rXtVd2+np_gtrho{iMr^Y&i#|^V+x9CP$?&CIh~q@93W(1g zQHV+&Q@RzWMlOqMo>yYSHHC=qEQ9$l;D4hfP*T{ChOcK)q}h3M#^%u*eeBZtr+bGV zLsGE$w04yH<NkjeS+253n{jTsCH<6cOw?{=Hr}NL4L5Z$^ptwwV_*5FFgu==VQnF! ziQ4slE4UhUOOk|IStwhRz*~7@B~dP_2GRTZ^0mhSBmwTkPQ8qJX@!X;praA;2Sdg% zx{0PscZ!G0=!Y)i#P`d+bgobgi2dI=Dffs?Z|u2~KYgw67&|X_tVa8#V18u{-#GyA zqpmy6dZ1Y-=HX>+$-DFS^NijH*fRK_S(}zM)_PMIQ9%m^6%i^!q1DbR>Ccd5j(>tn zwU$L^vT?XDO+e1e2-wNOM_y(Qnd7_z&cRhn-V_~ARlRzmz`w1Q44+;vOmKUf=a$uq z90*){Z@msg!Xc9tFt=2bQwi0)X2`yf7Y#k0)lK3_Az!Z?)NoNbK`G7KZaKX=!mWuI zj{CF`5dk6j*m<78B{sG*jJ=sl5c3E;$nECeomIUUy@Q(U|0`2U%X?{e<JFCN_$IQ$ zd2$!co{nSjEY#ZaPf*Qk_Q8y=-k;0U-Wpg1;&40Nb86X8nx^9iYqz2U1a7~rJ=Ocp zPl@(NvtdFP<0*!0F;p?~Gi@Q;wxs2Tyx+$?es!)B>_1{?^E+WB|JUY<*9zYW$6pOp z^x|Y?_3=3PPtYor^`D-muz2bSl0qJuhdUPyX*e0ud{4zHUsR5yezp8N<$hKeA;ce) z>*<4TJG$P2URMnw$k!^o3Nu{<^XobLxfVNO5iXCs`QS4W2DTnXJKx{(Y;r@c;+tQB z`j*NZf-T5V8*x9si~ytA%zK3?NA|KnAHPy)(1}4yatX|y<k#oxXzG(HdsnW<=%^+n z^6;<*fL`Gx_hK!><b*BPkJ7$+(8P+`aeT6}NG`gy+Ab~Albl3?9rx)-<@Dr9j2`S< z-fUnXbVO<H3O(~%QRkuSChR41tlOv0lZUWr_HvD-PoS2WX0hNu*ez262Px5*n3+{A z0>Nf?rDZD3FbUWcW)yJj(%ekha}j~h_=}i`!1czPOfB>~4>3VXFLCg4=M%w{K76Pr zRcNwtecolx-qgE#-I4L-2@a6+F4e}Un2Ap7limWtmQD@s=GNxS-^)U&x4*riPrk0| z6dwZVn|0AA;$Apox@oPNIy*ZR-!8T!2xM9h1!*eE08=TaMKfw@8Chc&&1q2YaTSWH zQSQ44$y1p#qHa8zj|TV836FMNLEYPEf0d+@<!|MhhIjC$iLt7Zc@LmlFkHm_zEq&G zmf5TQm^!<biZ@qw5#%{t&O0a9AEM8*3g(y7G7GID-&eTkH2u&s5Ak)shVR*hKW!Ht z;Q*Nc!~9_Fi3mm&IFpM2b{RyoU;``w9hj4RG2WjC5{zQ<^qzyFXTP@JXmDpgp#`q* zYcQPZr9(%de&WNyS`V0IwkfX*^Ve&SlMC8FJ~$*yeGx4%O;IAJS2>~5hL_##4+8gC z3jplMv%VZ=Z~7Kh$>SX!B2^|FAAUAh@@z)3v-5qy%t_ccnHsX5OSsE|>5a<i@U)ZN z(8LWy_gZ{jP?p<*FynT4jp^r*nwJ%(wfzNuEgi8R9potIjuqcMaUV+krJj|&sEUjN zI^!5A-wG7=VM`h$*;oO(lO<rTm`1ia9J$}LHI**+qsqEmy8eR?n`NrCty2OZ$%0IQ zw}z2tG`Ix!2vPF-iRw#xVCj&cO&C{B=p#qE(VnyZC**kp@{m`ykmsBNky3fJ63Nq@ z;YIiR*J}XwHm-_a$LIIuU)t1oj5^u7Go_Miu&c@8>(YL`AXBf2RZTi$WC_;e02)x~ zO2K9d)?__7i8@g$qAQ(BJ^Sl&FP3R9R*F~?IDV8s_ET+53%6gK(wn+2yCMtT%TU>) zAs6U~Q;dL7SmND=wiIl;ZLaE@p!C7ISu@#GB}Q<2A^1D4#?m1x{t!Wj9q8h3p1P~# z$yGAsf#cNqDIDxRni9wfh$@@@_p``0;zrmFXE*c*vc??0mw$XerjU20^iDwv09|Yo zxZ1uc)30Sy5@ys*PG96BvUZeu*ur_r-@xvILbtWSfwLdk$Ocqx^v@ka?f*M<{-h%S zXiWIcqrK!05TRJVjh>PR4V_7me_efapQKCxsyQkhuA6X;Se;x&WD0)DT954r$`aEQ zuL&i*o;pN<qq?rIceBcY39O_s#|=pPlQezi)!96ma??-756ahd4@yx>i@T9aopk%X zq8Iq=2db+Eyn3K+$v1fh1P$fsX+j~GyLk>q?}jI7rSSO=sY;zq<CrTouua~7Xguqi zKjnD<Cu!cNDla=UI|Ie@RY=6k#St2`>n{hUe6~6J@C=FOtXqjfK0@nC4(J#lA`29a zr@j+?=Y?)=GB#`KFjs%4rk3eNJ9--ipDeGTUAn8$KN#!(B@BQG)>NHT*R^EZ%)|wW zK72%SaHEK$MZ4Dni8$(cV4&r&F&d$q68F_R4EiD0VZ*>lb9?FApD+qS{OeZsA&6$H zOFFjC8s#<!FBz&}(hElhm+@Yb)$LVueWdugu2!#B3U~_~3m}jORc@lnTV91JNoyku z!n@H~?O@s|5PJ;u1x4$r1E1L3O|8Busf_N{=4ZQS4{Y~(Dv(Xu>W(Dd0$0`NxPYsj zEzNJ8$IfwEUUB}FDhmJUUSo>IH%Eh$DVAk;h63CN6z>ibW&d)th%lS(>JCNb9SPhs za^49Ad^Y_si5O#vRLo!M=rh}Mk*`t*K}kVfToYAIDJ&lCG3lVJvYFfUw{!07-1AY? z@U@?SjEM67>{51c-?$pN*vUF#oMva%$frgqPSP639fR#lNPGt55!Z!It0f0g;7grc zK^aqF-UUsTCF<KVnR1|2$*aZYc{1{<3B<aU&C@JMLcHnM@?FbvN_~*J4xg4uCs&rh z;9$0<964plZ1O;T4=_f|OcAPz1arQnz~jcd-Sf|zdeJrbg%-`%a^h!xe}kzVXg-(- zF-)$aUJKJBZj!C=yN*J7+0f}9cOJg-z+feeIoB$5oUeA~C9LRN_QdnP$z~#FJm#(6 zOf9})a%y{N>Xw9|6qUws$&4JoAi}lCo8#eHn;6s5k~M5DW)^#M(7uES<Qc_AtI7bC z8_HnrrdxBoy!Vmus_-Xi^)%zzKUAApOPD@M!JGu>vHGA_fQ}&K)7YxxwVYT?V#v+? zR@!B6xD1t}JH_ch69u^O&H+X_{u=b>cJl#9mXn54JVj&9pjs>Fx*shf?GgJY{=_Ty z^+Unf>WI@mLH+ro$ttz>uH3*QzIgBc!hMVDGg135gdvds`6esRSJeJswqfMj7_^Uz z2`;oD@oI+WDMyAQ_KNP715=nWSr`X)_h{tu{f9=IHTkp~ETdXfMhPPd<Esy=PG;Dl zdMjsnF3cZH7}m(4kTMU!l9&c(o}=_&WT>0ebrn_-=(@f`tu*;lEt%dV-7<DSUw@;q z<(;i!*zvj5KbSN&)@sa}_SRRo^nosgag|Zh`90fF9Z{1X0&UlHMrDIVo$zr3KYetb zwNmz-Zc`LT{T*qs3Z>+y3nQg^K{_LETQW`Ge~>Dt?+loL#BDkW^I@r%rw)?zu-UtX zM?v*>(|=9VndNp&hUVk>%(CZ<rh7zXUu!HB{l0E{1XlGTcl4>%k)?VBy*mh|x%Tr8 zrl_*!25auX<w75u(6AY)W=%-tLp*fj$o44HS5|F`RAp(<$-({T+`;*x$y%MB64)GK z{s;v_v<(DS+&q){Do>TCT)|Z%N^yHC9q|cte|8Txt}3NzJOT0^NF9XIXrwD!EV7Do z4*Dh;wX?k({rJ^ky8A2t#g08j;5OVlr;xEoTy60Pm9ANhe^~V#-TGN@vyyE<J^Oxc zflxR58$o}F+V`C+y+waXalcN^UB!|iBSE54Qvq^859-LY$N>5GE`CAcAD}l&4qMoI zl@2y`9FaZwOehy~-1cE*c;E@Jb+mBI=$A7Qhi;)?w`;kb+36*BHSPLC@+c6}5}9>L zw+*4QZ_(7A`LN{0u;QQhS9JxBYxJmsqF8Fw2rqg8m=_Apk<p}cTKA}OQ#+I!XcwN0 zD!COiPtHwJhO2~6gg1?iDD|+6=zLIZjcp*u0xd^8&p?F|{B7A&4~c6gF_PVa2aNkE zykS<vh}haq9Z^!!1aHi>#Q?j4;7ottyh!u=8Ih%77Ub(CGvP(|Fr%_-pg&{tCaCFs z4qAJF2er14<o#`WCuAo#v*4;;k0Pq~{l6J4pz4qW#Q^3g<<!^u8eL)JoW;FM9)Aq- zc=*hhTKD7&8d6LhW@P6=|Gw}pDD=4XD+H%Q73m~-H~B<pZmMfM$bTB#IL**ysxPE$ zXZLV7RkO^g2EI|PYN@hi6HoclXTn2D!qU?7JZ(5Ujh9nlF<IrjPzO+h(v+3iQ~Oa( zu{%8OUWo5hHqyQNzwpk*#*3E*UD`_%msDF40>Xuin*k6I_xPsTXR~s<6lsptSFN`Q z&-Wbf7obbv-Ta6HIrCnewZn!_^-fLo6`cp(idgrJ_s54k8#X^s`~6co%wvG7+q%BL zrl=*`if#8Luqo5*z=A_b>I)fXIJ`oQzh(~bL%FA8j?>f=B^#iT5vG%9XUY(e=zj3Y zOT?RZ?h)<oz>f~?TeT*{wYUQ`*Te7@-3de!lf#YzZ4Au`$YiR9Yca5Tp;J~La7yET zV=Ag@Y?XXEGL~4_-aZd{999)B(<@|68i{Y@74*U%<q*erF5WK^6R4&Bcsb&@$A2iW z)K-fmYZ6A7$eviMCL-*Ef~;%WbthH{EdPK|P&k&ZlQrQFNFWU6M30)c8QoKnb9#^@ z4oDNsTUfcCJ>y?(022zf(d+j}0FgL_RN2y{95b?zThri65UR|9ZoPY~p<mB$e-rPa z)Ou~{!$^hdrYQfomrCyWff3_Rg5hs`S2Zmd{<MVk`-CoMPt*#xk$Z@PkWcL7`ZaUt z+u1azW`|VkpLbA^C9#hqq<jK0<^cXKOwPA7@j0DbwJdD@`x;)!aXv;z3U#9&Qt4WN ziWyrab!~%HyytH(JnfMFM)GP812RXRP8IE|v~HJ%HVy>cVb1~`55s#frb}#%s1sAC z$WiU179aDYqB|cps`LMPo?(XbZ=U!8xv>N@X(x`2lfA@%t&OfL{UMdU7Z>oOTtd_h zuG8peddWH&2aY`bz~}g+i-~wxS}TIV8MXZEmt{8)HRh;iun5In1Tckc&VYf^EfGv) zMkgV{G|BO7$rPX7X>3T$+f2NF3=qRKVJOZe@kp#rTjRaWNYpXjDZa_fug?-?yLWeT z%Fk5=7mE2h;WtmLHLc+r090LCnhR%vA`1PG>u$&ZcQ@la^;CyFyv4_gnmhB0kRBm; zeiPKeU2!JmFI+V3+dnjK6IBa7goP00i{zFe*(*(zhW@16uv^@w{HL{Pom&%CHPw67 zkJ}ouZ|$sDkcNclAl5%$NQaP|67#MSMKkeL_K~eXU7an|=bnClk$nHB0nd_lY~}+9 z%ULdPiScaL2t%~Dk7<FGrG6tGJ6#ouf9BIr2kv-%A{@bU0K%SXvVeO+RP$2&j;b}7 z0+KH^XUx4U=&5;;@NXV^WWv;JbrTySIr-1#C5Z&nL{ohwBb&Hylu6bO(&~uqn0FO| z!m=nJ^)9S6^P~sHvQ|p!C<z3Vj0%m_rUQAR#LPAVyc#xj>OT~a`3LdKZSNee3~hh# zv5%D3%@<8kD2GEh-d(BJ6)(T}H;4wE8(dRCGGAz}Rm`&K97UE;&xYUp0sSacLH8bz z{YvLN0tN3^x@SL$oPxwmJ%EOtYe>o+)(=sS28I%Qe7X`{B9n-Kiz%Xy;=7)Vlxro- z*SHL3r^Fl#nQ5T;v@wAOD`VH?>37HUkZOL1DL+6-VaL4Pi$4PAZ5zqDtPS*$KT{4W z#OG!8z#4eE%c;}>v@EWS!cOdtQek?x8zxotwZdWUx4|*;y5vkOGPmKF^%-L*q{b5F zL{eBpQZDDo*EhC~smk4-+WqpS!kHlm!s+rC0?1kam!$?@*U>S}kD*>CS&<(f@n2lp z8P5cX1@{<51`a+m9tvUe+@kXT-ta+b4D1<<LiJ-UK!{NF;lm)|-H}`W5n}6Hl6thP zmNAg|AlTH|G~1Oo*8O|;iXF%Aarc`#@5j-E^F;I+V;%_L6ZnHEW{)<&%ql`?9ysne z0`yaIe2;g=e)=rt#tOGBs}F=$;^?4=P!@|+0ke|}k=sxNn_)*9U44B^hCq;XYnoX_ zulHZnQSF@?u09waagZYALvHEk+*m{*#2On;pClx57^V)f3|`1r3|E5IqZ)eu41AS} zQ-K)pOXEJV8=f87%`+_#DLSI9iM`JTPCVxw2;u|3rhg#56`i&L$9p&r0f!c%s4ncW z!}0P3#ak?XbOqOg8d^BT*U0g1!s8NWrI^c=8Dm-|gX7!2DQ6Y19zy6wfD?;{M$-4k zw{~~LT2twKs@D0Rv$a*5R8-=_yG=S9*cx`&F`A^@jyJEUO~V`WtQc{RGW%(8Oyey) zf94I@>@fX&_W|=EJD4ol`NO8Ahq&=i6(-x}iAQbuyh>&77`ZxiY<5|!NRY@6iG30L zZA5gmO64s?6GM%6fQ&OwgCT>L(Ob)`nW$HgGTbc^6E?F;mY6%0QgPE%pyY+=3#hx& zpt2EGyPo~kgoaMjLMPk(So5(a1l_k`j;I)!)(i-7*6#6E4?d-@Q~qRt+KUML?I6}! z6-V{5d&TpttbBxa%W;Qi4a`eHl#+oPI5xYq+Qlz`>#LS-^=qxvw3i<w0%}aDfW`J7 znge>0A@$$Neo&@?3?+%-7A2=X$!E9)AxnQVSPE`lPTrk9CSKwf(hs@F^UZ9*k@d7M zq_nnbBP6gyZXw=!$F|~noY)dgowm6um~t5g(CG@Su>ki$KK37)_!`J<vRl!57XuXF z7+hKxoT}!__C0zSo7-;dD(X_p&#Z9*(IeIxPpE*;d)NmyaOwqnOE^io?%y?Dy_G~8 zgpW2PI3j}gV*M59Q6T#%g<YioTh&>UKZ`(*CVo_MTJ{xzZs|3RSTQ-W1|?)m^sYt# zVM#W#DZiK9jB3O(b)&(`@)6`6$I`525jEU)ebp4zDsI_|!Iky}L#0j5qOA>a?&J5! z340S0(N}7sGX0Gsc=KM~lYlBI1CpRuw1IfTtB(tTXDjX--HoiVwOjVKDFq((WAjch zJv#3l8%uGwbMIfTeW>*;tP67_OgnMm?d+YZtn9JDJmdYc&QlieG>uf*{@atOx=MEW z02IE@vfutx0d1$23ArGS_`7kz9|@!u5xN@|WT##~_j#^Ern4K^BMqt8Iqde@b}c`j z^`&zVrE5YyZMB9qQiFNi#G|(A_3Xh!!5>xrZ*r|<nwbRB^f;J}Z!Q?1j;k|BK`}PB zo!Hku2cADt0H9c1q6#qv6^kzkb~`!WJB{UCnq^kvnT>+v=NN8L_8psemhxoDZ6C<A zgYCn)l^!AQ8@|0ZU3>Vs9w`J)l-IEJJu9UM(^FoAnE`z};C@8<b_j~?x`N~(8w^21 zgXN;9O}=u!WG<HsxR>Ji0b;1{8^VW0GC%b2h0eR%s}($BYHYdj>+Xp74PJ?~u0z8? zFta}kz#)jqFGQhlH+1Ko?+5=Xx*a9FCf!!G7vIfRwE|pBvld3^*N3XI=$O7($rv`c zUXG`|II<u!u_e{tZhmwe9gqw9@dw=~TiUp<l$-aMXIQ)8p$>og=PuT9KI2hU5!POY zk?${d75h6MW_|_Rmo3Wa_1KriQ{)2VD@uP<>W1hSH}4z#Isf?e8wufP@CeU3H-wE8 z)RzfBG0tKdDt><rMj*<2P40H&`lYrR7#RKV$tRBgyVyT~6Tn19F!h!rV6IHG59$MR zo0ho;3cli<no7|co4dpQH*$%wh&fbA6=+c3s6yQ^o}!qER#*M{?RiNg|F_GF&EJwX zlE=J4kw@Hn<l7iv^Sx6Bd^<!(;IDHz?8Qb1xQ94s?0dpQekxGM!&N7%(9Ur?(HVF8 z_Z2|?r+$zKpz9nPdthcV^$(4CtZ9s+fya*Q<F_WwL`8>d&VzHae{p^eGyuC^1thvT zcYSKt|I1;u?&w11?t>%%(O^XENIAW*HrL#wz<~l=)#Z&?PWcPv7{4j58w%o*srAv- z8l$KQ+LPJtII(>n-!OH5F+08IHAr)soH1qzJ69C(6UP11|8Q(q1>q~%7!;j3_8WFt zFTdUX-UP0@u`JfLDNRn?5I1f48qs36!(q|3eu)!;8GT4q__;_@h}rXx|0Sz#!tqsL zK~d_j4fwx3gNGV}SP{CtzB$p(1|l_*H~;B)POA=<eg9>D(@mzAFGo}#pwv&ni!rg~ zC_k)*cSgyy#87CcyGz`R%-uT$@wc^fSmEP9j#?_gOuRok@Eu<~Gx)a}U*VDaDx!Qr zU+kik_KnNnXom)pdQ=tSG2m@GxF)w~k=idZWAc&y(YeKXEp>%xc^$DWb^D96@7qiI z->?MAISNP$Eo0L<p|3z*5I_B3NMC-uhB|g$*si&uY~De2?)@E8H}=#4$<tz9(Y7iO z*`t;oP!NLpLF9|TOBSxxB|9$}Q9_Ggn@7zJ({|NMx?T;XxF-y;z5?2&g4^Z)0TeYj z`-e22i~2`H$iL)R>M0Lw$fmxlyR*J2SF*MKn$&H-2A`Sk5~o5;R)05>mzE#Nz|p+l zHYK!BzeJy<J~2jDxECU?SR5!;^54KG=w5WxiQ!9cq$>Y5OHDB@NbG9DuC2A#6QqRl zF5c*lCZxjB;VAth>KP8&IqH9QfAAD$oVOY(*=nsA`1kFbVSPU|e-j*<&oW2$9DFcZ zgxmXR$jld#1~rQMQ-5xVlktEDzfNl*$opQkR_4?KIv|fJdb1yxL_QjZ-${tyeUy}d z8Leb3c*|IZuJ)Lcb8k`iz22USC^*;9Zm^EA1vJ}0D&OH+0);lX$b*14eOG;4XvB`W z^F&@5{hO|ie*2jC1^vBskUC!jCa<_UP-uu@Fu5^_@dK3<gJgju;IyLs`}<X&?mYE) z12*L0otarT-RJbgNZe}Iv5t=J;d1(}XGjl8^*Ht*Gzn}&5-o5mdn>TioV^(kAEZI~ z{N&Yp#?JDs5Lix0lBvan*N)1cb9^_xe;UwT4(nUWCQvzQDpil;4{xoGOOC2)_5?W} zF^&3{_dT}6(A;_iwm(R?p7t$Oe#6l+{NZBJscQ>`q6f%B5@HP|whwcaS@iC|d)kzv zDIr2M0+*`>CXhgE6h`81ML?}5?B>`?=fv(I^j%R#t%Q}c!rPJE8J86MEWpm%uojtv z4S7pEj?GYg3BTMB)YW>~tYukB*`-DU_kjW?-cMOblG+XtY0Rv+2FbkPCsEnWFB$Y{ zkl?5fnYbLY*}FQoMb%zODoTGJR{UuHplY6JOM|t#EDobu@yiL1zZjKcJY^|LPm>{4 zSHsn>QPm|uI*t)1dRKm!H7<61hivwAACH4BXM(St4++wF(P^6?4QiT3kMx0$e|;R? zJW}4GH%%sp9_SvW3%;lB1<p_dA`<pN2_QBx(%LJE!r7+_SvsN(3F|X`4czB#FRi4% z%o_ks<Nw0usRfejsUYH7;-TYxZH4U(o<28I6!PiJr(ok&#rcsv+JK{4$HKO$2_VD? zRR}i@Fck{-vjVbX(^l@*FCfgy@1w8S00XpG)3HX)O3mpVG0mYbqSp`sOv_DNyMK*_ z0#~yL0hvvuWH!Tkl1kl=ifO$Stxv|QvI&<MraLIDKw3_+F(Gcz*hO#s`$enCfFJ56 zb(u#efB1I_r#p{dzIsi+sqg-;-l0!UXWy2n5T~*umoPv3%Z&Mg+Dyk4nx~jkgMZOX zNmsvn>WBu*Q%d#|=Y}tZ`5iwQbTTQarH;%otK%<^9$bJrhXTh94Gwo92Q7d9T|~#x zLG7bal}bl0la}$u!wdxCr^I7pm@Vzuszm;9t*v^3>u9x?a~FwawzDKRqxXJ;gNgXv z*FJ4h$%h(SA<*@1{8stz+-qeyM<d#IHNl<TH~W1eF1B_}Qm?`R^-gfHBMP?p`|^*B zlNsJTwcd`4{8knRM?4!7){axEGuzxD*@-)u^ZO*Wvm<F11)GLR+m$LQyXeL}g#0`q zRfkwP0ZB3^`Wcd(QZP2vD15K!dd<}+kF_27=Xb?uQc`0>y3lSTF?U_49DrXX5(lC@ zYt&(;-26n8imetvm^C+Px64t7-bo}aix^#4IsiZyZF`KK5yCQ86A80c1DmGIRn5d1 z*%ZF-eyy~r!yz~U67oTo{V8881@v)Us_&<h;WM$;iB!qxCCyJO%nh8E_-m~lb_Dou zmJ}AiD+3-2q9R3feQlmj$%;)>Rf(>Go92*;mv1T5xprT%=Z55lJt2B^-D)JRW^YNf zdxcc_d2&ePFx}zk0l(wP|1V&YjGW@IOT^~fr8Wh*#+S$vT{x57+uB`Tqg}nO{rnr? zAi%RfqVLx}Tt?_*b86|B3eaR?G1&w)+>!U@y&*<7%*{1&wVDk0WRbBd`+gri1;g_e z?t&5R(1483!#{sG4E7|-!3KN%^sBU^UUx1x{1TGM*HLZuYqQX~)gu83|DW&Lb3@)z zT!|0nG$z8XmpH2aBp%~S!}Sr<9*bg+rKlH_$WtK74MXhw-{T3OdQt?~Jo*dh7lKYP zl%R^aU%B=J-)5jqQK?QYKQy5~Ahc;W5{^!;6;|RMdV&SgrXFM}?g>1(C6t;_ck+S( zYyw09WyUV$Gm^QiNed*F2{rrAlcjB_w-HCHS84hia0yG4iv$H0&w19S5fO?-3|lk& z*$<xvhpusMw_S#_Gce;ZGKR}xHcXw^)PKs?o^`J|Sol!Z#X5hgJ!FI=4Dlm}K8Q8* z6FJDNFX?!hRL_0Id@TVebr~auVVoG^+`E9qYXL4*=1Ad|$eM)I8`tEOQXCSH@nAPL zCTNmeqmY^IY!d_TR>1shv($0alMqM?8EKdZ)OF(@+B@45I3gvNS3S%pQ|!kJ6KZgZ zlFNZH5BtBDk5$?IefOaJDeX@_VBhGpy;iG4{uEy7Au3OluUzC!))t#vT@ej7aEW=E zc&y)jwT8*AZH%fyaUE-{yajMvl3#k`AYQSGBR72L|A2A>!IzwWdPQ78O<{XVXZ;^K zH+Vd5_8B$wzt_`CWdyR#3o%ap;7f?GaFU)wCkZ`0Z}I{^sWQqv&GmZD{U4gH=adZ~ z01?E7UYoZDG#XecPc>1KP!+*2#u+RzQN6daZyT!KF;9Oo@T-Sj;1^%M9{{J|xw!J3 z*EZb|X7YNvH^x{pwXXbMzsYUs5E=0S#Tf^bA@s!;?~cp?|EQ3*q!%e8JPUc^<O0Hw zdE`_!=*1q#;n2{{MzXA2&wfGRIfpvR;KXFk9xcj=u$r+T1GQ;R9H_2%cp*dL?6Akf z#_b=PX4KQ#LibuQ`8Q!}j|XKtWLU3$9=~PXWcm-yWkT0Cr{nxmHiAPL<pvm7frJVG zLj^P`8G)(MxlxsF(diivC;U;iSD=3XGT(|MAIz=h#xZ<$G*IkSdgQC@0B#$U{D-#8 z#ha4Gf^+85kIE!Lp3URyKHt!SpY(&7^Q4GtQ925!W;72#y}+plHY44%KM%e;U%>nk zJx`yoq$9eHr|(0!0Fyk9Fh2x0UVIpFKq_bdWQYWj4n?u~A%~#nd))cVjr(rmLuGRP zGl8;eQrkm*V*UAKz<J6jvo^v=9XXNjEH(XzTK7yxz1Un0YIO<19anK5?0$&w&r?3j z!N}0Z)D{yb^9tl^DyYe|!2@Ux*w8{ZlO5U6m^wUO({yP^&-LO;&)WfTd+~wjWVb%g zg<}h-8IpUf(D>QvO^f$@k4oZ1%NPfV73+Ybd`YsTJGK!zYe&1m8!}mZ+@JNV>T=x- z_NS8les_ZCl`*O;fD`GWBmN+EkIgOZv=>iRsWDjik1U-eY=+5{qTFtiXH;r04#E*F z25&brn`_?~*g13XisY{%dplzi{+P$-v+^zS^*Kt*h0V3Z$Q^tYv7K{#xdZb&JSjMn zj{Pqi#zV3pF?qb_WVj5?<r(OzumXKJb?k3F{m4uHWyKb(U!VH{FOc_w*Yop`HbW|3 z5>FM9-ZaoVukq4))Jbz4NG{b}Fpt6=p}k(r_uIy7-fBDob%l;7CiR8;z|Ucr2qTv$ z4AdEtpoESJCTecl@!PUP_3yunMuWAqhqV<~=2xV0lE^}zw#;k5i-(yN6=ABRi+Pc2 zBKP5s>*DT<v<c8|DuV?V3eVnAK~;~mLW+}8Fy3FN89AY+8suj~eN<35FUx(+a}onb z0bMc@4^xzQZjQ{?29C@2$K)g38yxP}ebANbi!la?{7$j9buat?eJl9K^g)K;qJ*8O zVuY)$EO+X9pc;5qRhwr8ra0wq&Jy-?>=4Xt&XQY|Ez{!`<fE9Vm?K}%!C55}`*UGT zM>))4ilX~*pk<ErXLWyder_sra<JR2!8S@|Cz<aovpGWgC05yhD%vttoQxd`Cw+YT z*o^_*)|mq+w*C{uXek4^=CCw#7BaLqtNYQ!;c109{PV3B{OMs)p-Vig*)5+B8%g=G zjYp)cxVdl>&3BUR`&~Yx(i|zLTL-n4<c9%2Ku}zm<f5ES)63Gqi<7w&0DN*`K)2~^ zqW=U}YzezXqQ&Y+kjnaw#+*rN)gRn#@eV=K{zuoIzWMU)nXU*8U;`st3f7+SumNg= z1z<}d1(Xogd+hgOFK*+gS0-2M`Hp?hUL3Js_+ZlGcCpL3JNEcTD9z;ql_o$<!l@%c z(E+9j&1?53DSQEo2tzZSyA6Y-{XSyIUDqG_;iq>tT<&EcFhYwDe~alj<vw|#a@m(+ zv;MEy4P8dwH?Z50+pYF4jAtf}&>C>pQ8`i02Q~O|_({TsAa6;9#-6FBhdkp+l+~{@ znKh>T*bqRk)g?MhUK)VOPhOm856jMNimvo}!TpEQ=kT;8Op}m=Bvg0D1k9@U3&xZb zI*q`Q=+gOSVj&@eb|93;jpu*`xLvvD*u@fd0KBw#5GQ_9+4O=KDt3fZ>q`xGy%@&? zY@bpPszL%xUW(cUT$mH9J`q#;G$4H}%yy`?zI_>}Lx(3<#OW8jOP`ysI7|9qQ|MWt zmKuQeoAd9v?ZLqK<nl8g>5v5gYBPw9;Qr~H(jVfVT_qTmcQ26RbHlrwaX7ook48{Z z1Q+qFa(W$r?(3J`8T2)ERJ(}<^;G(Oo)<dkME3KAI1VIMY{bjlZ61K$n9M59@k@r| z%WFAEomp`a;$dbJ6q&NE77adND|3e(nHu!9aDG?+NCl$*R>CxiPYGIfi*Pfpfw{|d z9b>TBN3HvQn6C_e7-qNXP&X_K>>nB^(Y0i_VI|k<x?4ksd+e7ntW4kcuD()uRUwA< zJ~?<14WwEfRacU?`ZSEqY*+Df!@~wfW7p=HBHKTbhZZtFc@X5DhN4Bu4G%IkjqSXO z-xWh&urDfiw2hb?&c|xdRS<rhlWR(0hi!qy8WF*QmAz_zN@C^6ClEUer`aB7SMAxE zL=g-}W4)%ojb$2I`tKAdah?s`Jls+mrZHKDag%L-BY5x1%s(_?YTIjbjREHPtDnst zxe)W?#OXG8A#Dx91|i#jy8uRQC^A;HLxE$1-P7L11o3ouUgK(f3@d~5XAb*-&taap zLq|4XDoLoXtlG@_>5-YHZZv28d_G3ztCk(n3VIy_R;yfcj5xNMIJ~)C_I_wQ#Hg<{ z7!=eQ0>W0x`Ss)hioq!B2e>kvf6kDAf|pdsKQvC4;zvc5LsRBxVL)^Sr2mI_pXgPR zTa1c`l*5FIw)Cn@Ma^!NG34p(9PZbK6+koQzkF^|y(6)Cmx1ytN%gN&f5>*G+HvZ2 z=of5hVb{GUZBKV^nPE?xcK&ihUQr&AUoM1$of2=8q@s7j%+TI1kkUf@yIQZYwcp{= zBTKt4UEM@-^CQD7k#NCnBbPdTebMK1HQ0sYej$*^uR-srAT|3!ag|in4vBl`1}xh} zCpY~6Pg^``7g>gj+!mbJ9oBQY8wsDXO%X*>-x-WPAN~mD%^+F>Ph|)?G!jph0jL<J zGTW^_%HP<Iw>0~}bceI*Hbg=LX(XW*?|A!4wxNg4fK~-twvM-k3#k@8DpynGp94i0 zS|ILhsxV284}5xOUSYEUDuLBN7tIqIofuHIYnCL5r*K{|uJZ#DH*WZFUtgfAF6Dv9 zgA3hkD%F4uBL;u;{^{xJxM>1lUsZ*BfEwx20~VW_T8Y%AGCN~rz8YNii^Tjyl+^Md z+Wz>i&w5qa3+3yR%V3^m5??$fpqR{u4Qb3)#Y`zwc&gVen=Z%x>Af!URqCLIcYYzE zhs1G^2o@lxU2+-cvfzV*M^**ifsgDD=cBUP`?6ux#i;BJWD^2_VLibxwd`D4DUMs4 z=VbfV(Jq4xsJ)2F8bq^WtXg1-I2E}Y=9vst)d$B<3~l4>a$>f!^@!p&!0aTkU~xBp zA6PULM}H?8i~`^??`ijg3l0=$`Pml;B9^bP<OErSEd9cjUuQl?pJ4wN2P1zXu5R`1 z&nZ0L18Pvau!aiVl74wd^QTg(E>35K+t#L;rbq@<q}x4i`1EaY;X|o_P|ynsqzu(< ztbSrYYmhK4DpM|aoud;lT|1QZgE@W>z_IPCEuJ57YMFoI)Wt*DD^Kcx$hiETv&RZ_ z#)}{x@{m0S7j#=xBI{V`o#b6<ot&=s5I;f+8yw9{ar>}Q)|Zt%AJg<sqKSQ;G6uc( zNhRSMy8Z5x$DP>;`zc9*Cr1Tk<WN)MZb?8%lAcX6e)kVf=ZVFeXTB*V&(Op|RR{D} z3lf@op&LN8+i1xVJNiNt`a06#OXlov3qG~Ho|`qe3VrqUvSRM?+0PGD)x9=>f#8x_ zdGg3oJ_8xOt)ZUKcpamw`s;?i3(rRfc6t(f-{UqGaX{nT2<NUJ(>k{Zl~Fyd>nRhv zJW}Vm5y3-wG#=($F|*<4k#!RAyDb%w2DM`UAaL&O6MEs*PVfJDu+_C1NZ$z}<2W%) z(ob$awcO6Z!PGk^DEOQ6lhp9mM`*@=ay0?ONzOdJgCWLruqK9<{Uwy8X)jkr($Nf_ zsw(vEG3paM4pB`ko(N<g4))+AdS-1^W}o4?$eW9vd+W6l<j6wG-EMNU_Tck?91$_x zsr=Nfxj*b%GV$K``L4~BJO54i0&JCTOCx7&5hB3d3fMT8c+v@p$fPc@G24@&L3?&R ziPxBCc9-4f)USPBWOIS_5OD^Rji5_d*G0`%g#Z_=V?M6Wt%e?wL0=Zop=0d{SmIzT zf&$iQk!)ySv9<^|xQ&jU<uC#r_j`B-`fh3jOup}r3gXa`g_JWZ`ri9_u-=%&i#2O; zbNAX=YPs_d4eH}H%lt6Ljt2pKP3d<hxU2v_EpJOIaL1}~y}viEI`V5>)U6kV(R7Q* zI(Ojg%<|i;ATsuG8z{9_2Z-ZC_?b_tK=<PERKxEN-EWKC=H)P4>6M~?B5{%zE;GGe zqq#VlSBqYNCn8x|Qy`%o;>ark9ChvSEucr|q&8sTfbe`|Fy%xPqX`VK09E6F%vDol z(kE1*2%Wj8yVw!j787?CulTKsC-wvYB-aA7OeV_RCQ_7rZ3;%OWHWQ>$Pd~hQmiRp zZ}2M3SMVR25sgEQ-YLv2<VSKM_N1?7$hT-nCH35BRH}*>+gg5a3tZg%XLVJWZsit- zR_U7cLt9suKPlIgYes=|Pax{)8UAXHD_b8Mm#11#XpJ{w=SoNO^s&H&Xd#_V0Cwdo zDo^%X(zYJd=qmYu`r>YHP_q24=!M)kXX=G5atJPbfknpjCq>ew)ZJQOyXyF}WZ;ly zW!>xaO$Rl2VIk%!h?Vj<^Vl{W+jV_RW#_8d{llH=-JO?4<v31uV<pkH5!hk=VkkI? zD)JK<0CWLG+zqBi!+r<aUAf}-4~>KLBoM1aRo}!r9A&}OiQ7{_K8^P;)(MTqXvAr= zgnpN)m$06=#zR->!dq7A_-p3HqxNV*I%xKhE@1B`4y0wX#T-<NNhupTd+>a0qd_u6 z`lW<Dh`92zx@ls3YGXy$HI(Hb!j4u!;M>bV6I@{%GEM`LS>aZM4Gol&OtEcjZAyQ- zJt7=A>AQQ5$9!=xMm3+?-Ig7Nv`)M?vAws1Nm#U*;qz=A058}i5$Agv$bNm}PN=fJ zaX3|`qw!kGW&9^-<%=G^x|!Zi4Z!7=knNPD3g$uuV`wX;J%TLou*Afi@|MA-yy;8d z>ShA-W|RD!h_5KYz$|+Y+fAnHraZ21)O1Q}?;ohV*pi~cp_Ai}kTR&hFMRP4dcyxo zbVy3?52il6WK0!Rb)xD}&i;hxAh5&bxx-<|&yUAY_r^Lrv11fXWEr^uigOOU;W-K& zROa}s7|Uol0p5USqyt%`(^z|ML7Vg;NsOGhjEU}J$KS(7qE&GFgq1FVjVXIb)T8Dx zZ|Y>3P+~k{+Iu!`UvnE+!kOa4+N(`u!$l@D2`G7f@FGQ|?4@jWK%*<iqIEYs?<Qqy zU0NoOoP-PrBA)gg;lq$}%Xr5L9|?4DvHRO=qJPCOEmV$tK;^4V4*G|N1_u=Pwy+8~ zsl{~iAXjH^Fq<abI?d>V*bk*ni)OZ6?aDIZe6-GW5YIZUONn$prF=t;t8tad{et)R z$7xDm;?N`J_D77pBxI}{#h5Nf<a-k6mnu`Zf$|4ojCm_<-ardnvQfrmv5!RmP60pl zwd&3juU`&2zFQg9o-!HvX7%Zd;iaWn&Z^h^-yxQpW%8BzGWgZP-?6PZbob@cqB<N& z(OtC!5VzrnvS0e|*S^l}UU)@81A@9RW#Udsj0(I{ZQLTq8e`g$Zh?8fYFuMy^R{Kd zwu4coAEWz$V%<R+jNjGbTNKeW9+Pa3D-L=sljRIQ-%z2{Ex=Ea(K*#6lib|2zmf(b zFUP38{?KsmJu~o`GrrUtk5Gq)sAg7_p-!=X>|uA(`v$%me#3(IdpomwG;D@r7k2ne zx-zb|*Eb~08FSryYD1HnUxJtdy#Tfcf;lU;=y!)UM)`*r?^e8Iuo4;BZ@Tz{aT*wH zVn+9hGc`k-7<M?$#V}}bYFEM%RwE=gjs#mGRdd0Rwo}R6@1oWYE<ta;-?klWK&Xtw zi;8xV{zVN5nPU>BsJ<M@1e|non)n*+8Gb2DXu-_dh!ps)iVO%}|7^9l?mLe^`d!bT z`#MXytAqO_s1{n-3Q9ad1K}EA*1?6!)~co_lUhA~(#T|qQ<a5Gel3yD{<|`X|KAY; z`~Qy+R|KhkuTLX0Ay4b4{!W6v%*!WluV20?ek?k<j%K3VT0$s5CIdjAt&oUnU%v~y zMAhO@HEESs&(2>1l<^tsO;J?g7PL^$qLWheOi1WPzfzAus>H~ri)j1VsuZ?$TfC5G z5?rG8tRUog>~EB?X7mL%<Qv=0|A2mhLw>TBY9Tpo$;{Dn)ifBP^}E{sI;Dc6?uJ<1 z`h%e3TJFh+8(Yl-Ti86|);gS9!jtEycMT#{jLS4nm!1;N7JPSLS;WL1``V}`xe!FC zBf|S18tY_yaE(v{n+iMqaqwcNGSIk+(-`T4v&G%$Szr+yv~8pgHK+M^z7ZQ(g+^u! z)k<8WM7y-aQMHv{cU>ZmwN$hNqh&bGm*~=qFN?wmB2-V~)+TFeRy*6=haq7}Y4j_O zv%Z43ezr^NqL;fyfrd>_nIk@Knk)UZKVUXB(gtuEKMT_WHoOKv*wHmYwuUZ&u|F>X zFTe8s%>x%I&+qk+SN6m4Wt%=Svg*yGnZg!}nu6!xT-e8u?-nD)bJzf>j0>+djITy) zW?atyhB54$lN|42{!xY}1IohF`%_zwfIsHbp;g&IwZA>H4cZpfmQIPO(sCrJ+m35F z)oiIXt7$x~z7%_>#pSdxou=38ADSTx@RtpzyOs{<{+u6=v7d43Is&>^>so9d&nf#z zxCC(S==5>2eX0eddQn+Gox?CE4AePIK%H}l>=ESalS3|=WhG$H@Y0Rf9#d)4)An{> zyM5CuZa$?3Y#+W{QsD9EVjr*GJFK|NYvmx>@jb-gA?Kx|#kM`NLp~dL-D@1Z*Ffb) z_b!ux!$9w84lq8=CswC0pqB2CqIZh`O}k51LjPlBbG~c$a)|V2Bu8zY)d<Z|e^U`X z8`2{Z`_HCIU(O~%Sm8BVuV;o7_qkjkYdd=yFu=$5n|83Vxw9Y$iSS~irj2AnP#t9v zCj;ckZhfhRlc65~%rQ&ZdfH5QN!1*RvP97ve*FSX>*&ZsP(sBn2}9Z&VWPz5)bb6b z&7gRMZ_qPdgI5klG?%|=xQJ-luyK?D(pG`>AbYwZ!U&s(8swXE-ikM^a>3SfN#qJ_ zzwj53*y4VqrsJHoT_>SAU5T)`abojrA1DQME@c0P?e*~nLTJTIgTJ!AV$<ul112h8 ziTl);AL`UoFyXEfAB8I@*ww8R-rR!A%2I;rGfQO3?sAJ7n(VFD1Pz?fr7k)uPv6Jo zoN?@0W~lG%3)4oA{M~>_)lgtvM4QzDLO0ut!mE-OV#L|Dr=jd@Vk>VR-!95sND0~M z;wFRpcwus)vLtZa!c?uQqnf@L-FJ(MG$~7t-M1qfupa&3tbRxH0X#a6qS1A391&m| zk3h2Ych2O9;cJmiBj1aBWPL~c9B>qgZoma)KwP6<tOY_EYRVP{W3&v56yj9T0>+55 zhU(es@2{tYi*+IH=R2>qu>olt#J%W%FO7Q~p6nacfEN7YOqXci4i8$9Eijc2fLxyl zsmz}Ohi^29*rp?j{`nioC7E}l$dm)!5Lt}nhn~s}FW9%h)W?1lXNf1X2bzBN2asq~ z{hk5YuvizkCc+Z=B)(ovS1B2{l8k{VD!Zhg6%1DUrRVd9d8IsrC*1+DxZ{0hvNe^s zOvrOFOWN!}l`OKgkpLXzvA#iY;Lh2H6NG;iInZ$Zp1H?2Z+GF|gW4`%n1hxnX^k3% zWJNF718u~Ur@2L8mZYp#lw09Txtd0!{<*yCFoqpTPL*Lg8Uns^sy@uF22Xaw9)}DR z<k#Crdl+q(yhtazsSf>@MPKy4{^#x}w?&1RFq>Kt8EpF-jaL<3IAtv<=>!2jdhOwV zXvW%4WTHs(u`1f8HdNe%YV25mw#Ju6_0(Z;wTjkNy*$SB9{Pko0uhSj%6<e}td{&q zIA-4=M~$Q@GYJ1T?p<~=YvuKc-wv#s7~2bhF^x7ksvTR0TY0F`x2ao!a)$;*gF=@D zcgt&eNr0@`c4UAm)k1{C0+}_2$(tO)S?L$94NP%<`S9ialeJAa*kVdY%hT2mSjD~K zgi|Grx8Jw?i$92`fy07pACTdM-~SJD@A=ha*R}m3C`wm)j{<@ciXcU45s)SVqC%)a zL}~;?Is~F3y@?1Y2uKm6gh+1zq&Mj$7-~ZA2{l5<wa@Dr&)(y`_doF7W8`B#kdt+; zwdOqL@jDO_3r0Lz^(o@%eKWdySARM60;ys?)xS(g-mR%t@zm@RxL-raa%TIq0q0U! ziaH=({h#lH8M;|1fOf9W6-Ci;^_RT);vKtTPYAsZ;Dn7|WKlMmpxg~C+?1CJ3Tb=) z<@1|MGk5MDuETB<kWt!rr#dxNeEoc<q2#SdJ=Q&2i#vicMAjuB?1n-pMJNrcnGj6a zfxI8KXoQZdpP1`?759?l3m8wPIN8%@hnw^1$3ft?<fb118O9aFgDl3X7~s19^vYSf z^R!^}k!vsW>pQ#`(U1P;EKdWlrvJw_SxwAq&yoYS&weYCXX1sF>gDY!zgL#Hn&o)T zRdu7FPH$m(QgigeW~QQ=wqL5>ahHx^H0u>hnmZ7iNeD&8Br^Lz$+hM9574fK{O1v3 z4%7_@%kSj2!J~bxI_nH@aPmtDyM`qZInn7=U{oCd9sFPZpjFAW#8WCaX9G*-!1&~e zZPlnj;F1Q`SCYo`P;q=sgLC*mi0+gJ;8=Yd<9ncX?i@SqEq~`-j(Nq%1rr8bfI|oD zD!=b;hNG0<NT<{O7ycgE&vO<-vnF%2d7HLPT#GPBEy+KIDw)Xa5_&zmJ;=5!HEmb1 z!sDZpE1%rBPxrbtlGP;UCAOoPXR`XUue9~UD+bO*Lky~mU##tu=xAR#coHb^V0?3R zF>vwRJt9|8$I8cLq@3XQ9pmFX-}Lc*l$V=p=v&-v77Fk*BhlxTY&IB06nXhCho72N z7%WSQ&(H!4L{<c7!3a2!oW2C(x9M$-yP;o0vJCZ)yU(@8(t%#ZOpqfNkdY0t@2X3t zvsu@aG^LiW{FZjmW&62}^TKMRU@5ojQup!L2pJC%3#T-rT0b4z9E12E)``&xme4uF z0VdO$TE29+tLQyrjpzAn<5&hD$4)$Y!NsA;2dJ_y>xT`s)Tz#}-(?JDY*{p+cRfDY zNkLiLlw}l^<+zQ>_b*HDb&LE=xTkSSQ|J+l_1AgTBA}RQtx5L%F&7XxDXrgo{>pFN z`>+?q;lNz}MCW=lhy+ANcxtyyU_8AD>Pja^(i%sT8}dqg#vK8@4kJBf8@o{KOO5NU zLAK-R2%K=yg?7#5U%hJb_b=l=*E3&|$c@<sU+kpv{v_FEW@e!{z5lfOq{*Hyk2LU$ z5YShzN8cuOhf!E^$k^7{K>Rl2kYQu$27{rMZW5+IZW$~X;<amwrGVLJk;B>FkPGLL zcpG%vle}q!0g0N4hr@691S87@|9rEUbWacpSghUuR}C+Lk#!2mXoBr(6vFsL{aDg9 zYdG8O<Hz!4Oe)mRWxLkI!9>(r$#*-8&Z9e|rBdzwTU@6oJ{wNaa^7M)mV=fp<VBn% z(go>yA)TPpIFI=)94IKK-phP@H+_8#o$b@aL|{uil)b!hL{)7V7O9+&k#c`&A60Q9 znv^CGd06&GO^?us4kHDG8M{j>Zt9B%_mn+zPH=wHpkGp*<|@sH)*RWT&&&S<`_VS@ zEBV}dy(YEV15;~BhT=n1e>MDwY(FtOLJP&WU!SQl{UVm;a5>0#@CK0K+w!k46m}4M zD$5!WN`m3k_d-4@xu5DT%=iulP0Dr*aI|T#Phfa)!qIt_o8Fs8v7CNKJs&YTKbL4! zd{&w&VhEwq<Ohpgb9`ZXwe_hJVol*I>7tSPZ&k~8tu*L~x?v0P;4NX{a>Ib>vzL)8 zAD?V&&sF$<=%-vjm*-CP>MmO~y)Qm-&e+r1GvwPBP0Wqh8w~06_kn&wJWK01DU8K{ z@pjB`ww%tQ>jRyg2Zm`Kn#MpICM5XjJS&P~f^XrmB|CRmod&$a!9|gd!Cu0D9B>;6 zakr^c>Tu+*puzgU5^}Nu32b5D|J{VWTk(@LyMbWR#q%YqmxGSW`s!_wztVZ4F!$37 zS_&;Uv{X&q1(hF3#bn=o-VU+aKcj1%0~}1@-w90|kBHQF*BRjI@ujKd`wUSRZ^)fd zR=K7&K&(`u^&@YX9oeqE=4iMm@cPHW>rd(G?-WBSJNsr4Vk7wxaza0YqZZn>f5X+@ z8Uq7x!ZCYx5iRrwnY3qz+kUryklz_tJ$0Q9vRaO2;-xkpHj%7b)BORwc1CKQt+JUu z^X2)!1+pm#YDJee1vuV;F}d~gQ9;#n;S09Nr(-ErM}uAPC~X<tWi3q+j0cMVfhPi? z=(re+7P4_Gj^<iEN>M}B-%?^K&YacC24L<cUHn~*xdGYjD9`Kf(^+$ZQaRd&m9r8y zmTm1q<x&LQ%LXgdtaCI8c5Jh*JdxbTs^`BtOA5;I9(RHJn<WEo13cO6Z*wgX2dai# zlhUbsW|eX0m^>~9cFzogt0M7*Z=9lE#J0hNlXzdqPjzU5QeJ2A))J}lq@57aHb4H5 zD(!pHK{Z~IQA-?U!&5t&>j!9HDz%*eY1{M!1z-&uCs*pIofXxRM<jzP6LHF$xrrI& z2p?S{X*eOxNg*W5ZmQ#+UhNoHJaM&s9lvSoHYsFq$SXE(rN5Nwt&sFq&~>>{c;gW@ z1%Mj!pj=@}q}`50&Z+e|`9|VkTCT$7cCLKKxB~sKotN?_C+S;iKrVg%E<Ml??K}$$ z$TMjA*oyX$?(ftXE-UN#u0NB|1kNG*qig~aTUB&XNKWAD_KSHf+ee?lyt_uTETQf* zm6vR6J)pI3HeA*8U~g~3FfDy$LMUSY__dA~kc0^A=l-oq1)J?Sp-Gh6o+jd>Ro7^@ zWY4dXck+_53BtTYz4ugMH<j?T$OEwS(?F#CO;=w3w1BJU5`wWcU4~uXBY5BF9~43r zNuoLpB#F0&A;N8%ToX$gkMG{W`LiM)43WKv)Axuh88XS|QjauGPuHog1sba-jOgHn z0SzpHHNMO>O{B|Pt#a0q;X$|GLs`BLx_9K+Zh5Z*_LG$sK{Q2^J`I0%yREk6Pi;_F z30K(sh2FQ87E8!^#S}aXxU=~psVwC?JWHyMq>)@I)r0cq{v*8-&m4BXlASSZt^vgc z#U>Mk3%|iXy6)r7qCK~kt7`*3UrYLsw>-suXFX;co<V|!RV8xSttZ24QjaH(G+eFW zQSYNVfAOu3ajim|FB7HHI!}!Nl2$v8lRK^9uF}t@(g(@Lm55(n{o%k!Y9&RU$bQWg zV2vG`EhRf#raLHQdjnMh0^+4&wIguq!YrZ7(kwq|m5hD_bWb)t_`iK;0WMAGTjcJ- zO&s+*-iS$iQq~79t+nFVgsJTDWnf66*A#k?z5<l<_uX0!o~qdavyZYs2WZ@m4Pa76 zYLO#LA7tGk(OFH$n(vnl>!-hwoc@#wX^->TgpqUtl{*qIk+B`Z>Jh*_IaDO^UTxKw z`Gqgv*!f@vHa$&{^{-q*I>bi8r=akGJ%qtqPnpMeRz6uWSBP)t{X-)R$pi>kKoN$w zV=Bn1-E)JoC{)hE^k0wt{%u%J0l@l2Kuq1DQzo(GDT$qpb8|C~oS?|)T=gOPUiUd7 z3#1)cc^n2aG%`Q61PFQXw_;%5*C@I$>e^DM;*MNyu4L|;H_y%uGln>mV+?yRkYa-Z z7VJ74Y@Ja5;o9^G0RwKEzvK&CHv+s3Ck`ReFmTKs6$dU7HJG_{{KFm7@^ZqHi^7eS z;?ey$)(w*$x7hIOna+3B_|1ewgOrKTCbCD{@xzgYs_{buU+W)T{5uw@O2{8Durc7* zjA<}0EF-f$9re+Rm-UQOBIw=Qh#I?^6q8jKSB_R_CfkyXsW%*&$jRsXnMY=H`TO&e zYL?W1mb&CRg>Hex+mPfFG#^i~!BGpD+4Y<+#p!-1xzhB85+3xOs~cfva;YDGbAfa) zIpVVSlkZDSCS@T<aOVUXLw>R_-#*XVd52h=;JZ1XB62=;#OBA|{xoy;Xw%}aP_|(T zM=pzOdkp~`GQISCI!m{E&S8eopaS4iECH1%V3pw4=rSic=_ABrTvM%7^lbTj*S+cJ zRv|_+<o{m^FDEj!@vlbuTymOFoPBH|whuj(Il8L$@%l4fj(z60UxTrz5g7a2Ir0~; zGWbbE(xQceVeqyw!DU;cr_Ar-9|4X8QtpHpS!c0o)N!oZGny8{R-d%9SX(<~DfDG| zb>54zIsbAS$aZ^&oAuLXlyYf~p{FS-VxW0}{T)>MK9r4|*2O0Lc9Fp+#A@ZCf|Yxh z$VaUp87SXS4*DTEga~aHW}M_PH$eNU+jt2LP~QGV?!2LATZQHQn}XMsy<Ja{b#TBp zZpLe@oIa_pO5d4RU5L=b4PK&v<AKAMqXao(`v1z6mJN1o$SbZ$_N%9$1hof!3S-yC zorPaX05$9*e~>YJP3-(tW+1^i#C2lDjz>+AkjTCnDqzP5zv9x>V>4qAFv7stEPDTu zdV9;VO)^E6TyXL!C=6jxt6bhTxhXqU4-lmER`T}HTEO**4<qeRR8xfNFN6DIX$?1f z@AOMvcuMz^DRHnd2HZ_mwL&P4^N#{HouqZ#SJwudi%s-|_cRSD+iF!!naI@Iu$)qp zk1#FW#2F$;^bNwMXW+T2egWItCN&jf-xB5q=i~(CbZ`9t@>b1V&{+s&;!vlC;#fY` zcNauXGi<J_&ooLYElZkypOWk%(DJ8vPK|sMWl1(Pt*atoV|`s0je1{<s%3f2j=8uU zv(dYxCxm?$P=~@Au!2gD2^)%*v?uH;XGWfr%5jr_Dc8!x6W$pal{#}r-BT^tn|{{1 zK$+TvfhF2xqhALgPgzZ(Qo9ZIH2RN_<zCB+yoV?NlSH{ox(|~at%eAZm#aUQI_;Nk zeZ0mF&<A=CyTzM6#&nXt40lI(cE{lU_?R2jLR{|{H6QK|MTBxA<VYb0M{|s%!HUal za$Bg?U#1&$-ynlcwLmrpnhgP|%9_6yPFW{9XF1P{eLmF4n)ovU(<9x!N4glNacw<a zC^D*A{o;N87qzdA3d^5J^-JbxX$pPi2V~OlE5-lNjQoEpwz&p#02_=5M8gmH5^UWJ z0ds$zQtgPNCyz@<YerT`6BxIK<|8S;Yrg6>r$M4e;fJ`izghM?s}0xqU7_&fLs;Ec z<dB~I-$^5MTXyu%>M6Tu16tT`=Xw{EhV$!~_tXdKD$w!(S-nc2mlLjl0vmlPtg5cP zpWyWDVIJR{{^2ITXy@85?AT_*(^oDU#LvgH{KV*vy4QW|3dzYnt9beY5>-~x20EuE zjX!gmw!k!v`<6^y3b3L&zId#1nPvr;e_U*qopq~$upl&j@z{^*<^s=$G1@XMw`TO3 zXRuj?zfdoJ+@_e49C|4_9)f@Z3o4D>4Qn{cUSwktfC!Qcmh`dbc5P$N60Zc;lCr>S zEb<K7Ri`eVGU<COciMVi^<3`z^}17!PSLFn6lcZSL@*N2AEU?y3upWI-YNJ<T4Y-i zbJ-CPZk&LqEbN5xBAzrfRyNd;lRd9@W>lr_yo~Jm9S-!En++(Nl|XEIreS+S*Y_fF zUI&`McG*T-P+TkH{H=HTkD6B@DM3JI^&c96Z$y^4unR36)^+aoPSWn;gzM%)51w(H zKr_hD1^>4cONXOba97X~D&G_5V4c!^iuyFP2A-qHeOu4sACay?G5(P*y~=xEJG)5i zP-3#$<^OsYA~$A1<0g*0v*pr_KijS@GK`xG#D~5B4sN<6Y|QRjZVYKCiW??R((9!A z2BgaXouG%+ql-<>@6?BGSCvK9QMVrfYe<_!M~xLO2P8pvz|C8H{HujE0Bw+Pb|}l< zw3FHpz9c@n($6|rdFQrNW97c!R|l@GPtZ56O28|5kS!Fj0}>v<7agj`Kbp}K&wZZs zUS1?6&hzxUv0F_%!85`Op)^5JMQxlsJ#j>BuT|7Iv)4uSt%&k&4wGQ*#P%Tw3+9GL z*L31miQO%b-A#C5u~pw(Z@!&)G7x|$O&9C@$<h3Ap}qb3SEwwpV65{fi*t{9)mGcL zG;mP63wmbv?7<s#cy(?Jo~p1B)Rj!!qb{~rN;l{3wbB{`AzETR|5Nw3A=`4v?}I4M zCn84&TF8el5+g&^#xz7+Xb`$Bjg22C*E^R^0#ZcG<ecQ=#Wmd9v)xV@C!7r}%r|sW z@sAk9?oX9YExk>CWAbwRa0w~+@&JlOu>2sG!9~B}?0%;y9Y3Z?T+z~!ySRJ7_xu^0 z9dreuKs@ef0zDzFl;F2DCJB8jIPxEiS4UuU?hH>H5$?Hg)*UGmdNp9q^FqkywIP-y zZ?}wV%6!?OBY&NM6q^N&-bFOoI(G|(11?o8M<FfFzxI{4PMlRwSHJrMKt{wrH1_!H zD46<q^|p@2HCRCCB+KKKJ^?WNc`LgFPDN$HL;xX08psZ-Zj41opVSndS9+p<q&xf% zP5uq-JtS)PKykB$RU!Mbs}<)faz=-!&4*$I`3z0EZ{4%cd3R5+ww9qct4@&-iop<d zcj}0<f`+%?rQ>S?(SR3jRaKK%Naf6(GLQuXTO;mI-dA0k$7RhS7%@OhDdid?cXz^= zNjlx{oX5}yv)Y}p#Z!UwQ;}aTrWcq!R}oisYFddQP{G#Z=KZz;*~sHZxJ`}M?0egM ziR3p@mk!FZbq&WyrJk4v<d46<Bm=t^?&=r6te11Qq{<XX<?%(B6_YF5sDi|<x)YWr zivJTEm~O_`&+jhhQBQzDy{C}NkhStn5Sf0S5(Hcv+hFn|6n6rsirfe9w}wxpZp&<) zJN0`Ow`;!7pmmNe?g0HN7jxUTmS~(ws_cMfLDIB7z$~nqK8(kCh%gF?*~V|aaRV`s zGw`V?5^+@qzV1xaD;XI*JJQ?2_X8}gc#p&FOyrFGLFXP`#D``a(X<<%>da3a$AK!( zitS_}L_z4c5gWF)euxn8|9qJprCd|%xO1*zj~4%gNGDWRb`k^5CWrs9bJe&2^yBj1 zcy3FHXEB%UW<E;l4oz7~hqlW`1!ZNxkrJIv#ys`W;(LqL*P*WlA(M&AmRZ*T3T+d_ zoH&w9&@KAWuk?LcTl5b%H)^R5G0Oavc!>gEW8r2xb(f!$wmJfDF4-7*aSA`^3DI&a z|2wg<&xYgg8{GeO^w@2*t-&^{#ML)Y5M5<N+Z(C5qaB*kyBXBoHURDj<(NcBhu|{= zN^G_JGq;#c&v_90P?#I*W2lz_Po5A9P^3Y_`3nQiuSeI$GL3^ZPiwr@G%O_=vonZj z2S7OHu_SMJMrjDu5x2KXVLWk(+c)e4W<36uCuKK|o&VP_1dZ4Xl1RXKk(fHUah~yI z2*vN~^6lp@Pv5iY5xySMy<%r)rAyW((a<Hv1$CSJJ@BNeTenp1#1hnRxAI$W2F*|V z{4HIC!*5Dairnv<X6z>?dcjaSh*{zZ77xq7qxAGh@z@B*N%Nx()sl>~=;gFybos=P z=(6bdr&xs9LcH|?cXpwjTdFekdga)t0B<Y%%=f;s@#%SW@Or-3x4Bzh11dk&0$Cfq z@X`-t8B7HEr}bi8#kz+794{8Q5Cv7XTi#bqVXW1jY{m-9yolwMPG0YRXnw{C&7io~ zlX#B&-WHIbm{NZ?Oeo&3NIj5wc*DVOk@~j`O639udQPN*x~b=Cfx4(zgPSOu;De6g zaZwBL_7)2Y!BpDXuFtvI<fJ|mX-$sD05O8LC2PQh0##x<0LB)l0UD=xD}BNlx<0Y) zWc}7-Dq(3B_Q|8(TvSo7oqC-N|3==28QnG?mabxX^6<?7=VRTPZFx-bud9onMAb{a zlP{k<tPz$(GMyI|cK6VBDEG^;6A?PSc<jH^85I9tAf*4Vq3l(t8aXpBK-s)zbO)tq zt3`Fe97P(}?BjSV<9CPX6x;3rnW2iiJTud_NJrpYDCjyJs(Z}2!^eOjjeRxO$&UVq z#+mGUP*XFeQ2j}Rd%2XiHM@xS47}FytdH^X(*!x=|2^Q#DYgV@NL!XLX0kf^p`Up% zUte6g*aD5}N25Tt7)%Ipx>Lom377!hF54CzyAB~qj&Jq#ZD0Lm&pR06{gh(jO%!N< z^rzSVyDJav&NT&*(V4*q!jTCn8xST%wo7g>K1&LnP`(vxk6$$agF?^0KEXQt@2})q zZa{ZtGtI*J6C=ua9vi;iEi@_4Kpxy!xmu(x6SQv=5vM^r>!J+ooi1qie1dAUQ~3MD zsXL&+cF@Dg!nW)y2;p(W!=L2a#uXKl`WmLew>j!|f2JS(%kcj91NcRF5)WF=1Mbi1 z4IXS-S-+=qVe6`q_(-bi>pOgC<#FGZusKnZEowE&==)p|N<_*v<O)633F@$VW+`@M zD5!5zvE_{lccXZwZ~pp#7u{CUVnyI{-2;iFzfR3>M;w1<=vSoaxd<2qn4!{{1D(_m zjb2@HG4=oZ3(Y2cnQXyE4db%Q7Vgr|UB4$aNZ#m$qy)^>lWzYKRwPo&$pu2%CS%gJ zvXer_*nXa#Lb`rF)mAZck0Rw??#ck<V*CX5;RyR>&mm?u%Utxwjk~<ZW%~;&s0EfM z#*Lnlen)=Ayded=-}YWytiew<vHx!?20VxXG`jXVVUj|+^f-TJM=IXxXk~J$|H5bc z?(|=zzx)IRYrA(mP#h{QI&W@nJ=ZX{u>=?rupC@{Hs782atwg!Bi~{*B&%wPM;V3F z8%__cO{Cx6v-^hoeFu^feE7ew3siA&mv_CHVT8wYLZ{=Mf%zrr?Y#Z#S-NXcO#^{; z(Fi*tFiIQbQMq_uWRt$t=j_2uv~-3aVN_SeZ*{IHpbRi~$cFpM{<K>=vB6%YZ5tgQ z<PohGgjSJ7R_|emopEzlPH&7@n*5oZP!fsTqdmGi;PGF;>;L!XLlY2M7*cms=yd=T ze%q>c*xlV{yd`U$z^)da`QgTS(1RJW_YZQNH94%EDq3IOj6Fb0wFXz^Lm5QM<G<cm z-1$nVZ5D>(BBK-xzbIz7NLPbZ|7>}%&&KLnDR({1dZi1@=rgs)3)=CjIWl*eZ@^U< z@E1$8&d2B<v1Jcpp7-m;K5jb8c^=URjt!T5Mt`eA=}+(UuI+4hd?+i32E*W;lc~H_ z=>8!ZvD<j;=iqm;8_JIPh>#&B4_y7I{oR`V*WuYH*3#^dsc!3~jK@lE!liU`CM=`8 zmu_YtcTV9n%=)8!U9`9svY}n{??lXA9R>o&x5VLS*X3c|?#O~U46!#@>c?O_>m}Ci z)5DFF4um6#yAYokd5lYVS6)-_B4Up2YG0nA<Tr<ZV;Fey+DQ_vK}WG(1T=@`=85rl zf1&sek#hppn8-_g_xSiWZD&rXm5wC-b{$N0g*)i+yFh8@=!^kq)HTTk(nurJ-iD{^ zVgw+uA47w6GMk$m#CGO=p##4prsS*^Audt5X<c><llS#z370;-Qz;7AH^iT5|7zwS zM=l!Lv9o|5jxRSE;DhTvDhB&SNSzmR*xdoxACULB!bo4c=uqX1)=_Jvbm>yW;>$*d zkFUpe96=BNy|U&wmss0w;1V*gcvejXhQ1O_%=DLm(72ric6a?l!}e!BfCo0|Z`%$8 zb^DA?4|w`ZSwFbx)pqM*(p+N`U#!cK)J*dE7prF@Q1CA)B;GAx^9k11=whdmm2jp* zk%<HR`BCd}ph@D_?XpEG`#if1LL#;U=bP{qhr+P;2E$(u^7yDu-U|=j(T>^mDd_;* z3Whyh>;%rwZ1?&uQGMMo*{w*RU=8Oeora`3*2F%E*tQ7yb3fUWS))*KxtY0!c$f`L z=!aX)N0*|q^~0Xj^HlbFfIL>}ucZA$<M5m51PUi{bRyXf!HG<*-|W_~DpQkNp*=^z zOj>FObC!`h;3U|l&ZCJ#Yxf(L8M*D-P&u65+w9B}=e?3c6Z0`twYvr!JduPd;Po}& zS5l|$eb8IA0kv6Q$=jr=jM}HK7^<p2xJGO8YM;}*CYs3f5gF4Yf+-{%l@O*AImn)E z%?#sLN6QrN*QLYPMcK-q)4jQ*Q4MJiPUKyqiZ>Bk;uQ_u-LxH#PQm2Gy?&ZgA;EJ~ z6<BRRp@EJA@}6s`NKHk=sbQ7^i_>q1)VrdrrOMt}M!plRFttY%uQ8+6M_7Jl(lp2H zq>nQll~xn2ZX`ed`0NM9(OnT$-ILZXdhC7GQRX4d3;uFqdnbVUYKc^VWfs}E)cAW@ zOF@rnM<fSU!_RgOL?ymror$!;*4YtCkJrDtqWpu86m~v@6x+sx{OSz4&XxUbqvm8K zg+9-rWovJTsp-``nCoid55*jq<)SSuR-benrWk*B_gY=c<U?h{qu%tpbk@J;H~L=+ zqQ3`aJ_`W0;_UW02CQPN{-kxRz+Def-L(frYS{Qc%AH8owaHKgteS~q(R%pv`liwF zI@_OjZML4Z1kk~X2${i_BWgx?@+hv$_TuA4>zgm62m$#o013JQDtW>8umkZD7-(a} z=%vW=TSs3vol|rK)=jrI^x~<NV$*!<kHR<kQO7ka+(NfB*U4t6$DZ^6TU{du5_5G- z0WdSIr*0R{n9xQ=Lq9yY9e44xCEO5?@@@+n>ejbzt>xxWSxcj*THneMJ3G*@=sEp; zmjeECqx2t|ZMf$)kavg7*v@u3g~{!0&DWyK;9CF2@Wewp8jxu}Vo}2-3Pu-ZesVom zp>C%^;vEruS=KG#!dzJdXu7Kc`AhzX<>>C9ZE$;auZC#A7=b6+XNV~vVHzNDM~dBg z=iY%<RkPoFt>SGP`R*{0djrPY60xrEM-5tF+v@=Cvvgm5for9jCe>T`mBs#2S!%vc z^hhqXnU00W*3tD}x_jwwJKJym`7$<q^8E&Mg1emy#>mf7-1t=Z#_t!WT%7@+cM98* zChuUP&Es3o>wZ>{f(BmSxBhBXGX3}S?lD8zJ^>pS$_qotk8dAr&ax7=ra?b-oQhVu zWr<wB{@w~r+2vjWXy%{gB<1zAI}M&HZd*-jk2;Tg#xl7mrAf-avXC|DLXY$Kt^2~I zIOyg2!UfJ3wesE(O@etYWb%X95Y{C64EyWDKix$}m!G9?Shh79%70{j{}0XUCJoHu zqEjtFNEt90%wOtf0s5+LH=or$jw_`pk$V|LsZLp#AkBv(91GT{x3MUUcA;DEjd#B9 zb;LMy8;P&(J}!or4j-O5QUZ&}NUQ2{3kM*WQZ?4;CB{itOHf(&JZs7n^ul6I3|kb4 z&8c4UXGqz`1&PA+qwSxes#bMqkaerqsVPMx#w9Pw&bVQY*ZHcRh9o4S0ch1TTf_Oy zYh_};Z@zMaM*DM(yYh(+zRr-pYa&$!&L>|9&fB;`?n5$t?ux)IW;n+Cp--ZeQ-nU% zz{h|57xbfm8zs0$Lv#%W8K;VBhb#ze%Nkm{OWUWe95MxV8Q6RRiPF{fU!-2xwK;1E z)40=GJhveS6!9aob9$Ul^nWI&B>D|9gSM-K(CsEnGXW;;wB4pHDhb~e_H1WoQ>Ir2 zL>&_#k{cya<VfO1dzZK6oRGHZsABLfa{x+{(Vz0@P%Ajhra2B^UVx43YbG$764Qqa zEaQ8#PL``0jgQPFA`i3QP{l}+y^ij=nJ`!R5^pCGxMgJgday(|1!9lSyzVn_O&H9X zG<V04U4*$a2A%uP_yXMAIeKK7IEfN;v&4-$n$dlHAjn9R<~a(Q5FaTOOC!+N!$qxg zZixu$r0|&naY^1(J}lr+$xS1$^|p|gEr^iz%|sf?^WnUD0M}C{FspP>)OhjOnqN3u zZnL3juWl%gKQyltp*Eo~z<wvcrRml*0DvkMeqruST@#~ntymSlqu$y0Fx?qKXkmKr z!Gx<1bmN^^{PDGaXiPUQ_=eIF?c&EeKfvd&Aaopy`W??FSz1qZvETXqd2V1&#+V*F z;g-;t{|DZnK9^RkB~j53*Dd8t{)A1QLR<$r$?p~6CLH9%POGNvtoVJLOo{Jj6a=(x zNd=SBh}xb0SGozR8Ah79s*hb?N?Z*Q6!)_IhvpqZd7)J?I|{?W68GpVb34`O&RfAA z3qcK)56~9H=@FQ~qFuOEWIR=Dv*A5Vbo>AufUk)T{mm+_%4#wv1Xljfhx9yPcfsr^ za-qrlX>#|;EWz@R;ce?a)<0S~swTVYCF{~`)O+d3v*2!ko)*&xy9kPC2IN_Ha>72a ztwtVXDxI3we~~WBz23v>V9B<Vv3sd?^N}UuF1Z<JxaQw1JB&IojQBJYs~??`3U&HG zYcJ%Vb+$QoaC)ay${i)$b*(nqUURMZmSkt3NqjStYnJ$g>@G^N$yrzB1HdGVZ;B&F z?9L7!Dng%-y4zal))*F=w4c<b4&opcy-xPQxfk;@p2p-X3<xaL#$RnNCuU}S5!>rR zbn0i_9YzKsT9e4o>Q+z+qpoGP3!V2@fa3IEAE+C%gd0dE;adtBHw$Y%x*JdX{uY&{ zjkt?!!|eX&0|F5T8`91=TP}wJM^iVrn9P&|iI7FO=NbMm`O#GN{j&0tv%k09udD*S zQWP|eVmE@ZFC~Yyb^pThhomfjXsCzxcV2h+>u~QYIAmday81QS!hC`(N~gFs1_M4K zqvj^W_7YEOe4ooL1${&7k?rtCcI~Mr-&dm#9Ve=1AN!`R_!uSqFvCUVCD4=+>g}S0 zFO6Z`3tByqinFMJ(q`Z9+h4P6CP$Hh{B`jhTExg!OWEonj)2^a)hFX`^f2Q~``16n z-Z6V*L2W9bMRHRvlAJIe=rqH$$0-#~4V9^vx2YqN7gu4ucqGd@Owe$5>xNDf3do6a za}gEogG!#ekr#fEhGhK-IuHc<6%U1$!~Y`SC|7B3wb7868-MOwej-sTaa9m}rmyVD z&Csh9VDvh{42}%P!stl5?__rn)<v7|LZCgDZRx@_?svcH&o-HCjxRM4I73q}4<KA8 z+cwBkHX&Iv1th5~Yj-WxrG@7hEzign{sLkVajRK^Sm~-eWyKp)u3^F3wJUnJEU!KE z5;-18a2G!%$j10g4=6v(-Zr&dC%Ny7(}YVQsux~h%b!AT>G*nz@m#9V7Ww33|DjL! zlH#H~g@L%8xuqPG80DKvoXeKQ<&Bn=Rl@1-?vCjFRmcLe)QO%j&BB0G>e!P6rJjLL zqms&%@2R>CkaJ{Dd{>e17gPW%i@I($Sizq^aO$rku2+_HS<eY=kPAc!)wVb83Q_Kj zQHM(B*J_S%4l64oCWBpeb^4;Uii5~@l?}Ut#}v)K$^ccap#M~LLrdI&1h%_lrwa_i zr>xJ@wJd!g>rq=rkdiy#4vZmwH~JWP1z}J`7JV{OmBGi-RCnseKKA~-(EP^KtI=B& z^%D8+R*=9pU`_8KAtO*NRT9cPvYcY&fN&Mpx)uvSKTxy~Ch`-*k>_6uxgTAM8#>PS zDDB>O4fnvTcF!}GVk}Eotgx07RnnF@-1{@@m4QwK$WGm^#Zkj*yJr{-WXA}D->B<1 z;{4&9u61U0FLr)?v;xE4LZ@b0td5Q>^|7pGXut6e4%PKa@GE^2nzEJ7okky<_s6xy z$-K5I{8?Pz>9kuMjY+8FnHOL?J=l!5!`Czw{sC7H{1$$Ep6{*{7yvc@$MP`+ph}xX z$Pq)*#ie=5>zYuu01eOc6cZA6npdgqrp$?1{y#LX^@Gd5D_OoKpUq&au~`V`(dsj} z?#N5E8}7N|2}R8FuJw-}&**;C7hC`l%s`1vul%!E$jiYY_JQ66G-Gw=`$Xx+OHsJr zagkIDq;I@Gh#7N@5D&H-SKJkb*PJw0`_fwJN;~}Fyj;Tl>o4@K!#XU{0;WK0&IEF= z2J+q3R_3&XVB*ta#)Xm_!B=43`2ig5c1(wsYW9R7t__}J1D-!Q4HG-cp8?Jh<FR-- zpzR_UNPfkY@Q)U=vy0E_vf6xy%H6{b(PqTR2!wKhkrEnjA^i*>)J9!-aj!P%iK^g* z#XB!wK>rKy8~@W=NJBgwRkJT9w*bw)_dL)@y#_;pA&r%Q`%#a2J>R$L@=0X3)s?s_ zFPdSaeTCR%qpX~>9o#Q;R0wHE7Y@i@pgV>f{GKeNh=2rJ*7DXtWLdzq6o<7Z%3J?c z<B*3#bC01wd|JfbBe~OwFJWxUuyCD#?l%a&JYdvdPL0GCT`GO3t|jeZt8oDn_aI4I z(CbrME#KdgOgJbaiR{_+D4;=|9_LaWujyd>^ZWQSNROxxuq5YM#V{H8<B0qTri|k; zciiiLXo3Ud{W*5i*EVXt`=#>xPAt8t(Byb<Z$m5YADRaQ6jd&O)<rZ4^Q7Rut@g{n zSGvLc$yDxLz+`$NP?dN}1-~D~80Oj_^hT;(5l9CD_-OD8+}_pY=N5;`axb%YeD(S~ z=e4?evL_)*%3QA@`C*+!Dg<NEHARaF>uB)oLeY245jF|jfU{0!dn?IdjBpV#TIxWx z0BRYlY+@7w_#1N*^N|b9vees80#t^&RrEUJg@LcdNLL5!D4f<yeVm(pE->C9DD(rf z{SsSa3Ns~T=*D&mOOuiKS^Y|v+O*o+wjBbr<}tKug_{FVQd%T}D~G(;S`Kre3jG|- z5+F$qxSxMj&LFJp!K=PLe^K{MmNMz9Fhf9Mq?x-NcZYy)gNUZYr_i_F31F;CnX&~r z1@F!TYaCVFhGC5wYb|D&B5`7@@{AKmvULl<L0$70h3t~cWC@Tsj4WYWX3?;coSC~G z<UUR>5Y<^RxWjg;69L3#f@n7;8&=;RY@X83yNYl|w_tvBo}>7!U|P(Hs~t_+U0IR< zjyXo^z({)c!zCGMbFJ+oi*v6YI*%QcdNQwP^JBCN6c4jIq?PVyjH&-*cO`jfJVjlB zY=k@-4^<e}kY9(fPs&yU5jeHn=0_C<UYzD~kuGh^zcio)@cAm|1S647{0Bphd*L=d z_Epa&`g%#eodbp8iY2jvXJrC6mm-Dyqo&ZCF(hDy8KFTO%plU+8u?^^GmUrKcSEF? zJHS!}dbM+}x|4cK&&&`^7b#b7lWo?D2mpd=O3LA(T(m9g$gNL$6b;LlE6owPKPh&E z5aqU@m&zx<H$9z>8R#C)`!e}R;C>?U9ux@R=W5jdho*&4v<c#(@M&Zy1bHSXz*TGP zKKgY`vz7ghn}oK`KGFANhu72y--ztMMdTx^cFMkm+glvHj}jj?`Ti1NH%8Ge*28~B zfPxgZAGtkj+tEMHH#l-__c$+H-x;{wl|d?y<+O5v5Pw#+`+GYp?f``^xu#f`lmoc^ z)V;5wAmsZRcabA{qY$DU58z2Ei(M!@no$mwEhjmlgp10o+~o2{#q4?PYvXcg&Q1SI z%1xAge=yHO@g?bCqqjv{Vs$IZW7_5xJfj%Qb^Rm*BwkMjj#7oD$lcxMS&~)6+00@C z*QIWs4?5LGKZjC*uC1RPt*sqCA#F)*)S@(v;l)_UzMI4cEt9iKCfhTv)yZsL42#s= zMiNW-r;Sb+!}7V|u;G8fakZf!fYLgfkDMpL0tt3}0e+_)IKOI%4s~VI+R?K3iPS{6 zTk)Ri%{YmS#_X1L*dgTP3uG43*X&{|yLd5DgHOCd4ekgpv~Z1mRbyn&m#S#dC8C<U zJ(j)!!CxV-=s~Vjy$Y!!w~z;*vBu=soB(X=_F^KhrJI$`V7~noO}FxF)!t9vdg6kh zO{Or1(|b6B;s6u<5lXLU)kJlp08@>2*b?R|wXSpsMAmMl@>dW)cILXInrmCvCInuu zjiLjk$@n+2t++uhBr<A~3M{CgrpT$KQK9NP2ZVwt{faITh-@F|LW3XLF}L1?6EL&R z@l4u}VYGituMeo#*Ckj-;u7fG!H315|MPiR2+IO5YW(B=trLlkcmV^kTd5}3Jq&48 zY433jBlsJ~B#4UNQzL^EnOJTBs!VqP{rOX_&{q)t6@>pcGGKEgCx$@Y9G=>;UKn#{ z_p7h9H22$=k&Ew{_W@1TX9^gRCrakwN=NgTt2$I{rz(;%Od?sSPhSg$u8wM2$&*bM zKY6L5JB+SR$(n2dJlYZTeKO<~7Rjt8r#d5$_OVMT(7HtFZdqFl$>eSGh2d%lQ!l~p z^169YYEv<6w%=QNN#uE4ExY(gonQzKFOx?UMA99sn^t{BIC9cV3Ebvw;;|n}r7`yY z>Pu+Oi}g=!es+#{JJBk{k(_5;O`Ho0EZH~@q$#l76w+E^rdIz3^!!;e5^x6kCH+H# z?9}lm!G9&XOInk=^<$hKvun#N6bkY$YY4#`?zgau)g^YNHs72$jP-J_!Tov0P0|u- zy~=_0^=sjkI<(bpHFC%QMZ}x#mNpOFwQb|(krP@9Vs^r`n~!NItf!~OJIHoO%Nrb8 zr`1H2Wpi_u%0DnT8_IX8YQbM7FaJZM0|H+4R)ihJsXCOaoshv6g`;LK#)k^oJ+f88 z!5x?l`Tt6befvrSiH2ic(AP-akx~=~QoGie;#%`WzUzq;?!Di@vDnwaAKqk#y&t~r z0>2vcI&W@Q&#Ja_tJobeKP;bZ_2jf}9=R$;PxtkCRWqHCf@`Q~Y`cd*yVoXr*=J3$ zKu1v-4z(?I?#`f;{}Pok(7D51xr-kZgYBF<UsXH7TvOuu!}W>Mn0%g`p7t3Y15iwM zNhX9$@~L<lv3O(hfGCbh!6f}HW}^f(f$$RHXoLj*Le-><`6jfnK9zc8c3R+S?fty* z0XUqP7_TN>Lf-92r;jOXm@WAt+Z*fF(_=28?cc@u)E#j8$_J#c+SLsc>c@A);gP9< z!aDLCU$-Pc-~GqUSOTB9Gnrb~-t=(KXRnA$u`Lv1D}cWl(*RMVLsTa6Mlk9syeX*$ z-138R<JfB?uqN3*$1Xri9jr6Vzp`&#Tb(+`I}-OnUkG&7ZwXqsp3Q>c`M$w@jPs1B zYJ~Uuv2l*v<N9zCX6x$>xk6F*A|x`{x}Jn!rw+LSc3$p4RzHzc8kARZG1XLY#M6<t z)sq^$Mn7f?g+nvJyxBAMc7G?)?Ps!Gu$!dqmN<-8VP~%O`sAqfI?hdL73fLqlG&)$ z!9rYZ6k`%P9K$CQCL7c4nYtXGEN1;1i06d-WRlpl5>^4O4nsmfI9gUKntQnN{`nzc zCg0QiAjV1JZsY-)#no#a#}dcQ?e+2gqcVDv#~~&_AOm<v(T*vA!-^D94vCUh*qk*p zzwiMTuJL&5uixtAw??8wTL#=!qJ9J+$0=7NwN?Ixh64XWmRQKX5P-&~#unQJSR16` zQwV`pGfqzgDm*BD*a}yGEs<2vYX5y&2kuO}9mAW(7&gpU4--Plc7P&Iy7EAg7<EvL z+U-Dp>Dh++rxI22a{ea1Gu?vb#^q?rBXVYe5q?UIbB=oq9hn>$g4pVOu6E1pnsMm6 zrsD_Yu|{LkQttap(^?<IkqsqpDa8{{Cw5T>1Co2xzeiS9TKm7J2CtlRx^qHjllDdt z%|t%MpLXKc#EdRFtfO9TINZpgx%mbVpjv{GTU(egLJQNC{`hTfFdW0RKc|=SOa1L@ zFWc{2{Rr)`Dru<U&nl8hs?TwA?3KQA24bsjHNpHHfb0=SY@xmp<_9M0M9U;hh(qnC zE%E-sg5|>ss{M4iOojRcsD-mZ6h*#*tp|z<@N5kgAP#g?l94*)V+ARG`bVS-QtB)| zT&qaV13Px5ocw@{Uj$r;!$SjmAXpPGvykliV(2*|EjR|k9eQ1PhXb#8GP8PSpYq%8 z<l<o&c40T7dO&2}Y7${DCegva-8VC%!#4BQ%rBSi+W;UKv~@4qF?ExkdooM5P_D~Q zOZHxkT$U^TV#X8<<{*y(hA{?;00F|@i{4DX*EIgZjCs^ZyuIof;%)h8qjkXZ>UVdf z7xi=EwZvTN%uIjLu)cXZ4oz_prYGC`7U<j^^D)FGWo8l9IR=tq1$Qpa)h7bHI<hw& zd2Vha-6<ZwJZ}Gy=bggSSvihtFMe$>t~Bva<DK7(<fVfc)*0Jb3%3?U8r}Lx=CN!5 zl)BgjE7Qwz1`I6rPiWud<66unW>U<F=`xw6WCn`9{W%`fvE@5okpXW|VSk^d3)LoS zhy?U&PpDbu>fupz_v=nyn3ql$)O}@zu!fY({wvm}MPt<QCd>sngq}Ggwb}bWk~&x9 zJ_)VA-FgBEHzBaG0d7xd_)89GEqq&KK`#V|D6+1oH}Crpq`YZPxwZfpiH=yD@lEnf zyn;I+U!+ziK7TYJz=LA&YS#GOi|}TdFe>|JDUV&za*d}vF^rcegBBd~YG!t1D8RG% zgzRBz*QU~e$XE~&*#<jLa!ic2A$#gJzU#JWsH*vTk5}z3^dTq@TTTwv9L1;>o<(Z? zto>OzW7qpuscdnaP*u{6u)dg}#zokEVnc)_)3@Zg4JOaJcGeg&Z^VQTAI}u42bptW zJ7i;p#or#xvf&51BGndhnwmdtzXuTnQZxapz;XLLEBZZ#D{swEBK_sJD^;IQ2PP6% zjC>TJEX2mHEFO}NN=1OCrATGH(^p>1&!KBhGV1<9U3tWzHV_>dZpNRLlG9PUF+J+) z82A8WHe(EK%B|mx;y$sR4?6^hg!H*S7D2VM_E|vh0;Tdk9(hKirU(%1^lXe<@bi&1 z^IU2IIqNv?FfZZ!v}j*<W_>cP;z#AH!Cmv2L0RDoAci%SnEAD4(AZ1QM_e45m&|Dn z*KO6k>^Q4f?5svhW!1o5TrE*Pu{nWGqyNy9eAs^Bl6{s672QLtB@@sc)3%exAVyio zdLglQ&T^n$w*9hLyiyn;Hj#aUDo^@-%W?xsy#Bo=o1v%XE$ge0UbJ~`9dI9;Zad-W zfUvFMetMzjuf_Cfa%)MI@my&1aQQ`%MDhWclkB)d!w|g=oPAUMJIGD8Y!R0FAsu^L z<CH?nbrpn?iesr#>Z`ITd^l|}+r10c|0S9NVD*xXcO)f7E|QU6jx6(2p8Vd3+gD8F zXS}-SddpPiHWyQdqGYRFsy!Jq8gGcyef{hHli}f88r9p`v+2X9Y(UHSgpmxPl0B)) zw&+&XS@Y9YBZ(-F+`5TT>JAtU-su+k-S;R&?gSgG<NU`3=a`V^k8~~k(~9&@tg`83 zEKPPe-J-W9p%`zJ4zX`(2u$3MGt&Svgz5DKSOQkQ5ZUnIlV4o#S}yO4nD1-M=x)W} zhMRd1N<<BmW62bb4k7bA;?GipYfQiBg~#+kOaIWQ99{!J=Q>q~4R7Y9o<H$iVY?;n z)#zyxJjv6^Q*RPMy%9{G<bgG+ljEflJ*CTI_Kf^C7gHmhSvsjG{PRkiR%iZB4)zzR zI`PP`iEx*Y$i;tX&MqK;G6Vs1^aM&mnd-^Wo+NEx{3q<kx~!*S`0vRP3tF|VCztOo z_{;*_Z|98$r7xvS$n6l7!Q-tx2K&?dV2RX4a@wnf$#70nm^z^)0>(sYNvv)hV(*no z``PU&+*!BxPG(S}zPRKRLXo|A_ONg>6xr1z+I~DIFp2=bJb5`86dL|=*PTf<YVmP} z{ADK4F5O{S0>%&;MyT$NS9^-M5|Y=RFMV>u=pp+lwf~&ztHPz#zmvvc-lQQ|IlQ06 zx~;{TW59#C{MPl{lw5~n6%TFG01U-@lp<X`@1{~4VLmvAGZ2Tr0I=w=2h?3u@KLJv zy5CDNOU-cB!@Ded37RElg5~+;Rj+UOJkxwEe@W3=Z`5a-yYuBiuz<CIj#!j?uEj9N z_<|SICASV4n=YJ8P^WEwKst{W&i4M%R(ho-RqexVTpgP1JOqpn@Ar99*dU9x&TrHN z7SMEXmO?V@4~HqHHgHb+W(rQh_o9?Z>AS{Y7Of#uORKhxx#i~{I#&4T-g`|Lt6Z^x zbX_4hCAQ0v#RINQ%s+N7SaK4{#l7|qHCx@cMR-ScaHoUa=D3xQl}2aFMBLxqnNxh3 znN`8~|6jOzt+6faL$WaoB-Hlzu4?!XvB!GwBtf@l@o6r<79!9Oa(^HlT(hSkz<lYS zNhGe>F8OHaI$}F}c0O)#S}_!GfYA+yGEkJTKI7xN5090VW%dlOHM-Qwd1rqT1{-Ox zQY48Ly(kkGF>9{dwHbb+Z#aGbWWlj3<5CMv?*`$G0XwVbJL!7pdM-XL4!m<zv<ehw z;*bXTN+Wze-b$i9O0i}Fq0*pJ@Hy??!#J$)qqxg#y~m`Ob)CfSJ;)LmPlKERUP048 zLnIRuQp@`s(qKtWy!ZyCJC;UUpZYNF^0J;Fw9)iwbqLsGveatGqP)7f>N%6PH+#?f z#OHG6x$z?L4$)d7Z@BLLq8om)mW!z*K;BTmi`jx!I)s9x^l4*RPQ#l~&-(j4E)qMR z1NJ=)3gBbQdV*X4Og{VvpbOIh*6sW(+li6k)d|T34@U-9?2_!BtKL=x>G6qSjoj6s zuk_S0u?p-re0;8!(Dhu6*+UBHk+?mhj{Aw!-G}e~DD-Q;QoQ^iRo=$I=^O=~F(wmw z*DWpRds8a#UY@x3RDH$Vr;|t%jP&dsVrOi+p547h2xKk7i&k+|i6Ti22if5~-t)lT zFgr1e#qEffM=xcF?LNmG0%31C`D+cZ#G}NmOqId@ZF#<eQw1>S^C~%m4v>q00a7sO z!6?w5{-x5HRdl=6K@BcAdbQU~=3Dyy(0{B|>p5m}@B$mn=8^oG`G%r3fv71u=;(2| z(Lo~NGB$VGO$iExDotYj_HC>$SLz79O&19~_Xe=b^&y^7u|PZZdUwRql}-ASUiUA} z3*Nq$1%Nemh?XDU3B9{si!)2<LgBT&iUuc-@D49MEV3S(^mh02q1b*>fU@=*I_w{s zUBC*s=vzrF+w96FX2FkyA>#_`yVuHVK3;nHn!`aYFZ7ZSmTObNJY+7u0Jfo&9=?<5 ztbSGyI^-oLIjWu2$Qzf~R`u_Y;(x^lQ$k=Tquc(6c~RSzZh(F1vHiSq+-GW<!%4|o zFuHYp<(4}9OY&lN^ll2u$1{BHs><61hKY&Gr`fU;@NhG0fcF#PYFJ;u+mS<*)=r4- zvGXi@-*gmE&?!LG?H5`2Hx?hgv);6}EG^3#y`SZyEA>tAjfr*=6p0rdfvnvw0LB0x zBjX=UQe1P^{eU#>;i`IZi(HFunS6iplO8>Do@jZnwvpQCcHAJI1HWP_cC>f@djoCX zy`fdu^&IL@3yUIHY_Bl=Bw)hazk1xij1ugFLNXyZ$ll+{sdJ|~sey_{N{*kew(K*i zWGPGgKO%G7kL=zj_g+go^>De+*z(!Wokn(c{p$^`ajYy!R<nu3^WMW<A$pX>oX;Lp zkwo1XVvZGYo|e402(y>%n&(^>v)Tm26U9~p#-nP6q#yEhi&{{nc1aDom>4w~Dnk+m zyvCzGC9dDfE3!3w&@#%ZFId}$p_L;R4f9c@3brPO730_SkyXsGf)#h3K8~$hN?w10 zY}3m{4m$%P=r2Hc;fMUk<GI})v|JeVa>t`I)WyCbeJtQ=q+C7V){5pr!_)yi8g_+* zO!Sn+So^iO*X!q2)g~P1T{9D;G?^%V2|m?8$c*9S5XVXb*Z!WzB@E0z#Crb#cE!P* z1p&}Sn|2=`>zn6){`eZn%me~ve(Bt{QO^=4aRLFHVy0K)d4|uuk+dTAqx`!-jMdT) zdJ#8$2@qxzfA!_BN9X^h5-j<3<Hv8V{f0}}k#^&#;_E!Z{KWaUzCz;CIxJ0tIYk~8 z`1nYPofGHDrc=G2MzRLwKci#y;I#KjXZ6h(+1AZBY6|^Q0b1rvjHNWe)q*wu#?V1& zlX7PR7c~>^FN`Y8wYi@xS=~oV#~inB{+}zyOc*@+okX9VkF#y{^$O%1EqZ76Dp&o> zAlvEl+L9P@HNJ$6iwu)iwW^Pqf578q<g;hAjED(5m#A$cXjfU=e$)NJ%yZJV{_INZ z-V+ckWrA{x?7T3431;Kg%oZrFd?k=g0!KNxDtLCg(}T?PD;@OK-P4_-&Rnh+sGNP{ zqt;T5To=3utxW#zOt6-=)+gD8NiB|h9!xFQG>pwG%uM&0MrofdjD*>Ek#`B~Kr=8A z4~;fDrjQ&zAh#tqsmw0TS8EeHgs+j_--M&!SVL9ZwVv8|ju-I5F8JsV!1wXs;1gC+ zNOEU~$uQ%3boNlnqgx-?<&wAD0G?Bj#2LNMJcZGOR2<YD2LO5vnwpcJmZwNR3;ZKm zul1YD|1y2h<iyuaZ`bo{mn=<R(41UJPsgz7ky#d4YztIU`sd(IdLOr}>{j7C>J5oq zC~YDg{(aErYQ2Wj*9fY~QRL8HU$p+D8bdBzSYZ@l8qAC;agDB+egFQ3U{cC%d{;wp zHz^^eS&aDqF!!eMP`>})zfvfn$i9`e8cX)FO(lD>h3rMyrXkq|!-SBrObDUKPMEQ; zgBWXtY%{XY*!LOh#PIo_pU3}q<GQ}r<8j@+zPIProacEQ$NPA{U$5t@5R;3|GMk;~ zgJKb^i=yCiK+Q&z&gO?b<{ZI3Cm%m)YmPp2`G?L(oY>Gqxg>eD$>=b)^(J)?N63hd zLc{M8<GI$4wN&2yt(SlMfR0Jv(m!<j>(eV`D0av}mT>q$$o+6FA3wpbZ`v(*2hNBc z6ah`g|I513&Y?#2*tU&9YyPr(ZLG3OrU=N(xs6dp|3tnbq|nT%!9)}fwaB=clCto6 z0_XND99;WeFkkj_+&-zotIZV^#pkQ(`PH*LcW^e_WE`x3-1NmnwsKWdLxPE*JIhc; z6NKvh<t-P<=e=Ikvji(*Ki42`f)nVfh>E9te!!EG>3vZ{f8EAnKJ->A1%YehhN#xX z5Le;)#1^L~O{p`#vukVyM4$etI3xa4r=^r{eqJ~Zs|%IMCdx+J^w;Iw*y$Qu0STM~ zvMhc$quzk<ntW7mtmvEu$AeT;sX9xdnD_6-#mdbjNI`C63tM*(S7~7vOo>^|X|Wv{ z{Lad(?8$=b7)0xoU4!E^Le=Z^yd-rDw9V~Cc5wHvaI~2=F1BZWI(#9q*D2xnJ>%DL zNDkVIq?rKlzjewB4Am{k(+}D8UxpxK8o0y`=J<B`h5yVG6LRRXaGL?Qv*&^HFzD2& zUQ>`JPUeoHX$jR6_4Bh1M%9B;_a2ot`hU20fNsWRogY$HBiTb7MxLiA3EI<s7P>Rv zyxaGEvkwiFs>liDT14S$Mp2}CA)&^$t!`3VuH$i`N<0a?4a(TXQ#VPVfMbpAj<zd3 z!Ki%?frvd#3t!<2HUH3Eg$T*w;m~=Y^(t>~(^E9Q+DW6_L))btiv4>T`37P??mT)K z{oY)!wJ~bKwN}Mo*PysSYg06t03>w&FKZ|7e|<p1RA=jY3U~B|Qm~R=J@);hu%ovj zkjMWWhc@O0^$Tg13mm(t&P(2z8TA;pIceHD*gmnZQL97sfE~s<SMiSgJu&-6s=~Z0 zgtVYn%7^SYjfSTM)^VRq9s;-jRNdj0G-6MTjJheYpm|j46j#!&n3`7CUe8n%xA~0C z+g_WKG=cgq%t}q}v{|YqdDZbZPZCnW)l<;3@(hf|<yw*(Bjo+7)#&2lyJ9nl{cp_K ze+D}yf+iiQkWHL<U1K<jD{Dm_UR5eg++%2&sHDB9XCbn9zY0^)>F{O}H2e##-|vF? zHv-o?X27c|SX&>qT^3au{F1ZgvbFr*b+uyFjl2)@S=gmK6tO#+JZnJK-Y@+tq!?oG z<EGfLmS>}UZ>f5)Lik$+tDzbzIf`tT{#@I651aM&gS0w}EBF7Q(-3pH7_s}@;U*f> zO)aZAF#|Yp6D}WRy`(qhE0O1%IgGAp&pdL?c|HYTgEf4*j~tOs<epB8issa<3z8M1 z8#?UHLMq+!^o)#P{}wYOAZtRlv2KQ5pK?=fs!Tq<HEjLzv$jN!SRn`Fx?LJgK?Rsx z|6TqDR5XtN(Ai|PRa@ckE*5+_w?d!Es)oSO$3(|>jNx!OnHXW^N(W={I$Iy6^q&&O zXiz0aJlc#rkVr}EB7{mdk4V*?ud9aK#N_MszSRl%^b=A4nbhFO0Q1qJwv#Yi)X6SN z?O-(V^B?zccfPAvB(3I9rqpDIO0p^fOl*lxdqeR5FzDyy{(4!$5Vj?z2l#^C-Xa8Q z!yXr4Xoi%-_xq)e(E&mJ(K+raUe5>w1F_&3^X<(aD#Fo4O7X;U2x%*sNT3*<<`q&= z4{KA2o@M?_TgvxAJ)+mI{6jY)9}IYkV)+{|Wzen7Ot?aKRnER8ukb+8H`UFuv<Znk zcUJX3n+q`tBU1SQi$Jz0^w-RV)4@8vx1$r=KOFC-uG6*N-86687$Z}d*jY?G@9<*R zk1XrMTQ9B5oTKz7R1zcJTt8MM+cU@1CpSNT<h=pGL;6ouLn2PEY_in$XOEYbPbmFO zK6x7JeGE)kw<a@)nlc^}0VtrQb&+<L{N)6TS5f$Tl<YoSDrTaixnvbKyN8Z$Zx#5h z&Pj<>G-iZ`&n)YvhCJxCQ_K;%>vTm=izDiKFUBbsJ4rf>Q|jlNe@H$I-@M*Lk*V2X z0uG|Jxdgd1e_GGFgYQH@4-eJ?n%@?`=Y!DrSijch>L}`=?q-rLdYW-@9}y)aHnv}C zuWL-P_-Gj_GVIEA7<1;A8H0VFNbqg+3~~p|1Lqu4_n8kdwxy^{Ak|H@J*1b%?^*nf zna5YR5!3(8_!!gx+LLF2CeN6b*+~ZcigLW~k?0x&h3HkSW*=olo!i^T_>5eKgs9># z$hF={;TQUP#uD-!E;{eU4C5w>pZr5N;X95s=WXP+99Tan@lx;kYZtP+>paQXr%gW8 z`+a&598bHiPNq({B@}tV4`q_1mX~Ah4LYRkKNOGCd%^RDLAOP-8m?Q~4p^<t#<p<$ z!OVd&FPKNa-E?AHbW~r@XzR8&Y){Klw0Ac8t@wU3ena`f<-oY7gJRvG*o;lMQYri) zfPt(jS0D)-c~%yzC5NQ481(t8D||2jp}C`a3V?A*H|+^I2)2%^n~-i7>Bl@zU4}rN z*^_J;@eRgQ7q4ibRWWD*l*MhQwThwr2-aU&j<iQVS^Y!mvww1q({54`Q1aoie~;lV zxC-r=6#QH&b1HPzq6#s?(7d*T;T$9$8^<?U3?dgRqd14MH`r&Zq#k&y4A#`^GNU>g zV6PMh<Fk2{3}X*eW?0EI=5uGnL~bs77Ku^-771fJQ`yD_)~LWOz|sA8O}~?2FxRg7 z@ApnI6H3m1>?c~3k(6v+YIcu<7zJNIbc_~us)*Hp8h={kuR^yYv#5PeXr`yd$3YOx zm)D4Qsi&|em&c3j{h6{hz8p93(7V_FcAWo*0M0E3R)P}+9J$x;!jyFt`%cdZ(ZcWh z60DU-we064ss?NjiMEqIek9H|)z3S9Qm00E4yjH`m$4+UhIW*suZ@nfks!Yi2H6Hw z7UDKDEbl&^CVSA;RE=dfI*5&*>og79+yYI2-cjdNXg4XBpDhWCKO$-#CW$%T27sOX zr30FZuxjn>_6)1=Rso0ADtkzBm%D%sL{!Rzqp!nP5NtD4K?XW_LU3)eMp5K+&gixc z1hNv}?$Q(nUGx#n(fFbr4CI8u9VjWw5m*h638fFM_<c}*MMYTay1~hX10KxH(X!S% zlMueE+@XrY&@I2f{3sshIvqXagPjkvjeBuNgaVp8g*#?(%#V!)wlguN)O^Qm4OFW2 z3H{Xtgbli^!-RR5i|rxlcEl@?gkxV})bB3~Y7Y11-aj|V|4SD5Ai{vFSwA5DJq=uI zqjLX4htD_uQ%YP9H}Qxcga9*YgT29M8?hOFvT{tGy?hN`xrCnc?m6Vje~Hw5Q5qOb zdQl!6c3!C72nc%Oj~e_Xo?!W$%83|m@Zx8S;nVGme|-GiL1<*3+34{P{7o4zmy3yt zI*!EMs{kX|U`vyi`sNrH%J1fv*|4=A`!n4O;}Y+mlcAM*QG@Yp(+^Pl0`PcH@IVrV z(+Dy@iD6wm@+>?GX(_1TZ?$;%x--fFz^~p%!zCySHbOaKZCrlA4Z|~*ZkpY?8Oqsd zCjmj*t<0+qq9bt8f6H$z48jAa^qJkZOZ*ek@R^BV95I3B+qcxhfSlhv<%20t0v7xT zTn0SoD?;&c$<RM^SnjO|s+GP^q5EOL>*?vI6a9XSM<w}@)<7}f_r8~QYmxH@{4x2Y zCk8936rX_ePvbh2W4vSOR;Yj5xWW8MsGK!KrS(b-R_R$&RH<vRjRVee;ObrEOE|mU z>E<&kn?7Zxku>SZ4%dn>9v(3ce_H0dE-|B}U!%}Ch5Op$u)nrvl}>wsV4v|2;`|Ma ztiN#9Lei6h7ma>}-+2_KOK?ZK{-<dfaC*VH=R-tE%2;tqf7izAkVLf2t}!4y|1ov; z#Scz;fgnPQsU0C!{R**-hsiibF&47Rc2t*qJ#Ae61H|CxgW<B8C&N(1b-le#`%(`P zAxnkNP^C9N@H0RDT&oVhaqWI&g4o5pmGj2hZ?ai|uYg#};xG`B^<<)aY>NLe!Vk2~ zd&nz-O&ZjrR{A_Ifjt;B81W4`8{GWe&pMyocwta6iTzuZ-^p@8@KX9qt}lfX*0$l- z>te1y+MoD(=ICOr^{Hq>Q#JXZ#HZ+M(gDBqi!i2M_p|JIyJxYoIL$NE7!rcbJ!2u8 zvz8wazv%j3Lr#MDdUM{A?yp;@+me6w1O*O>Ws+P<i_?`1VJ7?v?|EZ{+)uWh0fv#f zntREg)ywzM9;RyntBK;H{-iUKIpY`T@Lw!P%cPYIc{ghLVd%2u2T3@223_;<h^Lwy zWbR0ssQL)iN4vHn>v`>rdaCG%SjJ@i@P;%-qPf1Z7P;lMUoB<;cty8w^Md2;avSX- zxI=Eo%UC7M<j0+Vs}J-U^^_0S?GWFS_tEC03@QoN9VAmb#{yi&(qG9)6&^qO5yKNG z@;cBDXqfudldEwP2Wed8rLgX$8L!J8yJGbhpr_wBACA9oyPrMK{0-Cvw=RScx)B^o z{U9BR?<xOqO(w+E)Qjuj(+{479aWxw;8^|-z(}e2977~2L;+_xyf$+kGA;M+TPnw& zSE*d=6}`#+dUqswwjElu-|)5Jj2YIBmJhlMi0jPp4=emr<_C7ya5*$>-=L_pqO}Kd z#p4sx?*~kbFZR_OzwoxYQ3e)RDe4Sm!SB6zh6-_&ZmK-xdU;KFpaScjyQYe2Z!y%a zueTa=8P@z&kr&6Sj)k5(CP)&e!6f52xOTn+>;U)ZcMVi#!J(j_^l#FXK~A{m^>I3d zi~}3cTk2Ry`2@^zU>3)ni!&MZQ?mzezVum;!qkUqHlStyT>`>KQbBG1zi+>+U-G-A z#)zimgBS|?&Jtn+r{G}kKI3t9w{jsxKJ+dohvW4<fp7pQ5|-iTL@n)@kc^cw8|<`! zwwyF6?^&m**^Ub3ej#pOT4@y=W=+dot;46DOZwfN4dNL6yg%6DFtT^7p*-6=QZBuD zeE{Ad%G7vt#<Cb~-q9+Ytw-^S#f+EKjG?bJ#xjb@cT_fjk)gHAd`P&(2;7krE6ccI zW3w8Rm2*%tx-Bj&@f<1tAbOBiy+;F$VcEW-n5o8wL+_S|<=2^ZuSAIMyU_F{>TmqZ zg(8CA&u9Q#s4Yz~hm{AUC6e58sE76Qokcea4s*!z1kfjT07)S3r);C>Elo)XUzztc zXBTN}`0Quz)4G<Q?LjV$`KyjD6p5yc#UJ&3zEWM)(7k6o;UVjxd8vvS5(yS;{AYQe zzPKEG#SRnQ$`1qMnkq;4?9cufrY^JRentmv4jOkf$!@f$uZfx*vtTAEsG7f^rTIb? zXQemDMRjlDaXipA=^&&AtM`K}4C^m>f2vc})FA(*fjH)`3f<5p50uW83rRbgk9g&O zY?sPaoFMC85leO49tq`L36)NEXrt(&CVmK-k)~g5ZoK-NFmbtSz*bW1bHJuUqIRHU z=OluQ8cmW&BVt%!@idK>C+QM7(w(MTfxIuDfF`RW@Ks=<2@TLB=k}B#=J*kmwamGq zNbK``kBLbSA(_;p4nZ@Rr!;!wZX@&?d?7j1N-esW1Yk`6OFG?FB-Us&b(Zv-OoE}z ze(xFDUze?XwkYK4Zq52Q*zynu(FoQ@aKH>r2t}hV6_<ZHm)N2Irru4d07!38x$J>@ zO`f%&!lK;S9?X=sU-459D=t}eZzjAcKk?~})oxHlE)oNigy=`+b*I_#JRCmzMEQ;s zgS>)+LMhF&Wkkt{Ud!v^>`xMZdJ_LJG%iNy^@W%U`1ioBV817Lnf|EcU>HYWeb^H7 zdaZuXszabFWrVm;_u(fvMmi^D$U0BXFh$JwxK<wSO19YCj7*3rYcF=3vByCKn9xPb zuM4WID(<3FW%=FAs54$n1w_>ilarjeoyjw|*=D*G!dVsU1z!sb>}%K>P$9)ru+X`Q z+4O7g>{u&Ge-zt=`gO0KUL=I_Lx2Vncf3-F%fQYlKmW1ep$uwSFpMDGeyO9md0NYM zB=m+mmx3eCJ7*1ls3whli#b<$?pXi|%OqLuKWeHSxQv2__{`a69>+rr8k>fGoi)6< zktYTJ&Fb`VheMLb^9#g~2#)nq_nK>ldYKGQ8fLiqU9RT%z)FAV?Q2AVztVRIphS=* z4srlm1M$(E5tlHhBoX3Z2D))W&BBZ70A>ZRxYq(YUf@1YQSv*zLG>T`?mr_lCSx<H z*VK^2B=*FenWWFDN9UTzt2AkA%=znzF?}@Bf;CQ+Q}o(s?e0MQ9EzRxU`$=Re3m+I zJ1ki{hJIBpEtM~#=FLBc;Pme+h2<X4b*vo(eO7KddB@E_(()A3pPA~7yB*{yx2&`h zB)EK#8e25$3}~Md;6a`yh;sW}B#silRa&@0+I?8fJ=}gv{osd!SjF;TxTfx4f=&qN z9oe<39ndbva0>~KD5`Z06W{g{cJm(g&V}H01cF#0W9y$O1mp%*u)x;CCa=t2)=v;S zT<6VR7wU{$Y9qpEDu9H!kZ^ip2y`;=X_2AgKxWE}=;;qKK1b-Q+0a%&s?swKNN(iy zx9e?t<>2!$!hK44%fhKZi;B0+qh}vK{kc7jcz<zaz4uh^&w7?91@#UqT?h%tkV!8V zAFa1ier2gEck9DjRJk#ET?enuKd*+l<Uox&wjGi2-3@V7+Vx6h&_AoXurG{dsHdGN zhL}OJZU6xq2(BFEbZ@rAHy@Y+bj9v}e<|=nfB*$R2{EwQd6|N_pBzBF5=2_=%yyU4 zN$gyOdUHJ%*Ik}O*&Ntw61U2vi&7culb()Ea32pPDbySzD;*q*Xx?N68`LKB%|!QK z-Xw^N{)PCIN>sCc3C*9((wglp9n}I2_J9A#vbXAHO7jizV1jKaZ1TY{7C65>j>tV_ z9{Q~l!qV@(2QBI8)r@UcL0_oxAt41+#!i(ZW9|byhtZkt*FWAxpgOQ-lkK4r<m`8w z>cQM7r7sT-ZaB3y*EFVN&A<}yzU`XP<w5oFek>3jif)vQv=S4davL*Z+*k!W<76*( zee7u8w99|bRNK2%k@9l(-S*cOY(>^OE{cnred6A5zt@esmwtd3(}l}j;e6BxKMIHb zs1kELpOHM1jCwJ19ek|YXQUXTg$8v238sp|j4<TvV~X^K<>e`x%=bmFdwduttmuTx zT@W1<syCppHNu=6r2$`3=}|!EEb9!_+=e1QjoM&QUfx(*wMYOue46*VL-#(Ri|&n; z?QimpSPU=jmU+&zcS$f!6^-K~VVdPc`(Tn}=Qh`*J+=Aikm4qnA*@{5_pgEHt_aJL z0N)0jAxo^09166)(GloXm7Q^!5~;K1x85d+$|v_tUfZ^3#A!HfJCcQBOFXn$_I^9f zeVzYhW>HBkL1!UB3Y}&iiEaT^Zl>)rg^6kP35Z5fR)3Ceg%PDC%QoJ&T1`=RA)XO+ zwPMm7qOfJb=v-?2R{k5%IEcGDXd{$|+;v*5x)s%bE&=>!>ddKMFL3(($A4D^cVRBT zB06mx;)(rc(gr*GQ=IYk@LIh;KLvk)n^E0$Sn#|Nvm=GIGS}TI%fBGM^=CueD`kO{ zJCYIMa`w`J(LL6FjlSEgt3WD<W~v|51_a9N)uict-#fy4y~E0t(bOp2u}*N)lJyLk z>g5jd8cRz~x~RKW$sv=rpAA<|xh>paOi{zu1bNi8!C_L}$;{tzsVwdts%0``b0rtK z<MrP0Dh7Lo6|MAzi?rmWp!y`0qLTO~S{T$YKydI`?+Tc?h?k@=Mk==0?DTEO$jn(g z{5k42_L%&ym=6Qa=TH$Uza0hDX{@46iR_8yemqQ~->BqH{5AZu;j`)owvS-hawo}l zHtvE2f+5Ar#x{M(%-Zq~?vBG}0Kp~9g4HMjv<VmTR|Aq}nOxI0xfL{5#Xncdb89xD z3z0+`e>p7LfuizW?91K?9Q+(19f<|eXU05w#_;Bt%s@g!*S@|$QR~SP$163r(XH^= zZ%5U{WH1D$^S*2b5q@5q-`m5ukeA9CT8JkqRyCLE4i6|(-TcK?Cf|hzYCKYFud47# z)2!J4-q!aL(U&~DT5|66EcUS7h7G5IxR<bNNbZjJcE0p1q-y=)Q%e)ZSq8ms-4+wF ze;e7yit^A>lc$Qjd@ySKiBJ0Gb0`k$wTSvnC_={<qN^sF#%<zFb1&D9$H0dpsD^%B zj%XFq!56<W7`@5xh9`c&_Aj*j(gJ;@SVO!p>d?A$Kn8GCcCX#ZYogYd^$VDZ6<66* zPOQ8sIzf1>s-GbfX|kkVKSy?0j|tFqJlMJKdNBM$<WYn~m(0xAT8$Ow{4~U|hM=yJ zN3~lWn)Z0}%O&GLBE<=*IHhOdC$^BVA3<^KnV5~*XJN!Sa8}igV$DlE|16&siNE@0 zf&L_zZ=4Dx*#|sn9`kkNSv^R#Imi%6?9WS$g5^(Fj%coE19<ohkGfELEHx$Ax!m1< zV(`6ZPL$TwBhw}>N?5Ia$h&Kr3zn{NTdkL<3Z}@O&LEX2X<2c8Y-OI<yPI47-LFBd zwSWk@4CXY9Cm0O_z8jG;JXstI^+I9GO5<C0ZGW77d-d6w??qM-x&Ue;XsZ;x9u&|S zud8dgX|@?z`&m52LPAbLFY*3$XTfjcRQ^)i)uc&?BS&pa4d<-%*w^<RNjKGIy?2cn zR~@!r3S6<iFZk8evpDy5i*i`^t)Ltd%RP5h)`H@SbJmmkukUYH8X^ql_u8&P_+)X0 zC{F6)25;(bhgb*`-*uiFOem?%#+W<(-dSu^)ck6iHUXH4oXE3XTvxeb3uIJZ(WpoX z?-C7vZIYz%7xN~!VHR0V9H%Lr?}@WUR9(YH>Bg7;T31-U7)f{cT(&{)sIONPpDQpG ztM~J|NDVd~d3^!W!gc49>(_DT0mQ{>a<duLr#!QCFuJZu(frzlyVVu8*7r7eURiee ztLmT%-G+W;=w!P)CHK0dKy#kr8rOR0leewbe`!j?%q=L<?`aCo04Lgutrlw)P#Ekx zef{N*Gtb|Tdns+;f;UBTs5qOyvizi_DuO%5gQ`rcsjHvoPeOvYfeQ@N1Wa?%yw=`f z`RSOa%(=tE0HY?WH+gR0XoJlaw9w>J0N+CaSq^W!7=i8yN~rm$>C^YA59<{mOIXjo zm7__PdmjOX2bgyqeA&;Kg{D00`}5<_TW*4Ctb7SzCZ}r`UJy!I6{4rm!}2=tLHP$! zKURMw+S$tWMY&DqB`R$EfPBrx7JYAG!-e>(l^UtxCOpffKUe8`hXmxt>0k3{KEwzK zEdS2PVXY(^Va*hIYGyC8JT+X1<a_cQ{%hVX`RC;4V?wFj$^;Z&1SzpwJxKQ8`ubkx zMdYJI`ccr8M5}e?o+LZ%Ij<}F&Z?8s=r6CIr;p!=?=-57QKw^Nfvr;6NU1}JDt;2W z^yHJ%4hv>{Fl}*uYkpwWHjAHX6_88KG#H~f&u?0F%G>k<DJ|tg-4f3U=O-nR2dbb% zY8u*OLME|DHri~c)=0}Vyo0Oxl9SQG;-{PE=5Ce=BQ@`g!Os(+((F7+h^rpv<zLFY zyPXsC*+QDD)B?86;9!bw><bD%EP%wCUIfH^+wf1?#%n%sO5segXA=7|S3v^}-@x3Z zOu#^=93gUWTUV}<;%OU2<y3ihm&1#~Qgi2C1z8C5cadYi_tC>L?~}VSjZRA#Py%tY z_bQX^9V0ie*UPB7uF+D8G4Q)^o*FKEZ-rqN>jK>+%9NG1v-|n@e9OAmJ?Co-*ze?- zd_$_zoi}#4NdiY_iBqgP+1S@6bWvXF8hnQ5GuquRI9WW4KXnpw*hzjOeab-nrr?tu z%Qt6OFZ)I$?8A>vs93hza7%Q1lYeGD)yi;WPhWjndE$Hm<8<?zgumOiidJXH+rR`7 zL!8V8;$7z-)ep@MWK7(+<_DY8d8M9U7qNqenK}gL)2t~oc?DCjAF?c~fbT2}C%Pr{ z{MhwF5zDn@#+{AO+U=G0QO>(&@+_*2ZSN_oZ>XYHLf10;h99bJWxLRH^5yu0mw9NA z&y~MVdF`pt{UtIcdeb*Qu6JZ+rE)Uz{#10FfQ50?1fioGVeK<#sBuxlX8OXkSD|#x zw=WmWOxQJ3R{T|!Go2BEAuo$2CTAQj6BK&bOMmG;==3Yy2Q+~^d;Hs1-GjK|3)hzQ zg3C>rr$x5>uHdBd+<N<_`A#ixcJM2d_|Ah7V~UqGP_D`{*Oqedf@%_vk2W=VVXR;# z2;aw}>=;?N775hg%sw@vGEh;X_MpV+!Lr8skQ-Xq5f9gv?KEU#TVZ#vJBW4i!nihv z6~5wCzV+40;W3L3;&SUXYARUR7A8yF`tm%m^dx)J%G{Cb%Dpd5S2q75*INZ(Nx%vX zvfl{We-{*5Uua+ZW#dZg-VEncdEu?9h7$<-zoV?Ufsv#}kej^tsay62_C6Lv0Avul z=?v9`M!B*N4DhcAB2+uF4-m*Z>4TkYToQ~jgb>iTlP|5EvlnZ+D;gRaT#_ssg45|6 zJ~hr<0Hy{*4sxV62Don3m{KR1wYC74w{EV~Sps89ozUg+kADlcS%u5Zfd-jqx1(`F ze50G2+Z`(DAxe!OxV>75Dxq3Rc$lHCBP-QPcPQ0Z$@f^V9RABWw39izhqK(;L8>a# zjEt^!hISrWn%@^b{`C$B^%=+lQA?p^H03%nW0d0b12C8UeW4Vk2wR@h!N?2OP5?S- z4TU>WaqyCx5F-#|lc%p)#8B}3T62As^x{VPr4jY7ujR5@Yd1eyU8k7i4ux)!Uv|ep zq$*m*`U_WcpJCXgf4$mjUHfJfxJ*-6K<sH!+kk=K8e4QLdnGxbdue!?0yHx11;vYM zxzo-ZY<-Biiu%rXm;s8RrW0ErPwheG<dl<^thW3gJGPkx61)}!NM6{WsBnspBMa>e zNe}BCIPdsg1s|X~-+o}|_NslSe103XJGE;c5Q$YPai6(G*q?@&*SBVyCNN!3V0OOP zepTlIcdC>AF599#lyhE4gffsq{z)>9@x+>+pHj~FWjSJFk7FP&-8fJT+#dwTzkmyj z<c=YT0CI&ieSLhbn#1*K1@DZS_UYQQtRU}Ihe)!)^yaCMji|MqJ0-KU?^<=1g20Cd z1o=<DBTfgvs@pd(%wA#D9uo=W#WPe)r|OIPjFiRR+N#D$_PjyS>-5ul;CLS}d+U`6 zm{y01P5*2>*4zg|-z^z#J0KSG#q|3j&T3fIEBWLL<iPsehd{%{w!<_5;U8sV_K$xE z8b4~TY~=si7(@IJRC>1PFCoGMaY<7Q7T*1{!{IuGA$5ke&et+)nyD%4#wn=*xWBY{ z><e>IAMe_zvV2L+fjH;7A6gO=Y?++~Z-<Qy-#&h8@mH6eu~CcxQ-AMRQxW=jt^wPh zA;K2*qcS3qD&UWq5u8GK{)me^(}+%gu%J4ESk8tc+f7lOAEj*`eIC{^6+ksb{|!}I z$$-}8P-pqwCLZEb4}ugA4g(Bd{MG`cKbPy~r@L#yX0W#g>eswU184SRUHi>6=CxO9 z$RFG$ztmx$#O+@{k-m4G=almo+n*h|f9Mnr0S*9Jrnb!$qQ=ak(24h-D3~b-ft2=p z`6>PCcrdB?bX@qsTPw6F04f8zrAw1t+)dlKa$Upt+8fTu1A?iU4z>M)$Yr)`-u<>z z`#C|wc1^a?>#8X&fY#(@*4Em=(}}0Q`ZrU=*oxO61=JAYDou_EQ=FV^4}nQ!k%DuC z29@<)0x$G<wV^tIJccE2iY1|4n9Y;MC$-Ong+Q0B+s{q{nB~Mjbpu5sOZ{%sRFR+U zZPkPW#iL90Gh(CC`XH!_OS<P|3Up1=QC1_QbVW}~N>5<xb)Mwt$U0-skzaS^obi>_ zR0E-{L!-vJNd0bm(o1@<xq~IxwYP^hI0NXWzc=+&k%hA75V2XzQM+A1OGO8DU%n!@ zHf~!dGE8A|F6oY14PCX8rikJKfUdyK{Q`&bgi?1O!OavLdQm^`E`PN5s8u%AnFxRt z_A&4I0+5;#9(;Cfe{N{U7k=h{=0kH8rBUn`>!bFSsmK}8QNKG9)luDsAhkQ?KX~4u z_!SgV)lggCS5yhM|Hh2Sa#+KdN%m>)Y4^_$9!TRq`T~Fg+=UPKZ>Pan5;DV1KxtIB z4>Ub$3I?t{S|(V-ucuv@B$G4!A#dq}EXMJ8t+_42`<jq+Q_Tq4cUpekCJ-vUTnBk$ z-usUC?Co<5&$?UqfH^fgTqv!}L5adu>q9c~(o0w)$%;s8h9Fn!exrA{8;uw3mg6)p zvM_dJpi8(>>L$Z~Z2DBo4x3F<>~;aJd4u~rU=-4cSKM{)_yHEtr!2|OQ!8hhkf85= z+tI@8{Ex8Y)JXK|6{`H|l<2QAnVhg$@7T!pb^EQhIp*|MK3gh~kC?CO_qLA9r(dZu zeMaheWt0ie(J>(udF5<zN7&n&W8E~z%Er-F{`J>SC;1yYA@Y+6k2>yh{s_IUM}u^S zioowxQu~Aw=Md+0L%R<)h0T(lUP8EpF%42rh4xo$T2l(gX?kRdOyV@Fq3g(tl!B)4 zzSJAg)BaoUC+wbWz4Ff3_W(swtLIi}Q0JW0-!oI=+N^m8>04087nQ~J>G#b~cZ+Ed zKy?rWN1aB`0wd%(dn2;${R;AIr!b#8z3r$HRA&hKQ9r<YDfxo^{EC(wC$NQof$NZG zk*<U?tnM8DI)8{0ze`mH^S%TxQM$o*May;f8{z`(Oc~67*#SUoY;SJEt;!OY`Yvle zG00mq9ifHU1CoE0kgr;0hGiad9;yi?p<XT-H`G5mPWSNKE698+DtJt=_#eRR|7$a` zoyJln3A7zkwGyP*1Z_=x?tFfFqx$>Kk3rB6E+t$s{gq`&r5@^GkB~SX9uPQ(I_uV? zSqzo#%t&7QT0{Su$aF3Uxf#mgaeGaZW2#BIFebpuN4k75KKE9Sz{+dtWc#N57tX7M z%N@N{KLuVbU*vr&37Ec-Hwpty|IT=J?J{+5_#i|6bq=W5j@GbU)WAmwVw<o8WxRik zPqtK_Vjs_R!mQGBAbqYihrIsX)X~EcpgpZF+CpHPBsX?z+aW`_??-rH-0}8hTk0B~ z?Y$5u`6QwI+kLTvpwx7xU7oM}^C>aXU&_}VdbE}Pm@?lzbFWV#^W4xNPZGEF<-M18 zImNG<i^qr?RpmAv-R><K(&p@d(OXd%T9h&0Jj_=s+-?T?Kwe&YUGcH!Qn_%tSR^I6 zVvln%nR?u%sZu`*zyEx$pWceBoTm7R@15<I_(Nf}o`(552biyW>6>WZ(z_d1r9W5X ze~9Ecb1}R@u%XK~H<$Z%%@Sv-!fjr;DE?@o8NkEs%}u!W(5?7F--KMhCK41w39Te? zQc@#;z3GzXmkZ7H4OnbLOW4v*Zd`YsQ)!{TyBxl878$BRkb+wjP!-y3US{QCW*-nZ zLaH?%nO@po2;v)|Y6M)b$1C<5<C+{I(eAtX0hR8Fx9;C~F)a|A(0Fbiqn(@E&=56E zZ)YfA@c4{BohzlpEf*P|8=r5@d$nO@eBsGQ)29w<_-tGjGePN-se>)^P0uT~dGa~e zgnKv#AwoCCuvf_V<4y;~VCGV)D0@iO59LVuy0e|k3LLvawH+`kdw_QFUR|vmevgcZ z7Olp=)Z4&per4Di8~2Q~YZUX{blBDAyvluf>gH`jfv*DWajb0rJ`km$7iQ?3kNf9d z@LhRu;|bjjfinQ~nz$$E+^I@PplO{mbFY9w^cxLtUt%S2{CJ+A`?o&Q<Wd9`G6+nF z`Ka|kbSlBu>pa!<{@9*0mzTuK8t%=MK~c(M@5u&?H8rHf+T--nupf(jw+4`ZKt~!@ zym(!M_x2s0yXYun%+_`5RPIzc5bNcNDa6HpzgRKTyykB=0B{DYF+N)xh&Ix}@3$xc zZ87RIfJ5WqF@gG{HIt|A-C3y*YUK<QV>$`OGj=%&uAQ<}{jMn&nwYhuxL_m`J>#P8 z#PCcl2E6bSTmwgP^F`Lj_-TlCIq?17LtQDanr8kYajkOt-oSma{ody@fMD^(aL+jx z{V&e<$3D$neBzf#pT}T!=h_0F-~a3F<9~KB&ZR6cnGk2y*+x!;tBxv;%NErcs{MrC z*GF3Dxagjv-(^_{xtV>TRd{WNZMgR5rnzY?mf~4^Gizzx9Tq|7k0Oel?HO)DM4$3E zk@3j^tOcPNktd5A1Oi77+sA^1S0A_~=|Uhyxvim9RMUKby3ylsr-jm)w(B_Qp)-S5 z%zlO(&BZ<py@a^6uCDYlK&7Ka*Pw~Qa*}@}-M^UO;eK1+UrY4;pYea_D(k@po0@`a zDtv8k)m2IyDuYW~lxG5gSIAN0p-<~WN0oX6RJb=m$Mz>*)z`%=CAM(h7dw4`HDg1m z7VLq1@&RR&#eQ7$q1BZKT`z?4m=Isg##&WjN!%6x(8WSYwmdUCcNW|?XXQ(P{=M5p zw$FrmSb(KbfPU1en%ePo34}Mo^Y^1qr#nI^MRv<5nwlh1UDl__W;&C9nlfcGeZDW; zZQ5Q~=vOXw<PjAyKgdp<)EPS!_Xv8F$|siPS6-M^US}Pw_97_EA<TzZ{`io@^#$YL zVcBCe@;qJo)qMT+!yh@;=|6*gyZlD2l4!oa*^v9-^KNN}+?T0AhbF0NfYYh5Q#{9f z|E1y}162q|Eb0tq7G@cQHR;s8eC<+`0bQ$p;CyTT^z4G=a#+S1KvIg`3-k+ac|0(~ zul7lMwAI;GG3&J(Af=^a00crivx0Ctz?T)!WkwCwCAU_S1a)S_GKjB4r9>=OKhp!h z(PV&;2x3T-f;gcj17JZbeR42KgAniAn{4sBHkkh;p?k?t+1C24*IY6W4Frr)SSTuQ zPemX4ec^6Dnn`AhQnFt9cvA4x*h9j_-IPgCzGoNR0j9HGMO^$!_KNaT3%)EpgNHPh z#}!0G?ead6C&oBI>W8J$jD}y8Io~yW%Fd~o^8|3ItgCe9?qlzMLnj%mNer95(slP2 z%%&cImW}v{4DrGppVT3RvmV~CR_Qxyxn#SO$uQwhPf!@nwd~92t>@7ls{09;U{|q; zly__{NhHvxr4)<NoVC}>*&cftpj2w&ydn533|b3W58R41_@D*#l;73si4-mmtN_N= z3L`|xf9rQ4<5MNmRWN^TEQ+Vc`5TPB^T5&=+SX?)nfek+-8I-`bh(4^jgR>H{PUG8 z9TwFF*_cp13TqysU_I+XYjq8wW+7ED?b{=j%Y8Lfni@lTWnPgEbOhfv4v$kAO4mvG za*PsF=fyhQp^1(fYgTv@<~-HQY-k^d!UVK@!N;36Zc`^&;~j}&?v+o@ZWxF9*uUf? zW=T*3oGFa+I?Zfx`Pg87HD+tYW>~>^q4JbC_+9J~L7zN{+bmd}0g*jCGEfJhnXt+~ zb{8tuF9UJR@7Pd8DTL}IRRiHyOuaa4yM8!Yh+Nv5+(f_e<Wfr)wW2*hZr;FLMkE|^ z2XO1+vd&N>>Wgp+59;eG<@7IRjhkC%i2x=6h`mrCiRwx+(nx09RC(PH&k*#v$DwO( z5J=Z^cYLM#7?a;rN2nj&w3)dV61JwX{<W-)V}%Sr+M7~QzQ2IU!H%t(tcjprFKxZ6 zmJMj)Uco;10f@Qk1mDbT=JA1~UZ_PX<aZm8J{J^?ge#RmTCe?<;ES(qjV+j#UZ03{ zdYSR$+>P1hGdhT7;C{T6UBmKaAa4!=;qjEHt85zGyf*6co|rVYFtNPP8CFD79M<H4 z;c$Fu?}}Q(`Hx2mXKjCK?xhRe<kg=qe!)35ky#F&zgcDPu(j4>GVIz6xmh?<H!SwM z_=RvszMhUoX<IIKon+j_1Q#qDcf$t>6`|J-6M69yT`HV$0x$MYE&320+Z4$Yb}&%K z&c=YLV-WZ)YAJ%$VtM=+kCjEQ4l_53BK@m;F5SEI_f3N^2!$91nCE~%8D`#d;Bb9x z`&7`Q$xgYc&swH@dvxhSIMc7n%WUFL{I)>0#M!rA0PS(hNLYUqn$V~o@2#;%<~1#F zlJ^hKe@oY+Gz#Om2c&%@r02HuH3jR{VHf@X#_2nG?@QDdV>02)WLteoLNuZrmb?7~ z*apzH>z|ez3_tS+npv8ndimC|+9hiN;OY}p%;QENFq})(W2%N?Sm`NYL06hU{1jTd zp%-xNPPevdCC!<{555R<H6bX;U9YJ^{qpAdDRhr6ME@){37inL*DDr5G>#REiL$_R zU;Bq{LA6w}M-UD<dc^I>iZya|2Y(WeDHmMIWbR3A*70^&E^?5`E1I0{5}=6n3W!k@ z&18b*>n>*0+95i#Sv?%Ck4U+aH}@?04$^#Or3zC5bZjA_qNuH^#uHE+S>-L<+K+Nx z-I*eC+7Z02$I=pC{$A7W?pmPGQZtkvXY*N8Z4|3px@Jibv9+kIsSh9TS?Cm#-Ia50 zj1e7fngDf&-hwF$3(%~{r-`Jy=;&zHbagWBQuDbqeUSy>W0%<iH$dcGCUk+~(n8d@ zwX=K7PU_%4cFRxmnN(9xY{gBgJ;4ulq@xFE;x-{OB|hH@zm)Ys&yRJ6%|4If9@jfv zeFFsD{+Ebz^7L~P)14D}(~2)$0IF)Mcu3osnrsegtOdSy)793tbTUFjJZ1Qst}q$% zE2;!{tU#518aRP^j}{qtBtIj8+dnJkKyZbyq~t5(E6Xg&xjh1qp(mH<Zh8Eo=mLXs zCVcsFQ9Aed(oFjC&x!@BH~?!7v^My0e3qF9C%RmgiMA{UamKxG{g2FR2Z8zdC8d-q z?)s+aBf+VFN~fWoZBcd0?rh3#hw4&o{;H;M1}S)Qy`jA0r)Mwc)15aE!b<UC#tmeQ z*hA?NA7>@tKQL3YzF&bqKp9lGwKms|Knns3ZLO8nqj?<kG*}^#;A+`-h!qu5HjM@K z@2QptAbmq};ouS1n%`zlp2EMf+-KoQDvjtSBn5SurcXxTW@Ao8Pp4CNnAg{XHM;M_ zA=i*pQ9;cU@F|}zkw631H)4(hkS4yQ`pma=oY3n<8;xxHan`<Xz7eb|x%8%I-`SyZ zPWEyUk|zGVyfae-%evBv6#N+a*6O~I3sZh29c%uu_AP_VTtB~k^F-s^k~OknK!L-g zZ9{^44s0Ht7<KF3T~1Q!KXlb9k^N1~<zAir3bNb&GrF~zjsMVD*`8hjwCCVUkb{g) zjy1wzs;gf^YonFk<S1QkixYBpJ3c5iF^}r{XmtM{I(2JnkAt-HMBW!K;SqMrG({8+ z^A}+B0PPt`z`_A2wIeCy7OYOw@?<SreXRKlwm-r`4kyc~a(_p*Qz^GlO^Vb}K-7fw zv-)Zkfa9Pe&kr-Xdz7(fa|^60dh@+r*0WQAT{A$Dq?@35$$jQ71v*fT@o1`{|B(QK zm3dm6rPF-1r8SBdrYXoqBm{VzN<0gS2owhYWo?PYO(>zF_iT+o2Jf_9dSuz@f1V40 z=pe~#4768(XHf96Thf%{q(*sH_li-o{$gr|uIOul{ZdU)>NdH#Q&k+FRy^w=>;9(s z#RZQw?`)g;z++w5EkhTSZbMVUs4(-nH#VxJa(5O8wL_0mpOSb}#u!Tl%s)oaMRZAX z_R$Q;A1H0nR@$js5L;^*(cq}agJzwg6h=l2=hE`QOL9!NU)$BsK{Gu-!e?m%6$*%2 zXW5FH8-`j5-hsYn^?d?wBpKyZTw_(W3e*mi?eyY@IevHKP~0@`OtRNfpLm!$q<_`r z-jiQt_vxoSF#pH19|~22%M4|llx^42d7-m*p!fs?j5@djB#wH`s~HQr)!Wp4VjJh$ zGKBGdEb%kJehBFUZ2k#1bJH}RAgSv$OZmA-GT`0UU_I5xD18a&lr(EhDfm*39x_S2 zJ1;j@E`0Es?2?Iq`W~v{zt(Mu8A5*MyTu6Qm{`>e**SKbKL<VmT&JX!zQcFhQ0l|i z!~oVOiKAA604Y+Oync$<ZX;g+6d~1qY`|h=-roNrYo2v%a%`FL!i}lsH5iu3zlYB3 z$mWBq%nNg_Hc3Xk$RfFSV&qa8P(Pp89qucwDL#QJ>feaZzc1=*7WnUi&4lYyt=%bX zc9l(dB@G??kKyU0J7tAevTxS~2$XEv710zV-vN$w66$}J>^B&HhmCPK9LyU3wPVOe zr>oC@YM`f7ZXX@~U$U=aGkcCWfq{^*fF0GoHnT+**948@R*7+$6mLp${ctP!<huws zrcC=J9edrw5(;`kVTs>xm7CJ`&HM;#C!8z77iw9|wsBTm87IBi(Y?|?dw<a1dnVKi zzkfiPF`<W%;S)>DIXCMQ#da3lvKiIvUOyS#BfNYlwQ!zZEaPQur<LW9ooz!BuZgPa z-b>MI$WlxV^Vc;a|8nt)x(~hIURx^*ybVo9Ga3TppgIlZF(*70d=A3?tw&UcmqC?p z5gt6h&E&A|aG{1AkIyV#GlSrd=WF6rws_RvcwY1FOxdh-$IIzeX}i8kD7v01eoh#D zYwQh}Q^`p85!ttG{7o5O`DRyZHdNtcJU`1K?(UIif8fwb22C2i>4WhAvWJWNe$~s{ z-;hFVBS*+qQCp|Huyw=VQni`Wy11ZU9G{>V+u#YK%Pc#IsE;M;!B!QfCi;HotZq;C z-I5ydl*>`CQ=MNmA2QMPyOj23QtbUm=eJ=Uwp;vnB-bO%30WSkAhJx%Jd4w;BX(rN z&+M8z%c|*;%wU>l$Sr<M44C<A*g}X8ZtI)8<?V!?6}qKdD&2E@C_5~4=b&3y;b#)3 zyNG>1pTSD>>EE+0GB=WVIvyb3tKNz`V~k+}_DFwCS^L@bR$2W1^#bPOOsJYs%|~4U zZ!M5^V-?$g0f)(2+c~KEg+d2dEb*YR)V&Fv%{=vf`IG*owFvL{@22ft!BH`AB_lqZ ziN%CW`TS?uuP<3pc=V`wzhDh}zrrnTzBCsNI^b>knu!fbCEkXOpDk0p?7n}#f0XN6 z)Y6kUeUZ*g)Qrm=(|w5|v@J;}FUQ@+K5`bRURhK?yOU&gR##HZx_aDFm?mWmU}yG( z$+IW>!c;3jcFnOOBtcycb|+#gXIHiEn|n){((`1fMbry8=NGmhCkF7N$xyFL;!U4^ z%OGxLVFyWH&?O|)Ww%z=;eG49OvB0G*!AN~=a@%wHEvhfUe#bvK&isj+~F2Jz-Rwn zv_Vk9wq}a$<QV;v2tGh(%Cr&fA?6_#d)6eb!zy6VkaWR$1~3dwIOv3?toS~;V%IMH zi>!T1v4WHRntG0?DA*Kuvo`ixfoz$OTl!o}_kO&Q&o2=UV<^Jh`mG*7?ihK5q%T>) zLwR4qWWK16KI>7d-nJX;2ERXL1nOD#O?8D5cdHCy#`FfMCf@#6j4Jr~X@9V9(919j z#Ky6OC)-g<FF3`%OjsE51|ZL=ZdIR^N`Ct1rz*%->YLu+JaXsbNtR;EYi2-y4r#(; z$_*40V^#A#LM}t+o-|p7O%f$z6nU{qWosPNVDnZZ&26KW52~eltbLc?%7ue%4vuc| zXBJDxJqTo10KFga?q1TMD=98!85N;G`LvI<uBVu*r<^;BkiQi~RJSI98QmQIg{75j zKxM@%H6I<mJLh(|lc%xUZvnm%%AL^k4_!2PyBOGct6I;lDQij&VGRRV3a}ZzK_{f~ z-rr$OT%c>~TT3lAOxNpCFR}XUejPXH_ewxrSnat<6!KJ-u(@CEayp1pRT_TU_51}< z{V)8}Lcp8*fH~tUs~Ui0a}{JX6xr^uS!&Mrp!l%-m|~zij?WWmQ6tvX`jKSMu1pku zz3ec^AbH^s-X;DN)n(*c^F%q##KBg)tE@y(Mjjn~4VjUHZ3_Q^x6N!c<A<gB^e&&# zEjO||>}38TGuVEV(%r_JY!JhVz8YZC(bz_PnhiYO6)>^wcnwTOTh4boa1%5Euo14q zY~16fnAOm1NXE6^%1>jX$#Eeo>wmshRM#iNxhfw1LpP(>kv&{S0EqwgHYCDBGVpx1 z6EXwQj{LeUrn~JIyTq!l{zK>Xo~&7mL*V3KGLKqja!Aavsf&fd`BOcoCj?#c&&Q)! ze$x6sbd1v;hpMf~2UkaZ|9TF%ga!PCUeV}&tsRuY$vBat;xek&=Efv;Gs}OOw`8SQ zdh2UL(#!CN{!zv<CT!EM=p(knZw39AsO<*<V4u3NavPMC9X%0WTiD3i_D8a=*$x-L zWq1R;dDd8|FLrx^(G>hr)iHAK17dOa^{Y@JXW%s`t!1;pfpH~MTGaEA7tKjWoB6@9 z&5fFSyJ}nkU^9fl>J1EAGu3fk(5jQ~Ag2gu>RFIC%lm0b+OC(*rwPDu><KlqRP$DK zz^c%PM$CZ_l%rQ|3|JpUV}Ujvzry%#Cgpgb69^n;YQh^W9L5#9>Vs9bJq$Ew|1Rdw zp`0>#9`#2dWBG9wG9qrDFeW@#68{o@*#J#CO~w_Dz9Ji{wqGNZF-;7QN3QMwEb3nh z_NewjPTDOz{JwxD5Ba1u2K`Y&v9Vfj(K`WNe~!>(`cz1bJQXTME<Zqt?bs?3Z9wl& z_vA$xb%k|IAbk_d^9Ko`eS)Z{+6D74Sm*WUr(0CO+EGaLBN}rVlN_lAts-k&$sVTn z4)B&-T8GNt77gp0zkChAnEu-U7>xA8aL!PJ1nF&>f9KaH1&X!RJ?J{~2>Siy`aat5 z^y)SWyix_pre2(-g`)oB*=(M2!$hBu5eNAhvq%}NZUB5J+1vYy&b_y9@A?ngY^`^- z-Zm!x#09OdWvPykM)wW(Oo6va`*ZeMk5I(ALqH+?9`(BToZ%py{<FsKsq@D1AA}Fy zI@97qwDR<wm6Kg%KKxexOaa+`l3V=L``3Ry&YANKk^&9D3A3w<V>|-dSkN^;PlQby zg6l_=gf1!E{rOS-weg*4>%m-_6J<)*fD!?))PEQK^#pDn<XuDFwYOXF(3GvZI?BYP zwwGtv^_X*Rc~xNmre=U5Aa6$vcoKC^R;sQl_r}`O96BrHDuPknzv*Qzuy0M^H@(^E z>FS&pDTnuWn=P{c<7qVK(!?ni=;ngibzu%ABPaZiMH!>d2c2SZMRD1R|Ipn!uvu&s zTb*FYA*Ks=^<N%(wP@Jb+2&p6%Qz{~>fZ>|G55s*{4h1p$B*gGZeB&4?ArcjHiIAL z%(|-mXg1qM`765T2c^FCmwyy}onfSA?0JB~sX0VxM|-HkQ*u^ehF6SYst;5w!q;3h zto0^i4&d269X<IfaPoO2l-u|ya0Z-~c>)>&I!BKI5|}D<@8~q|qzJR-b5eM;!t(9u z4GV4IX$v0C2~&r=^K8+fw<y9Wzj#A!N@^Z4RypAuv)2XhyH6G<B73V(z{JPY-P2eJ z;QIEq99R@9KuMuCKX@dSv3z>A9tc4PViRN{B%{=C7Om{gYUW6Ps|YSKiZXjzDfVI> zQ|?LVcaRwiy+l<r%hqin&k<^izr?pkjT%aRdaUO!=JR)~Eh<!zs#Zdc>K0V#`0bW~ zO<*ZY^EWM)33~O~7@QKqsclM7{22n#ZX4eISX;iq=5<4O+V7S(m5-tYrTpx8-{g-} zlx1Hf$A7T1C*4J|X6}mkP&59JQIWJ@3^m&be=0sRt_3N)n>A=yAuRj(zNu)o#iihk zgNuL+rv9r(s5mgz%g%M^FPi@HfH(9H(@)!P3uywV9Z1A~{@1+!eW5gEM`g1CR9XnZ zrm$^ZZIJz^bp0P^?%P-8SdJ4eB$f_CerhVnzEv!N)&j+bKY8ZNmD<|6B-z`Q1M{^Z zkRBqC=cM=R+$<|P=iOfV9`*e{bVDh7ZQ-7K{Ii$-7!$9%HGw3zxW>+kB+R?fGXP#R z(SNbQUIo-|hn?9hUS)<J7sHPqwK*o~-mlRss_bbf1NKGc`A+03udl#K6IGu7_XW0I zM4uD!=dA8hOKeAwV0{!;rEsNA9LV)yzNp~$iVYjm*H`WV`mX5p&f!kR&w*HyLuGD$ zmA=Th?yJsw%*m+z*=41G|NW1D3T38t&oS+@#RADmIoJBm)s<P^V>900->QwD7gR9D zs{=O0bu*^DKIeX15*-thb5am1XsO@4r;YyA)(b=7v&sbmt}IF|;jd_aqIWQ+R1k?R zYNCJaH(4hcn!olfyR{x-5f#!F^#;th-vmMd@zaLcTr0P`3jaUm-ol~DH;xxYQ9+Rw zkWLXvX{9D2B_b&uDk3ppG$SV<Afp5X1nF+1YcQ!zL`1q{jLwZ1qxQS+@0@$jJ@?#y z;P)3W-uHQ*=lOopnL>BG(v9H&wId$XYW#5hGU+b-(08m8^aC|7V|&{we)1mv%)j8& z6pTZ5D-hCyONmjanJ=a!fie2GZ>}!0I~uQO<U|h!a5AmJ7%r%nK}^JvKkHBM$|sTe z;d+w&Uas^onRMyzn8|H35UwQ1ANW?20h-~52@vdd1nbViuU|6jdi_Io#S$<{PZj`u z=T++;y;&=L#N1px_rPhbNd!lNbSjyry!=TpxbnXNp^5aX@Hj5gH`0DGnuAi9*Nupx z(p)+A{V9D?RmHlxSJ^+`4S5R~_*jVm^P;vG1;bIph<(1uYZ)ZlD`+5nhlx}owmM+d z&xSEkmA+vWNN>H%v}}QnI39v8@Jy;qE`xX3djfp0n>h2$-Nq8=(4W1KlB;DkUDT%C z`Z{G$cGS#oi%hbgpKTr{-Tb)@E<HYDBS=tellR)(89q+rP9vOaRr|vH0&bwUEshhh z*ISdjEoRIdb`$Iry5c(>QfEDg%ZUB%8I7F6kii!+Kl!8Gg5)NRq~hNt?t1<XKD4Sj ziMtTPGU1pbFl9GNmKDJRtR`AjvzPSz!tdYiAcD%fJ0tR2_G9ESI`ftSzuDgIUj@_p zymu``J$q;UtZ(Q$S@Kbh3UDcRz@jf{Z2%<Uhb-{QnIJ!!vX$$A>@FufdGCx{A<K)F z>=|~gkN&4vll%159+%+h4M56O;Zr>~m`4P6pY*)wn6Uq>1B-1$ND4U!fe@Z#)f}Wh zse|`t1n|h{ne&<%C49~yanc@Fr|b26ym9CzG|fl>(e_r=%PC|#`d)Jy^a?O@7_l;K zjG3kZG1FmK?0T$^^7AYA#v3EEMcGty#P2gii2zA#u@mAY*hNaBCYq$&g!kF;ph~Uh zo6mI$8e{HJB2%qyU-AZo{?^iRb<>uEVuO8EmB;{g|NDu{MgYNPUwr@vI!=`FaLaic zJz8jq_Gm-2tm0&2b9)mtAIeRDC$l$TT{&>VAy%d)&cZfQR%G55b#`+!|KqnD;c+#} zGfD22qng}?jf)B@$CGHeXB8a*aufz8!tw2;#ff=a3STN(MR!+P>^Zw1K!8912rkMT zPsnktB4SY%ZSyu7^)c)e2fMrDA9(L@91U93<3bv7X@(<^qoF&_Y|T+_kT<m*-^Xb7 zMRoar1R2hrhszzm;D?}u0MBhM*1wh2EFn2^$P#o==XaTQGw$9h#pT^Kpd3Y_>%>&| zdSr@S^=#6shlxD!H$M#e-V*QkTCl`+N)1*L6+m*RS?#1neWV$iOomCSG{d{lBqp=T zIs+RAyr~Ypx@g&!R{n#JqO16th)$P>hZi#uNDb=FEV!Lj!r?0mfREkM_;pfL4Gp0F zVFP@I@J-UqxF88QMNDI0u%3C0;entd9bfTOG8tJxDbG=jPCg<Am0^O!)1ul+qAD*` zy>f{#EjYcW3lS)4G=;M6gnAGsL_zgC8AibsJt2yCrqp~yWs(-B_6a%DCh~UUw_U%k zrZkIgjf_G)v7)7fz4W}qd{5=*r{MB@1d`xC{CX5|dot+<i#ehbp%D99#V<wtomx)u z%t88v7e?7=sVFM^tz8+k40A4)mHAL>i1W{3ZFmYclVfts<A&MT<GH2VIYxTbe#@dP zejwTlT}W|Zl8tWByyjKSlNmL}>s0$02Y5_Qg7SqAX7PgDmLzGgIl;|vw9f^7PRj*t zevTMfZ%<4TF=JxWW?<pfrmqTYWI_cQk2kt1_M{RPIFlYV2Adp+Da`n@h>&Y1StZyT zg8!^tW;0w4{;9<#FwAdJpOhR%ZDvlY;kJgXaSm|+e%9Hl(q3detsPi0Z<Vn4?5($E zbOP-7!(@eljdjgN>P*S*l|0>Y%jjL#h6n2nrmU*&&GeCwQuFI3_^4Qf^3qVu$Q-dm zKmON3@YP4ydG^i&aRGrhsui%SMU5RJ2(=0)W{7>BvjrlJ&0Cix?JJ^XJX6Bn!9;fR z$TS8TrAjRG!@?Nnpc1_bzR88!e)L*3Jf`B^6LfzHQ5Wy*wnS7;o)Ga)4$574R45Nz zE;xTsYKj$@R+)gN^PYsL5DuvYvBSpLmy;qRhQ=JE#xVn%n~)`IhvnURXjHF?$k@>( z-<A_iPSNIWt=&h-SK@)KC_N^c65P5e(Wux8n$x`?HZCF7uzIe(mR>4HtmZX142_TC zm_(wMwZ<p+zF#w{7$T_@_2y70nKZqNRzc~|PY&EJ*1PcXF(MYcDS|pIjn6lJG_Y{; zb#*ir!WdiidIp29C|P4_I4`Vl--xntmwTBG8D}I#-&gRd?k)cJucg!MYry#}+%Zim zf@76H#(!8fwst((_)uk73Zj*~Ga6?0I+pW?_m;W`3>SL=1$?L5JxJmW<i*>j5Qd)R zZ5TT-X%-!DnO#vjJ2NW^cD)-b>M}w%McF~DF$dP`vat#eUK8-L^5%l29DQ@_<j*2@ z$WMMp5Ja6elas({K&>~G)AhlqxC`Cu#7$7P6l`dsgB+ugSE*a%9H19n&EGyDqqA0< zx@iiTVHwb7c&f-yNBgV&KZ2~n4{SfNHTQzKKN+blQ497M*OLaC{3p(IE7;TBZkVpy zXc^?>R=&qmpeGDjx=1W)({U&mp~DY!10hld)$BsrO;+2rj=Q-PceFZ^Hj*^@uL98% zs33#lAT^vrw2!qO<}xe3wZJ(!xY|`=v#I~u3fWGSNRQn@UEz4A477VeS6q+QsgtQb z^G=RIlJ3E?kDmIFZK7$DBbybQU_{BLiT}B53c`1Iy?RW);D{*%UL~7SIU!}P17Wn# zW{u7hmb=4$-DAT!H3E}G)q_Dr6gbTQ^A(by^Df43(vcOoG{zI_eJZD+!hs35(QDwF ze(%K!?%&#R%fD{6zV}&6WqcjbBYeIH1Qv%pU@sy9+|%sVVwjR5o*d|~a#%)kYZgzb zmdp%5z)tVa>)vhY-9MeIH?WfE15tw&2CLJ{h|dp1Z0VgC8wime=Vh<bz`dm3pcMD} zs73a~&OeJZN2nI=gK;;CRM>&UaWxi5SCZXTakaI^XN@CBeB&9Cq9%)5Rr#@UKPO4& z_whAP@(buS*IAzmeTgfo{i7^xc4EVT+g+=<tnkls@?$HeIJ0UhJ-|Iwc`I%C#lVJ< zrX8QeK5qe{Awq!pgV6|~<FxN4$*&<UK*qfg{}ugmT(j3b2!hX!@yc}$;Es~15LrDa zX^nU7<=sYqUHsL7)u?52OSF5-S;+idfOodSRlgOKVpV<?m#Gk$<7MyNp4$?gml*si zl6C{!z1&9ZTVj7VyyGnf>I-;PvsWb{f9mxWJ-;A-Tt&@{UIxWC&I`ggr<_P!e`U4{ z5zP83r*6e+t>m182jStfML;+nN1~>bYYNjO&r)nWjk@8ax2}XuJ#)rF7P!<RiiWQ> z`kj7HURPN|hZI`7UPo8>&&;oJl^r>}s3Y=8?yY8Z|Fk|`9n=gg8llihHoEJ>9xVo; z9_*O=#y3*~Y3w|R>+wJ<4|>@G?=|Ruf3MqRL`e*c-Z6Ta+7#twsnS?AU-i4zlA}=7 z)bVPEAp9VQdm~$J7-23CSK+G4I_-$y1!~HBLU|K-1=JG%(1?7qWe$Q&+?}2wis+26 z66O6E_9#`p{X<q1fCf_YXcDNP8a>+bf(MS_+RFXgGJjTAV0~XRHcCsE;g8fPhmE|L zAKmR&*0tN{WWeo3c}^<GMHEe0srUi4;EAn6=TF`@3su9G1txtLful_&<Dlp$z<yvB zVH^C8Ued7h6eThM!|)PM{vmq`0YGRRKruFtdhb##C&Vf_VP^L^%{R_elJn<-Yv0x- z2fkQxr~L!WMSEXNAK)c=<W(Nv`s+s}RC>xShd5VL`mH{d#I9;Ht%+eJ;s_Kw%{Es? z_KR&#q0O1sU>DJSJ}_!;Zl-x?Dz-0&PM{&m2y9zBy*Ux}08I7py}&<Y{_yzqq5vNz zc6IjWb$5*Tt}@mBq^K6TZwh#pjw_}hvRRC}W8!(%i32_^Np-i^$-X~YYs9L<WwpkH zg?^B|zM_|pu<T_U>a&Ef5wmG;I0o3172F$p`dDIZ#vrcpUW(>dr1;Aapos5M5BsOY zK`ar6j@(K05t_W|k@_SU6y$#)GDc#D`s&>zvZ(*v6Et6|Yo<rQAHDCt&owPOGHk=B z+}yh#<tJ|vLO)Weq>V{UUu%feoK`NcXO{F~<v1TRRLAQqKNU}0cIE2nCb6e~==4eR zK165R*?z@>RBeuOg~(_gI6t=2wsTz3-}n($_>RuGv#i)`YsR~Yt*DU2*D$W;+E3QI z4j)uY8>|_1{#M0xMi);z;TT)cPFK4N&pzjx#4-K2u<5`n$K^!5!@X*d52)B`R~b@t zjn^U#K7NhnkH4}#b_)yoKVK^#dq}uV>{GI<g4Uypf3a`RI__W^8eA$p$_4}anAR2< z5uoMN2~j13CDvV3qXU)2ppy@&eDA8C>sk2E^$t&RR1W)|-gF)@xM=ndY_*}8e8Bc1 z<`O&%0A=sbdjgn-2=iOE;DET%g~dPND~D!R8e!8{o>Zg$D`yjc0plt@0l^rfeO&io zG{o`&)e-MO4P6Bxiz%(a?++HVjV9g81Awk$l0;wbmefL!dR_LoSdo(*vygnQTH=Xv zMJG{`7S7Tw$3QGFs2$_Y_;b^hODJ8?*s*JtcSDcAD1cMV&x5I`p_xUzwu>PxacW68 zG)Wiwd$9r8LtGKA+wv452{d4jWnUf=GI0*+j!gzzqBRPYyJAg?;{4;0?AhZxB(6!B zMS3UwEeo+Zzf`I9ceU9xG}MlOrrE&82_I#M*B?`o%!LXQ7GHKu+|Lp~WISBH2UotN zRCW*at+pl6LE^ZNj6{*RD<C4g2Dh(GOa_`>d+8R4CAwp&b2GBU?5WapYj$?I(8dq8 zCC^XVME->E1li%zLK}TXjw`;UB83DbXVup3P!tE60=^Jx*(F+QVC=sFIy)Y_5F*y* z1wCyvtGaLI6JdBT{gC$yd2H-4r^qm%bQY@Irw1S<D9os%F;>R|0u~+C2v8JeCdcz3 z09z|93P!&X5YmuC=OV^G#uLBE!>kq5;B%Ye4Ea<9gi>K9))Z&m($zr|{N7rd%q(0X z++)Az`Ly*^(G&@FQ?^m&x{kj?@Y;GEa-bvgF1j-`9&89CJ}r0L@5;E=hC;f(u8WQM zRrda0X0EJ89KeDya1_-5fcGKiGQgUj5RY>!S{A5tDybV?;D~82g@=lVY?3Qi%nYZh z(|nXl{H*B#h@yq^5w?8?LC^5=y}@?Ra8aLJWjN)v!{(<~K4^`~l<WDZL;_)^-PHI3 z65KwGL<Ve{^cJ@D<IOQx++bzfTGbm^!S{3?TcMaw)AshDho{eziaWyK_<09HERH#) z%xYR0mFJFo99P)fH1{##sn(#~R!+l7IDcJY!<5hCYLuL&*mr&Z<9VCrr6HD$Z0QkX zL(t=ZX5X%+&MPJwXbp<Isxx3Q1Ndlv<@O9vCym7w^w3n5Zpoc_d;KC8RROy$sB*8% z_QASo|HqF^_@6)0T)`v)ucJpSy3IfwcrgZvPj$Q5+Az!5ElB>Jj(ofge#R>AVojWn z_ZXGg!gTTn=>x4$n__SA)V<5gt2&xY2phW;PEtxAtVb70J_$fWKlDf)t`{=IaZC*d zpzZ%V$8L#L6l-9tp2(K`n-GF9E&F%bst29qS_IkR`(n16RHSQ%UDmVTMGox1Q9Maf zuak0iGX4-FFt#xYw&6ZHyOzt>t5&~I)(AXsEH|Uziax6G!C5zd+VxJRjoJ4;KVNkb zC3wiZNxRGi!d7$3*$6fExf>?|#TAdjP!rMub#yPsxw;V_NTVubob0ba1i&{tS;~J| zgkbfkG_%a>h(s9zQC5LL{<d?V2g<sEZdt+LvMI}j%|o<@lY5v}QCwa1zuR&j@Vl8- z02y;N0#Z&q)WspgWCLAUX)@2^`sThzQ@MT-?D`Bth%o+tKe)7|)EsPuwVfqfHS$fF zQ|ehI&bl&nr>-H-I4w3F?Y=bG{9kF*O%77S`^87aM@6b|Ia%2EexE8j9z^B#3P<|t z-?$6&t?iu01A&pDHgtggXcnl}Hc9)j>xH)X&=J*V5&R`pa?!eXvUctQ|GWO7Bf;wn z1+QK%)6N}Z$(}nB{F-e1KWFDkyX<1$on_w2fD32Wm!QixS!RMx58RfL=JA)4hJdXw z-txi*N88gO*wZ7=7GrC@32+y`3Cyief3_&&#{x1YN0j`Qknj@)*T}?jgz1F*->nC( zN|pkjd%Zr;Iv>LU?|Id7Ad-^EcW5#yI&pSsBg7LLPp*_C3?$PozFG%Ch$Pq=BZeM8 zjX)Qk^{5Vf(hxdBfUP(^cSwoQd|iyUMG`IQ{8rpk`xK?2=m}nQSuhvl4g7>iPrri* zY<7A3m~|hXotJdC7&@ahydbv_5&1mRj{on{*cc$9g28=Yw=QJxAvMb|`YjK2xyIW! zIa@v;raww0wd|<TzD!9e4jD$$O6;ZHKy=jg|43RJ`^XJXwn<oW<r-DPRi(t|coEtS zI?dLx>kNw8*`UR$Es<^*Mv~aPtgC05))gT5Aww+dXhKr?Fh@>}(NzGmErGJAL5o0c zf~B{7ZP=S?<3~)g!P<9q*sclGab5;Y)?6rz1?d6K6TQ2ezNzwG4HLi~YXZMC{Orne zAOTw&rFoHxP(vXDyXZT@`M0l==Uy$!hp%+r+h_}^&70A!v{7}iFS1oF*B0xJOrUFe z-l_LgN+i7PvVg=nJ9ih`()pG4)QLKe|G3X5`_?$1CCUndw)bR|%*4vwf0;!6?Zul+ z?No}-&}stwP!GN!hJTq>y<x+Jll$i2SK;g=gR(^RdI-FBP)e{^Q~5vEm@$${b|_kk zh_<f9bEOws&7cF>7Gz8nsS9N26IaXrte|KV)@64ajQQ@4_+@H@Ip|jsS3;AnsDuj^ z16yM6?nU5|UU&c$*RfaVR^z&sGA}09tgxS$c~cU#bl0!UbQ$)6B<wV4!`wLT066OI zsNc<|jzxoh1ULYxO94R4PTS%Ie+d1AY#wd4i`ctXdI$EVvPU(1b(1PeTg;yqRP%@? zcO6vuH2LM0D2G5Dm4jYZ#7VmfsP`7&xG)}oty=a$9vH|(K2R~g8S<3^UlTO!(Ahe& zTRiSEf;t_Qnic4N71u!y1az0P=D{&fUqtg&+_(~{q52b~udb_p$25z$2caPv^)+Qb z!iyJOuQb@)F9F(rIx^F*eJFlBL~&UCo_0nDvofhjjml$&tyav?i3}@II2GTE%q!by z?uR*4+Vq!J_Q$olSA5WXQ`hD!(s!Y`4CEqNl*Anma$`t|1+ww+_&zaIK3YmK*X?0< zIs1OX`AhE_%Js`N0R2rF4x*Sq0I^Z>FVgy$ng1cP2MaCC>c?*frIFv|ddn3X3?6eV zeG@6-^Wc_%^KY|=yR7#GF12N4@0dQuGxmHZHg~agM)|ml6|{#teU1I}lQ*1x;}-mI zUXu_`^vNF}um_gy@yDzVrc}S>ewkC`3bpLxVjzC2**I&CI(~W*z?-4wi2oAwJlkB9 z*7>LnIO*D#J0Lv@ZppL}4Md5?ER$20su4^rTT*3jw&n>Ke(r|`5}~g{)kx<M(&JY_ zV#~BKk{23n4HFGnTnDOlkb8X%EH;Lk^hx@hH$~+$IWDgUt};=nGFl1jvau#U7r}m} zxk+}$0qj)&4XFTJ1RcUd95Ta|^qxjWFI5aNAlj6hPDKy6=-21md->fx&P*T|;t+P& zFbAIH@)AapHg15#knZWw%O&C<X3WX$FW44LX89#gzkLeGu{efAX2jQ4LJgJGdQBKN zn@?C60qKF2lH_UCYT3`7mg;Im0t!T@Wb3sovP*?2iNuUMj816=21Czz;7_j{pntdW z&@X)dhYTZ6Y{z^Z1T4N6yl?#T(Wx!L;`;BS$yP$wI3}Ano14y3b6kTRcv2_U?q%HP zWW9TpcEx${9kio5tvdkgbb9Vso7vS|{STSwE*c9zq@{uyJsXBOIElM>pBs4iVbF+d z?0}I#l5*3s4)<Z7*I9AvQq>y-xf7<$`+SJGFYwK(@|V~B3=i}`zkRs<2B<U6*x<_{ z(l**97b=LhC_U0>l41p)Xl=5J8-|^tb<o`w*NSlchwPbGukFb(0LTm)Kw?$yrJ2Vz zcMZNd)_Nma_-nyg0}V6?cPf~g0}LXXOB8P#`!?JJXHtTx5*K-#t=TppI<gnb)31)Y zfwifyit4RlmH#MHVNy3*GVT*|+Bs-vN4t>mf>|K@7g@jTT0t*2_tYu2TZIkK?`Pk5 z(|&lkJq#oe|H1b8Hcy<PQp6K#oa#hPC!{!bMCJKK{7jf;hHZ39pq^+eB7S*$H(-Pv zJ?i4ZsAoQ=fJ(Ya_0S0Amv;%4JF&pYMPU=TW}ts`xkUWgepfY)IiFAN^yJ%ZkF*Vi z3KwAFzr2Zetjy3!tJCg0n@L}J2oSn1zb0YoQ05$94#;34wA%rutMNwgy9tR8osDnH z9-lwU#Ivq9dCh#Q1j>FDoxF-`aDnCuK{2bp#qA-Y6&!EsX`lP%;l0qFn|{nq+&2-b z_KHvYul;EM^o{$$><XbKAj%_x>hiJxWTCwlKeM1+;-ghyxQEUqdzWm(DUr}A3@r_A z|G`CD8>Q+y*fCMY!|*a^@#dO1P^qQYy#T^@eyedh)9c;8J-fMC`dh3@mWqOw@kPki zBbq4y0ENR3xf2MW84~l~qcSNM$niE6c(8=xr<4Dshrz|mI^0Rb(LTlF#u1=Hb=JCh z;e`{2W7va^3W+X-gh*LfoY6dy&axwaQ@kyckmwS+DurGlbOqhG5ScEm5hb=RTdVbO ziQ^joBx3>-7_1tr2s}+clX%#sAlF1Z{?Kx6X9JY@AQp1QpUnqAfi-}<*f~23AKu&P zvvTIwHE8=M^=-4n?W)uijk(8kzBO7z^P26>dky2qwDgXC0gS=l?^UJzRh;0x<NuiF z9rL_(pMP2}h-;g`c1DE!u;FG~K=7LHvAv(ZUM|_a|Cl4EwAuv3800xhJ0lCD*q9_d zAsvXYe)vjDfCa!3YpihzpTv}2VP>fv^k~GYu?rPEJ-igR3j@L^tI9=wlE|R8FKsD0 zn@i19<&dR|Hp;udhoe5X&Hen^{|}kpag7{eQi<9J2htl+o0^Aqy`i5{1>X%UY!?qg zFmZ4!cjm{yQaj(vFS((sR9b7IlfOYCNg^$;G#wkhwO(!cmBecoru?WzyqSo^vIj!* zqLvmvnF#2Y=9?}7{GF9^(Fuy1Va{d>9gKsR2Ij6=zRECJVAT|DjS9D1;2_3eX&In3 z>Z5y|+}k$X-<_tb_x9u!{NFx!SRxr;(|lB8R}Dkk2sPoNqVA8o<z}pg3+P)uX)kO^ z`7;)$Stf|cyU@gM;bRFQw7APcioG6>M^bikr{gn0vOvLH^_FP{ZA^pQu#%?J-OOJ0 zAfsMO$k(XtnGPEGK?2hTbBF-(Ft4lHvS=a8K2O*G8bjRhDJkHAfZwT^vC6%%pnI61 z7)FWccO#;e_PC4Z(LQX~><H0PWPH^@*IX4`@AvwtaDM8;v>r#>>KaB+q^+Vja+T>? zTtWcpwCN{sHfZuf5>MVoXuIFDtJW*|t%YjAJk=nl?uoA)eVqo(A`BL1BNcY@-Z#vR z&P0u(tPBS-GSGIMTJePyUN<!hLX(Dbuz>f``Ag0!QjROSQqh2J5opQv%B-RC&vLBe zmdD@KM^`63n;Cdu&_X|(Ik5^YZp70rQ+$#ILg`qDCL{YV8d8>Ab@aaozu0mQ`flwB zQi$wX=I({uw(64T9ilQ<&(qrG$VkoN;al{2tpw*J*#uY2IRa$v*`x^0t54(i?&q1; ziI?5KfU*V7dBDj@kC4OwZM#9-h^Em>mt8TjnNjafi?AmxG2(-Z6LsG#a3Rh3m~JU3 zZ{=R2Sq7$NPlgyd-gsd3R)YgpY2O#<3X}x19)GL4G0?*@6A~rZ?w!&7X(#`DFJ#c& zvxMTBowCU1|NkeJg8Vo3vA@E42m-7m*XOcY4nB#9A1!lmbpM~no7U*=MP_1JU%*6- z91;_(*5m8mb+rrPd-IT^A!15W{U5S-riG^DczHC-0!Ic~3pWuX*u1Q)YQEHHGLwkv zc=!3t6cEebq(#sAN)KYVX{^*2C`+y&K?)sun0+`F9~DJf5EHCzk925kug?r39P;+? zo|ytSwEx5aXJdq?TAql;oueg6wtY>L*yH4=KCRV%&{{vKe_+zjLEXx2WTtzrOO)nr zA63#=|7%|I4;e>w1p&tPjd-QnC-AXL_8w_%i^~57+oN}%+Y-hm3x{p^kaS1;5uGA< znmDXtV7rdBnn9Z3cchk1pOjA6FONUQIA?1=LMSd`@Jp%<GkDO?tksCAv8W^S!_O6W z6?>-55VDc?e}iaqo#da%_Qic<KA<1<%%wPH>M%b3*7SXNzj|0r8Nu+pJb<D6CFuFu z1!JWnmjo_nTGVwJeg()$KI-BAGSQX%HT{wBLvZ#t5*>G>#adbkfaRuxYn&(bXEbk% zobM(*x*oj}akWDOzCsd$!ntn}71piV8!aoqiZLchQtk1h9&D)wmzZ|<ldFhz5*wt; z_J|hGLb~$rGbo12qxSLqSZ07}f$5A@9VsimY-w(5ZI5~V`KNJtEaN=v`H2OPAS1Cj z2L&78CSyhbw;DB<`N-L$8}H&-KR@_FOL(5}r(ScH5jWL?*ft8k9IDlA|A$Pq0(sNN zKge#`mY&$nPW4TUZ;u_!PVU}rgW;2^f3E5F?njM&e#;lUTM7ivccL-I3m>^Gh!g>% z6C7LTsQmfV#zO@nPKt@h?hx|$z4bm7kx`j?sq0b;Hq}pN9zIeENdcTn^p?c>?xui2 zxW8{2wa`b{_oTW97f-{9ld9^_cR3BTkxI(23MaPWZ{;!V)Eay9gIVPb4laA-SFJof zhC0C%=tYhrTUH{-2)7?`WJ_o5+?FXgaR>Z_ObqQH*ctwJWY=3+*@wUF)D_E^V=foB zSnYiLp7>4A)wU;~DT{q4a6sF2yn`xFA7%mI1Gj>FaH!~lS;tOkmH?XOlBcPY%p<c( z;hsXQh9B^Kf)#j)=frQ7j-70{7xHOK&L+*x&BcryCU`ZeU;b|E@2>}D0ksC2lVT0j zY$IF$km<=2Ac40Hd%v@$Yj|?-Y#EozIv9;A$>S+{nwAM7x(=EtsnAcsKYP7-!uP=B zU2TgWD}&5I;YzIFH*}3nf$g>L@=WAuKHXUg`t1kE*JS_)i!m{-I0$g7viejgMpx~- z?tRe#)A`%IbEJ99zpB`Jc54-hDZT)-@lW;vpkRp&hW|B9q$*w9K7_XSvakh@N2ZrM zKV3$Nr1a47Qw|b$fhtSWIARXU7qG;I2yC+~2-LT-F?Vpb_mrw~;W=srd)PyF2epIG z)q_CrMc*8lUzt_&O$fw6$WJ9l3P>cQn_4s@GW^~mEWYb(&t5*Wgq$urWUWpUDXz8) z0}4Ix^8Ec?=4NKX_r5pfngU64)BYhwa#m~h6#Erie(}Yviwx5j3Pf$kvoQs^G}nq2 zNS&ax%+Tf7eSr|B?K>tc2@<H3r3AVyTZhOE^UV_$m1o;+k9{=;8>8Gk!fgyePRQ%r zr%}WhKoB$fFSHYIp`#a_Ll?vjS=zmCLbusG=;QC>L-|ZA*5#u+`h4+MXLx=KDAp;M zJ4#g6TD<@G=8>xgwQd#v`2i}OhGmgP4`a1kvde^91A7RZHTG3TRT`TAGJ`D&J1tzn zKMm3(CIWjcbF_mOca(RP0$6DOegaV0XwLWc4$S8nEWO4mza@tO+N}K-;Z;1f?XG#N z-`RrtxfaRHI>!x_oPXoTMfqfG5GRJ((|$t9yx7c|{gD<6i^EF%Lq9J-f9|Bh4lU5a zzf2C4h{Q(7!~n2Jv!kiALO$=W>KivKxg&fU0DEH^77}&Agq5J%0Jy<Y_OIf6_Nm>| zW?EGc#;d*GPa}7N$ttUi2%m9{d*6J(#f~K2Rz$X3yimq4*?WHE&`5{K(r$La8yvF7 zBx4T3l}DW<5Y2O%%<awXE@>Udv_xVcmgHYNY5??9is*k$f}2U&ccj1hLaXz{`|cSQ z<WY>IV-sT9DB_RUhbW<R)?l`#de-{uuGx>4Oz%2zv~XP6wZSv^d+<3Z8sE-w4)$6A zjU{X2e9HpGJ|p3eJ_H(m>;3hcDGd@7=B((i^cV{~)PBHu5*g=y&2aX+kZ~D>UCs5o zbdMfwS}nu{FXd1`XZ3JV5x{WeYNRhgD6KN4h-MJ{%%XBxzipGO?v7+efbEx*LC?k; zb+pA@*$tTYS91ON=dbljg#}!+oH1H~E@T$NkQ>~~5*Orpq{k+mbi|}>)FPvj&a#fK z+}S|S$h0b$(OUESfUsmgcc|>{9n<6sZ9FB8HUW4J%v&b%ENs_N+1>*cG2ROk)%O-+ zd(Nv`61wxg5#U4!2iIFL<FCaz%g25p<syDdW6d+!->Qi*`gIvUz-`Gkv$HQAZj!-; zK7ZfQN|4=<`A?j^>HuBFZ~-eMQkgU#$W&xm_O=!3+&1xbO6PhskTUdLd@;S6Zx-7O zpVZG@)F)b2qEfe#Uh??)^J<(|n*OSBz@>d^*k^_Y3|S1XN=;jfuL!*P5*|jmqsmmT z4jqaPk%e*%7*EL1vi7CB>}8WvO{b5jbF$|##ZjR4Kc0zY&2_RhHP>|>d`0n$AU^NM zUlHzX93|>tfqGG_ldE85Q$Xy`_JWpZ?2{GGyq{>>fMa+`<(wwC(AG-#ZtA1g{%q10 zuK^3k5ZgX{uk${b0K%0vq*on_sGIF60sf8Fc*>uTKjIG)AjQ{#{<xb&uWp4geJFwI zG|0=N%(A1iMDeuy7=dqG@*+Yg)^CNR90fB)V@2lgzrd|d6f9q@D4xF4{y8yI#;y7z zt@W=)EQ>9-lDf=88$d}-?E`p}qL~2<sOTMIJ%`|&h9(e17K&S6c2N-<tM(4o(HN7V zrL#l{f~i)72e~{tw8{B8Zo!vT?ggohhH$GS%C)x2oKFixuRat1`O5PVSL0d~mZHm~ z^>C(pxEi!xLXZGu&kO_mniK7{&Z=PQ!Ikfuo2!?p2F|B02|4bZ55bc`vdh%>duNOT zQo~`?$6wN^L^WgMbHjhCpfkp5IEnRmmY$4P6L}a#B<(=;w&`15u5TRX=jI+=0yN|6 zwM5$9=Vuy?_*h%#Y|dueQ;IHkz`aA-%z83VN}g1RJ*o*Ny39yJHKvGGcIt<~J$KYi z=~TL&!{rZfWYohqH)>e$_xrvglxr4=;2)jzV?o-bGrtcOs9sch=<ufneXjIsO@OQ# z%Wx;8IrO*S9l{!wS+tUD?=`A+T0*B(dRlhwu62x?J-n_Zta;6-JiFf4MJ8suQGXC} zE$Kr5XSpskVjT_oc(z)F$mVT|-@?A0OH**jSxtIOmLfBGnXAIJK_Ivjos_<^Z89%E zYB;=Ask#4%3_#m#uLl|7U~z77B~i!Tskp1^h}s52I>iq^-nYZof`XT;M7m~V6q*o) z(`fg^hEVyt0}j+5M1D{w0N~Ty)=WZA1?$BFOw5?rgH$^zXUOI16|JWMZrtfLszk*% zOIiGuO`}2bCDxk@JYn7Tonf1>kb>V)Djpl!kAO_d!N7Y=-9ZNU_?RUv7oVz^K)ap6 z$@J8$W%Z{0f__`VIR^X(i3x!IaF(3y#}$|x;$^mJzwv(UrM%vKs#4qm1_qVbqkRrX z(2Rw}5S1pss)wt4`@QCrfP#1w0EGTRc;ExOJMZG<3NVXzd5yJ}lOBrw9uRI>=P$X@ z8Yhhfb!CaK@3PqgS6VE|Vs?XM8RFbprFS#rFNtbwS1j3VEFv=hltIMuC!bM{6&pds zKff*P@$QQDn?$w3Pd_Ritk7xdJ3F8Dpt2u_qdliLxM_kEmC?~V{nJ4dNf`zd*Y>$d z<@rjyMMSqlGbC|LLe~229tCq-i`TvOAcQ9K6Z+qh2a$J=YDyf-6_(9(^PTCzSNV%O z5Ha5O&Wrg9Rf3z=5c0;Cx%(?Xat1<dN!iHgZ&iJ}QA)<$Pn;wS$!8MEzT5-0xKN;o zzK|~?I#{%51VU?!KkfM@eC20i+A;>>!MIU!oj3mGjvq4#qIV6t6opfTDz)aww&4fu z`>{FK_xC!7gY8|t++nMgGjfEBU*i?98R;K?!8gHo4*K$AUYn@byPH@qdO31sk8g$0 z;8R1fA~z7Yi6ZJFs-E3nb=(>zWbh5}po$2P|F#}3D91+1I5}Y<MEweT^el2)qPc%1 z;B4|UddZf}`Ro;76o9)lQeH6LCV4_FMmDq8?s}jXSlvM_mZ0Y+5+4UKz9X_A;!_5h z5p{wj9k2YUq=VxT3dAu90esvEoq}dW>E6+eP7d7a{wF0J|E9g=nf{j{OHa%q?6N*7 z`f@e?aYAzWOs%vf_kw7AV#HKNAcA{qa}A5{d9M1!h1XJ41!kv|T5PqsR_B%cuAi~i zs8{DZvVZg0d7KF&593tfaAq!^?86D9x&Is<fQW^*JhON4NRfRBNdQrMb8@XfpUzOa zwM<{L@CX%Hzf56Tgz91CLlLH>#W{uBB7{wvDNIYmvJ^K#=eB9SiA3yij52wT{7iKT z%Qt(+d~G9Etou4{+ZMF22pHb(AdHkxy1|bds2FauWL)(2N>IF}qw(0D+_VI8UO_jZ z4pzer?Hvk)Npyt=|ML^wPV<CB!BgP=8qXk|5ODHKB$=47%t_lFa0gH`eEQO6rrSAf z;HUWF=g+IOhMX0@-UEfpiw)DCLYTHlx){FM-x=!uxc2zrl{3?lphv_|J1i7p7ys+< z#kk8|P5+Vwl%bjSX5yxG5!1RYeaHhxmFttc4U2c8fK)0qDXs76eh-6-w7AB5EHB;= zMZlioRh44At=tC_%6CK(dIiCn&n^ps7=6UX0;==w6^mzyE$-BP25?sLOma9u?7m^$ zgbY#QsJ*nha?N^pkkQSQD|fu@zX8J|4kop{iN~<=p)2;us&EnipBPC+i0WxswGIGI zFv`H9a#)m}wDmRR`KaWTm{B=aVrT|ytEI;h_9wwOw-FLImG#0_Ds}NtIS`TcsUFgC z_2=}hVB!$gdY&n~h-j%>mu!%-TeT<9(H@9)dSj?2cjNI9nQ_KYl+5-e-`R)=yHH_E zm{!U~#Hr2$R^U=swuBVH{AT0IDcHz}&*Oxfvvk;sOFer-wZhL0+qTyGxFhb3ytOgG z_AwtkYbo?PTi=sQUEKr}eWP-luE(p;W_Dg@)pCFwEs##`oWhfNe(OM)8*AE~K<)H> zQ{nx0zQ#rawn{lhS1jquD<CIu5>s7rnSQeqh$+pxHk&>1j?Trk+bU%jFaR_J8}^uw zE_aSVco6kp>;*%6DuO91Qq~tak6LA6Q7pdwH(R3Js_e6wSf!rT=XsoxpBme89J2>g zbulYs{pB0d8$a4ke`c4JIEO-$<EjI@xx{Uw7wNr&!D_=bRSn8)RG()ec2sZg3%#N* zzPUMxt8vJ$Jr2GxYBJtXvE64*lWqTiG1va>c0+QGbNyvp(LZE=<pxL>5=0Z`l%)Yh z5YzTdWh%i?wY2JcJa>J~UhMN9g#ETsB2^C%xv>nn<1F7~@iNPyOo`i}VKlSl#zRcj zAsh8zi}z9W7NWi{`ynxKiI!u2i;D-Tg-{K??L5`&|1SRCT{0%41~x!fLd}R9C50!$ zmH@W-Lftv&F5pyB(!mgSm1LFZen&bLj>d!>&>f^I!Tcm9I{4s+i{T22PHeE~f|l@s z_B7j$RCCI%uQKVH7sgfovN^rm(imzmz|ZA7D-3<w6K_;hV|bzzx^DGHP1@}|_tCDc z#s;%q@rH#@Y@L6SrKKhn=mcJRjg%5l;hY-w57~?MdIuqKUT6%>Y$)rcb371tEZC#l zSf8NR@UA(U_u7wEUX2^j${J><)R1L@wk1?_H!iyf0&Eg3whN-JNtraqDOf$q`7MR@ z$d$hh9n1^t>_o`@4p@@UGnWQOCeSC3v0F!MD<ML#Zh7uVU<^p^V~zt7V0)tN7UF+} zyb=j}srSa}(`CL28_kW@hup_l5C9*(l0n7-V#Y=o_v|1|0f%&OXs*ur7pU=GqIS$W zd0V*6@4|=IIKp*o0+&1ZbaG-<D8}qR4m!EI2Ejdg4O5=7<H-`bzlS^^u4@xvczM<F z#@_a%1y`=U37N)EifK-}Q$GCXk&PtUA^)lc=(j#U1>>1l)r}rE8=G3J>%L-R?|<!S z+TR4moww?kEM=cTJ>zW3>ieAs;WzE5ziYIRF`kYO0oHC(Xp`*;2G-qbOG|tpLrYFA z={<k{6*A_Ju(-bFo%U6SEAbONWD8M6HpDl1HUM;g7Lr_k`PJr$y=YVK*UvK5zsj}# zT>T8XwYA-MgoNAPx*)3uwEAs@wZC^gaWh)yt3$udQ`}!Vr^SXS1<8yD$->@F);m9N z&$hH=H!oPAZM6XSsoTT^O}s`%TV!bI?BWb#f)w)~+B{BGf^3ylb00f<mMI1qz2jo) zGmgqq@(=<+zbKhXV?XgUUS>8v662$PlFi-Cb9Y85vCqo{NhcN}1}*9F%?8{?{C368 z4@#|_P2I0)g^9em6Xx%-+%W?GiD!;*tw!51E!_~YY}xCsyFv34N+D}^&aU$hS*~l^ zCD9gF$+$GDfgb@!E)47p6gMU|AF!lJMJ<m0eOu}nau-=o%<`|M25FBTrH&3}#Av9v z_MDb?Yv17ujkxBc3`W$*6QgUO{9OwVMuC(5t__;GuxapmMgz5o@ZNwz#I<u1hYK0K z9=$UffL8n<4fsl!95AN6K-gr0;e?nsd&}$2c4U&rwT}gJS#YI3>Mh2SM!@{NzHn{C zW?<R0S8?DgWyZnUFg7y*$?`c@NTru;X>l2qwp7DPTvSbdF)pj?wrzU;jJe4@is436 z=#xLNsUyICXH;mtVM}u)rf3-b1_8f4aO)`gYwDCrIvN9nw}t)-d2a@&BwqgnETe+~ z$y6;Cuhh4_*~(i9@d$Q@Wr>?x3c6Vxag~!=Oz#g^R(i;@DH`p8yK^wA9aA!jkT2W- z2a1G=@4>uXwRocWXJU0|yE|@uR|<43T!4aJMfDn0b$<T4wx#jt)`u`yivMv9dMF~5 z89!?dz9HfmIi}TcI({dRIz?j}o6r+y)ThE_kDU9fBQ3V_U7Kw-HMW|@w7}u0#-YA7 zj4&bcO}ij_;T0`M?L&JXWlH|ivhATxQ764JXO-)Tx##Lx)yUhU=-ANn)~k;Rw>8(z z7ukb!-z@Fwbt#al1?A)dVo9$f{NyY~-f_TwlygV2{a$zkH1}eug1HWLhf$dsJ`HJ~ z7<BUQIY@*~d0&7hget)`G}G3^M4y;aY=&{eIUic!%?I`q#-V`5|9vMmRmALHpV=4& z@7~Lbz%DKh2Hujnb+w{AlvMy$e>MiA3Q{a3`n?!07<WC|)<ldIAtERBJpXpFmy><? z@^T9n)#2Ol-x&Ju%*V9*4!2L<*%JCU)v9*wXIb{Qc;UviGCKzc<*^e<(T5r%iZ>{3 z-Ow)E*?ZH`5Vkem`}swTfSUp!Ep&D+sNUSJaLkCz;&;^<@E4ozATP5bH4YKgezb{4 zV_fg+wv2d}Rf~z)MLMaMb4xwRRXmXHzc#9*yClYMk)TUA<up+|LZU*?I<Ov^NGG#m zJA8b7Qwb*9*E8u=Zyo*Hl8R%Jy)*gBr{{xaUWtLa>?eKgM_2RD?VB$y)czq0hS%7a zPutoqOk4a(nlrz{nEQCT#m#o4X4uNQCRCI*!DpY|nR&twIio+T$u>mk`w>-H6&oK* zc~KEaqR*lreaLViUDYHpeOuzDFo)_qYp#bYI=Q`-TH6$xkas_jUcz4PgfNW(f0*7B zfUnMsO7rsrzw*DWk#X)ReSfuVaofTt#zJgx?zvlurQ;Kqy~H*NrUG?O7(IfYCAMK+ z{EruX<fu_oXVPO+&tHknf1<Vu;p6{$6IFq&NDv4t`v8E55q8{Un-nPRsu)hipUl(_ z1lwA4L+xi!dZrJSX|nVd89ABZu&z*H*e@!YDBxWc>j*z<FY-}8wu2|^rY;`hX)g)F zoa{#R6W%{%sTJ%qCR}zt`*rb<a>r*xBL5Ym@%Pwp>MCsOjn;@W`xk<v8lR5bNST&r zP>6UfJQN#5UO<fMF+H>HNX@d7{pDi$u|D=o*AO|==+u<?CceQ}u8A;QJ7;pY`)aVe z@Zg<^E1^K>?w#voLO+0aqDE+koD!o*=S&vLHYn@Yn;vug3!hX*?2K~e_hxhc052n? zYAHt7beS{f(=ny1I3`>-P@;bBDfexAnrdlO0DR_uJ&^SO`+?X4&KU*2D7RysPrExS zsr&k=g!`8E8ll$4E{2NK$SNOi16|78q;hhul7H9kO7`7&fm9il*dMRNOsz(}D*#}+ zhBtmjtbGyssGlsP5RjM;25I4@@lm12!Pf=NYzUk&{8yiTR=eu4C%mF^2X{nQsJ~%h zs1fd5+K@mN@+z@{NTG?u(?pfsi_f`j;q_wVi71v2CZ!y%<Xc@wncoz_7bXiAxNH1` z%wU78OsKd`1nU_dpZ@O}owu|8)1_Hf+BpqqG(dEKYVU3C$g!pJD>sX7pRblL2_w5C zR>u8X9sd>H?G+H{Nt3oj%a+A&-PoDE0H$=y1q(fkz1uJK-Q_!J=@LvuVgq-<j;Qh6 z|C4YkUtqs1ypR+XZ(9lY!Vp~ix?Zf<j^6(xI*G=so)y~|7?N0KzRl*^nOAJ3>1FR8 zx||`M;vNWZwP6JK6{8pUH28&SC2_}DLebf+DNtOFr;##(^5W;k16he_<d2+b(}bd~ zQf*&8m_TqtB9g=RxX%wp8AQzz79<P4s#_|0X!&fCxqjZiR!wdgIl$QpIABpNc)h5q zRmW=CdEp1fm?WK_W8r%@%l$$WaD5G_iCJDRQ}#+Mp%d(1ygJ$(ZnRm5q!6=~bBJm| ztUfiT@6C1vn-2AF*T${Kag$GiGfe@{3Lpvwu27x)fGikDgutfcc$~k0Le71E_t;fZ zOZ0!X5}C<O`~A!R9j$bU?Qhf4AP_MTgX9v$_MF5{(vjIWXGn9DDtA@?LZGn{Va51~ z0*tQkCJ^%2IWD~=;x?;C&qxo#@g|_Y)9%dT)<b%@@{s39*T*E|Me+-}kqdcj$4f%* z)`XnN@_eNL{G7{aX2H3IBQevodDz%T*;aQXj8jj)zMl3ZWLN>+zS#mV0FL;mNaV)b zVI)pLf+So?1Y3_@XcwxLZ8BC8l9HIBN+0nxY}C-^5TbCTn6j-IlXklb<>SaaFXurg z=PFjMH6OJkEb++@)_mq<R~CcZ(b?YtbGph(@REK{GCQqSem(UIIV=Vj;)ZswELHiQ zE&S4kH1zLL8q5DZ^+-KhxXJyi!?*rIlWC5`HO@O~g$}+~S?0Ecb%~%fI$cJ{_i)!Y zhwmv#0!dZrvXT{g5RT?Z%Z`sP2GY2*)$e~oI&k0W%`hScOzQiBiOidE>pE{?P)$w` z8w{p{ON>G@{AJh{VM|EkT3T{?5y(Ut{4zhou?pkw;2kf(>frT(qD&Alz)RpJFK;V= zNH>6?w$DgZ$vSt-Vq^Gd*KlO-X!f#Dlu<PN{cg!;a0vV`2X4z)*~ziZ#<xW{k)Cp< zn_IC!aj6Qt=R`0(>Ww=y1?2F6V*q(}g9s!z{tt5L6{iRx4L9qokhEpeR%hXl-HB}q zf56;F0iD0RAo=WaG2^*XmOI$QOrIch+8;n^a>FRMD3!u3nU+Zph&o{GKAdfJKZdk$ zX3RWMR{W`WDl_s>^YVyd-QfPtG;U4r*u$Bcw7Ur!X$qkTl1=Dhd#Wdpk<xL|={)rQ zByi~;GPBvcJXpo6hkM|0p~{MV`i)c;>g$C1;@OuSb{U)WQA;nu^2Yd+2=CdOZflcA zXt<Iay|u<}|BofMP5M-0Q;plPQj{z7dX={9TlJ1Mw<nJSUum{{|DL@i3v07@H2pzk znrUSKAlpTOLFfJd`o~Q|iq3VR?lw-v-8~kTFr~{%9mmiNvA7eJkahw|ql57Wh#4V* z{We)UT>U=5;FScyvh<>ik`ubtes&1NUxsjX;`Jh28Uh7dm?tf=$^oF6nqUYt#a}*z z-CD^ZxDq|17&J@6U>yOPN96&qADoOj_}vav%4LmHG5VdAjcSOYfzMh17UbJ8&+=BN zA25rRyt39bs2hF5=q#T)k;wSr@K<ehNZ|zJLXe9Mu(ri$0H5y$l31SH)5$+_p~<<D zA-iI#4OX;#KK%W4bw>c(R6fG17f^<HLnw%&)_;{$?aOrTeW~@Auy^CQyKr}LZ6Mwg zeN;|C$iSJgk_P{uO|TTf4TL=!p6HAg-~mmHvlxR|@2)E;VGWxEr267&JexBVOBozF z-$kn5j*sH~azH6776eRVA1t_9i*+lAC+9D%L)NzZ+I-ulX!p$?oH3D+WU|FCGnE9h z?{<Fco@gH3>Q<T+v02q|*n|^+;lX04TS1TDo8?og=gcl7A$}Vrc{zSRmr!-4!K*5; zbgK`-0(E`K-plrge}Vua3Fqpu5q+&~dR{b7h>DBv$9yuR`WTeL${%jc#ME<Pik}0~ zHq3JycfhqP9gxh;RJYtdKZrEBuA!;;*_7)4x9ClRk-K7;`WkDX;XSnIEB^smgRSJd zfzyc2kgw=fn~o(2+lI=ck%jY~=KM9G*>|PCUM)j3j7Hj?9{@xw4a+i1udA?F&_Z*h z>rp?a$%1wGu8s5YS>C0HOvoUTMrVh9>mC|+*|2{43i%O6xvRuox#fqKD|v57des;Q z@l#iBy3xI%klnar{NK1fGyPE$OruSZ)o}84cF?V7h<eS^f9U3Gx9FFi)7?axcLI)o zeb{1`6)ch(aNp|sf|X4Mv20mKyB_}MU-?qj-wUBZ-qLomewgBLAIv^=N5=)hOV7jK zBOs)==(Va$9FJKSiN39^?UV$&u7^)Xh1}2SZR^aVh&&2bJsMD?(xha?k|}0}&&7{N zVYtJZ^v$4v#<LSyzHx?1E1L(X#``9*g}M<8;tSvn+N)a!(D1GRu3DwHk85`FT77In zv#vb4*!HZuFuIdWv@?a@Bn^qCdhzLI`n%|Vm?kJqCKB&2v4p<Ir6!2C=OShbQxmm4 z2Lm5oVpMZlmVAbu!=gbB$m?H5Vc)&4s}YF03+L0PO+))+1IH+lv4%KBZCqrWL-BN4 zQ>{5OC4+gkQR{5P^?qf&D%S~$IAr}dwU67>d=}Iiy<y11zt(-L4wpI7?}O_t{vmS% zsMefP(Ed_2#4xgZd-;A8M5BOvCbzBwF5<(E_`7x$&0jnpeppWDl%`PAN7>i{Idb?u zQng+$Ig@pAZ{?uhJV7-s^VZ(>fQtM;rL(CGGcF{wR3%*w=_5Sk$GsR&X}7Qxm@V?h z2Qt0i?HeKu6blgMJztISwWs>etSSu-Q~pXkfHi<eRqo7e*|1Mus4fAi=vdQ+(Y&Vi z+LqSG>HKNGZ^$d--eRXFi-&Dw%P&NSgIw{Jy%`BHt`?*bk-$egSQgPR{>J7oy6`db zp(;mMk4lgfuqi?QA-i7<Bd(ee<#9+|oLpua=&jt$SeVw{Z9h*Xw`{vRzfwg$w+9AH z=1(nHZZUT+kEo|!{hc?NC)}sEqFTW;2vxvph3mBGsw|1ZW=z*qr9Uiqw0#*MLKYKT z4526IiiS89q`gm>sw>2+Wav(E827-_kJ7F~k1BJxr~Au^T->xylQS~%Y*ol<euZ@O z*J33`Hd+Lh2ixeI;Y|&G<9aP&P02tQ0571SvEvZ>EzlHjpv#K2lh9x>)Z)I&)2U05 zwRPgNP9Y-LADhFzt&p8pZRO<Y?2bx`fYZH|;&bIW4>Tc!FWCa<Wi|_*B~rHPg@x_h zwB?q9{aC(MF=JhxFd3#Rh{SYsk7+%JJxFEY0d6g&P@21L&Y2LlC&{BGz)o_ft)|^H zN8*NZZX-7=K}1e3K+r5ANc$m#t{Gp*!rUg2Qh;_Cm)N@&<1K&*rx<!pU}|fIA1H$W z@I_0K_0>&*FNRkhpCy`9WQ{GpNI<iRrg?rnzEZLf6ZDyJK+4iT{bVQ&Xc6xGf4^9C zWKuWU7N2z#kZHuax17E7@KzJCDej3xwgw%yb2z3t!QVl!qrztX|6=aFqMGi$bzv+Z zNR!@)0s=}CX-bQTG!ZERp+^Knh=5275Qw7mCLkanpj4?*=@5Fe(LxD5B=nw81B7^f z@AvJq$3E}<8RtKS7hE_fD{HN}<};tN3K6wwH2m_H=KGE#jqbMv`L&0$M*gGt93>)v ze076jg6bk=_idZO9miZX4fPSDwKac+&(2E>p0UG4hMpydpq&W8MpBl5H&(WYt)rVC z?GKhhJd43mh;dD@UPlN}8zDrUg2}ED?=QA}8t)Go4qcx;g~z=)-OQ+Li6KHGfvJPK zXc-)NqTM|STMO#$>+9_EIhdeHKkVm<Od~IPTT-AW8e|!Y5<*=bzaMKQsrhFh`1YA9 z>c|I_0dYH$0tO}*ox9zIVrl&5&c6t@(Joe}-sogn-_bYo?T@K+B=)t<>#M~^4Ln9X zIJQ8eR<D-nu{;OsQkryS{GGP5T5%8+0(tLL+miS(+1*?FYGuVzS8U{N?vD)r7jS&^ zK+PkPa<(6eysO0>6cI0|D%93oAL|Vp`Y@wB7c%nr^cd^s5J>uMIqJK8Vaf&`gsgIJ z?8)~k)ba-Gqcbggwukpo5+tt;fU7?vO%C47OshhMl&lTe*xMQ0jQ{oXiWoCG1oz0{ z4e?ML4FqD05DQfMmP$TB-7vFLdhqteYIs4sJ`?y=w1#TTeyP+?bO`apn1t*0P@uBk zvf0(G#)yf`xL&Jux;gi*K>6bGP6-&FtI3BP1f0=Quz<`ei#RZM5RI4dG948i?yH%c z{e8d_aqx&5bLV2Y%HzXzhg?`N?Q}YWmq<h1yG~hfc-sX~%EfPX{jbH-=~@Z7RsFQX z?)2CvkaO%I$v97(m$ck`<_v5~*R0k3O%8bMBHs6E?NAH*vsxR=vVv*33DLTmhEbkh zb@h9{T*2YKIW&VyL~PieJ@=Yl4otxLb%E)tZe6L+mY0B_(Gf5=NaP{ULq;+&TT70` zs|T33`d1A2E|>%!89f2g%g98pj&*2MC?{4)K;z-;$n1=bfuu54vLZ!5Qh0WMU+ke+ zyxrMzG=Yc3SPoKA$GQdCo**E=a6SM6Owxb8$clD3dKu(eJa4xFt-^LH##^A(xAaI# z`#r{sS6$qZRfliD_{&2AMuQf<pN2!4jrJCj7OC5ODd1orV_?u~W$f5LT`=wyD&=|d zFO1q-yLlgW0~$Z^YFG}*U^t=}A271uoaCphTyTk}|3s#D_F!Tu^j1Y~oegqe1awG* zs5p8#<2aOL?h5H#ZA>?)dpjlB{{v$k71DMntE*9(_-1b^79{`+l~6g>=!>6bo4C^m z;~99rHB}fI-b3-WABAssX9?N%;4UfVp0jpO=eJDuT^?29^XL~g-#rfl@<gL!4?>7} z2%Qw2+E(o21et4c$#~g!_rGUk`%qCsurVrIU#VX4x{Y{UsGnLqhbfGA`vYQEXR%j= z2eAEQxB+Ya&oBs+M2VAnJ6V}2cggX7;HXSDhvEA*3AY|+{dQ)S`6(URIyi=;C>VDR z9370b5^n(DlW#4UnQ|qBxQ3*gtmtYKgvgew6Pyh!AJp}&@i)bbKCHzkW@#w5t2Y_y zo6U0e`{#YJ;5)w9V269NcdCjx>`GY;V7@-<o~YCzob*sMUXb-<4%CC5HzP}ZSpyPb zl|RpCKLoR^@g&b07EIB_C^Xk`$+Q;Z9U4BxvVC5~jpOOE4&c;Z99u`Wx_^Q_x}l}~ zr%m=NHu2Ri+I=2k?pAZoC4!kGnA`-BQIgwOh+L{df5yu5>#O-1NBD0%r!ar|otxzO z?s%^+Yu;|<eSwEeF;nz^X<kcG)~kt!ZR3i_OKyz?IdUZN&j);Cco~46-}9&Wrqnnr zkzA8+1CMOyaO02b5HOtjE$Q;aJ5|NoMXzC%jAaH!7sJF|YDkS7g$aze1tPsI=1`GT zsk){i%QYFxB|fL<r}eUYbQnsg1qLqH)(Cnlw_n!B&gYb6nKjUWyYj+{ThucM2>7wE z!$kqBb=XDaNn2a|JW?T%8LR|7dZwOcz<J^U6u@v2q%8;)SLth;&DwP+EZ8(0*SX0} z;_<gW8+OZ&x@k-t=-_vKV{86B@=@ccUs*)LvPly<1%X+95trL;6krZ{NB)f$Ah-4$ z7k!h6uJI68N#ISEQ4PteMM1dIkgh*|{G~}c1iE1|kKJ}B?(GYBXM3Y(ZObi^v+>Kf zhWxY6Vlnq`QAV)MaJfzr9MW+d8tvt+G-CP8#OO9HPWqwovaJQa7I_xULx`=gwH^g5 z=tBZZaR#F8FD$f9%-?v*Pw^H*L;I1;8|B4~jj=$IsL4;!8vK!ko<`ZAU+x()vMUG` zv7a^mG<jZE>S}EHTNdT-TSC+oCG4n%vrV=L*_}o}^nBQh;NI%3Qw1yKP*4~&oCJT_ zv0qpla@k7DzcV>PC}tt#2J96P+u?)Xgy@eVyyiU&q11sKvEj`v6@WOz&VG}#$)(|3 zO|TJH55<C5(4s)xuTA0FtG(#;B+W1i>Ks%0&>v(2bfaWfU`<v+NJuIzRyCLYGjJFp z<-&1*Sc>^Ht?~U$#(w13hiTC8F3K3N-fv_*x6Tt3vwqxDq0}Y91pVFmWNUzHrDiFY z6LBsNafbwre2&%@{UB4m?V|rA#i@y>R^as>XvC8BU+1lblk9_M7VT`gOw38HGH~&o z@*)KOz9IWY@PN=baDnV&OiYZ}sMg>Ul9o9~-xc4`@>Kd|@J>&yR3_%R;sR+P%8yYk z47;o4M!Ud^zt6z0OtI8Hg0Rkm-X3G45Kbj)V-B}Qs_oTG*+TMu{k&MUk?1Nbh`heX zdTzDxVIm$Tq|(_XbaNmC?drc}Isuhvm=z#ZOiHzvhn~sG^6~bWH)gZ>t(bT%?AP|C z-iE5T2j#|5AbLlDbSYaif$%2$bgYIyD8(Xo`U>y8)F9#teUm~5#(MN~paSHgrK>NN zZhO{=&SC2T>7@Ai2C^R^D^Ma~<|?K#->u-}+Zzt%-f>r@We~9s#0p-X0$w<6om8%1 zEwcQa94$P>V02?_M_@14r7r8Gl_KEA8lqsIlQL(-dY@EVLTJ)=v3D{}{8jIBO;Ydo zP;khQy^&Ao?XSarQW~<%mJ3sCC6j$_m-)cY49<O`_$QG^Sz~f8wUW}pU0e&+jq_$F zXA2hsl6vglmwuf)3vOPw25!F#u(=ukz<uLOP#E=EYwc0x_J_0`wurlDAM*GloUUV@ zq2$S_#370gp-HL^>n9}6Xsd8ZnSCQ^ye06U+XqP;08sqFQ$UbPVXO>jhthu{iNHju z9Esd|ni-{bZr{Vv>x*^2kX)j>C>YsiZUw=HKfvGtrj*cdbElny@+w~z-!ieX2<>V` zzKxd?Bu{nQ)S^8lns}1#a?idDQ?fNgTszl_>;VAs|9K_ZD=l~C(!=Z8W<i(?@rEJA zeQW8sm#JcBUZ>0g`k<v2VJo-EfN*@|y^jOM>W3U1`aMHp{fpqUU7=iy%1~P9{c3B3 z+kCvXDX~A(sQ19NkNK;GTFVQ;1xWLd9j?oR9pL>-SPad5)VjLx<jS>MQ)z<O55Q|t zQxCA0+y=PTMA?Q-S3D;_G!CJWXEdM7{d~-9*(qxv!#UctcS+$0@(Io}w<pX=(rBrk zmB7{*TsC08<yAcU2HuW(RC$iD48$h$+rqtc#}=KxrCZGYKz%Eeg1xv~avJ&yEA_9x zR<0AU-PU9!Y8IAStw@0<Q6BH6JJow0bf=l_ZAl^9gf9-EFXa6!ga=)7s!o1d?<gJq z^CgY?DJR6xZhDOWIgU-ntGiPc<yB<J@YWYDmdav0lz$3K0X|%;4aqgeV?TtW2a+Q& z<t)8qtN#IAD%d*9QhzdvK`0Zq67lvd9s)Y`X{!~LytBp%+i8Xo7EfKlvsc3X-v5UH z5{uwVnwQ)F(W~cVWvj-<3+>`g7)|vDT|)+OSD92W&Sq&FK=ZcGOjsNF_?5wGiTA=Y zt>v5;d4-Pd14@ObOT)H!+4qfiUPSFkpWp&_>x3xS;vomEdAK6<Tv6G)kW|;ZRhy6L zH<dc<ZYR&~_aI-8<kTYX{NBAt_)Ox74ZZD9o9G6-+UY~z960AVKQWq_R1SQY5l4mE z91hS;Xy)RXS$;iDFpzovI6Oxo^{UfFea(-S-LB*q22V7&WNNDNsIVqY5o#%U2b2x3 z%qHRpUH-}|tsLCb()U{+6X%}K7rAd`5EHvqBcrMTh#o)|?cE0+G#LJnVV~A5GFNxa zN!_dl+?-T8!Nd&s&2=qVGpUA6^w^^?5yPmNADT_(*pGlgJ6VE?{AYytIvUVEu7mM) zZxPq#yb>_0{7RcMeN(IA`jn~E_g%BD+oF$Y+S}+_!txrxf^e7)>1t1A<IJD5oyou| zo9ahLW}+T^Nmjns)lRT6?yY?LQ%-*P0Tw$eSXKAUJL(T662@p>(kOUWy`U0-#7{%A z_FOik!zQg+xw*2o4q4Lcp^jyqh|HuvcY-E4Wat16d~pb_`99lTfLez4;!0#)#q`ol zEikArnYV*6-xtYlB+Es9sl=Fj_vV?u570I1;c?+IXpXr}wax=GG|5Klsr7|F8-J{$ zDOOlL9k?&R&h3q?=`#fU8`qm{H13|5G&Z=@G+4w*4Ty@L(WXd)73>1Kp<%PMM3uLN zW6mQ={x|wAov34fv_8ALCd9LFG6fvtVSd}GpG7trS&_BRfMqFr{pQG`w79&R>DXvP z#VpXo;9Nnn>sE;w1Es7BVMMT3oBJ~vf{Fxij_OU%T2`_iW7V&w*2Mzm{&s5nJmw48 zy|Wv~;pd^yeY{l#a{`zggCBgQ{K1XaZZL@tP-@Om5>oecxVjP6gZrpU@Ryi@PDt+K zk+fqz%WY4@yMo1Uc03d*R4jDQyq5|PGeh|)3L_K^LM(~{j_OKYKVBFE<Z=c!axzY_ zx7+yE9rASod%M9AmQXgoX8N^VyY6B)qP_FvFLrIQ2%-FU@D8PyNaCLyhI3Rf<u1)% znqmMEp7%o@JgXb5J{9Pi^ndMrbznj%FhAM<y}r0s*F*YwS{h2(gd|FVG#i^|wZ@N% zy$}@<USS)Rieg-3yCdL~44&8BTVKVX$EFC7IL+(!<M7}+FfS%sd(ptj5}B;#$Yt&Z zD7Do=Cm7l>bA}=_=K;Q#HoqzJbhmdIL=g6U%R%N}TS1+}v<Olj**<wrz052=k^RR~ zcf??!<cW8t-(h>J06gC58>zU<phk!jFbDWLMgQlO;Jnf{{pU;9<0N^{W?SW`VwT4! z90X?Z!7mN1!&@>=GJ^^|zZA%sJKiVqWHIFL!zd(C9!#EjYz<%mUY)J+!c1YmsK>!s zRX40$8};DM7u9Po)A)b=L7@$~s^in5GN_oyzM3}akH)PezKknr_4+U;D2p7pPtph= z>>q}qlvtU`p?HLgG#gLE=5K}ZSAjgz`RufU+vkI^_Qc|L>gDgGXC&8XiXL4}VCm}j zYnPOtgg;19jY{<GLEZ-(y?=*ZB^&neAI3dLsb3+0Ht6%d$s65{{j<xEaz*|as~##y zu@R--{{S+)0`Tn1+5rCgo%$-+s-M96?{sui(|gCl)Nd)r5LX@ea&!ybN{&1!r?rwC zvuqk;+d$Z%Eo{5<#1NkH&K%HV)~(tlCbZDNB|39hM{9IOYv3+5b%9q@AYVjp(yDP% za_YG@L5yO<K-?A{JJ|KRC`*zOo>8Y-sVcwEH8SMDMflw;fEP}ptHEyuN!z7}Wj?^9 z8|kO<!P|Z&7#~CeT-}EVN78o<$4Vu7gi^j+=gVgsT}D##K>~4m+En!bRFPz*6X9vb z7nmmP=-w$`n7cv`HyyZR>isgYJFxhFZ1Z8Dk*^4v>Ip(d1Mjd^zmvY(&fMPgi0Zh; zO^F>8G_T$(rscvL0!w!ODg<*s?Z(>KwS|roLCG*@frqRlRqFp2PVs--eXFf!6^)t5 zP6UYrMKJ5kK!8T;yL$sKuF}b%OWJxCU$&jXW+W>)dP4;V_hld_P?Iqr18{F$WN=pR zR@`LKd<F~ry775osUI%nP6CRnT2qkNw0f}H_wxBv*9J<cJkpC&WeH8wULB|bSa}^F z279=i?x^q7jM2V9!HDp}jDBc<oM7P0_B&YPe@F{m$-Z;~9id(~E?Av>Z)qc*;ppY# zn{)T4*p8vtCrPJ6-SPEAQa~J_iUdci%(9XLPt!SVoG%`Sk5ZoAo1WnSoqE}9QF+!5 zZ3ZF=sH5L%zKuTjT>OrX83|qQkDL1*%mzps9d!a_Gl)KhjiiGrLN2G2`^`T1j`ie& zsn6l8x>M7cn+QLAvy=md-^gg8I;~IGN^b5+ijCmQmCny?WjRb$%EGLJ<&)2fl@Bi6 zb&gsDJ$F~Rws(tA3sdPr1%e`#Aeab0+UoaHEUnG-fI?$_9F^^hj9}LzVn9*K!q>5^ zF+gDe(&zs~EGRylg?@PAGWBC~tl72KCZPfbicmV0faHwz!%n1vv(>u=^wfQReF>C8 z-@uJixmJ83S4n!1QAH#}hPo!Px6Iyta>7>qcLUc_hUiZaQPl3R8^r70%0jvDd^Tv^ zK@^?+e3S8xDEqG&O&xHNd;05rR=!nDg|EY!m)k#2|1Q&#uB~fCxH#Mvr9m6FZ3LY_ zDux^aNM86uiu5&K0ky1>ioGVcg5=#FA(d<9H2G_=l0n3^&nv1I4rEh{Y_*DRzK5SZ zD|Y_z*1)Vp3+!B*1Mhd@Kr~uMI0J#PQTP8=nDPfBAkzX1gylpb{(J%OMjbdbhH??0 za#H2iCy`P6@n*vY!_u2BUu&yA=q)jv^YVEYqzW-6F6)n!`wnoBb&Z0kx)>C<l!i_% zdX@8CugDwprTb|bWdV5I!Y}SQ^tHKGO+0lZJA0eoFTZd;aI8<hJjZGh)^riDdI>0j zWwsu)G?cr)i|2&`W<>5^uOGeWRL~W|m4KU+mXtMblOyMu)htM%(T<;6-<CV4e)`rN zmr<D)hv-sqI`V<uaZ`DLTeXCw<#QiiDj14$y7-I!l-U+QO3>+<-1#1!3W{SG-B%wG z-TI)CN>)6i!-%78us4VV&=aG?w3czxLR$=i;d@*@y_#&pvNbaxn}`Ls$&3*X^&abs zSBVB(Z(pA2{7UbiG6?u;1lIMof9ac>Qj@uP;GrS6Z)mI5RBy}7#ID)nH3Ct|Lue-A zy<#aUexKHZn!6K<{e4f?4JSIwwjwMI=r|uoXdPi)yfjgcBoE)I_$RPFQ4_#XItHUp zpqtcR3=g%mU^0(po$U+og)q)borWR>$;dmzgU{UAoCkF(*s7YwKRvf5#VkzV{i{-0 z<m`DUd!pc~10C_=1oF9En`dRE7tc#Ao=Wg(NZDsHq|_aI&Sr>W>{_f<vHGYd#jv<& z+>>n>;dx;goElIKNrmC)fngFC#Sl$mjsBCa`ch2F!*MBeP1mB`6*|l{vmVMfwBO9- zTei;I(krZ<8Ws5TY^z_sRM=a8QLbEKPn%l{Q&o+T_KCsyI(8ZSlOC7Ag%^MHK`MQK z__#E$#e)dx2&8xy&XBX9B;_U;ApqSF7m_pYK4~EM=k=W)<l6utSPfPw_mUlj={w0j zp++eJ<ysW`vqOiY_r+SP>Q}%03q?|6LqM4C^rNy|a(KBRe*5hDarc);-Y!mxBu_yv z^Q%5&LPP5%a-sz}kof)3j-<0^Q(Jc4y^a2!B&L>A_w2!R5cVow!;3(hQ;2VV)LR=Q zc>J_Z(SPM@XYJB2J=(nUd&m3T!SP&O6kB3yZ#-IoF44<Jrqm#qu}@KtCFyK{(`+?@ zc`p7!J3nMxUE@g_sqT1!wNI>gbgJ3unFIT<FKe`nPyRF`+<CZ2rjUU(ogvxkXR=ri zr+nN33%T+*hLjuA!dFik=oVt_%#0{OI^yRG`{0%s`v`(>s(Hz=)EgTp3*xp9o|SEV z_EMzPi0od`_lV;j+jLf?62RBX#5-~Byyao1K(nPO@PxD*$uiG19L*V%DvoE%6lF4# zeEf<j@kT=Gl&KvkQVy+E0YB;Lu93_m9;EoEnOavgrl(S(7GCxT_BdD4EqBjqlD1>j zwcX|<tGNcN4dTm`3;EvJKWGlkExLuWC9+iKh!Fi#OAEhLsodBK_Qpt@kA$|r=4u5L zIGxZpK@VSt9v?LEjUcqdDy}PTHp{&13XelVgQm%KcxDBMK~L1v2L7kTf^_sXwC}sa zof5B`o%!=X|Hox)h>kaie_Kh4HQeE9<KRNF#$5rkAEeVoyZ8lUTL2_0H=IPdT{o<5 z{Ry6K-Ow1ZHR4cyc;+)Y!XQcTv0T10BoCfEZ;7Fb!mabh#62V|GGPXL%Ly8<DyoyE z%4l(8V4JO#N-2UvafPiBzCx-K@?ruC2-PMg10C7lMmwfKt{6YsxwuS~fe+ge(GEhy z<p@OVHW%#Xk-XuHPuIhHRxc)if0iMcw<&tA1P{H=7Nxo&oCSAD2=hS}pH7a*BJZus zi1ya(APcS~5F3@p7JkyxXg^!0)O#S4S^}wyG0F>6S)e<p#G@7RR3a1J`ZmeuZ|qQe zM9ylod?*J;*ofJ1RW^8dl>GiORa>-?Y@}c)29HscZ_pU|T-pC0Vo8ObC$PRzHw-46 zCtY|&(PBv~ZT?!-Xc%?=n=yZyv-+C|+C;@x#!#UdxZJ%_qn@$@9NXIWtk`C)`I!uj z*PA~n>#q2mM7sFTvwAG0lju7B@IQwtfJ1uq(%tXO`9*yC6sd|lG`I2FVfb!$=(Q1w zbtODzu(L#+`^IG7qOMGs=oR~4NOX{Qw*ut!qoSnm@1N4Z)R1f7<<}}bj@cgVmRmqV ze8_q$S#54Tk)CY%3n0r|Hw0EVx>mJjINRz?rRftty<!j*9>rN0Iow{t0IqH!>1KD= zIb3-G8xpV$i4i)n<5MiHBCJWewaarztmxhP>D3~?YGcFGULo44dJtc-9(rwT-?FAb z%h4-D^NICenm6aLF$XbHxg=a9q}zeF2@^Ve^<$-(zGvPE@qV0;U<jX1U{5r$wc92! zzPciSAQxS+A64zs(la}GhW#iP=lx1UBM9Oakaq+qzZCl({-v>%J~&9H>ol~w8-C%p zwV2GuZ;MFPjTO`lav#3WxVtej+}9AcsoSg5*pPLi3*(45^F)T%X~o)`jJ*wDKv;b1 zF(29y=+=h-Dt)OYh$7&{L_V=>_>M)GdboHUJPmu~8}0?aiZNZpzq$pA4^HJ;n7vK5 z2$^T)w_DpGmsw$CF!cD^gbt7Tx$S`>Bge#v70>r|iD+}gM&Nk;xj)C)QZnNMjG`C4 zTO%@J+MuAFPaot@nEsd?oa|#y%S8ah8us&2(Ms8B9kX(8jEOxc#gu95-(DFaH<Mkg z##tK;)V;?Vv!U&^lb{Y=;%sh(a(v;WH97!NL7$4wE_b=L@z9_zz{cfcP-qs+l~vxh z>m6$7&bcFt%mET;$~dydcq2bvd*l1*hhxL98>ik58~|0wl7BnW7f5r}6eYcMuS+9M z+w~rN3Kx6K_dYT%hoM(9l?Ncql`(P@804)BUu#OL;bk{Fj6y^is4en7%&!P;jr1*1 z^bir?Q&KxM%A4O**+NMn(QQm)g)c#z>hb~eASUFKi8YQ@;5+LbM1S%?EhM5ZU}JVm zkgm%gK4%eFV;1CV7jWL$#bZEB65!O1JP(iAF)d%?Z;kTwh&ZZYsQYmlH#McS3KVma zXa|37vtQvFm1_*5kKMz`i)8A*P5LRA6_B53{LT{Efr{jhjMxX{<)Koe=@61^!FexL z@sSw$A@k64I~4<GR`MT=sT=!wS7bxYo0{V6Ta&-h-@n%+dXa%jcR_Q1!qh>6upM!T zyc8+{djlQa|IN()YjR|D)kQ8{AdPuR@SU!<BxMame%cBQZwCA3St%@u0PV~Y+m=gX zPu9B|0n2`53rXpRV77{M!xWaXE6eIGr_$_iJABiDn}g1xwiX(iTS+*;EnRlWZ7E@F zo}TyPh#OJh9_DfcfQ2^Mw+wmMTTR#v#QN;M;0=1(yc9D)qD%FvT(L<=3C^v8+Wz#C z9qtFLKmq(}1V>MCMB!Hb9aKnfRZ-!46KT#hhDce%_~!E;K#{<}nsCZ-V%+V(lXGYT zq<Pe=WHM_wf>u=+1><fW4P0dCt?_>k$)!9WuCaIONDF!z>k|k&=(|5Ty8}}{N}5vJ zOp4IBDHRXc0>gl?O{Q77|DWnMYKm#0?ailXh3{1$yZsLgA45;HWan{9N4aa!JI79$ zhYPeOXS<_>j2}HjDU!2@ONYIhSB6~y9(JVJ(1!FUk6g!e7@u_`^$tWD={lysm)OP1 zb+qW8zI)Ui1TZ+6S6aA;dyST_y=5@neiD<#8HYcw_6q#Ybx6gUIvCFz(~!H-S|w`^ zG$eCX^`QDkAzt1rL@{%7cHQx-w(c>LMDQz6JCqfS2Mzf>qCN3Uv%l9SCT@Ase<}Ad zO`iwl_ONty;@Oon8~fD}X|o9%0iacp8EttC2tqdiR12|*PYiSI;djo&#Zj~gaKG5B z49d7;JzIIOiysZ0_V_vSNT||jw(pcN6LcVNje2dwk9VF<z|D*8ZG2Ad+WHil51)?@ zk=g)F*|b#f-ZoIWoo0Or>3hS(d%xnioivsnQUN!7G^|)wT#asw>PpFf|7<7la-#c= z>uHYmBqM}$7{fnKb6(u*ozr9;g^gIHPejIU)ClQy*;Lk4D84LwH{v?87#B+Xbj%N! zx+aqo@wT~~tID|(su`I5V8-yK?`Q_J*lTNj#~J-6%r70zk=-h%;ENRKd|!}^lT`wT zmwOs1(7PiNB^Z?3-x$KGdx>&y%+IjTYjZNzTIZq-{k<ocnS!L0;@O{%22PYFh8%QA z+U+V-HF9|2YI;ywg(JRxZ$g&Qs-^8v#Ddp}y6#FWNB#R`SPZ<uF}e~HDoUs0ow`h> zy1y6-TBb~kY6o00;f4qVs^>mT-2em-oc{s;xaOgk5NAT>0pHI)Sm|13Ut*+8^^b+O zR`v11KB5ul-v#zuPp2qABY>&iQ&J@L0x+cLDKnnS?F>$&uh|^QtZn6da<FvuYeT(W z*t4#1r}vdO^sh7h!B{|}!1~sgmDdWPMG`Kog#8Z0ua{>rUN*Sl^8J=*9E<91=JuC7 zfYf|2jNg28A~|nzBHj8_GkHS|YzGO4L+7|68t^k}k4UUh6uZodMRWj<{OOk~2E24G zSLP+cyax)k333x_9bK#J&l-DUJQqB4&%bXbfJE3I9_ey?S$EjR&s;YW(2wXb0;=Vs zXZ0sWCuP5I+c(ZBmDs8DlzBWk#Bc7SA`2TM4gw#?HGdH|6}bQUVE*G~--}jaUyd+U zj)PpEdwlxOWjE$dp?jlGnvL<z4(?8x<dsN<?YG1koO{E2@4|1YbneMg^D#!et|sQ1 zcrt$ePLZ{I!w(RA?o7(Y^`N<y>np-HuynwcLT`!A)C!wxo+apIMhd=Q2_|jZZvu|( z|MxCn#Az`_D7|Mgp{X3+X-~RZGv%Hx-_C_5NOl38dXprdG4B_3ixbsV<yoFlPsIwS zZph?Y|L;o8<>^VOnRi;Rvn?Kz$k+;sD)D0u+aRW|Cfmu(tn}`hf^-oRi>bbex4nni z*ptQvjNGSTPwvTME1}CDEAgD+`j(>Ob65ppzAi~Q9B=A2Z*T8sZ~kX{SxN!Va-%8g z{2^t%DlY~Y8OLY(mjRZe0}qBgy<|csN^EUsja+kYs=0=IztLNy;|+Wmp#lKEFYBK{ zyAVJP;V)H%wAJq+qi(dMqR5rAKc54{+Gkg%gDE(LQ&Uao10M&<t5O=PZ|6$Z+(s9{ zJd~>?@Tu-l-l1-4u?v1FX3cOy+Sb$AB*)5W70U&%z5e|gO2<cbJSDcq`DK-PxOVv; z)Yh3wUp&+wg7z+a7B{WR{g?y<ig<9f{iS&f@1$}c9$*i4kR4YJLUJcEZsV$i<P)2B zT{TB>fI0YXU4$k>F0WfMEK~t#mGNV;p02x&5p%lVHd9Av_*fsa&YP042Y$mI>heg< z*fMgl>4;MtuSX$Tmt8psS%&f?x<(|1@1edTJ=~A0A1{iHELl5ioes8Z^^Vo8=aAp} z$&t0xwNAsF`Rm4?o?MIFKFVU5X*pVTFes$<AL|@sdH9q9de@?ZXK4oC{L6Ne2AKKO zgGXh&4nn>U*BG<5#8$vd?GM-LI0P1OFx~|1r7LX202(m=VKaOC-puvce%tk?!*Kts z*jmdpWB=<k62!96ZVF@wZCpt<pM*<6?4`_ilm2Wh-h6Z0<QIcb>-E(=E7^+bU|uDu z@P?KIdQ4!)oZ)2?KGKwgc;%2zAWt{zc^u#_z@1)Xzh+Yt88JWXTrczF<lJ<$xntr< zMQ+FUR(vK!1(=7b#DR%`<Uk3c$%>H4?NF^Pd#RMjrtQW3S=!si_(eSPwALMKJCB8( z5LHN(sRLg*MYe$iq_%@O?SVcJTfTQ<{W;M%24gDd!gSv%OiKv)=sps7$!r45jr4Bd zF^yUQcGaja^elok5D#XssyQew!`CT;o2gOyMt*?~;R^9&xakBUX@6_fWpoll_ zxGx32I><86G-D$D;N9%438*%;Lw4iK>N@Qa@aNOakd5A-CpW|$^3}Ziy)$>KPqTc_ zDuAOYmODA+a+iQN!Id$;fi?kqxo!tx4^cak^;>jL@K8{g;d8x{?*)25#?^L^OLbaM zNON^v08b+Oc@-W3#LpY5wS#oXi!}~jq^5hLXoI2^e$DiNU{}|Gl7gVOW3KGd0)qQ{ z{ownH$bYS#1zLvq;2D_BQw;M@FJv>`>B1BZuY2|Y!zZY2{DJt3lSN~FcBS${_vD2* zIqDU-kJ;e<Vij?-lKC`AjE^{>ex_ef2;Lp=A5yjct8!Wx)CfqrUNQ>w5M1VsUo@HC zo6D^G@3Lw#W3S}~%J5S+DK^5~GCj()g++PhvD+F64&}rP(1AVx-sk_-G+(c1$#?R* z5;M6o=>~2PEbZN)tN8EYY++lW`)ep{#(t`8!S(s~(%g~JciJ>sbC{w3`cYhhyE-0> zhU(FRhNIbEFN|cm6wcHTc&h7Td@r2u!M_5B8~^t&Wucq@#M9_2x>kj6YB8{^N%KR$ z`{;i^1ho8uVb3^crrT*ebDqEU+3Pc4`qsz)lcOx3sqEShk=+0OHvccb;9A6SDJJr| zx5y2G@wB7(p{?Ye-GPQ2HWAL7w)h*S5e5M5;`)>kdDM?!uXit&z@4!?KBeU?9cdiv zw)^1qozsC+1*H<88b<cY9ZMeTQ5gZ2$Gp-wf+>w^eEv`7=t}eG+z9Fl`aM(V{?o^u zN085^b_XehKIMZDvul+e70zGL!OGUICI%+O0h&!^+9y5+fb_F4l6qc(jLk$mt0InW zCBjOk#8Z@OxQidNFUj-eg50C^XRt*utdvSu9gk&>;HanX0xp=j;QO8W{?)VW`MYOZ zf-wj#LcJzPi^PKMo$NZs9>7QY3Mw5Yb#^Gj40d~)r&42R?{XM_5ZTKb<CT|aSl?1r z+f<cI)1$wf`sih=g($pory()s(zG2#g>;WwN_57c$WGc2G%M}&{EUMZ!CqzF@{N<1 zw;ze|LHZ_-|AGFuRnoZ@H%ocI>KZv&VNAZKc^f&ThXE6zK&9g=K?}LgXNwYg5`l!x zZth8R0Ds7Int_++H|Dh`EG#1q{<W|v$#RW=F3Uz`RDsnj@4UTEp+%;_+3TD}<G1(A zkW-n)r?k?5A`aYB;=W6EvaUXn{U#fabl3M1U(HKp*q@x>`a`)G#t6NDo3f@K!!Wy= zB%A@w(97B}g>tQ=;%B9ZOAVxRg#P9N141_BF2*<3(E4($@w?9-e(|Q?(#QamzkoLT zLev!uLJuFi8Mx&qBSO^jDDAtH`p1~_<rP1PG=ZppM#r5(wx(kUAupebpMs4a19+6{ zSlORj!d;W4UjrJj%2KqUC2_f{S-U6adIJ#|BfV!Nv;B@<R>tz~=7H6j7Y|&A_sYGP zR&)8$+C@tHxm_~Kw={<}zOuWKJT=WL*uZNcCL^JWgPJ#29oWa@YCs^jI&RB@?*`tS zmhzF$Iu_eBAw@7;wQGWrNH_kSA;+C?J734@$D_YW${d)%hUlh=)(s-M$tP};uiJH1 z_!>q@==!gHKLN?^KMXgtUu2m45)g979xSB*9-fA*6nbM4>Q?Ln;(lV!0AOs`<Z+Y3 zy9jz(FfI+Nk9b3S04T6vV^aMss`hI{_}yRFJ1rrq^Jb$mzDIIS>t2GW>ee-|>e3#F zejUn;u*R?QbWc{+6|B|icC2AdUM|{yPQu(1`{*OgI@YA-p>6w}Ty~lig5(-Y3@J7W zgn{0%&A}I=@27#_Pi!{J1~lbXsaHltiGMU%oB92}D2Y1;hy`QBP89KVXIbqC=!1D9 z@-R<~j3S6^W#ib?P?dRzJV4k2J9h9d&2Qm`cb2&n5s+Z(O8zQ{EC;ZV;;=fzM<<>F ztvuu8D$7K3tc(&b#*O_(?ANItlUFpGnLtrIE62II+@)HX;-|>{eOy}F#w``mE|Suw z`JoK=KQ>-HYrH>|d#ptm9<wy}3>y^RlBG8FVAec2|2nq-!ve6)f<Tnl0ITBo5O{2B zarw7+6H%`bkois7`R)J*^|8HXcf+Rl5ts`ij81~(uP-j2=KiIz4^YKMqYYHrVRAgH z0bgx^V4D}MP2roJ1yhillGJS=S=3yY<#puUYe1u0l5#psDO(E1P;bC}@X0XIo?6RB zzlaZYjLu_h8BP{)PedDKXKq*KQ`tZX&ORgoy$e&u|E$6&ym~vTktZG@3|Jk6rxh01 zt?9CHa+mS#qBHI@MfDa2k8;Hm;)7UO+ntmKg)K%GEM0zk&^zB^a_{}0Tcz~ykSaXl zAy(7cgsH43;Dr~ZsptyNeT483BL*H0qjly_?75|$Rj=&pXG(6~jlwE_<EWMsf(^rZ zHLtm4;$o@d&!}8ABwA`@er<*f<-654NXD4O-Hh}8kCCdwWbYzaC?6Kc%XJsN+%#H& z=@;14JlI~&<nmAAvjqp!o&nj+l08b?51qO!g|9Tl?3~;m<sUQ_6p<nE<|Q$h;@BZB z04b^YLho^ISMVz30%~&Qg>2Tdl$yTAUsZJ(-f^C~C!eS_e^w^FdMX@Ftm|sY;YC+4 zTix&DCK0y+cJklNA8ICF97^v%3g$=8go?Pywg(|yyTAwWK@#mJ5lv)AeDv(xG&)Vb z>er0*w?2O$2Lg}dS+(hpr`@%mv{eir>Ac$EX;x`+2+*dgTk8~ak1tvw=k6lo1MA|; z5ddn*fO}n|!7n4}j)4WsO4L|UCOD`1A09XuYu2n=bW@&=`pK~3kx?}=%o$3I!B0p( znja-KL=HM*vw-cSMch}!ap=ugI6)W#o@a(vj1=j+CRm%PNTpzxf1q@MrL8NZ+$H{j zAvrU-%M@$B+wjuuB|T2Iczo)8Qq}E0+KqTzHR{Jot5g@cxTB=k^8G}8F@WC6t}7sE zMLu(v+4cc>xX9f`DX#TW^-sW;++k9r5n*Na_2)H-L(Qa241fh`&!?YqhKT;9p(P<n znWJO~Ys_;^QP?puL5b`aqUAf~RuLyJ4O^&A4tqgEy^6BW`-)OGbaf@XAMz55p$k@k zfB${`%VkYWJviHrI*mcDT>A&ZWuPi05}u*25(F;1u~8M;Dg72__n~lHe@(@=6m+h2 z;T>6z+CGH5zV)ABm=&`#5H;x)rwHak#iAM9yh`~zEQd`nMIJ>ix=#`!PdWoZ_ZM-5 z+-^0}fsq{EVzgp)&L~hSP;}QEMBWbqcNjA|kc~SS-OBAM#!vx1GN&75hYv8dOWgpr z7wJGbH;AwxfG@!uBvoVV?QuUy^b!`rmUQ5^C&OTTI)(NxjfP(<<)SfF<SW{hsMg`Y zFkJ38!?!OQ>{V)2{v`O_&t1Eo;`p5Xz4)io)7gfdhYBkx1<6L9z{X5vr6t~d7g|G5 zZas&vKaG*LC8U*kcu2drR40ra-RDKD&}0>h*C@)p4Y1Lz$j8B333MfufV(c6ft$+< zCX=JN&DgNb9H4Ahx)Q*VmFlK=sS2=h<B4z{N~kZpm$H*10nw$5K+;;f24XUAC^z<Y zGSmoE&kqb2I&qxD0R&FfQ8KcS{JUFIqmGoGph&JZ3{jml3{f-EojyttnE6X{<}b|{ z$|(=MOu%)LHLuLV{X5OA0X>z+VvcRZ>yGcaatzqn1`yc=_^-$Td#}GVXMv&?l~3hE zwn2BXwgBW=@Rx=lReGAc0eFWp_!LcYE7#i8oL1{3JRGU_1LWxR_ETB&u1m#}Y4Y;1 z>Te}zPHzIfiGIZSZp~|?zFAZey#KH>ZD>l*!&4?t);@H1nWX?R8qU+U&7-IBr;{*S z|J|NTq56etdRs3P9J8Mrc`TcS$1zx~@{27I`UemWKFUjh=juKf?Bkl028SGkkaArh zV6d4FiUcxuW7HJ_17v0z@100g-;@t9_M7e%w6y$&LYR=Vij45%>YTIO!>GuVz!1b@ zOc(rd>D`Y&n9EYC6L(gTjn&lh&)V?I5B}2lL4aXF=>Un7-5!Xet9u>LCsY0{@A%tY z8p?W?Z|+2FJF0M^wov@5+=Kg18GS$C5|D4kDv+IWWJYSxI+DzpOVN>d+rqyBW(iez z#zyu-(YFlCJ;1rW2TwoqPPlMbHifF3`&J8!ZLs7uFHLu96MF?VlX_1^;b#oHLpfBH zlY++Ne7t!x@#gaSuYW&gR~UqRv`4U!;wN6sAne9mZrm4-4JpemR|8tr$~ru@6KGfO zA@r1}4TQ37c6h|nNT*<3G2Jb$_Q$2xiL;{3K`wxgKIa~kUHNkXJgbc`8RGQ7z%jXh z0WUk3;^sW?<l<SW7%+F}Rh2CcywdUX@~LC$AL#Lg{YvcIc0^5|2+n2<;V352#lQJ$ zdRm8d`n83B9_y#RpsQT-p*P5K1@Ob(;~o^jt4>VQ0&N*F`S|s#N9Y_@#Ki#sGlvp+ zDEq)$k9ZBp6>KNJInjVib+*u9Yhrmu<45D)*Re6knpZBG>4qA+AM<GcrFka{lyV24 zWnU2~s%{F~xbIPDaL-K9xcU_PD2%lp#av4U&j&{~p+W5X_QJMP8M1{nwRLK2ACAk% zzvPpJ0v!u`Sz|QC-0NESs)d~oSR&|cl+>b}mOfrQT$7UOwvpBpA&!;g+ck-)9AIpl z<Sdv9oFNIwjsTKv$FoNNsyPYLmAB{Z^^D&WyiW;dYgre~p83zJlcVQlSj|aKqd^hX z%<S`<Nj6oUnS>X&D7Oz#zIpY?*cNu+I>&YT2T8|XsZKF@z4hQZ*W2q42@I92|2jsJ z|6Z4AG8euHM8D>6d$9VA{I{wRf)!<HdV1<!Z!VcD=q)glnrV06$(w%2mwz|#as5nU z(LY2>)-&YDo=`DNF-G0k8$V^s7$5?JA2!`zKF_3@w1bt@q=$EI_UuvY##+XP0>w?A z<71YAStryXo!HySt;sgzS^Zl>*W=;#rm@og$abT(#EXKo!=B0Y6_gO^x$rF_B(}!L zr#<KaKQ+Eg)!46?dqP^F^g53=?&X*LRVxVeQj0V^^TMz%I8udQa5pUC;P_GPC1jMR z#d)gVI*t`_3y7DsO#CdJ<M#cPF2-qF#S)zH&&fSg5ZXuO8`<bPjOwr8F7c60?oYD& zWMciZce)Ho{7pRzq~A2+sI(FQb;ulw=ZR<$BCoeiCcMHfEzMghZ^(+XC<_EeQ`uG> zPW-&NDuCcj7IxluKQ@AB&xwukBy4Qgw4QhO58@=KHBBL}^VMIz&?b?4V1N?KnuEkj z45xKKWBEI+CGT8OuBfJ61*RTl`9x^vZHgLUQ_YIx8ov)>cV}Y|8P0F|CGGhmAeDAX z;xRZ4HueSJ1Ejq!Teq<YUk>*asUxu@`N~O8Lib+^mB(`c_vx>NP>bbcgatVZ);K$l z*V(8OEqM1}N%ZIn)o%zPK8P^&CfGxJ9BxN2YTT!uudW@&-{u~?($CtUv^D}srQ9b& z97!BKX$tFv6}PmYU=bzsXNC_y_cY3YL-Bu}C1-$I#`7wf2dQQ&05B|nV~`{+9EIgC zO|mu~baFw5Qda-J(TxAMHD0O*jr1aHb5SgWc?T(m;E25@dl|V|nDdO-AIwdsFRO`| zTB=|!=L9MmAy)yrv1U{IK_q$LQ4V`R@6Fmy5xVnpJ-BZ2*kNY~%zSJQhT9~$ofbQN zv9tO!7WG?z7kB2pyqL37v)_A2CY17=_%Nx=-NvD{v@#p%^kPt5m(O`7kw9yf4=9fg zi38M#DBv<;p9f%OEZaON3dD#o@J&x|Q6FRS$LRS8=bpX)PBBU7cl)cu-k`(yi{!OT z;oL9Jclt)rJ{$f1TPEYDu;op?IXhM4n|&Eq6A~z@VtcN(9-WMt+`Omt%9UQzW^gc+ zW_2<l+A&xnPTgFrp)SE`ahA#Dov<b}s04+O8b+TfBR{e=W+R7@nf?1&#dj7|5!+Z^ zu00E`4$AW}KaUIevHU>%vQ>?!*d;xAKDNN*QXYy5gr{glScQzNSP3{r#c!$W6+s=k zi)SZi?&)@38&Bku4!X@XW50I18QE1KXV{oxoTWW_x&E1YJ)cB`ewd&F&z0Bb_e=pl z)}O$Y9i;La_W;Red|<1Fg?G1GK8`DUM{i=R)DI9yPsjiyseKPgX7K)pxewG?z7_$P zYGAFg;H+Em?cMTEIk&+IY!%Qj{?>@fy*}dyM3?=s;v%bGS7B3mJqCpzs#;#gQkq7f z?3%pDj=*^V*i;4N(eU%l=ZMr0&Bt+D&SG!g1w+o{AvnH{Agl@Y*C@7x)WrKR7hT)- z`lBQ-F_JwX=_*PEevL!`@l`^SW7b<;cQ28R^Ew%SUVdG9CE(p+##rDvP}dS5!Z|uL z9BjEv{!3#<VnKP$H&vXK(l8_RjP>xwibUn|dDkOtHdBCkcq19i6Q#I>8Fr`+b4AB2 z(ZQGCj0G`G*8a&unR`OQM0ZuA)U`MnpuZQ+dJkH+T&pbeJ7B)KvkScRsycQy`xR;o zdRHAhJV+;abQ<ZWTogva<$RBa>s908<Hi&!53Un@%r6SOmkblBDt5?7gyS58dPo6o zg(^3uu7{fbp?CuKGAzB9+}ht3cwG%rjxZc7CaHueY4A@>xS-ABZoa#iC~t6E^A$e{ z%0pov-cuer?;uSw1ST5pFUHvq-z-9yLckN1Z>W63_kk%$Zx4vf-%8N|<Cot&N7Ith zjAVr%<|CQAcLV2xkM4!bt45rAy#bs0f|4Y+%SG=S^8mWT7Tz(CcC49UR&4A_x?EIP zc0Tp^prl2}mYmxeD%(UHh^jdt(N>S?Qhyx~G`{!Nj0*9(o_-Ai3i+%3?3cR`l6VTi z@@w+;{hX@_Fi9J+<l7=F43_?v_qXi<i$$s!K;Hs0!qawjNXmJN>mS%}U#d3K7lZK4 zyXT~8|9h1Z6GBB0(xmJr8yw}%=%#c*T(?ZkdmkOaPk(6;ybl4}^>gKu<To9vp2d#~ zpD*cNa;@xs5`(;yhweF<v$LVLR;(QtNBM1P+D@$&Sv~hmb=vuP^iUaldkz$4sVPp3 z$S#|P*LBMq`o?uTp?N_-<LEk>M~)}jJ|Gsq@e>N5vU_pN%DgggVAvWdk6vQ#+&aNx zlIoL{{7%ZxaIP(fURlEi@x1msee}=*Hl@Z_d4;J#AeG^K45?nxE6Rb7IGP^6h4%9< zEfs^LPnwgc3vJ`Fr2&2yLoVFk2lK-Cx1tG1mKt;#`!m(>H7jGrJF`J*WvPB4<Q{YH z+9p-0k0fj?0C&(mBd%pOeb`|B^TJS;VW%?}edjzDsDg~!_}o)wHXvl=YVThffzqJf zp6!Uqh-{@&_%E1p(hG^&+H7a2pSXf4g%^t!^(HVwjfnm=Utp-0k*3YfEl=f^&L)K) z<v$#)BSG6(=htWG801jTr8g!6uhv(+7kl;n)u*TE9|-nu;7cq3_Qv2Eb5HaE&#dbd z-OjA%fbpvRg?}B!6-}CPt-MuX$)U>)jg1~^_Vurq8bW}(L(G{y^aIK?4=rbdL3_;O zqJ^)08%DbX;IrlKJ-ZSirT?4nLDGfkahLslrE$2(c6a(L^N8<y><Jx7HzoM$8;5Dz z^q7#(_V!8llNyAAAlk%jn|cx`%s1YKDoH>$yy6?uTzSV{k@)<Ly%5);2_=YlwhLlD z79PK*AXeMwrS@UsA^nfU%&dQJGTEwmfYj1*xfc70REa8c_xH)zP^{Z!pZ?YPm?lur zZyyyvQYx>T6&Ur9>2a;EPLu5MPIJD@I@S_MN^EC@GQ&me_2Fe*x$dv-7AZFgo4ERF z_sqWW13orD*9SRe(FBCvZKFV!biF8*c-)C!?oOmN<gTk&15YvsUM$=r+=;t9@K|FV zCy7!bFCq!_imj}xIb6-uzNRrHt8!to?1PKHdPS*6<tTbL2N@zb-nT-^j^xrCy_fCy zR0mdH`_oJDnKSRz5AV!{_eY-vwV-n^?Q5K~OEJ#DZWtn6Wh$Dw+L_|QL9%U0y$>KT z9dAuVat3~Y7M6A#5WP(sW;ex0$j%S2yi%LmQF1({LXm5YK<+8(0f#yrMDhHp4k5wt z#ZjAP<Kz>wVNpINUvhC&z369gQF~N-A4GSA!pAAh6ZmvUae^fmre2ViA!>1yU=b1` z)$kwk)cDyV2G{FpxlGznp>mKogJ_$JGQUdq(Y*V$bAL$(c<DWus|*6<$DH{ivR)~K z2aJI)lX?~Nez+v5c!0<x%KB)iFx(st?lfJk2v+{=yYth>FF*yC<LdEenQ~B>7PBjv z*a_M+a(3_S%$<aKq;Eneajv@oq>rA<UWJYn?Rv6>*PKW2M*Q5+i!lXhkr7+P7Pq*K zah{LMTq9)GP5_caaC~;h=5P+CEgknTM(Z8;LIdA%P&D^vwK!kgO}ZPCloxJc`if?S z=8F#yF@1xXt1r9D#lVs&`5Lc!42hel(ha>(W<@^Nb)XV-5!qW)Tl%^1HL_8_Riyk` zC=DqGMbMD4C8G$oQn4O4@vc?F8*Nr-VyLcDjTSgNIGpPT0)p|A32w6~O371q3kh<p zV^_VvmVZA?_ws%Rx6)Doj<Mw$uA3>KmHlysW2RbEr?qdg@^oY(a?#%Sm8K9m@&V~S z{7uiSR0_1EE_|*!{>je#TTPW*AHa_2OQk|Dju;JOXgos_GeTmYuD0|6z_;ASNiAaP zkThKQbQv#!di9rP$E*Pv@fEJtg}a0ZbS-{1$^E&&#=upk`lky=SNY&(lKJL-VqJ64 zR#M)ojp9r3#3HM4(T|OjZAo;RCwKa+c`jw8)mc9ppcj*0@Vxl&oYQd3Zemo<S?sp@ zy%q@~cVnYw;}a`c(To5s-<X%5dsszR?PB3R^R?9xy%r?p$YN`QuByq)yZ(oaz=QA$ zKviaq+}mb^>lqIz2C7e~U48cUZJ2eZ(87Gn23A`KZV10XaOr74t?}!{KOU0Vu2GB5 z2i$8L#zD@{AFB1lT6l!Az>keI_Tmi**Z2kduGEK34#V`to(9r|{08+muk}w#sp-p9 zV4ZK|^~A1xdVDeS3k;}3)Q*wRsilzg4NPDQ;IUf0)!U+ANB1F=4f)hI(6wC?nq0rz z^0U?R)=bX+PlR?WInbjNt_rl7vs~zw2CN4@dA3I&(6IgTGu#W);bkEhc7t*SUnT|E z;!`y8r>46C#J*YIONbn~)WB8Y?af>+ZX0dJ+fGyUE?;cUXUoVDe$p{Ul_yRgTXgMA z$vbB<et0NWm&#(Mb4Z6SSV0Q!{iWHn1+$Ywsb>y7C8DILqQ5Ki@sY2Ugc!RZp_fTT zjR4tZ`_s-D6Rs=awrVCJ-c!feFGCJ4B(F{f36g9bzJ^%zjXUo7*b;u5|H>7}^{AK& z^#PQ!WMnu%UB#Itns`MkFCE;nnQ=Mc5mCObPZ<fdSiv!=^ZDQf1dfzK96VfYMxJua z%>Gi|y5e8@dYne8IuE^V1qP^XH-HNlFRltYXc<=@*z^+J+Bi~gRUi#CYkRA7@Lmpd z(L7I|FL8Eo%(yL^qcca04EgM?GRr@-_%Xi&2yqg@&@VVMJ;dpttiM*(4sSZue5;F@ zoRqH-2|p{6c;~`>+dzCh1Quv!lHl|tj)hn7Qb;$vr(%v3M0Pc6&c#PYRdC#IN?lfU z$ji_dN-$1)0jHFyB55dhN#0Qi3zB#?YsBWbk+;i}v(aH6DVx>aN7z<Vt62rx17bvd z=1m4A1*cmzchAhIr1>)mv-Ty_5WXWs$mtT1e`&rhkfWdb=8A5#x}NX|JIE*6tg6fX zFXsO9tLZoD-bGOmlq%AD2bCsWX%Uqs0xC);NRtu+(nF0(?*ak}Lg+{dk&@6s2t`FY z66p}6w}cuX<a<8uGxiy0|Mnm7JY(?2R~T})HP>9%Bn<V$be{&411Km%<n;Pz(9uNd zH&IhHZpQgX{~T5g-KHeqJg?mXEz0h7)M?Lhou22Jej1!tg7ay?>AQxyOzi<N@NbDv zFe|~Nj)+;+A3o?{-cYw1?yf!0p19(e?Dsht%QG!}E{&^CVR36#MoFd@yH8we#I_+T z9#{rn%YTW|>b~L2&vH{{@8b8U=oRX6>S>j(P=K&ifHz74SrOW6Pvzs351peI<o>3q zZt^Fr+bXSf2vx^SmJo$vWSz7;9TPc)be7={58zRGtQdl8Ov#u-JM`X>QA|@uv+sWY z>jh4!1Hi&gM6ki6@wCXL-K!pR{D9B#(&uO(`gf~e>|xwxjkrGYL4Z)M^CbBODTe_} zL(1U45u%W{j;}kJ{aKNIa$TU=qL!qugCX=q`^|Fx$X%$7a<G86k~aEgK4;?!TZ`@j zMWNAomf-%PsgmyraH6}M>23FE?9YQnn^F>+QP?o4Z-H677h!r(@EzH|==ed6z##fx ziNF(-h8o<&@~-u|>cc$l5mwR*J;YVv|ET6w+LUXi@9q8C<Toh!^k?BZf12@QqF{;( z-k!zY-QpxfdW~1=`b>tyI4`k*(APUlea?cV0G&m<JGY~a@7<DQSeq9aT7fuyYrjYo z50|ea>UYnx+H6?&G;6AdA-_&DO5j$+mTfT?fZj6>Fla0>zeT~)^+thb2*bR7*{p!c zjp9}}?8y~ggT*(8b8P$7%&Uv=9*xRMjmnfb)jeCQ7DLaK{v9Qed+^;fxH^EzC9yms z?34h5kvE8p%||Ukyx(3r|4DsN{64<J3>>5TI$Tzp4v@Cm=P7`~wbg++k2w~aYPU$Q z`?c!zi5zr(v%o9zp`y*VyDTB<tL<0*z$|*Kz2aQ$sC8Rv(KyeAx<*xnTtZrPqeO7% z;bt@VlSA=z7~)|qy0+nm*Uc%3B;U;_s^|YZqB~HEq_X^;B~wlkq^tQe?n>c+S0Fr) zUy*(Pmmd2A@qk~&xSS0^-tp~l<+X6SkyZ<&rQ1<6#KRokI_D7fOO^lp;3QbcdYEvG zg$ClaQ=#~dtFT=wbZgtM34;5;GS>5x#$BExlnF^cq{0^FvC<E2=4#GN57W+-oxA0! zi8--7d*9U(Ed9M>(UN?JC|6VMp*|34(flDhvQnepS6tT?ewltLzK*4HKFZv5RW7RR z;^!5kCVrOA&+)rRm9`rPxi`1vklRRqn#9RCOWhT^$3H7rLIXIE_P1w3C5e)s7W%gx zfuiO581K|n2)4{-=614d0pdk>-tU4!vH(%8sOZles0YDWG;=qd!{*cFOCN+zHg})< z1A;s%!rz|WBfG3yh!vvhYFi(*Ew}2+BLmo%I^ou*qD?@{Ao%mC{F_$Y3aj^WRR<@l zv8U?2-9o=CqC+1LL_-xwR^_DhuBky3EoQhYtFCRt+s`@m`Jaf9c1K_HSDJiys3TOY zGi53FsVt9QEZXWXST6bKy2u>Mb$Z;B1r)PK2NOB4c&(^A@N^=os`IubYT9>t;3`X# zX#u}Q4KT6P-N8hH^r$0Zsx&RQ^H{}4?=xtKYS65Tvrc^lZVCf3puOfZl~L#bZMsjo zngGsO^kO=1c|brTk=fHSfn3rorij;1e+46e`*zqJH_@C?VP|RE=?|5Xmbpf!cghNe z5QV<+b|jFYQ2#PuQjBm|&kO(HDI<Q<#aA+b{}$jDozm~xW!=!00zB)$t~BlW-fVNX z(6s)$(I>Gv_;OjBC%o%DQRtkbgB!l^073R?5qg7aSp+8|y(PLw+PaLzV`N6-{?3__ z8C2FdmICK!zLFA%4Bf}=A}!+?el{Op`Ta#VyR{F75Ah>~`-p5(>tL?}JJL6y*l=MC z5xVc8u2-xKD{6c^{HWb6&Z>yQ$ur>J+|VT(g0*%zj#D0r<=yUWb7h!i^Erw3iSV{~ z8q9CexMs2RZ1~{(u4HGRmq73Q&MqKzc^taJ5+BS7{Jw-$?1H*5KXZ=y<NNjiB|qBE zNWOu1RQJJcqV9^wJqgHq?TG+<!n{3o0Td&6rK5iQ04do!MIHk9zE|>GuNidG&i;b8 zf#0a`DSg4@H9Y29PJ9R@cdpP3szEnXf>$Zm-MPYr36kX{>(%Rleqs+`gY@A<Lx%%? zTrv!Rm&G0^72PD85&g;@k2`){S<$J#?Pz*BbOiCGu*U!|xHTjR3v{i-{~@G7*deAl zn8p&rdNV3s1sZOX#8mcnclo8lTR;nu30c6QEfArO_374igxzS$m=?MeT_KB{{&pr% zVCj<aUU0hgtMm^td;z#`@$=LqH7qX$UFv2%Fx}E8Fd|E>A904!Om36*=wAdDyte4f zMwXx$aRSNC>vAv!tqP$2&h$68)Pia$NM)8R!HdcA#tSiQ1{Y_yxb62Gg-mu#v?}%r zJU_?LSQI`1+n_?V3GxZ8P^2v>Z$RGvdeK{Mqu0dCW3GGwjhl~zE@^X6_eQt?zT+Ig zm~R0s+GrQ5A&j$4nz}d?ej9+W%6#q4;qR+=r3(G2>xGM%A&U`dYfzBp#BdEFX9Uw+ zfpX2{<j<cuR~Dm%+8kg)i-B>P#*20!ORxAmxi_-~-n=v4U#kh7x^F)wKOos5Ns!Lw zWK<YYx<@@D<BOFXR5JJH0IUC8$EKF_I{WK29_D9>5r#@9-Wm(J6(-sl`xwMRr#qnw z9yc+CDdS2k9sT?JZ!?<<pWjQ<>jg_MxVfu3XxHZC{-us>%T4!AeZC4Sy|e2j{(d+6 zf*`}?;=yp};h*(9hTqzpr1ZNjW8~)*9?d2t;n`u!nT2P)&UCM0L$2y?g6DO;=h+UD z*uVf{TCMvm#{}^>D&XSX)RU<y9UAIQ+dlFQp(vq)3-v%9egbsGmi_V=2*(kcLgl&A zT^P>HtU&Ya*Az1zo}#1-lT}AkE4tu~DisDTT^9&LWk^Q+eYTIz%&dLSZ?EaTMsTzW zl#}|N61J?tHSj`YrKxxW#^m|f&3t(p|CQE1p>jkX;tv9eREFQKEKS%~n<^fBR6^DF zY1^iQP^<|&!F0U<VUAVmUwU%Nf>u?wXBIw8Zu3d=IO>)EkHx%|b)ZQq9%2HYod)NE zjhDQxScN_y<w~aFuXrY>6uZBkDXCZD?oJ<&DGKV#k2yr$PG-4k9r}n^tU4$6o7_R` z?iiw=6jbQEM;?;%?)!AO+2dy&*x3fR8ru%lffHH43EgT}k>6m>-3m%fo%dFE5^<Ge zr3tx1pvAj3m0bLI-iUVcXV{o%TB81Vd39bqF^O(bs_WeTQ8H!KIQ|F{6C{WaDR&HX zT)p!|ihlyI-;%5rum8odJ@}gVr@T>ataUozn0`<<_}Ns{XRfbS1HiE{v+yxLh$@I` z<GHDn;BSi_)x9~GlLe;1RMEX^C5i3q*W))JC3_ICp}pc-RTj#|`?}}ZPrk}rmd#wz zy=yn3kScZdeDwb~9xK<inZ`BQh!&mDN?_I!SI`D&#K)hSyBN|41UZdcwBopk?;u~u zbb*(mer0BH;W#lD@k-ILrr!LzF$*iLu1hR$mq^e>sNz_sdONbr8e;ufJ#5C_&6N)3 z)EX?5h4$=tL)OLrdt>tbZVjxgPRhS5l7s|e?^XH@xzm+yffT6T+L>atl%5j;6Xjba z;MI1JVDB2^d%ci$mq;&#dgtR++P0@a1<FTK>!jQw=GMY$XXRESOeMLUGnO7ln^<x< z48p2*Nl)$RL2H-X0f)vu5Es0yd5gj~;s=@5VtTcujFfa@oHj_lKJWP5(5cUm))2Yr zj&J!F6KIv6dcUaPlBJ*y&9na<j$2!<?sF;IOsG(|Hfu6pu9serf~(S&O`|xKq2Ny6 z@>A`M-cYSkvK`(uQIRy?qke&Kj>dd`C5%aXyelI6nRuuoSwN`kopL#!38x`WyIV_i zqpsIxGXWK`jL$tmpo*#_ffk{zofvgYO68nniKl1MY#T*Eyw}8ePVx19mWejnctXf- z<UEU}*;1SDS;*7mrS3qBrzWqq(Nwkig0zYesn5MASI7cmhX(ci=lWYykqDnD=rft5 z1G9nPfDQr<+kDs%BRrm;ZE$cA;n-dLy5KHTa>r{6_s8HVY>2BC^5+%dY}L5&<EOWD zVIFP>ZZZ?^dN^y20g!#f((itrf6tWNsZimkYl^QqfHe<&K#Yk4Vo33Ja|rhmcQxq{ z+8l?WPm1RgzS~2=$Misu%U6iHWI@U7J17eJ7n3D4>wgn|-(G_>ip3{)EJ~1q0vA8J z+Kt?uI<;lFX_@+#+2V^P3jy_rIFCi@KQ|UV>k1dnd4TilcW}!R2^1eD?x~;aL2?Oz zlX70ry<K4>)VLZ}$a2+ox~U;^7QZ(t?M^GOq#3$|G6CErz|(em5yeP~*SZXwH^Yn_ z*aR)VRI+3675mT?<#eF(!vl1oo!vd#{wT9V^QbwTI;=2E-`Q2`j;4hRVSaJ-onH!* z$1u#qz5$4j4ma*j2wbg-=lJjjJDKD!NK44eSU|Dp7P%STw9?xa-glns`S>>tl8=%h z#Vi1UzPfk|qA51_;RKTj>?z+g-^fSLcVWFpFRlo*qksOK7eX(qD%k+&o_HNJO7!)w zqG{$;P*m_dc8H;KVTjJXnW+k?I8`t!?VmcCpd?hOP#xcj=v9DqbP3)XR{^ZUZgF@4 zHA{n@?by%vWz6(iXkxvG^Qq3_f03RL_MbKr)Djkm=#D?DMB^=-nT=k!8}-ppHAEYD z6RLHGJspIKJtch@bMv{86f@ZoA}aU`etNh$ce!C487f_B1F89zozW^y(?$L9PuWkN z@O*00#P(wxa%%tnI5agC3~?8`G|0~R^p1AMBAA23MJVg$g@q}epbbUnv#wcrXgkvN zH9Q<60JE7<oOv>61lGDZ(0U?AaYlx91EM5$gCb7bCMtB%?LCPC=Mh)@j|w_K)eyMP zJdl6stW7EEVsrLNxCqP^)`9gZEBTwLmijZxJj*+5P3ry!Z=ma?zBd+lc6S|l^rVbr zZ}9}s+deTMu)**(l~J-h!8A@*(=-IIRLAmu;K~zj!f?LEzEa?*(rDnY?`<<_1V+71 znTwEXw+!=*7=u@G`~?dfU!Eo1bY}N@spn6I{Hl^^^<5f@pW~VcHC}|1^p$s6f@+mi ze)g|wP~GkuHa|`PVzg^Qjo=j|>RzV8o^r!gyU78rPeR#x45$JX_@e1Mvf;vZpoRKG zRrYfGmpEUQeYqdz%i&KOhpt-`90BR}t!902W-<dF6=xy8#Psw+#cUstjQnK&^2*H% z6y`F?T7T3#5Z%Fz`~;g0b-%j*s49)xo;|Qx&pt4kk80-}rwF-IuI6dPDI2M=-Q|RT z=C2tf;&u^(EeV!lXiW6nr7P?PV!8)ZFX%H{?>{DVbkEb++sR`S+T_g$2m7rf?#(ew zZgvSA_xpaN!Q<;z31vO-*a7BTBCVaYE@3iNyt)4C3+G0v)t5T2;PcOSe_nh;^^G09 z-w_AcNnr4<;D$GTa7M|xBHJF>YD9UDPsIz&`}fx#XpQr~Y`GE61vVv&bv5f&*GOjI zW$D>fkB`Wa>7D}Kv&?WE+cB~->4U$3hRuYg6Kzvq@l448CeLvXpT&Pm>J4}NakF$J z=|{o3wlLv?dAN9cL(PcpU&UD?WjyOw!M7<?*$Zq7YF&Y&AoK*@spQqZHtxLSEVsSo z)Z#fI;#=ND!ujtx)PnSKyJFvwyGt_3HlK$nSzS=NjKK9)8FX=KZkiO#<CwhXrTs)a z>c=amM4TA_h5>b+?v#JA1i-D<#li5{Eit!?gH6#ZoOcu&PZM$1yx?vOhy(LcvJxb( z;o&#R{a>J;0HH}g!WqD2OJdsF)svASKF1Bmkxql3i0S0YdSD1P&Iu0{>){NSBX}Y> zQR-7U4BHBSS(OR9bIFPDI73kG3$h4du&o?c1X#X_)v4!M=Rht^e_7p*sES<~=t;`2 z-|VC(MEWk!RxTG_a~S65AZjS`i>P}(JP!<WClHEs#>ol`n_+Yox4!$W3o-=Zmj+|* z=!@0)zSF9#Eo=`W9Cvy}=ZQA80F)|YeXyaR(chYJ-<kx(qQK3bj!yeX22|2bSpxwF zK9CdTx0xJ#X7kjd0wPE=qLRYvu6?~N8VHf>p7iXx$Ifi<^SF1(?zuCpK?h9)MWY3H zNww2+T_Z|T&xZgf?*cAGJrqV*J7aq1CMbc?iQSdEoUA9beQ|wg)tW*}a82?z<(-7p z;lTwjUB`-2mCx0`hwpHDqdy~TL$Z%}S6kuvpm<G@FY8xl!m{x$77d>nPt3#sq(9wr z75tn;9Vvy#VnG;;!?V!q7f-ooCt5TFe+V=Zf4W6kIHn;E1lnH>7lK7R1zxIjZ^<U7 z%w?KJOjC+M?`LkhI*6TNZ&!d=$aG6AOt2Y9@Nujdk=lM*1-aS0b?Xvz<ix3QD;&K! zZt<QBCU`{vxVhPzUIH5v6Yr5V??yS>ICsUP_EYl;zpBi?wZEdweGMA0W2`E5+q`+a z`!1r7V|LA+NmCfXw9~3k5|mEzHG^w?k_*g|a{mdOH{Ou1gp~x>#cle2gE7{$pMxTd z4+k2f1d9)mH~(kND*yLyZw<lQttMz1FP*_@U>eUU-O+rkU+gzTd=`{4o;?Z!4N51C zYV*K4LtT;U+3+5LFi*ef5SxrlU-3AFk3X<CvM3)Z=q&^Ty3N#@Foue~CNbf6R_=G! z8?$354o%wJ(qr;Ju!wUDzXKTCRX~C)S7-0LR54jYvf^TPJsn>#+GxS5LEpgF2op%c zrY(R`zx?9tWrGZkL8X6NK`(qEWqyo+3LrVC4B)VE23z}@kaE9%*VLh>y()LkA!QZT z69t0lMfMv??;PtI(iXq%uo|(RS`4ZQ@{ryx30(w}rfrD51;x6uAF`7$S!G-X6AFR{ zbj<20<<${bb3r8%9N=4pptx*dDcGqG6PV)w+(zg$yk4<F{mx4%#-(IwU_1<jpO4!K z6<d(ie-1>$YzX&Vs&aN#u2nAt>T&xLSVw$2KWqhOGUhMqi#KUF+MLxJ9YAgiOk8K& zmvK%s90VFzyJS|b1Wm3bBY7rLI#^q5)ZgG`+TfA@v^QhwB?%$%olC~S0~{+LPWgiY zu^!5$-=X(L`igC4W{PGWD)B2R+c(ResJylw7|bG;Ey-n+Sp95HiS*+OXl`-76CITE z2K1i1Swk{nj&LF}^kM{=R5uH;OgTmzb<yz}g)f=82+s$Ce*=j@8i<}bRZ>dOq7eP2 zalU)7ajTgJ*YG<RcL|z8M%F*BU#cwteSwMW4meHkyB3p8CVD1PCEAD3T$wk>-y_Hy z&Y+35%EjuYAiNOW6nNvSKJ6EjEE=zW{D5dM(ymn--5f9dExdEdK0%$*;_Hg9L@>eZ zP200fFv)$QM(KPGpWkCU+8jw1*gWkKO%YJSfj$4c$IG7(tZGJiX4;L>Id?H(1>gEq zLAW6Lz%wI6u%yJw{vJz)KfOu*5o1Bjex-lv61S(ErWmr*S<SBBN&TLdZEvUkDiC16 zN`6dOMts{eX6OuzJzZY@Y#qwUxo|SvLRD=U?zG|2bNsedp0NLrz=5oo)?G3mue$g! zE&Oz$z5=*vr!|!<Mw9{aL{4{eR&=Ofts84q_FO?AbFL$|bI>T}0_cs(-*8Ei%aW1Q z@XO!YQk%$-au0<`_373Ge!ky-KAf+fX}@b@TigdiMZvecu8>exb^#OkL8DD3opk3v zNh4r2{{N_k?)s*KOLT)=d$pXpYd5t82{G@gpJL4>7;BBf`w?|m?jK?^s|Uv@ZJ=o& z7tzO=eT!6yH?5ypAG1II@`*k=*)rX8UW1a2t03PT_dlXc4u{%ls%5t)sq1-(a&svd z<ShAU2sTwy;`ewoO&5nQhk}W(C^uU%W7VG9ujU3r-liyCy2tbEKdN>X4xoG)sb`6u z>Pw)Al2)c})a!qqUSE1F;+Q-KTH4Tx(LUS&U6{L}&Evi@sGntGlhC+jHE22sl(7jQ z0u_3V-C~FroU#N@lntv!C89!A7JHjA1+*u=sh)`GOE-OYInYLDEgG>1z-+#8g4Hp^ zjGa0se%hTg!*K=!#)si>*~y{XbYD@WPTr!@<tLUGZ~RVKl7)t<EowPgyOBp6AQD4a z=lBW(p_0&Dyy+FPP6sLQ3v9YuTXTG?+Wh+l>$*83QI~tVQDh3x#OyE$C9uB5hS+)o z6;qA@d<yeMpplbs`%@`Q##@Ejv|pAkkf|@IJESFvl8%^qn^`OBb<W`5#m7BaK2^eB zXRyNx*83gtf+C|78B#-6J1t>=&@no<wB1}hQKfqMvER_rY5WH8R))FWCCw<KF7-j6 z4SF9pGBKzRdR7jsoC1gyudcS}_&xgsYec-iJ+~X>GQsY2-E7vny&&X^lPn|sBJI47 z@2Ld?OV=(}&r*{g1Rmcm%2t})fXCk#yEq^%IU4PWko^ZZ9I&?<S8g*hAwGF$?5o!X z;fpKaHtfqx6VDHrNu%F(L$MI=k^1mb-CDkP3A?f4gw>b>`J2)SIWI!jS5np9Uv~I5 z)UauL9N8{NT9zm4s74XR%+vPu$CI)<;q8{5-i$sjoxX`DjcdUcjU>Qf(cR88>YosM zsjX-HLTN02<a>c?I?Mtjzpx!P+%7>1{D!!Ks-jF@>WD`&jr+Q9Q<`=)yVO_@JFCN5 z85W1GkS|kah`i$3%B_)e({?}q+9D@U@CJP->O)ky$o#TYP7;Z)X44cH0C0^njnuq^ zgnUmB$GqlD;w!o%0*pAY(Gw7yFowSM#VeXdcu;I`8zvuo&F{?IFP=^OOHR1qo!*_U z7SxqVQVXC-Cip>x?1(b$lEdh%5Lj9BJvrGj%c;AHR&h_S9-|x!ThEsCW6`;6_r_j@ z%82pqG{6OOA>t9sF|Qp*h4SquT2a;{n<WM<IMy78U~j!IF^BS%VG@Um7E1`Hy?7SX zaWEuMIU3G8fCuXTEXp-vc$r|GxN14v<xAwBy?eGr;t}Kg7Nt+X&zG279}sZ8P<b=r z1H$Cg4*=8@7)X7&?n><jU(L;~#xQ0ku_dXV0k3Y}DoEJEHvNqC<jLgK@2i=<pF<Eo zTjt-wCn2u*FPci?UW=Py9tK;Q4fDL^(UPxY&T=Mezy<%4bFcruDP8s_wtuw+_FCb- zc;yclyvrmK-!D~)CvE__Caktn$(qtc-qk*fY{Xl1u9RU-M_t3a6{E;~aVFMuKAro( z=m}GxJquZ`os}>X><c!A`|Y*${GOQ)5Bj_l2r{#i;E1V)>0_JEe_8OZ#FTm{b>B*} zvk_0ED>XpAWxOX5tCwf}<|34vDwsa_O+MA_l8R<zqIF(Ykb{rXrEz&0#7^yd_<h?} zYsQ*TIc-*({vb5>fmvzH-~|VkOzz~yYOXGO=GL&FFKb95Tla*8x=E_I@3i}=57Z(J zbolcAa`oK<)T_d#c_A2#RD|_)FTdHTmcvN+i4_q~)_n~pP7RT23Lrpr@)1KA&#dtv zfNkb%41L0NVI>wkK<yv!wOxoL*7KN@6siyWhN~V^RafgdUt8<fGQ1|u>HlnUO7ugS z7FKv<`)4AZWHZa$FD(}ru`m*2^iCt5w}KYW#jq18&;q~^?Z-U*N!F1yTDy#+FjYM0 zPkhtnThqd(1X*TTvEHeb_Twkw>h+v8nx6Mk#kF62*WOs#tETP&UnOOEFSU7|b)Hf( ziruDA??*M`RvytmxcZ)6$kh4(K?Cz)xdH?C=`~~<z4hd7-8(-i4v^cKTmFdXZEyo< z^I!pOUd(UVOqVo1q#piMf?Ck}=h@G2n(V!2Bv&Hu*>*F>aom>jF0HY@x5&F5-`7MV zX@kc#DJktCxE8BvT~`Pbx|t@L-Eu_Vg_`QwxH+RXGhv)}azbR-ukrBdbo&J6i^Nd% zmaFz5W~8VwKvzcn+8y>&z!%sT178%Y9eW~a`SR;H(w}=WTF>#l0^Np^C4!?q$+!EI zIXjdkq)flk(nDcRU$+0H0-E3H&HTJT1qus1U1J{M<U;kA+QL+FgDtgxTx~FZZ-Z@A zxP0r5xc@hlL1EK?8MXsTER8_*-O?X(Y;5ooJ9m7@b;8c^GxP}om+a5NwyxfR-PV6N zw)3Jcdoai=dN*}WZ6OFcr#?+`S!C#7a6cY{s8??Cu9V!$J0fPe`OyA;F7SalV{*hw zP?#_ngIA98KNszLYMJcB^;jmy6r&5St3lV+#19Tmam$K6j$`zW(zU-^6raoS<X-*- zeFu}mrW7hb3NghJ0XX&znn12=cbhJ>Hc1AtJN?lH(eK%@EP8bt&C21h?b1Y*NbReU zTOqPqzA{8t4W3_4@uyT&w3lREU?}~RZf)-0enFp$1CMHLxP-8621A>cdD4XCqe?>c z8TNhug>lz0?OyR$k@9u!AQSX=lIgd+I~_#M+)A<$QMQC^{VFf46j9cDO<s+Wy6I1o zn0HU`AqUg%R<+DMo0%T|VS^Iz9d^a9S~|3KnxMrnYHaDtVLvFy*u7(d&&EHoVf+iy zC5g4a;=0rL+aF~kwgWrwQc0&{J(Bp_nX;;O>Mr4G(nfscbbrdpn@OakMPMvlTRFm- z6jZg&>-W^X-&M20Ddehn;3c|DEUB^zP_b`>iWC@og?#x@;Sm_f6c`dB+?j1o#g_c- z(#7VV(*MN37*Gw_6mMrN!NiP`Q96O0C8tI@krsIOp}w6UHc2A5UGom!SYD5CR30EV zQ{mM})5Gt|V{$t&5cQl;8U<ZMFs)C?#sxG0ZV5ej>z@tNCd~;nM?~1dF4O$RX2ral zx?OK^F{{69h4P!^7;heAlW6jzpjc$`Cm!G<0<aAhW>kVEPo*35dKBu#^|aL7l;1W4 zVe`Olq}*|jAkFweF8#`|$I!B}%luz`!zU+wVmmm61;j<tPgAx@QVejxZKI_tss5vK ztgB6NW>qTJ^WCd9xv~ua#C+T32)jqyxR@QMkN36Hzm#lXl$!3<s)vgVEn9*(TS55T zms+&D-;RUBN^44ITf1!L8!HH{u1QEl$GRb5tTT8p4*ms_cMGsGV>IuFCNLQCzKZAm zkj6?&=L?Pic51U=25K@a-DV7_!eG0zSM7LBF6_03v6#VFJ%pxa^cA$KYD~l7-K|)q zt()WC#gN$Xo2M5{|92Q5uUAuB5-trE5zQU~Es^8bIxch{{0@c05h3lt0yD&^mecEn zt#eCDLJ@#z|Jj)Tx#PS^drfnQFI#1eu%9Pan;6-f^qM1uEWueObkJ*05k<>~i@EWF zQx`+FeHJD`v0`yZ$El(IinJ@#`Ez%wC+b2U%G+SGE7rxU3!xI6-2qt+lmAhrIJWzZ zv|n`_A>WATZH69|aV6l#k}Kpd4b3*Po<td(62av}`kfW-P%)I{#xcgnxZLvYk-MB| zQ?mPWyN7~h%t1#e!@?%}xOR@L-gc(e;q61i`i91vy50AsmW3DI=;`z!JxCUYVGP*d zml?8u8&IyE@A=}|$vJw85c7EHbYfq!AL^3ry1sp5@<i9+-^3YhJZnbag*PnLKphvg zL|CFk=h&Ye%Kt~jW)0>eWi8GF{%SAVb+wV961O7&)d#-*BA-?4RwwmN>^^A%7ZGY! zOzOLrU^y(u)RS2Coxk9IlgVY_iDj5;T)V&@vJPpa8oP8uUa)ttYr<G=?nc0kq=qY| zi=q_tzi5jy_u#;IGH-Ti(K(`YPA0(O;ww`c#rymP)Jr5Ip+O9V#eUX9`(l0O>G|P} z!lo9?8RT<LRPu@eU~s!y*z!>NEr6t@EOh~pLdkONj-c{tlv=j%#~1ha6%Ox!RF(dr zSe~mS)HxK-&C$$37lPiMZa?)twaBv~`;mfFiWP_OMs6;C=5D{9E*lDHZ$CotkU2s^ z9GnUvw>-FxvtCd2T?FcknH#S%wwNI$3B6P7?P@t)H((|$>>xLoCg$5C>f@Tkg@{C) zKG^;2?&QpdHZ7(m8V`Z+Ax%b^^xTqpWWmPO@F$kMaICS|Voai@LOJYV$eKt;n>zHc zwQkoi6`%ScPd!@4&aS+9jG~w$@q1^d%AZLx1XG(0-Gqu7(?{!&Z$5~00@f+;dE<c3 z+d~m0%$3u21eVIBs(pSD<s*6W;WSYwi)W=}<9cBuQwY8+ihKtja?aJ={6YQIu*}m3 zws-cQ<FsNtfc_mr-(uf6lWNEDhCM~Hx}!&kc?!ln-7{6vZ{yBoaZQINK1n3hP_&$i zaZgOL1>%lxdUs>tHSuA=NX)%rXWmSJIxOD_mFiU&prG*yZDy2fO<vVbd5dzdq05F= zdLUs)HIcKde1<Y~q%EPoyn?8*T(9&Q>yhhe{PgT%wMMkVDXvCj=FJih`^FC<IPG*d z`cU?!^pC2%J-Rox*yE)cg;XmzW9SXFcddM`1v4J$9x0xd=Y@}TPU3D;OHsK_G*?`& z_U!{p*8&h-U|2u7=1<#r!2ZL@?uU~n$<o>X@0H8}tmF<ZSjw3+);coyt&x6nrseN9 z#?|rc(bU!dQH|D<IhO3`dNIf8B%g!X9(RRzPo12x{uE*9A`}m)eBn>1FVP-*svo=3 zEXc3!ypLs6+`48bp70*NofDo>L|E<m3X|%|K8`%7>>t`PO1SK`U6^J!^lEEQ?~LWu zwwVox{$&e@kl}tDTryaZ9Z)Ax5B#O+!lJqD0nM@GI}jqi;Fl6}tSZFeZ_2IR5vZy5 zHAu|VVNYsyH!s4AKM+71Uq{K0QEroXkorfMCa6<r;t!QN@yOnvfBI&N$0-^x+IiE) zOe`4F*7877+S!Wz=j?}TZJWs7t-u=*EHkF55(aacP!XSpvSfDOUah?FHn$Avm(d;i ziZUuhANt5oHPx%9h+QFUJO3TfJbB}ZQp;M@dkfs0#v^2#MZW37j{2s0#fPpx?XWT< z#c!k46`NG%Nd?t@yYYf7Y4aAXdn$LzFpXo6CgU=o#jh8&;u+5&!vMe^k9#YpE$jwx znlMeiMIYrJtXMw75H4^FE1u$@P}b<V+n=WH#k043&Ri-7U_*^4F0#RJr~qC%OryJ@ z#`3<mho@*RR^XSAyDe2X`qTfhfKlu7Y@r$<i^h=d{s7Qd<!MA+PKmh&#qxxj=WNum zIhWeJ4p$E`wlK;XtZ7L!V*e=SgK)C`|0`4ehpQ!yWp%)Q7UtEPC-N1}pj)}YI%ja4 z9kr6qo+=(my?n*eH|60sqEuY_6<A1j+FEu>j328%!$}~EU>sZDg@b@A<T`MNWL&|9 z`IN6=={nB*D9WYw*X4d@x}PJ&s3q<mh<RWfv!+Hx_<ldgC2N(k`#lInGe)5a1vQVo z$g}6#G<lii9KidT+YvjbJ_F>Nb;M{h<LU?OR1yaC_M~GM>y0YMKVGrJ6wt@t8QMd= z{=aVZ{rPy*;+Nf4)ljq2{>r);BaYI~nMVGr24-oG|D*C_q^M*peF^7)@fkFXYZ@*Z zU!0WVd-XU;lrAG#DX9SBwfM4N!RxA9R+b>$SpBAr1wdW6{Oak<PTy=Ql|UN=HFD6x z#M`AIAo+9d=b+}+yEz43#=~#?&!>p;0-?7F07V>LF+)n|4m`5pB<k>+AK_B5H4pu< zH#V(=2!M}`*+8T9c~xy*{>J+kfVEfs$n;`o;S|Zdce-n%$e>}~i+0YpX43NSVgHSl zW_m#3z8T&6^+&<R4S)Fz&xz41;uL(w9nc$;I>96Xn6@EQc(^YND9)Qib2tQ+uMr-+ zyxXzqW0Bft-Am9<)Mkc&WiVd}M{&hA9)<Uhj8e8@7q6)U@}1iBXUg-<{v!9vDoizo zv*?*yq-=nwy>dR~+N`(5W+bVvXc9u<#Ehct9vZ9n?woR$rro*7MT2;MO#_!B^ajK{ zWX}b0-K^;RH*<(4*)O1IVM2C|4TRahxGCgeow4}XjLhz`n6TJQs@_$O^@D#zF0jLw zNtnhHQqh<7DMX9~c;aRB70I+P)jRn56h?L~&rh8y5lgvV3%GawC8LKZ#x=c@_Zs?M zg;<d!)8kmM^l1Hnd>5dQMZPMi8S`uDV1AUK($<JJtxNs<j*XlD%;H}D^$U7b{Pg~z zt7V})1ig+|Q`JTIbDM3PPwSYndZIx|Lf)@Wm9NRXB>P1)FY>4f4u_WgM^zk_w?Vn% zbOQhLfCe|L{O|v2YueMKd_7dnT`gWXZPPTFa#2<c!$rGt?~lQeV3TA`t4>*{B4IvC zuLI9Qw`T4Ci7Lo!jc_GUFri-F-XpL}{%WW?ksX%~V|h4saQ5dhLu7)fk<~r6-hgDi zu+8>S<uE0^Wam-kGb8rA`^uG2`d)z{^V|H0;0~}6(X3OQC8^cb!3(byylWCa+F26M z5RwsDqxhmphUIIu1%;gs+i}VVU@&-f{(S+z!@1YB`G%Ew4&awLAkuu9(H8TqttG5K zWM>vLn}K&Ea7;^*!U|y2-KsbRYuLjHvW>Bfk4JWN3a8v>gU<Nx7OSf&Z|M>!bU*M> zBZb5DEcGXI22GUSNS&47pd7gMQBE$Oar5}LzjUtlDD>Vq>!n}s%hQB|qZ}1)p8L$R zzlh)crry)mv+qtAxSF){;l1P2jVm-3ses)9MAn$B1J)J9>pV&rkT?CuVAPAaH)K|P zi^hPoS<|?G!jR(JWOemKfUQVi@36vN#6(;8Ke(IpfM!5Ddsg4+^M+VuRUBF)N7WKA zu-1*PJ0u$ZDhr(D!Pkb1%!G;&7&AwJ<vJWb=A*>X)}F+ec5D4Jv>Mw<-PtZqu+-)r ztM4UjuPhwZSc`k#S?gTtRXXJOZ8@dm<j#Totk4O)7MXl~{AOYDn+s<DHyG}J_9*7S z+h0SYVtFlktZ<8SaW0i{$~N}{vh*(~Xiap1V2EvVQ?dk*B_(uzIa~-3!TW$|zHv1G z@o;`**t$#YrqK6w$KL_?^QWt90jG|kS4=yXRGMGQQ~2&roGzH<3;ABwVsr_<P5Lo` zg7Wtd`7!`6HT9w;dD48l%HaC0EW$jTixjZhIe!@~eIBCMJbrlY*6$w(<>>gN9M#v) z$Fh0|gm*!m{7XYM2m{eYeENaV(rK(B=($Uh4&9obba93C?@IeM+)?T+i^hgD38{RU z;)`(gJsZ=>j>Xfdt_JI{@htjyaql2u#&15sIC&I|Zt)n~5eL4c%J~#M+e0vqs&)>z z=eum2q9cqdTB~MT3hOO!C*b$Ot|`cs3oJ)i_v!`yloy!-vBmGhN&lv9L8n*Ap#P}C zQYeN+{~YjBER;wP3t;tk0%q+YUr4g$q>g7q(*z0PQ4XYZBaSH^*;ezD=KO?iw__h= zgHj{agm^D*+hYZ97_06+89Qi_6Kjnh)Y|J!*Q0tb|C)aPu$ryQ*O(Z%#8ejVGP<+f zDw{veUVG+j^9V<?2M1dB!=Wq!1GsJk*GAvNwy`SLhB{2rPX1ofSntbOVZn&k9Ba=k zvPh@}T#TkGe)hf%QB%=Yvz-0)<ucgMoAP)1+I+RIldceO285NOFioXN@mnong+>jc zO35tt);sN&X55cK^qN|d>29x(q3=p(>eRA?1LhQG5IO#VA1nsV^CU@F*DsKXIc5ST zqkJtDV*TbFe!bmC`?rYLd9dHBqe^>17G)TIAVPvu&V<P6&r6B&J!i8{Sj?Ov0h3<3 zHVRR_XSHp!D%Adz?)2#3097O{-=liXV~+dx!5X&=F2L8ONbqegeZ(nluw91q766of zGoNR!H)VvV=1Db1%WAJnHcYZ#&!-dVXnq~E6n_9>BfWNO=O@@l`Uwc`tpT*JYhkt5 zl>};g6zkJ9jvOzLHz(Gr&G4Xz?N;xC>2=;1Rob09JM0Qi*V^84bi=W?LvI6KaF=-s z?GK7dIw4D!kP;QH1k2GO3^XYs(-a3?+-YE;MpuSHw?R=MJsf}GJcst&?qGRBaURu} ztiRTit=$Quko3sChAE&|7T6cO0$P+m&j)&+_kp+M`4Q+uGUfkVK`29#1Q6*;n10ka z!S=Fv-wxdc2&DIY<rYtXd~Owd3J*(ko;H!WpvtWoxsrp__mV*WjugEs9;aEy=5s5A zqGGd<oD;?_c%2l5x077<xAR!&XR3VwhHb~p>e|EC?fN=f_$pa0O!tL2Nal!V1qNPm z65WQt{x+qKC{Q+823tI&dw`K5uS-KLh-zzN@A8Mc;(NOO!sahu5u}qzC_=|#19n^K z(RgpJhJjb%tcU0F%e<@D0s0GDWhw{XMBWG!+#wmHFU#TFuy5rey-6?~p~KF~A7aFm zZ7Qdynpg7EQ}D0g+XEVuYr9hnlt@z+`2TmSI4x$Pm$ohN@9krQWi!*9M#@xwc=!k@ z=`<qdK<E&=*9h)wM_Sa6e*10m`12@-nK0=YS#tT+KFEon5twE|bhTp6EWDD1ST*ms zx)f~yECAgPbM{(fLCZ{?V>2Eyhz*>@Xu*ZxU22XnYylL;kyUi|sims^>s=X%Cw!zg z^v1y)9IN3Vl2suPYLeM7C!VxgkEy?<%kNWr%jZNY#bZ?tFd!nLGcltxc9t_eG#+-d zDCY~$nA<#7w<i4j2^_ymW9Tw7gFg@rMPzibjL;9BlszcQrm&TvJ6xDlR7%z-CUpP; z1M~V+`=_JtJbznWy?Q@6{g-8~?A0^S|8tXA&M6Y@d)Hg#zm&EtG70uQgc&q7zHNss zX?au9?M<H8tJ;O$9VZJdKu}bji?gpt7zLG#;;+*$c_Lb%x!eIKZR!)}^ARNk#Ma&% zCwjQrU(1m)TwD%e`IL~wGq*Zo0@}?!=6+UeP&FM(#kOf$#Ui*SMEC&He>$QTX*15M zbWM+T!PL|N90U-L7Xd}&Z5Euw2Ou-G7U$_<V&Ciq55m;$qkRLtU2gF-1~C;+`&=11 zUJ|z$_Otjz_URzf=9ZDnS38eh&uu0kFI;LZ`<t$sCGz$pi{v|F0mvy=;M;WnQQZ@Y z`HyP1=0B<*%J41#k`IIi!~k8Yvn}|ZaUkg8E_&9;fXFeFAnQ~=!CWUgKm!lZ)S;sC z2?@cKSY(7gz#+cPUxjKu0VoRdYYplSV<p+WLMq$ER-v7Zt~*~}h3WcsT!HS8feybt zDWhsVP!$7yI0d+7`r>F_gbvazz?JNVx<1M!w#$yoDYqbRGTpZdNeF>_Y;CwM62}+` zuYdNBJpS)>@IU?|-QO-ueuN>UBxD(mk`>A!Q-3EaHT%nYG7TDT*>ztGUfr(_p>V<D zKx?U_4hq>2c&b%;EwXe^&vUo+WY#SXyzE-{l;dzs8)*N<uHmSf&dppzua6E+s=qol z-RA}6e~rCHV=#Q_`Quwu)cG7Lz>~xUR(oo!)HO9gmO92@%uEo^?*WL_JWL%3+wsl} zmhj~Fu1c<Ml~d!jIpY<&JlzW%bj~waLbVO{K3*#3V2Fv-(5-zl<Sfi&V?ugB6!Mxz z!PcOn<uWMDC|P=qUiu>`6|be#70%i+fvyZ_LSx(}9dsFoBo8OwgzR*pl!W*-A7G^k zSv`N@xGNyiZ;OZ}&nEf!`u-3=%g(!ATbs=j`u$S+kJo?MyJK5)Znmy&f)^bz`<FVR zsrj=M3SPo62G5+oytu3BsVVqL#q-~{xIZALvF(JPkIjR=q{xEwjVu?(7PDTNjOw@6 zB~vmw+l~{%r2xmS03aWk$^!tgg4^|0Q2e#9LI>O(lo`psa(*+M3DY={Xk6Z@d=w~u zwaZXkNmCd1XKQH5&V>W7hTvr?MOL^|*a^&S$f?QMAB+v=SJg6Im;=wpwKmndh4@2F zIU~Lp(qTbt?xV$W<~tj7d-=j)tG~i71tZ>R8qp;yyEL^7t7xejWZz+GFMsKDLfLC| ziRQj|+rbVBd@mebWShngUcCedpy{_>=Mmh7PM?{^h#UN=Qyts5w?wRlEXl|E!<pUN zc?nsO^2<OK6JgWDIbvrE%8~I-X%mqu|Lc2LnMa+_qs>9=4(B7v$4+;f2cCvDV2;`D zFZVNa6Dte;E}MS5j4~^1J;uj$Gsx3ySZf*;f;X*a_r7B=M^ARr`|U~w;qw1{TO>OQ zFkn-t4|qw>h*AJ}y%IR-+GRZiMTn|JrJLGpxP!y9hkXp^QIoQ7lT3b03yDZc5mC07 zhUnj#EpBPokCoVUsa)b--aZunJAMGvL>8Ik+vBBU6hV8yx?nwUevA<4+3b<|6hEgD zC?W=)VYK+{mL1cbFi$fRYSKj1iJnuC*l>F(G^14;FzEXSp!kHzvcEG({dW7s<)Jq1 z+E%MC?xz;f{x;_x3UZ&kpyF8yALayamHBM%ruIsI7a?sU?d~;jf*3+Ad?8W_#{6>6 z`@VF)tgt8h5E+A$-;0xc@iu%xa-mJ;Hm<Ip*}c+kJ$8w3O7S>q<6N1xM5BL?{tOAq zQ~V+?`%9^}c(26L*@up!{GYHAw9~<HR73Q@8W}rMu*P+xNeAz(`j^iOrl4=`99)1~ z|J8J_f+2c4I9&*?5r^x_TA+t$whgYY`fdFU56H3SkVcXjysF=+YF%5h)#lt(w?ow! zRug%4kGm*?|LrjT;f@<hhzROwJP_jY$Ofo)d{vvcfU2Z0xm@PE0gv?p-uWi_TE#5I z#L<yQO#xc)d>pWw{Dm%)edezM?&aW>h;p6RM-{GVJKe~V1+hzoPJ6Y8hX?;AFQrpR zO<(5R0Z2(suH4$>{Hx^ao^<3|ckySlB+mg~K&;ywineFW)RKSPKJMSrlsPyE>Dw;} zvhUD>(S9MB_w`a3i2Bh5L{PkqeH~6<+cnzqjp|q|`0<k#)Xw*9aKElMh@I?ON|Jsw zcF3@;9%iy*Q*$W;T}zu<;^MHkdJfE@E&y)qKvFs-PACDmFuD<Bk1Q;l2MxX7o4$V9 z0c;r;=OaQ!(kt;y1Ma#A@i&ZHp0r_=Q~BuV*=3mH19!x)4;63hzS1rwmr*_Yx4Qm! z{BWdjzI7K$a3x;kxwJLm?!1ZkP^fVmWZQ&{Uuo4+i>ZgQJ#MP)h?Z5hx9#`U>Yg^g zGxc&`=Vh;gh-fo6kUC^2>JOXLF*kd!v!+un-K#R6kOyqT$Q+ANvd9A8tPhjo!qkvo z-3ercIX|?t_Rv1Q<64$cix=s67AD8h=_m!g+P}2x<mz!CA4!oPC)+KOTqo)owr?&w zB#|dS1X*ZgX)K8~kZ`_FOc?{O8Zxe-7~`M3Ke(xPS!IcC;Zovpz+(?VsfpcIH5d6$ zUPZP>&Ei6{gTdh(>tJz0Mpi7K;crk@PRxuOlQ*Q@UQRQ7PinHl@h{+Xb)85k>`|WN z$h=91J13irnP=>q&Z1O1gYSn=Y&asm*sRMh$qM2(pv~Q?4btv{Tb@aYVE4XI2WgZ3 zCpGQaE7H>aA#qSdf39e%Wj7^}?*5j?>}v!&ISBM_X*7RK*(le`{I>)Q2^EGm{b~7_ z9`Ogq2I!`yc>D8f(*G9^ZQBo+3nV`VOe#yp_aEWNtmV@-D=e88#Z_%^m8<SIgDJFa z&GGwQLS`p64_Z%@Z-*<hPLyk~%XdL=GwtEWy&m7IZGK*Tf$Mvyrvf+IU9(QBDO zUeCYf{?)P%P$$}eSqbM^QK2Acv3sd6<U#<G#%^jtiw39Xstn|1d>>)%t^498<hzXZ zy)27#@K>MPLAG@l-i}FT^<G`a39?U!;9PF4D_Z@`@}ZT+T#LN({b<0%>tOoQS9IFx zlw{*Yjb~{tOsaGbXvlqn83oT(LP&mXH;*4T4W+tM<W<N3+-TEl77)wJXAQpQDqH z^-0g+-erT-oi|#04}gg;i)ZMe1URc~@fgz(He^;?tu0=OlF>K>oaq%jCRYwo-awZ{ zuC7QY#J6<LJ?*<T#0JeEDiq3Qoe{B=!Z1m~V#nOob~UeW)%JLMo=LoWrjhnQD^|2| zh=wedaE};B7H?jS^*3eR7<u5(ka<$~xBTGmzFia|a%;QQ#T);!xubDh0;3wAZrps` zQI5Yt?)I{-pR&2i(OcIbJXGHH{dalgwbE$WvSn$x*>AwnbrA!}9l`0={%!@>);{l+ ztFIXw=9!54zq{2mG%ILnW)r}bITckLXs&j3X8NI;_}4~1hmFgdX1EWqReUnK1lF~Q z&AUc`uEu(96(-x1i)A_LuP}aD3o(}`%Yx$I2L>oO0bppNCyqM-s&by}XrU=9Ec|rz zxxRGxH*TpZ($YxG!M|(K$)3apskEEvWQkX40kPQG=6tG$6`%L+1qw8+DQ!Voi9&Cc zk%3(ka{`$*(^`U;Cxq%I2bQIK^Qn^h#NPJ!`<cUIl`F$S?v4B9%+9;CH>6G3mC-@U z%_2y@6BwS?)ij{>Tn(HoBh;Q!^%^_FvgZvEPYJ}|C9Fdn|54>Qw$!wHvquOW|L_=3 zcv6$|B(F=l-(CL2<Gtysc;_V3d;R0oyXKo|K!&FT0ThjUY6H+=KUIqXl}+SgNyd*U z(0y<quqDj!=Agf+_V5MZACQV**B&^(;Sy{Mof0$knRC?YBzkmCN2Y@2<9-vh_D58R z-pt#tdiwWGs`>CjZ@7AJoN7nGgGB`pRgWJ`hY{OOeExa@J!*?(ScuTY_0xEp`8j(J z>%=^liGtVjZSRjx{Z*P4b{VW-=7UEJJiBt%d+WPW**o^C`l;{A#TVdy=I0zK#crz2 zFVV;i^JVh3wdG2#;mLh*$6Na2*OBhGSmVwb?^JtXEwlxOHMt5)qD#CuBSqpFZtO@= z85D;`_&SN>jDb8cdtObe%6?4>8wna#vCbf^%dyy`5Et;-nd!4R5Y#LeYEU~|T`f+6 z`j?2mP_k>oeH7z4m;?_kAcOb2c@3M#{iM&YE!#NRfG;2_QpYWHtSG{xvMT4-jvtN} zDO!Oa4FAku$PjJC-X-1OK*b%*+JlKEX#Axy=1p$-zcZrR?dO&4ZG_z1-GqZ(Ry#ZU zwuwBUt%(({89h6CC7Qmc#rxT7ZdGCMyY)CZ<+z<}-SkJTHh&nM!w6N4+TC}M@tx>~ zQT=539mkIX&?<*yw`0FZ%_wH=l1fwK@mFXgU+>a68}MCj)F&^|?*%bWQs<DkZ1N*g z$`_Ko{nz18jl~?))s18GZ9m6o<9D~Q&>suO)lL*nM0dxjxJ3s^0FbNzD_WOVY@P&B zum)a6O6bZ?DomIx;xdeh|MP|=U8-?t6WsH^<hr!oDPLmZdqh+zi&@QFF$S-&s@rrz zWV-ciJddsy-~7v(ru&50(2byn3BrVla#fjGY;p&Q5B3!7cOBRlEF|!Vs5ySpCubEc zCHwL1`dP!MUq2i`rz+Ea`@D+U$8Es@Q6)BR!4lCKFSxD$OqbN_B%5?UE|OZic@7gH z{aA!wgduu@pYLQL+onBgjis$^s$#nfnI;ukcE(U0?ktz=CQZHki(sES6}e~lZudS* zhA)@sx}WKil#E72zK$uIUMmh5z6>2fUVX#yIzL_ND+)?jo@tJWsc)Hn&l!?qS^ECM z8=m)Ur`aP_vLQVbege6Yv#EMLIP{mISW~mXpOk_-mDYkC#gL<I?U)M7ja%hdt>Vq= zW@`cI)_&&pap-dmEU&;|4bt=|O#9D`OuG`y^1EcJp{F<N=WdS5l9i{<x4SXw)^bOg zdsl>CD9!TIt~PM=bymZ~mN<&6*Rq#8+iSG_%qFui&1k9Rxu~pD-ZlbiF*%2@<>6yx z54N|RudUyoy(PXqs2*k<cnB00JfY8vVM-Q+Xf$%tZl<Jd;9KmJ+&XJEr`cZG1sWA! z1YryeXrlQb0R2Ru2T|@klLfiSU$F7Ooo2Mh;Jt%_#kg3G9%x_~h5J6O83zk>4aH^x z&W5syvN5P9^59H0`gYH_j`+(LJ#kbBkKK*ZvM-bF=3YVNV4KOQvbk)$ZW7(^6b`_} zeB7nphM#f=-W1h4h#f$edo^%C^%rNP%Q3hHRv0;)^?Evb(B$bUr+i{Px7<@zc>S;0 zyF3TG$TMn7>$0Ad3pTK5Q)UnK?Jw;z(B-%#U*4L9N^MmZ6CkkiZMGCyqFE0ui9!z0 zW{4WPmJRr}bE~Q@KNEMpu2l!*UQKw#{gjVBG*45`xKv!+3lO8Dv7IO;!q7I$!mJdw z8JwN19~WRX)#It)mUt_c&R%IMw~{g(PCdan;01`5KaL<DcYufP10Bq>J7(SJni6vO zNT`0bJFj*`DMVq;9;|;Qq+i!^LNVMaRU+g$NB?~2Jpwdp8ld%8-ha3F|6%UEqMGWz zcVDciG^O__O_VBCTCmYXr1ui(C5C{s00C5#-Vsm`A|2^S?*btR2uKZvn$STYp+*RK z&w79RT<o#W#lAY@{~H6YAuDUGIluFH=I24UEqBB}JqskX(9zAn9!;ra@c<c-1w1Jh zHp<dR0_BD_$I%q~e6q`~UfpC-6Gu?AU;SI$ly$VQ=((5T9(}JhG?pNIh=48yZyR!! zk*-jdfUxNBZbFmkMJ!(hfQI~shEwj7Jd767+4y$v9^4z8buZ3F0Cni2+4C8|M0hW% zUz;Wa`}E3})5qEifiTNEgZEs-bto27X9!eGs3?%8u!{!1S&h<-mV(BB^rQEM-=cJy zO|5y}*vEO6sN;*;0CC|#7|^9HvW8J!mAHk~F}*%eli^{IeMC}K@J<&+IX}8gu-J1x z6lo8~?{wadL4u06UUl1_z6fNOkv3JVwn?-(XUpca)gknY0*=D%)D&-YQFn1WMiL8p zXqQi4$i)vxOdsX=T=gbCflqKY1%;ts_{Cge%1R+K?m@8m+>o0wV^bVC?o1jQmp)Qy zxCcj7%?qGb7c=Jy#<dCsxEO}!+S1n@F9`R2<Pb|Z6H5%obkLBCT!<?X-#jHBGGhcS zZ>Cu?K1o&)T@H%L!XJ0TRJ!Kxc9O179@<))w#A|M7k=<Hq+DG-mt$gH0N^G(ClAhO zyK$jqWixu-P}fr2@DtvaG-L#1plN~ZUImQFet~*H<V(P{;VlIbe}T^{6Q|UxDf(x5 z64d_HkYx2q&xN?armZ3WPDZd8;5Q=a4JE`nhrwN;u4~%Z>MPUDUNoGJKuBmk!`x4H z|6T6@Ij@JDgZ+Y+O!*5k*CeO{2$|J&YXA-RDCL#c4LCsvb-LM-DO%|-#kszZXj$s< z()CfOczJzRi?6&qDZ+NJ<3THj;QTiL3uxUH$~JX5wQ?)j8nVb9r@33JrpQLiHbBl= z42z)Ht5r--`9&SLCe0OP!@U^3O6{}9YyVYrZLA1pe*NX#FC*+Qm7TneXS(LLrU?Vt znKd*u%}P`lF42#xTrcP!U;XO0fMfY?wUY+UDqRQP&KzFx@8_zI^W-{8ue7C(@q=0# zrQLAP+vK^l6Igs)-bye3Lvw@Kymi!Or*;W-Z9M}9Eh8ste`|rX(;p}2CzhrrTeX;# z6>qV}`V}l#Em$?`R1{enQ15D&)tTLn{nyI%w3}||6+zpfDH~>gqkFF{rCQj~^qkOV z{z;A~RmWViPfv6u6dPYWeV<eDdW%kq496g5dwzPzdtVDL71siVkbNK>Z&!aa)Y@%) zlW!yC?>W90%r36HXASgPs^^N4%EUjJW@)O&bmAC-rK_Ni5{*CL7BF|TdrVU7YXQ9m z3%NI*04kTa_=!o9=8@smEBvogIN3pSK!D``dqV)v(f_(5%Fk{ey(O}zV-xLj5jnEK zURYz$w_6KhjQS@F_ICNiPRxZqE4KNXi_BeaaG{7fkwnKo21@p+BO<ML|Ho&V|M>^n zA~AON#zXm#dL5H(hHTv%Rt;HjI6RP5<RNcTTQA}M;r_YG0K9OyofJtwrsFmuQZKn& zM1b#(r2W3-i-&`E&uvq-I>=)16$I1-QFj`zFdSmH168ry{z;#d@i+7l*dVa#QC?dk zm3`qgQn7SP+2w0VZy}^B<YtZ_Yt^dKmWU}6WWxe=Jye0B)<Fcfx;j@1Zx2m=m>T__ zzW4SIDG9vy!Vds5g?R@DE<%`WHcJOfbc??qpNnAn=xF<!0u8NIH4YO=!^cAm-UR5m zyUKS<l?kw4*k@a@qa)v09MXF5ZIYtlF49@%Aze5(bU1{5H?Wf%ea@P1Q|dZJ3DAUk z=FA_Fq{8j9p0-fO>%TQM#ss+S<YhX?Cq>*o{Y?>@ajWE65;yLA%TK_K=`K{;S$Qzy zo&YOl5d<Z^2PbzZWj~OxB?<MVh)!UA385!dJa!2;?=k-Ir@esP?3q3wi&?&WDM0SU zw}#L@NuO|^3NW0v>2Vr;An2qosYbpwyPq(*X=2VsqV4VABl_p(E+BH#=kM^l;oD$; zZoxjsmom-sngL)?R0Qfk?lEAF0`|X1Y>yX5VjW0f3DldAb&QUxnot8ACW|pp?RefV z&2;7iDh%3YTROppAB+Gb9#;7usuugU8=3U}0N7zrR`dOe-nJm@ChBQ>7?A}(IajO2 z{<<M0jDG4^rtB-AGnWM~o=r|-U%#B9uFua}>H9by<pWIisjJJ;5YiQZ_16)UN~nnJ zf!#)fc_y}{%+bUJyFpjZ@Rhdx;y{59ApOswCON!BzvB1cbMvU{Za$m*x27sqQ!K{% zD{s3mo89}0yK3W2UTq)gCh5~g)P02e9F=U}((%C}9`GCvxlb~L5Mm!qI5kI(ypbqy z7np1OX;3Vd^PAWFv-<+z{1?ggC?i~fr8yYfI+g1i<UH;4X?(hdbSAm><Ol-;g<`Up zVTi7YZP2{gjfXes&N1;ei|3P_<ab%k&yhaQ+K_#ok8bZe)#yQu8^>LnqN}%9-=$v* z(Y6Vd&xQh*q`vLE6j^gAb+VxOV+|!>5^|AjH;CWumHMO3sH^POQu#@K%cB2|Hym&` zW=-UHb?c9{d&KPR#wZ_lzNNtM3#?nxHafX|u71Tss`vh)oKv*kk4Eu#ShDq!g%`=~ zq?o1Nz3CrR_EA{JP;qPtIo;v6B<<RXc>uBERtB1?&@t{ildb-=xwTPR{3!9Ikl(wj ze1@+VKl^XnrD+6qG?JvcLYYXR6~$Y}$r}NGst5MuUa99?^9nUpQ#OU75>X5eZ<hIm zbiBaJ{<SFp*rfSXZEkJ>d6Rg6CDp-JTAoy3`z<-O0D#f^Dvi80#qTJ3iu_W$G`R;O z4X!WS{5E)t#pb@QGoz`)gYwI)^hN*+#~2?*OZGhO&AHwf!elj?uUI|Ax?}X{^IuP{ zs2<-culJN6$)v_t;o&%xO&@wrVat*nK+scpu6LYa#-hQ@M0gc>zD<@O)k~)zHP2N` zlzLl!c;ztux%T$XV)`sbe91_$Eacu_b3X!zX~RmS3V1#r0b9w6xIgk&oK9`n^%}(d zw3xX>E`SuVnMc=vjE>l<^?9zbm%x|<Q`9ZC9+~<3tmpIlR2tqT)Nu0%8KTahzU~HS zUFTf?%}U|v0;^V&P<<-DRmD{1)<@TM*@pVke?&NC$DC_Ak4VDSj@lWM=z7xU)yT=k zWLMj!k8Wm}?i0(kF^^F09|l({_f$kd75a+bArWKUj$p2M+EUx+SAhFtB%FQET>)6G z*u|~3)&4rv{8pFgGTSXkZ*=i?$AWasfwCCdPd_SC|KDbg+|9%`GhgOmu2V8St95y$ zSzkbuQXOK@mxw7rf<|F@Vq+9Ca4CeVQtEK)ljJjzU$fc`e?m=eydT-vuuCO+Osx*$ zBO@zzVXHvQ)IT&6&k9tZTBI2<efc+AC&jIkJCt{$#n<0xbJYEnb*<(RjDFbRR)XeY zPUmoQRct30<#riDWbHXIp&A#_sXDbfAS$s!JEW8E^=g2Yi0#z0%r{!1fAHf#ZgUwd z>0xfA-&5hSrQgKfXlI4apatBG2_+CBy*}P%>JyO(zg<yUI3MFj7ydH?@RerxY<hh+ z3n_k6hXMkLZ&2=e<Il;b71gUwnYVa-%2A?ut7G=C=`-veu#Ek|JR9lIuFOq#MQ5<r z&TV8W6nIKGzE`aCu4Bds_nltqqCkgG7B%EGlH<eJXF!WWjCh^s<0C|JP%2XQ(^h|Y zg3Tq{iMfMiwgQwjQ+=GB*)#a+(c3OZB%9|V@Yd!BNGZ~_gBGzjBvhj6oy8Fj>qM5H z4ICWoLcNHA?dA&rwW2$GA#+5XKa~3%iu_an099E6B|awhC<JSb4gy8{ai%;h(yOx5 zc`+tQ_vjC(`1I%Grtg2p7@M`<QOBSlhL6cWQ$y*20S&Lws0Jbt4QHl^6Ez$CE_dcy zZJx|67j0Uk>c_0UfJ}7U8=tCf69bsie8Xku)!%*j<>~?;dX!DB#Dpz8ONKo8N`H>_ z=6ER&<_%0l(fLwSd|VcFXVwSx(mbNEhY94ynTXFwG@5w`&!JO$s5*Kr=Yi(kzo0aC z;D|Bb$=F%61r!^k^I45>-1^J%CCJ^m+m1lUpQuD?-{5?EX3U*r4PNIsw^ECh>U*ic zf(C(lyYbyixf1zK-aeQ_M9$DkAzHxH)jRIu%^lDCRltGdeJ?R=m?xC4_CeT6^(gEf zfY&!~Ln>n_@&t7Tjey1Rmn|=Zkslpy1nSK_rGJ41M4vFU)VVoCB-+)Q=o;<(3#kvg zHe(|fCg-F1eAyDvV6ZmbNHua-83BuiFiR{}t169efB%s9ENc8Owh|%sbnHN#-eSXw z?(+DbaO+%#rgY#Vf?LB~=Ns0GR1I6pl*MGu#x%8yM>QUXLHQ2jd&__Ct;OfP^y{JL z{ySq!PA0;8j+u&nlOK&+LLaWQHDsE$Meil<Hptq#c0;0243vlEXNf&l;@s@jTYJ4C zD7MxgYHX=Wl&#;Qm2d)Mcp-rNH+F0JxeaHV$$NYk{G0hjfZ#1EQBa_*0*DjH>jm%t zB$0t&agxMJ^}aV5IP#vb`KvP^ndjN2B;jpZgsXlF>>koI$1L6rtb%vAj|_gQD<1^i zsmz@yqcKT%SP&x@eO|LPN|{Fb5;#VzKlJXFIs=8Tv?G5>LIG<uS%1kWNiEZ6!1VHH zo%CO=rKu(cMZ$6S<u;8LqQJ&$-oU-}DKgNCoa?VDklSjtKBWt;09zE*X38T9qE;-g zEXJ8;ilOBp5%YH%COi+}@A(z=WO@uf?br?Y?ZeP<q5jV~eG+#jq>=I@|NOglNJ|ph z9LJYR_w^+#GWB8><L><Dn>cWG*_>P6M}c@JcQ#g~&FSUw^}Oa0khPmEBBWB)ayiV& zQoHfh-%W1SD!uRF$s<pRx`}{Fb%otXB9uS2#3x+Ft)WYQ75W>@iYV)v7a0=)Ux~mC zi)I~9dCyd|V#075fMB~Bv%ecXe+|MuZ!wg=mAW2!cRb%+!n0xoY|YE&xAQJ>tf`Qw zj%oh*Fo49PuWLgYd;IbuFr@E%{1;nDxldgEgx9;K$D`X8{ChDw=ZIiFCtlk`KXi*q zx@c~$p(SoOK$Fb&U5O{c%j2nNUPlPYH4c1(eA_VfNmkEwXl6Nmw>@JP1Nu#W|NL%3 zU>SrVR1_&bd3dS|lkG`DgqeKaZcKqGa0aCQc6#;?&C}x;F)8#>kY_%A>r}$)%eZ8o zw0?U-e8t}3c7GMOIwM$o{i!%bn8eN{hwcUzFm5et9Lzc*v097zGz;q;x9hQ#U_u5~ z^})c=)ZGOk1J8?1@gYycH@;Vy<;6G|YB9fzX5$#u{P(sP4i%e6u=G@1?p$iMwr;$~ zV~uca(0$vZ67|F$JKvTm6$iTVY-xmycoDU~rVtBFT!TD87@LgAqnLirll?7($CmYH zKWa`Is5myLiP`<nJ30Q>si%s-fo5W{Adg91BXjip+QenzVh5uoh4+@C>0ShYM%tld zCQN2SWB%5StsMT$L3GRGcg^Fu$vi)2Taz$9AK@dvQlMd7Il_%3mpClZ%GUDZj&OY@ zZo||mMtizUj7ED?4H^XWg6~>{Zjf6E>=l9M6~5sPssn$5?cpm=Mn#W$uslG3%Oy9Q zdVC#-<(U**WU312Ppqot5+ygl2KW1xGLNJp%`(#YX^3-0MO^SN;}wK#>k>b}b4g<R zHOX}S0XB#+|K<C~Logu^i$$leyqP4Z)Nhi;2LXLPL?O?hO}V+n1Mg{5K7Bk;iYXe4 zXV3S0Lj@*a1ykD<l-R-S{?+Rk*~H`Tl&y6Su{3fvVTGs_4)^Q)R=-@snjq$PUq<^6 zo7O5cn%I}v77QaW$cz&}?<DHlRg6DcThHO13+=7ie=t8cQ+Z|Ewx8q#T|!XgeF`_( z$Mr9!TH9$0?n$19&9X*FB)55)nCk;?<=zl(26$g5Lxtacvk<{;te)I+nToqJvc0HY z?hFDvsxIs*V!w+!qBW2&Atz~}Z&jv-=0nuE_m{s?_$LlJuamJDZlE4)<0LL`z+SKf ziU_qd=}Y$ug#Q^3n_92BMM8Bek|N^|)$AZF9yk*??>!+a-&3FZpr-QLQ?RBMC9wlg z6Ti3op<a+LqlgfXr&rUREk0}SeQwNJRs4h^^Kb61S1|$q3YrgUHo5SfN>@MOtERAH zt&kI(%$us}%23S?`f*q}4~g=U>S@*I=*`;<@RxbKHv9Ocpv=tO@V07yo9(*~`wIQj zGj7aT^>|;M<1P7i=kTJFNqzFtrRLObE1ZSvcA}$lS3-wt`iwW3(6-x+(?kK`ThHWv z2u6D%6|lxK2~Nq|uYQK?+f*FKQzVwyi0tq2UoRIERG@=gX4(}qXEy}zx;Xr4LzZ@T zyw7V|h{<6~#n|yTj5&6scUc|Xu_JIPXqOhGR{uj2)b<Yzm1|G^1cZbDfI~m^p0F!c zh}(p-`3#ZP(#>Pz^|u6;61}!kuA?SUl+{s-*f97mdDjAv9`n{iSw}g{vGs;xy}T(e z<C&%Dn8QGZV<_S-CiK?Cq2A-iq~b_SYNb`Tq`||RDPmEvu-VAlpHG1;&Txt;DB5ZA zg|ajCQ$W$M#EwLjsp4CM`#1BYZ$|KK73Q^d_MC`wfIzB_UpEb|N>-H1kzS0^|MkBA zK?y?Ub*b@F=O=4*gVjmfjj>gZQ8x9T*taj}u6}9YT0GC-w{YQ$8<>0JQ+@ityt}8T z1kCyL*G#`^A~TA7K>~2czMV#1P&C63)_|>+`gC{x#|-fcJC3txyjmGY-#;|8<&@j_ z;B3!ROz0f|hn;@Go4(PKf#q2Y(D!YHrX6G^eZP(<EU#jRdXeEh%0>0B5``4lcfHoL zEkuVe1z!F{dfZ1W1i0{Fmu3Ky{l?PJPY#-)i?6P;Yue5!@kLr4%)xt;*Qp|7a%B}_ z27C2N$SA1^t>vpvYhS{%5JGpT+#BmvvgG4p$r^n2wE=v<#y<1}88EnYLAU-5<>`2b z<h;8b`xph}=ljdT-AsAAS=jh0^OYjrOT1=MZ;=|gh`}Xs+(>x-{!3WhCy7J4!#DXl zh3<~`M6|hXnZ^eTv#o-dJGj*oke1H=xSjlhE~t~k(7RS4e<{=ea4K^B0T^OKNMY1V zSREq!09N;x{I(?BR@qi8->aQ@0<?HRP&tVeP<+op$4jbsN&0Ago>>Ie{8uO+*$8W@ z2O6{<jBQ3c23IbYWf+dn9#qzLQ}4G-A#aF$o9CZUuiJJGhPF#y)=XDQ!cXd^(Xx#q z%xxM-QjxyfF1<p!*6U_YmYQ4-|7duO+CffL*Q?#<FGKrZ(3JzTc0NrPkjg-Y%&n1e zSl~0N5;5m1(Ws}Z=H5h`3Goatxo`@(CaeWccMXt+8KIl^!^J&#cf2m^e=Wu;l0X`% zXuGSEby2t3_w1ekj)0j)aiyWaM2hTk*a4W_3D^!c8EC&NgkAvBkeKQa88(x4Cn}?! z8RNT#0#9Ut!|**y*}PjN2Vo(;vW+8uS|PQF&)9sTa%x~0>;G%#dyYQdlK(uZGfspg zuFQc}r|-(2vwO7nTi;z~khSn$`*Xf(FQ2KF3fkV9%?{Ct1G;#?zN+8;En4zi%Z=?E z5f_7X(=5TeL0I68=--)V?SZPh{9fU!=k5B2U&T42HqMv2XEnJxa-G<$G5j(BDi<uJ z>qE$Xq#_o0aAhgc*Yos8Q&RH#%N3Ms=~Kr~NsJW*mhI{9zk2N1xR1)&*#Ws9W?t=S z*%nx!J^imR+nC2t9#0{)zEEs9Iv9x`G7tNX#J%Ug4XwPclFP9;3FisDT>Y{QLVAQn z2UXU9y8p)E-YF0{aewTQRkEK?|3>arnUM7hwzyp*Tr<$4J?s@F^CKlT53de9a(elP zb_P`8|G~t&ms_PppiJpf6mJbisXQ0}8U@W*q?(049ve4F{+Wo7Fdh~U$|jF&S$_be z|1T+9Jtx`iEjyV|OUL*Si(DG>Sa$#=1-`50_%fEHv_0uyy4Uf8$A$LU<eU^B4MoG- z9v5u#E0cyW&9EYy!e#civjSWuM13_eAS0G`sZ^G7Z_<qCj#MR1*KONAzM(n0QqUp_ zJUjp$LTW5A#c*%ee~_g}WlGiB&CEw|JXr1(XaXhBR2Fy1BG!86RmSU4?BrKcj2kUa zSjz8lwe{alHz?KrMFYjImn_F9DR5}OB44G*hHr|=+7RcX3Fl~!j*{)a241Xl*tzua zmYR2yS$uXmyV>Z>?;cimQv6q5H#U<Xn!6riKU5tT6L~kO%7E>R9#KaQ>b6+4%{zDd z^T5a3#0^U$q%;}j!=vFxGJ@a1a0-8+{Tp*A71_aBPt<=WcXqzpQY2#1TBiRv`x5~9 z?2Y#|F&|OZilM;q+tz3z!W_SRk`pgkA1I^<a;IxX$E7$<_j9Rd8;{GwV^R=CYuycD zOz-pN&%WxdOpf$l$<YC@QVRmlLixnjVeCKLTjbwIg%GB$EHZ4>KUzB|`(Wx`Ug1)c zGGL9!9Mk@(ch#^ums2e9u}Pg2{kk29QBH#A`FOw?5T{`+WZlvFU<hhxW8RxhXGvm; zln`%I40<VlBZR)p|1$D*!Ai}1lN8zP9~!{2v0kP~rAZ`J#^S4bcy<}ddAsP2+azA< zO{_@c>0LdcVD|g9pBbSOqE&+Ap%N&!d0ZP$2p-O;Q@KejT+Xr5sTRK<4Z6K0fW31Y zu&MSFvO;{QY`z4Gm(JgAoRz%d*Pi_hV7c!7#pY3jzmbGepz}9L@8gs`^UFqVSc@)% zrSiJhyb95mUpFyv5Tz`MYA`3)H7NBJLHW13?fBXz0ow~)PC|0Y1aR8urcd(QU8eo1 z34H|s$__dsI$5T$XDkF3cZF@iI)8@=^_0SXOxTE3$Zl66Cpk*PbqNxcp_~)HDmDb= zYfAjtH7uKX>}wFkrpZcw?s;VZL1jjZc#0l_SZ9@)j7!>CT!6{kjE=TB`oV?|N{ph4 zE>P4ndRQn5&0y!K8faBr9I-WE`yZMutZ^ZP@|c8;_7!b=i07oJ<hwVPg{h7W3k6!9 zn=S<xwKv2hXy<=Y7>L<Q^3v3z75EBm5y_~sjMalbub+^39C^bA{Y}*V*Wv`u?vrD| z@4})qSD3R0%AW_3E(iHya0&3~w-O-lRBZ`NoWJc5x@fH)Qm=zU=Ay=G;Jf~$k7v*v zpy`8>OcFxH0B7~<#}sHM*?iFgdFhM3lT^`!l;n=x&d!cuM7kyh2t~_g!*lmVQOxlR zF<|L1S_C)D1Ls<wu<Gq~<Js1Eb>6U78f;m)KonC^wof^adc;fNNhv+Ndu7CrkG;Hz zV^HgeXZ@c}h6CLyMlz4)SUs&)dt><V3V8P;y4G<<2&<!^#cJ5isTq^?vF1BQXA=t2 zAZA4Rs-!oM)=5Zq<M&&vp(gReVYmzO%^E%+7P-MQ==YY6>;fg-)2Qx8OJwVy&s5GT zIp8zFNf2sGZP?-!z_dF-bnT9J8OQkZ3zMp1D^(u{7mHPVhOwigS{8HuMLvF{_%*dR zjv*Dj^W1jJw(da<`d#5XFLtz7lB2;{H#(K^^$<>q{se%KGJwB7zR{2&ms)yO!ncA) z0L8wqpCZ;scFK{QqF9yyBu^_jW$v?RaS8Es{d-5dlEZylF^AXgD#R$HIf)iMxhUqC z#AIXkyb2Ft+A^=62MEboCAN=R1=BZw3p;TQpL^jw1jWR%dL);a0I68t&!hf3DvhDu zbnf75#T##f3E6;+IT=y4)DWJFNI2Dq)WXVJmvQXvSYf7>HRnHxRPT1W4W4sWY9MCB z2!6gLI&LNUz<Xh}>M_}V>6D3o<2+%Ct`*v}^w|3nnt}6Dr0MMlenP8<XvuQ={f4W2 zCe64npPf#wrNlt<ntA~8#oE-re-SWq6Zn&f$NF_mllZpgl%2<H?d=8j%gL`t9%%pz z9TYjc3}B)S2Zj{Ht6}7p`o+$Kpnxc(zITzGyK=+lZ>qX(<5oFzj480&yx2Nm#`r@x z0g<k4>l7dH_|6ZxlRG6b;a6z5ZYNs#v6^rkds$fO2LuT8!7swZ6Xw`VoKOR8dSUJi zmyzv}5vryEFp8{(+j~I#1eIncZi8G>EMno;$O&x0A9RL>zJOZQ9@+m5^Em2cg!<bF zj@_K7!+gLEWq0`MvC#8gH+?Nox1N{3?<mU|UiFc~``Lb?jmZaN|2tmG4BubylZyd2 z{3_@=Sk^6vfpp{7@_0SW*hm}wt*`jI(B8zsuy&;nm0L;|nAa)x0*&>>PKqty`n=L{ z$C7-~e=B`zbHvQVB}M6`bNuW31L}`)?UFHfm7EhekAH5)Cdu?&NPS~u_{`7pdfDp% z%`2*J?;IFv_~fXQ5;7JcjDzJ{n#P`$HKmVQv*%hw*;X$c#f>FW`se>W-~s!RgpEw| z?W@HQM6UQworI76`20e^CjfT(&2#fn>YihJaOQnqGvh7*0U=sKNLPByIcForc3-KB zPeVsT-q57R;GARXj{Ah61|s_(nr#+5xoW54V4D_gRUobH0L{`hbsJ=CQYn+NIm_RE zF)otQ*BvSt;~ih+=fQq&#HXb_vMUrwl!X*zok@7+YrqoOCKy<w=HGEI<i*4n#tU2g zp3q)QGYY)F1$;(5C$qa2=S`M_x&46E=`i3HDvDp^nGxgJ($g}Skeuk}tAF=MYx=(U zD-G{X;%E@$?CO8cvHyO|Ek}G9Mwf}(qfr@#L6x{4M-Vg`EGweS9>`pf{=ujwHdXRp zus{QhUBvp4AtYKGVg~wZ-I;86W@9wWX<TAQ!Qv~twmBWIqhfHjm=DA(!pXKBcY$?= zhlGXyaA3IdsT}Z_&h;cjBlQfpmoQKO@#>LTS&zSe$l%|-tKZ(#+!XfB7GtFCxQ`k% zx<b1HtE_B;+LC}nD3#gcWHN2yIHM(}0*U*a?w=Hi$b9nft<Ht)W(pKMe)NtAiDrj^ zj3UiO^V_r<6*;``Vp=nJs~r<M(*B&VqZm{3+)w<<YG-}}YdSpl`tQcDGKapc0vgC2 zNg&Ft)MjH{s6ArJ^5!EM?g#HmDBr8-h$F8<1rVqnoJ;fVUYO>uO@-09D1n9n%s0^& z_mhGq_1P&hr1>0Q9TD=U(oGRPqj}cLKM9u|v@*kjfz=7+;}J$25R?4`m<)ah%06+@ z@#AZHt+NhfYRDJcMD~Vw9{1#2ZJMlW5(bpPmfD$%kENucC29Hme>f8{ZM*-+)p7&M z%nYIGM2H_yi8_q{-8gfGD3yrRA?$K>!9x~@e0nmS6nx}TAl(D0IxW&MS0B!J1527> zk>pR3;dy$w<W_XXf@AFCOtYwWv(7T;(GM3U!U2L!<Mu;5lQe9UqB*rjwWf0eE_c4z zXejR{n2)52D~<(tAHu&T(9*++eII^(J@+&@$?Fg|Y9~e*lErk$l0Q|tTPemC6X(+k zW~`NC5sh^igTC9zzc3!1l)FFx^nt};BIN>{s%C|vk&|NC$N>^t%t&;08*#!W)j5Ms z)zxVcPqMx}?7H6<bhs(joezxJY!yz;YZCFtQT5Z?eky~$opsSTMUCbpQO>xt$?udq z3&d8WDPZyn@BI&ZM%Gk5EUrVQWvuFEHQAIfXx%K}8xba8wl|x=!*5;@JgX9SZ})UY zGqkBh-kP&sO=btP%mT3c=s!}o&NHn;dw|7=AhOi=6F*eMpUcG+4XJRxEIsG*fliva zvMD`d^%QkLqD8UQ^Qk=5sh3bRs%wp*&f_-a;|mePD?8s4l+9~KZD=uN+n(dy4gOTl zc6RQF{I9qTzzHmdy5$_wN;>TIMiEOoZibCI0_`D@p_6>*ya7H(+WACMX4Q|%$N<i( zE?k*=ThI3min9}izNV6fLat=JrCDb06QZXdFZ)ToOU9ZL!=hDH<>D_GkS+%JH|D_7 zV$!_~D~|fRQ{OZtVww~Gua8^{aD618=%dWx{L1yrh$x0dU2C!R0qvS7$9^uuBx}C_ z`IS(46676~1Cehsbr{>cV2HidXzUEX9?1EK?{UIs<n;1UWtje15fbG6O0Z+Ren?ry zd(FoB>%&9bGPVo>^z?O|*QRIIGc<SgUhH=%dCfcg*cN%Ee70{rVLk%pA)?T5{*5u{ zF^E~p_m;PhH)nN2y?FKCS9J(H_B5gt0el-_33b41XVW|Y#8Mw`c0cJ}Eqi$feE9x9 zG}d-2i|w*DW4=|jh*Vp>S1Z=bE$j}z8&0I@AA%1%ZI01ukCvViX`}t<xKvwP^<-8F z9H8zE78%sfYkQ-l#@;7k{WnRjXD2}QjvEEMM2)?W18r5Hu!a@_qyzb|o&{#4F#*E9 z9)!#}M`8?j@#L$l+`)VEchP?|dgfTRbWr6~X-?2cPX)h+g;dSciSY@XFc|#oxhePj z3hnd(0Q8p(0}h~9gbJ)Sz_(i7@dl30U^otgwnO>JseojBT^>u)kKA>I&Ol}D<;(LO zHRDBymLad&ee9w&0zv4RFm`~^CX#`#VnD=G)SS;giR4P44R->$oK3`LYQv|#h2ae- z4}dpoUwPOfPZ()4Yq9u!n|*-?ZpMROGX12R&j{fuQTa!y8CHs1P7O6zi7X+se~Tf7 zgb~7`kV;E%7I(AIYgknsceoEnnzucV44Qk2<6d@2aE*Gr$^Z8~qmK6{mr<i>W5aeQ zIw>yg=HF8{6+`KMtxb)&)$528pap3P_fy?wIsKJ};N}r}B(1Kns{kJg&(xqCQRe3= z_tU=iwc-amv!s0Hp0tG%BOKD62t*9&s7eIk8j^4yuje+$v;0)zys}uml~BK9Vt$Jh zY(C)&is-mGaqx)6prJvECpr7`YilBx`uo5!q!2l3lN%CyQrf)9J{kr3%W5Wn+=JrZ z=#VFVLq%Jq&F;5<Pgu3)+kiEQe=gG*{^QUQKJM5O(><^Dh@g^%ejuEAzpXGi(u^)O z?!;-bbg@Gcfifhfp(1w=vSqf+(rpc_`yD+B`jvSChcBO7Hvx4wq5iMWRw>z*upQhB z_$3u;@FC_s=?2!{s~?8(NPW8H9`G$)W4q400Go|`GKG{~gxtW9N6_X~41Lo=;{uIO z=J)R;3;oq95j?ECtBwonmJnreqYA!d88d501f9sV>*9%{o^oYFke+~wV8`;gj@;E$ z%1gGVZ(cv(p}pMlU!unVOou3{0^}Oh(2^Y1bIg4lD=+3{hMNwVc66*?_8i~_bT&Z_ zG(46)u8|wnqb@T-9-BfA(2n2!YhFQ?MW=%$iE}yiMS*YU7eOfxBjexPN{)26BG9m2 zB}vxJdkBi{xaEOO5`;=r>C%4gS!Ji1=rJe0RP!FAJS3XM=aXk1lH|IN_Fx{ss9d=0 zg7)4{>dJ+<P^Bt+vY&gP{UQ?s&ci<agh6@!&SXoZ#l-cn8@3Fth!o3P#MQ5I^kyb? zX`>k>w*U-E%tnVGndm#C8Qaazn@s=ov95Q7rwa8SnhIG1QWfS5Ou+DrTqWDxk#adz z>+qEA(2E0VK7`s|p$FuPEQyp=Y)B&_dx9h)k{Z1S{p7QM$h<U8q1lfQHnj)xVa9wR z^mdyaH)%GGcqBhN-VRc(L+}j~n~r+}#XFfh#5|tNx`F89%x>?{{cRY~svPULjqFK` zY77;abote$|HXzJhW6??dIMAZnX2)bBffRtF7f|=U51YoT2E3Q@52pszVU_0nv65w zr{mf15A-xn>TH8l0KS}V4bm?4-3WcyqCSB8D-BYN4^`Y!HZ3YFBI|Y^vj-Snb?|G# zJUkh(YbGA?xiDRE-yryzPH6|Un1(FMswkZ6|Ix)ZY96-**iGtV)f^3fb#RfDLty2S zPS%4(aLFrcuCB@Fc7DU{4voeMBXI{@>5!<LOQ`3ggXctYT`(H2`FE5E?ah3)7j9kB z{vnvldh&zxcD5fc0TY)!>Z{3q(Fc(ogf&sT?E>&HLH#jxmm+Sb8|X$b5A^FNEg9{j zW*6|^O0!c8m7Nqrrh7!32sbA2)vv^r37KtEqmt8P@A=z-P3<9%Ms2iu2Z7hQ`#gV5 zR`>OSlU9%G1zy@SMg~4<j>&yXHXw=+1f;&MOYEawWTI-9CX>gPkeO{KMr8f&1>E)S z45=F^s%5QAIJI+950L!VfSnUW4q><N#0*tr(dXjOm@x2SbC2U<I=`dO8@ntUDf9@t zCF0@1Ovyo3JOr&6>Rg0!^=M8v@UQ!PbipC@pz;dxF}b67BrL)(E9~!bqk0=PY^+@! zzZO@4bkFM#WT+U5pQ{^!1vtNIb#6=xD!aA`z~G3~*h_tVBb=K-AI|HRK^asn<if!= z&xIMyskB_>w)%YlIyo_s0tkm&(*zC)7md~jV}DB|A`mp;wgKPQxtStbTwu=M8Z)i4 zVy!Jh4;1$F1<}P+nnBwYwnb&dXt07>BIRkDeC~q9-;^toa7l&1yR`RR`2D!6fV*Qu z0p&4)6viVYDANQPp19Xeej3BK5ABWZJWzao_ZiYg-q-P{1QJt5V7?b?Dg*B#sZCXg zQb0bOW{fO}chdA7sqH_ilHCckeoi@clwXpen3CUAqUy;Y{Gajl9a)CqFI4Mi>TMi? ziNh^S7m&}Vq>x%L{4O8DZmkDbIPK#uvQ4yM<GNe1l@N?A9kp{M?LN14>``V*>)st- z#U7A%Go~(QKrfKfijlT$V{H<JWbo$3m+G-{znNE0i<pIOJiCAGemP((1XlGjFqZWw zTCLUT8Fv}$O^&S#nyF96Fb>a>WFD1qA3YTtpbBqN)vHN`pFvD@gM50{`cmEuf3j{c zeR|!qW*2O(4qzQXeIqB#6u=(y2Jkec+^x)5g2bN`unaolrRbkl4++<OMDaMs4>T#E zrm;m7DF{pUwVg1YnI2gAtZo0Dw_J}4yz!6T-^#iWKHti{hvG#X?LHt0A4M+e)7d~z zPXDxa?olnii02yom@jk$B~|)?MUl@&JIC6riIbSj&x4XE$>aDC|CL(1-}##gEtoX- zukL%%FLwx*xk+Kn(m&*1#q9k<^LtGr{5et9PM5~kW$%QzDJ%VV-lRF1F*FN0;7S^K zcc}k1ou45(p^#7<`KQ6(t4mNdKxG)iXrAEZ12IH%IU20_yp{>k0|OY+<Dj&}*N3t3 zS3ukM31*F5o2R{jjsM5vllt%D!(CsQrTDH*G9$xKNBl-s;^AAFRwD8rnxkG{JGxeK zMJb|3FN}LV(=H?5I@(UN<}(WrzjYaMuf?VPRkL~&_0||gBCo4_v*DYa9^9+U5q=(? zZXIc+@r1uXmI>1~Nfkiaeu_I<pifcp93ApL?Kw$Yu?3vP5Pl|(!o#B6LR+_%og4!@ z_hU%l1^Ti(JH?sXKyktz=)#PTUjHhZlt3Rf;8^!@VsT%ZtfP7qC&b^DA$kBwm+0EN z;fXXZ(Q<}^-|%|x#4iMLFf&Vkne2RHgqz>6yER!CtN86#y@Z`^ys}8_;7>ank715) zwPoA~|Dl2X7aacg)Y%bL`s6^8S%@+Et2nnpeepv$`<EKoa+&XYsVuOIl<sF#w)|ky zIDV+G_8C$aE)D9UH&Oxhz--8(uFb^4)e3KSiA*SW+Hm1T<~U^y!Ij5MHUQyoVbn${ z66x)#9#gNzVI2O419M~{zKS@~LVo?td$wlyIi_mK8bw1<+i%k=cR$gqEEJQAmYKQL zlB0k0T+yXvm(D|~ob0GQv7(WnJ9FRDk|QtU0h(#J{%%C4k8n}=SDWwtLkx8(w=iCh zQq<EBg^`#l&VGB(KD<=a4xMJfKvs8ipW$g{Sr~zdm!gBENI3!>yhtIw9o%EqI8o`j ztE2kF=QWo(cE00XUQ<|HwXN==rRU2E?ju|9Ce{$Du{@mgJVl17OV8Q8lP{DHVpYCC zOzwH9Z?Plb>rHm3mDA_kK-~a~t&bzjf3}Xx@dRhIOwemwZ_70lwEfQV>t73OJZUW^ zqlY^p0&8Y$Yw>KKC;DcitXk8PAE|C@ZX-fLQxO&RcnIr;LQ8rDw7{d~rJL(p!lqoN zu#wUWYeBYH;!Gd6RLr3S{5i1&up%T>KS}B0|1q}^_#(V$w9Y(GBak+(Lx`N%lcP8( zS0US#SsX1+h~Z+^y&3k(GSK*)`tUaw^5Bwdd<qs%8<p+=HWt%n1%=H4MrN%?lSn1v zi1xT2MKUkvWy(#Zz2hIl9K<<WAl)UDnVg8<J#V+g&qhk?aaTM#Nt;9)>$9-7M!3(L zBuRs|mxy1%H<3<6|6F|bV@=}O?$J?I>4PJ)28E<nE;|j;b3%^oL4A=g3&xS^h10_` zD-HEA9B?y}Yx)~jY+5!g!F((Rt?%xn&(G@^@P9HDa^0(hcY#I5koLLt@6u7ut-5~J zb9Yxk68Ywk9sZKQE?(}g2_O`$iUtw;l(-vNcXoHiW>V^A0~E^1tY8w*<$f(8I|y51 zXye+e&%9~JPCTs4&7amSnd4cvSMZ8!8$hp^hYxvyh%Ku2z@Q-vy^!_q#HE=?fU^U! zC>0~I@(YZ!h=6C2PnBOPV1@psq>83`|KLCTGXXF+jIb|&{3)a&p~CE{(<n1;O|Lmq zPU^@!4e$Gk)^R1-47C*5^FDG2e5YP)UEl+1(9=Ubyd{dHP)rzMx3U_77kXd~3O{}F zuj{9ONZ)keNGTf^tz?Ju{NCtL?--N+$WTE0BWA|XjYOwXxhuT9&YAN-&7%*f@=Up( zkotsdb&VK;v}~}?%lJDty;ze|LhhM&@FUVx?eRPkL7YFm=2eS?)gFmg#-d)an(JsF zBvGV{-YpLUiX67yIYH}T$V*NkyiNS~D`ip`sw8O_4PhF>$1+87SH{7A-`K7C^v;`R zae4LLy4d=Ut{WvTv)}1aR(?JZ=7ZLFI54+4XuZz8v(xQnZ%lb^uo&uxA^R*9zwxY_ zHaDEe&}ff;q~{#KlK)_-G-TG>5{F8xQ;*64NM@0X8z7Tl2@QF%!MgY9Vu*aRot`rG z^X+*tE7V(C-^gK4zcnX52VVVB4iVM}hkYj}C84}y`<QH|h_+xnxhRE)&+)12e3|$4 z<O@}$)r*Nis}znUID;K|41NUxR+0K<VX21RcIGY+B|Ldh)|g08PYaS@TLB=|s$o?K z-QINnAjS9fOw86JPA-U-U2`l~?=>aGdE=UUNck8GpctzWAg7!9R9Rc~?-f#zx?hLw zk9!qRFWRT%Ef0mi4Tla3^#SV|&TLDreOBr{RZ$&x#wjoMEHujIv`T(^FtNz_+)n0o zkumYE?mL;vsU<Do&)%mF!YYdL)t@xfMb9mR!{f}gh`=8I7?{^hA?O{*rByd%4}dzU z#xl>SGfY#&D)XB3Bkk_jVX=QWyt37;{;nwO6{kzG1oHb@p00;LIr_NQ-hf%G2L0>{ z-5N5_29jZL*vn|Sf`4cbC9^CCRi=5(Rngo-YmpSDG7p?nC~T$NK|3E4kp10}G!&RY zkxb+a8wHURR{@p7B`ep%PL>2LOVE1&Q6z1|sl;5m4FC4q$W@Dm7tUJs!G&yV5H2|6 zQDjf(?O+|xgEJPRQ;lUq$yJM-s}3@67VML_oz!{3yn3`BRSn(B)=ApMdtxS`e29ec zJ`}SboO#_q_bd`xtW_kuTw=T}^S9y_j>(xfRDN^9{00HVZAFG-6dG{tWs>PHDN_^d ze1mS=A|vza#5+qULo4u|u{MzR6)e)wK2MLWEs&#;s7a99>XBYFg+zd5YDk#W637N! zyaMj;pY1Gr+x4hOf2LN@K<l;t7zqF8&&~Vrn15)P+gR|LdLWD_JaiKDamr!h`88KA zXH|ds6*CYk_0qJh#1QKJMPn(Q%c&qxMNmffNE|;u=}(n2%<JYP@^@RS4r@e;u!CtI z<-$cQ5DY^{5+u+e(oao^Op!=Y+;B?<18YtYFxQ=VbL=WXUaNO<&pDsbW%V;ukX)XE zXplXB;p@FX%;y261+Goh_R+y=`&w5O^mh2c?eScMcqZoZ+uKS`ahO&Ul!3IELz#!q z%#1tMoMR?*koDQ#4i^ti|I!9T%?7bR=!-_G2NNK4?k9H9c*Ly~1bFI#p15J$8tBbI zWq3DOj{H7v!3|1cdOlt$7viFw8*W(rlG7=PNnE>wTE9JE2KW&k7m>{$woLi8Ce}_{ z(>R3`Cf=r@QBKij+n@hRGGFv84i=sRrc~6?S8Ebt?mFq}*`A1iC7?^2(KG9LI=Y>Z znp+27Ri8%R>lM))t(V2-K<8nS_H7L@t5YWF^CrwfQLoAioUVI#;6v{sHLA%0uwq*e z{{Rjh|6NvxOM|;K*YmgR#1|Oa+?U+o^09Mja<-ROeOm#3iJ4eN_%>n_Qs+6%*LnAF z<lV6yXNJM#Hc}#gut3KZ24$P8OX7S6{}g3rJQ=Cv`L{|duPv5vJ6`o!hXR;|3@@;n z-FkGXxud;>Am*#?1%gmJpDrJ?2P}P7##F#+drr_T#+s56UV;l9YKwvl?PW8nHwdC_ zmUt+G!xf>%(+BoK%x7dLP0{s`9w3j~bJUK9#6wu?t}PwOCl~dcx&(94!?M*}pLkE) z0m?>t9eIR^>M=79uwx{y{g(Hp3l#P}Nc36S$)LSo<wv}oAjib#9v_S!oNRjXJzb{I zP9RuXe%w^g;g7|JVq>uChyZPd>v6-^`)6WnFl)3j7L)z-JCHpL(P^x?AI3b(!kV<U z+k4e`#Bgi89zqO@IFO2LJZf=`snhva`YyFT%dp}4VAuSa?Zw)eq0RXpL8sVXb>@O3 z-Ci$*Y`3h(-tVlf_h|xk4HrZ#XYn*=&>!+JpQSqW-x-P!VxoH(&Roa+QqlKbzVPdu zl<CuAa@nsA9sr5fsC+mQ(H2rTGrg5Gb5_Z<Z7n^AzG5c$>#Y{shOapbNu59&p?agZ zyF=U`u^S*@T>y4ZqIVS==LOt;(Ik~cW&Jg&ch{dX`kW<mkO}P^cr4((zecXLL211; zcA&oME$)+HRlH&z$2do>vdL@nA!MMZedinviMFT+5Sn{#)=jW>uczm(@;@|#5D)yp z?t9#DqEF$!ql=1V((`PWcVW(t1%Jv-_TMaJMy_0F-0ux8?uo4sG$h7XEJQl&)qQno zcBA2S97z=lI{)gyF_02Y)F(gd5JZd^b|&IOvkEN`uP^}(x?7{v_7966KxZEL_^>Dt zi*Nh2KJ>g)^|+t<HT{Sj!uVCS^1!a7k}b%S^H+WV2}PB;(1MK&tB72gE>|dvo?QH> zp{5SyJ#ve{6uWRqesHyUk^;satI_Wk3ErdV3|WnZs!<e2g==bvm~@=;yJOHs@XIG+ z+}o#%x7O-|cj8N@w}PBI@(XSH{G7d737N8K_U6zJ<isU0&;>+@e1+K^;ac4&d=jSF znF00j8nHEz4lzhrnJTVu_s{QYVWU`EvHR=zJ@a*cd+JS9gZ`qjG0|;=-fZ|)hhotG zvejUPT!6lP{<Qeh_5M_<_2v6LaX^CG)(5~WVMZ#d$lX%53tt=(;nV63D)9W_3=+Ej zb!Ga*b-qd4Pd}js@p%KL9<k#&HUW`uHekird^z`;R>>HcG0pTElN%qVhiK`;6isWJ zpekDmuz8b#b2s^y=*24jeKa$AA(2*^`L`n}5a`)gx%=+0p`<45e!gSx%*6wEEb3yN zN`32?s=`r*2iVea?3eTj-{cnL8dzi<b^YLDCWat4ng2$p?OPWEofo6*q|ZDMuCT_$ zMxHSs7YGuuZ&VeY7rILA*1L~n@Mqo4scG5IQ9r?afn0G%G4WWplRp*f5md4taa^rR z8FL0|!PlF>uMb5gG@rAou%uj{2N3jmiABZb9?5|X=?0&2RL|Qa#K_KmzDBHo^mcL= z6HgK8JhmJfV>TFvh7VUoW&}&WDgm`VC`7D@s1>UUEhguU^q`pQW`r^f%oVKS!$Ws8 zHD*Vv|9Jl!_+qC<%86c#XFAnK`+TghL_dwm!f6Wbyx+CE>P=E#)IhHWwh6@FQB5t- z8riaq45xz0-21lN^1$0$*dflcEh+F$TWYg(o9M>&RC{;KzIqIb<xd;SSL+Q~cMhvU zYQAS^Kiso5ZpYd^4x4I)yhF0xF08B}%&FSCCE3Uikio+%lP@&4K|eLarhl9qRl&*D z!T9aR&n8`ff&BCz=F>s9cbYeaEF3OgRQKVfcdYjZ#C+EOf*-aa4ZO7<Ioz9&y*{p2 zT$q^dcrpH)tS7?`qx!WCX*DsP?#zpJ{NGv|Bg{V7Ky2pI?c=x#-LIUSpRCtFOx2PC z@M}H0H@3K;^}i>ao87D8>pMuRIcSn)BY=rsc$3+^XsuP+e=q*6AntX!_b<wvSUXvF zNuL2x+v8t@aPYf4fD>J*RcV}|X}acvEt1`~opdE9KIiU>tk;un7-_%_!du6K*haQ& zK67j4GJUTfb*>XD)xs~-@c7<J%#>(=aUNG*=vg4vsCxJ^2wD?=hVl}RKB<)-8;wYA zR3hJ2mgF~BUWNiuq&|IA&e&cmPpVF)A+zeQp{63zX)_y9D|aSlo$UtAwJ)OUH080| z=fyhNHmsJO0wW}tw`a|3>260Zp)=K*zf+TJT@+)|?f0qzav?sw?<s@spDo3`cVGQ! z5@IR@%n;*tG>4O&L|{v-N}ni&*#)w-Fjx|1+ujG!aCEdkn``Xz)+@5)qFm&D6=2j^ zU|Kg<4g=<)o7<cULG|tF{pZ$+(Kj*<FE;^{tPZtbU?K7+RpG_eN!X!617f#0!%5WW zlJUtYHXkYf3$CiPc&fr@<%=?QO<rf%tp#|tjaNJ5K&-uNQfXra5|q`*K%TdJNe zmVm4-d{WVBuST-szcZRoqK&Ax6|m%Hose*@cfamb;&)e@vU&FTJZ_AWby+j!)8Y4C zJ(I)t4Iu)5rIz=$xoKIz-t`LEeS1TQio|UO;*4fZ<n!@}FXGz<8rNe+uD(|BIlG(Q zc&bTeGO`7OYCTvq8><IzWiG%|ZZuxK%#%{UC^p-sR_Wd$FqS(}XWg_b?mXP@sLIRB zJzA+q@PFf1Ww9=TxhIbEZ*(sCAbxo{;bCXhsnAparndZX-g*F)Z**l!s$3r7*)a$* zGu1h#P9~NE>`wqejiuNjO_yLY3mP%={eQ}Rr<doKe)_rws2}~jcBm}&X_6wwShxhE zMa#4VwwRdTxPp@oxcX=@d^*0f!ncV(Ek4ifo_i3cy+lh^8(04`fbku@rV(rG1>#d& z9uOek$=pUq+`<GDn?fV7Qn^vHAvp{yj)w0pk}TE#_ix;K;Zmp&*%8BSQ8T)%Ype6D zk$D>Vy>f$2_Kw;^*O4V4h|qiCsvI4Pjw~>v(H<wB-l+Ic`{r(ZrI3@Sn(2GQ>U$=1 zdvI4ZnTdMCWK<3%j<fY>gzpCmClI277f-QchIxJ5d5LKc&SzWlON|<%L)j<mES=p_ zs5o6mfw;8U0@uSbWsz+DjQr{8CpGUH-V5+t7og<xGEVBFxi4A`9Yy*GRd9{%cHnZg z7QiOSfRA`#WUQg2Qi~9pj~@c{ByWaFzjSX1Fnk{FvNsmKN29Wzxes`y+^cAUHW$cO zfmOv)ocZ>-MG0ffFYQ(6{i#vB?rBNGV(nK^ujjNs7@>29=^BjhWRjD#yq{Ofz!=x4 z?1vdqj&W+aqb}oxFBUduMiMkAn6SIcp@N&ClE1(r8eaiX<<(ZdcY$zzQ%E#Rbb+V- zFTf;Fr7=}ECuY=1vIb;r&n=FKlU0?l<|}(+a&bZ17QOxx=86CynC@W#0)@^TP;T8~ z?!9Bod08#_ouFD52Abz&W^@l|#KV0>DYAH<zSErV5>Jqb28yYQw1pw<@{@@)8l- z)!`pmT)(dc6N`if+mr#e$~8gNsel-Dz^QU>(~iHr)>`f9ADi3hQ~O;tPR2d-5eHQ+ zMAz5@eXb1%4$Rwb-TGn%LQ^K_n1A8d)Y&T#J4M}xkQjlZ#yeb?o1LMq=wQ~2xHLls zCP199db)*(%sh7m=6MgAnL)k+WbKC>#k=?Z6gBH#1M!h(Fv{Qx!rWyh#&w)*zp5F= zc3)psbM$Qp4P)@NBW|%wQsVm;B>CYta(j3Gp>g)OieyXm3Mm~h|A&VEOswGhLAf>T zvM9wqu<CE6bJMqoA84(CJjLXm5dBZqzUEm-9a3jF@&ZAH!5kegb=1~SagmPR&M~Ud zIk9@A-3Ri&-^^C(SE&++$GujVLg(VfX+M=2Y}&1~r}e+Ce7S#&3s3Yo#Qm3?J^M&n z(Fc%g8=Y{{<$Sm!G&^?%-WEc$sXx|a&6L>5u<O|tMR`<Hvp#OE$BjZ)1o_JJ`CQYb zD^FIAFgH&6zIR1lm~9AH?x{xjAEW;t=H4@^$+r9UMNvU%0@8a^F#@6#sS%MbA}WNA ziU=4(L|Ukk-a$Y>QHb;!A|=!SQUWT{n}nLsdqRy6@|^p5_ZjD$|Nd~k?sp76I)-p3 z_qDDy*Id7;%BgNlsLhl4tHJPMruahYl(P{H>S9@GYG8t^@~m`!hA=txgEjwU-hk2w zV6fG=AM-oL875NI#BL=SafWX3pZo}?#$4XFr$bWA?tp${;YnibHIvmaaP%W1rWq(g zCe46$9>Oz0HN!XZ#qAy7$TLM}X%~Dd<KO=X5&(Ahp*{fe(}?J*+|NaIvPv8FiPIcn zp1DENk=6sBW*=iBG~VYh?iyBNeywSOhRVwNc`Mgh-pxC|2)f#KIBomn-%EvEQUcHw zo3%Ztq^4R$j``U4Fj%JC1y4UTbwQZT14-|Y;B<AB2BDcBKHX;qao3k8-v|Ji$3^9< zl(j~^1C(~)=X&Y7K&1Cb3EkVIjUWuv)WYOEi3EBFRHVr;`l8{lue{x_lQYe@5y2w< zTFNiea(N+S$BF^=gXjg>17+;Lmm3}f+tHd64pRW)Wrd6E`z4W)`I1oP;NDup(E(}L zF^D!R+;zEa*6-~9@>8+(TJ6P|)w&zg6TgA0IUj4HmJZLW*rl3Q79FSgpny)>6eDFr zSnjn!+Th2qk`Dii9Xl1Nj6;<;k*~T$42P}TL*ros#$WCF4BRdHo<~^Ne=b*k<1xX? z2$qhFZRZl`;OFAW*D-MJ-fzcgXDqkFGy{kzAw3BoKAmk||CaRAOUX=)-<b9)a$}b@ zJ&CS?5SKz7&FDDi65BO?L`Qk{<AofiN&%ih*hB4=@|OdW+BeNE{zWg#g<1Jo{q^~D z=5zIWaxCFLGmd3V=XoSM;^xE^ihSAG*q>Rk6E48xyu=Gm^Au$2=7=IJ?pRMCLY1=m zF4}cSOC%lleT5VNj#5VsoGeoqP9;;XDZe<?RQ$dErEh-L-?j74F_O!IZwyFKz>%0e zw?$XUraK9e493I|dfNYb*belqnf5+t*#s$cOh!Sv>e~}N5u?kvzWIZ9ROs2k5S(s( zB1=L3M(ao8Jq3>SM#t#A&JiVz6@~II@2lD;1Vjuf(bqtq>&fNZv^!XeZez{2)&8fF zFPO^9#NPy5)DcVYLIA~*h(0aCw(rT>FFOKXXbtKR5@=7z`vXIl{+FBwJ6VppgMnt0 zs<m<aMcbJ;5y|s4lc4v4D!bAjO)htggvNrtHIX^Ow$Q&-MfnB@l8Q;+Iu-ZYDOO-c z%Neorvwv211@_8BEVqX6J=-VkKX=|ue_v|mie1KHgb=p6z(>;`UGtgcD<hDjKBUTU z%$@lYM@7#;1FQ?pcwDQMT<r`*Hk?t6UzgEdEn;KknmYNDuWT%SLsU|WUm&J#EVwX< zFr%;aQKW}#slHFLnPjh9RyE$-KO-R?OVN@dLGW%~O{$KOk*f}uB$3#VrBLkyts}ZJ zij)+C;*qq!+B0`vX_^pztqFeWSV!&T=RXVqM-Xo!JjQ0P5uJ^iN1k=0dd>V0uWRIr zne*eA))x=V-;Lc@p9@yIiEMAGk6iPF6-`Y~OgcU&I;Y_#FJ<%qIqmd!tl~5IxUE*D zgbfv`q;pZ2+eIjKUz!V=?8vd=z)Kw@QiyRTLE1saT^o**HX(va&~JGkgoEg}958wh z$MzFcb*oe}fuNLUub4$)BRyO%4tgLOK!rB=j@naQ0aHc9s3UYCz?d0HGb(p<Yg8$7 z@zpBUJuVsS%!z#aQIphI3hJWS&%;H4+I!JE3*0`#1HbskK%~i~pEFt@HJLiEY(VD) z<55R4$iJE(h3`o27D<&bXPMb|3j1+lUxfa+cV|+a`ZyM;Kq5EXx|$*y<x;we??n&6 z9Tj~VcSFlHF6uL*ZFa;WwRy<1(Jv_H8qjWy!6lfU@)<p!agP|nWY4FR+aGRd+=*9M zhO~gFd~JE(3B4Of+CYcv29+L|nY{bngf+I|Zh4-T2QX8O+>)24X%yHw#M_%fFQp_M z{5m~b0o9LPD57S}A!HDR6ra!(i4NJ8q@=MD04qSg$7P-GAU#xJv*Z<asOnMMJKH%$ z2GzxkJ%Q-6#@}RCJM(xwlG;`Q6%`{dCTvH^B`oE7^Gn)3^jMCRzSQ6R255BXKp4>= z2*^qxT6L2g@e=bE@zir>N`H9iy~nOy0G&1D1T;byqmt%3RUfbVZ-oR9Pu?=$+jM(7 zIcE5CvKip}YeGC694Xw!Lo_{#YP&i(Cfw6a4(jK9wjA|#X_Zy{w8o}^6Ls8bhLIe1 z=NX*E^|GWQu(W&~xuX1wCOy2jDc0$rI_P!!T%1b~i!QT9%6W&2&U!SDzvD&bR+&J& zIDi~ob&9heSL#)_KDS^}_95Y;|2xwcfVpOneC34gh=a~#Kvyo9o8?*6zA>0LQe#qF z6tQ!m?DP+vE`CNle9#f>isYnURgU2WFn7H*Z+nD&yEbG$>AvUqyH^?vSavB7I9MHx zJm;8(r1UIR%McuCyX;UPa$FWs*hl0@#4!ftu9mmi&}G91+s}WOXP9&0*|6vdeB9Ld zjS2&j8Ugz~akvQa$-jizkLS}|e^l_9O7ecp;GUM~&L|OL(jb@jY3a-x{Ewf#o^&O0 ze^j9IyxG}TnP(%iGtg$GEcWRh<&Lf)$+&@Ec}o`<v`5!JSip?w!}qJwcg-6^$A%;t zjf&n&itkHP>{@AZVyBS<#IFF*&<i=QpGJ{t&+LvK)*sq$VreQ7-+kZlCb8TzA&hC; z7w@A4`9Ql*fyeD}2wU4A4DP7Y-mdmuubqLXOG(<n>1k2GTO~&7KjCVnW%DEx6=GVs z1x+Eyj`alNtNQ|$cQW$4EB_jWzd*7B0a}=|)bv@r|BaSV!cyP8<gfKLjixDW*G?9m zt$~7Z834{GganUiQEsBhWEB>b{;}_Xoy8K$<6y7@#I(Re%I+=2iacO+7RZLopSoN| zoaPmJ8jkCM3Cr<!&#*IqlF+Jiy(8l&7Mz-LXVv|#k!w9yX1pF*@Si-9tr&`3QU*th zatv)dSC0gm<xbk)^8rE-lFM@Tq||uQN@@0Fxrq2W5D9i|1>onL9n$!c-JwjFu%Dc@ z>GpKigz)aL{k;A_#L7SPcFFn&YDvkg>nsNrt!vaji6(Ne&otFt*iE7WLoHt9N*WMs zM=rOAkX-P$X?i)=TNnb|g!{OD!q3UmAN<3x<&DuN8+3}8S&T^z;%tc~z<%XgY8m!h zTIaVZn84F22JNS6cz<O-OcxZY^~j9bO>iOGA)*+{!t+P2#`xY%oVntj8xQi@Y7SW} z{MkEQv4|R(XjT}#KThn3?X3gL;2w%C@aec0hE+ekmfP*k^z=kK(wnXO<F9-La{2?0 zO@}-^XXuR7V4&8ew@?B$^0ROh^SEcZPEsxDmKBm*69_a|y1`+9Wd`u{CfJjc61>2? zCw0f{^qB?1{ek*KJ*RF;yjWupH2=TANbzsI$7oZN=j@qCYzw?~kUCzQt<U_~EM>Aj zW~U7enWl|&|3WUdo>Df+-%-ZII9wS~+C4;PLQX~HOfCQGmApKu|Bbu|tOlj=-LLYK zGlyJ(>Te{n2W(lQ37{W=U~*oEO>Hab#H^FxoQ?MOF8eijf6MlT-ot1z$Jqx^GYhKR zoLfy({f4GuA>M~vg_mI4sT3B)R+HD;)D1$snDx+U*n-uX82D0nR#oF=fri7M6;*vp zpdLea*cYQSKdPh>BMg5iLpr(g)z1}NuRNb;Vr`vw<<$4PhW)L^yPK-Ogd4RnX+I;0 zt<`=+U;dSG7#K9$L@0xbaRcXT_VT^q4Xi6x0}yBg3C!Wq_gY*pETpa6%4{W>G&2EY zM$Wx$)?O0ZT@i>;iroFxZ(U~|X*$1nwDs`VBiSLt+Tlu+Nz=gA_5DF1xAD&~X(M&D zw9soOCO3HIt7xZMs(*_LP?Jb7sRv98SZn(<rlMb~v@$f+b54%wyZSKxB*(Xen)*0o zF`#LA_Ik4Z4}Ok2ESTkgd2HQyg>w_so=!Szn59*PQcpl!Mt!yK<Wksq!W;F?r(pF; zU`zlfE}vZRho6v<T~#;@01{;57>^Zs=<4r3u|zP{df2iea%#r^@HXat?9L3ZVQ;u- zSs!9vpfjrL;vQVD{2aGzK}`dIorrF$VVq77ykG_vX}VEyf3Aq>oxfKhaMn|(9>7=H z6!RaadQ2&AupGH1gzP{0B<^w3;GRZYOioQxgy!G3!#{klUiBv?fx4g#<jXN`#O(`K zz^2R8VQs1Ci~6iE%@(Jch!_SJ8NizT9#Kt{Pa~bYUGEI$r|=eheU<WKVA{^D>V4Hu zp-Zsu7ky7NuM;YV=dg(%&}d*;v=9rlyf=huWA{-%ABM?fnW(|roBupbl!XHEV!(C- zxeEhZjzg;Vxzb2)q<(QWk^7*1fjnf}HbsPqzCEPFl6&oPpOh!)miAv`wgus%rPR(= zMw$d7^XVW?tI(DoLrh=S=>FthbQrC+?GROH<vPPPB<FRa&F^)hX)GCesc(8~>eT+_ zT7YX3M`Bax5VVghs>nw^OFWWsbG-fTOUM;b)Yvy95kb2Rtfv)@|7W$RbBJo&<#3VW z+xg;ihiY8$EWW_F`awjRQ?!Wy3-;YYWk1oB>K8!V=A+hGP+mrmgidS>IcsJwTaDd@ z4OF#Ud~K<AO-*_{e_Vtj)}G0cC<m(%aW|4|)WFC|ha8x4#uv*+O(JOPeMq7%^tI+E zpmOGHv@VCF+;<v2f$w3AsUA59Wc!g`UkDM^P}ILT&8znQ_m2vb?1eJ4cMasj6isOW zXG+oSB-F)hz_5n#yvdUWQmG3>A%wUnO>i6-Z>o}a=@DA0bSilMKJ_tq*qHnP#X37N z=CS_HM0nhCF>%k0<?8Yze9?Y1VX-CWwY;3P_0#LWMEtqRpV03KRyvq}rM;vgoeS_# z?=pg$=XV>`YFUY$=;w-uuZj}1<!LHofpR5QEp@!PGSNv@cY(Ant-FzvQ>5BpSqEx> z?a1Et={36eh*A&Q+Jq&*u=~i^N8d;P!g;2l=F6q8#(8}jEf%{9DFxvVaTy#}rmfmj zIsyMB>9CbSaA@iAT)!}sE>!*2b|ZbKNk4zTO9TpU1G6bPG9uD@EXKUcPN1ET@-d$} z)g4~(4VP<Snt{>CYx}W4GWAd54;m!L^~i2pY{C(O4TyFy%?{L|dohhO?fv^|WKw|z z%)5nvBPURdQf^MxZP)EG@^29x){nn_Uw;bTPtg3{cJvQ}Z|uGp*0wu9<Xy5}TlBBW z!#~Vt=r1fX=Wvemt*lfqo@_v}jeadk>hOZN3#Xqp+ebVM#y+O=C3Pen3Bvxf?O>`) zoE1O-g0O=;MLq*D;2LJ0VuX3fHw!YjC|_z&#;!=HYvElzg4IQdnGf#UPCLw6e_7Mt z*>z3P_qJFm{rV;>{=x>RhZaO0zem|>kS}s7a{%^2hAD0`ODOqqM%Ooq+KC+VcD=3N z&u>jb@N_VRxAiFwn_tx^733)esiOMWYX>o!X50fjmsK+am71L{zMt1rp87lS<mn;$ zJ6gjWIFW49bn(FrWtcHEE=C$BZ)eQfUlYo%y>)FlzJ-aZ56s3@4`##wao?rXNK`y4 zj3FT#C%EMm#NE+ycF;XC!wp{GR(gN;%#Vj2q0k&)%bdNyC65YzG@^W)Hvr^pEt8OR zRu}CFCgXyIkpsif|Fteddew~S1O|Y0U3C61y^++%qfY5_?UL-dJU6rto__b?r@abN z+3ldqQ%kO=XN!->D}z~Tq6zSHE@u0|T%W%0cKdXx*uBgpS^$8kkr_M}Lb`#5l^88_ zs=_?QABz(LZZMk>9jt;Gp_~fI&nV!|gE1|1XW|{P@UXuSKXOmIgBbai<4WeeUAwgc zrzT*7Flg6UxG_)hABI|({WQ;#=nXP&8o+EI1dT__ZSJ#aj~jaNrWgiWvvzRQ1iT35 z$@!m$c?nIEYMw*2g^Vam<p1gRQCQ4uw=#LjFL38PAVUK}=h>-@^Ki+Ay7wLO;E3-` zVyPD@|0{-3mmu$Hcc?BN^T_C3M-flRAR4w;=E`NN4a@fYJAO6<U?Xz^DVvs#v|EQK zPsI3<bM~GytW+bdmgLg4YQ%OYL2_bt23W^h?0Tg3DR7+W_*aASdMgu6$AbhuTQIt~ z;2-|Y-po}Y&os`b($K=0v3BlM1p#OFm?};9hap-SZ8MM0-1-7nkWPF0tzl9yiBj&! z6Ud>i8tDytFxxE(N{51s+#jhn5o7hu_DYn%AqVOQ5zk5p)NOpPTabGOXJk|VuN97c zjPKC($M=WI%OzjBZay{S`CM`#M+cmyM^fY@9~8@5r!zvYCVzMl@#pQGBS_}zn?OE6 zSTSgh_vF{^?do0TZi-8@Z74FlRxl#GQL8RYdc<Lk9~PM<Qu5Jw6Kgp6V__e2$6m<P z-Wlut4J(*;PXb!W^|yeDoW3603fKXs+2=dyXX^*i(&@5r`SO9D^M6S?-kg3+$ED|K zpm#vu8Vsbmgw1o%SSpZ@s1ll@w+A-3yF_KvL2<Svf_qbe<V%XrbdlJ4y2T$V+ZGN; zg-~DuPOWF2B-bl7>24A@iLL7bnpI6GEq<ecBgnUL6wQ(>ovn_#8{!Q`%Y%%Z)0S#d zUrZG;*vun|C@G+>9pZse0-xP-6rHoJ6j9wt;HEC)<FpeG{$aR*JErvV5>E_>4$b6l z;-2W~xJOpl1QUytzk@Tje;Mlu%nV{(P5!$g?qX4F^DsBuGr-!qyA~n-W9$(}nu^Eb zCk_AMz@*UG-5%oj$*!}#N`y1fk(+v#x!kMy=6pw_ft6eY?&Z|SMdzvFb5rh*pd}A4 zG2}6@pOr%>x3*~{y!wa1dZdB|A<4;Llx<h>1z(P(n8$DOJOvZ%#JZ{jVdR_ks%?bn z4eeVLha9=)FGJ|^I-#-W7m3W<U(8Dp>bu0G2ryB)mYQ7N=D{lZ+Q;Tg&gRw&W-Hxq z*+t3tAf}?JpsIGl@-s7anN+vU<S$PIPnzskY!Ygm|2JqFndK_4nFzI1mHCvF`?q)V z*k_0y;w4eRj5{}}^Y{dK@tTKQd9U9gYwRR5&?{V}t=EtbzyDD}UUX~B&sLyZ&N&bm zBg$=UsdoKtz6tsReNX))7PUB}L<F+uy>g20+S!HQsP?QeYE1|S0DjB3|M#)k%&^x} zkz&yas8AT~wn9GEtsui7kzER69_e~w!md?T_Wu_k{fy%DJr(#&wFP68O%06es<F*} z^5u?BTQBP_G#qw_wf~EH+CD1QzVR>itc~2=7Vs(1fCPvF;r)0U#J9#orG~_LC%c!- zQ%$1FSHvRxA#G@%phuH-!-eDAoi|n?&@<{)r|9p|f-U@sEV9yEph19k?MzOfInKi# zTV-?-YEy-}S&ewJw100pRDiD2`;(LZVUXI61J+gL8)l<gndc}`VP4a)Ko8Q7>_z5u zW!w*=OCLP`mSFtJj!`5sCSvb|3m{Gvmk)f+e9O{e^##>eTh@&O!^sFY^SHse3Hdtk zm!mH}ac}zTml5usnbk<uwgl~8(9RmN@aAcOGd_dXICSDKrpFGco&cQ0Caa>rvxs0? zY!fQpkiv8G9>>FSeLY8@IO%;kO6r*9{xi|#+}Jp@^)*s)bUNoL1I^SAae|6|2qr$I z0%on#W!V(7Hh~SS7#p4`j`kQ)ml++h;CCqGvG8N&`H@%#Aj>vdq>XpLg%O^5N!{v^ zjg95>dySR_;+aqGCbqxOve0=D;OQ`J2gf^JFqsDfO1Yw=$<x9E*%$Q@2LP6B`Pn`O zSlEaROrl54@&N*cy=MtIR*Y)(mTFJ)Abp>mfR^Zr<Cag{6537xYA5hdXIZ|IwJUv# zD_YB64cpxn$J3e)<Toe|aSp!ohB&|qUkew?5~w(bit`#B6T1Tc^z-o*iVGmy7_`Cv zE|S;jf2%5@+Rdq8+X1W=xT7&RNj@}#4X&i}?H<ep7QH~!9}~MlD=V(73GEsJ+1_>v zCCHo?HZQi&6Ja=Agy9|!=CVUHbq8M^lc8L0$i*v<fG+uPzc#XfJre>B69eMIx(&Jy zidwIILlfCQ?HPQ53ir&RX$=J$sCL>1bi9U1r5kQZi@ki8e8}n!oz@m!_oSwN&*ZK4 ziOt}vP41P%+%a5gyhetKy@PoIF(H9&B#`yX<i#7-_VgvK-Y-|M&jasJbveQ{WxXqU z=973$*z($)ErHJ~9d=DBc{>sq$Hg54*WSFhL!HH|DuSXEd%PRO&Na6;V4_zGjpoqi z-m9$s=6c5_4D8(g%VBm!$z)r)Um#$^YI$9{6$0)6nQ^WTP%S6h6UwHlySY~tCj}ld z_f%fizC!@jR1Vfm3LW>X%W03z?2scHvTvt3JXhzHLOWu>0NGswCGdypYf{_PRH;)M zQ`m%kZFE7dW?uX_-JCiOJR#PTe;6#7y2Pk_R=lV)6&#&HCz^;3yg8md>umchx_evt zWs3Q?y04R{uBPn>^)!4@EOz$15y_XLRhxC@vD{R>+t;^S31<?uciG+@jhBpnq#09P z>1q`Fw8{0x#MHCsPtii>eGE4oHIJV+wElnjZW?o#@P~+GW#F|u-yJ7~x<4wfG;w#v zduMVH9Gm=i91B43y|kIh$8K-d_%ah$XNVOFLSFH`@w-&W<NuCJin*QyLp-M;1Av;j zv_@`z+y=f_KvBVZ<|DSi9IJ<QLqB0J$>k9tbcy}FVmO^U&|nNLGrT_=gHieXMzbk8 zubQDzbXqR}61Dd^h(%|(=Cj=F%gQ<v*E->>;v9YCwSm%1d`{~S{Pk$9awo?{xalu_ zq|I&|_#KKpw<c1Jrp7vyd#xst<WV0ozCA8W0y9!o+rXTf+zL@N1*s`zvTX>L-Tg|b zH>v5;@65krf&itaaKnD`o2vhCSzn7BHJ~$dzbka+(wKgna(SxeI9~V6-H%-yXpg}_ zFcl3L?5U-RQF(G7EBc8B9St--c}(%T;BUfAb7{@XwH>|5_wOPe-VA~ctYEap>D&lM zyy(@|F`QYEL2<9Tp0G}SvL;rqoBVCv?jMHOVAeq8VVqX+v}z;`{a#x-WJ|{T_IC-M zhKjPeniz%lO~#&~StHp~i6$yB@4MDI!EF84&(omwxv{bpv9o?UN5f^{&W9%6#FGaz z)4siO<(0Wdm3J9v>z!V+fDp>VMPTu!=CR>QxWZru7M}c!1+J?oX4>OoM4VA8WjxV& ztbDKM11@w>uJe_%ZkOMx!{onyF>)3velHGK|FlSHbI+^Kye#b(`$^+1+gqSg<j@6y zs1*zo{Y?Kq4EQm=_7lDix*)ZcB&XV8!#Y+Aa~6^zM#5s(CSOEr9M92tHvb*Ej_5fy zehrcxop(?pM<puIJWAJsMJVyXLc^C0FP@iTz2bde6pOmjVHR6=b<i&Gk@n+wl^#t& zfNd6hsg`UOR<q49VZ4iXMSprBcB@+P<rRvPy$BCro<6O40agc9msULrPaHCR<MPR* zn#<^Tzl&x?h0i%Mt!6sYlZku{EqsHDwRL>lpK_TF-@WUuLkF?u-#FuYsm5GS_4(Fx zNYhxBof$rh+lImfkjZGu0S9b)@SHSv3QFQhiY?DFnaV^epQ{n$$xYT-t9>_aLLMh( z7ZJBF*&{yVgQYVZ|0R=28V~wGg{}J-`fc_FK~a>X4tvI~Y{|NjKvNeH8t*~m%vFJD zmC7J|RelgiaD5Kh0Sa()$>`u@o`1BV*SRpq;gWxnm5aram3!0D(^Ni-RODzPTOtj6 zf6Tx56CC_v@-L(Wc$h<stQVOJ7*4&Dg)VR2`VQvK(_zDOTJ3%C@r^Q5S(myO(ZBq7 zHc*IC7d@sSCK!0{v-zM&nJJX*Tl|kxeYYIQv7D!i+e6;Tj>gQ}p96B>9sXg^{}hTx zgsOr!w$9K)fkd5$fB=kKfdG2zX<+G>wEl50P=N?PM|(RY7pP2}cy9E%Al7Y6ZCcK` zYf;<jMc^+(jMu+!QfX<*9fnMAKL}oog<5Atan8;m!nv+Q$q_3R&Ae9l4ex(C-}{s! z3dt*d#{h3$lUViwG!V>#;02#r;p2q`$>#<6y*<qEeH*V-ReKX@ys`4%q2_{qwn$K$ zx^=sCJH$AY&^G~=+@qtV`G?PWbTzIrvVxneX5Fd(FaW_!7-r-w44`;{Oy+zV=FxW? zI!I{kUncz96(s1Ntzg8G^+%-uwO@?yiv}(LD`Cs)3K4>4Ni^^IxLIK%r1D8^K5Wy; z=ztk*4C*wP>)xrT2F%@_fuIquGR(zUf?4j=jCEmQ>Y0oeH*Y6oB^?WS?o|vEXYxGC zsEi%{Y3qEAO~bI|v?Pj#em?4V<_c7*i!arU&Na3TtGZHKne9qBSxksN(ep!hp~X5J zL$)!6Wqu{EZvDYu_vJe@14ti+VQ#0A9(eBY^dWrjQj)^G`q>aomXye{Am3sKYkaXA z<bi{jJW0>A_&jm^_X%jl7?ey!lLA_qsgk>v!`H`-P8_a^ha@s;rd(qMY*ZG@U^tbI zT;e7I4Jsp;_O`mKnUd1qohdC?_~~oE=0V+AIf;73?(46f%fB`H+oiAZ7CQTS##&Ay zAR71S(<NL$-RtLS0^70KxQzM2cY%-+D(GHoeSK8Ncw>0wtRGuKpM=~6RGDlcLiPKB z7@M}#A1kVR0Defh3>2oEKMc3X<Q9O4k@+O+G+D<jQ5Q8G^Lomr*L-})6I1Q-1-pV1 z`MY5TC@O>UiW21Ws)}hj&5@#vUn(m8>wnj}8|K6_mE5k{W!EJ6o<9YcCo{S>0%zZB zw6;u;2Hw9gh8V>4%<VPd#iZuns7J{D0{_<bEaQI|o{&w;*16GRIWR5!hw*Fm+%>l} z9i9Tl-OEr+F767QTP!YEdSu@(kT2KueD1`osT23C+U^TQm7xcsRW#>P+S^)kdbM_m zGqDNEzbWIkRFfQD`Sq@e#Ozozk~o$}3Nq2-LUfzdRN~q{1lT4iUVe0|N#x0Kz&OOZ zMTQSe?6vSpftahL#68zA`L+RkCo3J*U1yn<T<MqE<^crH<2XFUt=obxba`uvnbw{k zgaGKB5x$<R+MMI%-T{+pmq*IQ1C%m2?YfmpD+)LsM`<2I@(1lWx^5{oYDYa|&+#p~ zoL5dDn0mM=Mw$!pN`u%xO~x(;E4?~OPl5wcfYe(L8*0at%R=}Ff-WhpPaSc`f0p+* zJZv1!4l5^}MI4E-J5W;}QqE-+yH(9}5yG}JXRPuQ9ta)B%h2%tSe_*mPoOO+OTm5s zr!@yt>D#s(8FGuyNQfpGe(&=W#r_Uz0`@{qPU9p1?E`St3YP@)LQ!1Kl*A?{AT<4c z12*wM8RuHzBc$&tCDrpd>u0>McOP`p6~jtV?PwB<1`8_x33Qg3|1<H&=4ZhqULLPl zOOypRlgAp(B4@;43J)lbVUM4TAglK#@rl3YOk?IE4V^xS2O`e{wt(5T^<%WbcgvJn z$Cd&mh^o&l%ro^(<<w8XR?;Pio1PzE$7iaNLS)8_>KIl_|Hv<|zNwy%FG<oMMu<~C zeAA($$YxH-7A$N^-kK+69mZpCdtXY}=dVfWoT$0rx%lA<^&Q>O=IABguB1Vm&<A0` zpy$+aTc9a~x2t#6NbL4TlxIj@pZ6KP!n2@av)r9^cSz`m68J&~>x#7D!po^s0?UWk z&lOOV;D$GxJquz+Ui$>6l_AiJ*Dk-uU+Ixh7-pa=Z)aXV99OrmA)qs@X4PNXzW8Wd zS@-qLxmWvsMVpK+p2bu_LYGhsy4)SBVW=#Sd;0~}Po?2R@2MM5CX|vQ0THgNfGE5D zHIlx!S~s@S-+b91R{s%VP2jAzPvN>5_1EhRNK<3wh|;Gm!Y{WvbWM!XH324a2^VM5 zD}dvzMmhU=9mW4zX+6vAVcoatA+{B44KC%BW+d!WQ1}Z5u+4m+tp}QBNNx2c%CU5+ z9?3`L+A_7)59iBD{hsEQ8a@)-*1lv`DpS~$yY3&hmLVvg`+DfWe79F1R_#gavF`7- zik(;rk`uV7SeDEOc^XiW`L4ZAc{mRfkK)STi7P_!H%beS=jp@1vKEGU`D6)Te54J~ zn8t9nWeC;#8F*e^z*Y#oIy3n&aXm1Dkze$=XnYWK#1->7kcDh(L`jT7q7k{<09_}% z!gl@Ra=pnHA-_kK=1D&U*Kv9!Yrf#>lcbmj4SqnVn)<7$8j4A!`(+D;vP9y?VC;sW zulVgQJ@xwj_>2r*F*fCf@`{D3FZmuUAODoy6TNr$d(xfG@hg-7D-^M=!_{k>&B4(W zy{3BJ*;!_^W9mU)cRK6B?$O(8n8-j4l4BHImfY!|6t^!DJZqb7V$u_^%2NI|TGU)x zFVR3T*<o1kjU!(mFlBTx9ePHtMV&pUE}fN2YqV35dSvl2^#^^^!|{JBXV)+hI33DM zaP+uk=1gkdjNx_ILVa!M`Y%J$O=HF!naJHR)K^SkF3yEi6!whLk4JK>ib`d!Al|H| z_OssT`DWymBCqqWYI|gv)PcItHizPc&TtQ56u_18*CkqOV~u>Zs;hqrZD>_vO<&Vw zGl2uE-J)oEEknK3jqp2tz~0VK<beNKP<YZ-hGf&P{}xLXGKPK&)j_{eJ*+7~938{C z1-O0LB2?Nk(Qjpc>V2!Ctwtp@PVax1xkNtM7~{mt^<r^3_K)l*RZ<oEr{FgG+mT0o zStJe?gW^>mrU%@n3Iv$ojU=}3Z)MoQ%}vT9<_>ZsaEQNHG)}K{Jy>eoJ6e8QUhtl+ zZA}6fnCO^!%lcMuzavMv+{=dMvHgk7r{~-r*{=M0&-A94Eg(DT0K5?=w(%{@Y=?V; zsJ)$51M99;gvh4or*sbf$eDktE4y$Jx-3IBXgda9ymJ_=5gWjw7WktkF2UwXZ44cC z;=c(ffBlh-T^QnV(>CYCOb<MO+tvVH5+eL)86@@fwa1#Cf6arc+{PO(p1s%kA&IhU z?VPqX7{GCqz6zGA<Fj!t%}+W7wEu}Bf#0+aH!;Ga+7dKpsEO%aAkdKDg9`BA!B*KT z-mEr0cA8=ht1x&r)`VmL?i?dDYu;oEOZ$N9%+=T#qt_Kqrwx~qu1RyY*fJIBZ>6n$ zfUr<ZzTcqI<*p4sYHh3@hB^Bc@>YfWvERVG_xE%N0Q!02Tqttk1?38z6{r#O-m^g5 z4)9$TRJIpu-_fiy|0$eNWqRe4)Gc|)mDS8`SBy9y62KYPGCTQNBq>m;lLbOEOj<D1 zR;yF(xEww5i0b&53Lz%_tN5zsBbrP?2f~(2MT<*rRjw_LgrSBS`@`$91?tHb9~@Xy zz#H|x5m9}+qBreQ_!qvU7%h)AT?4i4g8>Z_$qmiC(gyVU6ZUN`ev-4Z)3tvR2En-Q zzC3V(iyPpr5B8GX2fWX!rX!jXQl{_#<wSwpdp@y`1~Xv4F4Q76peq^%ktSBzBPDe& z&fRQQnU8-mY6c0lZN7FunC|p6W$6}Lh*x}c>Ia71Y@)TDg~4{46A{-hb@-<x`kd2- z6B^78WQ_5J2I}OmZ5FRV>T(ywtN7|nB+p0xeZym*y!iy8Mqx1=z_y-uw5FE2ZtkTp z_GtW;+%f(V#g2Hyu7<fx=FK8w+C?RU-q7v<mHv6;)h%VYN3u53T2W?wjoa+&C=N`E zOs{ADtAnGcX!(tUxRBycsXepwf=dnN{kKmytH<s-#*4~DwfhPRXZpmPU`ai7>1^`T z519WNeDqw6hnx<CQhqA`@mkfCBUT3}SI@|yGH)${uAx5n?|T5*jdh)GfPv%VhKzga zmz#Nh#97pM3w5^fvD%8=0L6<L1N06V%68i(s4M$=!x&Dld@a55V_xJ8NFy!!D&tb$ zf)*47$aWrN*}hF=Cu>o$dbkz%FMG4+_xCGfbgtp2<nN3Iv0CZW{yT<Retn+*GVUC1 zkO9G#W)#?nNo3Cw&bUn4*0;C0I(LhEyhn@8D_D(kr5$b1UTO78RD8I?t4u4pF&I^{ z!TK(O@%fD@hRscfI%i*a5LBf11I5nvhpKe)ZRckjdS=!$GMVkO9gX>ffyV{iP|$Rw zz`2W22ryZAynnovn|`^U7(>$`BG0=uBE!)VyU)^34vhz{?(H%a6?oGHC{Zz=I|<rJ zl*jFsKB^Ed?!s3pohBUFob|`Ol|TB_FiyD*;Fw@eQ57<2rE0nt>L$|(e>2cB?mAu? zmbkyfbnu3(>rD}h?mubm0Qj9{->5EgW=vEL2VBj7yG!GkJFIi)r}vF?U3Qu`gKzh$ zLx!GTT^E?0Y63}m&_pqdw(ZDBUrZmOgBGzL7!N=2u7OyHi?i*R)2`!|>SpmZ4Khuz zL)Fw*ik}wY_TQ6+fIp+Ig(I`avX<;j>dQScl8>7a`gHljoPfzKMTvL9<48S3cLENE zwxS+B8PMjVI?P&7&Knkvx);GJ^^G~MtNzZ@@R+jXO`>p+Xt!S7dX>#Fgf$VlIXCHO zQ1t7}N*m7)^CgvFh$B&XGnlP;XkYBYDkNJh_O{oj&B4vwL`A_|&hHo0orZv|2d2~m zfAZ!?wF7iUVjN;#pH}##Eig8`@*jp*n#0_4@D3E~NADmLi&6KDjRnXKMt;apr{DX@ zx#q3dKFZmw$buX|4h9LiRexW7BMmECOx}HQfMF(&N7A`~OxBvQ%hV{|GPxMQ^bz%N zl$fsJxoMwIzfAQk4%8diKRb?Az$R36yGg#XCDv)&m=%Y8{dRlRp+xV^EWf4!urS@> z)0mx8B=Ufw;AF2d8oZbB;zp7f+Am@@QTsMfJCeZ>IIUMlACg4SHJJ40l{MjtyY+vc z96@pbi0S=C0LNjANbM-gK{WR9<9~fo%{nDlncV$^N$Y4lchCV!(I5sTCGD39HN&5b zT;Dqe`P@q!dM2>T5=1i2{=?Jt?|_*qj{3__GXUl)K-M3nbZ<M-Ml~u>i#VZ#I{$@W zJ@u3IcW*=Hv%@;k<pS@K|9H#+r~CieA0E8T3gltn^AY8KX>8h90#E(t<0|Rj#=#OH zG*ApB3Rp&;1C%(ykw(=}Ec{}YnOW7nlnFasp?kv%x5B09HV_YTk>RLUD_g&6^bkKb z;lTk+e~JHr<>mJ$--F)qObj|)(mubMeTxE#-A@u>Gd77DnZDj`_u8!bjOj<(58BmH z<Vy@=VTKREyColf@BY)?iDT+~9oiSn9LNS7y~@zjrp4EHZSRc(p?ZFmx+;UMJt7Si zJJmG37e_@=`x?yBI|Yr{^fSn<^t)f_*d;m#RcfvYSipa{?!aI9`H8I+ezNIS`e)Y} zPn6xTrU@C`&KFb2Ce%T2u8gG%xL4!+($|oPu<ZR+ZP7ucZ4NhcH-cQgkB{Pue8uHg z3k&ng1$K}w5%%RyQKsynE=EsHUzKr5pkT}0^OUNh-x+mGNSU6bst^v%hAXhL8{Q^D z{Z)h<m-l*a67MjG8Ml#54`Xq@^FbP&g3FOb06`*O=jNo2PiMc!^_(Xu7fLJ`L`T<a zfK6X#@{<|$kwDo3d*uQ0A)zox4>svWl6-!JenycxCPuqu&@ub>a0HMUfhkyo-W)Pi z&@qzcTQc(}%ckqslr1(q+0m(2!?qW~m~t!j;0V-%q4T(DOHk7=>n)&RxqXmHT!7U^ zcm>kO!pcx3Y`tbIgC^S=h1!!{Z9N1^t)NRgDl!ui>P3A?@2gI-J8iYpSa;nw&(PXH zdlGqV?;0qEYLPRwBIw@a=65~;WrM3v=%-;5ja19%_c+>dnH`<lDj7PXfh;))v4^u- z(=;YX3mZ>Ww{j<@^}}+E7Ia093-8q|*kNWMUt3H0&cFXOmJeKDUk>=)@V?+EtfAMq z;;a$$nr;2<Nr}6c=m-o4xoBgN2<m5B&2W&6vQ+Opp!6UFS4y~VhR*Zv|0txU0>?78 zerQssW<+H2VTgO3{mJBWBtqYyAOP6LN7RUjvZ=F_O%~_yb2&VC`QgNBAFWQL%Omt? zu&-{74x=d($|lgb;<(LSamWd2`D6%r4Fi}Wp#M7DGXLXnt2AiiIL{#<vqlXt6}(ZY zDCE%!cHL!UT0fZqjd7lqEKOwiUIgJGv9YhslThLN_0MnG5NsW6f6wmzXv}#`-IQ!d zifs`e1xDdax?^6b3v1buvjx-EAIp;y+lTMWrEs<`qt<Pa=QsBM=8prBcTLQDy}H)f zDkeOzF6KPbXnsHy*)jEJ;~~*ysV30*?O4IZ?Kt|((G%XWlEUc1KVKqu4Nmr$mQ8_D z?Mel%b=pTL`Z+N&8Xhvs=0w(ipZfE10UW82Sv}D_Lj{kibTQxV`;I%#+&2bw(>Tcn z9lQi)M;;&`H1gXaH*Wl9Q^R`!+h^-1y;xPiK!f<d4K$+v!$8vv9RO6%1itp#M>dFn z2a)XrgI&Sf)uGe3exfs%wWZu{LFuO{?5VB>1kCl9k>UXjx=G_a{nWLtHF$`6Rz&lM zStyMAm#yJI2HWDPZ>Ls=8tkvw0j4z!musB&+;J=0iaLz&irci9OZwA*NNnswUuA$H zilRZu`-icCAm_XZ<?pqPBb$%@Vfb+yUX^jOyc$M@$O4zze)1t5@d`=hN46KQ{=>lF zWvb9!dngDwXfFILlI-Dk_OFrN_^0*w6T+dFeRQ7moYUnj2iUw=<bn1LYTC0>MC>on z3Gbvy%JkFZK3>nO65qfRS9Z!A$%S-L<Umm&Alos~UZFbrBLu}FutB<y1Wn_8pVO_& zWx{Kpg?wQ6LRSVD3_Nqa?90ZK{zUiX@VFr3CBoAABuWUgr6cvc;}~vd9#6kcZjIM` zmQM}%o|%o7qn8}i!#}^ZWf&tD$<+zJ)><Fc7IA${g|`Xnrv^wG`N281r?pp;V_dpx zmz0Oh9kmgV1LUCh=1u#@-MUXcck)4QHFpTLv^GC2D)MIB&FcbJ`$jw^kM3m)R*%Sx zj)DhAw{Q28KogpLL@1bf6+A)k9?Q`xe*G0!e~Z8S@JV(Up>92yT1h-^y+l(VS29)m z;9%cYCD&VX>$K3B<9VJmzBb1wkFFBHLV=AtHQmEaTbHr`NP_}2ot!BvYQX(C(>k|= zy(@@Y=aQJ2v_5C<i>P!>-XGrFc>UZ81{=`31RZ?B%5bgM1I+2Ak!AaY44cl^_a62x z-g>DsaY20>h{Z@@dlBe5f@QmK+;%kcDQ9*);aRb9Kh#;kS7WmvUi1|GM3q=Xlb(^F zyv!lZUUF^yW3HUJdf;<Y1?UiG`e^J$Jga+<l)(GcH?0?2Bv;L$OZzxQc%k81?aqeS zt6d0Ylw<V?n3$<8`VT{YOA%18qiEN<+ri;J*&Jiu8r08^t7Vbb2winex!IG9&%8v; zY!0sdmo(IKfd+o0AfYZ_o7$|REVGW>c7jHn)#M@lX-d#G^NJzsCkL8S!9$8!7wY^< zrWUprJva)lpw<p=s%1^y?%<fCK^=+bD$CYqI8**%=(OC1mT2w&NEtnv43Rwz{{9>Y zhRBV*#v;@caBNsnzGQ@66iT_Ld81^FrK$M(ypg=K)!>5RhsrMNkJpk)q@V0TZp~Ab z<67C2f`t(CqrhExpytz`9Cs%dxkTd)w&c~!pH<X^BI^!Mrg&N_$E$R=B~!NF9}_La zx>*2hh~AOsrd@Yv@a1XhHc2_fP2GDF6OPCBr}^E4@l};16;&<Jy*IpoTatx`uRA;e zm5F*~)!B7@=i(Q}y&q+lp78p<ap-i$rpZKWbT>TEUwmE;KFwURg1IqFGe9Hsp|jNc zo2?`rl^magqxgH3HNeKSVqC}svlKMxDO89Q1^D%^!oAE+cgQzm{&L-F&e)c$KINDE z(I0|wd!*E8|0RX1kDSL9kdliAeu*c1<8Q1cmGM($tk*0|D(ATFh?VeY@z_^<H5sXK zduaDl$gpzjZ>%gst=6e$e@A0Mv6NPt^a0@8-{)Yp!3RL$Q163DBk3I)t+@sNc)%zk zkh|L^ryRgRrzd~aE(r3Iew_CaK(FKHGL9o9-*T+pr>c<>pm-$t{mgn}P*?idk>_K- zp6%+Lk1+%%dIHQ_;QFZJ=6m+fhe_j<=zLd{+i^wF88MH?BdQq>t!;WeeXr@lF9=8{ z_wig}O))jqdyXIpt)tGalU*0PisVsm(j$bReqAc(!~SgHJ&#-xCXE~DJ(QzK*Q3}H z#Todd3*ypg8&!B?(8C?A^`tP;B(<)az?(I93@QoKtRsP@?ejpFqJF)P&e-WEI*kAO z`#{onW;E*M9G=+5bSSx+UFQ?3{P(l62nZ;ae~~4TEDiP3EV-lh=U5k}P5sYf>aD<H zE>fL3XCy|HS(sYL`Qsi{M(!;AuW||E{ogn;<$g_cOQl+9!YL@-p|jYGNG6(e<NnII zvA#Ck_qVsN8vxnKw&X7Q@e^v$SI1YsZRn&y=`Yy@(Myf~z}Go;jRdlFbC(yER+LEo zvv=W~QIW2sDc4USri6FbI&#jTEVkt5>N1%N)3{8c6x;LXn$BLoL%Rfgeks&2j_4Pr z?2Z>$e44@@?!GjM1PLbxWk0ou-hbYj2)bz&+ammJaBC~jRB>Rt{F{8udfxHA)9_QV z^-~)?$=2Wtfqo@`t*H_Hn_v%|WpVs3hKJ^!PBBWq>!HqF*#Gxs`!D$cb+<^bwSXG| zMV+54If*}W1Z(a*il2|;8tThWdeo-HF<rbT77AQGV>NBI!pgK}<KI{J29zj#;+c58 zWhq?6crxc{zunR7^k{6)<a3t$&+7^)2MEz=;oGK(PuM!Pz1HpZcy>1&**H3rgb;nl zc$+OOOeL#SIV-LC3rUexgLB^Fy?<0ifBV3C9g?-8yp<@?P&eik@EK6~Iz1{s|41IS z(Gh<Z%Fyd0#<8!qk2#I-ebOX8HRE=0$dx=zP`<K%xo&-#&0x+>9T~PS=kgHf)zRB? zwe`4^A;RW8op&zG+BO3N!3?W}#F%FRSK>9FNH^3aIxWtyI=>gycJwd71Oiznr^=|0 zZOu5Tp;R`XK90*f3+jQ}<NQ2(7ChZFn=x-N2SRZD@c_EFuZXQTx5FL0SQ+r~eK#-) zW;K|1@F=25jMDtxcqhdj#i#yya`M@zD)og*NYpMch{4z=MJ`cPB1mYd4x1Vuh>aok z%jBzvUlXRCI3o<=-^8nW3k&YO0{x_`x%sw8j?jdNfA)o%RSicKUdA2;KnUHhWd;Ez zjZH2Y9M<3A7|m;=pHa4^+9+D-?4dA$Dd6IN8Iju|%kV}wa|OreQKmEBe`zJNqEfpI z20xoMU1q1pr77un`=*%OB~d4y>GAYHL+Ud?Vq1=fVcfCyW~SBH${mZnzoEAp-lwqZ zY}%cRAwTFar?|v;6;a@^mRhptGy(Xz`6WGED&7lB?#qOnu>Z%C2c$ZXKouvb-?~KY zI93Je&~x<>GrH+6)(fmi?o1#ue);c4usF?hR2j`{GMIz7JNyWTO*xRDC;P`~#$NPi zxV>?E+tzHZtTmi)xd=&Kn*sH3zwY;ahUoBnp?f@%DjN1d6X=r&uhH6BP|&<rGDz6} zJ)2eeELZbFu<)p(vA_uL(Bs$Y^gW5me;AUUw|EcI`HjRn41>l0Aj<5tLG*t5_)Ver zgBpIp&tfv*Qgt@_D3Mp{*z#ch@x3gE09!T8271eD_YzE)(tj;yp@Q6jbfQ9X#uX_F zcTt@)%p-eH7w2@!qZ_~OT+_r$FB~yI@qvzH6SINIdz^@ByuwLNNyk%@8ICkNMZoIz zvXKKAAb{vm|C)^fk0|95z#PeDt0MDtSu53h+dqB;?LEJou)WB2sdJ5=ov9Mz{%?NR zR`a|F*pa-II%i@i4_7t`z`pN4lsiza=N3EkMfFuGAw#lF*nBO<x8Q-EOK}k+i{{db z^(*RqgD)1W3QvK-o&HP!?t*$M@KdW52h=g)i|y7Sy}h9gHBu;dOp@R3?iw{{}q zjt)>HEvF|nLtZ@^*01HtmpK21-kF?Q5KT-Qrl}1ngG6q1(m7KdT9a$a@Ui{oFpRpM zwBnDi+h@26l3q<y%}ZVh7KO?cjmhHy4V=%iYO3@sH@~}d^liow@rrhw{_&ih4ZRh; zc2pGYy{T<GxmsxT+C9x_=jY!CD&uN%VxgAWm&uV?WmAYcyrPL$Jl+Y%F9x8STnM?; z1hVaYa#5JKh%cQB&OIad&dA~X)<}8G5?jX>z%xm%Pf_+hE<bf?ZJ93dicb*oF3_a- zPiuy+OQGG=U25OB;inJur;t=@1S1}K$(=Z=E!#)%i7l6|BcJ2}1~R1CU$F72Qkk6Z zcL-gSy!pZBFq<cHPY3??7jJ;x&H`L+gjL&zB2LruNAoPrik-_-4ST&&)3aK$*D@;i zdTWdLTIq)2u|TW2-AoMm2prL(K%O28L$4k3s%K3MZ=)4l*fEU)*3$gup#n_H_G!4I z<|sUN*j+gWqm-a)lD!2ol8P2`lS=3LYyCv=ku*3!d3rpH1|c(2j}CQ0P1Yw_G*q&U z+^;X57r*}XssQGu*qL&(PR6guc56~H^YGcjPX}$dy3f_aM-UyL<5?|04$K3lY&J)_ zWFyBrm5Z*82C+(p^6nL%AB?+;`&Br4w*C}2gDM08GdXt3{aH@U$Mdb6RND?d&Q%*W zZ0B9rv#4z;%i4(Fit{bD;3S)&ftE{RQEs9|b4<sUMT@VS!ydu`4~GZ>`S-=d);Z8X z;MtOCs5aZ+z7W-trRlSGis8spkmzW$Uf?9))Z3-bn>0~WT1haU@y=~OPyS=AuF;wl zwNIx*;(_jAOMM(#0o4|7pb9vXnnYef*&O;!`BKAUuOt#jgT0@wuW{Ump!1mSbkqal z06_B$A~stNO}z|=GkPBHBJlDqK+0Q2@zXA1$>X6iBT=z9ql4lz*PNi0i|2grX~I@i zA!h&EV<~k5#z5MlfmY-vl~Dhgypylv?@JvYNHe#y9x%={@5JuT#%BUnegMI{@`$Sc z6OOe-8`{LZTou1@f9m-3S31uRx7jllxH~&gB$szjf<fmH!_ym1KdRb(Fo!?gO>zed zZsG(=5NSB;pgctG*kJHa=S%NrY~tnq+`K)TSRCx|ICE<SBS0-9eohjmnGev^ieF_M zh>EJ)jYq&_{<vQ;vM@&F)+-l~mpd}FFH%ICiOk*!cejm!J8HRe!<${33^yllCVo1D z9z0O7Y1CO%28f?A!W!*0TW>yZL<|b#-oQ&nGBf<xWnQ(%{-0GA|DXTe&#_Y>nvfAi zd#<E#0daS^Q@x?uwk$p7fO-CUo6c>m-M?deG&yh#a?cQhBx?ZSkz?I$sAy4ficx(H zg)dTBNX53SfDfm{QmcQ`Bbt-C6+mi!S!%n+Tc?`g^Zpmw)Ah;ytbwX6$KQ}-DDvDk zO^+1hWP_s=HWg_tw(aCp*0*1m+Pd%+RXv@V2Skk}YMN?=$2%Yd=dS(S$GDKm-vrNn zR0?XH2pyAv))l3Fd)*ZP!@E9#SW@h5P2g|hq;Hla4D2~eoe?B=kyY`IOl4M7#?Av( z{|m@&Y;9>yK?t%@$VC!^@FmVBV7IwfGyCx(!DCBo^4<+K!>{=`{dx}VTg)9s_1?~M z2b#eEMU}~ZT{Zo!BeR2YB0(`dMgPr34k{<lQa1_HnXBy>4q$l_fL0h<Y944sAyK<c zYDcw2*Hi{f&*01F-Wy5RE7Hj?IGVCin-CnK_aM&orQ%P%k0H1QKGp_-4))F`zDE)0 zFq^mr%Uhl|>f*qi3tUVq(0FPYP+x`d`F}dl4sI$wyGpx1T`o_YXW0pEs1Rv&+1cs7 z6?m6oYaGVBG%te`+yW*F3VLKsLM^K36`y}18l2{V^zf7a>!=a#M`MHp==mjenw^3k zW=jJ55-j%iV)lyH`8a<!eQnfJdpOUOyjP)zQ=?4U=sJ~BKkE*c=aZ~AFZwkFM06rY zAQ-AxhYCRDtjNl7D<Ba1v_fXL)ugKxk5Wtls;8JI#j`VIt+AjrlrHSBcI2G4P>V)X z|22^=o>gOXcBZ08-JQ{zswKYxj|E)mTl$XbWWpE)9&-5W!!pl0k^@K&BqfMXt+j}? z4s1P?U#WOwv2&||-<xM-%w*<r9kF3~U@I-5w<*po1QglEa1<{{`3#>paNMA<btlp8 zYvQ#7O~5})f+(>=gWBw_bpCOrEJu5aWnF2U#>a>ce8Wr1U%pw9wV;GzfDSjqTSrNX zTpp^pl0Fe9Jz&@FA%iP^o1##!ym&<yNXG`!iYBNT9fxF&CJ#*=M~bMuH;Sc2bgfae zA&7(&Sa+P%zKjdE^^0zLUKi!F8S{O6Z`I+mo?ky+LA0N!^;rMgAWqE#vrY*8{WO%j zCf}{5p^u|((XQx!zB!|)$XOu1sRDtq7!LfunEMiUDEo(BMIl@EElY?>C~MY9vLz`( zwxJMXj7eDr!-VWx2t~-go5I+Q?Ado}tTVD3W@MQdI`?zl_gvR`-tz~X-#;+d-1q%m zKdbg4QEyUr)>R@h!bWIR&&R-IdSLk2oXGuX0hjr>W=B<*&@Ri2SbcUyC+K-|M~?`T z91uNYl=<AAd*jHsvF#Gi*B{1pmxTV(WIjW0QLs+sNE9LWh4@hCBLA&TaM_}ag28C> zwP%G0&rnEekaIIEv$INF`q!a)$BRY*=}rus1_AIQYAIX5Lad?dnr=ReRvp{t>btY` z3RxZ6v-~6tztD*ioVDp7t8^+eebyK2mCY=y)Ecc>g$m`xYi`aLmnZPKrKU@TdBaRh z-wrziIU3{lXtbW6lc;1v-`{0|$1Gfge~w@2z$+c&2538ph#+UpzciDRLS}^FPCjp; zi(slM_N$>RwN=7499rdwnu{$GZVd~ljX@q|rNR7UQYK>tGU6~}VW|ph-#8RZ-O|Hq z)0_@{cOzl%id{rWRv`%!(JMh$DQ=tH!n|rSS$WD?$+P+gA3q18e}(w6ErY$~wob?0 z|Cu;X!j<PUiiXBF0pl+!0tX6i)_=8XJ>iYI2*zbEY;eNg-KmtPuOtpV=$j76AE zXPQ7zH9pXJ&z=La(aZA9u2%v!rOG>2?=l($vSX_@B7j(}yZvXo_-<&0_MN7zw=yGn z*@CIcUi*zn2L}X~rsk&P9TWAF)su68tu`K!K}f|sTN1LrM{)_4-CuH8laqB!>$AU= zEE+hTJ&bt-k4ACc^dv>^p=N;f<(VC*4I~H^mLm;jY&Hs=WPZoQoz96Ri2Y8$zV(u- zlpfnC2+x5Q-&h%Qey6Q4(|g)q(s2#V6}srWKbxjfcdALgQn5UN))>XjJv$?r3$POG zxvmEgZ-NLfv<}A|ada=$SK)MtX+wH`t$dhcZ7NG_L~bw8(8wCxKJxucTbq!6Jz5aO zjD(GVMyMb{rnvcda-`FQ_*n;R-0r2*7qwJc(oSbj7YR{K&}!l-DznyGcZ9juhtD87 zvO=Y}frL~xvVFH>Tl$L(&-01OUrXlgVr-<J2K~O@hZ<h8mHYSn7}t;^n{}&bY1Dt2 z)}Sw)nZcCbfK^1M5UY0C6o1L;cmeR^bmOGeK9fzrrj2UhlZFP?XF8MZG&Z~6(VCPD z()RBjEz$8JVetvC0H&*aQa>br3@WJDf4{ICv32qhIM|TBAT3@<f9XAl_gqikgNJJg zjy7M(wOwmu>8u02XoS}qD|jSs^P7M8y5Aw=z4!l{|NF09ntLTZA%?12fP`0%I@Ppj ziA`*oE)Xw(UWuED7i;VfZ9~U4LHc7iY6AT5<AmM3bb?LMpQt&Bc)OWwQ)5@lBt+|C zR_GF(f5U$vDsG(Lf{)nMe0;O?gX+>$J)91CmZaC%_}dl*L4DqsR=yS1*v+9#!<x09 zM@aZN{H+llj)89aPKu}F#;g*v*0@cJO~m0Ce_-vf`GD3EMm%4cSGXh(Ngaqpz4e23 zd8K3!ESnQL(#zI$)IxCgVG;K8Z`D!cEz6-sPzR$p1p>HI*tnq)U8tXbX>cn#uLPvv zas#*IiNAa{!PQF@`WBdk4uR9;vSFx;(n(6oP}cLfye!q_CmJd9eDE#Q1>m|GNf|6% zYgBmymjh}%ygiG06qy}sdp<aElu0tK|2|_U60TGRXQ%i+oN`aPSBnjHiF4v};B!ed zwO!}&RU6DIQ?x->h$rz$%<4@hLp);-e}Jx!0CAORp<?9uFi74!50B)*wMrkYsjCg& z%{B)S+YKc8Z&O+dBy1w@!G};&-WRrW%-Pqt-T=77dMo}T^32Jc4FEFyr8%1PU95|! zNjOK@>CxgJ>FgFneKl!>s8mJ7X66HMsiI{V1^o?879pIr6j2hMPRb}|$`4K1FhNz{ z206S_K2)X8D*#41t5@9po(E*mTc>ICFW7bR^Xds3=un~|^Q)`sZFD7$xVj)NH|y|{ z#Tdwb%+~-Ech_Wj-SyymfYecpm1dto`b%!}G#(VwtXjSazBWQthXl~2^6t*sW`qfX ztt4Q}e(UwZ(k)Ypn|3buo5$fxzkv!Jgye(720qxc#4Tg%5Qz}3=*t-PyTu1wM}Nkx zPqL`DTo#EoPbYP$jRO{Syh(n(AaMiQ+e_T=4pep88w`kb-FHl@M0^(4rJ!a<!&gPy z)4yY`p-W0=7h%OD0O1XHT6uNAHMLAi-6Y?-aU3=#w|Qo1apDCDmYMo7P&q3NS5T2T zH!Bk!&M4xjvLT%@swJXNsso~38%Mlbz=R&NCbhu*f-U^yp^mgf=!Kg)qSVc*x@^lY zl-fpE_gAHr#A3+nxh{x=CoN3kReP)S_3-QWB6eOhHA)X^Nl;olvbf1Rp)*!B*bMUq z`57xinseeDimo%e`o~J^-q}SE9_zq^JYOhJf975DtmUeQhfki+1MwVhEW-TKI#F+N zmYs6kxCI0d78*U(-y5l|-2Iy=IV&q=<%sQ@2<?Wj0{LNz+(CA7L56vx%*gPL*sS57 zKqzp+2zMsYA9};70I<Gk`S@7#1AV(Ohv0)h7ApZSUuSknz2l_pqxEvJFp_1vAJwy9 zj*?+dR&Ih4e486$1GARgaE6x#g70*r-uenbG1E%f7j3D`Rb;z(j8Zt-r7)(qU6-@x z<wmR87w>)gLg}f|(9h3i&C0SVVV;FJiXb?{F50T5pel{{xKqm~wuG4;%kqR`PXI*V zrx(We?S!Qx-J?IS%hIrFRM)JE+{aDq1<07Lnq(cw$r~{xVD9*`R~g5CTs%^(5Lnd` zqXagaEe;yp)0;V%H27H^E4wdqL<<&Ng1^b49~IOF<fgbg_HH9jd$F6U`t-p)7+^$` z2Cy`z+Z6zzgF10DiI~4Iq9ufc1d3?$KE;k$FCFggT(?+c`@M&T|0BdihkIzeChO~v zR&q-1e;^R+ufg0kY0v62ub5vCie8*b>&RxcrRa3}AHKajrNq>7tvm<&HFddT(9NzO zZsL+7<qUTVse8x#JtFPlw36hc)Y!fYCVGA8-iyc%u4q0{TJZt#0w8QO9pTb7e+k5g zG{#qGjU8xuJW5kZzI`%Y<Cz=ROx{hQmW_Ql%b;YWGv>Z0BR2eC48QAMA<nKNOqhA% z#ji2BLAKL5K#`^+_vc)!$k(tc({*D*TEnln?>SNP1pNsO_Td1<iDW0(pIcAI;3o#V z`V>HEuW0C0`Hry@*&NvO6zR6C3lkbT&l_WGA$Upiq|NKU3~sOQ*c)~e3?`?yzt9CK zZV<GT=G`nrE;Ji?=k!YWzf~?sTmnq+g5QBXaT~1yVp^iSh8H5L?~rAyUwgC66}MPz z)9Uy!CyU+wX0P`heUE&lyP|-qN2=B>e}H>frZ|<nK71+Qj15G>(t@eAJP0#43ic#d zcWH?Lpihn)_DW4l<3%^=E1xkmDIdgRKP7fES?0_<sN*3I3i}x3bnCG)lzKvVZb7Rz zrCF8uiDQ$?vwm^>A1(QNEJ2yBmS@N&_`$SJqYBoAr}A;KgM~?txiT(QUk_`eviMn2 zuZqy2+IvsGfpE`%K+YbXYK8Bf`V2Ke0rK|$o+%d7TPH<7T+>0(ikfl*%119+UVD@i zlkPnIzS3g)9|F#Qh8p=c#jh_$&gP~V-e=ihd&FX*%T4FYZlw67>jqrn9wYZtj<>OI z^xdO(cLb5QrV7bd79x>n2!4Ak_YWb>!D&cd=Dah}2e%KD1`SDN1QS4JH9`#}pOGA$ zIq|N|<mtG1y526@vkG3yv$4Xh^C%xZjdQ;oEMCX{37yJyu5J5Pbi-5s%CAMUy#YB^ zP@Ze(mg)~g-M*-al-sb++q5}@2x8hdo;2g#0!k=B=TpVN<JlF>)f0yv%2ZuQ5X)L> zIx)UTB?izC)uxH{!{M5XNmrdjyuV1}t`=8T;G2RM8>3ZoJj3I4naefXio|Xhln8|B z($L(dF<UE^%;FQilKv#F04_s&Q!s=7+rEaS5?QcK8LK?HSevxHWYSXe!S?5Zjj}}D zd(=g=0{ko$%JNH}Ec^|(dg5r4pdxa(c{J@uLVugWGKM~mw|i)3Y1f+Qp~TcXBX8ix z)B{Lr`|`@60xzPV2Nf=ltH+5|yn~G&pFcQqj^tj(DpH^-am~+<ddcxc1-M?imp}B2 zY?u6l8-U5NX~CR*w!C5|))K^_VURq>j#WUE{&w6~+B)SRokWBoRULC7S9_gbWQeo= zbnKN#o=q~W@W0LkHG=v{Ce1VC`DGwuBhS3v==4_7<a)wzfD3!)<XQ=P0sb7JZ+65E z76-MXg($D|>L{?KJjc9GA8Jl?k)s}Lq@3&2ptBVeUwlv_(y(w7kmgfuaRcedb|dwB z!nW)K54jF{snWP&v?h6r$DTt&$}^wh+gaOB)1cd0|D{p?R%elHe(2ufG?On$7*t&_ zxZ0V`$>%8cB-JJdV{#ZQ*#r;EW~s?$w3~zSG!CA&p!_aI5T}!)3?eUunX12N5r_^U zjLokYIAt*uB=Ib8s-3?&UuvRbHmZ9^_OgnMM^#bQMFYq0vs|Cf_Y`rjX0roV`OU_G zpv$DJ*4KDI^V7rj6X*ITo^bOOkM2(Nl0Ck)YYxJa7NsR_Bbgy-VgIEgir>V89h4bB zA5tTu&;jNJ?8|or+It@u7@fZoD%6>6_j9<#!veO_l5geabL72J@(f-Kct=ZWQ}H}j zs5#SDs0+ZoK7`kIn%7b#3q<C|oOBL)dY;Ri?u+eFOqco=M>p5u;<u#f__Vs_C9$Ao z>_a@8zBc%`?yX5@J^e@DJLrV9xn^t-Fi`{8^LV~T&m80K77KrSQu9QG_ad&{xjyA` z>_sNk3-S-?wSG;3;;3@ZmPA<QTyfbSz8Hs8-Frz^`&3r4PiL6~0z{*+wal=ZgeZ&Z zAMrd!{hlkql)S$*Yvxl_ISOK)V{*qE&JLWlvDYWW7!DOK!J<s&bft>!@AZ|HZ1DKo zy{}78nczuHWbRemrPCGuMFu;QY1=vodPR8~7GRmi@fyT4v3Wb?Uu<eGJlKk~ZMzn} z^+VMYHFr8&+1otDwm1wC>>vD{vY=BzB7kn11d8ZRDNy_^eSdsVvtuU-VzZ+zVivvb zTFfyvC!4h{8fp7I$NJG5^)n-!z(>`AYp7fx!mr<FA8>yh+(8?{R*x2*#&T2g9!$aE zfXx+aEHHoYqCVqcy&Z{Ba7X^7=N}6%)CHtf#cYQs*|D3vVXc%`zT@bDeZm3zOOqAB zaEoHu{Ma@kMz*5aJZBSoiL}z{n*Q@`Cjm!9Zn}TsxSQEO-`q((Qx|yS8YPNg@kM)_ zDBedSQYl?Tfs@esqe^Skdm2V1l%yj%*UtdF`rykppF{l)xI$Ok4+0Ok7{AR>6noR5 z>azpG+DkY8tHodfS3^8~3Xk6zr@I}m&rAdp(+OBf3LT|si}wgz;hl>JHJLjwI(|K( z^5of^@k^<1_Waunbxo9n7qywcLRhL2DSDtxf0qt9hIK3>2|v2mAJLd736b5FaPPe_ zaOMRZ`MmKzCE?n^Th{F5{Q3K<@2>6lA@2crd`7PAh8AzKL04vT^&mHu!@vnw@WwR0 zetjN;yi(j-PBGJ)*k<RjnYrp=XZcw+I8r3jFFX2_Z!=4ZJXKeUL$unG=JLzvTvIu! zq7HgOdZ6)CuS&D_R;FfsG>ctAmkIB^8yNmA8eVy!cI9r=l=;F%q%c`BJI75W5$G~; z8neOm-;6i<sNC>G6Xiz)LR)}X7)l`iBaBJVXB-ym+(_I_<FAZv7VpTSAMut8_m7C) z1}FeR!AG>W2=U4*sc^3((*i!PnHoTGc!*yJk=aK@fEnzGu!nsho`qSRvT|S0mG6;5 zeK-AY?Y<eFYGJaV*a53eI4(YvAVS|8=!k4ADEO2p7_#ooHGTuePk*v?%Dug3CNy;` z&4E|cDeKqbg+Pl59%6ZsfY&>HpGSX8)Ocf6fP6Rus;=khnQ5vv&?L^emL+L-buj<r zeUEJRrN}DA#~JUo{GVr%;T^uG(jzrQ6{D8M@s-ojXv?Nrcf+$+-M{?uPZ(;>GY1aE z>TFzVYHC0u#A_A<+gtBuzh7W@C-P@~$EKB(uc7}J0QiB31$HUGu~%UqYOUE5p#fil z2|k{N@Av=U=+^cQybNJ>Pr9fol{4tS?3WhP3@Sv_5$4m15aCnmM6G`P^j&F)Uu@sF z7>_uXD+se3x0oppPdKU!gG=T?pXIvh9Y2W2El=Q#8WoOn{a;@u)FF9ED(&+!z}bwz z#$oFw5RWOFDOm1W#YOfvhW3nu3jE=1Wf>U>5eE=I1blvsu+a-=9L8|~w?Rv)`8l5n zGxjO%_YRg4PQr_e(Sd%evHL)_CL#bl3Kq{9&T&(#z<%m`_TIMp%I&$#<A+))Yu>-( zdfMR}kSt~_p#Bac#NDc>C~8*oZs~|5;P?-i4T;tQa%~G78)}+yOH?ben`S5DE%SzV zZ>#{uD+{}C3AAjNQdG=Ig(am(Z8A^w3-5jd@YuHRt)$`IOT7E&T<I9fpvD)Z9GN}D zjL8u8>m$9nr9&)AQVAgAYkY$h+31ln0j*3w0Pot+SckKMjY0oGq=~w-NKaoprbwh+ zhRu>ZxDd84qhpcLkuDV1e4yr@hLnCV7XEC(b+?BA%_T{_Ee{f+KDOiR@Kv$@DNvZE zG+Qe_xWeEZZSdXzG|%BkLfhwlu+w=vtCIMx;a7B^6C%-jy4s$i=Q1wVG&g+kR^H$( z>Kng-QW~iVFx6Zm$!3&qd}(9Z?@7NBzo5>QU-`)?nX1%})F+)s6aLZ&+Sox(#V3)P zu=Cl=f-#I2KHBzXMlh?twpC69e!)Kh@IVxx+Q-SSWK&13CKKg3Rtyfa|3G$Zvj6AU zs_a>m-lkaQmDw74D#BkT8(!{L%=J@A24IFk|8suy5mb8oFh4X)X@Y88*i~$w`P@h` zRqskpv_!1vUADdeGFW91#fHsUM6*LTD>kP5yLO_|bQ)WELH;<y%NFvqe`)O4*1^F` z_MuvQB)Kp-qzOI>y+?%Vy`9&7<zdMBUEyoQu^mX@=q#@shXPA^AEWU5Bd7SUdc)%9 zbm@{F(r_KQXGGt;OS=@Jrw0utZ8s6}DRFY))cammpVh1;#Ij97o(>^Lg{N4Fn_1E} zgz!XP0^3=)ba481n(tjj{n*8#9j;Un?Low9bPz8hK}Ss<-38*k@6Dno&FbMKs1q*n zmj+l}Uetl`28e{y=!IAiNzCL_)r_h^np+LU-o$2<Qt~XOm+MDx2;ox;M?TJC2l*Z> zOMp25&I?^1?gU>W=|z-v$|{z{lx0L!%xw3K-sw7X(9a3BS<0qyrCmx0K}they0St8 zSq3+8HV=VLzH$$p&-A}QO+wO^Z2%e6thrRCKIhxbn_h@6(IgHQLp;7bi|0?5(5dlm zcOh3EE_UUu^MEgtcIS-)p5?k#xIk_UHl&I(n=<tNrE%zu-gCPaBi7(h&UCGV#{ZJb z`D}0i86YcM!n|x+eDA?{U}~cmd*Qxxg{DSfx1Er_d+57pwg!qmfyEI#?afE^CCHo? zY`F_@tgcQ;QReJm2Kl!GLirsIL`HjK(3b^n4ZAZ<cL_=j?-o5kd*iqqN))NdhBOWE z^WbBGWwf`n^rI?UoUwXJy4Yq5YRcbo>?(dl{!$75`RZm9Z<z!D;cK#|Q0i*ZpZ=wp ze<Bg|*)kMS_6;mNa!R8TsTcsShI+2wnngi$#2E`9kMD(j5Z0kr%D`ub`-3YWizaNg z8~&fHS&MQ}u(_ud)7z^Joub6Ozce=4?M<30_|pVZKS3(2kQ969LxL&{I{Q8Uon~kb z`}NLn`0xVTP)lXBqe1Z#1)71EpR<bizZFfgK)m(G^93%|K3X7uMT<ei5Btiloj@}v z&ghM!llU6!<@heSy+Mn>+Zmz+6^4u99Z9I@>L6)^x*0jX0RN+=<vFlQ+gM~7!recW z6`J1xGi(m}eWBP96qb_lWU@)ujHNN}3LInj>Erz~2@1G6)V~LqoyfNUE5$jv&Lg|2 zJns_lkIm!`&B1XVKL&$?Pk(8eY60ule}*)yS%&~_S{f82bhT48M=F%UGjwZ?O=pG0 zI}dHx7VLMFfE2EFIQjQ!)M?zGzch!srqj(3a=RVdqlCvK$wZcnnfsFOI8*KxNu2}+ zpgQ1xq`&}r^Tix}8fCq<*@HC4gM<;N&h%6aY5dXG)ETqn;ifTkPyebTi<k<Q-jgzQ z?jVKS)O|1p5f&8?iSWuutXi?TE3Bt8!In7;dJJC9fmj?#Mis65+=&7DZRbV(iMkgQ zC>L76LIl)#<h^m$ra}tqjzL-nZhTN&H!vl25C8$5ii_7t@ee83aVNA_Tnl1b4`Q13 zV7)P6AiD^c$@|o#>Lpb)(A|KdJTg7qK0M{j^f@-GcFum7x@#h@?)PNb1|p>~-O#q; zXSfRc?GrcS?}EL49|+2ywYR1!H`kAeak@PQukTuS>o2?qe|r>!K;H(;&kIYdC!8mO zKsC;GGzhOk0bbZWAYX*~m*zOPQ7*VKB61(ZkJwo4wsu$ZDA#@CdiglV$FQye?N}*I zfWJi}A3Hj}{=A`YL_VK(tNv?~_^S}TDLtXd2<zXq6ChVQkc)uHKWkc1W=GNZz-h`1 z@(Sr;3BI~)<MjH3nJIwXh-uD_#)@5M7L)tJz2@CUy-ymdE183&?}VadDv<hxj2u@Q z>DoLwmyq!Ig{xu>J7GYdrg>cgrd0s3ZF6oCPP7<O4-kJJfAh&-nyrv(^eHW5n)lHD zht`d0uej?39f?L*X3w^z=P$XUO+XL`oVXSPc>;OVSDMChG8arZ*yeROg}V3-J2>s) zxPOPGMPqNQ<HB1Ycs54JQC6IAb+Mm{LUKb?)4Mt<MyQu)(fU8$Q}sTGgK9eIJ<K?R zm}yV<Nh?6Xtwd_>JoMdJL{)<Nf1?ZBm}Z{B-B&RU+7g_4qiR_jdJJe5W6mX!;5<9I zb_IyA*htPF7^sH9kPz#or}}`r?KTv*xD%OmlPsH1f;4IxCn{D*F2fzh-Bo`}+BXgb zHtc}$R`X(GFbt9Y(HJ~fx$cVw2W%4)&MMvBtV8-uKt&S)2$BhrW;R->aSQ5sDanmJ zoL3>&YqmvUy1-wm6L2!aV|U!)LluF!n-+b~!w<UQvO4^#R|EB+f^FFhS4a`jTl>c% z92?egzv)9C!L*x)YwmPh)_-aKo*i5Vv{!d$T6X#C$5O9=f@?AYZJq>Z-c_mlM8!T1 zFg2M6Z>Ucz09wA*p5Y^@BbC*^G;>_2f6YsO-Yx3yeo}%?()KN(4yE2ieaC|+=*VV2 zU=ad!B_dL&W~5b9OsH8F7x3TqUI>29_H6lZRv%vRs;aJs=w}=|H7`6O_6`R9{z>8L zK}Q3i_^l)TZYLoW+HfABQ0WJ?#lH9FoP3@S^lS`3bJ3Dy`v?v1d_<b*6jsm<Vya(C z444rzQ06hW3wio|pT<cb89&^<R)Y%jJ>?@iCEC>%X{1?pE4N1kwt5}AUz)zXP(4^c zJwFe)El(w|<L{pf`qs}zq8>qUUJP;-dp1|S10uIEeE28zSxVQdZu8wZv!32+i|$JJ za|J68tT9Tfr;+}<2F-Btug<p!S_5~q>5t)4{k&67R6_Qi$sT<8FHNJgKHlT&lCjGY zR~6;>Ud@>7(ukddQBZt1K_PoTZoXx#Av+Sx3y`EU>+613;(om<m@JsJ_h%egz7zx+ zYOa|(9Z`b@zK5LhPEMfuSMIKo=ChAjycU?KoCG5i&Us1`;e5fl)ks;HuunH<n02A7 z#4bxR+O$%KU=ohj&@aFl<=V?;qakT$ciZvP*Co!p&r8_8DItK@5Lz4-a?9p&*LX(0 zU@XZqMs%vJsrw=kKF`PT`jlJ-zD|*IEJq|An~gM^l~aNOrsToeMYGSY1Z_QG54EFj zUx=t69oXF;>M%<`)N7J{`E?FCR?w~d{kZYsH`;yfH7?6Hh?q_k$6j`nmI8*v7G91C z)I`htN-|20OUjV;{7a+BSrr}e@7DzY{)B~C-g(vu7}a=jP`*Py@rmuM-ov$N#OjIf z7`7m{S?3X{wR3^a-cGI~rbW(-wD-Gt6w(;M;%XPet<%%{&sMrhD(XT-4zgyF&)Z4s zl71#i0Ie|&PW3daFSOlJ3+6k0XW!6#<N7IX<>-{CBYu`alR@eCPUNW&)ky17JxMvP z*mazu<*v^%ID~&qccw~QtNz=nNQyrja9Lf$?S$^J@T{C}bT8?K-*)$A^3!O@yBf?W z@(44qwm|2hX!rWzG_l#f%uRs!euLZ}bi8!)Q<S(kdLaLI`a!Am09M_8GaVKYCfh9S zl!ohr>U^&YO2{z!yg*r30$`kfO)C*n1{DbiJWzQ-sFP8<?5#iErQkKNWc@Tzym~T! zx{_sp{bT|qdm|WJ0QMz=+K#qMik~7P+N|^aQIT8Xu4jiD!dG}yZ`B{gPIJIfu1wi` z7GqQeXja|*Z>Kr~puQGCynd(?kTNM*i^ZzNR|LE|tUG+`IP{U6Of9SV50Q|UCjP_~ zmU;R|<{r5^hU=e-3n;u7x#NTyssK{NRUS_`kcbDF`D+4MWv>GviVO!>@b{nZ-q==` z2nATAy>UnyZxcB8X@h5Ftewg4-9;aR#L~u3zI5z1`-^Eu=Ud3W-NILlve_40=XpkV zY>dNkU0<d-y0v^9DaTW6p+P)u2Nu@bC3rc3jf3>mkHvG=T|yl@A)ZW2hoKAUN3?DJ zy=30EigwO<yXmJx(n+BdqtDMl)<4U4*f&5wPK76xWSUNUpfcSHJMMRXoJg;%Qto1} zQlNfI*@BzaSvi%qkXLRmyOYAAFFuzSgNYsoSZs$b+EXlevUvXysZ~6%TA2N5v!UiZ zkwf_Ku<va#ZTLALcyOe~T=QYy)Dd0$K0Cqc`TO(0%{5A_*@fhMzS10eoLc=g9YHK= zavk{+Lc`P>-(Me`T~bMpA9u6VQYD9@OV@e*@2S13=6MNL41z}HIlq4EbBRYJ(_hms zp*zzAoMgg6v1w0hb(q*cE)j=*Qw`xuM!pSL0vP?eZ~Ham?1-8Ja$4kk;C=OvR~mm~ zUyfd9PdMJ(LqDcG^&S+lnMPhA$e3e73wzE@W>WJwdg;2gF((sUN7MO_!Td}1Z1&X0 zl%g`ks~z*EajIO7jZH=*%m!*ZcvDtBkOn9}^IepSnCS-m+hZ8m>jw>ES893E9@)Ox z0AKu-oi=f7S%Z|Cl-ozqSsRz%PZJ1h9{*|bGTX-|+$HimX#QvV=2~ewETtfpO(^=h z-nfy%xgCilg@&Wl7fK$@tpww#iqcK6$apywR9sP*U14oMyCMG}b?#Yg>T_1=;U3zA zUaWZYD0*Fhr=Ub_#|UU7x^VQ?6!?6rOxY2DfFKqtJV#mT2Fp&Kn`lI)XJW$2+(Wo_ zshzej>VTS=I5@tdHQaknrAr{ZAlH5v3P%+#)RJ=XDYV@I+%DXEEC6VI2?MiyND9Oh zMHC$?mzBFIA3fm}`Q2OK?r{RL-bL{Mx^khh;Rx){5~#`{E~|pOV6rp$>TG!u$DNs; zxqYQI5Sy3!aKx#m$pxMAd7uR5AXA1|;~Oh%qaSTB@uq{qkUU<Dw$3dzba6YXXxWM^ zJm7PRmeRCPxoXSy+|i`3VoE>C+iwr5m_DO7f$`(7{i7@<-!Z!b+}og86dA{W0zj?3 z<sE>k+IXxusM+A~KzGHLX6a{`FE>F;rHahf36E;b4)Z$kS-nd-h=DQ9_qzT_C0K>; z+kazQwM9n+G0#fHXc$9s5i^}Uy#7Wr<-Eckz8^2M`Uc1DqunXb$`&?*m}?rQkkzHS zHx7JZ7yk%6bw+$l`|*Cz`@Q85n4jXVC9mTNfD@P8j*_kIW(O2cv~Z82=&p&2Zm@x_ zmD@8TLBcE)JD~TxJ$)t5rDO(|F;ixE<vebgyUNj-c4i)%AJv&y_U4WQo7Ub@NvXB< zhJf>2R-S;7vnNxRnkqieL5FrrTgf9s++9!I$iaoS1g$tCtE6c|SfASQlF`>2H`9Y@ zi5Dy09~*G7Y=7%>%6?>7IDLj(W<Ti#qVEt1@2jjXwbw4d8O(|MJyZ$eLraid+6>(b zNmLv<&ii=I$ZTS%D(khJ@wzz2$6tZ-`)erHa?J2~#Plh<u^BkqZVZ0IspU)7&IwXd z>K>wZ8-!r-Z{c3b=5hCi3nI10kSxxnwh(K>@$4rP&ULr_%m&y?*}ChCTU{0|NOf8% z+CWcy7zkrYe`Gn<>B_EsoCa;2@U+13mvH(1L6}^q@2Xk-s1ncD_&*WDieTGUmr)0A zlFv8cu2*DcR$vDArbcrIy>F)DBP=`xM5Pv<i&C#o`lWTRd&ilzA4P=kfmk-u!@9OS z2^*lRcitG}hgh`@ogspgnZFKm^aG`Zx6j$JY72jkPQtz()ex#gzKGuJ%n~I(EGk?} z<29|!E&@n$G5u?)M}#VkYj~O0?IJAY)WFXOv}wloP-0y=(61GOc%QkZspgF?c6?_j z(0DRM1FS-}5naO<Z7KHn+Sc-?sGemE_VVo^p$}r80(j0hgSr87%w2=svyzhWbP{92 zp_qD#thoKN(J)VsRvgsnH|TRJMDl9AK!xEqg_x`+fKIFmAgVLndoR~SQa5bbN?erf z&uWO~Chlr!T`EwQz+*bwogh=*4SnTb9<Fj%A3N<ynJmqz*x-Pqd!;>EpKgq)1dVRB z^9!!Gybr>3Q$->kg->@@LwV$ZOyzitCrYS%D_l3Mo$dx#_V#JYn$j;2_b)PURI_(J zg}1}MCS9p{O0L9B<;yRlUlF_Q*Mxed_9}T67Ngt9?0YdFeo7Lf<2dIdUMOgIh5sYy zz<Ph-ZCYbzI=CVqk-iScz&QStJ2f-a5gC{BBUcwV*!r3p|1)m#(YyAMS}f$OrlmhS z)GGuZ60vw(=5t~v*aau#To0nGp{V{}Tk$qj0Hnz+U!a@?b^kLI;8F9Eqg^NHu503* zV>A7NR?IyTujGLYf*$CP(@Th;;|?%a=)+0O<&q6yukm3YPL~h624kEF6mGBmp7mR6 zSmufS*4j-Uo*t`KwGeGj`Fnj^k+J7Z29t%M!}}s{=WkBzSGdVh9twA~<5IQ`ja{69 ztUPI_5;%Y#1}LXIgB3th(*t9lOB+2+Vt9wTaFvGbyLoBI(Y#=jbWA{jMP0gbysk%> zLEHI;O!a$JO%w+W)%*>>5{7yqB&$C8OjJ~NIb8iAkPRC{a%n58P`4aclH)-%Jt1?h z$4XRT-qpOkyXbJ!t|t-Pp$i;(x%V<n>`2DlnV)9`VGnJ}l*1Rj-xf?f1b~h=VNxVC zATbStlO0c^t5J&#Kx{&HMmyk9a3BLE7=@G~vDw+5Ewge5x563v%0c8sXd@+H(S&zx zUfRy43oEZi^|UsEGwUt%Uv+Zr{U=LDuOXXzUD;QlHW)o`ukWO&x|}hP^5$;Uz0s<q zhxGFzDX$hT))-s%n5|i(I~KT~S{WA!hC%E5X0LHvXJ&RnvA~cDB#kWgkkeJO$!+h7 z*QQPZ{hRUVFVD>No%unTJ~fuA&x+Pl!RnLf9BiapdP+W{Quc?Y=ys<W$@vxufSYZn z^x(BH1QEUse@t4uk__*|iF@|0RaJM(kHvrXM~L*bh_~ZdBEmI5&bjNiYJ8Lv|9FPH z^8A!!QX-K)ncI9VNEm4Vm?tdj$B<sQD{qfdwn$ci83R8OUW<ojAB4J)%UgL6MudoP zsyeE|j`}#s;6|Q;LCg!)$5WNFNIA;K()B8BPqGn_N5zxN`<SmY@ypSXz+tgje-!U= z={cQZoK7+1(85yOi}#kIJe#?L_6dvUOB+ZwDOe>K)~sD*>z24K^+2RWTk;<GsUx2% zz)9I(KpH5)BzJniH`AWhj5!&)Z;2-KzcmPD7~D)K2+-snqO2N^E6H5{vB~@OM~6!Q zJV2;3zL>)xpS8K}(vnD=3-U23WhYLNN!m`_Do}VAx2ygGEpEJgzl`;!{$Yz-LWg|> zBVKTG(9(1Yy-y6<zQvq&SZT-}`YxLBHa}WBw|N{;8EKdi<k%@eCJdXf98F9GVHm*~ zq|?&CShw&D6!sbjX*j)s8nu8^&xkBNJ)#dgmE5%SA1oK)%8y@t(5#%CQzbHIX(94x za$|w1S*Dy~Z!$66nZ9$dQV`%H3tsK}@lwp-ThEvpQ93DU#(*>&vk$-Mrq+@fIY}hq z5!+4%ZLYp=+CIdOIdXR*vH>0}W`BWyBfT|T!yQPeERD3jSDS#0s}lXlLh+w2K&W)o z262++;$sRw3g9L$M7&#`i@NeL;gz8z(DwZLo4-$5-r6{%@yed1PwinEOXQr*cgPh8 zvkUwIucjaR<_MO~uIEZcYg99&WK)2<JlA0FO$AF6%_~}(Ri*7GmLM`~_v#Z8eU$r+ zi@m<yg|=-M*a$vRDf%nAelApLc#O!Nc?KY73Uk~P=A~p7Km{bTy~z(BY*h8anM1xi z7!(hkISNynLfGIJ;wv;P^WC(rlJQeD$BgNyDnYoM>~lmLAj&{aqo>uE0xz%x7+3T1 zN<&Yw1K}kS182-#o!Evo8R&wPhLCrwk_oJ#E^NU_qe9){^+PgPX27(3li%Dkv?hD! zF=+-*JdD8DWcqdqi`J9rBRxcU7F-j3@^5*}edVoFS_5WPKoKNrX;8&7{q(kyj<Zs% z&(;P@r~4X}wijnsS5j$2u<Wpdc4b|wn*>^)!3a3)UG+zp*z?_DAS)W7wzOkuwaCWs z6d~2oTL3|8{7fv&BH-(cG%5}=6G|$RqRH@!2$3FKT^!Y@7y<1z#-GR&HY5!+f<@oO zJbm;XwDT#5J3EkcOlT=c>H1E|-{o_3VLZ605S(6yU!X@mAfFE{+Bov<@?)vkVpQ|^ zD#Z7q1>M$oFP;8vO`sSw__a)2zQy28zWK*@hCmm7RD#+Wb0})vAm&Vu4&qsYpJ;88 zm*L%h>F*b>soq`y!*Zzn<a;FCI#`;V(@1KmW}~FwbiX=3nh8-|N*HQciS8hGCq6?X z^ex7f{JJoJyF&lQa>$=M2`$Or0H6C(CNpK`o29=+MyUh~B2m$DG~wpi%1S<m--m(F zPbB*GUN4c0lC1=Ljt#KH6d^7*1X_Dp)Z%!CD|re)!xw|(Tm^O_%e|OTOdC>06QUE; zC4XMur0f@&j6KMmo+Vp*sx<2V3?O~Vlu|^vmZTje+iV1dhZxkQvg@jX97WU&vrx>I z`BXU)JW4~g#I0^#hOBaMGC2FFgYyHjTA<qrz-hmyteN+1`UhncA+W<;{_#aHhs$5n z9wrl6i<6`q)u;n{4A+jPFE6z+B9gnZq%dUqH_gwW1=cNZs?uE_J#ad!hk75cel+b2 zz+)E?3U{Gg&GoH~SuTx0M~`X}!R2^pa(wjvbN17JX}`IEqzr8l4*E|1;SPMEpiaRI zBfyPnZU3cFUKR8l@{B#@j@R!w6nu@pI(*n|?AywqaoKkfO)r~W3a;2L&>W~sGb_dy zy!*AZSBZ-z$*ACg70-AnLCBVJIzzNBI{3&#fYwFI<mnZPH9ZYTXs@NJoc|~S1i<M| zH0vt87f_lbR<!K-M<gnGc8N#E?~C8QD~+YV{5*@1>ZBIpW;IaI<}=nuocx$;YIu~s ze!UP~)K&(uYz+J%1M{Vw>El}5^1l8uDEy0-AVtKOg2FFs!Gw)IRtyZPYxbXiH5j`` z<HJ4qSl4rb2UVL8;sT)XPuYmAn4cMs7JOee#sHSHAKktIFPaZQA^`D%7a1(m`If~> zo?GpdhVvlrVaFe&@{HM7TmN87Tiq}OV&a-JmJ%XhRKqfg*tqRKzXw4t8|`!aacH`S z{FHe5qi4yySsjmJp@JwGg>qpM;lsw0TOOtxGsGA77TDtwyH{@Cehw1&L3u546KI)B z%`DnDRLgvO)9L{abh?petl^W!vkysHYq!z&bL$gHGrGWe14!XxoIh?QCP?=&uCPg; z*r$DR1o_VYlh@HKCP%S5dkC1u-g<hmZJ~(j<It0wZ1sK>dG_(T!T@t)-;P#6q+P*q z&ZcjcVAZ%BeVV6C{gne@%=VFPG$h?T<?Vw(p>oEv)!vt%Tm^z|yfX+-J+_hRr8DbQ ze!jc7`>8vhVDEA+pfoIpj_iTM&Ut;3kBrZ_cTr45%@XRM!-wFCb_6y?o*oWaHOm~N z_5?Be^y1u$VcV=3vozCj0#EJXK-ud{RmF({7k|K0;{3a~`>6UPtqd}4N1pzaQ$zUd zgX*%G+m_4?J&yv7;jTws0uPg&i>yOr$`_3gK)*p`j-JVgdEZsEJf#eH7sEgTj4+5z zH?jU$XcZSUcUt6e48tB*e+qcf@QI4rBc*NH`L^xQL&1WfHWNrI)VY<W3OlBZWSUM$ z&9gh}r=H*#U4&2Tq6|})y#Q5PDxPqxTe^OLF6fZy(B*${^Zl~HubU#7Pz3G$Q7@<o zAH~?)GUje|i(bt$<nsVTLAdIL{L;2JtTwGE|26D|x!wTMZl9st@<fWP$71vW<UxX` zfNfvoa)Nz|uCJmcCy<F>8$<eiY<bMGJ?kc4UUiatXU1ps%u9NaTfoeb&Z0!i4g=UC zCyUD9vER6C(D1KS)W>Dzx%!<?&ztN1du$Gj*Cfy*?~|os_gG8_+^31>GxAIh>MQn0 zuO;3%0Aq0)yrk=wO*~hq^>s18$VwPsze-%amE*p&j|WMBih&cy;3A5FLf<vdHQ6le zIF7SfDw^xAixV^Ede;}^u<b7&YRB_Y6I0iHfEicHh^d!T^xO7ukNZ7*iKBcZ?B&~c z8KLQWjX<;ss3VTIGfQOzC`>T)QDPB?Cw=`+2gCGN;$umMJ9ZUZkHOMt04x0=tU|s; zdNc<5$}*v+P~xI`d_%p~k@7mbM=3kdg}h@{o!$qb%0am{9<M}Zt}zg&T3qlu5g<G} z37nYY_m{?1`DP@}*3qw5;`AS5*{aAHsst&#<+Iys${=!>t7X5>ZnkA9uS@hj@w$p* zq3TZhPqHjpXkqK*S-CAGo-hplI?nU7DC8v9ugIL1nHw88(4x6HJCgdypj-dG_jAN} zM=Ds3)O8wG^3h_5e6}H~_Djckx*$<gib97En4Q!W9#-(tdT8)Mw=-<uRacbMhB43) z|5Ajv6@OJ3ETnb*qLBTuSwhWfFXI8^5Z>dF9WNa-+yiiY6#d_BYg*hC^)3tWwJ8nD zrOjj2{g^e5NzrPNrf?<IB`VN?G7459tGBDcql08A{&KwGX&tRUU;klO>{f(g5)FIl zQ2h!=<_WZGYHXoM7lH`eS{)Sr*&Z@7AA`aqU4Gx3i0zR{e3#eiHce4gs{u<_*G_tP zLz!eCcuZq`BQ*I-2NM^op~SW4YCx9Zf5@iu4sisJyhVM`WD@ZOVy5R6qu?bsM5E<B zHP^hqY1In(hZxn;;siQvhAGoJENPuF@UXh)jEcX=HFc&Y6B^g!Bz-Co$5_moKOa^= z=FQXteY0IoqMk^-GfstgFyux={w_x_;q@8_*%ucO)wY-j%fP#jZ@k)w@-P#sO+FfT zpg5DnaF5lY{!emLr6n7~OeW~j2-5y!#c6QiJY@7kd8JHVDnnn`jNsMlw`M}5@8;E~ zs=G?0yF4Yt8C9#?p_fR%oT?sa`t+&B!<>`|(a`T=`Ndb7Le%SF`6)aEhrvruyLiv~ zghE{tAV5%6>2~uu^)+chxAvostum=O`M@fn&&Mz7K{fxd2iYRPw!7d$g~GqRqdsmR zhgA&66Gj)uh{WYbiho$adNXkyQe%zwXNuxDO{f3T;N_D|0u)}Ms)PDe*`4;Ox2Cf& zKc>^D(2-_o0#gF36@_qeV{b><#q{v(IT!ZBSBOfcQ*O&|=p#PGzcf@4eITOWvJffx zmGm$+JvDBT9+S?5x(@xgSkD>ZGEXDR*eh%WTwp#&Z!=c9)I~q>Tbx-D)hN`{3(74j z_NWxAsZAxU=*Ba=Z)&=9?vcD<QJ0vJK(F9=J(>{pP!lv=bpz#_tamWp$nM;p`6T9y z$8`C<{J=`vJxzu5z++@U^Vh7OTS#evf!HuYB9Lk9*w{jAAKE>-8N_YEX7pUqwXd>L zs_k8I&z#hZruwv}6;=|5R4Ic$FF7!Lb>|mLI2JjM<wde4Kg1+0bt+3*L>ci+Etw^0 zs#pM<B~ps?y50IT6ZLsv{Sa4es}FaJDwXLkPf{LfqYc<c`{aIZY^tl-#g5DCt{R9X zcy_O9as{MkMWb0JTe=22FAgLqHJGQIS!U#?IngfTUS8mF2KrcJNqv;_(u{Ci-(Q*` zo25u<%Ry_Ur!8Pb3DQChC%pYjvr~PlG=>27J9&y@7q7tj*b-TDbSUd<?V7mQ%`%`9 ziH(*e5Gn1T0iGgO5<w7U%FoOmz8;}lHW+*m2<Xv;vs3R)Ns))p=PGk9S!^T@7R!8L ztgbZ}bdqat4HgAXrU4H@hr%YO*ITN;C9h2jb5{Y|{xfl79vPAi!;q!BM{kN|_mim; z?sF-#yi>iNkn6^@tI(Y98ib<KLzS1-&DT6{c-HJP<j#7we3x=P{HF9ANGH6pNgD2| zU>DQQw@VS9?nPRr$7Cmb0CH6Rdsw<{hq848#v;x&z-5!t_E|f(&2wc|ke^STCjZRz z#I#GURO~c?rwUh|%7Pc?I0<tUX<_NHp9Y2bD6IkriPs#PC8?qyA-b}wGEp|?>;O?J zRqfN+)dIgX>UDIm{oYLo(D0{~0A!6;ZsIKxNIM<=6G!kjF4c|A4YiQfEWx%{$Qmy} zL%OAp=lnCd>2Zt4@E=rwU`Si}WA&%jMeyr-)^$KtFW3~Y`Lxpgzk|zEnKgAyz~bez z$VUl1S#tJgt=Fm{cMpVm9zEwXJWzKJYrEvgHT>@hm^ZN%ByNq=AWfnpJb<}EG054S zHihO2J%#=GV$$O8&HY<1leD@xRX}UEsU=z?5WD;R_a9u<9en>MYFK>*6N-+?N*V{; z`)wubb>mhEs-maUhW*@o#<S^1!qFi|+f0Hk^-U?4gKss=F0y)>jhdfM(}FP{QnV(% zMm@0l6T)%F-QNi)u=OLS+Ov1T@UIs;>yoY2uwpjZ`}YEqR(*EdUo?pP`(GDQyy0XX zV;hSWGH(6R*BS%&ysB4@^GqC1U1lu~J0!^d2!HLRKQ|UEelI{UwD7d<*`?V1%GzdM z!a}$P3&BM2sa%5h)e1T_zneGep8tI4{A*j{MT0%X-2N<T%>j5EQXp_T<_0&AS~TQf z`1P6{+DO*KXD?xgZF1=el3hLyf7G#*Riz(~|3h||>{%^LInt`}3udZld=Do5ur>?o z`aBXdFxIOqKad~BB%*B_5rx!Wvge~do}fxEvb<Q({W|(gucalx`9n<wmCpfXqGJcR zP+43|r<yg@D8UY=KgQ9L<J<FW`>zc7yZ42H=`5e=`W5uFq3GRkl_e#V1cR7Itu2jy z1BF&*7yM;ug8^{d<Sq6LkO&;&El8B^pgn$UdBXnu_}+?Pfb2+5D7XjD|E!)=nIKb< z@#D_H%Nn0b23KB(P8ZGTBE0qfM?x4xL!m79tX+j94Qs;>=(ifV@NC}rsG<*AVlw&m zF0lnoaLLOx$f9MUB?xbgbOw;yOx|C>5^oHlaJCDpjRXOcTuYwJH%&|*B0hKieo<uZ zD0r%+yM8Bz_b4;st@4`X-C?ulmYT02zdn0%8hHwMi0<R#UZZ%L&B}l#b<MEKv;eIN zg0bH64fo~7c=_!uzvso=sE7L^A*<wt2o3v!HLTi{`+k4mbH*&j&u{J>{MO@+7W(XA zT7<^<4|0E}?0ieNjNA4~A=5E>7yW2X67+dtx7A;BsYFPc_LK|MVSmKE2=qFB1SVT! zKZOaBziwR@yEn(Ao7LW}K9LGIOs>S*c79uAQ^<bzD@f^oJ6xyRuo~0YE1T0nY-G6u zmJi{R_Ud2N>9j&Iz#+K3hSCqn^VH-3c_bx$m@L%+k14~?J({E5vDx&5UQ7Dv8+!9c zkoN8&I#=<LrT$k7J~4(i`jb&h=^?Bz*lqgDX3&*srJwoZK{EkDn6wlDT^OB0qjRM3 za;uMj`fnIpmk1}-CeID4Hi}UflsP+Pn2#BAsiT|K;geV<XZ2)1w%1<g9o<ORO`(dG zTfUS4JX`!aY^xR<g<oCadl@rIusBcJPQme4iP=-lgyBW0j^c{T@hDau#p39S%k`f; zM7@vq`w$7=PFYAMoglh?0JvlNe#nC4S-h9VdBb2<VmV5b>m^9-5GOqxq_S>}t;X9h zfmmmi3JZ@4zDEB-^`GUVuCD)+@qb}_N$!MetyKz8(Ype>BZQoG8trAD3}jL%;iz1r zNbMY3MCnWyKtN4cA4sY+6P%AV92~{#?(ZEfHap5zqsa6fjXVkE!}&N&=G@8VOc!VG z^}M^$rA~UZA2p>@DH()pZZ{Ej#o;rE3rB)X)3qwT(_@_yH+yD6ZUGJ{?n&g$NeyiY z+)5Z>GX^?nqo1y%@=jE@KKkBl>=Q4|*LKU?tBwE2DwrsFUA#xrQG09q{6z+Nk%~!D zsm1lDJVMZHpvy8LywNuTBUngUNU5Ule5cu2S;R*tR;M(H<Vn0jvHR@jZ?k?y^j7bS zQF*?(rxEyu<zP^pFPG(@KYhn=be;8UlYGSLv1Gf|itCMhwnlFGEH#S=s<cUL>z-LI z6}Vvo8bUBVB`%NB)1HRCPIfss$Pms~vH1*t_ecKB<?qB3=$gRFsl>+knmrp;xAdn_ zokc3A5o7mDJnMKurF1G89;qZ34!QvM4s@|dvz;7$B9X@49XZ~5=5BY{Tlznis(2Yd zO&RQmZ_)3@wG<W<ZYK9Ym6B#8Osx#XRy5?}{a;DXUaf@oU^%PFS&6Vhx9F;;G84X> z_c{}9nMrwQSK9y23DZuo&!wO`?0KoWg%qfE`qW@~o>TM9!LN2U?uqm$q)2;9X*78l zkj0QAB7-hNh>I;RU0=w^bRJ6Ge(8+AO}}Y-_^)@6cgkJVZGUuaG{^)<2%RpaUdA+3 zQJ&$;pub$VbF1PcEH8zhZ9Mu7q<R=tKtUHZ%wEgZDf$EL;Hk<u_s93Rf7o<x4|N%3 zr<**sWvPqQx{TB%`$jsGv>KfAC@8&p<##o;n>U*h{rCBMDAD^15x6a^B<V$R*=)OL zLqmjup4yG*`}M*z@27Qi{mdi2C7jKG;fA7EPIJU-l5P1{Ot(6df=)bJc>utNx9#Y~ zM^rvScN-qI_W)MW)w$vte6lEdi@0g8bB+0oP?wBnD<4dDpDo<~r0@gZya`RbOkQSJ zm>>NAeQ5a6wXgs6(1xVs4lNndVS-XN<-vY7vB7!VVYjmT<!2+Q-tQvT2N&>IDLd%- zO(63)VqbY|+uPWnOJ=M)NxuD^k#ra<L+=mi3`z^30;QADA$*Y(_yffOWm}GEO0l@r znYWS{ek-e`Nnn!V7eE+P=~BV+k_!u9WdpTP6coiQ#?jmAD1LS4(`#^|?#t6#6zFHf zc&EitLR9%uYsmb_Oc$+s;gno`?URH8M>`}N#TgE}u}gV=`I4JmWc{a4XSVjTt7|N3 zvF97As>TY(9WfJ935O%S{0*1fGuVa)GJu-->;EBy<nPwVESgCrq8kgm9V^*D+Wu1e zm&Pge=@N&;==mG8*R~loCR$mvE=dJb)r+ll%WP*ij$*?DDvaOz#a&)&vw69+pwzmU z&D?>v69ZDRWOtmhR%{w7WurezB<am|5@~``MjnHm7x|K4zTH~llS%=9wE9bDaW~}W zzspqQL|!G_ARZ1$4<W@}2s_a)0jonqw|`~Wi!_eHWT?k4o#jHmB#qxQz>R?<j8=)% z;QYLCc(p|HBvwWK`X2KdBVYmXDS@iJ^|wes6%Un<TFvyn#QVRCej2>fg-HDf)Gi#< zIkM*EQ8mZyA2w*;V3XMh`R*_5B+^$*iRiKCcb_o?7U=VkgIm2QW;Zcx?8l!`XE~4O z_qXSTu&onbA3VHa*X<<tt5>WI<sUo(uETFbr0;*#fZ+S#JP5bndd;b>;`J9STpvnA zO@@k>Z0TH8TGisC=$016ZfWQ)!Fd4y1g0R_Efw0wUUwMJxYE>syjo2m%yicI7f=Tw z%!$@NmD}jF9M1fB=F8y|U)bm-J#>0y23rQGInKFOlq@{8nltuRY#&-)^lPrKDrqqI zU(CH{S5sZvE{qiwFcj%ks#2Azv<ONUBdCNLR5}q*X#oNeklq9Y1f)oB0V$z`0Mb=N zI#H04gkBSBgpg~m>wfl!cRzpNy~oIB#$v8>%{kBGJj$&B7jiX(SY2EN?_kvglSy4! zZIkJI=Ud0CH*?;O+++N%=A!uzgPEOL_cawerXFBpk5Dmn-?k0=&IBK@Y3;^38QqU{ z@SZz?3R~}0$b3V(QO@+;q|P39x1S*wskg2U_ev}ra-WuXB=S8pMFS<>541R~q>K}e z95G<A*no3uZI;SU?BGU(-+O~7)IofjqQfeh%&<S6d{1-TZ87ZRJ*atHfV1!IVDwF} zID8VNOF=KC5@ulj&23}IP!aiMMUUG&%mMwo)uZcQxDv=mAjVbew1cz~1JLiBO}~JY zJ{{(ZPMVDm46Ez9MrD}zgKS<!=f^zPp?{CRRBI)41D6dUr#A(8Bx_;fcMX!ZWnUPq z$qag`xYGG(px|H?n?Vz^+`j7$0O}u<q)xoYZ^#_zotIzj-HqjrM~amo;Js5#@hUd! zZMr)@<?b3|Uz7j(vrBv2fn08PS+&<Sv-JmbDt5p)?j~$C%WXnMrn0%p!{e^UuEe{K z%=GiPV>&xvWd;oDQ+$h1^GINFU$LsKL9J*9#|{Awcg$!<+h5jetmRYU{U4dMwJK-d zrQb156Zg>qVzlz2>6fq+gM;9MIJB*6;MPa`jiy?WSC}uC6HCi(38%Rr<*2T+ppFTZ z1bfSD8wyux=&K;n7hOpNvs63ox0=^-1zRT-#K*UNHBKy?vWUd>0menUiVC*J3=DhK z>9M=PlHV|SadgRM-1xq*f}zQ+&8p|EDYx{g0~wCyXV@Vq<9QEmdul6%v8SdKh}9d> zR4BMFCzpLc+a>SD8szU@4V3z*+<vY7Vq@@gU+lPCX>(oHqW;-U<{|D6;Mt1+Z>;7# zhMG+Q_k_WLl0aPgxqMF%_tMnYrxq7#<918Ft+Q&Io4QUiO^Q;Gufg$_xcQAp<1*ZW z_<16MtCVTw6kyf2Zrzx=M9sJpeEGx%eh0{MW$B-_xI2oyR9dy#IMtUNR5DkZ=@!7$ zDScFU`T{KhF;mkiXL0;wjJr2ir46sCRbpH>?Kalg&^U(`tRE7ZScQp@v(|I3j$mZk z%>Q~cv_$-{xcFIjmqE8xur-Fi4PH{vEFACb<`aCmOHg<FfvJHNrXh<s>cCu}Dr;yV zsMG|Y;;s|>azb-m^mAnAPu?C?aOi1;2IV2~;V&HlhqXiNzlaSurV_Z&CCZ+*KpPO* zPGr$|IOf!rfMJ|d!POe^eN;Q-G5H(2?+(ydC8*myfeNue8+#d{)E$F%&)`A_T}}6r z6N}a!@}!@v12g;o{b{w4qxyt2CRMZ^;Ctviy><43S2Etgdb&owJX&}^(;S-ob-%{3 z09VtGV#c7Mu=WW}G2(FtNV}+_i7X3yZi?}X6i7ffCCUVKfkE@+yf@Hpb)oVA=WcHm znsKCsA6V&G_^H1Zhi`#F9y7w_!N`lEbW7O+HrZ5xR_~9gHdmm@$lD#^x>UDdQZW3{ zxL0YGMqF#?E5wdCBDwa8>w}36fPn-ac|m&xWE3XF`p+tk6UNQe#-ESIaX1fOA4-3i zM?BNiG})dNLHn9a)?Z{ipJ#j6qrhGhPUEgvAM*6ndvDVtLJAPSCY;H+SWZ$%WM`lN zB)TxRcYH@TP<y^EL!^$lgISs3tK&2_C)STYxPG$eOQ=1SB<*rPy>u!UKC8UC1ZV`7 zf#i|z0b<MtJ9YK?hKok#I%2;ju!|vAsSrB*2_L^J=HlMKy3yp?_k&XzVNcGw{9!fh zecb^H;exH?DrEO+%Tfe@G#$;n`c9c1G0R849Cz(J;|StoG`n&{B<V3=<=-0Wku0xz zw(0Hdr_r1Syjts}1-RuNF0X3jv(IDIzFNAoT|<Uy1(TyYhG%zp8=Vf=-T~H_2^5dM zCW;vGWbSQ)0_)rgRw(9$5S{ekT~U&f&;2CG3LHl@(=JQT+KNN3fhufWu`%@~zYT_z zov$sL|HH5eQab-%lOb2#bfaw{JxmWCoh*si{a(p+2~vCQ*FOw?RgWK<ULnLQif8i_ zdOUsEU3P0r+FE8n)0_NAm*QOSU)ES$wOSJ#8pM+D#jyJ2t=S@htaZlFJry7(oF|Mw zE|~8YtwtK?E;BQloy{)}g}}Xy$2J?#(nAkwlLi_ZBIF47m));jD%?4Z9*5pA@IL$b zL71VFc_MnaoJTZ&6fiatHmV=1V(oWvIc?Jw5yyG&VTEGAt<!ay-oeFg0I_we)!n&1 z?CAXN&7EoO4e`O13d7~u%4x)LcSf!f>e7_^Mb(DSfBUYDr}Zf%km5-nq0lE=TTd~1 zDQk~on2Mf#nD_L%RJdlu5bWN2Z?`8^93mRyc(x*Sz@hq_iJrF*m<-D#1xw1vnN>eS zNN`NgSbtj_^b%S5I+NgtRH51xQrVXd4knk5%_h7Mxd%rOMSY=6z#r!_0%A<27gpG> zetYeuBB|d3fVoDQ2aeYUQs1cY%@x#d`ee&^I3GWbWX-_W_6zKs4)IO$`;p|a)F3lR zq{hv6TtaBt4T_9b<zrJus*J;xA9+1rF*Djug+;h{vn*Drss0oXb7U7wj4yKJ%c`8R z?evR37%eIjBuYHE<M_NvJ3kCGT9ke-QZmKjLhMCnhc^scrqb%z^SYOk-x=s$-}~lZ z<lwsSaOF!_ks})n>~Rc6z_gxE5^Xl0FPk)`{tP#4ZkhAo4`O!Nuepau$`r$oax;U= z(Ld@|$BGAW&zJO~jZ38$Pfhg%h1={|gwz)OUT2-|Ez^}S35u>R;1zpO``PEI!6(j7 zwtdBb)0bDGENT3?4G><`JIS;f{n!V}JRB*teVJeA{q|WZNr%#)mO_0^o-uG!NWK0G z%0k7PJX9IK9wb<47)G?5dYlAS5=~>ivv&?pKPq3lwj68Zn5brvqIjlEOeQ%w3pf)y zqU|p=<ng;3m47R9&$7rDJ=RQJ9sBF-T7M|O_7$DSgkaJq_lE<}zQE|YajqBqKeBF5 z-JVH;D#~8~8{^4+p`}!ZyN#pDuJ={Bj&aSue}Dbcn<Q(bSqo$#gYN?FY^Jv?SKmd; zSr|#Mg&8t$+12Jwf0$4ZFfHvQ$UX3Q-e+>6e(iqhw0>*mh@n*cZoCV*>Ni~+VIj=6 zs?Ia<Df{6Bt5#XmVeI_g-wY8KjPL%r#c?hR@0l6nchg@YjU2rro}3X+T{#CaGtqqb zp8ac?qeon7!jGU!>9M_l`(?v6HzH)&U{cJbA@A&akLvi#Pu?Gh#FB95$U*w#r06_5 z^~mzdwPR+pKWj>V(R{hxvFk5z*NcBsE7p6=&;x6DR(|Jnn@n*gwx`pamhTEhgc#6k z(&28Zkm}wl9)p9oew(g!3(Mb~Eu;-5bSn2d^Y{>tx>*qg@Gh*`*w&AXk+0wYnP$7X ziZByKp8ip62MDgJeRV{3-$UA7y>IKL_=Css;TwS#3DB@LrWkoKV5}jxz-D~vI0<8U z{c!3#im%p8M;Xdm_1Q3`ha|o7C45g5P_u-?sEmX*7t3aBs@WuZL%#Ib^k*i^q+Id4 z!|6nsRthMr0mAC)Hzi-_bz{^ctioF7mH5rHho>vgK5NluJdZV&PHZi<f@Ae&Gb(hY z>ac+Eh+}dKq`7ip5K(A8s@&$)JqA~uH{AVp4zoKi(U8DP_>jvKUsguDO&S6rGJ5!` z;|k``gY*xtUROkU**e*L>Lg;b!h$|{EH))taS9Rd3K*jj8tdO_9aIW;m6qYC?IR0b zk8aq}VcXfBuRaDoZh&%9K!l}iQmTu}#O$Y1cP^Xuq2SWNMdMIx{E<0LgX&#~;MT|1 zj%F<xRsU)mTo`qBvl;)~C*#tU%QL1a=i=>EWT1#1?6!Nb`*T+_<ugOQMvBqAKl;Ch z+6ob-a`XU_ji^^a`H05jZmyA4zhUKc3OBdBM9VD#ek)S=aKaJQl}9-|;W7nojSSPk zd;@O+;A7JObt2-~D}pa2cx6JW1)ed<u9$MuP3_$s<gstfo#Bmzu?9GkOk9hXb5p2j zP-Z*rN5v_>!&`%PRp2XtBNiErH6_Yf4?(PyK0`z-kSHHtaD)@Wo9G`#GYS?=k0Z+P zXSZBt7wi=r`uy}_bzdyHe73jL4G(Q%WSzdZ3qGz;M5TFa^HSooqQV^kQ?}yvs8YF( zss8L6X}Fy1rgw#j8c<$BUi^_uoPvjJjiyqSwd+wsheJb0Yq&4wM-&z08L(eH1~4-& zYf2D2%uP+Yk0dY&>*aUFof1#2F-V=pu94`nD~EIu^1UPHWX*K^*v#(_TVjj()4m+M zjK`mhXfi`60)%=@kCVgzJXgS<rGGu2%-9WKr3UprTo)3dECS}(lRV;)GC|p|Lz&VB zPCI&S;dSN}F02Xhj?;9!%Mg*f&?NJgT|zABR-<iR+G|MJYGPQcbmZ0&6QIqIFG*xV zjMsk?JNM*Fxj6pP9B;dj+|WBDv~+v_Tr4pDwCrEE>&pxBDEr;(|Lhg#VATNj_Oq8O zq;a;%Dl^-66sL*)q-x~t(v`YDcb%>%!t5K?VnCTG6<6YGyOv{@a88u4X<f>Tc7ah% zttv#6SyQ};PnM4j?Tvl_t=ATE3Bg2+NCRe2J{mz|uQRP29|=S;^4q&Dgk4zHk{K>Y zxSHS)qbth5`S|In6=`E~HY%cBd0YXA`UXd1t3%=56|h0hw-$?&D)7t;B7Y0F&*bK; zV5v7rajkCXt@a!4JDrMGeBhFujPz+dil}gIjjy_mU~>#+o3)%;*<e0Mc5(W}bNuJn z;p2YwZ0rKggd*HY=V?{NZb!fHkk6=+IJ|XK5vFHHZi=UA5Hatl{+9LQ%ntIOzopw( z>~jvA+2WIMW`KKoNy525fyk+Z!NGBhm)2bbYa{VnXQYZ<sB`_3vy5aPYkc&^V(gNI zWlA3-d+T>pDCF)K`WY3~Go{cg-b&t%#mNMe&h)d-1czIMpEr#8lCHE*Y=vAv80eCN z-=>G~j}_E5B{yL|NqGmR7^$=ZK0`KLeA|FXgfIehPpmUkU$ln;a(W#xklM0YD|DvD zu4tdmx76{!3#gPl)ZOM{OwNl@p5Eqxt?`xAreL%0Ii#Oie0!E<xkO9PxBdL^7V<X1 zhDG}LQQqU0CUc=3REMNxZb)W7!Db?}X8i~f^&;eV^_nU+xZ3Y;2K(8wN6h;wKiurO zHP2Pr6{C}4m6w~nBcKjKqz%hcb`w{iVgTLR7EwLBc6=;k!y@6BEVosXW3zcmp!{ig zn(*~?Ta}Fd8Oa^Gk;t%033=hsNv`QjJ$ii9MB6#PDgSPT^Q-NmeEU&RRp|XE&j*z6 zl$i&;{W%;G*2=dWB4+i+9SpcjJ2>&CtgV}1!>$PTY;rJwm0-5oAOsaP=s4LyX6vAy zxFNg=kk|&mm1{LH7ekRUo7}8&R*KVzGcVh$eeb=Lw;c$zFF+WWjnS{JYl}8hSQaM| z_Dlq<9hSd0iFt{AM1k_x;B_VS=g!uiy0ef)P@vyHg6mpT4~3-1kRzQte*gk#@!1dz zer2jX2mMQ8D=Ek$*!eG$3NCa!d0Mo_%r+?+Y3Ex??S_!IvI_>vW^AWb{?x@xiZ?~8 z&ipW3P6f~dwsvVND%iGmcoT>vu*J)d{jibY9C*7APA=Q@nL9^&K2kWoj{^N|;;PeX z_ze3LOPqQFR`zNLKf>p`SqGP-mP}i^HBzRnrt=f874keb8@_~r$<@$qQ9L_HD8N4y zoahT;{%vcgS2sI*nrPnmxja==Z>yOm-9)?o4}&mj<lpsT0oKcBYN$Kd{P0VN0C_8i zIK8RpA>QA9^xGKo#Vqm8t0Y)Sn_}z|?GdSl8DTaFW?lDFW&ixA)=287LG{R>0l_O; z=nCcW5(u>32yHs$&tpcW?oYjhmlf0^;lv9_If9*uO>>w{^agQP^F#Yyl*l<@b3JEw zn4*v{S#Bss)26gNrE!gS^WK2c?wg7W^C=H*+Ga$Ah_9kpOOv|kSIH%Xr8*T|qt?}> z=byFd@oE_HXnNa~hSM$*^3G$r5pbi(&gvTyj?T}&_$<a$XEh7Q%?eE5ATES;Ii^Q> zM%bjsy9s+TE%|01w|*+Br=OuzE6}e1Cs4;q9o(LJevTG`t%<S+`PMMouVrK%#&09< zz6yBJNcpBLsru%0zqCoyVI`c96rloQr26h{LhW1e)qMWhn`*cJ<O5s6z|H=Uw)N_Y zz{b*Ng}(-ZDrRkdPu)}8g^1j<FIVZap*c{4y<dvN^#*!<K=A)50JhtEr|kZii;u`A z-|%^QsqSMK=%u^ye+w?0*>E^XSF)E_DlWV0QoQPy(&=z+{9V7yH`%|*6NYn1vX=<^ z=ke{*NK3p=j!aKhZWN&gRG_=FTDK8U4Qi$VX_ctA8B=L<k=t@A1Kp_L;x#osZ<ylz zPf<^SBpB-7;A4LBP?)9`$({?K2T`7Uv~K_8RWVT7E7&QUPVP^5BlX}l9NG&kt>&3m z`Lo|nVxAR!W0n)Ow^n#J%*hK%+v|g)fq2?KYjg(kY+>0=_yAh{Vu=F~MD#CDO?rrO z`J+n0nMY$x8{Fx2(_HkeJ(;}8_F#%;9y<<7uz^Gk&Hq)#Yd=A6)hv59xfY5o-Q9i@ zl(h$3qrJ`O-^f5%{p}Jl*8~4_MO!=NwcPuvJB9NK77m|%YVH*@d&SrNQ3ylE*{tpz z;5zE+g9iMsOJI$>`IOEJ-nvDDzo!mX&LO~EfeH~c!2mx1V&9bAbjtP1aym;JYWwN^ zmG`iedKYM&&XLd@M(q?>F_E9eeU=pHF7N2-94)i03%TU)zzNJ+Gm*BVn@AI)!g;C- zG_5bG%+}WA)uk3l15e>>a*BqF6d7$s&iEp#l}C<o<43K(sq%`LQpt!wdK0%<R+tA0 zIt7b&Y<QXCtekf5<`3Pu_Y_|?0@EWN|7#B=+=u;HlTS5Aakx#5KdiNJYc%pwHmYY< zO?ezIFpA_O|Lh=af_k(i@Ed38(s+66Et5NI#gBu(9{LEH`hl60(FXctr0UTEo6VZH zot@nfGo(#S@sE+n!{8fT*eRI-x*(5-PaYe!-*&?HV&3LdoRMJfLL|STXmj#CIIl-I zlW=iBO{53Xg9N&;HpedUufyYm_Ta(D9FA0X(Il|Ur};eqmml^@EdR7R6$+7^nKrl$ z+1h^i>%@KE2~oEbtkE^qyO}@Z?ct(4!t5enW_Y3(fbZ^jOTUoOmE~OMUu+Hc&zM~G zRXJJNo%Mgo(+Fv)2vH@gMbd=J5&k{7+@IqNCkiLfa=KHCTuZl$EoVh@wATU2O;#+C zF5@<ZIS6&}CwygJe=_P-F#ZhV|4Uxgk!N@MYC-@8ofj7(1z32{3yBcsKh&UZ>_s)1 zbJLz~%bULfLEqa1l~3G{i9Ocn$vna8gi^QqDIIWb^&z{7xa@<G?`3R<+jbbvWtd7` zstq-pkRTdt0C->aMr>{*Tg`m)Iw*yP>S|nNWVo&Jm8RD|N%NvOk9`T@$15l&sP~O+ z1{Tl6M>z5xmpA(_A`Yv&36O)5oH8IsS-l;tU3-$GDLH$voSA#wVU}&^b*U!)(+JGK zpJ2-04;<Zh0S@ndlQO*m9S@e`_ti+u?xP^X$G*2oWb}-|{C4+=?nHh@7uHcHYPKo* z9*KUoSw*4Ks3@B-6Q(sbTU>=#eK>RbTP~0{l&A)bMIJ+a^^mKTwn+UE&8tD=V?*-W zLp|KOhMhZahmS{*b9dfWGt0VNNcnsYRENr!dx`urk7a+cH`^L=GxM3A8{@Xb?e%ed zRZrNhWJW!PkjF=hA<}by+&Wk^&4L`n41CXLYxIlm>;HObFou5B!K(6%Tti?UTMbOu z+^T%d&JWKX$Y@D%`xE>R!^b@De#~>=U9`)RIRSWeU(2TVs01xp8NiudTnhW{7z2Ck z@Zp=LhZqGQqTzN)w$G2d17S&8V^hBY1u!P!PxQ29&%&b4W^<Wvf@K5sE}1@giX8zl zauQs8YdDwfI4K-~R4YcvkWP&u<qPnT3FS=BttxiiZvx3C>_u;cGTGT+HUEZlKq*pD znl6CVG00UB5jnB(AjjY7Y^x+>*2{`JJhzCikE)Z8h}`bY6{7%RX`jB@@$CtZjVggf zLWBXN{|wMk5E`?qtOtldQ~{USuNimjCv4(xNh{rZS7RjxE-NDI?Q%Gm=<E$1kBA2G zzVH)>nb*cTbz`$C<hN+&X(rbX9T_=AwXXvND}U0o+=%w^u&WfIRwojRjqdOZt! z#4g=R$vM)~%OD3TzLusiDGxLs3@g~&BC~DhC=PW{T8@!!_j(gJ!B-g?2iRny2&gNr zQoY*ZV;&f^*W>0ac)4f)2hnF@3h%FwPrqR__UcWFg0T&2@&kpaH-`4naxqBSOwaHO z|K3yfy5i1!q$a>1A=e_3GyPIdiH+vj4)x^lt@mhOnD7}?DYW^^=Ge3wvYnMEsI*~q z4zV2bs9%^{MG(||G#9>w)5xEmk(ex%9b@G1pr5_9TwY^F5z4M|hiQ>NG>$nW>5jUj zY}wQ+hFNxs8^;OTB2VDW1-N5k!y|X@_RFIjX1Fo5FN?iL&w+P?{7U-nt+>FCv|a-s z$fJ+N<VmU>xu!esyt}`8@NEA545-=HO=YeX^=&E5dHR!9^45R_xiq1McD)RKh~1BK z`&Kq>8Zx~Ubr`9tJJUIjFCBqBA?1Nq+f}Hw#Va9VgMDc(#qFOsliyW9Ze|Qf)Z&2{ zvXv(-;4UzO>BShFRMA`TpEuWO{VE3Yy&nTjOJk5=r<Y@^*4nia=w$y{hxlHBNZEfF z>PFfACu#EkDn|bQWO&&M_t-~TyCiJOd6jgG@1f0qGhYuVg)AC6NJ)UoDnrgu0}7}L zUAwMXw_7c%FS>2r?{!K3+IO-ZFI*x6?`jtqL&_DSTwF(tIBV0Eyc8|cGXE@osAo5l z#H;{{@Y3${fYQrLQ*XZJ${fPqD)mHY6V3CX)Ms_+npm>sBrp@DnN)s`>hECPH?=on zRJ82IihsEL(;sDgfR;lG-*50x?s;+F`035yZlUut?Z0}h|F!3+qnQ*~A~JMwBm1t% zW2T0k#ryN5GLfUOQ`L-}dFL9yEQl<*Ks$)lq{;<uk9v3i)Ak}kFK<_mAf*5+KTA!+ zRd30%TIHL#40FYM2??EIav1N#uBNhT1EN8MauVO_L)WR|AL&hikXN=e^k9&=oaP!_ z4|5M;qv>1hI8d9)Pcn`NIsWG5WuCxCLinh6jmf6yrA&t)Eqb|(+{FIGc=mE;_Ejr@ z!J2B9^Y43xrcj&aU7~0vRkQZr%Hb9_<_4B$e_Pu|gaI%B?s52_A2u({$JC&!k<OoW zkvQ@x;kgYwDD&z$hQ2;&9kF%0a}8`$(|6A@HC}rsnsnzpL%F+5`PJAdXv?+F(kYAB zb7wx{qwSEqlY58B?E;8nvk~R;U*FTEd_MQ_(*trQ$_bE&G1sZhq-f0`64M;(oV796 zH&4qV*00O1(nTL@rG(Rh&i&^>#VDXJfdGEHX-*Fs&}hBQoZi%E{`b+Ho~Q37poG$H zQ{gYHvx4e2t*z^0+1b-AY6DUvn-DH?Nd_T2WXjz3Z_`f9mQ!;}ihnXCKK=E-=|g}| z0b#Kz-nVGNM}gJO6(&_1Z-bdhrOg8DOvC)d+e6k1(D~&=70F|8jP|v)40SlO2@AHt zS!d<J+JVBQU#o%kQ5$=kXGO-U#({9arc<BOo<h9ed2d^f155jud$RHH0Lqo|N_KLr zZ^VS($LCoXsP;UrP>;$&Xj8MRAD0^UMe9y=zD@U2Yl1ndE(9_|0jo=>@dV~X&8ovD z({pcWS1x1I{6g|){cTy*(U*b5rj;s?fNPdP3{pcorY7xJ@UNx8Af{<q253PMY{`2y z5&*~rrkwuqmk-h#Y$kiBiz#|$#sDAe2P7zIGC9pxu4lAQdivIIteI`+9vs{s5O=-P z6=rmS=`tXafBf%94|5~^!w`O?7LN(=RUO9!OK%Y+A~#ldqbFAxbwos#uv$`Iu&Sx^ z%`}Bl^hD!_Sm+H~P4kooM)JVq<@d01oZK0``q74FTsFU9kC`OkZy%J^p@(Q}A!qGu zKWfE?2p}d8@9@3PbIrZL)7DTYRLvmbNLM+ZM^1WZ676dr)2`lzf1$i|Y>0XPVKWrw zuWf?~iug|vfJsRgSKF0_ZA>QK4hZe1U(XLt=@vb~>u>0Jqb}1qTxTy%%KIX=edVCg z9L+}Dxa6)l(~3;V2<>|Dsye+8Z36(%{%f^^%7==^e%B?;?y_HD&OPU4W-Haxab|V) zR?7FQ<$v5@B4hQhT!NgBT_S82!DNon=Bwl=qWI>*EYf;{C3Ee0%%rY%yHj9Z_dg6E zS31Y=`KbJ_j)|kXQvSg^%0JF1-KJBRL5p^B|3378!Osy+mmJ2ai>e>gm#(&Z{o(e% z$n_6H{&OYE4srt$kR;p<0VWcmBS0RRD?+XJ2pqRj+A^Xb(roCG!hKP+mf!BZ8e`$P zuUehek+Bpx$b2>;yoYZR4UY4jxit$jlJ0!w9X*apa6r_|dmR`=><8;B2p}o~<Ybqc z*#`V~YAwGl@6^D_N>)u_IPEE$ZxW$nn}e-Jhw&lSn^JQ;XzWjl;PEO9@aN$v+;wcg zq!S$IfA7gMl48kPs$OyLs1HEGgG4yfG`Nn%bkE_%6_pmd#WUx=YM@Sh*R^j_Br6L| z^X)BdEdRJ>;L|5F<iu`dfwlGYeEZL`5L=C<nWig)_>DZhBmrpheM8FE&L?-ajH(~g z9+E}YNi2;2Fq|m_=<6OCJwq4Wg+%H{eK!3cv}P@-`64{c-g8Q;a^&IsUusp>7vKPL zWmBj)W&DV<d7`?Z4DFN-%^EdL6)0h_U$^z5DJ`J(w5c6{wd%Ufd`UQ*fZ{@s?%F{g zj&I93Hpt0sv`!DW`b(`1!dmnYHSzMALBye$!2T$tM9nl6^<V_Oxsc))^&=qHNlG{p zRBF6RJ5_<GTh_rVqn%B)NxkY?_}?MJU#d7N^;5*(Ui<pJ<BkSYhrA1GrAS4{?F$-D z$=Cpz&Y+-Z(dPpK$@eLr&mI^1_(0Vvsk>c)DtqbHO)<)G8qIW?(o6yNMCW!@0+cux zx}iK!*+WrH^?RC7v?I3#%*?;66l!K|_zda}J*ka7ypIjr8a2b-{`7LC`&TUHv8K)$ zyA}0>I!=&ELvp!8XiCv*cyATTrT6%XC`1rZ%s*gT1+~2M>emxN2qCyMl%_X-@?f_& zM0DJvXmS%xiyO%Kw#3?}lyvxow!Y#n6G|PaS+^FB@Zjz~FFvuar9WpHW~FZ-nO55j zI4SK9BHR`JwX}f6d67VD*3>BdNh!GQ07IgQ8?DhtjKK+#uIC3#xod@cfXhw!v}J;J z5U<yZY7yt%3r1qPi6GvSc}=Ljp7VOvL2AA=`e#eI)#~KNw1r7|x`fm)mr5u=yEXWd zx2LuOrV0vECu%MsNOvetwmx|jxLY)tTYY7XUbNUf^~7T}{QGYFF%+T~0E(xxb;N6W zm9Onkvn@so5ri1gvC`?B%86d5yx%*D;Dulcihd67Lgq!=6V#&G`<3gZdx!?_7jbhp zaX$be^dS_bhos~S$K|SxEm2?z#2`V{@jv(Flw;&V&p9NgIy8cRS0CF@`Y^&>l_1`g zNmWHqt;GH&y8D)Nw$979{;<F!XwkpyM;5u8GiFS;Pu=+@mCyOzh@$l6>!N+{5yP|b z;C2PNbj1J#+WGt#f@z{~W%%Gz1Fn9;CcJfVdupG1st<^>9FJrO|Cd0?sVO5BkJIuf z>JOF+!)%zh^(ekbeqto`jJ^-(^Zq}zy@raUvo??+y~l0xrv6VRwn|6N^+-L;4tT7z z`4Y^E+4KSA#%AN1P8HOD7);2hFpQ<L-BHjQRBiO0xW>Kg(+oQQFi19p2-qR8{pNVh zo5W4su}9;Zas{}$4$Fg!h3~%R-x5j^UV!IQQ8n&?<Lcvl`xtb4VeuM^ljv0X&E_3a zvaRQGvPgABY$qP+L_nWj^w=K^G8wDp^}kSEouVp+Kf6>1<m#PDY*!fWAgh8Y=%fpX zR8xv)s9WXAZc*bQTjeG*lfL0M{WFCi<Ea81SNA+Gwo#2+TbaUARd2Y%^TP8V25+Gy zsf(MI?O>{w3jxgZXWf5RiDEjFR`r=b+6nvBHOmngD)rm!)fD~DBEGig($w=MfTIGJ zno9dp?0$D*MMxqypSFli-=@j@e34Hroo~%iv!Os@sxW9tc$vt!?Aue!Ov-UW3r`ET zG61TaDI7Mb+#%$u{vv%+p}>7e_Tnv<T~gXrHwLki%iVUtoDho%S>-rh1r?hCxQrov z56^yKB&3L9i>Jv6pGFPO0XX5j4~k^I0%pZ2)gZ!x#SAAls<+s$Wb*O9_04$oRQKtQ z{%i<l(hT;DB10$ylFQSf9@T5=_qiJNWq+B}89e_>tNaL9sUwr<QFGkDpR@DHJM{wX z({=_nI^T|MZ?475Z*ECqgLjn5PeD$|T>m{TwoNdqZvnNQI5S%a#KC(Qj|z%jC~Qpo z`Rv`m^`FCmtl%6#g4C5w1qxa>Hyf~!5T;bjF^6!kw6kUr|N0DE8K?jDncV$i`MxQD zr!Pu7`cBQA+P1Kx>*APqhB315Y6Ww6DnVbuEo6FpK~ZyT3YvP=v#z<fJU|ax+EXk& zw10{NA_s2L6NPp*r0%4L_-A~()E`L6PgPqz!TfV$W9T4g)LvyUlkV7FHfz^p-;5mb z&uhPe2wvJb`-;HsL80WpgWA6tOlLlfdHSo4g(lMQLz6<MsiW;zO!+`;)aP@?DZlf% zYS?D3Jh)k}ZSbkr3+R>)d$KnT^y2zMu8)=uH?&53S`0zr&O1kk^EfP)GL!+K)6J*^ zK5m+L?x~hh+=N~Wwn10$;3DIc*x!qXt52djlcJtF01jB-9WP3i$y}H=2a0nQsyZt? zCN@H7%JD?+{7uon`PZe!1N|3Yswa^X-xz4CC+2<ehTghBkWT;D>xs49jyNGcid6Jg z!zqI4(-mNr@MCoL?Od(Z&G;a^7%+gHBX*o{Is-c&8(rlW@*34wDy(RtX5a34u$S$G z9pBoH)AYMH5e$w;_)lgq6%q=BG#u9!vtP?S*FLfr=Tjd!JP^byN!nILO*CtmgkWOe z^EHX8N0FZbKykR6SB^sOYE+4z^h{ki4>I20j-m@_Um@qDC(BL4{^-L@;xc%YOvLJ2 z^D1vv#{yLO^GH!Lnv7SV=@tE6Yr<RiE))>;<&6XS&(vUGfDA$S{4B!janlF@&swj& zp86(O)&G+1`{TEsZHY2f<c>%jc%J3_;@+`_o#M=M4w#XUU#;Ha&)|AH^>_2EA?DIa z(fKLs-A6fX*sUzMl|w?X<tGMc98i5M+R_FNFJdUSHz%Gy*=hgE@633AVnzWdn;0+L z-J&%ib;@90i${rV@d8)aA5q@NWQdl`^tEbkl4J%N9&(w_D>4PN$sgBz+VqBmM^`gS z?aiw&fG+lkY~L^Uz(fj1v5&B-TDJM%*QGCT8N3+P=7+kB<0nola10R@qWMm$E6bT4 zxxhI;28l+hI=O&-UmNL6wW-GL+DC^ljsf#k#;yc(w^u-^we>76{dEg}%*}I88ErX^ zVw-@s=tWpQxfJMiLPqt~;{?fZ-BY00eLLu}FvRSjd3p4JYwkrH`<Zdz)8c?7djxoS zzw$k+C^O(ry#3x+Uz+C(^+qM<g3wK}L8328&>fo;scDVWdM5i)euN?Qr_+57s!vt9 zHV+cgl2Cx9maDxdF|!Y!q4fr4bkAL~rb>13g@itnO}*=m&U8Hf`J*>8iP(pgmRUX# z2FBvN^ESWt<lx;|rU{#W@NgH+vp9*lTi})wVA+|quiLr$&GO;_MNdEB<yke>U-yv9 zQP}gY5y58}9x@1AvR=}bv=+Qen2V{R?KSQ0t-s|kd|6B1*y$f_$>E;Qdow@!g4jxK zi_eg`bkS<yrYxi8GG4`?NBAsK$~UM$P^SCHsSU>+X0ssCpUs#dGIg823!t-neJnEF z7JPnb&dFBRT*oR^Ok=m4r@#yomA25{940FYC`wKirxy4^g)Nx5((gR-P0?cQY_kH@ z0#M=sP)?;9ogs-*9Y?6?=HI?dE!gg9m!b&JMeveM$I_<aL0q@$KVF89U#q!JE&W7Y zhEj49yyrC%lpra6qvnShBk9bJPnn;-_59BAy08-^5ZQQC22@DIx=oxp-RL;<@Klo6 zWE+?e6#-}^3TCRC%Ku?-UssQqhRxcYo#Opo@uqNC`qGALjRb~jLzqDk8RPc>9RDDz z-qine=h96{Ryor5cfc@4#*xNH4QfcD>M74vchgm*y6mF@y+VDMR805{F?|?AuWFA0 zHYHFE6$&q%wOLbDJxqUHH93}_a+|yGI`8=^Xy_`6B}58cb0pOxIqETG;JVRUhLSKz zjR!7)4aalgLN_U_u|s_wZ1TQZ{6C;slNzstGs8c+sBEo#VwH}+#&bHyw!ddOXnLDr zJw5OV4hn5j9X$KWIC~_HR>Za%2LD=vWTCVJX54nt036DlGI-BH$m)+Dr<l~&eKR|Q za7|9qD$cGHZqJ4@EnQ<>4RQEA^-B+f?AO=*=_jS<unt_?1GanTF4-XZ>1-NIlq>1i zt7ONfzaHQFdi8yp&_4_(fhgMbny9?J>#H4yoj_C3H%4bdz~=gz_}&aRERLQllJPp7 z@h9Wb4p&HfJZ5!0$aCs#x`}jl8ObVFo51t=(cf}f#bAJcPsasBYmd;)IvhD8Iw^`2 z+taJ^CGN-W#nh`ekMMvu*(E%&T!3Z)=(`xAsCX2Rdi9ygbSL+#y=fT?a7vh&`BTUu zn-HHj+N%CvGVa?+ineDG?xWuhHiode2i`Mt8@9PNw)AV1P5g&R5VBi1;W?^X+W=@s zx8ndMs(j1bDcaSjUOs`0sD2^2SRzyTro5QV&$G#2AOFLkFxfWnMVl+CbC$bt<S7o@ zZV5AD=^b!3;+^@JE;dtHP*9kDFIF{0A0QseK43Wgv5Mz(5vN$#^>LsfhhC=`bdOSN zI{npU)j;leC|7Ig-N*zBqT2IP{H0ghuvfr-@mKf+)UE&=SJ-8FI-8CQ=>*)JiXip2 zdTlthgh3inS6<`;-^v?IAf$Wf?Jz>AC!q?}rH5V{3(nk3Q&^h4a#Pn37+RbQbh`4` zP1Z{`I=+hXj_1tx1xM$i|JeDGziFRutSMWYO6ZTH>6ErD75cxHtMXLs30?LR2;8*{ zQKu?uDiK(q)=7PIxsSi@crttVA0F&lHv%vH1&05^qL3!VuDAGy&S(6c%EHUUHlhk! zUm5uAsRspxDVD@v;=bm~?qRP|0iMghHBh5UEhis91lOlPv<C`4A7s(hhb9h^-!gOZ zzYHCQ+|BE1@uIo_##$@?)4OO8yxu-s53Gr9Sf=#HJ#QJ=4*4<dN#9YF`2^g06N03= z!DsHyn@a9{7X;|UkKmQ5uXktLmw)!!y3o(qMO=9#l75?Lb=5aTm6y3xWNZa^genCg zx4Lz0M#|-k7hh9nSMgjU^&hXfB)n%2R)l|#+W5=!4@2fLFps5j+iu5%u<7KlxAWKK z^$W=(RDw$DK?fZzQt3bPD)8O}P}paLe=nbB!>kPDa?zyhkYL-wF-amB_#&KD)_u&( z{?=y3>)?MdHJ1eRSO4D?;HM~b;wg{>&AVt*VuFjYO=UE$S$RDn4&za9|1+H;jbgTV zP)KIlIN*NNN$TKIuI>2|x<&oUnKR!JZZUg}T#|<FB<1lKaPDL8v(B81>IHQ~D!bye z2yIFRjme9VT~iv4DG*%e6~JK!Z7hA;DUs*!$6DMw#r`v?q2~VqgI>;YY4S@Y>}_(J zn(C4sB+A_bl389HOFUt{-+XsHLpTy1`TtzLy|etguE`^PE2*CL0#uB1Jtk~NiaRgl zHq)8EiufwzO{y0tR33AC3>bd8d8LaxcVq<IiTKI@l<uH^gPB>c?CZ#z*k%jqm)>FO zu_*vj{onAzWfMW+G<Y@Q$m4F8kfe}s1AVZmDGgVnG~}BOT!u(MjZxORghATULuml0 zS#@iDaf%sVjJ!d16gorxsIJUyKJ#r!bN7$ojnS{mvhb<`oDc*=J?zhwraYc(*TRyw z@=DgcN~fo6bXpf58!#I>tqBB<^DTFI3F&=WV>h9=KwA^!7M;U490Lm7{-W^y)yMPg zX+$lxE_D=5T>bE%O3A8I0%vX&UDSB))UTgB+x_=*;lpsHUUuaWzKK~?>2<f8Kyus# zAg(x%ljg1Nlo|CUOPLaI?Osg~j|<N_y&a%ocRis@(_^-x0E7*gzfq3zAQRd**7=r_ zy@;R-ZdlKEP00hkTIe;Uw~ta7ID{8rc-y4jV6n$|B!_qD3dc$I<CL|*`8+z}JvQb? z9+|a>&biD2NX>~j$ACP}=eGYa1pWZT|G*L*^`((GDF*SlM{3b3mL5}6(}ytYduV*p z&~6R105?Puqo(gZBv*$LJZx9cm9{@p=cGLy*}5DrX}6ksgUMwfBB&9EN$|f+oqZ_a zXW7BOD$Ir<C?t9+ID~H`yvApR?6p}~%yURSEaM?fwynid^0?OL*k5Ritf$k@llRjx zPsN&C)SxoL?-$kO9bs+mc{B-o!H$*O6%<t%uoe(5q_fu~&h0^bz%&qG1d)U<MQTJ@ zhIdXf5nXXPPPlLKh3pqkw;B$<`SMQxLUjsGh7MeUdP+Mcwv=lGSvVf#nd5T#l|04& zHJywcI@YPDP6Q3T%>_crKh;vCdiq;OmcHc51U=RKq5)hCu)!Zyxwt0%1{#?Vlh^Pg zkDsEXYpv*F&DeVKLAiHne#!yAm1F3IuWqN=3wKZB6uPxf0TFa4kXzP59w&zXZrQYf zpGfSq4ByvJZ-_eUPc&`F1O0&kBjVXa=gP876%)imex+#M7$LWlZ3o)=oTi3b`R`R$ zooaWpHUHIQiE%&TDXCAtE;3B!yv*a?-baJGCpoCk&tWG}4f()3GL2I;`d<5$*qlT) zZr4DKXbl5LpEj5dHuzr)SDi%Yo$IlC)T_oFqCJfEfnVE*zafDcHLSV%(nv(ZI~0}& zbE81Jg=B!)77nZyzTdH-*4T(M+M>1ny*#-fsrAE=&Ix#$bhT5f?VnOBa$OGfJ^(%( z25;=Y9PlN#Pe@K+JRXoX)iP4zd4+ja|Kj}tj51Dnh>to%bZ#kjot4k)4zx)1c(Eo& zoE_u6E0Ak&m$w3V-2bO;+>s2!I7kV?eag<JM=q%3Mw)q7kX%Yvmjy4o=QqZ)B*Arj zSxue~=nBn=±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%0A7Uk;j5-V@*}G=qkA=3=yRzR!rNxs+wA<>C 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 YMe@R_S`#7uBes_Kh`jv|LzHaERN43kJ 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≈|Dk}Je+quus?U1z1s__w!g<he@3lkpihAtI z$G8}gZLJMk#GZ)1yEk5@x60FtJ}i}<?X5RCh1V@u5~T?1+GkvJTXb)*_&qc3H(d_^ zCx$f8_@TZ~-rC8Azb{k8KRwgbUSoXq?#o9vf13D1!&!wsW+vK^<%=5^=-%v6YiGAF zf7hP>w9FX~1Ar-lI!^A$o}z(4KreBAn+&>)%iycy82lu?;!QNKAw4AI<*dT#XI-;> z2n|)-7sV8qV3yT&P2O0!4N$|+w#-E?KAKV3xUxo-;Y|pHMk1vmMq)7{{#g35vpR;4 zVYJ~<_i$3>Tbbm<uHb>gVbA|1FBcK^=NKKO%9jKP7W8c8cMRbnMfH!u)NYoe(@{+Q z9n!jZyNDv98tR@)Nx!Ul(%005R+cO0bMSW|5IBgY(jY#Yeo=tH*2!ac<s<fvK-a@* z8~%4$d)Z3_WJG@vF3q9P-Zk*GS<^cVb#c!9p48w-vAbf>O>yyM^m_y#ad!6!c>_tv z^0)<dZOqmuJh2x_(JFaRegdP}bCb0^Qc>tr6|Vc`xRi6%DaM&;()5Q$&-t6?V5jAi z36z9{?1G6!9Y=;C)!iAJs{kdheYX6sNnXTwl>_M}5e5|a0gSaft6f0#>^9{|yHX6( zHO@ij$v}r}Yw0M_5*I+nppc+!SiA}UAd#PU8z5pk_$9W%`x}sCE@v4i2Z+`M=(3I- zwKyg_&wjV97q8e~=%^o5*--^YkU>p^D>>CJ*zAsss+T;P%{o3p0qU1&KYT~FeCY4E z-2w#rsg55nU7v+U&z}54p^e=uxLb4_QC{B<3!6+&kC`wDeu&?HI_lY|uM26vFtMC? zd3WAbVJs%|&Ar-3mrO(6SGyX%Ut~vMyj(b&6(^^YJ`DKE;R0UKjj{^3O4qPY6LY#1 zJ>!G<gTX7J9?0e8i?5n=@`TZYFZA%DH`XM@{`{i(?NBiSUupL1A(h6CiC>Y61r(j% zKB8A3sA{KvK4y4tCb#35>ug?nP>C#@>V)MsBKK`~M8)O1im%F{kS=*Eh1d-O!+L%x zg!||hooAE%{WlNlb7M=(%VqW~2XIlj#mF*ysJGqJ(WSC)j;QAGwS@2fDmFApO$sel zXhx{!NH>`ip@;wIHTS)H&C)~X!=Mc8W=w@&wNej=<~P2tsAsEF23zHX`Y`N&^1NBw zcH~(~gFBFFH$&v<ZZiyT*s478&B|Ue@$&Za63LQ1;H%yZ%<civ?E#r(CMNh3bhWdV z$%o+p>co^AYq0$=LHCB^EnDemWyzO-B$7Vq8b=GNUf3)JX`_3PWt)5YnSQNy&&DnV z?}2%oX9`fB<50#$E~yXG&Q+(5By<PPTc2rdSfiObL0gNL^}fj}E$Hf5w?5sc{t<UO zj`7k9zvx{crpeBovj-xns;{A}w89YdxMqU4Fz<W6MWk9z8QjOs1Ycc&v11txmcvEj z$?30Cwq9CV3I9b6FF|WnbgHE>FzTZbM(wR4VrJh5m#7~JB^qV2MrA6Y%M52&(Q~mG z!1O9|_V}yKycL&RP87>r=ZwI`ye(6eJCq4m^aoCG=q2AmO&q&O!e?*|sgMtLyH`K7 zW>UPqvf8YBJhz@CvEfp3uKZYjL29}E%0sujPsrThfaSkmiNEouhWbIhoJoo{dM9yz zx-+Pa(`v&Bb_IkOJ$%&wroWyrRpjmTRZGyi+H~+k%Q<TAmChOWj<Ov6Tjz{$2Hg;Y zg#z>V?N?E`SHFM$S}MRxc(!w<k=IdR=VJBQ&NqGjji||k@7agLG|Qctg<EMZPQ7{J zZDV%wac+(i@x8GNkFIjGNz(<Z0@gn`+F+@AJ6CR=g1!^Tl-9Lsofp^2KeP0=j^YD* zH_N^ZuYj5LaE;3@`tQP(DRZNGXhid7s$+UPDaMb#$p(3al)6l1Kdm)%aewtnJ7x7e zhCb=DS!P`DgFJrxM7HF5NodBQ#@f6N=SRWZtKAH(SGi6u*BnVR&XC0MQY9BzzGe1X zv%U>jW2=SlN%hW7j%HV{j;MHBck*OvwZ!Xt8XmCN+C8Xt^5PdF+@M2zT{ce)7Q2OZ zHH@Ry=AUD_xF&YS5x=Tzia$5R2CKWQ@IdA+1nip<dorgO%SX7#G-hUIAY%i3=KCW6 z9EK>gVQlTTvlmuk*C(Xcn54Q#+3s92PsTJlLFaI0nJX~XIbyV=q4{Xzr-B3hsVuMG zN+tQr<A9BYP_Rbv&gc#wKN(w-*vC83+!=KLgWAG+1t3XJR0VAT7uwxMc!S+m_QEG| z#{8H3$+qZuw{WfiWoFYObd3C6V#ZQ0_f$#Q&RJhMdsB{)^NICFS@MHXQ=K#O&%qkC zna?iDf(0O+F#nRLXM*h>?tY$6Lkfz23mhRIH4vR%FACISgVics7x^dLS{ul}puJ{$ z7r&EbjoXtOm#~rqnyxnK<c4W?xt4V%%D+vg@&^IlkI1D96+lgPhF#Ia?MI$AE7*w= zIO;ThTupK1d|3ceI5pMO4@$1b<%;($GQ?<OtD=TK{_58~66@By!Tc+Jy}FZKtJGz% z2x2ErkShCH4F2UI5-aiE$CB595ksg##wwb}&|s3Z^s#H?pZGEB%6APQ=``;2Sx$<x zOJgNOPnVZYI0iW%eY<_rQBtJ!!)jfY+t=71i6sp1_W77+)Y#1qyZf`~d)~jXmej8< zdV?RXZs+`eK908Q!LK=w6E#rx-9}~2B6gRY3@8lM>>y<%(Rw`cz3*`oK|0=Jx2j<- zjXJ&ms~J_V+oRcd)Eju1q6`E<p)BsvR$NrPcepe>zRs-e<#nf9kWXyCOFHIsk#0<m z_Sib7J0QegwtsS+KE4oV6E^wHu5rh7Jqe#JQ>gb9&OuD~;cDKmVZkI-zB2-+qePlq z?PJMQ3Z0iw<H1VaWwVminQ~RtIgSsKx&EQ>dt4Cy@Mv3<e1+%*DI!Tl^kkFjx9{q^ zmHD!b{dwY1sCDs+r(~=Q5y>I5<=3WKwgS4otqN+q^J-j5B=Jdipg>(eZ|0m_BSEJ7 z9drb94;o0<;&UOaW#35kUgp!U@Cwe?TUhoaZ+r$_6^kU33Bf+Dk>LvedkcN#M~cWN z0WAE#p<CHU5FWh{)$eqAcb@TBT-RdLzRL{crj<iW$Qrr!WYoX@T?_#wy9Gc4Q%?)% zXJSETauqTs=KnH;lF++g@KJS4kCkE6ZDPrabrPk0r|RtwmDxq_9q&;d-8(;#i&+In znV+G1;a3-no2w09ItdL=_Vu3XT1}JpUui_~_=A3#2O)|4u7ShFRgTCVD}w@e$cdUz zVanZf1&@oBZ;3ZHI>6m|G~*=kfHHdxuK-xNtA^E|vy(>$Lk%w&DK2Rhi#zqUeHaZ^ zD&H=ak)C#UY&+=gzlgQ=fL)8gWCrT@f6k81cK>RtExDF+!!hgEyAV9hZ#z+ZY4k;z zsvtXmgd6ziP8s5+&w^I>5_<zvT$^uUb9P8wtQ=dcW6Im_)&$Lg2_T%py1$c`U>fNk z$boe7<)Qz`Lb0{`J%DCgyq_d*igrV@vA=+=JOh$xXY&b>qfq;kiZQu`kVtO*y|{3? zGDZO%<)&w}dq7*M=mIJAqV*Swf9g<6EcdxLPsD5oyuXvNnc!S&J*;Qk5dYJsEm_Gd zQ8b;=G$#=76d;S^KZlCo$DIQ+%1RS-Oom#Zs4s``leok%fJ^`kmv<NUo4Dmcl=w-` zg}O#6XY+xlpqV(2lNeC6y=|7FL$7UFU8ZwZ)?1lrXcVl@J1fwl7;&$SS|t=aFHtqP zUn2*|+QRx2Ln42^2HHf=oL@)+|M(KxYBQJ)zpsziSTB%@2`alPU8KNjZ78P0_2HDN zdVdOq(Cvu8{6o<QkM&SCygw&&5#Lv0W6*6xU>ZVn#iP$1N7&HUB<SA>0Ce3&z8LVq zch_SWD>N)v6i*I$ryYD$*Qmp-y!Y*|8rip_c*)Au%xhum^scS7_We{0zmI1=I}QK{ zfsPVwfeV5WCAJe(X}chS4K?x5vq(dI+8X?+QVxRiU2nl3Bg0U}U*>fDIV0)s4RI&d zHYXM{k(JJ{EksY-ab=yt?y}8HFWZ?Pt(F20NmqA6Dllm0xB>Wa2pw)C`m@ba<8nJX z6`Un$toC$p>lFUm?!w8Fx2TZgSE9x>31=0G8|-rb*|zx~f|~#J8TRkcrLH#fg#8BV zVO_|y)KOe^kdC|K!OYFQhnuh#@xuD3sw#)5jch-S?hG3aPw)3vTm!|Wd(U`F;*`O# z0#`ey>HSxChkiFr&4w_T;{BtmP@)CuMHaSpBaW9NqdW>39gIiSD7>sE*(Xuveq+}2 znssVoAAP*i9R;YEpC2)>KE?m}lpPx9$dHuEGDI&PMfEw&O4b;VmQoU7#ZY#qn8)oC z8iixB!|ux6<3SD*50>%bb^jskX<51wtURs^3JLQ1y6CE%nbz^+<lt!)>$e31dBWe( zVv@?ZEc(W_ozOVaS3KxKXY$Xg&c{Bf#rI|QJJwaW1zyw>xz!SD-q#vybi)YL%*Fhf zSrwbHje4*Mp7q`ve8vZzZT*%K4SY$L*8?a@v`~OC>IDVXkzR*h=ca?JSd{T5wRa#I zm{V6F3X)#sP$#Xn7S9fej98ls0~yOLd_k9S&1?Ms!`gcWHQBCf!w3RO?;tG-2r5l_ zks=}>BBJyj0g)0zL|Uj(dPhLu5d@^y5Gf(_UQ~LQP!j|M1QMh~2wC6#ti5NwYwy|b z?Dxkv!!YP%a>JFYoY!$4B@ajfOz?KF^YCXasmZzik;D2@AJ{FGrnKueSH!fHq(o23 z1-0vKqJ=+BZOdz7dMUz_8fu=ir#$&E7aF1AcQxb2o`5dOLeuWy)KP+R!%Q_4hP11; zl9P%>&|S2;5ylC>_%Z*|&lM6Ay7?2_OowpPMsUxzD0$DhHj>QM)1j&7vKS&oP@Mc= z64mfmvF0PTONc`zOH53NC~lt_rp}V&R91g}5>8dKVz~|RZ-%<zP9pts2HK|EG)ss4 zSAx7R847F<g(K8kabuU^h+aphabJi4UHX0-TU5X)#*CD`SXi%NTxbhVx!XB$bai9& zSd^*54hk(BpV6izIj;2B-nVs)T0cC#T{y@TU`l`R-rtl8kNLkSw3=2fkhP~Y80vcq z9JWO!J@{WV<~`eLugw&E1?Qf(42W$=2o1hF?VB@+$DS_jmfU!?;PCJxsGu6eM52E@ zj&`d28d|a4QrLZLy@$TphZ3|I?e8h4(VA(+GqXM-vix-#*6d1ql>TmnX$bJEXST<L zOB%sfF-fA~*BN3XE|@b>QB{-!ldK#Deb!N*J-c^3d-=KCSAoQ6)7v^VDim&sH`+g+ zP5`a|g67BCOd6a{enS0O(TYtHiR+H4cSTzH|EV!+0+hWpMspfq7rc!OTEO_l=;DH| zQgQd~82{Io)Xp|q4h7iFYhO~y2W9(lkHLTU@Vh0EHN}&VaY^Z4>Oj|zmCb+n*apeu zo@bQlxy$U;%*wsJJ{9v?^D>pic3IU{rtN5sR(_?Oo}a7wugoj@7BK~79zmg{8D$IK zJsOD%HVdDUZ@BQ8KmE>t1_XcBQ@ELioF(<0fcgEa!GX#jg=$JnenL3AI#_E7kKbj# z$Ou44M+P1gG{09(5vyHzqX{YfkCj#~i!5rZZ)(iZvY%*xCO3)F1L8dTu32Ha&u4T% zGD}BZ^E}Mwb}CzXn!z{LohNVw+{TC1vz>(`p5LbT+j95ZFlnytdHUPlKu{7!Dnza5 zJ5a^8XXZlb%0j4`oA392qkoh=TNodGJj=MFhV;VQAUAXcQ=7g3+XVj_0%r=Rp+pIR zfNj3t#D&n?t<3v$(FX2f6b>J?Sc{~V{QQiM&4BwWn5;xFKHODWiBhz2^+FyiUZmVB zh`@p0K6`ISALU!V=<E81#z7xh;&IxaZtFR#jG0Bw3jCFMU;FKUtRt#_Pz@IqAy(z* z%!)je`LD+V`MjyNwiRM}Y+V;;{uX-<&-pTof-!86Y=`6`j)RH->Teg07g;2;0oJI| zD(fkiFM>?Z-Cjll>rOQUHsna(8kJUl`9V75lgrDaZ+WZ_d(v@MZw+6789h?dr*(NV zSy!8CQtlG=l5h+D5%++EZBkBJ<9K!8>8g)y#^6ebJi+2<IE$0y_UQMIvwcBF8(7Wa zi^fA%R(FaJTKSYG%dPC*;`_!Zm#-&-wln{^GydObWdG;?yJGs4t%N1AbnD``_cj(0 zB}Pm((bE}U09B!v=KJU8l41Ynwf~&V@xP6Y2C%cJwOrkv<xBOofrkzH(|*kNo1>}M zZpFrh?~>w+*7CVYQ@G_U9!!m4!H%tJo@x!p?5v&58k6_?;bi{y7x9u`fMXr7h1$yJ zZD6Ha0J|gUYA<4_afe$fciEr6bQ$Xn9rHXo{f{U958qKYJBff};@A~Z);)qEzcrY( zCmIjEcT?=_{;%r$57@JW)aS}PCXJ<|8nWC)o8Z%5@|T>|xSjv=j~OM>p&*~!v#^bY z>r%f8Jl3Dd`<IUiA9a)LY>E4chmcUuE_Zd75B`OA)-|6p5Bw8TGXAQLEmG2s2ysOY z5ot^buy|;-z>~&0I}%Efu)~$g!x*hER`mQ7-_HMUBUWiUTLvlI;?2%0kjU`xU^J0D zy_J}~dT4Bgm!=?#w|RrYk|3WPht3v2xqG{XHy+k^_`6+weqp&?{9o_#8EDyA@7SV` zGCv3n6KyyJG2!yk<gQmPR@#9vA(lt~?L6mR&xR$17_12eSl1Kot2;Di6fX*>9ck)0 zg4JEmh6EoBO-*Mzxb){q5@2y{Dz5k!6KDqoyEeOvc>~Kv9t9aK9Ep2Z!Xm9Ip6Uf& z?2sWwYV%8LaLi#v7mS_#XkIIB(L~Wk4+m0~Aag(epXb?s`3zCwB=6OI9+KNYo^0^$ z<3$q0qB-y2`!#0yG0BLwaMiWM*XmZ9s{$+hq~5+|^@&m<as=5JSAL#(rRX!}_XnS= z+ia{jp(=x(u$x4cD2nvpDwuaW0cpF<v$6Sjnx8h_QH3L!H+k@&W~wiYhp1c?syOSY z);@_GyWI_OxqSKP#YN1PJ*>Brn^bz%N4Y@?#ygnG;f0jhl^RjZbu>~2uwm!3=H9YR z!&PISz83JnIk?+)uUQ=9-12&*TX9?rcI6vWNPAFrN!d0<ak@i+gzC1;lTH&55O`4I z+?3aIS={04m8(#5`VV*F1ESC-yw+sPS@MNScsBH&n&L|1{I)cNFLUuDi-GQ3yB$Hi z8Sfyw7KU0y2H2<D)jFubR<qqXR1(+ev>e-wO(fz%bk-2@L1R&5?MlPKpV?fVvNgMS zgS<dH5?jmXM?PbYH)Y8NHDnD^5^jXoc4kkhlNBB{f^M7h?!)j*g@2-ZZozcf8;jAp zvu!&VLjieaQzEJtw@&;oC6=e^ioNzqwc6ki6+W*8=vT~T9c=`yI7H>P!pbt(MmIpL zUd%8W-pl=zzr1S%0y)k)X@T?>Z@WEeah7|1)h0gW#4et=61%&$5}mC>G%ibUojY8x zVRPI%IZhS-@xtPpJe7e2V6oKD0$5nS7(IE^)>N19q%nCzAokuBb_ZP+A)6rK)wv8Z z&kWgQ4MZ}UvLe1H$yIrpZi11s#maC8shy8WpIU-@825z%|47ko6=7wl+*(WUtK-v` zQu__EQb8>3Rn_NtZ8p`U{9g5HN6`;ne$0|jGy7{Y?!|?#ePl)Y<#TH2$wq3>AR&zt zQd9HY?d&ZI99(X{xqIFD4HA|9K}9vcgGHnqaUz#(q=z9w?X?XoW+Ix=+GdFxt(qnV zMDhCKt#DR$lLGtDT;^2_I^H1gl|uB(s7+1Uz#Vu*e<us&IvfF{$u$GDKWog<iSqG@ z{6evUj<Wf)jBPbgzGwabh*_x}NHgqA&=6RA(57}?ghpj<bHn3=4i*{kGMobeVRD3| zHj3hSn;+=-&HH(~YNu<LX9EC!c60t{D=OCZB;GeaQJ8zY0nEl%ebltELOW6{KgfA2 zjbT+XFL&hWEE>!QXT--uyz~Qcb##`Hq65%rmv==X`*fZ*`y)EEZ%sB6#XHx)@!6Ot zjXQtOCal=qm8FHg6pcyD{d?Q@PByX4BVeQENo|k)n9mLnmD6U3WT_1-(r!FZf%w-1 z{T2|kD~CtY+s{gv{OaVk|JhjZ>MIn&l{`2X9Ffvx^>Iu1I?*aTOmeG(jp$#av?OVh zl-=_OIeXJohs?wqF?Cd-p@M{`{ayp?`$HuB@WETYq4MAEG_5Jm7JU31oAH93CS_Up zFGYBkEm68`aD^5Ac&_h+u*F~UG3)i!MzmCvr75>{&tvU?6(u`7PZfTQ8ot(j!i@iL zq^V#tJv$J587ZQt_u^@W>y<I__HWIyaS0W6Bom7n#Za%4M@>`Jn=KZYczPQf_P^*j z^p|sM?Z>)Xk-`1>j19YPRz&?mY;<vQ$d^^LiNwpq{2K?g3mp)JRhCw~3HKmsd50p> z(#G#qrj+Opkc=DSRV=8&7hIV0LiK`~e!9k`in%A;q`p63wfLOfQHKy?OB8Ni8x#Bv z(GqQIs~eY%Lbgf6UWPw;6d_}J6%py%Z-8ru^ksn>=rFiDC@%0=u}9<0pj32wxtsL* zx=`j-@3YbGTMll(P~k@&AK-&QAjhq8!`nKrvM!gDaphHjETrB?l3a6uS<L_n2opZO z=W`7=@1gr7(Qb(!=?2&T%pkC$gZyJr4G;)|fevcLj8L<n|JD$j^vmaaCe81^Rawmt zJeb*|W#p~+@-giPo$Y49h&>hqoFi;C_s(G0_3?D8R^s~JM~uQFXLO2D158Fv^cJ<P zMjq|!6&@vo5FFI!$T+pz77*ws+#Ccg@$enG?Q&twJ`n(5jI|%0jL6JFB>7fbI-91& z!R_9!YO6Y@^(#Byai<U&<{aAz(FHJ^K>4l`#^Ow4(ii-f+tz@mG`$J&Hi0`gxvHw4 zH}3w07o898SAsO}eWdp84;<@*$i@oOj!O`gGu8}`{;H-*+wOf*A7%RBcesw;MSdhP z22WQ{-;=^h8tYLXK6UZr=!#zX8vdMG&)KK_@|S);ZN3`x*yRwZX{At!zJQ%_kJ<uG zL)!X3^M2sJ_-a=^bEo40aa2l#*5#ks=l#>!1D(~nuwz7nm}iIYM9da{Ikt`Rac0+~ zH%xtseABx^Z!KXbpWSZZ1D3uKb0(O`D}Fotc31F5xjmc$KnW{UULmf9V54GB|I7m; zk%fMNvh0ssA{MZ$1I0YSDGk3h)(byR$--JqpF3OXY-Yu#J{@3Efjlk<WK}yEMfSiA z{Y3wq)bufIf!z5V!O-XXOk4X~>u!J<W<t?e*St;4c3$WDaIqgY-kK8LR)njEx8n7~ zJ0zyto`x2DcYLrhXfkyz;>5d(d#Ek7)}`Ns5CJ4n0N_raq&AnQWFQPzwHbb=G)~lq z<Ac2Q4I0(tO0r@H(WGBUX0vZDOr&F6G0qKscqXl^8gS7pX;LG#V=b=-t#t)HXoV1l zr*!4rYDzvapUm)r?x$V5(u{!?^E~ZxYF7`MW$iM{PXJ%h{v|<AiSl+_x3`KVOXH!I zrykX9KEWk+c~0T8100;&!<S)`&ETj!St1ifjwta)!^w|(08`Q<5%V<sddgT-BQE~% z%Wux#<zXy4VWM+wu(cd%NS{?eV>U~{@g2DBGFI-^hECQ^HtimD0IHUD>pRI8ChG!? z0jqN5j53d}fjm$oO_mcc(|u9VlbFefYIs!-Sb(gATQcgahh$qe!zAVHZTs2d#?`+4 zq8YbpoO=i95Ss-Kha?5KNUvSiz1q5|**!z)H07oif2@B&s`ZTv?UJ7+54HK`A+|~H z^KQ1bO-j_!P3~=AX_TtZ{?L2gKx9o@N&hc(#Eyn8PMgOwAdB-m>GZ_-o?$p+s1}W2 z*jo(s*q=Gjs<ewKaXlpounaxE54G$P@Tfsrx#e=c5@dDE&vnYbOxo;LR>qoxc@INn zO`@o62N5s^Rh@;+QH1T{dA{h}iUTofxm7b0DX>^<SaXj`<z)mduaL{*@b*Fr`TO5$ zh;n>PO<zu~d_nONM$7P!{p7Iggp#@VqbrK-;*$b@rOa3Nez9?O=8HvOHRTMF(Fo2h zFwm*TwSss&<vd!j-+te0Y>?&|e{g94<n^bFGM>E>7s8D@2buld6N43`?L3V!NmG;F zeSWVxP0stTI==V9%QN*v?T5t28LRC^0HhA9=#|NGxjtbdEp0b;1IQ&4wSRTT>JBQz zbXIYHe)9qGC4}{O<e>jTM%IaUD-Yd0O)bZ~qwy6|z<}kcqHR`8n@`1dP|V&BcQ5JP zurc3ef$$4_a>P6z$09v=z%Hl;Ue*=Hm*Pk`iH8+=?7K9cDK<9N>Bm1^NbGMV1*bcv zWycco!#8HgM%51Bei%JgyeUsL<4xC}dwucR4_Di`s{maU-XiOGx3mI=(`Nl<ZKEet z=wLtkW-a)Gd=Y{BEph4zajX|czp$e$tl8d{X*At<Q!B?Kk;{J<bf&bM$KBA5o^)1E zMg>%k-Qc)V;}XU2gZ2HTRDErRsx>3cdr;xvTv@x0$rp|BhCWa(7O`uF7b0shWiPGr z!bVzvfz)ursR6T*ofN%s)IXfL13iYo3wxrj)ul%7?^qx_wb>nkIJm|sMYz_~t6?R9 zFT{6^@6>-_YW;OcR!EYMH3s0${ZfL^IYC3c>h*)mo$`mRGD1{lLyW5c>U?rk1u2iR zX*`~%EusMPEPb*{SQi16-i)v&s*%Vcz|H%zW6^n<;y&gdRD<YJ@}_{o58wUAq_}EQ z&O=iB>N$-uQS-bbr{>BdVnVQ`+)E+R7qR(cN}vHDmjR$@RReG#IjkXB>YdSPt1<;n zn#iW-x{K=i0^D02?nGFO6pXA{v+Qwva-+WA2e4inF7_2M_dd1C3>(q9PBckY95J#a zf@1f)qH^aOd8(jLK`-T-UnTjxD1{geQI|Ds-u{3}&*j_glZSs~_Cy=&rl8UjnX2o) zw8g%!O}IMb(ZsO`#fl@KI*vxL+1gZOuRWgm6cao^XI)$?BDnUE-689ZhD#ZIuE(;4 z^6`=XLB((OFT*mOfq?uh5QpF)W#Jpq6-Kzw2kye`pWiPa7he@)R8o?A?%reV%3db& z#<T(Vy?QXoq<;>JTx57o8JpSN{b7`dxa2-5U)rd}1wR<W^G4!lc3lo6tZpwZq^C1Q zl%M)4&3!3ZbG5wn;40|h0W5s^5-}!{ELZVU`08wtkzR;Ly$yGu$i;d!Eob(xqT#GT zn_6rRq%}M^ylh%F#M`^<EA6k$t_2SQ{j-7xQr`QM7z!t;vyXADJ-91Ru{r+CY^sQt zXKsrvcJZG7(bFS3%+c5-_`tE@=4Vn&psSo%H;2bKU;6m%tC{2-dYn~4o6cGiYhMdp zMMw)czTpn4b}SgmpsMkig*{r{U$t_D>8O(f(K7~E{U0s8hCbF*zqHxd?(UL&f0^r8 z@SM0aS+7A;0pA=@-%nO_S-T?rY(hz;A^wNQxKi&`52`B+oFs#nGpOj6&ICUsWPrjr zO*WBhpYRenP>S7k{(VKj-@Jl0m^EmUB!Slq+v%sM5e8$A^k;JJHzz%7g-@zHcP6uS z>R7aaQ1A$RN}PtSOfJg7J&b2^&-gvaDPB}_D!In-eh5phrsqmbhy@Y|H{K>O_MN62 zBiqmO7Ziv7h+1!~`MZREqDJ^{svedj+|Lnxjx2=s#%A0|*!HN6tO!~esP8aoSNYVW ze-GGUkU^t4Fr||BPwX8R!4D&tz10g_&)&sX{kdRHHgc-iR;FeKSwlr$&#N$cr7LSv zdC||d`QXJ1))0}i$9bYK&LO<<MSC%oOsmF;L6PXa<nZ<Yu!5%+f7*`Wj92yLh+TGj zJF!Q@%6n9CPqXNgXMTWK+l=r?#Hv0Dzq8K;PO@BPY%V(3MN+d~w|<)<(Q$*Y20t4B zF-Vagb*MtMeqxQ(_2}~1Se|_T^ZopeRVYEB-wL>!x)$%KmxD1z8+wxEU9XdeT7^mF zS{m@tv#w6ojp@Vp3A=SBLJg)5<x_bjHbob>0a|HqhdgGY5CDGHa!t&pwF5+Ty<w2! z;F2$kY?r!I5`SlJwLQfx1zWY!8x#FDlH9pi#b+mZokNY9T<j$x+RX3>W-_3-iew!K zN`uHbE(jp+JY|!Txx4tV1tk<qmQ*k&LGU0t@b(;qjT8gHjqp>}Yo3QwE<QIDm{_jU z5X_TqAq{>4+P$Q7eIgo(Zmaw1^D?gfvHlwT1{H^v+#&KT*KI&P#J7Xs8WUffViGF5 zTOmD?$k8VKPRpV41KGzE9&AfAiPloXl4R|OG^B{f(}&0H@rKCBn^#2<AX(T_{%G~q zvdA1ogse|wNiEz__?ag_AcxQ5ArFdFc+J+|_Nsrjpf&OAuAkbR1eiO(Nw{O)K4b6x zxCeh|utD`GU&cibR2Fo~(6rA9ck8olKl|#mX163VMdR9z{3xY!B(s`+YQ;%70a!=% zq@+r+Cb8sn#Q}-JRx7C%Sm!-B`@y0>;o6UAS&2Q`7a(m6*%G;zc1t75Lz9<zFpY^1 zo8P&9yU$8Uj<g76v>|G44tBDU?t!_tnM*vduO0PrAa~cl>-Dl<`f`pt{Inx{i;x9u zv&`@SQ=$}hBcsOd+i(_7?R{rome;LRhupj94Y086(FzNR*Mcbi7SA}M70kD`;Pu(= zD`#fvlk^T{82+e=-+3ns%pmO-s9{zCSb7<k))abKGCK10fS!RRyjFU(j*O0jW|hXc zNOWU;TGwXxV0&KK=C>Pe8}PqOea~K}q_)<KGMtuPZ>dY;la;8?7~p|hFqSp3RCoTR z^aD{p+Kkuchuc|BlXdX|Lvcmz*#p<@g5k5bD<ids_=Z9TQNq)m^yo2mNS-EfHXjL( z-aa1EY3FGqYPQz}zWG3BU+ihJBqZk`+>B%8TmGtX3}V}tDi!-n#8{n%BZ%%I$4c%~ z5@;>ds_z)Pk&2JSf!W+uUQBKk@Yw`D<6|XV<{k_2CgoJZ4f?PeL62T{<dlBp9&P+` zq0hATzV1=CMz9qUq8^*lgTa<WCS0|<DdXh*<>fV3(Zd?no(^H+UI}gl5O$i9VnSg7 zeo(H1o^0bhQK?TE8`?o@8amaaHGR@NE}s@82)4KJ%v^ELMEp8aN)60<dse8up0(q6 z=E3#OPLC^#W3lC`nPP!%Gvzmw>iHSft^WT8=KWv)X%$Tw>pU<G14Jg@Um|{f-R|hb z^mU>QVt5~&|8Nxk>=P<-nDpH+^7NoH_fA(jfKGte+5!r89B<G0Zuzz@&Ud>W`_e6a zIL^-#9}_^Rml5h8rNOXw2KW>ClQybcO21!E%sSD#lIJY)jU&ElU~m`P(6ET;1$(w7 z0;!i8e<vY+a49n^51VmRY&5q02bE!(gUn?PBk@FyPhwOlxqL1_2pO3XH^$<=EHU?E zs;1_Ml?|04To4efmg!L4nyS!6L-UEdcMA~eMt95v0`!8&f2QGrBAW>NgDY|BT7}CN zqbRAMs85JLP~k1U-P6GQ6798O1mRtX8Og1{<4@YbEP0#vntCrogPS)wW!;n<M8w4S zAtD^b8b8lUjr{m43i_y0Tw17yUO*vlpj{FdLryojjQB1x1;m?{cq1BWFeo^zD>FMk z2KJ)v0EXu^z4z&JWHddhLo$oBUjl6ZA>y5FFn&^ug%OU)zj2QB<-}s9-&Ln;rtnRa z=OHWoP78nu%L4r~Qo4El6k0%<2Wz9ZSjDl*977xX^P8S`XWe3jHd*5LeILPWa&;ND zd2BwbH_a0$hR}TZeYVS4KRnF_m5_-OeHXreOncHq9(;Jb5^d`iqd0cSRw6=_v1r)V zJfv2>@s)k%k8}*c*@}`9(3#e+<$Ar9@AhuVKxEG{_NLUO(-$57KyhQxvwvATspAT~ z@OaF`G9LD8%k?+3hI{@lgXV$yX7bS_yw!oow8E<aDzV=Q%8V+6WLrBoLik);E_^kf z6h+iYvf{I%_ww<m-cVsyHi+#y9(>;Ny!|$2zQ7<cOW58cIpzR~N~#1ZKt76~hx*(I zZoW9pAYSLJ!VToBvh`;g1bPWogz<)Gv=c^<?U>l-GnUtRzOb*yBz1=$fr(`ykVb_N zUy>&>(EC|hNuN=Gm$|x1?K1=Kh4ug*El$F2N}uHABVz-z*^noVX=5+2i9IGF*KZ|% zsjN&$zbYgdNwV?gjYha@$6~cAcVJqzw;bm`uv{F<43X^+JHNG(^utiwb1cR)IV#Jf zW$gSkuYIx&Sm~La+PfE6quq$Y6-7S-P6P5ij<v5Fed~l%6EOuf!Tsvj`|=x9-YR}q zS~9V3`pg>Y3(FRP7SX31d6$6+NGRR$it#y8!{PW(5r#MDzT}0}@R)1QRzZ%e>jrT( zyZhP@ZJHb#++X79sxAW2-SggCW?_@Xh#nn6XDSdGc@can=(p!L67uM3h$_+X0f>0B z6-auMwa5G#)ggg!A)r5Q|J3k}&D&9Q92Ee$2^k=jTQ$u^gm8AErzkRHoBEDC$>5wM zWAV7>&sxV77gL7AeD~?>yZz2=NZ;&iin2uu@2lu{M;pwa-;#|S!)x<;hDp{ES(B8` zq|F{oJ6@nIXuK;z;f#)}WPLMhqTLSwaO!QmbNre40@veL7P+N0-XtD;Vp)nQ@eiXy zM+{`gB!oOIzhA#~TBV%gEKp?K-+Wnk>{@D7*7--2D`6Ckhee-$j4GS-vJDm&J%7%G zI5!~HoZ$6ak?ui*k!ytW98V5MM`Nx=5xs=5r!dj;W85n%?I`%*po5wHG#NtZ+gTP2 z<sF(C%j7?nOi_{7IUfaL@lNC8e`{kUEan=tqg7h+qxPORwxP3C(jIh)>3viIm)EG^ z{R(vmj(|@<)}W(EJG%X|W&D+Ow4D7Fs-BR~G^3C#QdP12&(1nj<jZ{#zdS4+YnatS z#{uN!N=_o&9biTsq${YeZspiVS+{$}Gd`I7#Way88BO}?<Sp?F=;&@*hKows-t#yy zE8kiFL&f<A-@X7Q^5no)AxnW?g`q0HOkSl+x;i}MkUK)r6D-qxio?DD`k)2QA(hNI z75B0_Wop2b_y`pdpnMFXZIks2xTOo@`5>6~V3VQ9%TT;2f8Oh|7ZM;!>t0D7vzy6- z*dN`f{s$G=YRfT$X!WRRR*RpMV^XVoeP$qE{(eN2^5k8RS^sNr{o{70a<bS2(y1xY z!Q<!b2|EXke)mH8315vYPWr>_k!<oYPufk$&RMLB_cl;LJtgmypJ&Jxz@nab08I;B z!{)r@Z8}_$kEk;1CV;BH9f#yMoFpnONOk16IA_v%pV+><&p?Ses0ai8gs--wuYjIZ zRr^pf{^S+`K|O+J<qEk+T#f+*$qrK`llwkyv|01x0{(8;FnEpzl)RnQvm|4v?Y__J z$+oS6Ey>J(mMM$yeVT2Ul6Bz9ZIvjzRJqx;uw%y>-^qiNb&F?=Lpv!#L}{gRHhzS; z{4RsbZ!n^;V*{qx5y1%|j%zK-O!8V|Tc#lfq7;4@E`M0H5rEjo#ZW$gq%(CD!~oy# zdu6*~Z{mu#3wH8mp81#~ZXL0vMc({fZ4!>niUn?+LL^Lg&~mMKt4C3>ye>jkUWS;P z9O`|vWuf@rjx{Ts0x6{*n;-uxM0d?NY{-04iT90;JM`V9&PZILXUwWn!Wc0E&w`>o z8Yn3n`09-LT~}{%^=h8^g@HS)57Up~wGDGh`NG@6V(9RlK5Z=O;*cL-K>W3dyP7Q& z3zyY<p$Yi1KBS7CK!^hDb@UAY2DcF0+@}RjFvnd-fmPI>JF>ChW5z~cd+<Npk6StL z?qurR$rw9O9K-&m+&5uCeD8$<g5FY;0jcpW$!1OPBcd;FA2`#{ufR;J<28VnKrRP} zN6Mr~;H63DC*fc!goc$YK81N3LF)%%btI|usYi{bhF0`H#|r((a|WKY7X~gz6+@y( zC<Jorn8J@>))(){vWXXEeCT5Mr2povUl)1^fCsF?nb``wWd}D>2~W5``Ace`gxyA3 z7K<DD^Lq8!K;F?@*!1MLeCky5)D08Ql*1ize^5ZLYGDj+EUG91ke8wt4i7ThijKzt znfX&EU}C`$Kuqygo&qs6|80kGM|((;h+Q||1D)>F?^KnNu~VC*417MV5psDuNI1$Z z;KfwGt8m^4N1&d(O6!B$4-UBvj#Ys7GLSuw{G0hFT9ei7Z%I*_ZgWF<UaI$KNeyKg zM+A)uefbfrk#vnLnREUD&6p%X;n0pbEzUvtGBzHVoD{fpkIm%|RD~!`O9O)}fPcxK z)Mq)l#OKH^8MREcn_pfzQsco!nSHw0Sn@)8eL}D9p@eDPi?EGQcompa7AcEx|68u= z+!DSz;6)Q#%!)}Sks(uBlJJ<j1i(O_F`v6EzjQcy3HfHop6B9Anw9K>&hTvdzD@?x zYr9}(ZGC>dz5)E?oMn6J3yl7+kf!fJW(en%KkRKfz#suvsR={yy(uxhRDLz8=g)NL zn^5Um)Qclff&~5@+GV|)yZ2t`WsLT!<n%wNp7-4+$(C_#&+#&?IQ&37JXZfRbo^Ay z3b1{%)f;KBjSK^ylRqLJo+`%^R{mCuM;8FkNJu%SR<BwG*m;*hyK-yHh{tMEFROV? zcp1Mbk`e*BMVR?YxHMjt|EK!LJTYQtZ1qvQ@~M$gPB5%qWPpo_gP#Xz9i_~de$D9z zv-|b6G__8ll-Oy}KS(2EnUfrUsA#6c{Cv8K5xo{<{cgdn<IdAt4E-eC!lBBLhoo9+ zNK0d?JVg3hazEZ-d(t@i&O{Zk2fB9%Od$PSaAlc+{KpTD7+XI)svCLL32)77N7$}v zF|q^s^n>_KQHmC@BtB-)|EjAhVC5q{CPmIvD_P|hdLadFm3srZrIdyaiJR4wX<OR< z0$C_->6Rh-vRUdCk(bv_euVj@oS6WrDu8R4LvfOTWqoU=!@cDnI)dL^+25yUKJLs7 z6?N1((}!SJVifn8m$%e&M{~-wir;xEbg^Z`wXVM%)U{991r^u>3J+G(6$-}+8-zC~ zWAV1__eFH8)UU^I_MT!&SjJXaKR;art}2CPJ7^@Mv82Sh-$T)7xZGx#s%G3|B;WHl zIGotfS?Ax%&s0C}=~=X$VoDYxEM-;^K#yC2_Gpc65u;rS+P2$U@YO(qSk5$FlhVGk z(01LmWNZ1#lyt+Ti~OctNGRV$Cq6Hsz^|i$KthNXdR(SWB9t}3RD8nz)?(m?t|6*2 z(bQ<sYyh0)g2T*6lI5hJlkSdd(=xsZyN@Ns$M?m4a|0!w&%wDK>}x1$8w@&HVO${< zSx)*k)*7{|NwsCH^f|qe6>!U44CWu;7n=;578VX)v6()qE!x^wTJPV{AE54eQoEt3 zvnZUqV`LXEWOZC#`<cifg$->?dolItBh8if=NnYSJl1tX{MiG=6s%ddXb(XT>JtFH zJ-ycWqyYEJp0(`ftqx3C`^v60bf6@-L}?(JDS)T??F#)nl`2-prK$-H2^@;WLrZn0 zEPC(6jA(9I8(O-3>LL}#6csLVXhA>pllB$pf<#PjJ_qpeLd@RlmfL%RUp8_GURk?7 zYBd+mx@HMm5<5rv)(cd*^!{RDJu|gxv5NYc<#=r_Oc6fRYm13L%9Rm#lBMpetWUed zi0I^WyTYA?GZwe$^pvcSMnleD2njqo*h9$-yJi~jv2Q3oUD4D8YW)A7PPyCXrI!F= z5eWbGopt~#B_$c%K&_24@c4c;g=7HmR41M6SAGGv6){~sfbR_C-mC4*K>(+i=S%vd zL*3cOIe~smyyFms)?UddSJTu)%CqUt`d<}3MA0>-%t_JW>`Jaw7M-C*bI?V*K1Zc- zKQ#@*H3YlOP7w4kGfVk+<%M424L&hN>HRUZ?%5p!?qoDkyI+NO%HACbzvs!zH@wB3 zk!O0BilBpUNx4jV1fRoY#mXFgCs&PK;cdIqd|O{%+JJn4n_1^fjuam}MrRLjKE8QU z1U`Nrj(isR^)ea2gb)K-qC}P~BJab`<BFxTPFY5I9xwa*UO^?Lo*A}Nng-hg^;^q5 zTT*sSR<HQAvu*K;e9eH4Oxn95Cc{F?K$OZ;uYa*-{<j}cAHz7{CielW#QX#ahtEc( z5w;@o4)4lkwf#ie7kVA9OoYg}A1{NZq<u+381=5dWI_$M5&UI%lZ!x}ZI<`aj;$Vg z<_DzKZC#9UtNnp0*>gD`7s~p0+;u|Ax9U!)`19v!v#MPNmVD0)LgH~`Z33bfYtnZI z0Pl56J*pr-dWDiI@5;eM4i26jdS!fvr*}IF5|yTT)i+Y10e)0{W}hWRSnqz*8C)|e zCMoo0Kh6j(-NGtmv?mcnwz(3WpXsygJ4z-4E4Uljb3C-!_Q`rIA4-v^bS8i03ab9L zgrTny6D?K{JnXW&)(va@&Jx=dzQ@jiR-3>TzOFZw#1D%mU;6}iEemCQh_25J39KvJ zFw|c5NkgckV5_nW-E>7vK`i;}+fud!KAqoR?{qi^{kFvlCzZJ?Uv?>)?{#x;tA0|$ zWs$RE7rbK#g*{8gV_k2GnU=fyY3k6I*MJ|8AgjB=6vid(-s7hZb{~6w@E({{(uv99 zY+JITe5Fn7FtbY1w<dQ?8+8N~M)>>_sZECRKBgNMlgxA`j*M~*j3%MdvNbl@9)*dL zYA$KUuG<J^4S`DV;_@;n?3+<e`iDj84q(%Dzez;_lFouc^D>-hlRrS2kslfBRGsdY zM~q)EwO{D>gGsmdLBu#J4D_!s6+erxPm1Z;r}a2_vS>^4|N8uG+m{IHA%URE+N+=* zOq(HY1k^VxG6on$qjqO7m5*{7G3A;%rxsvl5|FmSpB;E84FI0_R~OT7NQ=Jx-uirv zSiQnQRwJCm9Zgh_(v}^b4Dx0%qx&MeSu4!>{-mIkU^)ces6*zv;4NFF29<7q#^~X+ z3qP;Ki8N>!;gAA-$3`Bgt;RWmC`|8zLT$VG5&f1qS#vd?ne_U=ZiM$iBf2eBS+gg6 zlKXJcP_+z>`g^{3>UW4v?8**<z1P9HVTrd5HqE8Ou8?j`Ah8R*{Pr*}AI@qj`Fx~5 zcM=}P_%rWDV>~m$xUu6wPRI+3KSeMLuTST<w3*>XI)twLGkT-Oy1-G_R9;z$v*Fh! zc+bxGw#z`*!(LB2w!zNmPoYDcSY^PC!!IIj>A*p-%XwTvU`|ePg}S(B>vda0@s~RN z*Cv5J)s+wd!hURsNzryfnYE6f%4>&h29ZA~Miv^-qu-7he`mZjST?>Jq-}f1p<48$ zGG3MH!Z^ck?F1|=;t0h`>e)2?{JCZJ5PHjG#aP&pdg4xh#L-6nnFh&mu6Kp$&@ed% z2B})Y#(9;n(`Mcs9)3G!*3Gpa8L-Sbdjw-!f<t<xi<Z7Gp^<$ks-#kwqgJluR8>0Q z7Kpk;N-(EP&K@!{4lPo-W@=>8l<wQ2>BHOPU{$)6cJ8*mDug$+V@wQ*pL}V!Sz|*k z;9zVkIlC@;fbaj!^$!E4`rv!tbVPS-{V9SI$Oh#J<l)c*-%^L@S=F8agK;xJh=%0t z%{<U4@Mvsg`|^5=8cJ6W1){1Rj#;LdqY0FJo&te=qo`PV%cGIkvp~FwqO?N4u;`SA z9fCP&DT<gp&L^0DAzpd(uI5*iB<W-g%nDpc@>#qTq55~48g}(cT2k4&;+Wp~;X86B z{q9IR_DC+tYzwp+`qWwfCEv)Rs^nGJ6fRjVED&kql=`qm_1k9+Hoe!D07aSCDVTW) zaKGoU1`o$VuZzMg?)gU?a!+|;T{COTOq?pQy#a3WyJ=V6%YQ!M9^UF?(qJ#0U&LYo zmaVl6@5_P$7W*KMd2J+YE1M;wWD7KJ8<r2H%MI5WF4t%iF5(`Q=t0rw%74qdGDXq< z&7*wJnR#bDz5cMAq6XY0K}6Vj#1D$a*AQ_M6vu3Z%Zi36NwZ)#@Q@qDS%I&GYNu;} zcHigu1syjiH@aA^`{I925Opeg9WyK5DzX$otG1$}s2s>h&pyy!Ja{SDcKR7G$e7Ec zjNaCTtmP*tAJ-Z%vF$jTdjknSmA|QIgI-_=zk7m~ivbVK0_;%e)xPu^mjKW%x2Sd! z)ICT!=hN1fYvK2W?>40mqA&H_km#Td{0CL|euzXB`3X_4BL|mX2gx@7w74yO39Ok@ zL0=Pw-Ug`8Kv01I@%myw&}=HyFOdJ2%^ySRQ<y1>Hvi<fucmA-Ht73Lf1YFIc%w_7 z?pCEQ*M{g2HhYAx&1g5EQLNt`!LOJm4TfAwLlOMHWohOYfNc!zmH?H40zJlrdvT^W zTrS0HPn<DqiIXI7{=~f;q;ApHt1ZjSnxtoqYcHpGaErcISsjnI<Eh_J;hTXTgk*1? zcuV-E!{n#d=C=>^6nL!e2Gf}`8<xPed$Erb{E9uWdd2*H-<`av%Q(IGpnuluG$D!q z>k(px2T{T8`cyW~tS6vevJV4ac)w508n1iz;B*!po#0a94tVuuOR;-oR+hNfS<hU2 zenP`HhO>`K>E5TclT>Uma#;FeQ`+9tlv?&7#dMF4(;@n8fk&9|)a;<{)NZvj*AKmm zPIRG<)w3s1%mgcPZdRY{8SMh%XKPSE-~J!fm1ywMx6MENJ6fs`N8$0dn-D+z$c3XJ z&OkvAuUh(rYs}G`KN0Hr1D!0sAWpcx9dQ13%bE^YD{i?ZXuHak@f~(6!FoDb0N43{ zP|=n}59D}getcIP5L^h_dPFZnDbtv4k?qaD>>fY_dt`H0TfJk_y*bnX-t&@x;T)iW z1GPj2Bf?mpkeLBd4{u|GENM9Qa`Imse$GK{4$?!3pO?4!;l_AE)aySJjtjHqJSz0$ z;#F6!-G7~Uc!F}6^W7D|qk4AQMNOuk<=rfJ&_`4T;2~Frq5MHm?yG!eApV4`Hi09c z`jDbe8<M*MEnCp-^<z*mL=WRtjrh$@PgWtg55O_3{-trJ;`$MG`{^U+<eTzb1~<lZ zb{sbQ9b~lQwdt;-2}#quCp^1c@$Z_hEz1of96dXth~Qo#S<_guPdcD*$Nw~7{zZLT zL$)%9R51Jwgz?z8by6k_u$+ULX419g9RxtGJQl)Bf>cqk@et_(QWzEz%4vkIjdqIT zxQOL1-|DzPDE&}bQ&#qqKeXdhnFwC>jW=mZ!-#Ow0~m_~etC}L)%!5+dvUI2O>f6R zwq7X0S~s>m37HFE{fC2S^jJE_JyG_}DX*J$xVZ?dz=KX4|74@hk1nmzA}6hkZpw5R z>x_ok>K*QJ>E-RU$F00{Sh-B!@87%+N4&Pc{2Cx{H_q*VgDsU-gB*`w$Sp&GAW&x8 z+_Bos;h8a`)udNVQH*KxG`}^pST%KO$kE#|q9DX(Qd;&XS7AV<ssu=9${4<lo|fhE zxm))+F5?RpJ{XiRkk2gzYk(kCaGSY6*LhDl`a;>YG*w2Xz%;`XbC!0`lO9ksfpiB~ zoF_cPV50m<407J-mzaQl4|?QnZ`HHVOko0O@g0iE8=9=U(ptIIu{OvhyGk|tUtS7h z6#yAoo0oitF83DPbdADc>^hwQk(O8fSihFke}SQ6qlz+?ccG175G5lv`$c`ZLIvyf zMs5CQGXMjtAE`@jq|B#uQ3Qx8y{%`tFr)bGRZpMZjlkr{(l4Vdv)qSTF-0CNEP0vg z(n;+}*&O$8U)8&K#?U(#CImNfn7-aQqbO;Jy6#Z-?SlUMAmvGwFs0AS!V{x!e0580 znFR;e1?1S+UmjvrYk0d?E**kc;QRJOCfm?Ab}=z$>K7v~Jg?wmvYPl%2d~L-Akato zEj`#)uZi=}Jd?<rqvG-h-!o67D8108gTK~h(RwSK;M}6nxKYo}D)liUP3x1D1mQPM zKMBXmzLVYO?=QZw{p+jidJp~g)d6bR0<D>8p#J^O-E=es;upw<&7!|4l488AbM86t z76)bRo#mYW+2VlAXz2T3%GI5&`Ta<|ydT)t<=m0Q5;4Brr48Yhm;<_5?}?O(nuy1> z=qV}ZhT5pBjZyx^?zg#2J%QS=%1J4+1j4-Zaj5aZi@QJ9#v|<aq6j-Zwk!qQ#~B5- zIspv3@urLox)TAM7y^<LXH46squhcu&e`E8*KdVK7`|z}d+~79B_7NIx4K98_Ar|+ z!=tRatqGHO!?X8qO-D(lA*fe9U>`IL?_n2Esp;~kWPD%f6>4Dbr55wnFJL!+c0-Vg zR;OyK(RScpx}Dv>bvuJV8$yrdgOg^VNbV}!L&qOnh;>!-PdFdx+a*gH^euCahdlYr z9BhPXcV}@9;De8yN!>PB^`P(*I^u8%fq)!q2*Q<t`Qi-D*4-YNrYOCw0Nm0CP=IsU z=}|QndHCaEaPwaYenK2qZ?lDU9M$5+=;6V=rej)h#S6CfkL0AbOG@4a@xH7DCEe*; zW*^sh{0tiWu(2&|<*(=7F)8PBe4+q6>(&#*8cjQROqT(5p5s$cH2MwHV{t!@Dwm}Q z5>aG(q9I<IW0Yb&z+uSCLSKrDNO?J}3}$H)ateU>x#HSo7!&LR<qfE#9|<1S)BsQ} zCmblM#j`ITjfi9SHmL5K-TwRPvlC52ta212?4{tU#2dzacOZ<;3-ebWd1)0NN$l8Y zT?K}Um2Ep8YdaV7OIEgt&O>y)c1o)=323zb+HC+VO6&U@GnI*Uw*3Y7E4bt$^*}$* zqkPjtI0>!r6XV%}iNhw}DkCfX&vxF89tp4Z)Y<4!K}UKQ?oxR>GM?#r<gw2Hiw9*} z_qjg5k9|?EEa!d7$#T#T|F1E}j4elI!g3A{6w`R@@-SQ|^AZe?iS)|TVPk!#^;?kL z25}J<qEHRDIYL~9hqz}Rd>d~Qza9Dh)T(e!2tgR?4me%gKIsscDw`H+8_axw@q(GQ zUnWbM852@s8b+L<R*xrsLH(}OZ`kXyS-w2QmqR*P+OF4ZbF6G<a~IF0)y%t66+P4x z@DS+apK2mBMtOe{kC91#;TuUM{a5UzH$qxZO+A){Cl!}OjAeRF!dFbvUj_Tx-~7^z zuRjD+!|ikdq_Dv^iLPh#EOirj#wJQ>01jDWjW%xB!6!Xt)bzw|Z(#4AX|#z9ci+Aj z@FcozXdq01Kq)(W2$!_4n=Z_H&`>8g=4%nIKi{;c7pm>%N4s0CqMTMd`}=B|8r!<V zgD+R7r-AU%|EDkOCve@~OzhMSn|sj9prS9X5H#lLO_!Mj7d0gIzvxH)r8=oLhV|ru z=474QW_=yhDcjfQ1u;B3qBllgT^6*QeDjG)wWP+!f}kC(1byy_EsZL3*nY@$c{B2k z_Y~6C_rLsB7DoaC4i5){HSaA;<`}*&{`~E2>h$r|8EN|77L}O7Oif0kx~Zaf>yxwG ziE_f97yyY?UmYPU=9gcEU$7?c;|TMN56gRZ{5a}Wmah}jvlssPOZGMcFR4M7%<TCZ zt2>x;i|p=Be`7fOQwu01{{x};?9~Rs4Iv?C&O5qOFJ@jNk1-fC8S`f$-$#sUNOpJU zHp4@G^rwz4f8vYVduGEBdYQZ8qMV(MARwXS^5o{$r+(W-UGlFH`L`b=8SfKfViYAC zn<s!=YLljCI%(J?7qKvEjQhX6>fZ+T^Iphx+z!&iFF2R;ah3(`gVta_`S5nFmoG3k zYJ4bc2qxxGbZr4prDAs_vb~0{e(gM)KdMRo-=LQN;b|4yCtpiFtT4Z+og3b6zEXcz zX$@3E2eOeycmzM(M~_&t8M|+4)H;7X{jud!$gyic$`Avu+M3!(u<?J+CaaHRPhtkZ z8aQm{U%Ah-RRvLx3<_;K5tXyc+}=IJBW2&fvYF@d)QD!w+<!LX@i)@73gv{yH7hY) zBM2KHRN1X*?gy{DPOuWX{d7Q-_uaJ%F9ticGlHc5ZNA#W`Wzrn>K$b76Ubj#nyW|0 zyA^7P7d=&sl$X!+RgXlnx;uDh$aj!n&6PMmO^9(*xMp1W7nGP8^+Nov#f1l=@xT5x z+yg{dtdz!0T<b2(>UE~S$A%h>l%Xnv=GUvNNbO!LTja(^@wu1JruK@RhhSU-X8it4 z-)RDBRFR(l_9^{6+UpbvcrjeED`+rQBUQoXK7;;anmf1k=oh3Uvj}BTXe6R{Rvi=D z=20Wi`jcaGXmZ`iU4*3|yqv*sASm6Sm)Xo-Se+OXBa0SDax<8;WrvpA7sk=F(7D^Z zr&{-!Lk2~0n_1NIC#5ea_0N2U{qca_Od6bs3Z(xvSiaq|7lZOt-#`K3mJ8eI)_pSK zGL`YQdGsiyUGx94rv7c=TPYDm`=oKQ)H^}HysOjZ7aC%b6ZvnN$q#C*aQ<0%Nu)}z zmIOcoL?F%!oQ|t@4C7;cZb=TVi+ozZC;>sv|M6aqE&w0B1zna9BE7oLvN%|_vV*#o z{v=IKB9((FHy$n%IN)i*MpE848i%39i2HG?Ee)8!jwx?Hf%_%q9~*+HQ~SL_#Ap3r zY-EiIKNI$agizBBp@Y(;W`S7Cg@xB|y!Rda{{8cpNIGIRGbQrm<3KFSjro2W(!rr2 z@mF?tyRph{Nxv3@sURj@%b;npdP_z}QOyd(a`LfQL+0t--}*UJxB949)oT8S`TsvJ z8Ob-KBEnD7-tW5~ApzMolQm4McNI2-H3u#&%;lk*@tt(;%aR9K4n|*biO+O}evJ<- zue<nNJckS%?P`#PNhPZjxS^eX!e*?DamHwlX77+7tl3<BPXe@~8Ek>NvXwa*Hnq$( zl{3P_d+IyKtBkk2EEO+tH8ne6_kt@!hylrM{X-FdUZwQ@#n*LlYphfkK6`HVK^9PK zWCy}#Z_b^e1ZFN<rFBx{yMf<VnPV|5D>um7r~xS53NAlJn(VatR6NVi$&W1$tCs(@ zH7=RqLFDhzTV(@o@n?hD46+RiRSR-8OHsMIHNxWXoG)E#-={mTP=vpeWP4Nq<&)k( zQSpwgi`Xds)FbkzgLw>xf?ExO;n?INM4}JKhxN<6n}TrT?!7_bd44fvcrKqZzI<cG zH&j+<oP6gsR7sl+T#{ywT8=UV$P@i;K;WehZl5va_8i*y79)E0<u9!D5lyh%$0mx% zLd%Q^Cu!e;F!pP#0P@PgP#hiX0cBYH7N8o)d;NU$LQT2}Nwcss3YUCp_ebMCAv)bg zB`qgaO|U6+8U2<pG{7H|K)FE5J!)pc=H)^IT{Oz7bDX}o?EenSXg>q!VL<xi;N<2% z!zayw@W~D)xQV%;tKW>v^kPU$%yG$ZdR5T+$CSyov#!(GBD`!kMRSsD;(dLi0#^{g z;h-3Khb!)zoYr@xIm%d&MQI7a&M@mqQqA+}H2v1V=gyNEA9{XlG|SGTda;Ojir@}& zP0mmw)DrS~1^R(+pn{#@VG|xGg518ZJRn68C3-EVMzKI7?d67O8^%96i63aRb^chj z%#GwT?rA8jG5hpAAwO*4AT@aU=n3VXPxW1kd{x1)C+K&w<(Lj7<UGvko#WR+dm}<U zgoY2SH%?zYOMV13ixG(boj6PXtJlvD4~k%<D+~0w$;-JQRj9jh%R5oK(b$2Q)t%4U zn1BeyolGB&gx$!71RqZCIrPQLE41k5WqerGo1!R?+3H||UTH=FzS%!jlQMvocxJPZ zss=@AqXiX75ir1=?VR7~L$K}tx@thZ$G5c0n7r)vjuX`$48Y%vl0&Rf*o*4PRXkNU zF;;f5D?yPOm2?#8BESIAsbcFGTk<|LYvMBU$G{J<#MMnS-0Igv3D(m;?{?Nx8?TZG z%e+wq#nJU^Sh`V@*_6m^i|S4Rt!uX5>V{w?BlO=313y+@8GDo+KX|_uxWVSPO*9&w zX9y?CWKNADq>P$@6SDBU;E++99uw1Mh5I85^^5asD$E2oKE&(2`lWv*7GTd&)OL7| z0f<<j6kd9;G1i^M{_R9xO;~mPFKX`Rk_%<RNArLs$|*N0P7%dU65mtxoe->D?1lIr z*e%i7U!(E1uRz_eJdx`Tr0p+0dv3^9oVuA?Ef)b+S$0>JqfGk?3z;<3#GVG`R#T>A zGr>bXdFY?{LT#aet0NMRCfigvzT$<PpF*Ek%ZvV?{!YGIahMXBDQ`1CxjlpKWZSN8 z&JIN1i7jH@67+6~0(%|+0$rC!69BT_Ne_pa@TR(BW}|}>UUcO4C4D%n-~4<Y3fW4y z1K*W)!o2m@Ww<oqGjX>I#c^KQumF*b!DJtm<-@8juO`~-DqI`z{ytYkmYR}Q+^2R& zdI(f4+30vHXe6#L6`2}J8N*Zh0MmGNaQ~9Rz{Xt->C$a!+&sN0%jFOMpc*@YtdQN@ zpyhBg^W=4nFC8Od5ljZx3@@@fI-JRSG`3)R_+*a6(zfw`Hj?p%B`@S}yj!a{t_0O< zCi14N+3XEtIP5%s&)<9TVPz=hEJC8hisV)}??Cn@C6z8#*I8Rv8$oFvtvj=HDyvm? zh@ZK2o5b@3En4xuCV{L)mN#x*57a9<eS?rA%~_opT3df5RM`-@s~%)Wvg;fNm%BZ` zW($vTNj`$%_Ohh3FSs;M@T{HrJe|<M-S~htlwqQGqD`S!?Y9S@KW&!o65GyL=pH)h zX`z|7HzGi6Z_;IBJ2bTFFH(MyCx}t8lVsFJ8yFyz^f4ZG2#H&UcsPquo6B8i)igjt z$$F$_NI{551JUbUxFPz!UTrcMm)b26aMq-DYTm(4a)JgI*?~juX77XNYMvOWwKn+( zUXOm{J#fi_rtINH*iCCkvS=NK2n(;-=Y1INoBR(d{XE<{CY5hho=&V_tPB}!8C9{c zV|zWi!r91nxhspE^L+M6@1ar>QKCngqE7Jp2UX18o-p=KZlp2aSA9z+7HtL`IRN+f zMtWZ1F$rE=u?M0|4QYQw7Qb!T1c;P?2|ZJT?3EBXAZe;bt3ny+T{iIl5%=CfO@?jT zCyLU$B29==MVj<Z#6l4<^bS!GDKSK(*C<GD0s;b3lr99MgwT5tkrt{Tkc6T%NvHur z-22(t^3J>a?KiVCJNqXLDO|blE9Z5b$9ep^_czQlBWt>JJKX-mMWpd{g!Ja|kR+nC zjFH~ji-`e;blc)CS%oX?i)`M2upbL%R5DiV&aT1$<1gAGPG2#>ja8o~Jq17ZGjGHH zhThcHnI0f?be;n7u5TR%%S&>-PQQ7I#z>E63Uo_d6n#G`Tt*h&2t^*6HnvWQW)L=J z9<`@R#^>Tc@7;3+-<Fc=&SM^LH6pSBj%KMzw4vwn#9D@CESm9-{bkw9pFNr98!Hx> zh`RxshoN<o6vxA#XepRfb={+xSLNM2vnzBoM0%$wP-IBpmp{nb1SerwbiPIGvj$9t zY3tv;AMW`M?5mE}5jxy%Cz;_&^VOW_gTuB^k4(i4GsmIdMM<C9@3yRVX@yEI)m6tS zJ0k8(`{Z*tpcjijLEF+CFpKH*3(h-TRj|J7`yY|@zu(r^8}dNfCVn^P{e1p1^}&S| zdA{lbsWg&x&klP))#m67uC3+RFQ%hjRwO2r^C~;G71LwnOPpCA1}1|K1cvfiVHpT- z1j1J`Z3}zDJ5mDk_aBX2=3!%l5%_|w$23B@p}?2-u`0*+Z}Uus1D8kV!oGvp14Mc- zLD#dp*97gD-HO7ktZcqN?DajU%%8gigqB3KYP%C;0Lz#~d>_&?_FA6Nu}cOnZ}$0b zVs#<hPOl-h)TH+P#eqWS6emH_s12rpoQYdd>{HED31ewYvTm0DMjDXr<fyprw4ioW zHPn+wKZXhcwCm(9Rj;0sm{nk4+#Zv<_(uWHAP~1|tm!}o<7GT-tK<qM^G+V7H*4e$ z8S))Ce7jAlNFd9}48&}O_!Ce2RTW?ye=tbESmxYrWB9U3XA!#T5INe@5!H~LzL-@K z5IryhdFJ=4r!cxHY4$|kfDLT7jeOpAlM$FMsSIk(E{)!iD>gEMMg90X(DX*(L~{jz zV0P{>*#t}&lHeV&o@k>MW*N_bCum^oO)dSU`gI!%BulHgFK&k><WW;ybEYZQN8op| zK`MSITvg#s{=;o>q92q=2jm_E^cj3QI0E`yr_sY!oPjcZlOqr4`7CcUFr8m6Ha$z> z(8nRTuKj7h284|>@gHgI!C|<8w+Ht!tR1bijR%IxkRA?$8kj2EZ)Z}Yt?Vcd9bq!S zmy+u};&SrH<LB`bn=rUrWAL%?(sqO+a_gwr&I5X}KFgP3Zq3+G6o$#rlaaLjDEkPO zewI~l1i2KVHuI=<#-GdRi;>5!K$9h<*ye-y>Wk%dYaRCaWLAnlX(v+YXDPo}TdV4= z`9UcI5kH$*90t5QHq$yY3cjQyB>+i6vhSa|WD5vB9GQ73*84{6nm->3GS~23iaiQm zJ{t?)!R0ZCWb@hbIS(#JIJMw&RVEC_;i#?ayPsXy^axAxv=XA(c(A*gNyzmXx%b~P zt=t8=q&-bj63P@9z7YQ$8lP$aHl4uI+x)R<Kj2Glr{W<$eyf)uU2|0gA-JeanIAJq z_sLX5{V!Bc<;cC=8`rzOEgw(G{m=Fhsd}<JA&UYf4&0wUpfmSZdRW(Ri@C7&(m$G{ zwN`(9Qb~C!<@tn`c^Q~uwkV_EKK<<KMT4amk3toY`yx&gBv*ru849OYvAdp2-ru!p z)l{C@aexl_BZ0k^?h7+9qN~7pD+u^jYa9mbdP3C_<R_ng8lUQthwgn`7%p*txl<Qz zH2CqJzy8M5e%nhY39_H^Xv_(FJh;JgdnDsiSbv11ETh(mtJcA~oz6{iD1L`~A@GF4 zgF(uU^BhL@da-{Nd2?c&8Q|{OE)Wv<l?cx(4D`mMUJd?*Z~rY;2+h9F_Oj^kY-v+J zvVI6b_JCe;UwQE2Mg45`HH^DWkvHht4z1d-klX|ui7yM0D1CGDC)9n<(E*Uj4PDN^ z;!Plwwq_t=@&$dNEYJl9xhNmz`>FP7E^gBse)H6?<tr?C+F#^iIqnkUdlxUyXvxl8 z$-aL;teLD|&B|uvZZ_bK?MVvc=1JTys{*^{v#&FIhr)mwO<~BN8@2NFco?vwnca-; z2eb7M!v&@Koi1kY4m!6P$h|P0OznG_z`HA$tQCgdf2L45R#fw`u<UVYV!%>=uB+)} zYakv(v!0330Gcp-J5})fXYCJuub9uPDZe3|c5CRr2@@Cwc%TA_QWkN9i$*QMgBgz+ zH`9Q`3&9Zc3ioypF)8}fqIO9s!Kkrvc<zimw#}k@AU0h}8tvW|&?jCg55+gMeVwV_ z)NhV3P1=R3FDlFI)p+U-fbF_T)^RSR%&p8an18^j#bI0;?lHn}ijmR}o6@-q90vXi zwDNACCnm$&UMo%bK_nmETcAvY&x-fj38$0wvRs4?2!4fn+Ot!>o=q`Tnm$@D|J4$E z`I)Ovw6@fnX)TEFvfR%Ho4u;o7Fctj4eR6!(+I|8Gm8HWJtY6WZlNu*M=N@F{s*;- zI<}|PzwrAkQ|Gz&$7#7PIr=~CvSi7Eq3XUszat%=w3?1wmIU#XSMv^j<zN@1q4E&H zYMTW|V=uOxN@JKO_T$%tn>bgJ@@Dh?jMdzgLY-XRj6*4Rp$q-~2A9)8v3((@#0L{y zP8!7eyS<qm2-5puxp~&9&EoI!eghc_YW*74#y}!S2H;&}P-aw)Z`lNT=vYr7=8522 zqP;@*#QdEn&^}1U^j1eAq-WW-xh>VG!nh71IMgQvf2DKsZlMkKj$BRbctGrkIFP#( zARMZHf4Y8_Iw=-Mb-(Z_sDl3aD0g|8JK&S9AXeWdsV0i4$gmbP1<#7_K4eWW9DVrA zIx%1fh$(6yzHg3-uMRkIzGeEvzf51$Poah5auz@LxzIhRZGhg~-_h<9N1&<9`e;|v z#}+|D@Ecg7cwmzDhm0ZJb8$|0*N$%)N(VeGb`W_SE;R)BYf(Z2cI5l+!C(5s7N(Ym zukIR4)uh}jrL9K0h5`7ds&e;bMqjav4I5?mt!2drTV{d<FILXn$ht*ygQRMLVEt#? z$Jo+{Ez{PKdwdHM+0p$c+@-JEl_;wDJ!Vextk2hA!BeTbwv<&m`Oy!<|7f&X4VQ<Z zMvde{A4H7xC<6a}!gQZ3mixIO!%swdg>%%D%(S1+5FqskXy?WNL(Hl^L!TGz7>2VQ zw7wp{*%f`5N`KYMaoB9K60RJ~SXpgi{DN%Dp?)=-O@ToK9kN3l(yz}yj3t$%sW)Xl znh@riyFH_j9*NQaw$=hl$WxiVM$(JMA?St$8`>(~xwN?~92(TkfZl*35w;=Mi9`%^ zyQR(Bu61D4H@L!K$9dnHCd_gb(C-gFcGRz7@K0s)@1Q59-Qc3FS?LY~w62+>-cVzJ zj)#7pMVE{y@Zh(1uyb762$p>oMYz9rPLK%u<0$g5ZoGcKZi282cOGPN%;8(v?ae-( z=*g3wtPE3|4ahWkhwRo|mQ(2emhe~<(!dp}nDUP%)Vd-hq#+3ssdK$qbDDsiDha>$ zv@&^vp|U#qL@;uuGg0~PlR(iX?DSuEek<wS<7d$$-r3*IKKN`pTH~+!2c;VNdId|5 zJ7{4Qvo5P2D5srjyJgt@3e!lowEdeQ_|)E@7sJJsLi?^TySe}h4G|<ap3v3!`+DI8 zLyv4A-jYaR$eplKP`b@oRpoVTD>uB#9pwf4VpM*gd6ebv+fQ*$Z0zVDb|8Sso4vby zKc5agmAgHLnU`rBinaDhiM?ttp#HPDq@Jvgo4wBLRbmt>XO(xjVO!+9Vd#O=xi(xz zxjd<~fV|h%)<TTzCCr@~Hs_XbJbR`jy^{VX;5S7Bl(@txTQ9?N?<+BWK(>jXZYCfJ zxz1g4Iy!09kU~uBA=v`i9E=PtB)Ss4=WQL$=|AUZJ-d^OUoNV)w*F`Amd9dZr&?A^ zpv?HtepqA8?}MFC3qkr7onn7*@JzcD9ZmT+k!urW|1){(_;gt(&BcY3)1xCwGA_^W z=9<e9Xaeb2a3$X=)X{tezS%cP(ZoY9Q>=*aj-DI=+ZR4L`52Gv$SgSyrf-8n)GXZ5 zj(rC&nxXYN>31hpcACp#j8K<7VxNA8pek&ln0)d_N)d<?OHhJxl6&yaD~f(WRMK55 z1Jj()l{MWJ?U!=53aozj8jMC#l>!h15z$N`fxK_Ci@!Qq;yoGQwO5hneyJZSvk%B! za$n*A;#qJz=NEOWJmzvI?c4ji4Ymp9jjai4rk$IXI-01`Xdt8csZ{y2fS?9BI*ZJd zlH-+jY?a*qkLKz+FoJ138mYw{NY{pfvAio%VG-jj@O|zlHTF0Ry&1+d-hme+hQ$~1 zEKXnXvR6a~e4&A?{bxsU54~iX4Qy5tSQ*i_%%1F+)(nPzn}PJFNLpUXMt*Nc9F>g( z>CWc>x}c4DCu?1Y_6+$yK&DAxjZXv!<084|(2}@Nl6DD#gge80FB?tYDGx7Px<Iv@ zn+<Uz=2L{dpbHzEeP5($hq1{#cOJL)i)?<JktY^*2PH>^og<f?I?+X#PF-tlcQfd@ z=JvASlyow^wAEB*XGlcen<#8btVUf}a*F_K*;k2)2)BXlYc(<wkxxNSnlPyxOAEh> zTo0<V!nk{If|t56L5SW{d!U|lulrtyT7M!v__6#^nAd()8g4Wk&8x#jCP252r9DIL zVf4O_=tdc2i`xLs^LF4cSa;N0&AJX|_d&9FWU8v1oW*7^N?#dqcNt9o@K{)=KkHP+ z<4}XA+c?;Cs?^?I4c(NGs;1^Jz)(h|3y3#rBmX3c8`&49D@)>GR+eh-<g&6)gj(eW zFkr?ITb&lf@|B7GZRbbXMy^@2cYXZ!eFkK~8fYT4*R>l-zwb}l-ka6J8Z<-^<-K_< z=sO<ZsPvs7#;0llIX!mf8B+_tpCzY6yuG1FW`eRgP?XSQiwOIP?VSEA)75a5+-qKb zM-TY!90!g-u+4%3-Tcu}U>9u|WRju2BM%!~p6Vcx*+OQ=f$eH=a<M`z^<+*LXYcZ# z%#BKQ?y|WpM_9wJiJvrbe^Gs>slzAYr9jqovt<VQQr9ad+YCN6w{gJZzBjt;l>h%g z9dR<+gv%Y)w=_;l7`aJ|b1kZ-G*lSa-a==dT9GU6w~YHFiqBCcl?7N|F?wF3`I~Sd zt@^i9=JL|z0QoH?8-T1*+#g-Zr_~ZaTf?Qm5<VYgt)0xh20&%&QBse{tA0BCzYM`| z?I98-x4yYFB;ji2V$MeI9?y(ht~F-@tPFn=$Z^ug(fgF`J50*pZPc*ry}wZoIC<Xr z#xUPCJ9u8P^QptS3Cyl+$`km+1>46DT_RR@i#q38gQk*`@9Cc24v}kY(u7|aD{~$L z=K~4E-20&+2P7T<u?9GJ&LWbj3)cFip8o9VT!I`6S+P4)%J~bdHZpkHcx_R5{uO<d z_pvqK>HPo@l@qW|^H{$kXZFq&4S6x8PbyzY6*lbm^QnH&4jkVibQsoyat1+jGy1P> zdly`CzBzuOpZ<#8Vf*7v9Ud-hKsierxi-lqEDxm~i4D;oxO*Q1ty5Ypix5|0y3b%K ztwViXu;gd&X#4|_eCIwd;2-MfMX(2$caj3EdleUcZch7~i`a%Hxj%!CK+bWTOd-Ol z8sj1KRpcRkQt-mMs(*9c;=EYj$Ce`fLnh-F6p^WIf#suKzUS^T$oh;0lt@c#L8=M; zvzM$M6rUMruf{@hcbn|=H2ki8{BRy&-O$J;YK^VH*K0Km;DuGW5(eJ*E-{2KPF1du za;HBP+4iu&oW<VWWY}A#L9CKTQGnMUdMuj90Sp;F1D()RVH+VySWzf_s~t9U;_)Uq zkA4HT+QHkU1+K$%|CH5L*$nm>P1ehbqh?iOHh+NKOYf0EgwWsN@6H|UEu%oM%SDm& zA>v}EOHa*5KZzz!a4-EgHi#x3352)PyMY-f+CrbIXX9Ipb(B-bUFbq_p<}t;4pxyk z5GQan)d~%i`8eIY6e~wpdNF_D-OUH0w4}i@mqs#7qTABOXVW&sMdme{KY-117@z!v zPN!*9Tf;gSzx;&QgLBF+2>84!CG%hz(kyjpB~8TBPd6EIi>a4<MX%{pVZ%-+`(bnD zECRPn)E||6e~t1=iWVPv)Wa%)56uav9eR+~n;rCBR$9)PZsmKeJd+5r2OX@Ms0IDB z?sT5sqA}hW4te-)ZoX0bq3!G~P0#bK&YeN>q=BtMaMXUZf=9!)Xg3GLP<+%o34#<h z<Pr(i-4I4MQ8<G(*x$D6o|5^yfBI(imvq@D8-NS|dryW2gL{%`VeQH!m&oB-SabKt z7`M(dj&Ed^9_j_iswF!4^6Unv9vQB@{-kxnC#86lw{h}`N>{8c>8KqI+!4!!T+sdh zh_o_*?TWzKtQv*RQBv_&y%!^rd%?pZFQRnQgzSB9Tp65n3y5es36hJXXg`t6SYtW1 z=DGMxz}dO0Uw_qhNw5{^0*LN!gF@!SbH4EQowZIFi8XQR&4c8l)z|{J9ZR>hc_^YC z3|rOv%2aGEX7WjE3aUMH?8~>xo_SHr1&}@25?<xz+U=(y`>7J@AZmiHgo#dXEIfOv zdxIYDH0U7Ldxq$4pf$o$yb<o=>E&8+qOCN&Nw05>1i31&E;0M$iuWx0ZXsEJr!IHx zx(}S*{r+yqBQ4eMGq_5fvdIhpv~c+>KoX`zpUsPH^n%Xrom6OxT)yX>ZNPrmuBNRG zt3S&LQJFRa81k_$;#s9I>%fVEcid7hBEQ$rmoA=3<)38%T%&xJ08J}w$X(R>w8lrf z_t@`yBL$BbOxvJpVd)dpkqm$KN-~g&#f;Eyh(~!OdX>hSlxDwK8G0T1N-Bm7bHycI zvLiKQk#qzV=1q<5Y;pW~G^uod%(ZTv1kIFss9ZsEP%nB+3tjpe4?(vi1#HP+<(X8| z6<=uH7P$Li;I~aaL%S5&+lcrm4cN-K7TVLR*S%!kPFr&ri2jOj>tx=#iP_2w1P<^d znfSrgC6zku(Vr^<qMVmw=!Dxa|37{0=AKG<ST#es9RbP8^u4Y-UERxFgN4h1UY6h} zsyJ4z!+nWw(RNX^VJ<zr+3s7+?E4rT_r4NVl%us)u$({B`47E#JDi-joX@%ey&5Ly zp`uZF>8CAU@9vj&5z$boFJ~13+Z`80GiDWIJyAstL6@BB@NEx<EXHMI>*vcnQQ5aX z8#pMW(lHFb$`?{<$%W#1Vk@_<2Ua=FYUo9XH8eL3;8<S@T_tDXQLeZ&w=4dD@Ml5} ztt_gI!@3I!!heLMKlBy!wiUWEQ9@GPO7an8GncKo@M3LI{J2Nv=X<#oDHZ$VsM-)Q z%jiew%zm?3X4BHwYg>!FhaAqEANMAT5yLI`-<^)^T{HggX2}s&eTA7w@}YgKVTRS= zJ<%}k4$@K2iQw-phJxA_G$tMrCs`k@z+zaVV{!La?K3Y&*REuN`^yO0^`q499dl#d zHA_9?SlyJyq^^bxkllA<%>jA>Pkfb<z=F!q!)zEle@?~h;njE_7H28pqfH0)E~WP5 z!(`Hl$DaLY88c+b5W#0KyOUfXdTKqs55Situ}Y4h!|*9N>b3d80GMsvT~}`(gK+gR zy<)>Z>>!jx1V!`n=06(H3*`=4n<6LPv28w=mS`P|BNkEKJ3-4YN3?JDqpN2rI%g#Z zj<DWsvAnd3b;b)kE{w*@-@mB=!$r@ts>nHplVEo_TG%^?sNHSsTKu-Z)vkTNO>8I4 zw=4A$E@T*K&vpjgIR;?o{JvC_afFmfICe-!H@rm3n}pbO)RIvIFk^ssw<>e_yxkJ> zw%*}9`^8qHe&+qb-=%1|Ubs`w-Lvx6>&S}5yDrXGVr7p@;AKsxw>M2G@aY%rl0Ah1 z5?ws<8+DLi!Qt)Un!W1{k#|{Ik~FF5`z-R(@}i~*!Z%E`BLkoV0>SyL6bKQ~D~8V7 zd@x~&lB2{7)pIuBJ3xl)t2X)d&|WZe00wWonjh`!wo|1uPMe;jdaU>N_<XZmvIbkB z|9||#0h#*ssfWLN{9i5(!Wo8Iks@3=QSx>=TI33Rs5zbrq=9We(l)Z1M2Xhde{B$Q z=`j>e=S%ROZrb+m#)MryOWE-;>J_GHnu-p7#4qC1p)=g;`E&;Yz%)>l6JOHzHOa+^ zhiFW$X{~e0lZWL;6=3dq`wk9(*hQCF`fTx+-PgCY35_f4Kdi&auYTi;tGkQ%7xP~% z-f954*7fVO@t9_l?>s{zufo!+VK_mk;aTc|;}s)yx|&x}Cq|DIHe*u`&+c49v0fr1 zM;;);U%544(hMv5@JIC-SSj_7{hOX9D_=P1^zCNJmk2TvJz$y;N&hOR0eATIY~_@_ z@P2}M^4PT8R#t^A<OyNOpoCScxp(G9qgMYN+{_sFo@#G!a-@zTF{8ACFaaUGDr&d5 zr83mx)5KKFv$I;`=+r{67)QFUVMAO(9+PBtqD!H|xJ#l*PhDtE0bXp4jYB}k;lqh7 zEfwr=*?N~tz!MhU^z_}rnFOjOD87UY5K-jaT4hS?9myDz2BY9moq6vCeN8wEpJEDT z3EKcjTb`Re(AwdQM6GXWvnb3Q-4-JorIz*pT<jjAOOC(``r}a3S)Z5e7MGT6icuw* zh`nEow+iIm>pa1nSeH<wCggme(Lz@zd`+xQ=Dw?~nZ2@necBQIV3q`-#A|e%1p*>W z0skK4r#{snBl#bVV-<KGX63q7{g39_jsS8t47qMey}USYLkS~iAp(_N8V7qZG#Cod znSH9mOxIB5$wNIS(S6BLinAN0#zI+TKV*Me0-WxQ=xU+<HXecs8YeJpHmXaaTsgnE zHnHu8Q6(p8;L5zi6PL=WfXJPiXb7n~;S;fF#+=Ok5cxD!Plhv}@0}jRM3GXl2pf{t zl3AuD$Z`L2Zx^Tb)U{0h_}X=r&pq%#>%;rO3@uks@k`_dTnqZFkb-0@3_RSdukXzi zGD!|x0zJ_yy5F%~SgJjG9wzt|gsf|%Mztqb=d}VCs6;Ly`Se05H4cMHj%mL+<2xFk z?b=h#vSD1P_xRNEjB=Z=VOyp~apE;t1JLZDj1p1%NM;RK*tIE^?03e^#itHzSvyWW zq|sjDpLX_~hjE8eaEPsxGp!=7w^p!P{vVBtMOyX>P{as=?x*2U;p+fQM^J7s-@y0X zbK}=EA_vRIR=L#nFtM=Fpw{MqOB;LZ32Ac!N7$E5QpshN;7I6YEqT@MGdUohrUf3x z3f@9Eb0_Q>T$P04?%IOus(X!TyTe!@i~&hTEg%j6&r~wBWo{($_XUxY9}S3k%%{HX zq^Xa!3<%fhwMHZNcEblkr^a_l9)W<yPNMRzo7!~=eXIx#E{E{>zfLUVq|pbro^Pt2 zL-b@HMiV<8IhyxjG=@``dRSf>yRg_B#5u_O{%%k|s4n&CIHt2h&Hxhd*nQh-zBAOq zCENlot-`UBXEV*onGoQDCY5ec5xPtb8X-`9Rv==}uD!nc;#u8K`tAyjrGSlb_{p(3 zz;dw_i|^sT=g+r?9pO#`FES{eOy~X=r_z5hTm7FVEQ8x3bg4=<Gafg;oScgjymIg6 z1|P)4ebQVcR^)<S-0P1YS*)X}W5b8Y7!Z?O5t|HLSwAE2wy0hUZe<4TK4G_Dr|<iC zysfn-Xpk2_fU^DE2uYkirE&$JWe5w>8FJlhc3DK(!^Pit*Jv5Sd!@sSTRmE#%P$Kf z9G5ckT(fHYmv@}At1FCr=`sUl^F1-DDcw6P()0I{=qwGl)85#CS<z5Vn9!A|oqqm@ zL60g&@Tfuw0bLv}^}erCf1+S|mhO|Wly9XIcZ8dKO?VH~R%Rl@2L0vj$Y3jMm0`50 zM&;3Y#&c}Wk{k<8)%bj-Su)aW27zKmkJR{i{uMm)dR;h+wEH8OeA)B+NZf;cQJ>Oj z`Zpmm&bU!#TQ@tWJ-9~^BE-{ALM*x6*fY?5EilJAOupsnl(wtE#6g8FtislQaX#Ai zo;7E*@zB^ikJ)fBmnZz^3u$mKZ$6Of>UeJSO}dyAmJ`s=e46MPNQk<9SHo)<#Nvs= zQgtW>#`mcsM@JlD)gKu4lGvFyof5@s2=B>RLK)3h^}C}czs+U*qxoR8KC|EF5zx{- zt#bp;b86(RU%bJ&Az$!kSNN+*Xf1#k3wYfbe(rKiJpaY}OoauPH+B&h$t``&(5S5! zA-Xu^r6muQ^;-L))CJ1K*;akQ%r!X0$cuD1I=~em=NN66^kZJ>*=?6WJ-*J&QsqDS zykUa&6eD6^E1gx%l*}x|{pHY)hx#{r0A`U~PnZZf<<p#4GLTX&ix#~mcbJhLcy6!l zho?!zv9$m}6LD!1dKK7hY$!Zc^XtuyHJEJGU6x8@@c6xs{fQa0FO;YC5-K3mjEG4H zk-Q44`ZH1+FV*w)VNS#giJHyhY5IOxG7tF(zfT3Q=o-U$g`(pIwk4R<>-8)6-h6Bu z6yJKJ->u=2PEALa{IZ$5`(o3F!_y_<yfsWkpL^2On6uy&{<ibvayE;HgS=^@kJ1Jy zKX#FkbQyZN9vq{?j*d2Ksd+o^u#SCrU7_Tviwy~T_t+8<&z~O~0wZo(6So1n)+ubh zFG1@2VZXA}P1QxN(;#be;+%|a7`MHfs-0C~@kWEj<9b$|Ue;>~WjDSLG+rgep@4X0 za;EWEWo4^1E}2vC!Q$mO!)+E-L&bC9$6WrK<Y|dyrH(5Ut0+O{Q=#P^CvJtx%uH3R zo@W*JqdTGo_6P#37KjK<l<Hk#%j|a38HB_6Wzwp}=@Oo>?}P37h@~+hP<*b?k^#y8 z?SZyluv)KV*`MvJq+eeW=x+X~EESrHT^{D?17B(HD|B!>(z#0f=*{@|cU!>laQ|XV z%_pEAUF|Zlg`22^S8f&Bpis*;pA&;_mUYq+E4X_@JY(0$hJ;3f*~l~(4Sm?n%+BB; zsg5WeK}=#{@Vo%;=UgTVNkxNy|AA{p-jg)9MLkvL>}d0P<GYWV>r%3u8)FI2oeFM= zB#)E>h?zQKN7Vi{&qK3@43n5N?ME6lM-rlEFzcs(7v8i?S8VvjmbuSZy;79+=hS*Q zG)Z^C3uwYJxv7Nl5EpYlug6(ozjJcAmJe9ztgPgt+&_#p`rVh+xa$4rn$YKrIM|ow z^p{L|1!I@by{6Naw73XxKV+0Gtu=4+m6~zza@-b9;dH)T_Q}HMe9E$Zm#@{em1nNp zS3bES%4UDrF80>h{n8sZ67cyCJp`VY>*C^iu{gK5t*w%l^Zw;0X7bc;wC7Rgww5uX z=k*`>Dn3Q*sU(v7x4a>rKa3aF*4>cS;8MSQ;&#tk_6x00>D6pv^-tL~DJcEMoaNxH z4GGIUobI*jKU{<bDyD#MJR5hN8#4!Fe{E{*SXNfeZcHJ=m-b&_XzxD$uVW#qUp%&H zf5{|PW{TgS?!7ge1*HdGI8w>y)KMXW?TC{ldwOFi@$8Lli{qz;=NPX*NJrI%<g{{f zygsphCX5~HJcV{ixifDNa1-+5CBx`%M>?R(ed1DtA<DG<N)Z`mYQPJ;W0noZtyq5X z&@0c4qkHs--uzJsu%q#*B(6C7sh5u13IW+b2*yp*bvoU0<@eq5L+~oGS-;1Jnl%p3 zQ<keadrIc|%0s{;rA&7&=~_K_j4N&04|F$0tCl2`MXK%-lAH_?LFtyl<YVx>Z|hy< zcgbn9Gh^?~9W5s-URxZ{rQbH8;XR)+4i%VGVbi;>k@EVn?o~6rc>eACmeAYsPM4N9 zKkSdrMR)UO6ojC3WcUqMa^K7rw~xPuEy(oV5xaGfGf!_Zs_1ho;_ypdU>F;40`UCN z|Mya@=+Qp+I`zt=jI#Fm?}TpOJa$R*p#5(&oOXAV*c?so{^tW4AQk^bl?FgfT8P`> z8~l}~e=%t1HzKaZhIr<-N2fg+zSC{b8u*L8Mm05<rwANzS3lgH__3!_MfuP2%xD7H z6cjK?<6gezdZrDNx@hlIU)Yb#m!P+H;yE2W)36(jZ{Dy9t*?j(w<KR6TlIAFE4t6Q z`x#24uIay9&C`F8iX8P=D&Z|uU}Tadjn@pDkYrP?bl?}v4I2HD1Ws+?juSgKo6|+Z zd}U)x?EcJYXJkF$O~PWi!$tQkc|qS%4C4;XU!t`isVhUw$Lkl&V1{TZ0a!Ww>X7Gz z9_V|B^Q+&VD#CB{M%};97Sy0#I_(-eiHSnH(2CAI1gJHy`FA^hnjJ3aTv<PPn7TcQ zTJ+CY=wgd=(aQf}h1ePly!gIdZUVvEh4ey=YMFdvaDAj+Z9x26L&zBwgw2Ije;RPd zpFZw*($1dtGA!%l#44i(4->TS3%b(g-&W=0^3h&``1kz{>CjH-H0IeoV7NF6dPng= z!3`RgbGADFpIlw8q)dFmqI~0o?<o5ct7;#=IUTwY?E6}MZYdcV<d?WCCuD0E6Jkz0 zISj7H{c>0J+r2N>X!VYp0*fAlYZ=iGY+Dbg>aflTV-c12YX@RjzH|xm-4y*tQ-VbK zKsj135d`GofPRG>on24)LLXy8>qPN~J1)k>uaW|;avobtk-mejQ0`3BOND|vn-?k@ zcs{Q|)p6GnoSE*W@3Y01>6AXsRIqWfQRLE!M_axNy;H|NU2SS?VIggKTXY5ITljQm zsUFb}Y^1&cVKsR6%K=8qKrC!N<9Z4#L!-DOCHSd?&2vagYB6x0Vs)kj2uYHYaTRco z5mBWD=F7eBuioUQ!ci`~EPVHDV}JM++~0xhT&DlYeJ&%bD&~r&Tb1p#v>%S8*VDhz zE-4Lxg*KU)s;Y79m+TjjT=opIB9yBJ=O`8LNOF-{h9sE71W)gYy_*on#OkU3Pw{l2 z4N`MR7b63he}k$Jq5&2Bb0xO)7c;A?@p}gwhd14~w!CI>VHOJ#{flDtwFV)kI5^@| zPx;&mmXZ@A23|B@JFgSfl#A$gx=t=9w25!_+1ZX!#EK1n4>)@X8+rvwRJ;|vb~uU( zcKn|etpB%F?0<gA%{|<E<(<-uxju{0)XL+6P{S|TVVGhMv-%*vQfGhR0~=YcJ75~v zoj9rM6yt&c5q()qiFDjc%c|uIpb_++|6!N%3lvbI0`4LM;U2vBkabJN{lSU{cWHFL zDb@dPb+m=DpsUdYQ&n-ft!>61SqYoH;}k2nY(eWA*ZMq3yl3h?{QEP8|CJQ>zrV`O z%)^FkW%jS3?PE~iQ`L{{u4j86r~U_1O#gXM#gfz9?Cs}mP2qF0Icx8Psn0)8_`)?U ztl$b%EXjIDATZ-$=u2bA&vD<Nm)vBoCHl5WH>oknE)RkqPPhHPTUG8=9XisFFlo~7 zSS#aa^Y;sWLEu7ZTnWScPwem`j88t|*wWj;eaYwT=ZB=*#lM<fI`)iA0*2n?TlP`O z48U=AQ5KVdVBMIW3-3$5rDyPL^vg$1+dNV7CtL?B)X)V;ZXH?ts~CIT5vu^mQnbna z=ohU|@bf$D##M7L6|;4YaF=FVT?5jL*Oo`eTfjw{&tvSx6RjK|SB&9H=TN9kE<9(M zPk=;xKJ^$S2=F=$f!u6u`khA~M)mPa^j6cuf_x7Sa|q0m@E7Jkn*7AUlA#8V*=~;h z51z{^1VT8Y?WW$IK^q0DOQ^+(ixs^CvQXlfL7nD+30{t!oZ*feS2mFKd<-1$>E(w& z(<<kpSIq#hvYkZKbz9$4^43$&WZ{OTA555nO^vX&Qhj8R18OSg?570>`@}V~O}qZw zf^{qurrL05<%Lt4XauHkvsdfo;uh(r4@4*SmpFe8240^_QFDvW*KK8)ftD@VuQ$9} za8gfNyvF?1Y?g1}He;3lLvk$M*i?4u(e#sMd)=%b2HUG=FVPQn2%~Rglx7jXNjiBl z&qYO~u1M=c-=9Z5SZ~#?TF(=~E>HRx%_3eDiAvX8O-L%-v@TA$9$S>2E^^yQUX6yW zXohR)N-IlI4T&3*D)8i^Xw=n{z!twSG$6@cCA;=mHB4+~FXVo4D9xgA{e`XmQZ^{^ zN3xw0aQ#u7M)CxvQF6rzo^J2bQ}oOA&UHK>Ihyx|@uw~4$9^KCyqJEvS8$A@<O=0p zoO7tpd8z9>AR2@X(VuK(B#`$V74hiBL<C__nIW-wwFv48d(38wp<&m>wl$m%2=Pz& z=5OWd+t$}lo>%-(ijZUaV)L<qj^@IY99xJn0IO0qFLBGeR@c(eB`hk<?0j1ET7ZZG zUkYf^C4P-K4Yr6H|I2ngwiauE{CWQ(kfkS3=@G;p19aAx&J7g>Dt5m38$yI9JZp^e z&R{82-jDRwks>WcX^D~s2r|#7`vZAib@$dMXy1{AtecUI`rEIPLSBKR4uT!;e(yg> zjPX4w?*gUkx&mzy=0#Yv9(oF&X2DuNe<2iinqcNcxlL@#Xiy4nbK*tc@r$?8Uxa+^ zv#up);Wl?T#G_pa%<5=sZ~ohnNxuanocSoQno1;RK#o3fl3ArGDC6Z<QOyeO<zKWG z`yE#Uye+X+$}*}JNgMqvfob=WzBj1}UX+Lq@x@njIVv|qR@@C$NacHCr8ZFBFZDUw zGEO38^c%2Tu5TRHB9}W@VJ9E6{Sv?Q`3DPyd@Hp2?tJ?5s`(2oBtH1;#h=6MRt1lU zh!>na$(?bZswmb(l}MyaMma%Kt?F|qFkMn4k12%HgA#rD#p_C8%|8Ao%3C}QuUub@ zskx{fl~L|iyXOhk7!7;uYHC`gU*|F$Yq@#@rGc*slOZ!ruh|DDUtS*{zI55gRsBL3 zH!rz|Ncn0?XuFk0{Ry;?w|sK-W~{!(9d<uau5X&f8;r1N@JIA&Eau|dghI{jnv*6V z7@8r)mB_(P+_O|eZWbqraZrybIpXxul#(?>9w8c<vOS`hw&U<Oi{#%Kl=nG9B~QFo zRrY1P_@5ro(@yqjj22{>ot<p?6v46a&V5tvm!d1{iA7L;qLy~iAEHNdMp4FG=)g(S ziat}|Kq)BE2}{u}_Q(bwq7%2w+*^!7i)&-+S<*5Fgbqd|`jE7(aTNqj-Amw%x^yo_ zgs!9j*zONS_di1Eod5hm&g}M!j^B0Xt@mhV<dCF@&MT}Ojimcg&n#VbhYW7@h=>6p zPL3s6Wwsj)9E<CiTMKp%Tb8qVSgN#jxt}+lK?%^eO1Y05HTLWyw#WX_prS4W&Vi4@ zB?p%6b*_?BVhON7@iAp1BQgPA8^}d>Bb3({l;{G3a%xEydMK<Po%|3!xt;~b>t_KM zXMmmnV%a{3uBn(D4YA*5qs~!>W6#@MRao&mR3?NmVfTRs0L7kMrey@@KC!9SaH;+A zh7yyUE$}>u%Ut>I^p!yuX9SE>T+P{LGOv-A_Sjm20ErV~CQj{V*v-Ve*#5h$mdd># zavf0YuBlOA-gijiiPi2B=HtEs!JFJ8>yP25UXvW^^mAo@gfxgVG0J>OXFOI>ySvgm zamp`Bv|p)}T_eZi)zSJB&eH{|-xP@HFTZI&(!ZR?5Ae%CTpOs8KS2k@t3)&E11{b- zGkmn*NMH0QIj5hWK1vjm>@am5owuy>kXKGL|L^DUf!#0Jh+Zh8hsw#@>E_jv1#PXN z8gXYg>#6kDBD>`w63ZPd<Yrh*t9nIOs7&LJvN!4PLwT7-X2PV%0(UwxhAc>eAFWMw z21OjPyz}D?5y}0zfSc$tb8=+!S_f|E8)7x-ySq#YMp(B^_jl5Am3GBo*p+}nykO~D zpVP#kqX+rDs`8A=d<QpJCR$fQPIKQM?JJK_gd!eJwo8x;9f=R8-;p2A54@N@?2z_$ zeA#cxL-ZPG3wEfgxrYTWm>4c=F|AfoMFJijS!%dc)v+|cz9!(Szo@t!=XjR@id0&# zaL1hdxaDy%F5X|C4Kl$k-m<*J;zq}b@)(;v?y>``+xpY-34Y0_Bk6Yq-L!8gueP5L zTwl|xN^Z(jTS#o8RmL`;OJrluYG)3IiUWn0x1Zk@-u?Csz91jBilR!9g#%^AeaRdS zw}3LXC{a{m{O28jHx?)L9svIYKzfcKa1_jM+Wh+5(5)w<tM)-x>Pj~on1hRcp@z$! ze!g#ZPNdpIO0m~Tl{gT!#<4kfnDa!Qk8@Zf`eb|4#&sFgGqp)TDIq&Y$=3D-o7tWn z&WCNn>z?p8^J_QXDU#oqlH+@WAko(h(Jj68vAf(^HW5i}=e`K>k_MtE5Y4*<uq$(K zzc4;wGoT6MwkA}^=5)6+x3)E;-q=}lsjqW?bQyAe?(HedU+{zC!jN0Uk@&Oppp4fW zb3Rdcv_iqJUj`->Ss=d0^RdEcrDPBpYCV<na6&o2)Ayp98z<=1SpeaKj&Oj<Cg`V# zZS<*;+NsLG9$2P++nPWhS&y>y88)(xS~78t#Q216@AIy`CBMO2&lHY>8&H{+sSrsS z=&Kghf(uMDGrq%`x9fQ9+OYGt?L7~zM8L0=(|~Rh5TAoVJ|FX~us`k;tyBkNzd(V$ zlw;!Q>=1$3P)<Zt>q=LZpuq-1g38VQWD<LKP<uhc6}yG6?T8k*nwuEnv%%&3PHSr$ zfP;dJrpOBOA6C0R1GsP%N&08NUEf@|22Ou&Lop`$F081;SIzf$%W)3)CBJYu4UB85 z>dz6WbQ}52R46)=MiC*uVUMqGv+uJ$nZ6dA;QAm5oYAkna{UGC$QGS9`JDX>kW+FF z?v|+#PzsTkzsCEsNCLD~Cb3_Y)8iyEPJxt$w%neC?`(V54>G&bk0lkH!Lp~qWCPd@ z+k%aDF4>@Z;j7Ih>*q0_ZZcGbLoffi74UL%r@}Uo=Un@&7@hQ`H{seFn5YnMeD!6! zMF%(jdY<t)meJKHR?w6Iea*HlmSRr4r*di0h+wS!Bnm42u!#jUfq-I5>&a=j(+;+w zD*Met<Kny5;tY>C(WCdTC9IrD>32KHj)ge7%FIL^s3|iD!&8+4FG4<Dpfv#|JcI;@ z+xvbR?G-GlSlQKv`|d6xGf#mrxSK!)VEQ@W^PKHI>x0Du;6X9-Yl&@qkZWfi)v+N6 z{3we-4LQOxyemf_1lI`~;6<S{4wuYo;{JYzC@fn3O0KWcAHz*SIW|uqQTuzL)gD)- zujGUu*EO2h914{*0XPPV2@x8rEH<%^;Q09qs>*zBK|p^0T<0j>Q5;h-`zJ#t@C#(c zUa~9A`4;G%as-S7>bACfc#_+IzR>JL&-F`K{oct(OKk{Y=JozJcyTL9I~>)`D8kTx z$6{a2#DD_(I)T_$Hr81@ebgAYG2+8@U&*-15%TgrfBHd5mb3C&p*J_G=%$ll$;-0W z{-QJ25hQ5Wr9sd5>dtU{c=v9fsQY!Dr0<uhzW#k+ju0ulW(tBJ=!qS{l|5k;TN$Y8 zyYR-kRg$p7POhE$O<b&imEGs-iLqaUe96;ag@VbdeL}4H{dux&WV9CyFqK|xFP3R5 zZZG9b)eLsQNqgv;E-f}7s#-+|9kJ~!AeO&MWy(^Tg}zAN=bu>*D~>*k(0sE8M+O15 zDh`SSA~@LHx7ybJ*U#&z1ohc|XNP48Kh10?15jdB$Nv?_5ZBP~P%WdT<=fvogYd7F z!LeHI_$8KKx^$Q?J#cTeA68^{F|Q3yUFT!#xY<Rwpx@i3#lPH!Sf-uthy0@{{6M;) z;P+U)FO<(AI!;HF4DLQE8FiZ3mXV!2KlZGpD#*oxOUk@wQEIGJzj&zZk6kYMtjKmx zi0+qp0xqdw8ErYH1yo`j9t!R!vMAQo72BoD9zP!jt$3N}l6bnkJ(5cXP`459T<|yX z?}9!iNopyR1iE#^rtFQ!4mOR3aK)7OqVlv=3Uo-OO;|ojBB2$Gk7BO&@UmI;e{T80 zd4o<eb{WYw_z4NuFBfsQZwM{YTUAT|M*Mh5VG)E#KO(h|d-vLq(t}x0EH|pmN%x7X z%+&l=`1Pjwi(hrZzf!<}&4L`KnWdy{C9u+9wx@Kn_nM%0pF}hTxaT-F%+`T7ei3-% zd%}tKlF1H9QWBQrCY-kT!M0qh@ly;ZCSxO~h-vX{nQ#lMlv(Z6mT)`vFRr!j{d4t# zmw$R@<Ep=GHa}1CFSXlHO|k#wp%|Js1*)ud*1QkRv)RU{x@Vc)m~4^Xq8FWE2I}Qx z{LUF`v+EfJjE6)Mc3wYEe;VDV5&Ui8vLYAq!8Tl0qy-(dMz?UeOjNIn&rE^s=6{bo z_-_da|HqF~`PdLa05jIBI=7ZnqKo*lbY52Wl4jB1AZ4^T5V~~|54^nMGVNne{%OVS zHHZbp2*DEtz+5_*28(aJ@oka3xB}};f1Q?JO+)4Wg95%lr2<2rDJvXZ*{xTVA8^)8 zfBEt*JYgn-0-97B0zis=+5VBUiFAiup1nfm-Q_pre=~F<13NV4#>bzYRr^*;(>xnH zheT$Bh?Ouwa|0~EBDm@ZyZfeezEWDIC^v!^b#lQB=HEHzJ6%KCvm+%&Wd@f9gzm4R zxfblvO)Z&{dlw$FdzNAg|1VEi*3RYJ3j(!^ZSwr1X>G!;CPUB*|7fHOe{J}kg;Y=H zk`^Ibpg1Ip?=V<?(P4wG8&?WsIuHaPYe<a^q&wpHI`sx%;xPF~^M|}yN`3-F#!hrY z4;ku#d}&E@@<5**``b$RUy5;1h9CBaaO|Q=$YA*GbGqudnfS1A9Z{lxoQ}X!PGCu> z-NaDFcdM_B359`i3~b-z`-5j{DJqk$(>g+Am}v`qM%B)@6^l9g*k7FdJ9`iGGx`kC z3qIw2US)mwn4}tA4~pigS?bctew&H?YY$g(U%WT>!Qu1OGpV+->{iwC0RQgh7LNu6 z_xw4H_ZYuJ1tPKc&T9sW)K@a*^Ab=!0&G)vdY&1pJ`ukD<#&F+f3aAnlSK&m(T|CJ znQwHixm!Ddnv=e{?+yfeS}|IP_e9L{?=R^0hj9|&+evSbWxR;OdWbkDLK@4f|Go4^ z^w>;7$U~CQYXD146@o2ZN;L&?g3r%U;@uxB>W%V;%ul+O1Fj98gEpp7i?RCPe5Q3E z>E%kr^`!4}yEndnPO2K&@T<nQ?)05-N2M)~(w4?kuH(1ajWbS<{PRFK?aqPptEkof zF0jTF`KOnwJ82%@d-A!$R{!$a?eV~f-3lSeSV}M{xbq}BN@<AX{`toQ)FbWZ5S;H} zIVY`fxp&w4rZL$>Kc>SC6mx<;IZj(=7s_{Uq1u!<K3b~I0P^n!pu4_EHt-e*7}Nb+ zTK%dD>_CpjYcuz9xocz;2~SNc`-f}Vx`e)c21;QK=!j8XV5jm+bn#=}I#kZZ!i;Y- zyI<SWT^7}-29m@}h{=>(OcHpDm7W@b&`$ubY=;0h^W(sOH2VT^kU2vdl4|$*YoVu` zB$~yn000ZqHqz7)+p%j*u?GGur{j$4;5+rlKbqaU6uEyi4uF4neAin2R0{b`svmg> z%0Fg0;wLV>2Jc#g$s=bS!TXwV5GLf{Lcj#IGX*K-v9(ODz!}vyMF~Q-IV*VAZ1zv1 zO@gC(1FBWe^5tHjs4{?0&w%)kW~e~jXegjT>8ZjaHLKqp>vl-KeS!SgxpovjS4W?N zjC`c}R^q(TI^7dM4(L1wCf?lAIUmpn%nG#U`o20vGn*c2wkCk&>7l)krw1Z@hS)E- z%{_Xfjn&?soOu80mZ#X$J#|XmvGx0~N${>#h&bSztwa8q4?5wh3%UE*eNh-ItJL;< zO14s#hU?xj4Q}O?cHgs&Oezl$Kw<PGjJR&cU1KABQE-ZJgq|kfZjU|5Ns?$CuOk5C z2prYkGO3^TJPGZ-oDwQn*a@&L@``opPNf25Pe?z~&<nNSepkS4%}=bW!mvxgTABiD z`3YD{(o8nxd224x6&T6px8V9fn6id6<VHK@yV8U5z&DQ)kv%8A1L1P@a&>ymUbVr# zZ`so=uG4}Z5TO@5FdEfcZ>rBwM>(3X91DrlxO1S9HfP*IBx<J%!eZxS-=|!8^5UsY zuCDb3?-U2{R@FAJTQDv~n-11sm7|k>sXjIW%=+U`+w=)xD4hu6PH#|g+QnvcO@=|v zc=t!pNE7sD=>yCJmD3F)FL&~&pxW2#`ld)7MuOPq1!D4LR7$j7o-U+68PdM9h6gX+ zeYy0*+W7RQ?OmSkV7NshfY1AJq^c-nr^i*hLWQE9lZEeorcMgUk4q04Yn=4S&2b*x zn~j$_!Tg4hfy+`1wk&b>76<q&s-%8ZyhX(6Fxn4oUN6sV#H4>}O48)}RS^*`@ZxzZ z21hL{nWv8HNKLff>UC3XIKOpwRZHq>;m`=@YbpuV@$-oK0MZXSWlcWg)0T(?ul#KV zmiVzjM>-nBF>ZcXK!yv`2yV+-CYNyzIsJCJxIEuxj{ir~KiG;0{Oq`~DAYWWI$T<x z9Q+fPKw3{ZnfXMf?-k-Cjg+d!Qj}kcci2C1QG0B5&v^c|i_USCfd2jX!?x+xujkTk zUp%9_A-h}Ds5i-6+p<rh%}?)n^s8rR>)<Da@HIkGfCtHSXh;AV@1%p((jJIj8fwMF zJL`#vE=PI>Q^V2H#n=!yLE8^RPthWV9<*nvWAe?Wo*GQMw?r~C*PLWSe=f4#WWN-! zrdT4LMzGnr;Gc2pu`Y{<j!FDgXCQ0kNQ1a^5jprX<PLC+J7TEun9`6(|7g+@$u7WU zSA|R|37g5^6%O#G_6s1+xRrzC`p8&Fq|+^~8;_OZOS%p?<w0fD{5n^sTCGpT0)mF_ z#4I@Wa(TlSeGQ?Kl#ZJl^~l&oPSQbhfPUW<>mcz8d4u7|Ej{q!d8W6BGTwEk3EPt@ z6wtDJoSAwVwwYcZk?{9j#Vt@OKM68_muh%F`YaMy>~V8z7%8}~jx2{496>$x3SH^D z*y5~~LOe%NSJubzgjf0?F0MB(tO)<^wF5dgzM<ezMZVi1o?1s$&i{=*@z)MYiI4$r z#v%U*H;wX;TYCKLo|n4>6Ig}jHn*_VDau<0$8!O5k6^&^J0p)pUjfvuM+g9y;5r~f zw@k1qt{?|><qQ!Ivk`IC)@^AY3c-iNQ0fWyuMlPuf+7xO^+DaSUJB+4&E8B1J5U3E z=%T<9$Us=T*bxD9=7XW?y+aNzsh$DF%BiwkU-GdUG!l8ZN2&NsJ|Z4a;Q05=Sbu$j zwsh8(%iXA_>XP{(VZI2QfA2-o?+CNtN^$hF`)w3$hIc+Mf>fa+t^a5aW&Y8m2=syu zuOQAYr*8?JCsqnw2DqY-n?_lGOPliWB23Q|9{g3@XQ9WN0P?D1bdr{of5~EZ)bh~t z`h1WU*Yc{1c2l(mnVls3+l;JUu@SV~*7rNw%v33H+6Jq=0clqNGesOeoj^A1FBlEX z9i3QplrMaX*NPCok(pTjM}um)B_u;!%OSL#-_)OmV}p$%Z~D_b5c<*nHfSb|`kgA) zF&Uzb3h=l2FdB&8{PaT9In`M+Jh`)f>M!>Q8Pb&pBE~PNMk_Tc{iA7UOhrn8)%ga@ zUeZBm&$nU@weLft?BXw;OR83rm|+w&Cn}kcT@OEzoDxgVv1R&~pq9HM7_WXvNK0C< z->doyjzh8^II0*BCUt&3J&v7HnvWIHDIjQBUp$ptoF5<{W3pva|IUe_PKKZIa@Oz_ z@zR{puUb>ie+JLx6O`O&?ml_Z%Wi&^JA#OG8ruiOLb+Y1-sXG2J#{bLcLpHzMk=@E z3$0Cwiuc;1``fihqS-DZX+;}HH(sEsp4@7=C~Ne7`{NWO{ANuEjNAldx9QBB>pU4U z4I5%nZlpL9D#k#Tlgh5KtJ-&NR$QQ{TI7i!w?K0hJ$juVmS=osjAmzwA}_SqQ19-R zQfHC7MwQ?#IeO|FvEX#?cDetE0%C$`<cwpPi<5bd?N0-l8@JAf2hT)>VcW%sRc*Mk zo&Bs;{<Fv*X7-O>ltxZ^b_x8XpQ$!=+JOh1WWEvZc>mN0rSxdYD&C6<Wckp8SFk`8 zaYC8`@6#9JlVe)J@Kf;oI%CPg27mf+dhaXSId|^|t|{5K6|A&N_o^R|Y4O8G-5pH( zp;GpD1^2_AC333E)2Dop1HiOy)vO+il4N&pmx69jSwdqRZl0~~OWJ$T2XN$*KR^Ox ztH|=E4>37Tx@zCp>S;<2^K1gL^#V7;l8HRF1r8xtzg21r+A(aI{JzmJyN3rH-L?wn z_-?%Q5pI1oY6Dc>W%Ya%(LT6uuq4;<#s7t|_YP<C|Nlp|TH2~=RcunbHEY*QQAL%g z+9TScwp6Vkq^kCaQM43AjasR_N9|Iz6SWh2RZ=U6ywCmqp7T4`_xg=<KG)?Bt_w-- z`*lC(V>EYQZZq>t`EnE6Q~d!m5?kiIzC##WHSuL60m3}&=_#20Bu1L2MxePdeuhXp z*2tr%Kkn0x4guGZ*dl7;&+l#nvQN$*SdU}?y?!J=cjzat4Jb~YQA+=;)Ug>G`G@U+ zZRGZ@G}F|Z5-7$MJL)b%QruyL6NbS0t+gZD`@Qwqe^)1WdS<^g9D^p9>2%a5**fl^ z@O)%INu}E=!l4aqbb9q-Q`eRBb2`fq(G-Bck<vESz72z)U9mb6C3sRr5DJ49?c)xU zmnS6b2Ag8Il$LML-R-#^^Vg1cGtdNFb2b5Eevx5VUieXx&jJS8GjZZ$XM!58*0(z? z9N&SkqqY?w`wsirEWp2RBITTg@>9(wkXqW%=`egv6pepPqnY|=9f_c<0Q3&vHzugk z13vf#J_GZ(u7m$-?Ju0N+5aEBCAuIEOvfV1!)K9_kbN5y<hgs~98y$vm^t+98lh>O zdWQm;^!Y6iYjo-uyDDNb?kN~|5*9_WVcTvE@L-D$;ahLgZ+1>g-;#*=2H{uHy$hj% zhz^i{6xfmHTAmPsc>``BIrw{uqIzkEIGAmfP5@FB5?76QYJ(<#JIV44N~|36`fSnt z%UXAg6CiZMD^}_pk%q*TY&70N1ifR{6zCpzl`Y|JQaXinjEhGCp*E$Fi~`a)Fe|GE ztik`|m8qQ)QV=V(kB)}0a&~o{L{uejIR#XuU6jVJZ3_BUw0BZ(;wTy<3-VSE_D+G0 zqsO7GBJ`$s#ph+&W+{$k(yq~Z27Oc;U_(xV6%?#Lb!(!Jddc?13VOu=u3+&^Oh8gY zGLW-&(eBDt9q<_2b@K!nM#~R9I(IQUm1Xm>(PtY0z4+$LLBqf+%c?5=7+dQ2bUcO1 z<K|+no51zK>aXHoP|Woe9L6v#V*}HoM1WkSyqZ*XDp((L%Yb2Cq*ZHss6H8@Esmp& z=Fk8)AMDzuNBTlpZG>Bc%GQO4SniC=?RnqS6TZGI`&E=dL3tk|Lfn~e^*@EWD(;be z%L{Dz?|D9V>tE<MyRDTDYgNAH29S8Ed_?me3Hu&(&aq#$U)+)~Gi8J<{tOQD{KCJW z&^5HT9ts#V08IfwD$=(VrR#B1lX#k$>E^PQp!Y{aNLO4y9HgPKApdbmLW<xN*K!e1 zj@i>4f37F!`!>K+C(9>ReVthPw}{49t#rJN%X;BA0<1lL;C9&^E-sF*K`bYMy%OYY zJ8}i+LE)s~jw5w7B6Ldbce2DIEM7{&@)t}0=eV1@DK^9C=cM{>yGv*W#qffW_@xI; zsRu(7GTO|gVmY@3k|}7{^$I)*xFqFb+C<MJM}K_3T)#(}+e{L(^$!lQ>~nqt7YSAB zbO`%y*o_HQb2w(B;KfAk9YAz6#$sB5{w!;yk02(CH%lSxhMyRg;+OFH<(^aXKfD|R zoc!UO{belA-zDFHWv6cOG6g@UD885%*3H9OUT)O=05TJQb&lJo#}*rcl?&S4?r4Yq z6+Bh{ll^kM9+Du|+s1E6ZYF@=KJCJ_(FZXaKE07l-Q1k}T>DHTKtPPod!g2jgnlbu zF4fz1o#Y>0jx%i>-3I7~81bK_H;1qF8VwBf0=Cz#yxh39TS#ppwz9%`Y(0=IGOOZw z%&PNp_UdbsxTxQ6jEwwCz@Tm4OiUc0dD|kE2irW#kn@BK96yg740-ctS&|9`Kg#Jn zVT+;)Z?$nmtaah6Si=fnv0EQ8Mem00z@nmWLfVCE+9VLxwvB)dCB+UuC^Ye96sDa$ zIAoEv6tX$g8;H}-b)6TTL|SsR5VudHBA04Y0-CZf3uU|>-6kly(==~IPPE7pFc**} zlSorMBcJb%h_%My){WPR`rP^CiS`S=l+C(=F9@6^(7H)+4C7gAs>dY?-dg)k+)B2~ z5(LlFQmq1UP3Fnu!OrQ`6p|a1v=&jbyW`*{Yma(S_2o5ad)+29`;$|xwg)~7)r$hv z<gfyyVGlOFkwwSKnhcZVfCA5oQ}&Y3KHf>4ZY%m&iZrR|s5gXT#Jro8vpmMi#=3mM zZ})~#m=fw_6{6hR+BAs)eAmw#RBR-=r0YCt=xOoSTnw#RD!m8-_m#F^cLj<d`C{UD zuf)N~;cKpb^o&9(#Nr<s&Xa3HtI1;`jqkKnZcDKTpF+K|4?2<0Ck`?Jr21QISJ!ZG z(cqWaW8B-nx8Es6e?R6*2^|K-o=VLw=n+#Myj|_;uZdAo{YV*^_jF28^(&;%5wY!y zha{ea#xJVU3!C0{TCY>OH)`wNTw-kCRTIONcJ2>>d#SYKe8P~HHnE>X7f;~m8F6Tf zneAAtTtnHlpdK~i(bvdzeM^Pqgt@2p<K5-e)Wm^uTPpv(rcUah=hP4t^KDmeagL!o z=W2@<!7UilRnPe+v;@YrrBmG)E*PF!axW=mCTYV8!ic<6;jA1P)AAf+A>PJ^UAZQ= zWjWarmHwx%HOe^9d&g>l-e<>Ne@tG0U@K~E;7UETK5e{OsjT}4amh5g^RxEaSOd`9 z0y|K<aP>Rnh(o4pQ2KEBM%ASoP4yBN8h@STp1ckY#Q83v8MKx>w6t!xGJ@(-g2d)B z_0wXW^|BhpYz)-dTI>^Ao-P%Imm_7D;1Lk})=AI!-tx55;Qe%q89^S!l!V#?9#A*M zfoM<O>rk8)WG*v*Z06=4@>W}k<4kAC1{w{)KSPw_iNs8V>Hd!9=A|7eU$M-7gQ{B{ z{<ami)x+$iD3%a*TY$h?h7`fqGuyg6qz@b7LoTu3TAN*-Wa0p(BVDB3E?aZ0W}*qF z<J`pUa>1rA9xbJ%JSFrzDjBT=aAXELj(TOijkl#<*|7DC7W~j#Hvek|d#BTF>lM%7 zvywmg7^KDoQp~HM=xtFQ&QoHj*|v5Y>=6I)mBR&HhdwpwjGwp`Fc=tNy^QzQ)O#@2 zRrGUDe_D?#4KkKXb|Ro|{zl#*o)yL~#y>pq86Wld!#G)G{iE-yUdpWy&;*5<C^Q_} zqU6_9+iA0<oH`DJ_2>8p`GMD3{Qzi*#K8`&@fci2Vz+#`J`rP7QJ@FT3ZU--_RPfH zhv?2~@&m-%-q9(`g=yCtnpYh^;8Te@cG%*O;SnDF9thjcfwe>2oNGBxH-j)yQ4arJ zG2{S4TreQPJI@r>y5RW1oa^hOv#ND$b&7Y(GTGN0qQxqh8p`1jAq<m?q=hJoFQMUi z&19{EwX=I(qW+;XoAbF(uYUT8Kpzzlhr2><5!<_W!FCJlzoucWfz>l}JzkfulsGCm z&T{44^~2a<xJKoeZXngjk%U%#{gFbP57YIZQo1$SEE)6emCwu`+Pt;dm(M4Te?MtL z9Ce4NkPKS<tP0CHXRN3CZYR#%Z+^%Tc@dqKr6!g==7Z)UGZ5gha6qSk>H0eLR>P^) z51xIqRr*10p0g0rnJA{~7`}S;6=^M5>T<DQ%lQe1#Nwx)H>qkw#Z((AfNN@AVBUm) zDU9Ay;V|qW78`J}+U~*W_*I5<82t!twDi-}g9@GQroQN!9Oe$6g=@2JRyU`q#Oa|c z`Yfksg1-G?8#bt}VTLVb^H_@0(w+TF``8JBcFpKg1~5}{NOu&Xl?}11Fb7224i<LQ ziWi3Q*t%4oD12i$MgYZUk$cTHaDQE?BJ6t;P?K>WBD=9Cs7O!wIa-qzMQpO=Y-e)! z&?L9+kDdPga(Fn5d17D9yhmM{<k|x--7*fqcrYB7x}9HsH>*xM2{Z>2EfAUCm%2Te z-X1jXFc?obv{a@0T(`NXmd)W{e6I)SCa$Q0%PbJhJt22VLM?u5C(AJc-x8inB{A>M z4u1CpuIr>&7ZL<;jvPr0)bD-^CzA77Bo(TmB0l}>btCm*J<2)f@|OBtVp@_De#W$^ zxo$GI#d+EUy=;=mYmFv=q<ZF@tig=F-RLehUW48g-@~thEpLKTjvgz~0PYjvjz|&p zJC)>%g@x()C7VR+vNUOfS05T5ri4Hp26(Bp<^;M(0yx?~o3}QlQ+8dm^F*aI{^8*& zJz~`R!_wcZ=;6hC7>^2-zHIjK7SB3P)0J)y)*KY*V6v%kwx9WaiC?0*A4&@bJ~crw zb!D@Wy<CEFH+rX6YH#OB9Y))&NDl<cf*<X)yR^!9=q#GVdo~YcTH7>$XTf)X(N$>! zS*2{ot^F!e-rt4)n>G9MM3nF7`36c)K>H3b^ApVLqILoU&-JgR-iP5NMu0v@Wl+N= zi6`1Xm#vPAU-efgDN&@!lkIe5hOR)V&LF?~F?XTH^hbLuP01GmgpzW9yy!NUJ{1^} zX#bx1v3$p|>AkCL5{rB8r)_leb%@oUHs&ceWxt$q8w6UXp$03@a137)c6Klqe-#yO zL#!;38j4v~zkz`Fs9y(wgWmYx<t=wghYvrTYkbpMy*Ft(TybxorFVqlvX~RcD~JP> zT?$C7shBeN@9_LOXWL+Xsyx(oRGt4f^659yL3;Q$+#z{*TXrMuBsncU_;Erp)1v4? zbd4R4+rkYbh|rvKMGJl{(Q&U_;^1Dvdph3oN+{k6RkIN93!x)3PprS@a@%>hY|Rjg z1x;JzVA#vmz>ATg+wS@LJAA(SV~WtA0I?t9zXB_j4l2Nh;_O7lD9E<x!pR-61@~Qv z-TVLvkr?MOo#+gOtF-wb$9sP+-HMS{S(h79-aH|7`(a1r#-z7PWT4AptKi?K_gf~_ zFCgzbJk~2?h$;`I%G~NWGXz!^NxLr^$r|wUNvoD~!?b8kUDR1dYwi?(+H27LAHr>j zv*dimru1&`^@mKq<#{wNJUHrlv<8T8UO5qtIW9VUjyv!W!>?>B@Pa04qYR5w0uHM? zJ}dN7jRlho{Qsf3iexM60v!1eOFhIck22Q*iM*-=joWo^JdQ0RFC<1En?bwE0aD17 z&saGw2&2u`$%A^dZxNuUq`_hI{o#)b3157+h68_-?eIMCPENb%+B35;u3Z+lbb}!I ztd?BUfEShG@l;X;1Yb72GrYsM6s);)-_1*?wv5dcr>mVS{m?wM|Fx!5%nY$2k^rXx z41jBQFp*9;K&H|*cHOb6A(U5ScKb<pMf<{;SmUU#6l+lge7Dx)qQm6Sc&3MfN<-*% z2X{KV=0q8{K`Om|*&yJdE5Fhk<+0e<9HSDUczfZc?=?Tt(a8a*8V_MYpz)|^RSn*x zTtEij&a_c6F;*pNEJ#Pqs4VU?I``{7<_aPfM$S}3t7<*Vut`&3bo#Qf>X3F{7oIh+ zf{Je#0)})ztS12gnyw%*9_WLy9r&%r2>*AsVRAo9I_eM)w#J29j|>|#HV2d{+*hhT zMh;#08TaGhwna#72jw-<FrRS7q@Qyi5mB2zUvN<J_*F7!vuLYt#b&qLK(S|mMXpqe zaTwo>X4)9`;%<tcoSOjRxZeYTml6kr`U57iVR|=bU1a`-vMc#n7mHas?lp<|_?Ge| z+-ivTh6U=9DyYJxo$devsMbJ()mI5z#qX#-#<@4?xIOI00ncG5x`l(d3clL6*!ZVb zg(Xcar~%^<-n{ZLHDQC+e<S8lLTpFtaW!Z3)1c*|Y;$&iy)xC;=8BFJ#6Bm^ZMSjM zC#+d$o7G2{U#Ys@C91dR@UjK-AH=uP>Ar~CVFrprGpQ~V*hD-p`ORRxW${vXH6G{5 z<Dba>Lb^BD6`)i$twps->MUVcT$c1Ap*0GD9$^E?0~&KpI=6Mf!3{&tHq)jL+IJXy z2`EMc{K;eu*<CxHbS%*Ubn~i@<MJLq^EoOH09sZs7t$PX&a3s{H(<~mvG=}UF8gqA zc3?hF;aTZ;yQ_apiz0zXWXTbeAZN>0n|WDo&)ye)fz&65Bn}8VGS0O6so$7D8WeA3 zl${*LO)I?T4|o5Z=3J1vAnEW@y80YN)jVhBzuc1mG*g%vu`NPX3x5`(;U!VyuXmwt z&oR1}nxAq!X0<*q-9la|AdednD{H>l%1!;a>Q5XXG28r6tq45Cyu$GEa+8?ehKRe( z3yt~&_zrQwq8Ymt_Igvk%N(75Xw<Q{&}vE4d3VsNMTjU^+67q_W{S-)a50?YA0YM3 zWu?buBaX_{M082*Z`y>(bw@hH4$?I=fdO4xmb9Sl`3zb4eF3)%9xI_h(x~w1^q#8C zx<o5jUHFaU`O81QLzWh315AfkEU99xB*}adu+75BkWF{s9v)7K*7Ez%*1H{zzKg+( z!JLg9!&W4_Y4fL8oi4kZ7EDadF6uTM6GO8=>tPF&qoz0vXcDQe3^>aMc4F5IP6f;J zwJ$cvmSw+ESfuOU$O$YsRa>`O2v-MBBT(JSCTZrZ7=hz#q_M!RpQnPf+9|Hc{4G*u ztR;Xry=FclfxO*>P4WsBTB$t&pcijubbelg-WPMi(?<aQhQmB$!Vzo~D`p$AZL6c! zI`R792bXJ?1R*MCqDB8n=xSWFyG+jfJ`X0nY{K5%<dq>^{F(0IcA>wrqtENX{PKC0 z%8Gn^VXF6Miel}!)P7J>5S$^naNd&7zd4oa!hL<^)vuwWsG|zSMX5-n>0(g1)5D1x zz0bs*p7B|WM>wPYXY^znv9+Xx?9@r%h0>_9B(u!2cw^sj5BCZQjd2X`WzMIfs6pM~ zIW8XEVXMCe{u=c}09mpqrefWyxv5y?qQ79<+LZ=z1_%6*-=F)BCrmJHVpo?sA7K5( z#654f;d<iP`Zcpy(!K$jq^PUmutm{q^@|ZLQ(#R5Tra!eoVK&!mIVxZx-8c}=eTFo zYMVxMjxn5OPI)ZpHz$_L<%YPNf6H=nC&lc4m1g@3<wQKS1K`>bE%pU2rKlp86J*-> z?MB@N@5?&p0OQ6o(5CE^)$H8#+^n^>(9l==3kjcVv?I7&c9P6We^NqJ-HK722A?-F zxc#kQMGg|~yBV9ev9m4iRq4k5*-&;6mdw;uiO~5zZ5Dnt+jXjgU&fwm*mxmYxH<%k z@U|mTn#K`f-Nsw`0X~j(%y+;}&_8HuJ-502e~~=aXaV=EaaC;$4EWvA+;5YT)Zd3e zgY>CMl;V-URZ^5a&@aRcK0S`&ShCJ`(ii0e%6!nMsL;7!n5xBWgs;9sUBtk~!cV4p z<^Ah|X2H_sPtw#|o=FQ={1=%6$O$YyZo`221BouFu%vcpCBNtT%V`F1U=cB*%WSlT zvB0@$KEu62Zp$a^RhE$DE9LlBv6?(!<Qg8rhNDO<EpX3nD!XPW+D`KRVJQB?vSToI zqfz-^+|m}dxI(3q%7fb<21@CtlSnNIYAUkhx5Zr*kB6v!LNn*>yq1K%&iPwo|5DxI zJ<)~bzv7FhdR|ru4T$yLj}<pM_=m>KZ6ZEAcOv35mc%s~)gdyo7xm-U?1>X_pFw6^ z47yT(;Lq#hCI4uajfEe7xpK(}T4!JdFi0@`<Ejz_9)YE`=oYgkt2yVB@-l_dA3U96 zxh7Gpq5)eRU)6;G5F*<Gh{8b#=7Q>PN$@L~5u}wL9J?=ZHQ@|MU=0#|3{uw313&Z{ z#kdfi>>~6yZ6@r!5cDfJ)mPE%E^MP}%Jp`-k-?1!hopx>#&<i=T2Fg8wK@AZ-)Yla zq@}qM3|c$Eg;Pwy@tA{M2Dd=lFaFqX)<f`Mhdu8biEpm}Cu~^Dro9^-(WXES%hma^ zl`SwLP?zA_!01u*D87M?X9Y4ZztIGW`0OKKPw+0BmxkU+o2IkKR<*xcVb!wQg}(@> z6diE<QRhZftO1ss!GB$F3WUws9QQ<Rb26HU>jmzG4|`3#cX!}<t3Ksfy1MZKo!Q*T z0O(P?zhc|X^zQjfjl|vfj9;5d?;l!qDn!vVh;{`4J0F|6ltn4-bx!(2)|4ei<vl&! zxa$@9g*U~Ycy!qQxb;iTb>Tal#tn7NCw;U+-T=7ik7ZR)ljoK)gJ_h~1h~zMfHMZL z#l$*JoVuA9_3}4+b#aI^4ni;4fuoD*CzdV+4~Y4y#VHsey0j;rhii)0pFGZXp`G~B zC7(mI!`C$ur{`C{*Lo<N8a92JeWYFeCAV(rivQBLEpwlROJrPEMp`+*0?_^fEwWpH zBE@TY)PT{<&kCE8{^auyp<YiAVIA{gq^!zuiX}l`#Q^A}mI%Yzwa(MaDBqQ&525>@ z^$g)u$2=E>CeL)wv_rFgff%9nyp}U6=lr_5a2qZJyruW0^)w(o!(*~N%LR~sK+u@v z9swJK>wuaH?9TY|xIBv4#p-3I^7{sAe|5@m>ZKK}{$;6&E89pue7S6=^2IuI?o5>U zXYOkS(VIVmQnsw+%#%WfVH_l;P>Pao9wJQNqGj-hCw5iky>HirbFY-P-Ehu%CDxW! zR<^b_)-yezo|$NoBon%%x8WDjug@2k`j}daG3e7Zy6N)2n;mfakhg?<M`Ll468gUj zaVlU2;3dvJ`?j+RXVfbz<lBQX`qOV?IL?b#YT?c-F~$n4k;a^1*4=P30h%26F98u1 z?~QENNucGI5bLGNj`<E>GRW_N7s2L>V=WY=-SxGTxI@-?R;b3x=EXgQu?FYlhSZ<B z^VPAA=+Z5*-gN!sFA&pBcKW;(!c82hBq=ltH=@>5&PpDyx%9G$WJAh*ef|wUFuOd2 zeqT0k3}IY{#QMhPuqhj1yk(F&ccH50ox>wYiyNCU*?vjlDS;QgB({6qS;u6Y?=N4x zxX=yI@d;WM5ZOM$IMnR*l-apU*Y-bIWe>e%&Ame}0+RoalZ`g0Zw9GHti?8EXxA0K zYz|6!$*B@xb@LvF^l`4ACx9jW9~`#wuXX^pRTj3Xcz1eQvw0=M=~9%Mo|;%ZG=>UF zW~%uvS*n&E)Zi0a{|?pBji{&wH0yUzk7JESF?>Md|Ht5_qk-N3_-6oKPqeVK`1b~< z&(TS0w^^OpI?VFRJ(DN1Sf(%vAY;vLJ2&I3=xrchBA6^*SJmmK?)Pmz|JEYz>A#8L zfBzMy`Btw3)SVNf&JrM$(D`@w>D{a<^^ZlfF#en)!b3Z3U5glD?q-h>R5%R9gG-#Z z`B9q;pi@TQI8wAdM@<fFHPs}0{uIS*nizg{gA4uz=iL%ViGC+Kp?#P*08AV)VaVT? z`$AcA?WfU)70QKcMvC5JO(p*?`0#)FMpVf`*WN|wS=5`fm-lD_GgefUNH@FG`6pkD z?+0t@$9^=O7G|v$e|iBwplc*xKZUdVe?Ax}t76N_DYE9b)IsT15Z67jOVO)*k@`mU z)B!z`U1yT@S)og<McMs-XwZ#5u{Dv@Q)vRApLaO(r1I_GPDF)-$bFLjO*-?ZBX31} z{@b;(3=zcbw_n{bcD0&Y_DgfVFL^9jxn4pqn4@7r;aOtj>Se7r=LB_E6_m9-=(G;t zb3oF*<)$6MY5X6q`2TVzK%GcEa#A7r{O*JLiS1oUNUiYQUXKZ|6#G_os}87|(9R6a z4Y=ciKXbCoHhNWe{j2FeGy%WgU+Ewg^{7c%lcb5O`GuQJbj|fhzl=}(5T)QJp?vKp zlfoF1<jiAIEhgNqYkK>neD<XqN^E=HrdT%Z>Nt}Yj-^eOjCRBG1U(u%;JIm$9c=s@ z?j%%Pe@8Xv_RQYEm)Bjzr9cU{`VlV{#I$o8E;J!e_jgBb#-h9aCgih`*9q39of$ta zZ_NN^bymhiM&#a#z^?A(CbM~uGV}<z!|k6Uh6!rvVYPE&`jb9cFU%$~2Wqpi>??ZQ z_M$B6)TLSnR|xy|zW%8*<tZMRTv`SH%(n4A`X=(8=`_eD^~`O2H0{CFcQQ$dI=5ne zkl@ii?U$X+IeVL5OO)kqPW=$vH&RKl@x}EhmF?@v5B@`Q0g;V+kRYX0;mG=ZGWapf z4{z(hD?YkH^a;5glzT1ikg)aZJ*bm+*_@B9$2?P$x=>H_j}|79p|U#ziRXXBePk7o z{F_a#KtCY~6_yicp5j^{e$_K|S*paxpI#R)BwYwe?WGQ}vetuXDU#zI34`KCv}#}2 znBOc|9SrPwI1$2o)46dn2)3T#BCVh4{Mfsi319evrzm1Drl<^qqc_VW&v?f9(n4)6 zJ<;hB0D>-aY{?PuWa4Fdr}{l8h-^X*(;e|mt9F#|;BI%al)V3<=-J*YCHmdevK$7a zc^%0x+`rTr#!ljytgY#t4drP&N~C!dx)u~OPWC2U>FeDsnfY!XT;$5>(8*P*KfxgA zu*SnwSuxgfI72Yr%t*-fz{9V(aqe^a6wa^y`TaS8@78I5ge6NO@5Chea|#);S;q?^ zN&HT5DgPspJTEQL+!If@Z-)j#0ca^+wwIUD?#70+t$YR8hfeh;M_}P3pwkLamkGOv zSB3Yi08F0ve!(rZrJ09=><5mPm(PD|Q<LwDQN4)|cIxs=-fChAj8i=FtLsSdK7Z<a zSX==3{tUXk9$H*reGt{&<4}@Mn(Kj6f3ad2h+C&RhAq}9CG$h5d)l`X2gq~GVZXg% z_TwL|x~V9M)K@mPrv_Tj)I6VAcW|^D3ipCt0)(TMZWJp-<A;2cd(G-UuAYisObz^e zb_5G~pUp)E-X|0DrZOl!QhvF8+|rDwe`xg0sZjUR8gWPg9CLkeNrzZMw(AzK(hV6I zNpT4UAJqrvvlq8$lU@MxasHa|+96t-s_Ldj*2GQY2iaOmCkkG>F*Bs11b0=5;6j&n zhn5N7;0NDozEx?<+=G?rUkB-YmABI+&8G8;)Qrdjwjs*$XS1*MXl*_?gm+&3#>5>D z&=|_io741zTpSZFd)l&mi{Q_l4b3WT2u=BOAES(l#a5EPtBO-uNVjn?h`dLoOLD_6 z|KNN$G;p6s=V|rW{tsV9V}go`?o(vdukU8kf84^pk*n=Xi!$-UjN~Gl8W9G6r)SJ; zCvp|3hN!qhzj?u`5lM;=p+P>VXYOK6;>`Ia+*ybU=l-CcL-zC?$9h1emzLd8)b=uW zsfW;OwP;W;MUxy$|7ORb73;(E+EzxU81A9n+-uqN>Ln9k?SKVp%Gy1G8n1+&Pq~)i zTSrSiwl=ek8xdOPxZ3E|NH$>fL96Ujay<Yqytpt>sH$Ehr^BB1fWBXg9DxkFvg>;q zRpTsKTQj!S+L%C-e3m}Q{Na6CuY)5y*M}wfutiMND{@~~m7B6iWNlp~O;pRMXT*zZ zm!7PlR82xIl2hH5^yEQfJ`yf$(A4rjyo=VwmgXg1(rf$0a)24p$#B$x?UlYR<>QH( zZ;Z3<9yDk*x{%SZjFiqCmKyYRa@$eo&hru%tGN=mTkyksBf!$kA-^tgwE}scGyw>Z zu1&~GFj+K?Eo#fmTLoN=vaEZf^$0VOFt-W6h9JyX5wrTDx%4OYcSKd}{i<xsEYog< z$KH;g`L-L=Kc+4S+d3Td#qZK0(*6uZ7zd%Nr^~`7kv}v9h^4HMn?BVQ8hLJ5Wk5jB zEkS}Xk!Pwm{N;7NjN+PY`D8b%-`MP&KKI=R1<Pp<uax8`>#5OHFd33_c-tIM^kg?1 zT-j($a2*JsM+;Q+ejN8-G4pAU4s^)A6{dl6_myIDyGgpB{QeR1;)yoDtN_(_&io>v zB&Hl0PGxh;sEcE_>*5sE%@>yVQ({LPazr@wOtXd&lNWld6p~7Z^K>!Z>O8#5*B_}S za|m+%dRi=;CDOB;@-Wh39LYr}-4Vjy%=}QE-|^TXkzsjhx(Q%S0LnX3?@)ODk@%sV z5A@PnH(bK5eXTy7pZu`}X15>FoJGWbZxbEculjDVj~%TN4rIHuTn;B=`iScpa-4u2 zI>3x@uLBqcr-m6(q%w<N1pRBXW7dFxgl8L1QC!WI%IS`H=Ml5uc|LL7kMkBP#m9cx zXQf#wO9t<=xnpg{S|kX;ItI=emLd^Dnh*0U^x!L2iV%=H`ki=-UcR&Pd}X1H=3Yyh z7vEpd<!fN?t2e^><VO*1y@BfOi^Zy@@K?9S1jAPYL^_W(E;BWcUo`Mmumgdgj)N^m zkzj(Fj)sv1tT!<?NyjWfBvFN_vl)Deoc@U983r$NHs>ewB6r-My;c6o6SZIQ;*{Xd z$}3w<tf6w^ddmYi(k_4<#rUtT)CZj1QwzY{uXx(SE73HH2^qA<d!Q^*oL?Mz-HHl= z`@@1u&~HM7Hq@mjFg{;u+s6)?r9bYUX@W&fc|ZH}K$O)5kPm9efScTEZT{xoRCAf; z=E(hi+bT_bf!TJDNr((N#RIShf=;MveBSaq#3h$;O?oW+NDAe%b8qocleIWG>J4H% zzd2WnVML^L>18~*G*RJk!RvfbqTzN3Xfx(t5eNAn<ncZQUe>m8xrHj2t8!bOg_VUR z|3_{qGoh#}`4btKFNi<-=$q5doWl{dS)9~AN`j#kk7YFRbQbgp57&q#fw=CVAqBl@ z$a!+z-(Odc)2~nW_4AA}L_8;(NyXKYNRUO(c1YKTLqk(ToYr#q%x%7j9~?Z<kI}u2 zIaiP_mBihM{W*U4d2->jwU|%nQbgDC)zYv89awEH(cH3<1c`3(T?)EXaV`J#sC8Z9 zb-_v<&gTrQeERC+3vp)D6jE}ZO?69(Cb2Ji_m77pC)N#7e*ME-;7ZqfaF!34DTHrB zU13zpm%*f=((N***i6vm)ZsRrE_`na3yUWywLB1RB<6(s4!J!_&;rlo-PPcJ=PMok zMY9ty54^tCF)!$TBj>seYQ5NPc5A3MCx(sF#@pt{q8*!h7L$xkti|^$%8B7e_QZ08 zI=_qJJZ(x(lbm8;#YYwo!BW>^!MIz4D-Mn;I!^$G78$Q<j(<vE6wtt04ZW|ed3~1U z(0DE;D{QD^8Qf-8ttvz^#Pu}M<(4^zaFMPa*1cwb^kI=nJdDGH7cP=yMg>!JDoGLL zr7i*n6F%kEj|FyE)B8&ndEa^1+YSZ%swWvUvUN9wgrV^88^Q&}%n|~2RW}rr7tivK z2^gdnIo54aLIUt%eSmcs|64LXbBS9(QTx`wHPlseXr8Ogrr%|6g^vM6Y|C1Hqig~^ zD8D}ts{ztc>}R53m}E6jc(D0hr+Min%_05v{)I^2C6QVaD0ePVhayCK9~;u~?9@D! zieCNT2jBBr-I+lnPmReseSY(Ih)E=#h@{fKqEv}1KUh4($wG$R@l)A4NOPq!<a4wJ zgBL-Hj$EogHh58S-1=ev$8{Tl<l2ou-<`UG=kVa?GEf&U&Ow&q*A-tJZrJo@EzR*C z5hQaL`}G0+g5TB>UG+rnB~i7GXKq@(RN)$;e}v@0&_jmO*dTj$=W-LdINM1YBi#!t zk%4RZ<aoa&bmY7uc-P7ry{2Xi><fEN)q;B1LU_Ls>!aIi#g7|fEOt_U@RmIW>?!xB z7b$uq5rdHse&_5PO*Jjad!|OChA~%N(nMt!ip#+)h`OzZt)~*`@Y=H%2D!1nyWjHd zw9W+_mZ+a2r+*>$8Mlrl11VG=yWQ(FesBr-)g&-<)`zkw0U_A79wk&DMZl51%ab1V zH=!-o0badck>bLtua&)rIMcgJJrw&CvTvpUMSeytL9UK!QTJO^^7Z1!2s)Mnn#lz= z%Kh;crLy17Nz<^+rUOEHB=noM%Xy}y*WDLkOoEdhvIMnKa>h*8G&Sif0%hK8>|x*b zcUt9>?`1*H0cbtQ&X!#CJP*+ZVVqm%y_I5|eN(NW{_ULy>$1ts4kDGC7fq|l&Gz7E z_Zlekx-u@(6O-vtmQE5$xwC(*?7sX)>QC}sZy@w-O+Q9HKv+27fx;n{bev+N8^|x^ zZS$*^WJC5h;LM3p<pWj}k0ieyepDY8X7HJfzVrOp+?LSJ>cR^mE^TE@4kr~A8?#GV z#`@6s3pc6^$3P1<DmPEo-l^&oIvd-cDL913-QRcNw`BNCxlP_E(Gls`y|KyZz9lI8 zTPj`Li7)B*L!AkEH>BwJ4zvqS`|FvO9H&}kG}=V!if13TX>cag%}KsXM=noL(wIeZ zC-jqOf}UD<KwCY@|CH`#KsiFJCoRx8k(acS?-&<YRrW5_x=n~2UErL}fbQ{{v2zXN z%KNc474>WK1%L(py6FNmz@M1Nn$YOp(6Zpj{!^n!1*(5iHR>Z;(NlUx>9DL-fDpI^ zW2wjO+g(Pa9sXMW7HXd`+x$jX<h=cxOZ;^qT!<wD(otll=~!MvsQt(C)wlTj$#+=J zn^0dg1r#J)f>~M!>N3dQd_%LG0`o7V7zMljveoYjxj~}C<n>x=Z=b(#)8n4-?fLt= z$5&pKlU%WVo!B=1I^u8?+$XwxXb^f;I`qnUjfM0@lC5oe%yumky)`+-puVlOsv-Pk zj2MF9=i;YlBIRCzIlcP9bO@#xfX8aU1pV0k;$-!Lb7FR8j8e}tq*pSPiIvRO<9A|; zZO50(4XTb<ie&g##V6ahdjg3prrnuGmF)i{9w|hyh)Yy`p+9&l@og7aY539pLRg?} zL@cqd3u|StJL4YS{*mX`T-(b-Nkf&_z4a9BQoX#5WLU+=pyDsjs{5Q@TrHu~2TPBH z)czzZ62wEKh$O6!6r<aiMItf}kV4hELx176Y+wSpm;xfnEcA+nOp8PuU=w;@)_p8E z74-nx0bZ2dSPHPz@c<+!Y;`oNiL1>#hZ*0ckh@jkVQMlD`qWfjmQEwhfeFUDVMF44 z`DeE#ZESv$lf?d$lE*sm)FBsgdf#D_PV@`nYEGdmC$?1(;-ZkIL7&R&)uiKR`h+}* zW*|?v!EQB=?E0u#>r6^~W|QFA?0zy*H=EzP&6Tm`TKLshBK3XB%+%~ce?w1e^+Q2; z(T9Qd%qxp>OtF4}Yq3(QN{;xP8}Vj?nZ?Wc&-gfK#R2lI*H|;0+3mzG!Uy<!ze6#x z+im;Fywo?oB2(r(j-*Fwk1jThwg9sU&7p{8Kp0y<kG|wM`3@x2csxYL%2iz~y~~Vx zlcaOF{N%XGs>QD|)rL0N>Xk~&f#@EJ7im#Vl>3Ihj_~fjeD&|~T`2R6@}sF?aNF?e zMgKsx?dkAj8ygo~pm#l`dG5o{u&tG5sV$h>S#u#74FH1=#jDEV@iVllca!gWI^2?F z@{I?uRH2+(l;`DBWU$_Z@3CBL=?CDb>w{tuS7@%z%z5_}y4C>;l^y7%qNp;8QhDq9 zq|1c3%;(}sODY|Em2rWeCQ%nC4<dWB!NE>i#KStQ<#UeA?f#d~UTLCLjtM0QYeJm* zomkW0n*gY`LD{``-dA{3_r0&i$76YK{91P_Tc2W6RzeQE*kV)Jd%K}#Lcn4L_ItW) z_GJm>0Xf%&NCnqyP17}C>9oV8B+}-V{BM1tdC53+0ICdH()W=4o~|y01t=PitLlx0 zShl!+nk2G>a(!F=wrlC9u8Q@&&AJ372NAqIA8ItYSp(F)Hr{8heGyba=aXMe(>$|^ z(+Vx64K632U?#~-Cbv?(_T?wGl*<#M3!%lExF=SY_nW_DJPm(h14||GF4@*ww=<Ge zx|P#Db=~oM!207h_3z~Z<1S)pHaj^!e=B1-gQuHqTD_H%o;o~{`}d14_3!mZ4JVvC z&i`##_&-h7{_h`SocTZGX2^MSc^Y@{6it|4CZMA)=OYerovc>Za!cIU%yQhLpQW)+ zrmPLi0OR>#S(qs)({vIZB0!O7Y9>zpiT2BANKkBOc>7f5Bi}&i&HAk^TkyZcM%Bvz zG&~l4Mn_0LeESbgGMb2@cIBKJUkS5;IG<r!AUwl&;CapWnZ7auLdD9HXJw;Yi@l$J zz53xzD}qCSCvfs4LzfCw10u8AFQ?=`iYaG%hc8ezINwu!t*Z+cDEfzQF6k0{hhH)m zish2E1*<6H#FSZP2M^I1K#2|~kC8nq>~A13bxEkNL4F@ujYW6-q3wpGaPEcxL--#& zB={KuvX5aUm&;X#^iyx>M$d>^3Kq=_zN9`g9|w%@Z@BnjM{b>pYF6eQPO$)R`s3k6 z+8+SqilOgtF~#jd{l+<fJGM<|WjM42J|GB>E*Pf1AB3fp!Xz^bU<<nO{MMR#G8nTf zUlv15*V;hjoMHq<JJO7J6k3}(q-;Epd{#9iW3osbr-eNwdS!)hB45^7`_<P*%^&-1 z|Na{t@ffo%Hi>$P23W=bKe@siwSFv?afWVR&fEeYasy52sFyK?6?pL_l0UW019;vF zf>M#Yg}=#Li><%Pc|YcfL?ijUe1!<d%pQ$l{xHb7DI5l=MB+sQdMpfm73<OgcVQ}W z#RIgLb*^$Pgu+w+Tb>xE%hX>d+0Fh}Q>=f(h6MV+^8!cq=wHpvXinD<5u!WpI)cfx zVf27Ygx{>S>Rg_KYT`>^3kB_9Vy=%sz1*7fT$NRJshVx^O89dAE=1P4?hX(OKorT8 zZh@XxQ**AYQr?W=Z8_jn&Qw9k!@)J4t%9?hgJy{!JPhq!WYP1SMWcLrUaG00h#m}U zj}MeU`2TlRaGg%3V<`x*i`l9H_m2WuRm3+KIBgfHFH#Nxd59!HZT;}>3~Ifx)Shq@ zMltXvw9@y&=l~Ifcu~dBa!EsG=NTnH@GGmtF0!5ZW)H6@5Z6&XFrFMulIf?1gxgNX zlkelC<J(d<YkOUDZnQx1$R+>KJir|=7~I)ej6ke3XW8G3R$TK8RtTwG!UkeLVyL(# z)5GXs57bMadJXxOP#pgq85#B3pu_Zr6l(ySK)Lp7bmJszTHlXl2_Yj&gCcF7od1R8 z60`6q=hyYXYjAsg?#v5)LxZ6q1Ee((Z=lGee((E-#<O&$#eg6o&^c|rseDFJP;m8H z)eX$KPcL{T*3s_V4t5E-O@?~I3oPA29#?nq!=Qx*jE(2o+XgNMrH2aXhVYUDEkB70 zr+fbF`+QzV5H}2ijKY1H&Y@!!T;e_CeJ9KJj?%hsaNhwKA!TrK#>qwBQuqy|Qi{bl zk!@U)+pmwCx%ndWvpyAEhfv_G34KA~+|Xy7lOIndQKh7#vpCsNVm{T7i%@jdj1mQm z3>XICE-ob6`&r@#JD0<%D`^Z^1HoQ7gMe+MJ)ti`)rrXTGy!K^hqi2edwx2=y+1)X zu8GQxD@MwU=VF2J4NAXB{8sD8Qe9&1_bViidz2x6Glfb^OAR;A=I3wa<LUE4Ln)<0 z?Jhi57A(nn<@z!&gOwq59ZMxLfgv0icJjxiEPd;<Pe_)Cmx_TC<sRO`N?r^yIX^?~ zOxBfc>!S0fHv9mOzUuI2@j8xALSfdYCL2Zz6#n+MTMXrr&YsUwno{_4`xX}p{D9{~ zzOhA*xYgCvI^)^cR2^RkH>bUdy6aY$WM<;vd-dJ3w=$P1xR#JEY~R~KeVpOi<I6PH zW=(Qv+m{o`I@Ir@C{a?*J9W_-GAfT^GU-s45i9`3cJ^H5c{NspbfVJ2!j`}w*ET+~ zM_DzQ%fvwR=uw7-uh35RWPGl;pun%;_Q#V_p;d!Y+k>7?o8p*M)Etwf7#AKw$+%Vk z9Q;=E;~^+nznGj254AE(|4g?0gWOWW$NY7hvX5L%)@Y~zp7sJi>NR2z`Q~ClZ<uN) zfxy63lsca4f32Ho7(~#Q`xeq|-!BMnxFa$$50KPKH_$X%jP0SSN}zA&S;osd&uy$! zhyl^haa+rqL^rlTRegpNyngCSePfb+7vKWb5~a>U0RY~JCqNed<ryMUP2RI0X2;{R zo|;bV*XTJ(8(h$@e9IjsP!U4LC`?GzGUQAbefL*X2K|clRnHNB{atmW-|>D5Wx4w& z<jl1B^!dLgpWgt|Yzz40!uy4p3p-@rJbP*wFbO&lbsZrW<dN$MFT<H4pLVrR`7zt{ zN%X87%*x1=?7h?d-H3TsAO5U9hUGM=SR)6}$$d%+`c4&YBmvi2idL<rsW+9Y1Dh^# zS<d6r9y!NwQUn;SNJY0io(2k9MfGSxDZ3Tnws2P@dl&o6hA~2m(7G1q1E>ePeOK<; ziAu_o39cBEZSZ9e&?)y?sCF1*ih_Xb-4wpnvyu8eEZ-krgCQ%-DI{yuwH6&hdyJWK zc59K_C^<-1zo@RNK4w5A($T008FzNPE<K-fs=Vohit|x>cnMO!KV$~oVVH_gpWYQ9 zJPrX3h732=VG6%5nT#Qoyi5P!oL(X-o`oBo@N6^feIe1m^KHL`<R<5ryAE9l9FBUa z_*BEaXYA5E%t$drFz_Jf?W-Q9PUxjF+DkrDb|l9O)GxTpr-G>dR08~zy#lpwBfmXe zOW0^K-Pw;C6RMGt6+L)XVo1LN3&Pt)pG3y&TlfOjTU?fahO78jsTuKcAwwp{yYed# zdJY`EsMpQ0-Yv)?emC87DChPEhXLx_R`Ww=AWVSqsFO8CDmu9lGX+@CwpIQ^^L!9} z#s&iH%m4c3+-Tnhy8)UCpD|t-MluG7c#K30bsm*!d4_>3$J+oYd>i}|_ibb0FH<d$ z`}8T{0Sh}oj1tu9fgB7-o$>JK(Ni+xP=|NWX95-acxY^S%Z*d1^^CKF7M#Lip0+c- zcd2P-`~=$<hcqn#R2%B5h8I1a$d%5Cx?G${uM09$c=s(4t)hM=YpQ<1ZR0a_D8sL| zg!$RGx0_lC1!e(vAq9XkLwt)0ins>_?Ck2|vi!vI6<X-&G+yb;P`NT7-R7gyg*iot zX3ZLANKVn9Q0xBV$n*CTs&Y?w^1c?u@5|v1g85IV)4f{;h%{)eVNxXXL!L*=d*3l! zWDRe|wH+nWH3HUo?XAA;4?&N_hwG*5CDDuFt9sdTF82L8w;a83bS)=qgdhl79({Rz zo?}wp7OMXs&6{Q9K{GpFzl`$QZp@yC=BZKRSqYNO+dJ20z5eOO-#+o1LsuhAE<=7j ze%$pB&7}1_kS$XhNa<&90IK&)AQUJkeoT|us2xY(6UH7bA~_R1ok?J+R~=@Id!oI= z%LgRaC#PmA)>a7qzY{xck=AkF|9DYvnal&+m6Qge`B|ti)f@!gNk{^S7!_4H1>MSJ z!mK=6?#Zp4LtotPS$Rc2x`V1v!dxZ4@7+DjBYQad0tU^mrU$*iXTIItA(aI#Avo~g zhZxA#AEvWQSdpFc$eG=De*R$6idRXe2ygyf^rjoGO{j-u;TqC7<&C|E<d$EsY9Z$0 zcwshtD$TD!HOiJH=MTfrD@S(WkiYsZJU}dTgPdJY_3xeM59@@1CVXcagt8gfDSZjz zp3f8S4PzTh|37OOm=u0PFy&AT*PSKMIGqEn=|p{$|6@-zm_kjJ0-Who>qAH2Y;)mJ zM<M`|Gg>VBEETnUd5P(i$p*y-`%yNfQ?h<E?elXGG|Oz=EM>&=C>f%Be5x@?@g?eL za>82iD>$Uc3yZ$uDZR)Dncv6nPg8JUt9=Y;!6l=p1AW7llUWq#r$DnKZ<_Bp+wAYy z_`jjRortH0p2WKPVyj_a8aojO_PMlV!+;ahoY-k<Wf?_`bV0F=eqzVHpjztiD@J_I zzV}KagS0xu)RwDHk(VCuVP!;gNJ_C{RS*Ip;jy5{r_ZiHqo>W|ad_d}ubXWm5kv-u zhPH9_&ZI6uBwM`gD`3EK0F4Z+Eo@x$U@{&rPaYd1j439}DL;@tq8~4?`_DaG^nuD> zzrF``vP=J0E{6xQ{0+$sMD_T-y|@3`f^|}5M%sk*mfFwF%(xb=j(T8xe$VnfYxu53 zX2Lds!xyfLBfY-5-nDh!+u#)*>xkLJE;=r01}P}NY~^h*CFkOUJnSsSeOs;i^qR*j z;wuyW;I9uTh|zQG3~#{9iPlCnlPDLdD8*^tpXO%X(|=-|Gex_QKD$wIZ8B$t6j{7J zMLngk=dke>yjd{YT5p)DEVe#yyw%nIH(>rY@J=70)=L8q0h@y1`$UgV{_27gdDVJ` zQ}5sI^6i@%=}}78;L}fgS+j-4km6~9ezoqEo0?FWQ)t?>B75J(4osn{ewj5H&<;t! z1VVq8eGXXeGiGrD?Lp(@^cNys79r8*H&RNt(maA_Qw}3!?ow!#LrizT+`<V<i|sKl zL$SJF#($?qYF-nCM700akdrz+Cq<1Z1OJw#>Q;RGhsKT#d~z3y+HU=aMxLJ9%dsW3 z^eaoMYnN>!=Vpt#z21Yo1>;(&Z~sc19C(w>=yy~|^j*ACWZNQ*&zp5eiZ7{L5%nC* z53@~Lbv*Ohq5#2LyBi4O1%nBHE*I8$olCFu;*;+~<U!3aj#I0R8C3>*f{HLg-h=m0 z@hw3%;(i}}P6gv@6npK4s@GSf;7HMc#nzS^DuA8mK{y@63{yym=a09K*5rQ!y5B+L z2U^UjT{b9mR_7qWvgggp3pQO7A1S{X7@{nJ{$v<zZYrCm{=F*n^YUHZ(D&div-SVK zHg<0}N}aX|OVQ6m<aaf_3q(cvl=sIgvqd;(D(TQ>ujK@Og)bV|Tatc#B%rt!riO%* z%f!Xy$aBx*XUfWcy@o;uGD%waKjj#5z9va0+}ABw(Pk`liEdRu@U?*7tzhVy<-9N% zP5|gd>THv>b~iW5zdEO*+!Ai@A6i@<_=GB(4cUPsPCM8DY>FK8`i62`pk0hl&Vf0v zC8FRdR?+6|)0EvIM>4ttCPZ4=IBZjz@cFPWW|_9C&m(z9)@N(fc9z(ZojODvjrImq zVSvZtNs-)*Ih3m|pX_;i#-^(dSJsiXi*Q!*A%llh&q+m!3x5B-ffxKsk5r~_eI8pP zUT4JotCe++lLx4^O8nJ>SWf<ZQvgA@93qCG8zul{611Tq`PZNMCtfc8?1Ngjc3}Y| zSwnIxoLJrMg-Ed>p7mydVvm!pE&C-!PLlC#M9>&Qu@lQHbC#p3mb*Ey@Df;f9;cLC z|6I!C1+5`2bh}A0qM5!EBrccd$8L{qdbmhUr>Q<u7&>L3%GZBJobT$&VU$D)eR*W2 zRQ@u&LXbmBFh(P({a@~!JU(`p9w9TV)iB{M&&Bl&Xr&wK;=X!}$!5(aQEW>a(&RFP z6HJ-7&T~LD83Po<Dd&J9_WTC!L@G=^p0CETD4-lw^DL>bdTxTTh>1*Sf?hx>jkicI z>Mt;UENJG8dcR=P&ZIKXY}+on5&{N17<R*a$onb~(1wmi=v3#>GZ^0F(^4A4!aUG3 z{`ONdguZLqboOWc<_ezi4tQ<b?HGqlToWyTVgj3q)?L)wb>tMlF#JhFrFFn=c<Xm- zC$Njpg;nwPemd$gAXBCuEJ9!mKdfkah{?6Fn4A5fRyo1<VbGN;kFn?~y=N+0IEAqc z0sgL_41OoCcJFbrp8Q;IzVqMctfo|xBtNQCffuS8^LBTItf>BxAbWjG{{4sYl3p`Y zOLg0xJsi)y{qihG2d~n&D)&57CFxp%oDtfCXK(t)VZ)+l3600cWo%vh;`1*Q?#%BY zY~wvgnVudj2DjrJ|30n=Myr~^LKhdJGN7US#1c0c4{PO2rb+8xVObpxcKmCWq+Q$L zuJ%j6$y}XgR@Xia37RdYrBe43`ow#iT#38C?Wh{_3P3ER09g<H4*VAuA_i1w&XA;v zjIHl%B#JYfedDC|jf*?$m_A3I5aruLi|h0AseRNDDlf^erHL*F)SIam-`jkCS_f3~ z*23_I;jvBQ#rwYypbbuH5@91E+Bbho*>zJP<XMy6&a!^cw=S@kO=_>~1Qs4ixml`D zx`gQKsjrjSy!-nsVhjh3Ph&T#6pDq2&t~jft+XfsV8P@cgysvU(8JoAJ57!kE=0A> zp1-H$HxzJj_DR>N!-mUM*Vwc7fhZiu9f-@8bv#o~+hx-1D><x{>41(8{WHO9?KwlR zqdZrv@@lHbR~K{X+21z8<Q1*NPC#f;ijp-9lv1bk;IpPe>Ijz;d6d{YZu$>RqL@tt zFhKD7B2x_XKRgwYhxI^-AR7b(W+T+PX}fx4DI$Hb7oERee>fck+qkYFH}-H06rXG4 zx0n!6zBNa0)JSB>xJ(^j)^m0Lh)h4d7gh1|;#^Miu7%xY)ypLakxp-fxA~+*t%2g& z_4ncVzD$#bdhE+o-yt#^9+S{=11^ltB{v&DnJ#Brv}`dc;A#D~&{#ARMT(RjM$sr4 z#!InU#4DO)?yy}(Ikjo<ZFWdr^dO7j=d1BKQ5kDdUvLt>?6slnjg}I~#&b_5AAK^v zNs_?XoD~8X)FH%i#`$Tk4?B(=36^z3KMqux2AaXsX6&EIAc9Z$4HiM}bLeA4OkK#0 zIid9L@T<0lx-pFWcWh3@10Vy<Jd!7jPajuLNO1YqPTWy7*o>oP8j0CMPeX0%N84_? zU4Nv}Fp=_qk@ntEO}5d#APNGC5Q=mm3J59!B2B3x(nLT&Y9Od|LXjRIkPndF1Ox<? zUZq5&gdV9;5a}SHCiI?ABZPS0@0`14&YhV%bJm)FSg_U`k~i;u_Vet$e`U*zlvMo_ z*(JA#xuVQa?u@C;i~yx-uEbt%YEBS*_SEvjo{0HasNi^&-}a?0(=Q=M=(m-_=o(&> z<k{!?m`YU+==#*aN|mfx1Bs<tqvC2P)5)Y45v}o|3&}!JDY9Wk%Qtuxbq$j;z*%x* zlT4&hs?J}Uc%Tds+pCtrr=z-=P;aOL5sxv%<xfS;h*$iv*Rxh*bv6^WC2Uk9i61ma zRrze;50-P_o?R-l(^qxxlrkVE!~U3wQLYKz&+HIi_(9PqWajwJ<#;Gze`<-Q<-ZGY z^umsyDY}4R$wP8zwpxUT?5VqazhTBLz*A%;koEd$vCV624vb+z`;8w@C{srvJQmNz zmtGX+UKmr9qOD4p{-B%+9*whQCUan+JVY4WTxYUQrc~=|k7tNPCB`N8YTA(eOv0r8 zqK#VjTe$dEvwUHx8+x=Tj)amZN?+}^=yUh$P(B>AT5M;Avu~^}yb%;6***5%)|xHS zvnaTAM_f4b!p9uQ$AiVV-$Mu~5>r=>U~<=qL0jI;@9EMMSg;>V3@4Oa5dL|Z2i0~1 z(|L*kQ6AXPcJlRGZS)=~t^4tgdSyIZsJX53aNQJ)kB-6MUplKwW%fMVu*&)5cC>rc ze=VjXBBI_-JV``ub9{v=OcX2!cgvAVBT!r0e!A}MKZ4zZ5{72-dPmcj*y=(bW#uDO z#th@@!Cd4*lZNKW(pnh5&h{(&@Lw`#v)!p7gKge(LS%KqJO`O?RFlM=bm8aGNH^)6 zbHO!MwhU#Z29PnV0Z@w9OOAokCTopLy{sE6%#t)F%-yrIG=B}g^`MvMxTGX;aaQXu zjW!iG;j0%cuJop{k<YKSQ?Cm1O;4WFa1k12jY>Gcu+2i(722<iRaS}CxhStm8O@1D zzMy9rVbQuL&e27^I9^PCqijc*p62!Aaiey*z)E}jFW<CC?a9sX(06neq#>z=?fAtg zGnYHBYGWE<joW_ri$y22c$6*)YSW^M-N_6c+TR5E$Ds<DHj`4tsV94{xI|k%?$OX~ z8|AKMFSc`$`3ayfU!@8a#l<cc&w$s*;!ZxRx<`-ZI|aNjd7Cz+oxA6NGXpnQjbCu6 zpMaA^vqHe6kV@Py-D|gxXuT+#3|(`;#|W=aX4PBRHq=VfAK%H|-#U56&K0h;8J=)Y zymDAsTnWy#_>g3?HeS@mEwp259M=77%T!(DAKC>UT;nbS8H}Y~{*wG?h@xLG<18(` zCo*=&K9xWxru5L<R4oyP;3KjW6Hl<uYg)#({g`0=*j96$%O1Sp5jkGCHg<~<=j;d1 zmE9N}R2b!!=D3Lr@f4;~+qL$~6S7gmj-OWQsl(w~*@FSk<Ugt{#;q%}5mya}*f1%C zyko|etB^^EH${2(_O?HzBApxpv`4Y+%%h7#TNLwR0eS{ICb_WSNMoNQ3n^q!*I9b% z8I@zRqG*8595ZcxUaTphnRdBn>=u0q*$b$EIZ;?oo{i&U#h}kOs_JLTUGb6^qvX3E zV)_#<AEJCe>I^k^nmXY8Gk9r^zN0=+uTR5UsN4Zv-w!3UH8M?JO4n!1^_s>>s=iut zyn&I1mXnYjY2-ybeps?z4|c2ddvV70;@O-zsy|2Oup0X)>SSIoT*6GxMKa}4Eksy| zRS{s&l)-nqUc)h+d?gV+*W;9aKMj4A@b1BPwXpN8`wxlS$?g=eLgb+#r;C#=m*Gn$ z$ZxI>{WqVT|M`tYwZ0s07-eip5zYJt6>5t*`qoPlIU0UH&wM>iOk|H|!uJ0oCDjA6 z)*CB}o$X-aV6?|pm8{A==NlPJjX5UXLhc<r6)e0_hHakkzcgLwIdP)OT=a^C2>Qz( z1(2-AS}8b?=GxL-I;RnUf#iG=-G!pjbt0%3&rz{DVM|HyYxZ83!m+PKmcq;>5FGe6 zL$k3~jo^~s8>y}Y-t_8iyR=t#)SpY@*9RA&hD84nT-Q-1ITGeTXLdAfwXKu?u&fXf z5*fm&8HkCYFnrb~F(X_SHcypoj3J(1q0`VpS%sU@b<2Tt?%=oO%C{Ey*INC27Nxj0 zxF&Ja>PHY~cOm=m2`SAPU6K7Chm{y^$^#M;MORRUXjbp=GDPA_eRKE`t%&!{lMsew zT`%Amiw3j#f_P@hshz7vqwYDg1u%M@-*;cXrajR?-X0~{c5O}}{5%)c7&qikLL0uE zWpD78J<T}w3c7F1sLZ0B_jz|gz_U9?V)zhsbwd%6aia8RBFO&}e@yG{pS7)3vAji2 zEJBkyqE;{UhCXV-?isZ^(`lOaeGN5b(o=41V;*$4%L_ZvpHKE<zPqkyjd6~CI%*e^ zrZ-g-uuA0I7+;;|3>C=b?Jsr>f)@FrSl8MAGz5exgw4Z128YYGb(*C~!ek>jRcc)J zmIN1pMrhRC!OVYlJZt{XrNhCiWWGV{9K)B<os!g%m2;c}#bbz8_Rqww{mR6EP7Eu+ zCR|rms|299T->*>x3t#Qr)_g+Qyz*7#Ob?|Yrn|{*fQ==c#D5!hrDgDu*>#*uk{%p z>-l{G+jVyP^bs*9tJqb+EWq|vLmZCRz0jVS@7gm1-PO1;5=$E3RA_!;mRDRQ_0stU z&3=6pi+DdUMW=zUJ|+6VRk7WQ_lF;;)CCLzd(2{3bJ@8Dr!*T`K;m0Ag_vV|-bz<Q z9^~<ogOzDl0uy+s)Kq=j_7eP9o$OHI5`>OD0KogqLh!ecDGue7$~)&X9BI7fst}Cv zHkk|Dkqpt22d9wAUzVt<Is02jvG8*OEI|REF}0Gh)h>LJH38+io}3x^Witj}0xyd= zez(ELhx}4}G1+MTZiZ|^5Wq%yBIHzC@&@dDt~3lF?{KILMeZqj;2?By$=Dp;@zw{# z@cqZc+41C~8&R=d%s&I<2XAyQJf6B~I(9yA17uaTFdxmGjs6x4;J6wH_a}nw;cr;e zQ-{)4Xs})^9m(~2<z$B5ljApe#GEDq^L5!5HC<kTE}qv~8e<i2UG~3qpSRa_w`Y*n zdK1HPr<E7bUOngjzCgF+V}Yf%;N8`7pRfc|ciWB}RiF*5hUXqX9H5s_wMd;?Ihw<n zHD$<cc3fA#kJ2Ts0Kon;2E!3qV&_O7XZSU&m}`QM{(rxPV<Ytj0YU<KGfwdKWK}(k zDc;@jaVlZFz*CV`22H1c@v^q<P6m-DP03XYY&YgoL^AemY#@fr@A4&5lnb8b_3y9# zb60y4nuS`2-nC`5+JFj-%l5`tF$I56A}_J&;A8jAUn&{i-!*N$u<&74xQFjJPFW-5 z!dy!w<D!>4ug;6aD>U(qsX;7;#r{@p6h*Vlz_QsI2uueWsKa}mO%FU|W)_+6Ogcjw z*GGy{C*Iq(^ySA&@ZH2-W&RB4K3x&gJT*dSC&^tZ`27NOod4OD6GCNG!^w2D%VUgX zA-~)EmC4@|8)Tghu1yYSpjl_9wY}U$d^B!H=?cH->kFh~8#Dh09zZn&G~JFa8lG`_ z>Q8$4oxX6cfnA;MDouM;bsP}rVW1{32J}}!)Q35&K($l`%tK(KR8g|68ObphR%&5u zF>S#VQ!QE87&*UvUV%ke$>OE1QMRfG+}4Pc8&)j~QZtOxt7B6B+P(8xolf=z+l;9M z?YDqU;#VYKn*BWLh^tOsdKS`cG$GMw9VI5>^~a1MoI*>Y)fm1uB#E#sNo1dsp>q^a zL-fl0&RE2>nG?ZXhF9SNH%4ToxYjrEgAa;hooe>Q9wM(#Pc(zxU_gh4=jJvG+>NK7 z)r{@T9ps7><xfw3G(T6&*s6bO4x50A8u_uL*@K@pymw$Fuv^g1r@F3gf6NcP;(~vU z{0;>JqNTx{J2fsqd|a$9FIUobara0RK9@>QL#?lea-RYqlYsC8Ky$&O!mwhKyQY$B z?cUGNf%i`q%%w;l9;S8hMR$gTJ{+-t!>xYXH0Q+gJ_Tc$ZS^{216YfOntyPVIXFDH z47wHpy?6?FiYrOP4>GQoue#z&3Q{#0cQ`G5{?rFIq&YVGXF56X_CX%KEkC@JhkR21 z-{RZ^9(T{v*uXKi#GER-&l)ei@TVEgiH;32cPgLSpQo)>8>iOKOvR_yCwf9}Nj^&4 zX20?%BupfXJRT=bi=6|jiW5Dm@+H1CC=huNBP|W9?YBYE*#N0Bk|JSOFh6fKul<s} zgYGRvR-_<-`CE(qnRv<P=Bfn6oU8ylzn1UKu?uM~9k?zAhBX)nzZ(H$$8%&y36OT` z3PfjiiTO4DW5$Cmn(AzTl6s%4w!o~1pUVv_k*{(oTi>7g;m=s-T+DvgC}CHa#|WDI zKW{k@(+MP5*BrW*@nOGUy=^t4*3>^kQ+3`I3NPkfg5MW*<pR$gMA0UJV%_TFA4t^y zVB3)>sdXns0=i8(XIMPMb3xz+RT#Tya%1x7D<tH-Sk`G(W3NA8*0Nbu5GOw1i+YoR z(=YPRc8aGsz+40$sS6h5bBHN}B=h1IetqDMT_kZ+MCNX#StY66@>p(;ospDIdWF(% z`hsp7&A~p4m69kjlziU!kf1*Qx|anu=-z&r9PqR;!;pDH@EY-?&zrcOordKHA4B{! z6gm>`Az7zjXhBiZ)06t_?eG;y<EOWw(!trAfO{UG)Da4f)+MPljp1X?f9><{yL#F4 za${GBc*;2S(z;dqJKr|#ZmLw{Xe`6l-iFX)p7rCmlU{f*2*m8-wNBayN~Ev}VY#O* zc?(T>XgE!)ngM{!GQw*C3?k#iUshYSSX(u$N#?!nk<~r}7(EJ~DS}_e56XRK&3oFV zTfe-cAr6*RRM2?Kyx%M)mPSZW9^hApg~kq*wiUi}4fptya&O6}cfQk9VSeQTW_mfa z-O~_3nCEhta0Ns&15*00+6_OhX}|sJ0}-p)F!^etUiVM}X%>B^`K!Wbl}Bweo2Cqt z?vK9P<3sn>S}V0n=pB4k-OQwePOzX+4;&ffktmW&jNb$lo6c%$d|Y1oM$ur)FW$Zn zjx;Qy$PC}9UppKySTvsWgR70%xS|EUBB)Je=YSU9tdWJP@(?HvAyBafdo7W8)}p?W zK3l6oGF26T2OAMfqwX9)Hc$1|?!2;)Sc;m;S9(aj^KTHB|8Kgo`^gbhnz43)_2X<i z*NN<;T$P`hFXFZ0jD#=n{MwU_<Xk(<B!sB0ni1#9U)sSZ6avgfG&uWK@3!1J*L&An zCVR=(kj^y?-q+tFC_Pq*s^@1ifjKd!w`g90v{Ryeq$Ov?0|?*<-(5kts||-`>WY%C zh$R!`zWD_MZ4tH;v$-q>mJcO3i)oKNi2@zF8E^kG8ha|ID_{y3S6t;Xv~ePL^ugBx zGN*o{HPV1((zp~HRxLP)e`N{L^n@+i@?q(8gdg*z;-6opQ44ss24<AqX6QyMo<+yB z>YkPRN_)worPV&(W8s(f8EKRJ_ut+`Js_EPooSemOAE=9PsX<;JY+Wk*^(W1K8KLr zrwwMBSoYBLHJ6rtn<egVKdxRLU8|NN9EU>)pzxKUi~~zv(IngZSPZ{`S3=xc9Y5q$ z|29*I*~-MqiYy}(#}&y)3-+x=Dvnfo^1%HEdqVjzLx-a2?ou56Z@Z^0Xw-Ssp4~RQ zwC3N=M?A_cbXhTRabS%S7WZ%inOM~sS+<Lgsx`De_`Lqg@aDXgp8JZOl0v@q;<Vf# zLY(*s0OV1`VffRkCll0>pLfG`s;s!Xl%!`fU(U5C{(E-?aTT9&XPBq0b@R2`tgVom zPc82fsP#P*A)-O?0*FO3Z}9Wf1|Q-APE1cL%DR^8fvA?i2I~Jk1y!}tep57vUUc{D z;qvswB~{XVvQLw)R%@2twsF5=DgiTyHXlaSO&4^|?Ol{uy8YU}IsHC``SlT!iM<ae z9&F1;p13ch&UbAr^HSc6bEnPG56SAK&Z;+>CbyI|35MHx`SG#EO|caG+t*X^Iq7q- zX8BL3^{?wE10NMKjL*mp*5%bKT?;$OMYI5#dj85<L(%Higkm9M*k2mIuIFZ82H8yz zM?XOv$pJ4sb+w?BHm9y|`#(Jw(JZ_sUP{9La{%J&@jOGjt*nggpj*N<t_<axdVR0f zvnC4{Z4N;+s>mOD(4=X#EcTg=OQ-x}j*15%g1!3pI^0*rq~z$Wb5*zU-=00WojigX z28izbi&9ZkK#rr>y?kEV4^}aKSp)g<^^iftR7TT0D}`%>qWL1jYBx^V2I>0sB3%IY z+T!aItPOCCo>=WP4;2_cWY#wQ(wy9vQeC7jI{0w-^NE>Ca#yVHsh4LddA|4V!`9n! zGcxXi|NLMAPgIhf@VyavFsVwyuE|7}|0fOOk26mh3eq~0i~Xz`J~&jmjQ)1bsIjs9 z)glsQI#a2_SS{Lxk8Do?O|_~JlCQXM(Y~n*C*4SrUd!?I&|Wofl_qXJA|9b6zZC2m zPb}F~m2JpmtxT`+5DV8X`1}6fsILEoSNmUg>gS^42WxW9vP~%WQKL_MI#o|2e)<Vm zNLdGupZsSu{vSWZV@cfI{2^-HNMh1jv&~T(>dq?{3Adx$-=gy~w6B}UWmQt1v=P6d z8%ep59tWRpyJXNJImgV6ItPZnb6?QL$gRs7L19%0-7#NO44>_r+%8eQZGDl92~Eti zgczRGd8w<nP*46hnGX0E`xrLF6NnV+Mz&-`fz4)Sw*Hr<G3D68M2WG4ungq}CG)`2 znX2u``jK0vIdX4l0VBpU*Pj2paZcvtF)p)O8=Jnj)16VeB0iCtv?6KN^l2mxW71Wy z8!_{Z9J8LDvUZ4<7iWR~PFU<K6_S-I8)=JgH3rqHRJI<Ftq^mE!12S$`#YW>c5Zm+ zZI>MGzkJP{oZX~pb&-8V>=jqbsigD&+|xy=4O2yIHky0iT_cv1f}`to6S$gNzY4{& z^uC@moM-GX;32ee{YOsw_pZy-fhcg@cQJxaw-?jBa&b@ZfDe5<|IK&czY@{^<9ReH z4aQWc#Yp)YGC5~bueH}GNeR;H<e`x}vege~I~Ja65F~m(5Co*2kUXQMWHmnP9R(}p z)@gfPPR)sVa<yEQ&_)j&EBFa!`QUCCl3o{|D#z<i9TVa1vtv71^{fxF`QHT0e+{1h zhu=9D)h<QHyQ>P5kLIn05?<TP>H~}GXDR#5+iyETzKk;1HmNApYvjcqD{P!^2)`C_ zD<GQ_Uzb7H*m%j|y?EV}3EX5AdXb!1F|gR5e1W|9q<*x%1B8<(u1(2ddVhxY2HAd} zSdA$m$9Osj^4Ac*PL<BMKicpS$qm28^e4NA2<{Fs>0Y%R+K~+oQR)p+W49c5Airn7 zaMzD+n{qOWU|ZY{-6S}cE}*zwPVBiSCc^jl6IEslQ!dhy|Li``BgYb^b7R`C6K#@W zi)>u2eA#|wO8AmA>eE5L<ZGy^W9_`;2*OmWLj_sNcBIatRqsMBZfgmhV+2z?O=V)i z<X7Y{l8!KbBpDNckz03mk7*O89?0CAvorktO&A4nTz-fIZv;@)ayzIDUuv7%zsBg7 z0T9+sCbxs9Qa=YqM^Xo|&Asu9ZGa%l{hF__htI_f#$=C>qUHj2_MxWD0lQYY+{%W) z`*$kjTpQWml6>)1(<Q&j>GJfa=kDT%yAV~nanD1{C70}ma)C<Yc?j0GX4>Pr(a>Fn zfCnom*of<w^=ce*{iku@{L8-MAEj1)yAt_i55);|p|H82LiAXxQ-O0pGwqX_L9ar6 zsVw>+_OE^@^NbbPHm^tB1Bs$kcm^a;^haX)7xnwAbbR~BC_r#hJ25)u+t=YL$dlG! zwv6<M@0gLVl#3(|Y>p~1Z>&`=&sly?Tc$&Je)h+5t&}}u)9%b9gb2faB_DU80~98N zx=g+_2P-vlqHi}Z=2Kurq}&+yRx!N0o^`u+>Rg|&xKPOI77fMA`UX0tUBrg0sK#!! z4&`@tsOPR(pL6T=;nnX5I2$1!_4wj)iV4%RVo#fh4Ic`lo6)+<?glHG7V$Tg9u=_9 z29c~wl1akde1^$x%C|@i+BJ2##^5!D6W?m$)A`x1ga`{ORCK5iT!CO4i_lp3By2G0 zR=>#cL!hU#oA{1rr+;@7fK4UV|E0MKQ;d%CHH?K`jvIW086#*#buNnrM_-M+ri3Ug zUmt1X=$&Wvn`frz3@gjI7yaJ2Sg9=zVFM&_9~$s{Od5Ymc}R+mMug-!tICbYzI3S8 zd0F2yDw+~^9}B{4D4LbjFK(OdWB15P9bEDO=0{!^51FP{Utaj4!f|n5##=mMyth%! z1rVAo?2gt`0KaPf?M4^&<d4ZA$W~)giqO>RSX&gzUONO;$#SXJ%Q9a%VB!O>TIWWF z3d4-xf0X$Fw$`NKxQCF8rH!S|pr?0X8GjQ)#2=$P@_x5fbT2cc!(__k7FU)>rtwUn zZqsmUZKPmhY9bOFDl{4@<s!(0{yHM4Vti3DzsW!CW}L|V7fJ+06v0!FjP9V`C2nWN z)D5t%WsehU;vnL&Q0I8obKV<yhg;&4;#nkWX_a%1VEeeQ#lgC9FAkDb*dob9_vp7V z#^5lPIM|~qL_+<uKstvWk#K0cQ1yyg_~xapD$L&Y^H3J@t_^A0b#&g+B_ku-Zz;pz zx|5TW(U?<$4>VIPYYCHv9>DqUtmjOj?vb4q2ar8E(j=`Eq(cd$1AmIDH53tjG|FyI zQw{I6+tnXJ1QLKTYXV<xxJTtdq`u;~)Q!f(qW<1F+e;wiTtHPw&?3PWSL#k{NX)BC zj7jvATy=4v&HwZ4cG{sFxDy%U)LXORAC&PCXND=(UxH4_>|P3ae)3w=j66>grgFB2 zIRsqz47HiHrel@H?qKgJ2u6TE1<_}QxPNwOKp)+^(~xO&XIQ6=m&YFbeKHFWskCLK z7{2h65Y{2KTKNpfzCQc9=a(|^fLA6m5d&B$JOF0os0*&`f?viDk}vnmH+j2P4OES7 zu|_30918&q0)z1_EAwe;7xxi*s(orO>&Rx#wn4$i63kk!Z}*rOm0t#jJ*AF~=bPTe zy~vfha}FPPpY9{*NyMXZgf4PHTtzEHa1O-Q&**YT@&;fusdBLkaFhoTcKHE0?i*nf z2;F?3Y#AzW;ASqGc`6#I+e;AP5iYhSSCAC<JKGsY06yg@L_$MvOpsGuNl{hAxKB$Z z(v6}=(rQ~6jNaee^enNSnYvv+X8AgScU<e&+37fBHx^7xqTH+{CCBEyX<K3)V6IP5 zlTN1<IzM}|Zz|QQP7*U9c5NPKi-r$tUTpfHm*f&Uk`npD<}ZzJ<B92j9YNR{A>w(J zY^DT@5e}<{G8L$IF5N@4@$h{gp_r1yZHdJ|b)i-OcgD?3-`RwD1xV*uA6ehjr0DyB zFCvgIfXAR;*5xsg`TB|bPL=gi&$VrvknJ&fvoz~joto*+M3Gbl&1b;=E<wypL^v!? zTl#rkbiqj^M|W3o*5PWOj9N$Dm*i5uz<W60N|7Rm`4C!mIoD6x66@0eirzrcUWYWi z=vw0)1)7I{KvsQ3V61Gihz~(7d{WbC7`m2~7rtxiqBnc*(BX0K_{qd%S1wqWpaQWP zl561{MQ9f`Lf*3-V}%4$wL(<dHWSFKJ|v%i{e$v=78u|k1dAnInP+3(D(v!C<$}nb zCYIS4*ryR6pF_%6A}_ZK&BCky(pU}ECrbMQUdLi?M^vXQ4%*?d6W_8>9{9cu$uk~d zQfxc5o^f<?VX7``!G-C`)Z6n-+wV`uL&UJ{H`~dz735o$zRynl@>*g4?BT~^h=oJc z{eyyj?A*<f_FFE3?4+m<g`ZuAen?dP%DRK9D-&aG1sN_wYoJ~P5I>9?%*Nl*&RY8= zcp4@h92i)p^ygXmwF}P;ESos(3?`L5n&*lOfd+icv96=!R`o*mbM(92OGbOV?-EWY zoWhkuP_u}qV-!xpw%XJ16WkC~!>hEV&inc`Bv@q=0&OH`9+gi&9Hrcp5Pl^L>2JbW zK3ofZeyQk8-^WTJwwT-k5QO2cc1BM*y5DLYDfsWnAIAQA_#)(<I71irJYTCso`thN zm40})s*Y?ncPlENk6V)mdb!OjX}p-IMLmX+BNrvKd-!BCprZ9`mftt<_$bK&5#e?% zLu<gE9n<eAF6hWIb1>KzXco3Oc*PYE*+tRoITiH!mf1CCEL)khUDbMBILRJR3P)o@ z#fGRNYf!GJe(fy36k&BG*}UG0Goo6tE-4-xdYv3n?2?@zA7r}49pGh=?wDesv-Z=l zWG25tRdrH11dm~v**KDi@;68Ij#qnh{kZ??3VWv<?NERmS1IWg4p1G7PQ-P5+D(;< z`eDEHvpexa%~r5~@%SMomX9k_uso!M?0q!Lt2zpE+>b3Zet1LoyPMNUn|$1!XQC}I zu^=u!v3VsfAatysy6&DTAISCWNzE#nIEgH@o$JBxZi6`5b3OWbv$Y!>_fnOeM9_=Y zT+t*kD5<U%)3wXoA)j(N>iXx6Nv%0v3;)N@odD7@Ig13s&a>3<)Vq5EdQJm%X;qC7 zrKbMf>oNGZNZ-i{xTCvO$n6Jy<28_S)z^38-(7kre4}YVov``IqyK5@=0p7lb3Ajp zW(SRQ=ThoWht)C*(Mg8@=0+rY;4tZfL+QmFnzt==#qU5+=>aF|XsCE}*W87qKFvUb za>XuLud_ur#(UKF;KZPk4?doOMOL#eZpkoNrW-Aw=4aLB#9r}V%FK&{Z18A;SWK%z zfJ0FSSJYbV0Ef=gd`wI3rV%Px*&tL3OvkUnA1~E#R(S7h@M+K}#S?gqGnkE{g8!f= zA?jTJmHK$EF06p*-=}FxjwFe9gF$`+w+&g>gM8b0+H!vcZ<_mvfOi3~wKCs9qLsVx zqJEU;Wz`RNQeTc&_y2KwW6x@my^jf-XRF_h<(foK28Cuhyo5bKJ0xkl=(#gs1bQri z`D|RP9|7CiICPK*j2`lvvT?U|cW$Jw>@D2{oZG&A-*F~MCA2y$d@$TrV_(bmFU{}O z#(DS#3OJx`ci%5<s7AFhsgG~@Z3|ACjFdv+#ovLh#Lt-Lly<x8b<c@nhC>C`{U_H; z(V2mt=bsu+h*1f2bWMv5w~?#>u$)y{qO||BtCd!CmCMnFePi;|R12p>n&ou+8L(g$ z=OkI7`@|_hSp`<P=JRL5C+XhZzOK(-wlv-TW1;X9y>hYu9tjQNB@A!lX*lUC{ql2{ z_vnr7wHH#wDN~<5G;M!BEc^y$Z4Cwh6Zc$01%_J{oL@Et2Phnyq`%4ozY}u8_}G9t zcVi}@q7#0(Eb!!~`r_Tqx@Q!&A1m5IPSG0cqx<Fc(}QukclOtC=5Mm6F79oww0tUk zi)^cT#_<dgLl-zsR=!m>SO8?bP?0YmwkEk0-~6oU5o@`fs?C6Qts?GYo2m7LU3Rib zw^isTSe1)(QMp86i@Ff{>1qz4R#}?F(VKH~3}INfh7*lGD=x6D|CkxTZF~cLA#*2E zQuns&V0h>?GO9a~U~}=Hifg(DC-UQJ#f|Rp@!{J2^Rx<{V`iD1o`M_gHzyGK`S8@v zU!&$jr8>p(9s^gx(B29@6tybTTGCMq0mZq=XC78rxBJBfv}Chk75_l{!)Z!^k2&SW z;^rTOm*2uXw*|x!7R!LEDye&0-!=m+Z+WY&4AwBE%ENad<lw@Nir<zllMTk!+OXxH zzrNDHz@h~zhGpj)LgJ*hrG&TPXRA~DwW?Dq<>XWw5Akz<X&7gVBL_C`^0YTP7aDCm zDdafl2}H((3XuoDac9U-)Q1l&eVNMNFe3~5Z=F6+QK*cd5ZVCPzTz9cJCjz|zXmR9 z+&nedPRQ5YXgx8{B5M=OW0f_CxyGb|-!8227NzO#{ZG8Vgxjj6Ym`zRlEVm~^ALD$ z*PP(c$mG_ba>|_b_mQU@*IVn=w`V4UiRfN7@@@xTDCR2I36{7i^57TN?6wy2l2eZw zU)O>ZqhaNM+oX43EFJ4DY?g4ya86f*1s}jC7k)IdI4)H;&jOt;6vMf@&3VbX>d=)x zU`{wO*C3R)zLtCw%27*PM>D0#mwMg36LMZFccKY%o}xXrtL*NxFweKnx*mEhNviJA z(MV?aikhid%KTonl-987Ez13Igt|N476e={;wSJ3a*zWlihE{Tb9r;^w#Y=QIf`OU z^iL;=cgDU-k<FaAJ7s;RPt+hyH_C(iPxj_+=yiAjI8I@XsdiYlf4aEl)S+(P1^)JO zLSPodK`9wRV2FK1{;15o7^0vTzCjq81@ac^dfY>ql>PnR;~!99nBsiWA()BG*V(Hz z@*L^x$`^4zN<l@~)WEX&c-z|a?KpPZvM8DLlkz<Cg+Dbctkvt%$4!T*yv+pC)poU0 z-&lOG6f@Ifnmf&(#!dmY=s&&hZGTRPb?wG9M>P=yAe}iP05~0C4h%MgbuYg)`1A>6 z?X9Nh*##1WwM&pZ<9sVlRqoBrKWvdtQ)a&I0=Y+Hu2KsQLKTsZd${Mh{E!#qlH$My zb=--s1+5iR1g`{v=R)6E!cTkn08bv_PUziHUq5{--Wxy_bR+#Joeqx<Tc=b^h=-Be z2%iEvLV4Or^jYpDvldeYvR{7v`pW*RqT?!(Q}-o`oUscy4PM{#^=r)-vyDLp*|EMy zM-Bof!(w%!Z7&}tiE@h`Q#Ng31+nJkx>?m<yL=T8sL8KheRgV8n|Z4C;}kkS`{&P8 zF2V=uMRdXj?RHBr8IOCo)lJ`D$kEd=miHGmz2rT=MVW0XB0DV32K0nVk<3!cfD(iV z4_)0F)jjvNt|*H}JZCDYdJ~;{CDn3uxDItu?kmUg^gw`;;kCas!LRZ}s}Q2(Fz#gE z;HILlX$E6kV)By>-dEoj2~t17_z9REh$js^vn$AV_%X@$7xPwP?g9MbC2%rw8JbuL zWmeK|Z^!XK)J4dLxMECk;5^V$jcq=Pwfj8nBFKhDw}wdyClQX8?Jso+Uwa(P*F8oR zCeJ@1rxcJS0i_G#)R><Rg1iz%@J}>9{^SiD8~bIT{jk-LY^nM`NN1e#ptw?i-KVD2 z|GqS%c@%XJvu7N7_b<(FH{{xn4NTJWxzGvK3rV9Z8I$^{y5Ff+y8qIwlBx_D$cw#m zcSwfu2UT*)3eK|p`!3Y<%UgSrf6k-({?cqsst}j`T#&99&L0(WX*QaLMFCRwS2Y{s zUoi~)f|=_BoEXeFatmsEc1f{+l-tr1SBll>+H)D60h~i1I|@I9t7kLL&Zj^l7v^c( zl9S~OuWaIe@|DIohPnGgG?sc`+;le|Z3SYDVJV}?rQJi@Q|`>aG>?)B$U?b}<XMs< zf4b0$UgJu_NiS66%<RLdW^^t=tP=t=R-HVnwzqX)S5LFi-sbmW#(o>*_~Ch5k2mQW zFVEe<T%JuE+b+-_(HwSQAgx(SjeW90RU+>ilY{XgYNjLZ?vjGArTVwC^f%-BRs;If zseDVSYG7V0G2Ygb)exUn`YuMN;ma=(k)Q8zmLzC8@lyhrrB&R{djmbRb`+(fhv-xO zLa&XF+n@hGEs1@OY$AGm5cgUPLAGlR{_{AK@MHh4gEvD`j#vuXka+C~H)T%zkE%*P z`myDf#^9EUiC)L_=8r5&X1nnRdLTBqo$-iYxLM~0m+pJ{k&4OJDm4?W;>Pg=aEA)B zr@Nn?EjwAU-}OUq45euy<}E#FaRXLGV(9i{RRA6-2yWZ;dYx?=X7z0BMdO%VN|Ki_ zXXo9m^d5>seD@wjn{3L`CYiAR>4i$;Xkog=Igtzfo?>yE?RPi%(&xJe>B#p6jhaVg zxAk*^e^fb0>j_nR@infG9#*QwHQTE(w?Y=&gS#@h|9p5x9n2V6*?|<pm%hEqad}mB zP)@xU-$gpcqmCeus?~I_<qvP4B1;!-e8@ogYe`y(u7Zz3YZ@CzBKk|$C%Ag)Sp0WV z;+154ubPVyO#m|YRjRnUxBRT0cbaxCAsK)X$Bj_|?tNMX*$dz|oubY-Rf5w4<<Wpl zJi7N5f}=pAKm+{y!j?Jra9_`v_V;f=RMRf<o)jA(6oN0Z+FUoD6+r<2Wk>Ao?U<{n z(?1U6TJYdMO1b=}YeRtZh5Xnq5Aw$}oP+vpANW(@N^TvB68$gX{C5{OH7b3_Z-4>> zc&aA>b4oW0T#*SlPCNZC48OrC2vr>lINtq>5C3l7I2naF4_r`6il=rC1Fs0U0ym)= zZ1(0J(Z&CPm|~)#4@kR7NHp_DC~u9T&FPeK0ILB+d_KC;Hr#829T7xMmd|s?*(cpB z4b~Lm5EE=8%Z>hao|tE&7%f5u)B{}D)WxFRzSC}cT|3^t3mgO-YcY;0t{W2krbL4; zUZ2Sx%T=UJHf8XjTCqQn4plO{R*17j{#q)cJ1cqt5ND`%0^_IN?uWYl=W>)L<0yV4 z$1FlJKSi3)qTR&3f?!y0sqcPV6jA!VP(^%0QGAekAN~svhlkQ-T8~t@@027F?&BWp zqhVJ$dc2WWc9daKoi^UP&zp(0>uD~_MO;K{28S2Yb(z?peN@b_E)1}474Yx|;i_g% zZ?S(lV?;Te6(g5o;HA_i&A&8-izo^5L;~i#DwoYu1<UF7kCR{xcYuS3D)d`li0;BA z_H==2iz}11r=1@euG=ag9z<CH)~SDK*k!xU>r^i#uVWAC+bR}3DXAbv;K?aUEki?2 zB_nf<$?-_{+%Gn;I}@v8^lyP&*4ZYuc*VOPkPH3c!KCBck^oS9KT@+QZKpcnjsPY+ zx%SKTm%ge$MG(oqT6gi49J4mmAyz9NFNy6jAOc%MhZr_sU(VhYCmDtZDQX`VX5ei% zS8AvQHOdkIi*UbZWcq3keezWk@KH<zEwCPdQ21d*{sHhm@2ee%#~lM~=>LED*5oKe zjpR-JH?P|x*ZTj{<C^?GJ+1?~k$)ZxMj;Qk0U}MFE_4}cMB>2L?^G>bA!&zG9{Czx z(WZ%e_+9Y9;+lfg`p{@QD|xy*2o+O5e~~;lG9eM5qqFR?jU4}(I7BV@QaArc>CBwk zvkdex3M*_`T73Y;a)6c3f4^1cm2b=OSNP7gj}7J+kOhWraSYh~NP_MUr|W)PH8MDg zdn{_85=?Z(cD^qr7nhT3El8$EWka|PDF>&Qo=CYmv$etzQERk;zBQRMz^4f4x*kWU z4oggYD4Aud2rN}9`5Apj-~{cVAM6MB496^OwO>d6mYn`eqd7g=E{6QkOSuP7W6jmR zkE+22|F9`P078NpO^wS2bc7};sTdyM8{z{N_2ag{!7#*)67u|!6Y(gy(qLlf2mR6~ z9eOeLh7q;FpkKMx<OpKYzD{(H0#IoX+h)i7AMLv6z1Q;{MA5bfnGcy_5qczj?3--> zgbdT&<=T86_sdy=uz$nX{w<!N`nh>b=va;f9{?B))^iwA)+nVLBOn!wYVKa|_V)UC zI_Yw1;A*@M5O|8XuwXYB%t`n(dPVJoIf$V%L{&f>pBuUD{>_xn_j1To;brW;XlvL1 z#Zq|lB&w;D?Aa-7HX+G1*NdAK)CH;hLlcw=8;tIjVkZ}NaW^N0E$BrQ40?*C1%#CM zxb1u}{3VQ=|MgYvf3X;z;*$llD;qAxdIpYOYe2GC$uqF1x-1FekIqrIP0!x@^~bhe z55~J&xQ(|ecpn+(Q&$$zf7r;T;5W8=ufd$rr+_BF_YvPS6tx{pt=o-P+k1_<gxOyG zV_t+X{4(Sxb$(-_{Z5XO`*p(E*6v@LJITbxV+Kw@0^=OQ1+_K@QgqD6=d#1B99mLJ zT)E_tcZg0&BKCi2M2pVi4G_!((CH=MAwD@CQ0<#GXy7`!t9_x-@pa7IbB=egfD5jF zp%Z=nOCP5Ip42&leB5IdUW*sWeeF;{LSuSXYQel)F6j|Ohnsy`;rQY|xhpczuv6hF zZFgc2&X-1Rc4=Q>Od$7EB3Oy$TlhU@1nKm~ceg{^7^};V&yo$to^^xV>dKG@7N`Qi zV)kFHk@v3PBc4Ve{DnWy@zZY}HIv+q>~6Ui7MTe4^mT+$L&Wv)=1IySK#MZXbs`oI zyUyH?Yn4%d{j)OP&_xYbiJWTkgb>tv0(UQ8h8R6g-|k>jF3>%8ADld_paMXtv`TW~ zzdM`l8Rvyp6ahmvwQj?BjjptHR`7Q3J~M?~?=OvnSnqko$x@0e@hOyl%<s%<)0D5h zrNY{yz3Dky0l*>36XTgZtQKEDQ!>Hvn8SU~zclr?!Bf}yrn_>)zc%xGE=(-%W7~Vc zKlu##S8Q?p9je+88&OLSo&z0{*F^3qR8IignW$)C163HW>ihD5?n+wrvFpBCqN?IJ zg;iPMEZO~~*ikX@YpPz4_uHLbP@gtt*&4Kc8(|CXY#Ai$tPnRX<+`s)yfe9|=dop3 z1H~3|fd66t<zy1<QX*o`mO)n(e(vq~q8j~Qn*ZViTrtlmJJ0R<mxfk0Scw^?IZ{`? z?UXRXubmAa`*F?gXPDZPLrio#_b5dG&#b07yyW7x@W{;UT9%$b&))r2IR@ao!?@nA zKur9V2rO*k_r7(-x0k(X_fm3En@}UwCK3Z)U?l|<=eY&&P=Z^^wj$?7GVf-r=Rz3} z2i0%MyFIwfUJxr;N-N?~nC!HDa}w<LieoyD_Spp1QapKFcyj6Nb1S<Xdepux8qij+ zTTU^3+4GGboi;<QA0p>aPkU^^FNik1`N0l(mg~Jo77}7`zU^Q4os3zAQ+k8>^2;Cq zH=&*Umj<tA!ycS<2chmdftEiG0D0Rn>Ru3hWN~>B;~H<qmw#4KP5<WT7TlM!3o8EA zPBl)uJ^(66)bAj_rHYeO(e7oNUvMGWOc0&R(pKF)O#n*em!a5PBW9|KlFNrMscpWG z;ro&L&`^XsGrP7NZ~%9)J(5zOMoI*y!;g{|lX-#85F5f0|4B#+ge!>^iVXf;;*`#x z{|DL>!YAQsi|eGHV1AS7e<CeYAKu)1CHxBO(#NH^iL+coiZv!d?T8nAa*qJ0#O?)z z$^yq75!*i8ClZ)y;DgUS3kIfdYwYGt=I^PaYI_>3Mu5LNfQcL?O;iJr5)n1v5LM%^ zb|%U>K<%^Ldn{{vvI%Tag*k2htujXs9{|p<!LUr)zckmobcw(o-ZMnTCKa0fYXDqD zxlO_*w_hiFyITz_OW0p;3O0{&mgG%;cWYbh)HLz*K2tr=$aCB{+a{eARLD#(J#qj& z@NTMz#jBC61ZhdtXhmcZJo3j#Jk6yp4;{4Xbdv7Lq{gW#IZN4r_?1aTAJIQe<J-Sh zB;cQL`OF+#<wnlMazU9%2I+-1xbMyOCy3NucZs5`;X?S>&BrE@xVfD4CBEI5I|#i~ z6Y{0wr`(UOe08?4p4O$c56L^5q?sK3ZzDc55zEA6&6aVh2*N^Mky>6TYc)0F_C`cE zGk5o*u<Id)o}vnfxR%emrVIp^ZF2wS=1Zg$SiVR4zM$bw`o}cH9N+Vidb5$l6<^_+ z&4TjdN!qYcDV%!E@MvA=uGm}^-0qvAZPdYl@w{OpMgf<z+A_BMUT!Q&o&R`|CgG!( zwRRMh+ja`!2rw1=DmG;-G@LHW?+^N4M&Ai^@V<hG55u<k3tlJt*_D%Plnq~&Zv@FV zUq4lv`K=63R}m1=GWlbQ0+B@pxTdWxR>2g^o4=T-9RA#Jd{qAB%I!Q!1_SX(;(X`k zsZ;_kGsdGn#1Y2mhL4&H-08?zPQFw9C^_Zz{p0Gve@hqHS<migfLrOl(eNR;aIbx~ zwD0qX_8Hd9%nTeU8cE#48jyHNEQMvRRx8cI(%J!Kis0*p&cmFhK__Nc0MT=VjNi-8 zI9G1PwxxhQU8!9Ua)XrU{!)p&m}+ke>XNeyzKUh?N%+yu4sJp&imUmi4ckLg>(A8> z&u8}J2#hM5=h--)EH^gRG}0)p(y@9os>G;lCLrHrDAfGMkt4eKj+%;pH!E{-k95Df z5fu1A*!V9^Y?bX5gyKl69w9yiX4En^)a5F{Tvb1+ai#2PJJ{pm(!uv)qFPs*OozhB zyA#gY6UcnuXuth7@0$lZdDn!&RzGXWCQd~&8xnXF8$9As-I%D%0L)HA)xu}2g#5d7 z0rr*H5DmklKvOPU%raIu(QcRA;FQ!rwM5AH9l}^$e+z%YABDTE_v|9-!%R;2_J2@0 zAagDa&04htPqqylXZt{N$j@QA*B?KB|H0S7q5?zqw$qFto}ajP5Bj|<TTg86JL>87 z?%2A=h;6vd%!J?0$R!vNRLqUX>Sw)#q&0oYl;L59Mtnk_tG$B*DhCB9vT42TcShw@ zG$1Xb+p@(H_RX&?cDPIun$jbJe9u>F5GO{EtiNH<>l5`Mp}U4kl_P%&Eb@`NZ(>=w z7QBIspG3J(0`GN~-`EMBmeA9G+wT(Wa837>-Htk4@T(7b<Xf^Bb^-rm=tO;@4n*$r zhjpQ;t8RT*S8YBTUG?V(2O{PPNi62t<o52N3b#$9G6wCE##rP_-Lz-bG&X#b4JXlm zsGb2_C^Hp*<rKec$ypb9!FVk}*1_w?HZ<KjI)Or43ePniJ+$)+DS;`5YPOvvgx$Cl zlt05L{$o*KLy8%p_GK8Mp%&w@ThDA~n=K_WZ`+)aq_(5=`E!|Sco}>UZ<a-{y`n+5 zFK1(?IbkeyquRGW`BsskMh8l%by#Rf4KVVx(g-Y@b9&O~pZlyiIF^5@kt$j>7>i`` zlVXFTyUe+8?X?ndu7-i$4o$`luBtDDcotKV4!0Wo2@?}H=~DZIpS3J||C(FMDQN}l zS6E^N%kj2sw$*I_CNcg=)4qg+Wcqct$J?hp*A6N7D+i}OXoV=@RiphRmJh0YnC^$W z$XtE+z1s~se->0rjL;)~O5bUvGEVM#zB;v&JFH78k^9t~+X(W&)(1rfmNXIL_1Z`w zgR!!+PS9aFrq+;3mw;DnUWWvf^ZaGmD*j#&L0`dmV$>*ujcx^osk`{r?p#9thcCOD z^IZ^4l4O3>n&L!F-kj@wg^CxX_p6?}=_x$)OMBuPT~N9aige!Gdh^xeiG8S&o>!<n zyLJEdjjb(43G#F51!5v5{NQEr`bp&3K<ZL&raOP2ed<s3=f>W;Vh<`+Wbn{WrSLgh zE{&?q#L8diXO#39b;s<M9W4IA_9?!qJE$_(C2?U8lK3bUjjrtYj&p&bFRU*7{KsqD z(Sh=>dXvi(8^w$G!LHEG%;V2rnv90S0~O9()Y_5iwc+ZzDzkGc>3wb)GBf5hp{y2z z#kjST(intB898(;KmKWBjx@)GwWNL?e_OXn%SA&57ePs4WjlEMrLf`ad^&BH1k|kf zLA91z1fO+|K(6MvvNoa0pjVSoxOptr;@bnBXXgQx(imk>F_;c?$<^KK^Ewmzw{m}T z@7}x%&y37V=s{MiVEkk6wJwcjl2dH8EKQi|w_`S%XO|g&hTmOQsWqWMN8M$U!`g3* z9(-q?`!)R(PKc%FyuuRR1b}@QS|+Gh$UzFE%vcHE=_*x~ql|&`7wEh{Q_YBKe20dY z;68f9l4$yrd|W(?=Nv9VBsHi;tX!^g<Lh<vbMF#Z1L@4)Pa*h5edE`ch}f7`y*x_; zs(prH2%+-9(dDYR6{I8C>|Z}5&h1oPdkeqZJId8I)1bRQR5lx;@qRg3pP_SPh|NT+ zvQ&|bHN-+$i@|67jkgxwaHN64u}~$}L7Yug*ygaA`>|>>XVd49gFmxLwpvCo7sCza z3FdLdz`J_RTcskE%t!Z1B>t$@tcGKEfUtbsjOvPiKr!+nNN}5t%L+g@qy@&BgSEdd zutbhLeqq?=LI!sznn&cfQU?_jxY1t&Cj-!_e`;scDil_&Cu)h&Pg_WS^8o6_({^ar z)9a{yWQUUCl?)Y6B!`q@i>YIC617pmSraNOYI8PE_n&m1eOziWiz+7;K5HhU@?6Cr zlfcSm(zS>E*uC=eE7!L~Mx(G_u<7S7&RLhnB6#EyL+2s2lYWU{qwpDAbd7VIaxnVk zh|X^XIZ$*c__wo5r9LyYR25Zm*=D2mCv*Rcm;P__pG&>qYD6(pBr#vf1Lg3jP4fxI zFHygE+*fn9cs(rk`j&3~;igRv+Nh@T;iO{ym_5~jTu8rf)X@fENWdx~5tT9D6vR@j z=2(axpB4rLcShCC6}TmjIjm>D+ouL5lfKXDd(Cl?HU09fUHRS!-kWgubARI4*aqXN zT0{rfeXKO(cc*NAAu5E+qUgH<&pvv1NJ$m%SMPe>*mr6~nt2ZHR~NJ@blC3s+p=P| zxPhKb!S?z*2WDw8lovTEp1TCAB+uL70hkWcZ&b3JZruQ&9<v<f3}Ifq5K_2<el=U3 z%dRXCSPf^ViVFnTv^3i&!tqfL2%2q<8g)A7X{HwZOUN4dcV^&=1;nI^GFM4abb`ST z)ywSXuf`-3|2b5m$b|13k5(fz2?9RQWP|tCR@1h!Lb54AN{oxfOTm-*=C^SZS!M8% z-AC==oVhwlIO@e4Ui-4)rhUn#myo-k_XelsE#~p2QCKZC9PxON@-@39IX;vvw-<9! zQZ^odTU|DRBrNc9(1EZi)|20IW3BAld25K6SPyPpl4u&w*Hqk}){@r|m$Y_Y+^@t; zOF9>mO<pd42g)`Mco5JI>AzKBca%D^D`yxsQj(o`9XQ>y7aU5XY}b&N)|9ykHvAB> zy6cJQa>X61hmm-8=3&LobB|Oi;?7bf<~A1wW~68O-3H5k(tTO<Mx-3fFrJBz0V`$= z0WQ`pb-|SsdpZByiT53D(c0?CilC!QHAGCPMTc^`;J6b!DEdy7o1W!>Y#nwo>kb4E zW(s_4chF--QtMQavLN~9h<u%pn+2I<owrs^_gf157W9#?qKd*k<fqgx@JImCZD!Sz z_iZeH%x1?rxb*|(NsU6snW(;r?l>3%l-mvOb<u4(0CXu$Z1SfWxY%pHL8594!(6x8 zz^?1$StdOD4>H=0#*l!tI#OeSok-Re;%3(}Cu%KaUG4Ukz_%Cw(RK?mkEQlt_JrXP z)Xo7QhEm&*9XV39B<b;&u?tD32AHOr>?uc<&E+TGuO{W)r8(GrPQ3|VG$d+ARiivg z<F~i@CDN;XME2R<Txv6v>qIb;JylbPKF>$$$DE~<AEthYnXc3o3AKs<`l@`Tr*f_l zUGmw{UGwamUndVv(WyMeZcH(`Z--A30JYUa3?IDW3DG~yrverr-QjsD^|J+i`agKq zfPWh=*2G`=#c&_9$-~B{+_<yvO>AE}EP9_%gJV(d1?{e9?^~5ZDk#crIsH9+6K^A) zXUj+ZguHVTK~PB2^ldHQ{smcayZdKbG-j{t87gk<?U>v-25oEw9m>Uo@>t?rPtuR0 z<+eQ^@_meg^oOYGw3hmee}hlk1^+8R0OZ1eP9JAQrrC9pUQ^BnFLH!;(30t`_Z+#J z`x}y3$`=_gC`MvlDXq|T3ms%GO0y0>e(^Z+XCv)31%YOBeLrH~0K%kf^Mngs36M`S zm=|i`2|jETP5VS*NRRV+&PDV{t8_rYl<Ua|e?@e226-mJ*XBK!s^k2+wRtBhnlCz9 z*^AH?@EkKX<$;o)zUZOB|Nb4aGLtrKz>hDt3&N|c=R;rynU4E1L$}WPN#?8>FC^`0 z3*AfGjr&(_;^5Pz&F7fl_*rd>u|jF<4TTYg_a)NxuW3w=&NpSL(!$M<%soZWnN9Oo z@)`nTlab3YQjeb|mbHH~FLRj~vHaabhYsLQilBEn+V!j+Vpz8fl_!>@FRIYn2-}1e z*ZZ>+^TT=<3vX>{`Z(eJKJDa}T9eakCJxDUtL#?OuIyT`%moC(g?2rCOg3yU%j%o= zG)J|RTf3UmleKQtoa)`Eb$j^FJ8O^o0t1E%p3&L15y~oF`M+&!ZPsNx=_d|{$2?De z-~MOc!XL@7?Ivq^prX*DD*AQEVg3W7Q?xT^-1Mhr=c!|xut9CS;g^P5G@XVgduP@I zrROh@xAO@D^wZr`!Pep3;>M`C^+$CXzt}aq=r8CpFkJJmHlp%&1eUu@0w_wBCX{yR zQ%MPTR5lx*PMg3RuX1md4PfBW4t6=&jd54ja1TZn!2n{r@kz(H<)YfRjlRCFjazf< zM8Vwu!QOj^HPwD;qfrE;H|Zrv5tS-cY6PT-G*N<75s@ZDdM5(Xo1lP#^e!dRTj*60 z>7eu^(py4}5aQXs^Uj>#d^6{pxz087&AF~4e}!Zx``K&n=Xut;*IM_D8hUzc>RdK& zY>qVInh7U_EPqqr3kO}tee*6Cbw&lAtR@!VELWp;Jx{;!?}<RF^An`FELMla5Gzct z*Mx1=@jkXTXg9Q;G2r13c|HC|4<BJX+p5@WO(%U8&@*Ml7y1iiH0Cv{{pFh9qcwIQ zXF?UJNiDDZVeut_n>Er)S=UIRzU;#W>n4YuN-p0GDxU2RxeT|!^5uz_0!7B^vYF`U z*H2O_ayIX_Su~hgp!pR}Zt{lB?v;1~yt5}Ri7^#Q+ReLB_ERpXQ^<^%>pf#Wf7u@h z%}SvjFzuF?I1?gTdPw))$l;>!K=MXse$S_MKJB=Q5$`e;D(saslyHUG$%1*yHq`KP z<?ikiI_btW3J^%S%9LZci(7KHcN(aQm1%{mx3>1rOzXDnY4j=kR?4A{vU$=@jeYCC zvhUcN9^3?$O)se-VWuOG<ZUyK;;wkLO>|pGNhZvyX<S59FbN@qG?pANKQDb*lUyF* zV)TO4H*xz~9)F+=PNj~gwTxLKoF--t@!expv+-I30yEWO4RSDAx2D<x(sidR36^4) zpHCaF4p<A2QGLI~{-OPX=Pr$@?_Keb!`W?PRYrxr22$<#{nY-Q$(CcpZG?COUZ&90 zH}u$eRA!N3oqpkteOA9gn?%>{<_oElso^jp*LoJ?^r5n`X6q!0(_Mk)(0~wWSIkX; z>a<~@*831@k!_ivJEz_0M-4eN`s$*~ZP@}=#!VYbN-kBcy_U6jxBT@5%0}$h*D^=h zc3$n<QmR*_zFOD}Dn|U6>W?JcloqEcinT9YtYy%=+>mZ?_0xIMb82V_q-|VjWk6>; zH6S7B8)i6pFa$MC4$}CN<~FCxsU^kr{uMt@aiN2+I&@4)-?&GO?a>6vxk7H`4eM>) z&_ei<rl8YaV$@yEqegu2gAnld{@*0OYi9q_)$$*`Xq+cU9cASBW;~ddZkfNs8GmnS z-m-i3S`1Vm3koxMdtCYXUm7_6)eGT7oKW|fxFyat8~xDLi%QR`iv)IIs^-Eu+O5!w zfKKRi$O|$@=Lp~^OSv8n0MPR*b!Jd6>E(jfn;i4q6k{d>*);eV_-~b0JgTaVm>Ls^ zSh&Q{&q00tDjSG0H`mukYlH`PV5u<EvjBKm5=DzQ&h(uB>PT_-Z|_bd+vJFwK0!nr z47Pmw`Xt>{T?*`RzrV{GMAHA#6HXv!o^n)h$$D+WoSF&at}A%>ospV!RmT1IMF>mv z%m@}o9Z;Qt@6kTneJnA!Tt77vL}QG#4&NpS7HAZiT3H*|Qi?q9_u_?L)3W2G6%LLO zPQb3dkOt_}(@drg$|}^Z9h#>#w}cdtv0KJ+ZTGW@xea+so0w#vhQN0x5r=vZ{rZLp z@c}s~LlMtCKt9qW=4z!p5xgGO@53Wj-!dUumk~8~El%njS5)q;doOuZR4wEG?&bl) zg09wa)_&-MSZ(Wsi%h_Tb|p1qNy6=0F_%h>fl|6&9dtWrJy;OO^19N}!g|)p|8e!K zo}+|XZu2VdN?lz$&AI|HjW!!ib=6DJ_nn34=ZL|Q4%^-7{R%I`91w^kr!X&O1*y6O zp~NQ|o_e?BtREi-TnK)KBXh~mDIdn)&jS4d<!WgGX-YRs*|1#4bkel%(&ks6RW!Kn zp)ADQ44oHPu)jc2l$kyn<6bOQ%#{_%YAP?|Vmcrcfgt#b5s<6JazXWS*37IUxAd}N zZAnu~A1_!4*FHHeSNsKv$fB4KvqJB8HA~mX56aix%^rBrPUj2m=HY6QQ(%d-wUOu4 z?c^DcSz80tDdivQ<T)%G;yzwZiBKi4Vji#{h++kM!dI}VQ5J`MqvU(c9%@*+aA~R^ z$WdudD$ath0-?OcNinfdyvNeE+2O7X(4FhPp!kl*&9#)jYC~6y0%De-hGh+x7Vh*b zz{B<Hk=$YzE*FBe<RKNFlksSAsx>Qth?|FJeEmk+#MK!asPKVM(nEjiZaCR`TC|Tn zYDnHS|1=qCWh*{X?*{Z4LfMxfk<IoYkCSOA_wTW|Yme2{j+3ix$2H6!Ret?fv*%x? zrEmf~^5hY2zCX62@{r2qDOx(lmbycW@2cUYT=K+Mfbz26*=|=WkPN$rY;13xtSqnG zRaulx6YV(V*W3Ik=GL)m`D0W|$>356f~nNxp5#R(dJRMDPFSHYOrIk-+?F)_tvi|x z>a?S*=Lj?g8fmztSyKhl_;`r+4u^Y2+o!~~)HMo5Z#YTgjh3!{lk_#vHsS7Vtn3?` z5!MCx#7AvIFEQka-^zJJ33QGBKX<SF`RI=Y{#f9T1^!szj|Ki%;Ex6VSm2KZ{#f9T z1^!zsfcW*D($4jXho`%pjSKJZm$1i9yp+<s61;!CP*S24*K~a5Y3I%>uKCQy)9$vN zE$oRMrTAStS9?zfUKuG$6&1>V`Z}fWd*L6Fb<(3!(sDQCWaO$P?n!{uJfx_Ub#3`c zY^kVhjX!F;i=_p>3<=d$f%39~Kmn9o|K90k{_*tcuxBuL<L5TEcD&-Z?Ytdr?X=u& z{3ykZy&ik|JqO;@aj~%nMx<@$Xz$?3dqYk_;{P7=ZT0*AJmUL*9c*gw*vZb;lM?u; z-xp$N<L=_YOZodUjl680IePl>-jw)#N#an)C&2YdO8)*eHAhbmLpyhMn9FmRtDUPS z@6CTP0C24`5;y<B2*1AlngywY$S#nQkzODpBPAmzC%Z^VPf1BZL3xRmj+&nJ5*r)q zB^DMAZb2{yCqEYp3$F+-{}rKY*RQdIMI}V9N(f%PcJ)^Wi0UF)!Ns@d&M|;~^?<-2 z&^gj`fBk{}{yTS`1UL!#MG8tP;D9=M(D`#DB<C-Xkdj`w0300zd=9$6K+1UehAJ78 zkqtSY+a<}6q}+@AYE_-g_eQY-Qjgt3DJWT3+1NP*uLxbec3oOVR_>;}g8FR@O)YJm zJI41Pm_SV*n%O?Fdus3C=;Yz)<?Z9^=O6YmJR&kGIwtw`o0QbFx9`&P@(T)!ic3mA zRM*tj)i*RYHFtIQ^!D`+eEK{#J~25p{q6e<3XS=(yt2BszJc4@KR7%(#{WF|H3PbM z?i>gN0i6{635ow$;Ex6VSm2KZ{#f9T1^!szj|Ki%;Ex6VSm2KZ{#f9T1^!sz|ECrZ zrc%Xuha=V-I3kit`rT|@wUeKhmo#n;p0m&o!OeC8th1NLL||esUl0CJRjOaMNje2B zVqy;erilLEgNDN5J^sXZs8-QBZr5#5k;zHwN?N%a9b6{%v4I}BzQ)}Y2!KX|=4EbR z`Q?295y|ri3v>;UCr}T&+e6~P6DEyb`9_vHvm!2bt2p0wti}I-f4cuqd|GrTLOWCa z(JRd$;pKVfUXBgIjWE>H43x`bFjLfP-E;%~Gq%2)jt}|`F-oWDyDFC*PYl9Um>r1} zwQ)lwUqo|iVy;q2-4(F-qRrDJk8sSZCKw>riEJY~UO`W7X~NqUB{ekN<s^){LJa^F zuU-}9Q9%Ci7YMI?=;1}0LAr-ZCQI<K9lhWZN;g&2#zS~87U)u{@{T9_gQMAt*lmW+ zlFsFKdBclpbbPIh|KU^LXb?wl1&I_9KRBiEx+a}@XVxhBD?_tRvfSVW?%DT5<`pBW zxj=h-X^wugSfL|Ilq9I9eTIc-n!a?vMrh}^{NZ1iP=ovY$uq?}NKvOHhPZTF?S|tc z3Kq0HZ>h}s8x!&<!oxyexY5{_3~Q5I`fG(*4Va6-ms1H-)VU7M@JE4n@cH?8MxY3E zW9Has66P2Bxlegd;;`2lPtuoeAAj%;=2_PizVxQk&Djf_CW8$7(0n8_{#Oaj|2yvB z|LSj9M1&!nIT{iIH6HO+C8~`HCVbOPlNuCOOU^#J#q)@HMb_#DJ_$!+HMP^mGnD@w zAE4XlY-)BS*@v4(+*}HNu-Qg3o!vvEA3OAOAr2{jvHuz-zxU(bgK4at%*a1bKmR>& zC}$47#c+ZUR0%Kvbx)^yoB0cOmwd_=!>GKsJyaI{y4@!2JGM73_DqFgV_G(ux?kF- zTs_hHP{#Tpz5!EOj(iu);dCP6{)x*a`1ncGx#v>EV!}%6Nz4xwVaJ9OM5wE=R)}jI zmE-oVO}%Z1qPnE+a`tiPV`Sboz(X6`P9G?po)|8p$JBKq(6_Vfb<^8#pY{bj+ibVa zd1@+H9RGA-`0hkt>t%6)rnb~EZ4@WwB7@}%Y8~ZP;jw?5#f24%Vrlu-8`LeSQwur+ zhm?g?Cr}bEOshfn;>AK-VvOh(%X&pJn#%khO6L`wC|lKLDto0t_ktikx2QAEH>{6b zJMGp)aVYyXUtGbFv*HJSqN}8&^ZeSssgJsz+T?d76Ce_tozV@DLDF3}S3h2{yQe1J z)F(U)G%-H`N|dqXq6EVQ`c{sDW8r7%iUapFMXz+IUds+n8G?5$;f~K3T7gz$5>9}< z)ujD}k`K@%7pUG)Jxve{Ld7~9w7i>AjMj}!W1OYli#=8cpKi3e#_U^1*K9PiMtjmR zultKGG?BhxmGv=6we|d*{Pvr6So=w3aNQTe^>MFwA2fLsz-NunZXWBtRiExs_*o+T z>WiNVbN1OAKtGD(^AkiY!MQ^0U675vmrS`t#-M%3${xB~WeS85P3-zlO!oh9HTW+( zV2_R+FJwI#sE5#7g0OcM)SYOi*Ja!mxK1?t(8#}{c_ZYoGOde9gT%^pw*--NF+Ef! z@K!apnS9&n7x^I$A%1Ab7WIiLqE;edWVtK_ZCY<(e5W;1$zQrROsAp$4k5TYjN0U* z7Aey4(v6ba@s~&+aDhN;q^zkQt;}0nCv>D~B?d6OG3mL@e*AT*+I;&(_n&GX+q#j2 z0Ia>Tb-4am@-BdagWf5aSvHtAX4z%?pouL}F0d+(E6Z>31PYLFP%QRYpIkA?#&cy8 zEG@CwF$8#7pxUUYk|oM><Qa!z1P%AVtGlS1<m3%zNB>y(Tecz5>0#qRx@PPw@+>*x zCg;V@VU!g!44Y_<6KsnH_`MgDtvkG7Tu1e|jyxSS)gD=rKW;HgxE=ql*oh-$D$MC5 zA<YK0Upk|-dA%uXdF+8__>H|6y;^3wCI99@zgkipajh#lUq@ELYc2;BsU|gdzs|BE zH(+4ri_<g%e^;_?iph0Ty2nNy#BI|`TeM0|g@X!9)@iqbl(Ryz!Ur=k_l_)mawVud z&|2@?a;F9hD0E`W{ZkR8=E!3ccY}tl*$V*?0jPq0ltnv12+j^)duIk;a);x*CIk7V z2znJ8JOZ!#I3A6`_>xHzhU^xqa^tev4%h#y7v6v8G5AlOf*EQYvk|0%7N$z6Yw_f} zHgkhFzJ;-v{RH~LbS<01Madj}t#)3kyF#@4*3;&!^U*5bj!JK_HmL8KjX7q63)R6# z(=RasL5C&)0mx-&5kUq!m&JgUP0H1KE@oF9mH#>a+}kQ!!e&w4hq(<|6GZjK-V7^o zEBQnA#3Z+RPqS!v{+z{zcc@^W_vdnVeR9xLFEDiG&w<)FyWyA87hzkT=9x}A&Tr}y zKF`;;)Yuo1`1?cO&J)~lmigut(_NPSR~lcbU-Wy+>Mm6qyix>66AfXkPx#vaLaO$} zU!Xqce7r4YJD|_%+C+s6oZ1raO~rZJgLL+(mXB@N=W8TR>4%hmuf+ud=aQY{v5SdY zhl!+f_@b4r)4QYS=t>sz)_1AAQb<x;3%W?6oYPF0nUjBHDC}7vzt7E3W$W#8^<+UY zI~g8v(~YC1Jc>A($S|aEP~`?{W^6?G(k&_}mUFj;1Cy+b>H3CQ=K5Zn5%_RiA8&qE zIc5hRuhaz!0!j}mg1CjGq7CB32_<>g(XZ%$x#VTzJjSr8*3f@gjw+4OVwvb5EsYy^ z$o-lsWH-5P8T^LO1zT5m<mRy19v#`bHCF{vFkiLE3hz48r>LEJ(G_DO;y@3ol=WIS zYsW?gn&Ehg3wkknuv>a8Ur#vK@AcAUT#jx4Nv7=78r`>sj@!B;O1_uT=6uaboXX`O zzL|-yh=We;&09p?DA4D6l`nuZdjo98(6@nV__PXN`(B#-wcv{rNUiEA#dmf!uM))r zv_ZW5@L?&7S~!;yRCMkrDe%g4)(WV|A@!+9NHctpBaO%^7Y|=cz{e7akY6BngeLxB zr4>HEW5&DbgLzQu%3;x4HUEOAj!L<|K*2}T=6^rr%)<bo(Fh)@9RX}}E#HNjV#YWF z42yIGlIlx1qrer90(J3mS>)KAY#*`L9v)>Ik{3lid)-!)BJnzw-3ba$^YC7nGh?f% z;t|3FR7N)KCKc?cF)vw_PmlglK^g5*Qm?-tb7!CtKHhoBxad~1-2$R)Lw|JUp&4}x zh8?1>;RePw5rF;gwnq>A7zcQyL*8Htr1=Nm>ir%jXDe{_t#pdZx9b|gt(|w5qYd@^ z1^<(i@xS#jIscv6M%RNOg})vq1Q*ULGKR>9A2c2HgfZx$hUpxJxR{0=D6%%Z<Dc;J z#$AuJI((Z=1`sBM`JrIZ3ggzfbC=si1*E{5ob9=Y`*?We5Zao|(X92$`Gpm<_+poW zz=u1HV633bsIlPua(x%c(o(kB&ta5LCmpSCSr@%?o3#1qeDIOu5T<UFEy>Q4Kk?W( zf1=$U5c691j)&V_I$~w{nq1h^pl>3{#^Z;0_IpjwX{?J_UUH5a(+o9`m4t_X)YNLD zsHDPZ%zuq7#>0C)n(6tGMV3~~Pe{Zyyc!u~`UudH>!g>$aI2`=qb?X;hc7X)Nf4Ra zkE*Y3WB1L1fCJ5^m2~pdZ(`3XQ&>`K1~P8%Q<$k~jmQdr|7WKxL*TLYcg~%UyhNG( zhz1lS`Xuq?b{l7Z(KoG}{^eP2H&?PJ_3C?JJRVu(Jd<mS47Kq(flT&Gi<E0}tg_Yp zFbCJbZ^^=@MsFD1JELb>Q(MKVl`PRzKzD=tsrkgz)0!FsNma^-z$dil_?4YkhojrM z2+SDp1*dcoZ~u+CyCF-CqO4AzUn<xiXXP~~;vI)C08N^aQE)5`1i$R;D~FK{!yq^u zn^mH1{Hxhk-mSDYTr|86urN{kAINO}o}NY;GL{y0Y;q&xe{GH*Hqxrrn=O|Qe(qJ+ z_`RpoxYvKcj4}b!2HNB348p8%S_xj<SFLlJBK5}It7h{-_k(uyug@1pBF(YI_r}E| zV|EA{sCPR{HLdj%=N4TBlWZRv?kKZ|2NW`|!fWZ<VK1$CIV^@Qv{?i{iF$t9>haHP z{L03vD8OI07+KX(Dw=ulRiVZ5qtIRjges5^n-)T_E8NK9*%uY7*JFrz`29;q@v{>z z#Qnc+d&1NOWcoV4s@wH)_nTbRm3P7p=HLo@*7Uw(gQ)giQ8P?0g8^AALiL$T-Gw-$ z+b70qX;^~l502Kdz(Bl@&EsPR=TCmTrypm#FMC5`Vn*>)Gz4pE&vhA7n%Ze83(ErX za-%`1fwG^naE^oPf8Y2@2s${v)Y*zB1gSCtf95#-YJ(*ja?&Iaw`$AN5$gN`yBMkD zi~+|e*vBB@`Lho73L;|lCPs7Ry@fE$=hr7EP#YM~ni=@8c0%kxF&+Xi9-U_RR@$dt zkz*Vbuw*uU)$({)W^tMoCyrK$$L`GZ1$hg9XTi<f3@=yxdjH8GAJVqR8h92;@Y7vw zyb;3|j1Jq+tI6u_zFmm~?~kuJ1G0+|@3961yl*5hamE3n4X7Qq7)_Q9bjr9MYu6+% z%*<%#Eh?!BzDgM$3ibC!sQz2u=>PaT!o$HgGEQ6NR7YyJ?^s@S_D?q*4xoB`JN9$Z z=iIHKWeiT{OQ1a7C!e5%M;^_HOxI8iQR+NR-Z9+zBF4}CqB6Z3>VrT2ux_&dPBiUS z=tB%SpZv?+#N2DV2=%|NW)H${hR1XgMJIqRqD;wYtFc4NWGlzY1&gY?QKhYPL7$O_ z>!#V*EP};!;<wtwNZi_fWB;rSg+Ur?n}n2A!&1-%U)wJKr-`d|-7~%QIvM2&I!|G} z(K1a|4E9)IL*xsK4M1~6qi(C<lYs0oyhT$er{n+;Vlth2&7%lV8@yd#!^GFx`t93K zW#3IhV22=O)%s|@PJp8+ZbRvlcyhf?BUPMUfcFtOCFKw<=k9JErb(ICBo;CSf@92^ z{09#RI_Hta`tX=$SS&$207K)WYbkC#p)zn{_g?+S7s-KhkKX~j7QyZD{*V}?s!9@i z@#43u#*Sqc1}<Wn+IHauYLH83&SiOx@Yv@1_B>zLspD>U^V?lVY&$<1Uw-Cq@TkiM z9SQ2)4d(Dw`O&XZh>E9NId<58%EFM7R5i%l3;Q-$<anI4W<uZnY;^YLI*i(e!FImk z#Z9iM%)hrMAnJAs7Hh<ZR6cY%(W`5Zu+flZjr#7F$nAG>#MbNAmyK>uNUwM!H{%nb zbj3xCUWXxR?uPL=r2Ru1-xN`X`$k_2KpaJDwjPIzeOJB=lf5|@hdG`+;C||xK10<? zcBJ?=)pS&8JAR~^e)FWH(i|nT8Y9zA<2bV$Eu*J`=GL52jM^66x~s|E{ru-(=3D^f z?)A*cx;M??Z;sDP`BA`YQlCkDMtxMoL4j$#6b!b)Z*2Bh@hA3~1y$6ia4q6QeYFQG z4RQtIY!UvuC5X%TNK`*Q5_bu2Z9FCZOq!EMmUCTHRN&&VyN*a{vH`XvabKno3s$Sa zeg(M1IrSttb(Ot+^Y>}>FStF(4o$CdIuVZoZ-X7`!>rpQrYu%HRa}=l4}K2$a|2dm zwl=JZA@;3|p?uWcnA9+nrjMp0R1tyqv83e+m$7exuYIgjrK!wyzD$cN>Do2Qa)WyI z0mI>hj=%0{zQDtdoh+Pydi3nJ1r)`H<pqc>Nm<QX08GhOj;*lX`GxB~l4kSs7vk;X zkECt=cX-dFtn^9=lnpgisd@%zt!Q)&|Fehyq*ermT!`5r@EpK%DMQx_I4;a4NPg^O zASaIVb`zXsBfS<7qam%&m)()bsiwm-2PiYIwqL5-Wt>@9=O7Qst5H}es{ZT>Fd9$J zs`Jc$)e5#acfXBZ7sDA8(95BfaM%)LwfDtr@KP%7;^>7uwOd`{#~Pl&EVxT2*>Qok zd2=uMwHg~3B;x{;JE}oJo%5D<%qu6|n;eK<Bh-+-vKWlQpeUm^V&%(SdoM37HJv_9 ztiQ=lHg>Z!-D}3u6mPB>ilQ~SU8C1==4O6kk`Mb}*4mrz8ZDGQmwkjz$%7O8Xe|C- z+De_>7drE;2Map6zvjJCG*{<$c_=`6r&KxQCiAK>J`GLU(6wo)iP0F(!^KVOJgdLQ z^n<XsbpeIPWYrDBT?ufY-4NOZIX-Ov$ycXzu7se5#HTrB)7Q2N8$^3%)Hq2W3CQnP z_^_N|PN9fta-93luFjZ<jO8WsctGX&V_hnWs^BsDetfiHaLU9QOLIj<WLl+@>`C|n zI&d?<x~6iW+tG)xZ|0>xv+!A2^T^pN%1W<ho7CXTbBQK`!h_FO%jtOZDrfP!_tLry zHB=g_R%YbgLcjAMJ%@NmGAtXhsTtz2j}mBH@`t{-VH}>Fx{Wip|LrFKJz4)PX!hUy z4&a{ec5_(ABIQ+HSL~QOvRevjeZy%Z%SyL2d=nb5kyax=6nc02^fbH1uC@&ywG4IU z$GzWTWG@?4p}-q=1M)lpL8y5ck&&wG=ed@NbT_Fx-St}fb?f(kM;uA`>7MpW<Z&{} zkPd&A@SvjaB9{wW-4U(hZeW04r5e)E1_To$#VGO96ZlWQ#O+-m1U$Hg*Ci6OiP{Ja zyq?T<fA<iFr8!YeoRc&0WWBW^xNaJ%jL|h<uyRxk6#QVeJ`+>FG%ZVf=1v_nezsWQ zn-(f<kf7ibz9n+dGE8eWbE`a>W(IsibAS3r1-C(GI~x*8?GKGP9H#Bg(-CpE$dG}_ zq;ScSf7*gvKb{fh>{Ga8C4_A&&NmS5N_+LTr}Q}A^+WgCb2ue-k%2DWXl`v}&No13 zsxQf3Ty*!*8%=vYd4A4`0Y&Wq%5^1HR5lm>b-w~EhA0pe(<LhSgd_N!lR9WmY|5KA z%WWqBS~F?^1IX1#`!VwzgWAo_Su;a0mVnfdqZVE*PSws0Q)o84TM`c;hVfhl+GoE3 zGk+cyD2sQ=4^+nWqSt1^54$bbJCM-iXs*ZB$csjsF^B(*+Y}9;rR{Ay*kzXdp*`&} zZ4z}Z&`utzu?+R3Z{~w=x5y;bKDQO|z5Itba9`CUcwL}q-b2Ub5eo~mIkIHwIm!Ee zle?3;0D0i6D?lJ;wFh6j(&mEIEW?e_k*y`+;oUO=CkhX5*8?l9YL;l2jeN#9bKP0P z>22UPB68r1-`eqKmRPG?oa8<_F%pW_OtG<Xy4)h$H~DHODE9q!QVSGmWOW&5fCfh? zK`?sf1+Yaeg7K|C$~nH?S}#Go=Do-qkN|chZUe2uRErM)dJ=2&FA#wYPULH7W7r__ z;^bnL3=mE;Jh{2+&>Lpmj?RIUEt2F59rVf?{uMwdcn2S3hhg7>@l7J6^@6`J*G-5N zUb|{MsXZ`&08bKGEq%QT>v6EYcU#X6uidTgzAPa#s;o0Fho5fuWl|d@$f1-K?_yCV zW9Ylxyw8bGF^x?&6UiRwi@;J<q~Ckln_DeexU;sMCD3b9de(eXoDy$TQ3*5{+g@Wg zVF&Lml>Y+30)MYZ23^+22fsjj8mfNffsfKxwPSnD$U^M%bv}F(?U}mw`g)ib%Z=0V zMeeeN62uk!exC36gAp;haM-q4|FfqqD!R`GwyK56v<N`Z5`P5#JvW%Kk!RRNf@>|3 z6$Orxvr-yYQpeGmjM*jLjd0j@DZdm~TNYv4u?0y9AZ6|dG{mm7mKqc~XHmB_)Z=K= zRz!^E>E`BougC!{;>R5_%SUFB{leA^8^>5*eofZ&WVM9t=WX}=?sPDm{sJA9jRPuT zko(x7gt8!Xz}jx0R=GuN*?0ca*pP75Ei&hk62x`fZfAv5f3R3Kbh?h_&ehb5xeYO& z-FW8g-Q<m@`98u??*hTUK&pwC;7iZo1lLw_6m6mlYWMu?+L7Fqm4(kcM;B5Obb9CJ zz;5H%e_;y{PQX`SWU+EDtsjIAELwh2@}4^S?6#u43W6)_FXM#ziw)r@3hdZwjU^os zVg_&(9wtVmEz)l<;Y0F)xT)dDav~MocMGk>I7`y9>Us-OiZDk=pXH<<Dv`UM+;$Wz zX|9N_jX#lI@ZTcGRkEJKj-r8EW_=65p{n4x6G;6pkVEzf^8wxIDL_9Cu54e5ACBIs zgR_3Z#F~nFAyj4qpVJ!(z23uIm@a!@sqeR4d-|??+iY*;=Af2qCH?1)=eda_GW%zV zeWC&SfLfQvZV1xYoqPN9L%y_A9=;<hxx)&3{APJ|5_#7yi}c%{stv(#+~)(xOJMU! z?6#(x!AA=uK8W}x^6A<j;){3KZUghT(f{EM!w=qXuvJ%sEhk<{ki#Cf)p4Z}AH(AB zcVEwSI~&?+s-&{W*2aIrd1zpXDSV5*ifRpV&@BDilJY1+Tb}OyN=)a8Y%~fHH&gTu z<$JlN?zM)_uBhl&hNnz6Y>3AX;{7Xr?}Z~D*rPy9(+imzGR#KLbIz?@o9uHC$H?K1 z8k>8(sZh6K&$33d7g8~Z%@gSR^<f<5epTqv%x*Wpb$&I8zbQUd!}ttU{lPb890NT9 z7!P0zzOH)0fp8~X4VZKh?tNg&fuN1=u3_sKlC^S!<4&0qOZ~keklmcz2S!Q7eJkjX zz@T5CYy`zG&>}hE>Yj=U5YJD)`~}(#BVIaV1jmr{w=uxDhw}ytV%O_q&qXi>#b7S1 z)&s8ILlxmMPHXH!excxxBh5XQmlhq*ajT7$tPk<_9s$_nTi7`Nqx|KEb7gZI6juf# z;zTm(l)uq+HI1GsePc?*>nQ;|tHE^G%0v{Rn`y~_#cIKPV<xrK(d$VSYx`TpvdFLG z^}>K^GfB@$THIEkv#>AhPW@!<n{kw1MN#&E$F*dm(_-Gr=VYo!r3dZN>0HxB-!{v< zP(ylOS*A@B2NvMp-~fj*mPKZ^l=>Vw@7So7DmpPbOGHIz!n2*k_llnDqW<fFrj}$k zM!&{S4^EyoH4?=Ly05!`fo78kiuDQxNk@p<poT<o_Th>EXc)&&!sXnyk7zx;@<(#6 z7Zr>4ru_z%2;bMuWl&)lShT&!5ttIG9^j<IFihdC15$=hOo2mH`0&MD!CYY)wRl~$ zpNmVuo31;JUDD+n?Hd7P{V22a$UYcr-A4nwN&3+%fh77xi?X*%)E%xi%h1+I%X?R{ z?;;~^q$RUz@D!Bxx>;Y;iUKHXC>{O5QGtrG8CNpwxEmYg48J75vCKcmmef&6%t;+v za4r!OjOGXkS};%g?8<iYWa0qIj00PysUfj*g9XE-T`&PhlLc`}hm=RJkE4_|;r!4# zaUQ&_KK6re!lr4RC6DUcRg>Yj@a7zMgF1JB?zoND0$>xi#?cIn@03gXif(gsim{T} zc{kDkyLZ4NLfQBlf(K_(jLIazxJ?E+3Rcw5b1)RnTV63@w|o2f(h>X}oN~F16-ck* zYtW0#zN<Y`02r<tkXYsTeE#aU%c|4h#0}?B6>=>{7;4*TQ0MuHMpm5<X_U!a*~RPL zr3chztsK8$LZ^~j=U-f+23?z&)^Lji#f1%5DCD;6w++gDmkr9d*&__Mv~byTmko*T zwh25Wh_q#!#_IFjkh{j56Ga~DJjijr!;PQ^?ET-{RN%wM|Majk+jjvgA>%mu$_t`O z<Jgst6ducP`%<=7{R9iz?+6D31Ya72xmoF{O9zsDpVpu!^<}#ID#Q6-Ad^bP0X(pa zK&+U4f!gTsM*nI`2^ZnjvV`@_0Z#~<Df8N?NH>rZa%iVi69+Av=EN+LLSkja>E?^- z;6?B!^FhUSr5)KRH({r%i=~yY{%nfbzBcjZNpXUDxnq6a%vBf6$EI%-oUy4F0%E$Y zzi%4Yq~MBUFCHPmD63d(OLsEfpwqiqVC>V4+Q#PZA{9+P;wztcK2<3+g_>*l1tmri zU;yLmYinP-x_D|QRyFdfw^RdYrkm{1ST5V0ZP%1>Jgh&98%Oi0rmEevPVn@I)xl-Q z@PzF>S!Gd7KElcS<VtjjQ(8f+v#_6-UB6{XVd9!__YP5%plw=FxrBFFHeJx;k}X2- z(ykaZ-q<}TJ26Ng3M}GVx@Yv8P*g#bQ+unPX<#Q4aSpLnLn*68i^U!~#zB+;)o_`) z<Liwy3K7G8dy4MQW7;L4rDNC~9E5|QiL;JAP<;$!`IHQ(tA=SNBp<6+YtLJN4^<{x z00*iVh#L>IezQL(LGVK^flByDG##_=j<OsS8&QbLFe<jN*lwlCh<y0S@P4)UJT1V` zcbJY27F}<yFGV>&84)4QmY6%q`oxl_SGh9Wt@N`E0Z?G<+1XKk@z0r}B$d~0jbSk9 z(a&z1&9Z#88%Wty?7V^7CGFS44MWf6gYrpa9>?qt5bT``@yC|qhb`h&-|N1xV4d1b z85H00yIo5B9`b5?xB`MU=v8Lw<aFWEEp<+Q#XBxaw*Efry*G0ew*Nuf6oI_J$*lQO zds7^8KvTB<2*Wck{1;667d-xd93J~8_;ID}vhV9#*!~DHSfD9DSMyZmvTv5S)K^i$ zImH!ZfGYkJ+pQXsI})f|>WGz}Ga1*5k+B6J-(cq=yduV$9ADhaQP&=dgz%)6xi+vG zb4oWPL&f8`i<1`qDTyTf2?@i6TC(=0sc>NzUmhATIhjNuJnP>*h<rZqiE^PX7P!S3 zeeDNYff~O+aKO!q18C`QPQjGam*RyUOyups#PY;N9@*N=X+o%>IvRdj;gLOyw0O9I zd5fM@54{LQhWDG91@*nNv3_@XaJY*p;XW4Qq*J&#?1q|u_=0a7n)pdHd#CM=#EFbg zE%couAeLer2*F)xs>DC2ZPn7>r>Q7Nw%?}A=OqS0W&W3JvtBN~0nJm4X{Y#(ujz7I zQ+Sg0nn}{4Jj<C%H<bQ`K@ptt=<|Os)QC(&+xML5b}mQ)6)ps2kIMN4(|$K+*fUyn zzhvQ5ULFZj_vtKZd@fF9J|9<E>WFHkRo{1<GTKdwYyvb-rfrG{63y7Baj{F{j85Li zECbs06Gf*Q6`lQ>cLTHU_j(7P$1(agbe`z9Ub;fs_VSLckRqKL<c1}wTNeH3;XG3h zk<UD8OJKx{YPvntE)#j+bDugc<3?QRs+ZrBli?n5YP{2NCrcY?<KzQIb46|w3W)oo zXD^>}`iHCJ7X}D*4_(<+!-|CzZirL_*xS+|d(HXXb1slrGW)?o%Vm^x`?7>!+h=Oi zI-_-hHMQd|CISr?FUNmQsu9{fnJ#^xY!x7Eso+;9#rVC1$0o%`Oe#U+pHP?m;aH;Z zG~osrfJ|Skd@G};MqJ+xM;s@nexXo)!7sCN1SXNmh|NVK80H<D6JuyPTU;bfUwjlu zY<w<%g5iQz;Dvf$`Nl#gMcS*yJcrcv8X8XTL$8wLdcV1F;rVA-#)~(9mVL}a4r5s3 z3FN4Ott}-ldzPZ{;3Hw#TJvNOCU|NIN((sGL=Ke%&r~e2#Iv={`a5kVYf8iTQ-UoP zaR)C~xz59f^+RG;(s<GeDkiGTJGuBS*YXr<f!<Gh{q}~{1H5Qb3XY*-j2Ddxe3ai% zzqSH9;%3b!ZRJ$B@b-v}X2-{TE%9$f-tOFBCwg5cnB%-watqBY2=Y^&H^u5W%^hKt z7H{GOGU*TFXw@IL_Qe1*d&Vg}GW<&2h`sE|`!tq?yQe;Wrj2oF{BbYN37GJ0S}Ba^ z%k0w4Y)*v{tq$asnr<C8yxD`#dzh&(1Mp-v)4WXTyOO*Ox8!P5i!jnIh6%P=vgVT& z75+_ysW6n|E>bFAwx*Q-Lt);k2*r;jk6w?go4B;t+A;`@7HXHWzZ77mY#H{l7dQ<b z`l!`t-^Ot_n0XN3_42``5u;OziR41RK&+O~E>T#|%t9_&N6Ds$=E~kRUem29%S{fp zPn)||NgBTWu>`($rZ&D!4zZ^4MRNy#X_j8k(`#z%3x;2w1cr?lqb%t<h7=anuo_42 zoV07k4}&yk_%E+M@sYgxiE!OIgrgw6y*pMn?d{y{2B?v$6xTbxhjW(+F9>BL4hZsz zU{QSiKEN_857hcm=#_4y${n)|1qiX=J`AWa;r){g>B54q;U*8;a&gu@g)fC}m^wO@ z@c#mZU{1glUJ3{PX<eJ<L1z6ATPKi`4HC2SrcRQ6V`|9?eLU<2Lwl*<%R~NkkMZL= zF7VEig+$Jm$;3YA2T#|i@~;Z*R~q#ALu2d2BStl3+A@Iw=w~Xo&QZYReO(1YHQbUv zXZW}%c@Md%o8kI<AgsP73&$PP!JOl@nL0958D*uquHVXKORpliCwINR64YLGE(Lk- zDdz<!vRCGKTl{qI3s35A<mJf44(d-l!fq$zmpPwgm3ag?QtzZ$Sq*%D#Ylhs8h607 z?fs`&pS&{6{ixwHbTE-up(?OzW;ZUAkBhUwDO-O(qs*vmdKoYm9?`qNj}?k2cd;G& z6z%HeTrkhYpmUyyjcqwv;JDb=9EAzI+@{bQ9_yPtqutTkw5Qru&+9&th>kl}9iC?1 z<e{AsRZ>NjaYGHFG#ot(F?T&VqlPhYM46iZ;lPl2d9n7qBg2{%*M!$kOiaJQw2PR9 zLMo%!osS*AKu=!d@3&)Hi2x7T$T&HX#NZdG2f%j7@cUg^QaG0`ypv~pQ$rPx%S?XG zeQ_d!nmpLK_4l@pZ12zJ43t{RX4K7dW|^r?OX^F$QQrW)D>1P893edtERPq~!41dA z)YeQZ#k+`Fl+;;vX{P|Zn1cp|UJ&ef77)Q@)6xF|Ephw~u6H99CW85}CMjjTF5Kll zN$*lGS>~$R&NSZ<?op9&v}T6YnGm}szNoN>$Z6$+#3$W`7lmIFH)C?K-JRBy<HiqC zwI+~y?>~`8h3Mui9(LW5C(r~OdSo+Hdg(&WJ2&uvMPwW*1d?YTlPh)%gANflC)>pE z_WF325|uQJqMp53%;e16LLSAH*X*Fa4`BzD9f6kEa{!tlItEm06`^yjqpet{kb0<j z;aii^XC^xvJGV^ONu;mWkITaeo&eDAPs%(Hs6UQ`RQURH3-vN)1O%MEiJ+J~k~V(v zHLg5({U?o|2Z0Lbzv1lVg0p^jk8h7fhcBs6yCyRixp4pw2husxfFEMMfMoSCODGOT z?d(=&NZ!#pSZM*IbfY0Go-mM;cY1I|@g}SBT+dT=oAcV|!xG%ljp1i`NUr9WX@e*P zb8IQUshPpY-sGHQ@{>gq8CxQUbyxd=IKBZ$bOJ6Zrf$}k#Ht3Ly)>k@Y4}mRaBhCk zwZ6gV#oaraBrgnPzOScyWu+8%+7``fINP7!ieXE0$~gc%_yBlUKfi8vw=>GXd3<N! zkqbiO2bs!Vmao;_-q+?`)PZbdS205fm%(7jT8_gapiSs8WgiVx<wOkMIn|0*vMt)+ zP%>6?b;%|7j1mMN^sigrH8Qd=ph0TtENkbpk!HT&I`}bBx60_Cum$J5JSBj0uw-;L zVOY~NAw9~urv}g|%$Xy2q4}d0);+r{=6L;ngC@NzmiA_i?>mbh-fBlCs};MElY_+E zorO^FcqL;5KJ5M&!4~z+Q#dxjv=S9<x9}xlrwJ0nvF;gfGPc<du%7n5i!`cfsGXOW z-(Rxf7aDhdr-iW;WyV-ZPa(yZb`wnek7Hymy4*csGVfi{{Az2LeK}&pt?>pp{29Cp zj|UQz>bJpo8UQe7uw?Dd4A8`hrNB$^?lLTri+7YJzY4j%7<&{Fhx-ZrU1+H1eKD>- zhaExIepaAFUSbLWypF`n4nooSZb!G5O&<Xh<W3(x04Rv*;^DxWB<0ON+#DOSaTOgb zOt+~&2IK)P&l5+iSaB@5g$^esnIB~4kMbQ|Blae5+j_21aY2l-lyO$;8j_Yob3fC? zum)u*YbhX@firl~nBB)GmN|=}k`?e)41D0@k;kfs-<-$V=zXnGm6`0#*z4actu!wt zqYCz2ZHEnK+nx}@{p0-_dI6EgoJ}jX^i`{DHS9sMeslPQVLkz6*c11V(?Q7R<_8W$ zp8=&7dj7mHgwavFaEN;Vnehb(HPv$C?CbTN;Y5~I0HiqKtc4RUGJAAdiH!l3KF;yE zgN|PI4kLYHOY-{<U%Op6o*iqR5gr8mb@4kunCMXmFuQgW#m6h&aF(&o@^}1rRh|<% zn6zmTj_80e=usb;_4ibm1YJRErlY6W-d))07jKbd7#^8!^!3oF#_mMg7pxoknV2L+ zVeYP;uPy5b(#wGSm_K=x3=PkwCXVY^)|gE&z}a+Oj!u1rZrL;yQfm<Q?B4A<>~su< z@y@;k%MHTURS)oCTTynvsjly{hhJT4!Iwm4IR_n|<x{k915kq1hh~*`=piQc794H1 zGhEtD%Zoi#qEq0>h3bUKQ2-c(%HxEHI@2-mEoLtOH#bA71FEk56rRc|dW!x2w`E~2 z3=xvF4=Cg44w-$3^ofbt2Zquxz^7>1G)EPMV}>}<tu29S(=IX*X&No3!scO7IOR&* zG3%uB>{>|{S|Igimd3*;UwZ}Ys;18uB5vZ<bDW!*`=d}ea4dOLq1=nSpW*S9P;biY zM(s!53Bsdm2q7FI@z7GZSMCJ-LW%!MOPR(p&`v;?cIob#ESc+;kyh~JG(iqWvm2vC zQ@p7V{@$cvKl*m++V}gON#pF0or!kZI$cqZP7amQ!dWVF=f*%3na6Ssqov2z_sZn| z$><MQrG#VfH6Ex~IvR~q->FMY<Ih}8o-{bT%yYa`ef_1<ji1BJodj7RVT*w?%&qHT zn}@acwrS?v7agA?(nGqQ%fjn6Eq6kS@YXuGv%`ewg4y--0)NkY+M*R>Y|G(4o?oOS z({>mjIM@E(32THb71a|TOo_3(jNKAyc^BQsaQ?>`v-4MJL;?>(b`QsL>v5FlK<%ve zOVclMVG<5|KXBh0EBu0G0u>Wv;rKhxOlb$$vX`O3R89uvfnr!<t_T&$@Hy|>Z0rl) zc>@j!&h>e1-dKPUzR#LtO;+NYa$@AcC}r-X7$m^$Ib=15>+pnfy%zGKnYZ0ix6ePT z5S?l0v9j=`lYCT_ShwW~rNBVKvo7H@vr9#0#4^bWeVB6Eb)W3px=VnS2a4fc1z0i= zz%s3+4Pfl&Gi|Z`UFjyR1sf+UiS|Vcrg!&X^>No;NlR+p2SC>^MCRF1Q!6p-*EDp1 z^HrGvzQ*d>##3YU>!As^UEe-C`uT|<+#UE3oqYjM5obk-t3<&3+pjyCxe>?eg}`&K zUO^~G{pmUptoXrR*|GLmq{z%&?H9e?J-w^%0W9~*k01}LOpC~9q!9{C=^G*zs9yGc z{Um;<BwFdH(;?*(24{O8j(Sc|2C@PTcYqPMpE*JPm;cA`UgeGoN13G?9AtgfX+{~x z1GA}5*+~1RPk=@ExeEQ1m-)PP?@STmLsvS_yC9kOvR%y9qK_Yl^0ymLOuzM&SK$lP zuboh`E%t2=q8uuAD_q}X!Dlj5op$byw+6sp92Vn*LTi<uJ~3TxuZcm8`U^{j-m2Kx z-zHJTJ&nZZ1#iqbyk0YF#Uowz?=&zZUZY>SFk>*FNR(NVp4LdBYz{3h;mg$U18<*m z!2~4I%!@~$$HZzw`5c#$1Wrv3Q%o=MZu9ecm1l1we&?4&eAS6WIUpn}Tc90P;oksi z%MU67`jZ@4Ow8`GQc$yq=%f^a82ywb6ps*3@{qqkXn^_#CKiUarg6kPK#tlc6?`P8 zQIag`{|0Zn*^jZ(&*mIkL~|b@#KQu$tA~p^i(}QvcP}IjNoAjLo<MU5oYgqmVl<c$ zKisR};V8MWaF->OF$kX<$K|@@u0!<NIDjSxKAH+-N6mXr0fix875-^)mmZdSs;6lp z{93k+WZ<iVSwSD*5wgKFxV|uzykM}S!u?l(>ej5q`o~=p!{XDh)5!^fydI5o>@s!| z@vQ=C)RbWUJmi9hKsXnv73lL{wfTCUwBhEtY%-tmi9J?4ct6zOP1vr>!K}m5sdDmN zea^wV*WI>A-2n-Y`K8%mnspzJ>8OK2OMP?GAI&da&&%Hl-5jqPvd7P&hhH8Fj(G0U zZA_(CEKk)uZnuxNOc+(DNA*9>YfX*8w25r^M<gyOZk{p9X50&Pwxz!M+|JgG?K>b! z`4z&kUofH~;rnA}`mn{Ce7ziwnbqf9?azG#KXTeq0TaO3;n2g&AIxG~w(VDj4u2H> zkY`hw7asjUwW%9$sw0Yc6oZ~Iszaxcl+mftJO}P38G+fW%ydC3$MIGFxz|Gtx^@(@ zs06J#0P79cS)x0+^cUfE8H$d~fymf2F{@gi@O9y5zIQ{kcOJ846WDD1Y9)DJ8x7WO z=y0VS1Fq_^x|wg@5>5Q-a^%|gN%bDZ{HB#+5Kcb`{6G(a3T~;yf4vJxV8k!KYq@pf z6H|OO(U18+F6@v7`d~z~^6-pz?IdjVON|tTx5pXE{6WVcj--Q!t!+YjouE<teSxY} zpeaI!b~z=%T)G|G7|a8N4YP&t#YJM>{Yj#Dpz`ZGt?Fn?$scSMY$kWp*w!ukBRS-- zN2w!P%RN(7m+r1QZLzWM#*CEHMRC-gu!bO2%N~Zy$;vX#X*528-4_VXYcz-=icKL& zu?dQU6&f<)Ojef~>R#PS3X{&BSDhx2Ny%HcQpAeoqgvIiaDgYwZN+}f;lyk=Fg<df zLv9#b7ZCIW-=P2cA-1Td$h=vgq2Ab>U+$JAWhh+XGv3D$?IL%(ejI7U1L!IH=0uoN z{CM@LPA$1})NQ=Z%d;!SLS+<5P1etAyoMmhN3=6P!bj#>IviPXPuyejtfyu%Ju2g! zyD~3iac-=LI0IxD00r*;mylfykel2f(y#Gc8{Z*lRp3!u5s303s<)!F_XJ{;V<6&) zI|u&4eSrpOZWt;%?r>Y%*LB|<J5?j#qv=eSuIrd87@rb(tR2TSO|vu{$I)X&o!Gr_ z3F}(tSGn`P0KvLrD|u&!?MyD{Cc+c{5cLTuggsUt6?<p4GPcN=@&oqxVY`XU<o|dc za<|Xc$F6A2?65NPN-0ZpY2jgSfo{``xY%v6uom%m>HBWD#g4r|%}C2rJM?$4grhi` zGFL|Sq!)yc$~2UIof`&Fic9a0uPAqQk-k_vG4{;LYsU4)wWMtDYDIwP@0dO5gYRpt zu{syX-3c$wfFO0l$Mqi-Z3_9vkmEh6+2pkbEE|zM-QA-buYbZsTj!e_()JEXV7T)% z_VETw^bnseFrKoVpy!VWISg>|=}LDkv|&`YS9;RP5j1)0P9+2+>>cyOsKBV)t>m^L z$WQ`QJbE|vc7$xQ2?a;!!|0ClrEr&Z>jS1Lpb7*?#&AID4-h95Kt0Hk8a)0sk#}tB zq;C{f@uRUdB{!V^)s3eNwUNcASM{7m9|rU4N$w0dDtzu2tS>Sf{}hP6XY{rhyj2$b zV5xZ}a|sdFoYH$79%xkP*c@^?V|Uot_88vM1PNjzIFGc^67IC(!=CP0`8pepO)~k< zSHE_FKstJ;r;DK1&~)b<RQPd>8(F;L6*A&tlP>u&EA%Ld<yh)7=S-Y<xC)c+W3~bu zSv)FUL0+GJPL%`3Kc3*6ernx8w}aOr5)gQ(2lfR%2&r5Gc}Xp#>7wazF<h-r!Tu3< zSyLXexF1Yb5ol1l!D`aRKjrBwqg-rQQ=4`ycboc2>8|C2;g>WGp^vb`;dR$M6&)_K zY)am~^89UQCk!qB)mgoxeu^cFVuW|>iX6u?Z+g+%FA`7UG+Rv1G-+IoG}r;wdLr+Y zD)I1D1L}{Kw!`(Z%h8lKl<XQXnHe69{!g1S+GEYMB5OC3Fj0%QC%3hRpDfA)$x^2| zAYjrs#xQ@ygL?qT0@1_GZ`L;QV@!#U|Gk-(_{lnjKKGe2X@DIw+M0<d(hyFt%{QA{ zTi|b~t7}dvep06yLxc!+FmMwHKX~S^i{l*)Xn<9%217?U2W-3vQ>$HcEE`s`Ktks* z%%=3auU}qW!e_<h*>{&9Z}0ni0x%f!4;2Vb079oCNXN99$||*{knoN<y0szpi)?bg z03wVyNCCNF5gFd5gcny&?Ae!|p1!xRv2Qus&D=E4C#gwpmF;;56jd?Ve$ZIj9MZC^ zll5tyD)#u0;W5P^{Df}&5TX6s(`=fWBuJq>${ngLzBxf2pUt1;qk4kB7Oy#fsx8ZY zk;-9Lm@$Nktq&DcSMIGwCO-;VQS_ezBnn|K&0I^1KB1^!G=mieelUAbZT<Z>e$@qb zA+uQ|On7MRsL>}5ZHbNYCh`mRuiR;LG?+;zmn(8;yxgeIHM4Vx!4)db8Vcbf`u)I8 z$V6};&W^RO2?0ry5DKES<IGS*p^u-7tq0fM%q1p2mqsyE(!fy#rEoMp90jBB-I%e2 z^q!ZeO}|h`80R!62M745X11OQ_eS=_OQD{9bZDcQJZNX0NuxT;c6rK|8AQNCKffZf zBXW_KD|FE`=Vy(wb=$|Dyy2R$)~ddL67#*1JD3Hp88D=_Z!&T)e`jxRLpLoQ{rzE^ zZDx~7%FyPCbtjC@Dnrz@zstnu){|aoqeznVn9fNt;`vP3t=mc>m5-lOONbFL_~#1K zHF#SXf#2UCEjjy1q^l;aEVW6d$;7kmLs6BDzM~tW6<>fHURGS3gz8C{)q^|&?Z;{y z%exXME55120Of1P-%J<v+HTUp5UT5za&fi%a5S85gCna&gu^cL;GSx6VdJdm*NbXn zUOUc>c`?@{rF1piR20&Bre=0x{ZJXV+v-C(Uk5n~w3)trDw=CxAXPbcI<1VhPEg?* z7kQj$5V3EFquzQPt6>^5SI|C}0uMVZ%O-z<3!0yfLLj{yQlV-0y0GSb?nzoTJBgcC zX%D;<--#TY#=fl(6Xy{S6Wu=gnf%DpvWJ=|vy{3BuJCMU_6_$6qU(Lih>a47Po@y9 z0`HQL2(c?o#S+KN&RtMNB{Cz6cS>tiUjz9o;ZYU(Ov^ToHS(U&C8zeMJU%lzl7~0v zvpnLUHviM`<`?{G&$zEEx1h*D|HQ7B;&N5!{1wxtt2?GuOCb7b8eBk6Iy|DX)>&Dx zOW|o1di$}O=ypLk1>43K{1A+A6X)Gj>eSE%#wCRD#8#Mfq}`}M=4n5Dk=&$4(RZ<v zd5!tr?!Bt&bT*i{XvOkdv~=nN<I4bW$~0sS1e&Z+Y<+CGvw~{{kV>3$QgC*y%Zwai z*zCs)xfS2SlC@$M>1Q`h%uI68U<E$xq5$lw0iSZ4sZvV+W;)<ihCf__{9oMtS5#A9 z`2LHcsC1CtiF6SG3r$)?q=|@t^rj+GLO`Si2t;}>f`EX4^xk`y7F0l_BPAh0r9(np zK!|&Ne|wxU&iS8<efb+>kCDL*H;}dFJLi0#=kvU$tOqiriw1-$EUl9dnU`>$^ZvD` zy9=#0TFq!67<k=O#ua`k<=tiEel=nrpHPx#4Nk;7@;6P#U60ISnl}p^__=!Fdrk&P za!ySI00-S8jBH*jPUvj!NToTrpZwm>zXuv6Y*b$&u-YjDYK$|DPOr>=_cWyavWcX% z(fLN&90(Fa(i0#NB$|qiW_bm$$%d}1K6ZP6T*;kje{rUWytjFtg+OiZ84xQQ!SgpX z0?XD(qZaIN#{i`|-Ns^lcjcJsF9o^B^4MQ85@=a&>-5ccZhz)mKi8MO?x8|x7BQc> zcVS^ikG5=iH?*6E02)rc5Y=w8?>z&e3rS;;r2psx;u!mS4%>A1y&;Dc9oHR88=ecr z>OLr+AC6fg6uzE&WcI{-Cs0|HtziZlw21nN5w31k-b{Bc^)NrY+|kb}-8WQXn>rIT zrqJx0L)De28^b=ab!gRLbx%k?--+XKLGD}LgBpWsWeWm0^6Kh=JDYS1%C+4~pSd=U zyy3d@r)Rh3rx`b%DP$CnVuSH?7vTf_hqo2DBj_ZvOY6cZxrSy+bAMq55>NO@7GUkO zCrM7LP!^9B0KEO}4r>=ThMzPyf1pg_7czmC%5`aigV%WVtqda0^s}X<#CQu*88sL` znPrpS5PVYc@ldVqnZw~OfrUq%+WS%`i?6)Y5ALCPn_-}ZNEyGC*%(C8;|}gcU+sT1 zbM)+HMSZCj2b*Y@o_9GPx<~mJVcPI|ssAVv!%_?M?yfW5PFP$aROjkUA<YUAHIE47 z_FC-RW3k&V>*0POVh_G?oz?6pLM;zyZ!}HEH!Tf*n!Qz+Z29PQ@JCPH53j!dqj=ZB zgsvP1p;22P(^&=4&E7OV`upXmjEr=S!?Oql-~00K)5Kpan`Hu_gXvF6+U<nnekRJb z`G}%obWNbIh%-f0P7K$}E+}p{dSNg};0!((yM9d27cKfzP-}mQ`037X@9mRWeUocb zm2Pf-8(X@X(>5T7wL>==O3uFU#kBm_DPsz6<Yzxz0vo$AGn<Cm$w!FDF_}v#V^f*G zN$kt02qkRfO=+({ru$RRuL@=8cN(erfCqrbOg)>K)44eJFq0~=Nm+gc{jTQrkPYQn zn1k6BiR8x@sRBQeVD0&B|0o0yaR{@%miGDu)!#(d1iDvelX}8o4<V+{C4Z>g2G2LK zLu5z`v3+f3{z>^PZF94|XP%D57b(DhHn0+iu~8l(^ZooKB!Ak~wQz-eTSQ165^U<S z0gC`q2)p_~sCU6&b%kz;1$TCVF70g}TDB0ih|UfZfOlEXE-FZ1+!T#-b$6|i7Gdx? z@s0mXOSSxa*6<$%J&v$S4sOW>xW$2K5QUI_k8@`Mj{7a?8ThNhw;O}!AN=VY_J)^0 zm#&e$H)YLI5DUxO=?TaHj|w1WkKp_g!&T7OlK%4haE~bHhRd@V3L~-OdT8zo6L#Vq zUwVX!c!UZET9bx|azDp45egt#yFA8bjhJW9>eruAF>kN>N0B3a-!I9pQpkZS-`-8~ zV+WKLg?l7N@<6=B4vaf%FsH_DKRC2ME518++H0qUu-x4yb4|$5gXCwd;_JO<&$Zhw z%u_XcSf;Kj8T4;1(LE$Knr3bv<@r@t?o!R?#`?Z`^BGdX7+8^P_Y3n?nit(IX}@{Y zLvGS9K{E1CMak;h84v}!%5)t9_{J_Detk8kbOeqQ1Se^y7H7~KVV@)wHfXzrCt{Md zXe)r^8-M(AQkRz`^?;SqP0#|D{uaiQ8moK$sh_$|BA(8%^%A4<>#jR7d)PRRAem|J zF$QN43x+nlYK>WUmmVY4#ol@gogXtmSFG7xmc=s65BYs|@l8UM-<jZlX}Ztj<K9^> zc=8DHr2B9h;Iy8V)7P+QAc|#O4xbJVr-;yBm;NKtp3@4QXg|HtC@=rhc5$hnR&?~M zy6n5RXIh-l`}!9DOAeU-+XwUCPq31>g;s1Tz0UQ<`E9?LZLH`GaB>U2t>dEt=Uw@9 z=PL+mQ-vU{0*FF(Jfw$8NV6o68t(h?ZCK=nf%u{7*{t4Y%guBYn@m&o>ptw0hD3c1 z(>Jjn(k!&Ix(WsT87ZnyI~VY;Gb$~CbZz46(9a7%42;eXp3`Sxs_^tjoM==nRPk40 zUd`POpa9<t#J?!(>F4*8&YKi(;ox2DES>0k9C~aM6Aa9PUKzSvGz#=Z>Heb#{PrJo zUJJ<K84Lzya>S?PvXxdJwJEj5nJ+?eE^{;kw)YRkOZ*R%Bu7c8Vx-b!H?|ZYIKRVw zZ=mX;`}@cK+4+o`M;~MAZ_}Qu-feOwEr0}5^x=XCQdgilKR`|(W;a@!M5}J6i*SP* zt!gx8*)@iYJ$p4mP#6Cg^=pl{%X!j9BhQrE=$0mO0pDQ|9mGv=*bRZJDCP+MjC(yl z^t9O>d-Ga+g%IOmkykD=S<+^1J?I)?F^G#WV0L@a_9WRY4QCj736fqEcv<r$Vg}A5 zL$gtZcQhHdTuR>l$Z`q3mlLYG*-uhkP84WPy@X{Ti>l=CdP5v|QY&^J9$_H{U(8+* z&Ty~GN)Y8TY>1VC6xit^bE9d$+uUc<&EU=12{03+sMN*Ohs8ql_b{vN6RFQ*L>-fl zGQW$f!CJnGWg!a>;dnPyW%PgUlGO2Zr6c3!zXWgAg@$b17ok5h<&5weWm*wP_b3N8 zdp#^RniUM5KhM<Ox2I*VHNOlUvgzp`t`ZBpVg<i4D0`-_w1@w)aE(HXsPlD6)gu?( z?ti_Q+unjh-kZ^1LM1a01Xso$&osfszY}J<Px()q|9r9>dc&L8{(YqgQ4^*@M=T!d zPxEP3yE`e{;gp)JtX&@;r{Mt#ta1gugfYBtR5CAw2RQn^@^IfsFA5Gfl}{3OqZH(9 zg`@_IvX7E9iS%SHLj2znd)U!1VZ0Xx|K!)8Cxng#UzuAq3WRS!b`eQ~FppTVn{=E! zy!$o+jlOn~Ev)vW`65bb_Yiw^w1lKZXpVUZhgDc%a<oV49|*tEUe@<+G!rC>qhpts zq^GwJHsj5nb!TlInR0;GykoEU8U?ppG@%EbBQZ--FLw^QP1sUmAMC0$doxhK3uYi# z=MFM>`#VP2cN2YDJ~!H0pSt?&yZt~8e2`~qre(G|Fv|eWw24)@F<>~1Fo2Y;$f$Nr zM(>S1z4<xJ@zr~C=CAwIgBpbN-psKOm3vh#O6^1CK!r&wY`7@leqL5R71RjDg8?i` zHqtDgRH^mwcPeF*%T%{&)o*>!=x};=Qz@yuY2GYq5rfFZHMdj`7a}NtgfZiuG?Jb9 zV-}CU@+*8X%pbQ^H`57bg9hx*uxhE6eukj4ZJws-;S*O-ZSsANY&grAuB$@6CT5K9 zHj}Os+4J@w=YknT&hJ6?;IFoWxO`Lkl^!S8`3C4%WF(4w;1+A#ko;(hpEtKt7BMQ} zf1`;&CH@68mj6UZE)>?zY!zHBSWA}m9d1N%$MO+L-r8XEi!8Fqvj{73nw`b4ynfn} zc`DlV<;icQ%S`_$keR29U@JgqjTK1mQ^<tJe{Jls=Q~QL%9TcBzl!hKEo8@MVxzky z#iI@+yYz6Y^VN;MA5WU^va<cvA$1-PS#FRaPGngkG!ag6SXsC(i|{)0yEfT4m*pvu z66s5#IvETQW&e}Qw@tcNI+QmD<5|K)*T`;5C;B?lPdu)tpoBBW9kY)>K=T!M;tmw| zYW_S6x~cL>?;piylqIOrV<?*m9I+m7{@>sT_TT8gdq=1qmB==55?l#mk+WKvXNjg# z)1P{g6wM{}{YJ8~KIrO_96~w}6IP$hc&kGDf|#Z{HN`%nl{ZT@v@c0tv7p;liOG5j zlH6`8Vqjz68$$I<-^XirJ35~#8QCM(u`P~e2N&iojD@<VOYi4Qxnz0%skoS&7>W18 zd_^Hjb;hBgpLhb<f1`Mi!YelJTP<qrL|#p|^yYd7xh=d0Z)HVv*vF-C=sl{5dK8Ws z`16lKlNVHbdXXs7>y{u0f^JX=6>ku&;)zEzW&LglP<C2=r&SvFeSkn!vT0kP>9;#5 z6)@1;(ykS}>{R)qrL3|(E4Js*=jTw1=X-2Ag^5fU3xLMj61Cp1bh%;8IvY6Z2Sqy{ z$f{pYO1c$$K5oMqj@0ldLky#pq`t<1_a|$ssBA5o1atN;YRfy-&EO`@Ptu;*>eTiC zsa8saCF-h+X-vGIL|~HDF1Lx)IsV?ZjX^)^D(1gzi=c*5i$NGl@q?~ge5$rC|Lqj= zwhaLq^^#~8)>!qHI!-r$;sg50WB7Qw+5ofF2asI&-~8A*6K73lw;K6*`uozMFQ?=J zO&Me{_E1L_%CR-cbjTHwN8-s%5SBSVL6M=LiNN3jBD60^x~p?m#V`=BBVK>C@c4dN zcv!~V1s}zsdo_mntuoP=I};>s=?rh_bdL&fEc!_E<kmK;*F<Pzt3d1*@tQ|CszGd2 zQcJEMA>EiGaKNZThiY<|oVsDh)Tvnjw5Tg#BAKJz9H7n#4{2^Z{w!fZb^MMZ$Yj#c z7DZ%zOyG=>k`W}f%(2UUQ;EpgctQDKBvy=lPpOQ3<p`W^UqU!4f)yZTyL*U(`OgDG zY?K*T>;cF7CHrx+<K2ASol}i^dR+$k>3SU*3c8LWAzD$V9DF>JHB=2m_aO$O3ju|I zUEjpqW8eFGk2LN$hG^#+{r~Y<jzFw6Fn#`U#fESk371791_zGbrrdPybcA%*d|s=D z;Y|iiF%-m0EgZszVHS^gCVjAq?80t=`?eZ5EDy<a+)D}y3LfG1QhmRyhTKG9wRGXu zjt5nNOz0ey85K_)jENPvM^Y^w_LE*G{}f?)@BHSWBas`t4b3(iT8|}=<O+cD1-(hq zec|L0TN=&I$cwlzqZd#cEP-}^j9s;*Z!N6deL%3}{*^!Dhs_FW+WGd!8){(_0Od+m zbx(2EOxtIdc6j4slS3|eVa_o0@Fyem#^Jfr>7;Re#Qu}Eh>ZycEZ@&oFOLoCO;gyn zAVFAqE)&V0ESaU%IW0@Ktt2U#adS$gIgu^-mZ$-NS-i&3HV`K>PubsYL1dacSb9x9 zGoCK$XlhAd=S@w%bwRoHtUIF1e%URhd>zBo)<L9)yq@-s*IF^j!IJ%CtFn8*B^{}W z_(u`hsb1ui*)zc4JK#Tsh1E`pC2pl)n&+yfucC#+J|VGBVBvr_p?eaq5aF)ky<#=` zK-JzjSua)>-+DV%aVk5m=W&q9PA+|uWEBjDjX31jY{A$#6NV+<AAkD%jpRS8ujwZc zj;}Jq{S7U)Lh4I!<o*`YEFWxF=iUBCVXVll9HHpZJ2cZ~V~-ZN3zV^<`j`v8IpDY) zOw;y$!!rTNy*eiF&Ra9z9g*L*3qhdBEV;CH&bOE3vInw6LjL&o-%&(h39s1k{!{-b zcvEc0rAr9a@nxfhvc<fyej$|$lP{#{3-|(PH@YDR&%x950qRaOqF4YO>@2_;+!iX# zE<LQ&I^OUc;@1!0XI};1?5d^?KQB=Bgc<Nu{f$+L7k#Jbj7ybQ>pv%=p*(wD045DA z(z{K5NM5{VTA)0GiX|5mA(G$>%GYbyi7u+;rSvFo=v5#c9V9WCrJHWL_q?$-Wp|MN z`HC-PvcZ0hS$?M@{sGVfG8XJ`6>%K)sy=R8iT}EbvGtcWKbjB4<C7=TP{7z$9<+-L z;vr`TAZh6jas%O@i;pCO+w6i`_GB4#C`{@feM_))czJ6mWz@&ZECHy%BQs^94pphX z*k0`h<=aagyE#jb2I(u6?o#-zuUj-@xtm7s{X}XJt`y`u-@O&R8?pW((f1gQN!>pB z#^ysTsx`b=O3k_xKEze#q8x2XEs~}Y7Ow~S%#O#XO_JHItQUale-vh+_h(Af{TQ}C z6l~vd=VpA-Pc_!g^Br&}x)1svb*ITIiDIJ<?%<%!nk92Sr)k`;6psc2FI%q;NZA?w zBtc4Dc=$UNls>6*V7T||ma?BxhCsVEZSBsxKz|N797==2f{`5G*iiomuxUdmE+gLA z#S4UUCN^e^Kbib){V^d|P<c^Y>wLwm!O&Kph(0!LobKc!^AI*SEvLIiTIyU=UL?p; zCo>h$cmSpfq??Jckb_57;4Tvhn3)k$1_XqOjCpto6|=(bcu)GIn?7PTIJTirpj3Zg zMpJ`SAsk1M4E)Nmx=NcDuiGaC=%s}O-0z6G@qN)zb<nRSCP)I>uUFI*islfw9e2xa z>tyo$&h7Qp0a{iv*f4&NL&Ye`HynWjdu{akk7wWcam;r$Se<|me@q@K8FZy%UJ_Kc zhU~z&KovtAmUXTDV?$3{SL<YxvU%v>t?Z01FAeDFRtS|MKxg-L0Oq*te#xmlC$HMt z*<(FLhj=;W>PzO1ol9qDW)on?xTlV!TD0ELa-J|F8HmNq1$&;F#(P3pcciP-_z?Lk z298#(jl=2D1!uisuIlW+L5Qf+0REXIG2z8@dDGK{=SL^e%1Zxe(nDGD{22S`%n?%< zii=1gbQpnX%4b_lafw=ydx`Dc(LGy{48})+S};s0nES>a(NgM^Mnt?uY#)krwWK<H za9}sRZ}sNuS2Thh4TJK4)<(K{1801d+F$Gdk=?Lpfl{Jf>e!NF?djRR37HonuxZCE zM1;g`*-tjMHFkWgtYrIB6`i(7`bV*S%Lrr=Zb$|L;7s=b!z{fS61ShbJDy)=#C)Y4 z($*HE-?4%^Tjtr@l+sv9t%*7e092R@=tgw~wS8LcBvgu?Q=k8%I5SzdyV5C9itrgT z?<9&9Tn4qqCaXM;AVRaL5Zk4=z$+-F1Iz#StF&+IxDI-*!j!ILy})U=L>dM@p?P>r zDM20UmG`xme0_GmTAa*`1$}5r2vFm>0E#}sv+9INZ6Nr?it=z`lu~v=aePVC_MiI1 zS5C;0RH)ECrt3+}UXQ@$yl<$Q#M(SKK{_~6w|!D{GWqz0Lrd0(#jUyZHtlsQW280V z($fsy!FFB4^I!dtub$7k8El8D64`*5K8#+Vu=(`kqeq*K-^=Jd8bM7J{yq_Bo2cn$ z+C;GHCyNou6`+ncD0-YTP8VP&TlvCBRHK!#?b>XCQ>JuAo<&u0{0o@9tCFVsRZUX3 zU4H8*<)H6rWTIRT<0x*pLy})j&dHnVABBlWPJdj`!-E=?W?+0pZ`iA?7SOJ+p4Yj{ zH;$=e1WCwg8&CXDg4<1ouCab8Gp!hB7KQHQwbn3BO2s|c8m;6=V`9{NTHZ2*W%D#Q z%)N14w&0o`Z@z~0W$q0#!Wt|SEZ4m&yQjkbv*atF*MqC<01}lWN#smGN|eBCFHNb) zIY|8;nN?s-XJK#r6xJIb)Ds?H1A_AQpeq1h#j0CNILZ^t@XCyNd|a2zLp|{JV*e!w zo|0Gzr6OG+1cgHv<gPo+9?C1{tQx7kHmLrQn**B`+7tW*hopV9OA`zZ=X;|n83x$o zyR>Un;D5P$jTf%_&VKW>e<d1E>O^0v+GDx$mwV9vvL80ao56n=UlO_9)0{Tc&zUyC znfN_ww>55O&L-miD==uaQD5Uxe5~l7m<Dg5XP3y0nbLKRl|>74x_?ER`WKYxpSQ0l z3YY$EbP4}aS8V0dJnw+cbLJ>`Ta?%2_d)L(|D)=+ntm+<40Je-HatfwF?BT(-Ef7) zB=?z>pCX@RsmJN`xu+#yU%5t;zl5k!Pt?<7j)m#NrKUb}%^};an9a9iDGeMvm$NUf zJZd?U&Xvw}7wx?CkD@#ZU1Ub!f`q#n+CfRm0Mxs>w-{!}T2n1&&@fP8UpV}pz47@Q zegor#=~<Y+R?o7OnqMdT^|o=Y@@)A(^{(o!oGs#j7HT?2RdTAd26CR~hO~o3xaI#m z$f7&v50g>$E40=czEOK(@cmgTdltwujG+@x#eD1l0WiALk`RVsR?#Oyv}Z_mxJ`X3 z{fXzTnmVg2vZFVGe<gmdamojEYCc4$`J{I)qq7<$1g$q}>THs;AM|x4UZL*fi6_`R zFyKWbL%G%kXb80P3_g3po*tfW6+}BVx}lVFM^!x$nX}P_(@iKwU}fvBOEa^EC;L*8 zkaCoW^o8Cv^|+V=9?5S(B5OHn(`wf&Z2&sMN!h`MNtHJ7E`7|4WTQt+OD#?xW)w)m zJ)k$+i!el{OeAYpALFER@%#$?vvr7Wr`2if(@b5lc%Q;|EA$1FiG3X|U?F5($z=eb zMnujCk|B!YeT8;~%@RlZcc~H2M-w7>r-3t&RBIrbXy3~M7#oAW11o*Ez0;-b7q#_j z0Y7$V!@nHMt#z|D<US!ZCp!4}S}$1i)0f;EE~h{lS~l4|4O=v~{t|X2P5!>Y<0MT# z_jf^*fO0>_%pPWa+@(D~KSR7zz{Q>aQQk7`A>zGYynXxwtpbV*?=Gu-?m|h=SX`32 zr+HJzn&tOfiZTEFSf*&pLa>+a-f7~E<6VGl1_ZlhKC5R-emNm@k;cI6U<(F5z5m}; zS%F~&Lh*?#0C**yJRH01BEa1!@#bttOj=A($&=?`)ApNn&p;vz1~BOJRcg-2U)(gi zeW$ds<p-XoSLNaxwbUQL3ZAj<vpMkAMzYtp{YO#xmwmZp{XfI5Y+B~>%pG5;{>wF$ zW`dx`d1rbEw|js=ZxoG+aTNkg*&ImcAxC=V>C@K=nLj!EMV0pCt%?8ne-2%4A~+vj zZ%9pLO1y2hrg4m67=G#P!h8!U@Xqi31<Ey8Jwdyli5j>mxn`+C<JGfwczqx29(0ch z6Dm;5u01U(tQF=~&d!xx0|vBKC#9h%$?TCgw4l+nlNDY%k5JHPo>>SgWB71;Nq+m+ zhieRDL7rCLf5|jchp8a&wAE=*Jt*3hJ#({4K+)c=;oH8};Jd|vKun-yL+eaqpc>ja zemhhB5?u1qd&JW_Z|<6TZMN=iNmb*%CLq#GsH(YMp_J+@d`@@b0~tU6bn#&wd}*oN z*HCctvX;5-*l_Ty+@JX?sRX@#vLMgQ`*Oe(Ye;pwc1BndynH!4{s>8R-k2}xKes|F zaTIa1*jH}Cypn$P!YiUpIbI~*dQg)%+2x<g-cNd2KXb@Lt?iDp;NiEasp`!5f`?$L zt<NrGu9EH&l>1Kuvj<Lp&sq*eRcDQ4nI}I;Da^%0g?<=1sLEy3$9E~9o7)*XJQ(x9 zH^*^t^vY)n3r7jj_R`e*xGCj5MK~tE<5aR&O~?hy;u<812!hGbIkzV-WHr^^vQA}{ z%wG+{%h%E!Y?`8Q_keLQ&+-T8+@=Iiud&s+%ST!Gyi!E29kD94J3FA#fO5!@K6pTn zEkG&6f7y52HeK^A4`WxQ3+5h?{apxJl};y3`GvIg*v%^1N2p&Ee(%ga{z44lwFeji ztlEJ9`9w$DwluEl1#E7ZcgVJLCHTaw8ep<Tu>u-;(|=mdWRGv>D$%bFzt=Uh>-{jR z{=eJz&}1JVnN1&7FhD>m=Eh5XPs=VVI=>=r^9$O(9}<sD@7nqYU4qRr9mVd(sEH(> zk^Kvl-UUWxfQ=q*75zK}*b|G4^;WO)^Ql0+D19G^XmNezvBAr}eqf?+re8n3<xoE@ zb*;1U!wX!_t+oC|9{hGUBT}`cm30WGuh_b}Y6>=%k#)ic)jM3t)TWB>jbtfqeEvfD z^Ma9~dC+yDTQJVtK4n0uDJQ3Xb(r-lTem8ev6-ws%wSg5$s2xSLpfW?L56QLsq(_L zoWR}+`If5~%Rvv=O;7b3RJy{?zkk<KzvO+Tq=pOdBg*JZ9+<@r<;dCrIs<VnX)WVL zJ-=R2eK4VhR@s0+2deK5aQ9IlY(PmWE$`1ut5+UeaUu6F1o%{RivkVH(XxK|^)rpx zrg)?GL$5`tMsI$3*(D$IooHM3A|LQHoN5YZD4Fk@7%9?l&~_DQ`jg2tfaTt>l^hqE zR$=jSXL9kidmV${u*1GW@2J_Gy$&$T2NBSwdZIyi<JqvfU{9up`#muBj#cEQ_W41C zp^d0V4_gmT9M1TCp_g-f&gEDknz}Vj@P@X)%uRE4_nm}k@HR|{A^Cup&~PwxX!#O~ z^fD393{pmoKL9~4!bK?gwv`=&tUJGRj!IX`(EN0B?W@TL3!`v~cvhCZ66ylg&6(>p zieMo#U;>T@Y043)uQLQ2^vvyJj0Gn6=jw#daprb}Q7mK6YTp^SYV1g`4#0bP(}2>+ zXzkSgcHP<Il)g&c>y_&Bx|=roo=UkPUi=1wr@k>VuB1^%0|RLc>UPBVzBk44`O3+x zLM7=2K@?M0=7N!^Yv|~jl2)0N8mSUcdzwczqIx45FeJp1gL$CjD=q&qnmzqrrM5{I za35WF)TUt^8LmlV@!c-eA0$_rwW0A|vcE)_(Lb=>>f(f&4DTgLboVs^8+h|?V&cWF z6Lo2^R?a*DDjp(_`(5go#<&h^9D$+gMF952S7|T~^X#a_G(PcUtr#!&iuCNgO%+?% z#ao)7f6+Q}z>d}qk$`>D{<F!x5Z3+*4O8y9u2b-K+si@K<iiYAKT{-6dL&Z49LO5< z|GsG}GIjOAYx5%!!$h1R!1TRI1yZ>26Tl8w)<o?#F2tT?!OUMY)nj9wu73AhI{*6` z8t(hdEETB*TKWqH)ov&D32@FZhC8~yPH#^r;2LRt|I0r9me$=r&HiTcJr_GQUg@J# ziP{5(c8nUsZBw}(-Ce>s)0T3W8h0|3`KH~1C48zqa7FW2B>C>~>|6+gkE|IKpL+%2 zI|$<<f{Z{Z7n->^@n(<K#*OrdZaxIGpY!GB1Hxf^(Zs<=u~mrHOC7MmEBOHg`~YqJ z8DrfJ;^hz*xKN)|SXOQTAI1G2Of&7uSsek6;nHFWV%Y;8RL@n0dX=^OKT(=WCIK}8 z<<8v~!PF?p$fmAf`;;FEf_JsK-XmwIwMDesTisbm=7g%;U@m9do3%4?I+hpXy{>jf z{&?JQ&4im${PVgEiX=4_37Y5?K=%l6^#(6A3go9a<792_s!z$D8~qvB;|xERy<l9k z^2rRP`KE^z`Ldfu$!YRHx2cC2%Pm;f`0mB`I8M=8pVAdMGn_$erykyF$!Bcvlub!$ zC-*md$UTMRda8Tk(5)G;t0tEP*B&5WuhV-Na`w12f@YB~!!XZ6*d72$ey^rKYS0EC zqXIDz;7*B%7}J{AuFUhXs(6*8C)t@X|JW5lEy+Y?woAYsJZ*%MC_oQloFT}8*9^Iz zUblphDYQXdRI(dTbuOC&80p~t>hh)O;Op%Cfu4pB^H?u<%`+F>@ksKk47i>Bqo9KE zG?$cZ)-GAw*<tj(w)y+DD0~;MP!*ZBooA^*R2!o&XK%et6|`Pzn}^MM#cI4L{AH2G z2*>H@*>lf-c08!?9<)H-`zhNcJjkKM-&T*hs(oWguPry-l;WL%dMDAEluI4Nw!qAe zjx8!E?PalPb)Vj70|E#uTGI#0+gBLm`;B6s#(qOMI`e3e|0*2U*yOj4#mskC6ajA3 zNJYY6rHgOv`po3xJ9V;=yYIIyR6}~nY(%C|@^z;=n3~*l=L2t5wL^?@ng>0cRXwEC zI`PEWrfH_bn+h!j)!2`<uyLAL<U(}_J^l>EbAjhpONm>G__UboHP?wl{bOtxSbKHe zat(WRJY#)Sdw6H9-@E$H`ox@apLdeJePqTiaA-gU{Qn*ra8C?>VlLdl*KoBH#MLSc zaMek&P)cV@=dKvCp4SVhDLWqvx`ulYf)K3ae_PvM2@+r9sqV<1AH!8dRUK|iZ@X7o zx*xi2a6f{c-K^I1TOmCLD%{)Y62t5D-YV%{`i({jpt8Ml=?@awZDHx%H;IcrGyd_T z?Z4*NXNKM`+~@UMeEW9bAH|J>Oi3zpqHTKN=BZEYn^~DMY=tiUEh}A#xxy<xH>jW9 zxhFS5dI&TWAjHj^Cq(L}nrv*n_BqB3B1e*B%BoYokZ(>R9Y0r>6=tNVZnM??$P$gv zJo~yi7qfP~hQ)@n_Y{kk;nZI7ZfKu=3G=RPnG)qSo&Bcqaf(Q;%aW@gtPYSNpcZ<j zoUL{GV`5^d`e^X)brHJgH!+}X)P9*|v8H#7Hnz7}!#RoRnC`X#$rtW_*%Nb(U>1SY zRLrvZ={0=v<x5(Cw<G2G*6X%xy5*kWgY6r<dbv#NvlD3QyQ36~i^pZVWF|l;;AL76 zWOB>RBz2`V<f?$Y=^}N_{rt9`sCoXOXceYPXZa`Zmlie7B2eujM%<p;sqDCJ8KA#R z^f<zvC==pc1vQ#z67*9V6afBQ<StON^8F9eq>5;Aze+L!-h<IVc1)PH9L}Ge3sLig zmwFl5@{FoiJZ-nFeFwpi041?d7cx^reb<azjc{`e??}{-<$)Y-RL7=m!2eS_6i$+x zQt=B|Sr`ODOPuEesy{Mx`Y>8>`E{o3x5#a>JyS5dW%<ydJ?FYTWKcL9l2MLYIE9{H zZUp<uGzP?ywbQPII{Ll!hDxHwU8|0~ub3_^mvi=Ic`WTg4+MlI2X_+~wx^oYzqvco z{xGzEhprB@|5f2i9tBZl15&>`lyJv@Sffo4{iK8nCaF5Wz0#AcoM#9_o{*&sQ@IO6 zb!ZgNVtzN02<gM}NhkUhf*~aiVckrfKStG#slFO5G;3bdK2bk?MkGOr#WiKl>0qZs z#jbd`z<f#jj`@5r-`mj+YQ8P?Z;HFNCz_rpW~2r*LPglGY;OL%o+SIma=}r+b>eGX zKFFp$2CX1>g2bIsS4r|Yin9m54$dDh=GE0jQG^TLRD-|E{n15fL!>|T9k8QY3)6yo z2L$wwVOSmrKSznl%^2F65l1##CK1N>f6D2_i>cb4e{Sn+`RZj7S4)v-%>(KX;g@C3 z*$lW)%O>6sI+Y91;HGWFw<;`**>+(bo_VUjFQJty3|%?_b%KK!$q_XX=WeM9qybYb zk_HYhdjh|ldX%9I-(N9(t*u2SNTX=~3W1Y+UXo&A&<H8`TkPKa#@jlX)x=fXRKjF` z3x=PtqFuE(<Xwre{uUT;Q-k_-((mviiVI-kYj7T-;?eA(>XV_zundREk^opVLu2gK z)F<4O@0+5I#5#9YkAexE{)5w<rb>f9(&6GMYBlcg?s@s+dt>Xiy=>7pVIr>lTo<|c zLL?4z@f;ocl*Vwy*MQ}BI1!^C>Ao3rvhrkHg`$V1vC96wzFOcL>-8Gdh3_Kmta6J2 zZd<vY+cvZ4TsG%=1Dp+=es{=<b?dBaVGQ*v#;;}9MduhpV-DvfgNeR<V4_aKk99kZ zNw~XX@0qn}sfh9B7j_xa4Fd|)&w>K*WT{xzm>bc}Ij*8%U+JV|Qk~`LS}%Ae`vUo8 zg$w#<Ypq5BD3%+ASpDp@!YxTOg%%H~R{aUnX8CpreYZ_@YVdS6-5JWqF^LWmoZ{^5 z7WO;5zFiPA`|YIvVKo??R5Q^fv)r6fqbnY*VvHY_sde!`pL#2mq0&pQTYoE%n0c_V zR}&>545To{y`JcXIJJxAIlDVD4D1H|F_(?MMiE3rt!9I0_Wz+qKo+oIw$GX|A^rRu zN_uZ|+`AC}WcQ2dK8#pt*<g!3FPA+lyVm)UU7(+<dM2jAuhhcgs*Jl-)vy=K_p;oP zY2{oNr?i=gG3l!3!qIefXAj;`oKBzde%!se-1crK!fEEAi2Wa7p^{1_NbLTy-PL&R zY;T#Z6Y_}hE{#g_LLw61iTZ+V0IjG^c2rL7X(g8r|NJ@pWcGGs_OXI&6xYG&thysX zyH|~K)(dX0ty}31ud#QUw@UXAKcis9bOnJ{3qeHC*Z`S3>v4BS0Lz}%(XnCoY>4-B zdvCS8I*=V(c8{;9n#1(tdzdhzFZk-LtQQ}$Pm3<}yt(@6eDJWkALkpq(+S0QY=aV> zpgs(((A;}V%_L$`K~o^3#x%e47@yXKx3XFizE6-fbp%8EE%XPmryWlA3vFL_hu_^u z@1sH5yVoEJbcmQ1_X><fti{V@j3Cdo4>~$rn&h?W#6FBrt}!t&&dVw(%;}f|FJ_pS zY|e3?sa3h6GQSgIOX!IT5+Xe#nuL$VG}$m|jcb-$sh4~;9=W60<JWsQYX0BC75{JH zg0Gs5zg>Skiyad}Sa(9&k(1Q|{nA<e2kG|T_Ww^->;KliUQM+Ei93W)IVt)5bTvA& znA)|kZHO>ve}!Curg{W94(*<-fPuVg|0v?!Nph$tZFG7C@sfE|PeX4D2lrmXUr$hg z<bXapR01oHknIMBjo1_!b8vp~*tQOS?_l$zD<|?NnV?h6*{TxL2SAHA>S5hCfcO>F zJF5mAQ`8AFGdfGfAxl*H?;JldeQ)mxzcX5D3k;bBD(ydM0!<4u1l#*RJMyjiB5dOB z?z2Nv{TZHbkZ%)yB>KSRP|QxJfpZt)6wJmSE<;|s&eE)`k(m+OVBkbp;(!2eCL%&O zN7a(+x8WMNq*uI9k<g2>3r($R!s9hQ2MN2@;gfsxl1nP$74w@I{`#rLLmEdV$n}f2 z*jNg<PEEVmOyF8ap#Ly=<H#fiqvGzfc5l!kzg7h)cXxU8xziQ(3SOTxiA3ejA9I7A z(fCAeCzMQ#%5`sQDl070x7AhhoIGT2)E#g~WB7@Dqwa+pwYrGhpdZ%#Z*q4ZE-R8W zy}Tx3=Dt!<3D3<65}|`;WcG15@54!GlXv!mZP&_ey>0qG7SZ-=><oUv#F8Pws^Skw z3ET_+nZIk|pMsVH3s=Vus|#?in^pqt(DMTVD$NrICzY-%&l>CAdj6GPUX@--XWwKq zi${P#+zN?g@PPgbD0asD7}AQ_nD`+<s@>Ut#Q&8)2p_YG6eVcmb_yyGB?jHKsnxQh z4+lzRL@r-*D)3T8&8y71pQ%)5Qw8tJZVQN5*(jKF)U!&abMlJd4O2+>6Tf#o==KFt za7#)CQA(9LLd4@JS*xrW-O9#ug&#>=mz=VW@^ep|nErrJ_82ZP8#2Je5%J~@)_Kza zO2PM!VpM~OB40ME03dp~8U)ke!lhIN4xYfS%5WtPo#`h~W-IUD6?MEv;SRyd89M*y z*RQg|2ywf|d6#$y*bBBu_#{%a<d+kMmw>Acwp8q%`K|kIwOZ_SCZVaA<V>t8cj^|b zC16sE^i>QzJY2S3(I(V<+2?JKIlUOON(#X30*{aqfrUlG7K^&|dI71M^j~o+sNN4| z(J*6@n|{E<_T0X9`4ai0iH~kle`y=s^}|~4#CdE<R)cVY9rs3%k{uUGD?l$G*2<@4 z@?cZz`+dl6vfnBtzrO$Ze;Pk03Cy))nRiOFWuKbWOH&^Akopw|O=IRN8=7eyC+y>A zuOW>dXrJGsT_>|6><5D&M9wHNVnow<>#=Eb^yR;!?=A&|d~2Ee%CrLZ@cd*3YIqQ6 zD8D73f!oP;P|J7K%JcB>*GW(u-hz~#!yqVd@vh<^qZJ*%BaASL$qv=$+;ZmR!b*ee zJh|`DGCW4GFY-As8w(PeMcU)|?+$b`Paq-XSep&b^yKx^s&dZA;nw%Lo=J+{`_M;g z+Xo-XJR~Ol3kMaWdWJb@^TL+erhr5x{6pp78%my_>hOpV_-P&$)~F}>DSEr|c?9T! z@w0ylcHKuFgy`biP=I+i4M@-r_2&Y2L;q34)JPE>LxZRhxyI>F!61upxc6PR_mzhq z?HL2n_#3mKUWs8jmwTEz2*r6tF8(9Ox8@(187JV8qe6qJ7kU;}6Q*}$4K>X&kLKw* zU>3zDt!+!c^ES@3o~VUXf*CIfJ-C|!!ao;!|Bh^jtSxCHUtLuku~L^9Cm&57mRArN zS9C>@a9ow~L&~Z}y`u#Kv`(-j$eJ12M8sA(XC8j+7;mDpIs?^6DXBj!GV7LL6fIXR zrFdD*P2z66id)XjTy?-3w;=Vz>bh{+5&rc4do-AcVVC{(&0Xu_^c669yikE<4lwSU zC}bUWT^YR=EgV=4odpH@41&+;KZ<97Z_$QQN8j;mjp|5_?su6Cl>|0aJ2fQS=Y!dp z4}`As-pYxJeGTH>k_*q;w9Ix0UGnAD7%iOw3RHc?$;{=kzQo8}LSbYq9DcvcM#5d8 z>32AfhrkLq_s-(W?j%Cj2xm9Xgmfi-ud1XWLZ@J}j{5>7fvW_OKo^_K<l=Lr&FN`5 z%qPOf|A*Q(sA)evQsqMaW_#YGtC|GRzG@iN=qaLq%jCTpfawP#x;%o$avsC@K=SaF z$MwGQ#bw%tA|z}3I8q~jqZZL`JFPZ|NKx%NN3Z>&vO{;3#}IoG>VPx&ryTxB&8`Xi zshh<*uXHbef7~FRp3*9zA*O5s`9Gots@x;zITLrg1yOza#0#<=vMrOp>sp%Y;0rD7 zb>b=K^M~Ih-vN1`Aa9iWXjX;W*B$;pf_%aM2=b5J<3SGL9c*~3i75djMyGd|30iS7 zaw6gU^EhPTUg|sHV^G)!hn)!!e9CayP?K(==5OB|!5O!p=>QRw#~b-_nObhrCKzVT zM|2M%1y%sZmeWXO{8tk6<)%CQsytppNF<<P>|FMJg$fv<*?3=)s80>Lg#^K8I{dh2 zypyKT`E=NQ>Umt{_W57T6BOU9!T)wg{O>;se(|mr0y$dxeIdV{iT>+(E4}9nx`<<) zC#WSY(k6)Xguf@+lcV)e%WuHoTrA*--{k~C(PquvQiM%J(DlkoNedasUWxr%cBf`# z<F=Ie+!$~h4H8|TtGNt>4Kl<Jy!<|+erNHu&exBwR6F6q#0nIl>(CnYO$IFNl>d`d z<k+hhAMkXNq*0ED)o-6b=aql+bawR4y>tE1HSV#AE`iQ7Yrq(XVg|AdXH*P|drKFs zPhcEJ-nYxeZtvBWgZ<wEHC~XEt%8AwU=f%%0Uk`kxd~WuILz+s9NgSEK_jEGo-z~V zx=*Hcjzb(Ru@68$)A?d%U`qu*QvlpxkY-r=JoYGMCld#+{wcOU>t<gGE~19xFp~Ci zAe}{b_bkWX(+TBh4&Fv;?sS!)os^;6OP#{Ys+Uy^+&!xn`PKHuf5!wANeb~s{Y(%B zap3L`U`SQVPy@-dZC0e2C|?APAc21ilq}E`@R{mN)8JE2kxwp-8XpN-m#pgB-_k$8 z6C;mmEN<Wbq)<&oxmRPG-)0xZ!&p+Kkw5l%aeiS#$@X(gUDHo{-b87gUyK+(7M@kI z@I25yWb~6{fa6!2G@ja)Dr)Geb(W_oNJ0<fsU<>w!<2D8xhqm;L#HKiDzGB;{N2e( z{pPv^L&13wjCGR1iQJ}_DHt+S=)#j-T!bo`TXd2Cw6HjQv9WePH#O?(>O|{Ul-(7Q z#7dWix2mmVt9vsw#!9!dK`3E_`d)QIZ#U;eC;#W(f;IWSbX?KTi(*-Z%0v#unm50a zEbv`aeGuN6<AKaLpR2>T!D#;J1cUkLEe2;WRcaq_2NSFGYtB!=t9DeOdjg7K8ayHQ z8M=DRX@Fl9vkfZvP`7F9vJ+3!oMvm!<n~S>wIV&Sf-gv{dF?->L;*ijgenGv{A6RX zwYH<)&aN$1>U)=3Zlmp}e#LvBc)Uj)btl1axEe;6{oJdY=@+rv6Y^pSg2#o*6z9sX ziwHH5O^J~h<)2>PRE*1E?Y0g4eYzZlWP6R9&VQ*i78Hfqw`9$-kk3Q*tvW%VT&l^U zvBJg$|H9kTZNcI85I0K70FIrgSK~nN>H;XDg6)KtLPs(NE-<m7-Tpy2-Fb)YfbuM) zrBkBfn<p`Lh{wyAyGp96(k22CVN^{^zD5a{<r&(_5hX2%0?|a%iTz$OE8Krim2L2C zpSz5U?!D_!#l+QTJ-Am$@Vm)3!UBBIzK*f5OiTlwiP6>;NFJGUd2s49KhnH=O@hmM z7H*Lv($h65>$h_-Ds5xBaXYm!#w0#>%_@dqK#O#qy~$~ju=}N3YRY`WSGvRAS#5+4 zRSK0Mm?W~1>_DUdH)^aism23TOAeno!|hX--w0!heBWd@*lyzHc7+H>=>o;Rc14wX zZ~Xt>5B1&5?7DOEUg;kNg4x!lkVHke+@0>|9*8@GRkXf%n2C}%+2@m{dk*zXF$H-8 zEu;dt)mzSz!T9Qb6oWH9ErfzEK?3@BjVEQDWX~1?O~3RjeG|U=cjwv_I$tp8<golN zSr`#WGG1QN){Gx{O%QQiUM@e0v7%aIK=>w-DFE$$jDXd!)wV}bz=EFjs89GaJr6!t z)by#G7m6^FLkpVaBcnjE8wxCG;%XxOsrv2Wa=2}7z_om*D{GPht3AZfaSwHI+E3A4 zn3zFgSmr?xqzy%*X)j+*v1fD`6?eMIz7JameGlH8%>ZtN!K(i!=X^6A)32?+kV69W zEz0tg4tE@?au>&NeF!J1li%Fh-}y~2X*40MO<Zo;&>G2erNM#7^N+%^p}igsF$$sH z`J8GsY8ItPALcRMF-udaPZaO<KWcKv+0p;nJbhB+D|*<8_TaVZjFhgV;pSeqDe0|Y z+z8?VQ1&ITQC^qVy4B*$pUP$H8&V<1(>@2LHeeD{Ak?INYRjubGEi&xJaFpijc+pd zPCnA-1j0tWA-`6?_?|9i#-+7Hi6(tNs#|0at2;t#ui7?Ty1nov=}Ro1Vd=B`x7a{O zgPtu|Jn^WIPN~nf&i*@H?vAC}<#vs=jc-{LY;?3W4}{ul09zCT*l=)e0%MQv{G%YU z(;*!Q)nye<?T+DxS?~u(r>BZMxB1>h{qPld7GPHLKWQLug6_6XyQv8R##*&A(y|>A z+q=>`$gsGkp${);-?e{2Rf@IB@GNdZS=3|<mPc7_yC!5+1?Kci7tQbK3Ye~CKnzc3 zVT3X{xVSM<Jp3@wa@Ab_hK@*6XS;H-Q}F|zww-5Xs~B)#Fj3|zLP#d2Ta74H6Ae0! zrGy`5@>&JTPdtqo{H#l#nB<?nvTmc@i`Y7-2|Y!={q|>WKCp^M*QyZaas3-q-L(6P zivmwep8@?6rsLb2nGWvXXCurR7ohLhm;UEp`CoML%f9n?|C9Kn@XHU6QK|p#5Nt>X zNVv3DYhxD}dN!yKqO&C>2$Am%6~4XINsBigg7Dyk0%{_a0_Img;@YlQgN{}(bDj)A zw9le*1Z<wn&}=(c*kbS#9??>N4Z3&(B};1Lh-!&A6g$%B=Scf#A0oDYz?zPWH-wSP zedTmUJVuQkVK-!ZZ??(Cf6q_G0%v$R`>Qbv^;3oo_1`PP^JS?1TL`MN(=qbp|LVAH z9${DAogN{hH_qLE9&wlYxn~mB%0YF^`>3b7Ym%#~yc)#E#&)?O0xILXvKMZ9mMk(0 z&2uU@3&Vq;H)iTVGcVO(dr?>qn~Juhbc*90YX$`an+nOY6~B2!(343E!rqxcM!Ahs z4#jMfsxlPT*y#6i==fcYv;vkJ>7`TGP)B%@w&<4*>1rFQhMxAdkS-9+^aw*yW&{2S zRb?<W!EdiSa`ek}`A7vdc-Zt>H7EW@UR7`Lx{_IVwNL|S9l+W1FUGc7)uf9gEc*)D zL$lwa7)ZCP0B!t-%%GMP2D5=!&jMXf^2Z+>@~r5d8|khdHsReZZ`JPFIf>aEMLvi) zF@|g`8VEr~m`}{$nhqEs6r8Ur<yF!3<Ojo(wbyhOq8D|cOUB=-eTVGWRD_oUTHz|% z<*@-}W^V_QIx9KP2CgfzPdQ~)CA1ZRhXMT&UsE%>c8LO&TNTrP1Vq4)K|Cr!&jHV` zH2XAOMX`Q}Z}=0lmtWNw@C?cXE>@!n)b6M-5&|H<Ym<chpN@HONEU!Wr_!OzOH?{- zUde%KeRSGhXO-jVa-Ac5vva-D5U(;MRUI7gGy57yuR+MW3!wU*Ws0TziS4ktF|Ot= zQVU8GNQnOtG}ixoES$vbS!JQap=Xt4^yQr|dX~AOMy(v(!6T_KV5u4zC96CtV-}_V z!katcnK)ly0JE*$at}39o`8zZvI4s^-}&{7qv;LR$}0LLf&;0Zz&?ZK6&%l0kofv( zrJ8gg%;?q_f9eN?Te=MOaJySz&fk~cnFrq`(|~9kza%=7V)D?>q51aLhJ_^!v2V{) z{go7|5a>2SmNgg^>C)bUjy+df8i!}@tTn!6yOfmkB5P{4l*A1l0#xL1WsrWJk24%c z8d5(BR%!GHa*87P91p9>F>Y6MheV9aK41962oh#!q&_&?mj<tI{1C8P9<MZTzGrpz z%j$cu<B;T!pH{_BHu9JTWunx0-b)9GAlO|Gtb^r_vc)r{ddXr>$A<8di!a`bMT<m- z7EpX2{(9}0t>ID9z}}-?`}-ErTaqK){A&WdX)A->VubD{kD$!6y3{`+8m!2nKVKo( zYK@2InVnSLg%(d{GgBu)syk<X`>_#U;GYwJ6QIWtMYrakkY0fZJcMlX@;{jPb9waZ zs~af=ifHUks4Y$t97e$^bs&kQ+-UBW?9}5IKn!?VD{t+6d(jvQnpu8Znx+#!IM?dp zAUtc9nCR<EaNoC~eowG_BmXGw+Bo(nMyg$_C)y)ghUPam=J8+PRR!T54DAA~%dg1% zn=?)|cfmCG-K&6|1>wM!bKGH8T4tqPt3e|;buXsv8sCMKlUY%P5V8b77PI39BC!3L zkNa0A4+a;vdX}WXS@07<yhzpYZh`fbUrt)<X}(O7i@IGIkwGAOs_DlWUx_qX>EYc_ zgZw1vK_eOig{Uq6255=}L_5%bxyb#fl)|@aH^jqc0g(SY{B+8#Nn*=eZxh;NbI&nJ z^UWHKNbaL1LV$G}kt%q(qx;k182{*K9oVQGHst#egN?e_VJRtNKx9lTb1};d$}Rh~ zi2cRiB2Rq8jk`BALM5DQxw0E{7r{6-;GVY#t1UY1`LH_d$<uTE_?>+XKWzMZ4F>=c zvb`7~!uArm;j{Dce5gzM`pt=<wk%Gg;M14wyZ_(o&@>mP9pQSY3IPW&#g;g?q$!Lq zHjZmYIDHXJCys&>i-$;0XPfky`a#LPPnqq`rrEKfxrHBgV?vjavZa<H6OZI90%rSj zS!HA0Ie>1Pw^C2gdj<`KRzlJFw?L;%bLxWi<}rBa;&Aoicr&Ar`LN|tE4PJxs#Z|A z-9dF<45->74AhBQDWLd&YIAqXh#P)L?WWn8wxxB4k06-=1eB1J2^?7guza9JKOhT@ zRozCHP>yVG=HwQ+lBAn{ZXYtS=oSDWD+3BGtb<b9TMe4m#fSTDeEh;itMn2ytBtB% zBi)G{XeZ1xLauHI@DZ;@X^IZUMIL`uqPnl8>GupY;#YZ<T_b><Wb&=|C3XAIdRq_o zzZX&SABce2M5bD<bK$yaW>6MOzXP0QkRCSvl>WkhLm>Y*Kj1)<NngJgxC+T(*yw}r z-!WtfIf=&ovp-G!kweXoW(Dyw31kNI1Fi!m)`HTWaQDY)4UStKR({GUHA~0Ukz~%< zeuGmUAuzPd0<?j|{3JLIbaA3{ZnjO5?gp|S#y2J9fXMm-5t&A&kBrk;LtA68<j8kl z0%D7R66=<XM&<Z>2W`^0xSn4Q`<G%{8Q*-dCseQ^{Qwx7mImJGBjY#tJ#oS>({4ta z;i^Hr0c&7#fHJ?Q5hur+kq+~LB+aWy2@7$rX7kO`5gj_jnP|L?wha&{5FgZD^1=OP z)77uNEBe9j`>&&aD$1?4bJP*jAe=xB3`)Ir$K`HQU8i>I1y<%4^0~?r?GQj$O%?Ss z1y@6&g^+?k=;+Mm8(~2sP}c|3`1rLzVpoGrJo~=(J2j!rZtn4thM(OWh=hIZv>jNM zgb-7srm!1D&?ct22^D86oip|o%FwA^Kx3;oPYyi0cKOS<^VyTpfNgg6k*iA&2#bS! z<BI)S8{9g_SBgNGH5eF&<=X&8qO;z=38cEk!Wo`WwMmBWA<q(LI{P40NO+b-sAWCT zH)6-8N^Oi`<>3V<^IdKM?TId4oOb^Lme$6_e=O?IX9lTTw#CW$@P!Fy{`CX!NC8IV z4Rr?K<CSs8gWO1UJj|+~2)lmu*8--W>Z4HdJqMqtQ#VE?oH^=Bl~hvzmL2(om|ZEK zw86^!YCeJ@WIBMf$oMXZeV#;@*0<6>zw{%D&1rJe*WJF(rzEwN{xf;~`Sdy%78cv9 z#!KWsP{`bgbqMrk+0uQjKT`2&+3bE)U4A}21qJ1tacO?iJ1qv}E;ug_tl(Z<v}gTl zS9>PCp|l36A(&kn)k?pwakn?ka0Kmv8h)2{1dtL~Z0RKLOY>%igD)#W<9*6pklgMw zvuyHDj`SAn|3%!H|3lgSVP8pPjcnOQvXrqT2HB>PE!ku260%H4!dNH!P6#0;d$LUS zZIEpg$xe1NvTrlii81$c-QVYz=lKin-+Srxy5>61>pVZlal8*Yj22CJo#)EU?<QrD zjwaF+MV{Kq4#1-mRc%$|i5roj&J6sqj}$An1a-5}kd(1J`uVt7jWNh&i$e3B(I0DN z`XL7bx$x0-v^Z(_RDx$O46S0tCyo2<>1-A5B|tKM5%E{^!O<^poI^1gPWoM)O!|OO z?rz9Z4a$j~qX0r{Y}FQSH>GeL#2#c<jIh1se)xU6qNKSYg8Xh?R-c*nxzW??Bl>-0 zOo(uJ7m7`;Qmdz>y|fhZZ2D6CHtr|O8{y|&hF_3xllyD>`jE6BK1DT=XbS7z_EPsb z+spG(z!u;Q^=<6H1qaCiH_ifSG7SnCG60QPL-Egud5QjCrj>M_Nxul2(J*dZen|D4 zW!c7t0}ntw6M@ukbW2q$4t-ruKHcZM)F;r>OM-c1UPEqBs7ajVq?+`!U5+%hG^lmI zZB#|sPqd@l?M_>9ePTT(qJOvezDOqj)<lq`y=Xcv@uop;qn@iXQ)^?n5RKRYN5Jla za=At2DnQ`jkr()sz(Y7I_e@aZ9DzL;ezV97Z&9smYG`Qkb#dN*xC1msmN&6H?j?w} z5epVOE!i!(BHl3M-j=Yp(kW@a@FzxaM*HAg#!@Mxp6Ic^rWxIv$30Sa&QTu>9m<<r zl1)BriUDkvrR~bF4kK$VY)4IF*G`D?*7YO0;z)bWW1zf*e}3YcXVVK45-fM4gFDC> zUTQfzNJ#Ff8DM{$w4{AO5IMy&OF;D?SrM6i0h(E52n933d`_QA!bx+_ib>@42ezFW z_lF-%$;_!}kM&f<-Y{x5jS;5)&0mf>aSH(G{LXl_j~*d6fNO~g+%=yxv1I<@>&Ix_ z&sYnE8?>mPH&t+5z_OZNDRual3@db<3Et^xRFHNn>K_E}rn#~vHLLbn9xqZOUJP_D zaEu-D%T+hlCc8MF{pwlyaIPcT_!<4t2NY`vP&ZU8aLq40(|V_r61OL<Bq>&fDhba& zfO@=kV8DWAMmXa-zFn8ZI554pOv-nXNUQ8Z=R&&kg&;#BnSvo4+Z0BfWkN_qW<*Z< z*SC+YfNY_pH>wX(ZM~Ylgk;=Mn#*p_Dwv*iGv<2Hlz6A7ae=&52y8()q)=QkNjFGA z6vgo;L%~(Zdd8;r<Wny5AFo5mG5~QUj!Gg8#_37kCaq)mY&xl@5ymwiPB={(DgJRg zYFr4e9y2wucA{VMk)kyDfwzaGP~6;euuG$dc$@On7b9COVosM4sT)hVFm{wILsmJk zDIULlLvR1D^75tR(^aHpGq7E;;85rE#D7)gJ|N;z*%6(0m9Q7?!{po7eZd`{f=ji6 zINMXdT-tr^-Q;ak$$@9WBk4%ec)z4015O=J_e!oPD;<&Ky94gWF7E+b?vdc6Lg&y$ z7m5U77rhMRtbE!gChNT<`+2M0StWfqT=ze`*alsCUxJKm7w`rT@^lfqZyvd1Xqp4G zl(#fhtN-a28u(e_h@PQje(y^GN$3)n;}r8>jWu&^6_4rk^M5C|1g>Ic*6?=UVx*pc zrcWi_A_ue&@0c9yZ;g;II00n@zC`IzY~I&F+G)qLOFC?P@_SkLFWot*T4+MWEV2Qo zqVsK&p4W4lp41;OAD*E6t`DtQYYgr15@t5J!Zxio?7gCNBy_<c9D`Ot`Xp9&U#Vxq zk~cqs+FS0>0zUa5DPnJF@-`&cKzHcaz3p#(gGA2t_YbapOg_o&5a0P+LN~0eXvklk zmZX3C(8&5l<no6jBxoy-(?<OCid+v&;kEQ`@h_zipS27Wzm24jjRLMQcIGGJL-(By z-=|1FhPcWK^2>1_rhAoK-_(S@%KqT9b8V~pX|((5?zgy;Q!s5`jav#r);#V0{P~xL zZTE(R-1G7e2K-x=tXG!N4D*(c+I&>S6dF4A?ij5Ko>uxQUG69%#SQEP2o$;^-N$}5 zzE`9jUM_YsvUNCn@N1YP^?haoW?53?qwHH9HLc^N^g`q1GhzfZ*BeP_39<vS2*_U0 z-)n$_bP}N6+X=wiC5gE^4b`|r-R=y6`4zT>lY8k29~SP$&&C}oEr*DZR-x1u8?^&P zi<=LR*R5!3t=|hfi`J+K2kCp#ZVkKMAz7JEIcAL8$eL?m1f}|^83i`~7j)YRPW~&} z4on@sIZ!y}f<%duL-D{SUA8b|@El8VDXeeOtGOR{pRRkd)$LXl4DT1WN`QrXLI#4R z+>LhnlWTjlp)%CMOG}KWW~Gr3=cynCz@9KY=y>u@cy-3JLjd=YXR_o;uaK|l+<jpd zOTv}`_W%w$y%J>NQ#H34(0l#~k+<n7%OxdKO<Mq5FBT!8aNvAvLO_OA1_eW7>TB`8 zf%CGLp7)0r%v&wACbO$YTXs4lK$)8-3kwGc7^P~!!`(Ti6P>d3>9N9QL7<bTQ{k?5 z^dYQpo_&`YyF{Oy`A1=ouDY?d`zHCbIviD<blTA#f~XN&`r~i(EKjZSJ@2H>P*xmY zB)nC)MXz-2bn5HBZf{^zgmCDh@cLt3RO^*mE2K*1u`1*tTdoq|{fBllw78O37k4=u zYSXXvV&^thx$G_mBepFaVFD6_(%5?GtEFLYxDVrbU3T)UEk#-fZf4bJoBX=S@^h-< zDa>qm{u{wY1K<aAYY9b}2`o+J09_9qOk|NaL0Wi8=);<Nc_2=+?^F|0*s!zog=U4M z3Qn#jr4U4S*S?=!j%7wBxnC6z39$*JjgWH}(;WR{#}Wh6Z_P#D+?W4rhw1z)Ppq5V z@rT8Rs3Jh!Ei1bzWpj&?D<4a)hgsHAbuTpMdM=~8^g=E$H@`d~GROOr_<suV|H9*m z^^6b@h{7WoU1feR`n!MaET)U+dm}*;xElTXWJU_*f9s-EJYwaU(#8HOy|x8~adL5x zBnVv`75!zZi$w+btvTD1HG?%eDs|E|kOBG2uV`Px2P;CvX0|{KXpEg$bo~XU;%^DA z`&3TpJu&QP@|EZna}c2o-Lalc>Ht!!$t2SbI<jFKu*V<T$a~Veo$}c}-Oqw>)9>9- zx*^n-6o*&w@yD0jU3H1>lFw-T@n^1WzHPij_#HL#FyBS$eJ@l1+LfrR-;gUAWN#mg zgJYGoj#H6^tpOtatMcStzgK$vKW|I038yIbxA29jKHw1Hz#*@y=pu2+32R1#ldvPZ ztJYQT8m1~=RA}<(jjYklB}U}}x3B+O|3?Ncng7=R1%SE|-OhT{u7sOTe9D+P4s88) zynnuaasF|bEM?sgO24(0gzA&&Cdw~%mOgHGb*fjebEj8%N2L;y-n)h36&pL+(KV<i zfMOwX)j%|9$Lw8ZVm}`n9Y<Oj*>7AgveO`nayv>Rv0(sGO&`s#Giy7An_g)lP_n#U z&6Z?O-sZ1PsJ^d5-g+1Z4g((7+OV1+$*<dMJrm~T)-;cZ{u900r{cRc4hz(Hh2r+8 zsyyTu<<)x}e8<-9I3vyGfoPxhJmI%$c{FLrFSr~|;UYQVc8oW#c>YK;YSNOtYjulq zb1w{e!IDBpXeN0RIR_q&LEQDvG$!6`<s{cGJ`uj7$IzuvM)j)eF(4}cY?nhwKO#C> znl8p2#mZG)dvZ;srnsx~pd;g&#J40YW~~c#S&fTS?_t#qBx)}gH2mZ=;lSH7yxHOi zi0(4DxRFN_95D81yr{iC8^>^^giV*>%d^6(w4VXYBqkic*drZvD&NeUxhyFq>1-6L zUSao4w~)@BvUst%&14zaEA{O3IeAJ#zbu#&W5mV^5Ll(4Vxny;Va%jqGU!UdCQtBt zGftClJPhWUZarByo?h4nm;ATa<AS&YyTpu!fCSrXqxEGMT{2JS3>PlWn%x&lPnB0o z*sPzlBFT1h9uIiZM$0*dYF>gn2|y+5dr4Z_K(#h8#~cvs*v&FBc^>(}8hroI6@1i< za1Y<jc!(4~693seQc-nO9;}ZSNyRhxOQs<%z4X=epxgS;Ye^Xb{D&xA<k@itPU|=r zMLq?Fii?0kL60tW<!rIR7E2afQaHJ|YIvE-i`~l$SedbKO-w0Z9fj=B_QG1^<Ci31 zJu)-G?jjRK5sWRnRG~l}+^<ezcW)*a7bhV|WXdt`cVrfuujpOP`_SgYGP`AH!l=9- zNfj^n$@>gAdM!gXq0C2C^L{`dN%@yYLal9Y_1B>hG9p@kG~PUgg}Xs{9mgvF*j+{d z#Cl`GLf)b?Wt8SqJ$<R?cV7YU1Q|$}oEk(6H%+<^Vn2>`dMbs#EzmKdMm;kJb+w3t z^GMN^gSd`M@PNUZsBG-SnxW<cLD;*}<aV*3`{M1F38OAb*5NmeCX`YZsmT{ArRmAE zR;tGC-aWSBljtDzdjs>+ddDw8FTHK-B9HW}w21>GWt%o0bk=hpUhwh#)b}vDk$zg5 zC{1oy{?oe;*oSxrcv>IM4!^r%)_GkZn)aydi?on5bZCF-*KBRbz1fe;5J?UjcR}50 zsSIH*W1*f=ht*p}@6_H_lQ(-|wKa`3vN<jpvMMF6GGzUL?CPiWxyAz;V^R=)W1M6~ z<<y&+4h@b~H4teYr(8b&(ybjR_S{**$e1@VtNd1J`nBA5@_}L+Xi1u0Qk2X2;jUuj zAkyEpDsum)?u9<?qh6m5mLrR!J?eFy`b}{g+uz+@g4BsW-=fxRXgCg%noEOd$AaLH z<Fc~**%97ZB6UeRj-gJpXP=9F$Y6&)&{fKHMB}!Q!8KdkI#~cM*?@H^Y<j0Si+Q=0 zec}d~O1AsexHk)2MdN-HHRw)7?^TxN$;g0?f7ZYDwUiF6gYqHh_c~M7iB{jILaW>z zVGA8ERPCVp^~Ik_NqyENB952;@-A=R*h|kvLl<r(Y${z>nLXC;(>WNJm);_+NJW;~ zA;fHm{NqLzuBVN+g`K*0HLri8-F?So3D_8jgegi?43xlwqzKgoQ7=m~AqIL*cZMQY zt!im13#@I$YoZ6NIiB1B`K<z(I`~X$Ke)fXl0g$FKnK+#G8h6UYDS*tb^Tgqx-Kmj zru7>k>~3UJzZgcA_J28fV#_zO5<xJkDD2y>a#(WooowfssE}*M%nNm!w*V~rlTf;6 zuUKAP&u-(XsoSB}|H`FiQ|B?o#b%>DDwJw7D^_p)|E@a21(%uN`H#nA7PEg%G)J0P z(Kn)4-153cm3ess&AnGTd3u_+BDp!_&@~D#o!!#@!os_W1HC4$8^K&%?q1sqGIxL0 zR;ypXK93SDY5;07w#pGzk|C^H2Ub5rms9UqM;Qahqp~s~QY(J;+(BdP1<9|%1&;hY z3)CQ$h?p|I{n43#q=No|H3P9q$b?)aSGPh-Nk@38#mlC&mHC64VNC+9VN)oCG9Fux z2XSv?>+OXeNpk6rKk9I9YkOUBc5|_d9rUZU4Q4WiCpLr@FIZg*^rji?{doQ!dsT@7 z7Ddvpe?~({twc5?)us}Ccd@lwp|Mp=>dbGa8Pom#5RgojxVtibuct{k`f2J|XEysH z_*?m^wbBXbPuxb3B*9IZc0-pdf^1M_zIdUje_!IA_Cn<aUO1Wr$6KMUAwpd1x$UEk zYA`5+R`V+|Sq1JDhA13lVqAw&N47uZQ^tL2MZN|l$MJe5469X{6=D)1@#`Vg<y8^j zLVOPb;h@PalJ`>at(I`vSE*okkl40J9#3^Wx!UJ_>D|wKe9Ggyc}oNhkxGnj!|?34 z{2Q^CTncMK--=r<Q$!G3j|pb6UXn-W^$qzVb)yy<iqAz;xNaa$dY`-6@dPo+XS#|2 z<D0|ZRSO)h4m9m%H&aGGZ~jBY{f1%jD#GdsA*tH^^W5U5*X&#`TXheOon)#qfBlx6 z8B3CT9q$nR=2cSNY*oz2KU76>JM~YU!}EIhVDSiAJAg~edlo;>Vt4u2@%PxA#Qs;i z2m3ISB_?Dipct2W1>)M=&MYTZ#$MdjQSQier^|-U7t|y;p`eigM;w3bxOd(t@9`m| z#;~3|B;N;bd=11hFJ+o1XbM9g{w^1wGGIbD_X)_yKUT8MDW-eL=Wi_RwdUBY>IxjI zIVm@R{zpAKU8J&R#_^=GYxI1|a^sbo(i^sA07j53qQ*?%!W!_*k>X7o>srU3*Q8v> z``wQDeRl;IVb{Qcf!6=GQd`i`Q>P)7OY^{yS2KKjCb+BaU0>>};vqEJ4%?#iUk<N< zvq42N2g&aV(H0;CZ)M=|*d_ZZMZu&9fu4Y=cP!JVE?Q|0MB1L?W7Yg?&Y;f}(+v<a z=0YKYK`(n&>)L>7_uotfKk0VY*@;A-aUg#Q&<PR9&dF+PMCQ}5u6sJHf3rlsA5yWw z-vLkMgfIl`UmXNC;4G6kWwZpnz7e8WGw%83I_8YQs@A2}9lXlQ=b?ScnPTZcsLJ~k zHOVa{B^n2@km8oBpq08$f8~@4h!Cpymjua^((rHtF8|{Ik9rl@F^poO!^?WfONswe zN;qf>hIv3d`=;cPBXMlmwF!HG^mF&Tw(Gr-+Qcy(5r1{Ep5Q!`;yh)EjfO6<GE zz)2tSHq@r~?o&3+?>ZMk`2wc~Lc~aKRd@+4Te!8jLsiWolg4^ZvqrBTruu&HGwlk4 z#x{3E4qlt|gQ+7zg{8<%&(+WS$~c7KLzwW@qPVqu6>>p);ujuDIXoXY_EdfP+2Cua z+S3d3qAL`m1_G{uhUfVd9yd<onT3I12&NE@opcO?DpmhO#dMo+KnXcwAz$(&mbdeh zaJUXmQuo7QjI2mct*ybW4}%vH=ti&D38IcuGy))v(Qg860+uZs$0`das;&)WY?z!R z0hI}-ub|=+RaSU~gl7c(aDMV6OyOWi$#T}xO3E?MjMgob#IwIl?7)INIMs0i^~VkI zzgT%Q8DWY;r*WIWVfmm(O_nHHei@C6PiCI^ZT0C6puo+*?p<18PtIsli(5mhSU9^c zgOQAtmFL)e$*-->QT!w7tgl0JYx~6E$;8Iq-*wVl$Sz1eDex&#ppyMLJf;Gs_84W$ z0+}X(dO1Vx5Dt~<!wl$^<&0<N{#9w2rxN>~(^YP2UI@M9Wov<3qzh7-ARFLwjPf@W zloIRL4*-6Ap#$gh<oDLEqW`W|Aqu;p3>f|r`LZffV0VVu_g6f++&>)F3;9sRzP48< zE;r&-xy;M~$5>6+`a>nHc8GgNl$YiBG*`ggKM4trJ{(IZIyq?6j6#@XWzgdVR+MFu z>vC)Asji>jo2+rr$Fwny(Jf-oO&ck7HpCO%W|i8Kc!N5RIhk7igLC-gtqL@|o26Mg zK%hc|x!8{u>NPSc?dnzd;-X*aT*Sy??XFO+nv((yIP4g9pgL*H9nM+f_Z+@Gwa*I% zBbP3h6DDT%3`j_K)!gGw;emh%133p$jn4PA`anGnY>*+Kgd2}(hMN=nt$vhjj9zC` zj*0mEtKX0*g1>K7kpmx%Z|uIT_QsBWHFby*ayiyL`G7R_m3%v=v!$(mF(!zXrn0RK zui@#%gkiXhO=xBMUKn-0L6))E;ph$0BKZ`OPG@G%bavf6E3d$<wzQ_@gim=6aA#`u z*c%go<^i7t;Tv7Q@)CuC0OqkBi%Wxmz)0nrN+FuYng*K`tTO#bK@*Za2u3i7g4~wd z@$BK8oEjkzFZt7hg5$i*GeMvbUM<g?eR#R_2_3qI+Lf<L$a1vK=x#41%hmVVv!+N9 z`aln=<)d;5>WeJu7M4}1wIt&ct*;ChRnul3(rR};jQ{IpYqDgJXnSo82=f(?sy6j# zt;Pg(mCLO@+pQqRZ*-cfrE6gq+3M^BwrsfwL!lnR6Vkt`;r?>ON1GYMM`zPNz&o}_ z8m~c|a;@ifom{Whi6Yp1PdToyRvq)X`B@^YsFQ~07`q-j0gT#$454?Syl5-i=~s&6 zkJkFU-?YYr_f$a(r86xCG>9m`RGQqYD%RthZMuNM1=G(gSq;8vwOn<5s~);eh4!ve z$4mD}(&El5bNgccG$koFy5R5hIR0VGKG=Y|Afr+jANUD3uHrcyb(pgHqp-+yz|0r* zp5zZ0LIa{H7ZpfTCWNiNY`dQCN6RHQ^$Nck&s}%8HR}1$n$;#GvcNT)=55W0gygn6 zHP_YIPa2E?AL)nDGNf?g<Gt>@o0Lw%NyHJ9ZPWGQoPI{cmv0HLT4OY~tcx45d))I{ z5*Zy=AX$ZRTCp?ACCWC;+{n*6wmF1Ws}7<V5Jq)2ZRDI%z`FL_qjl7DmSIdjb#7?s z2j>zN<6mObKf6sfa8C7SyZ2<&%ndUCwteJY@p*dfGG;soS)I3g91QK|nLmlzF5cgT z<RBU!g`fTIGr+dxT`6n|yZ6Zl;b^$IoNs)Wt_+SMo;T!pEe*PCndt;NaC{uoVYnq6 z`A}bWnAln6*$riB=W`37Nu12W?a&(5A>J1cO$#{)QkN-iJ*`?LA(v3x>oaDFg)Z+9 zNfg|(r}YhwvTx0nr(V8~Z_|uBFqpZf8*WMp;5>F&u5Rq8&s$f?q3#m7fDK7JHSY5y z_+J&*TB0f}<@8aAO8chX=ZhjlC$hWQO*blc)CA?`8RU4PWC!+IJr;rfTtI#g(n8YN zT3D=y$X^}cEWTj{ch-85GF3GnE|_qHW+BBA7MB*g|L$1X@(c{T_GU`QtZLeCB`K2O zv+Zn~A?)Lr8y5)T!b(q>9qwGZMTEXuI%sKC0{4Z8!;#D?*DL015Gakt$)lYo6<v$l zMsq(o3^iq%g32R~wzBaRYPZPZ@TUC95Fn|_9?hUS8SlBWwn-CAgL8)(j2<$8^|(Bb z-9)#7i#UGwz3Sv|uKcevV<kF5n$0O;=rRZlHgUMa)45j<--3hXup6cCgc#4VlOImW zRfYf)WYI#`&z5VRIqtVoyf;!TAvqQB8O`{WL<iHaV?VQ|kIN(CLzI@iuA^@d>+%?; zC{hRq<4FiW6;XO*rf`*e6$2y|K5+O*T<H@;eTSI>VURp(0MPh&lH?7*2^Qvq5cg-! zqtCQX3dWpMR?qYJ{st;y=R1<%K+XK9=Z;<=KBF2p#M)V6O|k`RSM9iaNMxA2qMPZd z<qJaZ%)xYu$WTI5nr~)+bJQESRndx5+z7Sw@Ul?DVXo$^*%-d9Cir-N_jiwjqA+Nj zr&+@v8Wm)<3}#{87)3O8DOl!KWUMd3$GG+60q^O6IWOGf2n(+z3?*V9_$zu<DP^-c zO?`t-f_L;$<{vME(%;ml;7M<`k{R5Fw^C#3$|N1F$`~A8YUnScO8$3-Dh4Q7QIahG zs?t!LYmf|}XU40aL%Y6|CSq9eEL<f0q3)AouG8q*;uM-HS#HkE>kfUTpu~Vk4lG$` z%qOrKH~SA2i=~EtaIssw@3T~UPEvv~c1dP07EFs*E3G6s+YXbhN=YGmW{tY{Dts8g z26--~GYV$b!Q1SD=Wtn^2k?(N@IYxzIhtj0JwVwt#ax4bKixmq$(bdL_QlP8v_k== zwl9@b+SRU@)|1CWSVqMC`iIIOt{=Z}9n)-&$kWu~<10I$gXk_zMFaRS*LD%2XZ*H^ zn&9NF-p_`Hjnx4@hg~eyroT!sxP+wR86ubH28_+eO2=M|9|h)&H#Avmr&OETbdN_4 zE!#|R9F+Dfa%>ork`0G3BA*uZh|J(gxc~OA$(RpgCxCc22YzcvJS;)LJO80_As+hK z@i_(Vcq}Dv*Jp)}SwZ)IDEsGzs2{Dit#ui>5)d%WXpOX=qsujslAwF@boZ|Uqa(#i zOYmwNtb6f-imW$h3SONFTP<+&W1q-uGx9j%QK(G=nqY#f%5rBUY<O+>L0w|qciYF5 z+21$OQAy8#1y6kj9O^rX0OLATYD%wG;Y9v~voY+aPt(;ot=q{&I`|KWyY2F_bFvDg z#A=<VvNY;V7G?T#uI5}1|2MoWxr67B31;+lB1D#CIi#Cd+&XIC2LEAvvqo4Zg3b!G za5L_321r;+85CQRa=ta%itKAfGLaYHL&@Uzev18&Mg=WH)^At1CVPnKX%2q6srD?_ zcX=!OU?@71M{=*%?z#=hbmz~Q<>a7LaYJXE?$<H4r%6|S!xRCm^M_F(MNJ>ZfQ$Z+ zG&~Etiva(fs<w)aQ@9?b!p2&{sXa8&b!JZ8-;=+$u6poN+;!o^a4_|7n7CUvhKP)+ zs4A|<0A?yrZ`K*2ZXlZy=pln6>|Kz`SCYT`7X)^>CsU0B)80JgA)16gh5PGv3R+xq zbr@Sy1y_#ubxCgzpza{V2KKGg45k%!`jovETF<Gs|DpPA>GvBmRCAsU1^+yol}~Iw z!HS<h2$JII_o;Q%E##%k!ah|~6q|*t=3N*OBJM>BPK4ZCKNT%3udC@9Y5(};xa8h- zM#t2?u=e_?nT-%$f@x_^$%Yw^waE}u^_fUZU)!G)hx@)sA<m%OH*a7HM7CuB_*k@0 zdUboEedOg=@EV*m4|1cLtSF{7G1QoZuB$0uM$>I_(nUi(s_k|dj3^_wRC>t9Ex?ik z9G*lD^h}+k{*YmW58O3;dGo^3Iozxn%Db7zF}(MtQn$D9xIq&tuWa)ARfW0K?!sF$ zX|kkrl-;3>3$m1C1dQl)amnY5mLMSi=Z9Nu1>6Z&;UU7U1k6_h&-QtzJnDVzF4<v+ zuYlx=e_40#sYl8$UsShe!bX={&F(cHbYa+f__cqB5CoIbyW9jIQz5+YfZcTIu%qA? zzxFBcEr!-hQps!lE4&PyjM!G`(CinL#X*p<O7a5_ch8?`Ki!ASO;?=hfXae(G>ZH< zL<oU=LKKU@sN!H9jpMsj#kCW-CMtD~o`gXR>&bZYYD@Y^DanuU7{t6Wqp@21xjrFd z6|5Na?cjS+>%Hxq4-}4d+iTTnPY4Z(_IJ*AD&OCMP8i;%m;(Kyve}a$+O1l<*_?94 zZD;=_X2b7ccP$i{v#wu1LFcVZ9(C{_qRuIoEUjJ5Of<U<$DPgxD@GkiSIaKi9Y;fd zwRlF_vJ=!kKF?UU0eo|=On>zJL_d2Yq^|HQQFf9-?58FHlmDvPO&1=m7_zh^Dppjx z4zZH7`se%E)uNZ&Q7;pim8Oz`a30W5Pli>=Cj&TS<=K^l@1~Az)NXkpFP?#i$s&Zk z&UO~!XH?hm$i`{(aZt+O%Npe@A%BM(l-B`rk3t~p?_nRvPsg1JeQ{(3e8VW(NA+$$ zL%D9g6IYgGN6reXpq;@y@FrxCteA%WZ6QFh`OM4XyPt&3yTAFocXOuyZP32M!P@zk zt#)oZ%PloI;v~BG(XxJ1-lTAPflO@fjqb0PE(V0!rfK-YqCDTIDlc;-W|}wEHB5Pk zG|E@L?ynR<r(C^wHz4_ryjG>}g4kpb#Iw*Ecqm%IB~16;#Tu_Zy45{KTj>zQ1~Z7v z<72E5)|~smX@I#Qg%w2Z<jw5<$76~DOviHRvE?+$40%n9mlUvQnFM4;WE8Mp?9&aK zD67ZTQ#4fuML~|F<^mG(af&B~Ki?{+d`L{_Iv?S)OtSsoDX*n--baKfth>n*0_N)U z%#VVilZ=cty4ovW6JXWi*fz7KAzre|FxjizwNXH{o~t3lP>;`ddpA6=&e`{A(#SHg z>aJ%5h(U;GQxXw$OK)PZsPPMaclnw2f}9}bpvsX04Sbca{eR|*awM(XJcEV-=Y}m$ zBiu?^)ivdlg!#?$JgQeZ!r@6rz`Kz`>Rw7pTQ=a@%wFv%bE{UtLK>6$afU(?Zl(9s ze~9ZjBD?RBpp<X{F+j-v4VVPy1Dv~6#ravj&FE*seH-7+Xbu-`jePT6Z3zH(Q)Ce3 zc#o{|dUW)gCb{_wA6RxeZlmcLU;m2X{sh=Dcm@g5T}UQU%PQz9A|4A9kZ((1$yTnc ze)M4J8UOM|iroV<Slk-~SsjSIYUODrfzMnev&J1i`-mHC0ZQf<41gzo7!?crsaOif zpl%VFEw=x09<>&~X-UJSkh*#K0bGKuECG|pf@H3$JpS>-K?h+o9WtQ!Y?g%~d7S>J z1$dXhiKO&0QiopMm{li_UPGyu$gplv?r}sse?aoDukAMx(Rj(mxXdS{z(SXq2-ayW z?^h=)p=N$5_i2AV_=iejD~B>q`sd%4TXY0+ZwtAv;R{fuq<jWCSlo<BRkuD(BJ0*H z@R7AVtO+!Kh{*wax6r&qXb<!f`3_O7{7OS>2k~<8t>%^_>;>WS{m-Vp!hsH3Hbci5 zvA_%~8eG0<b~%`Be_$uo%7FWY%+7q+g{{6y7lhEvuc6KW8sO@3Tuvu<hS*uVdHxd4 z6Y1IWi~?zVl8MY%u(&|*LRtQOJ!x>Ej{r4_ozjWM8r|0*VOZlweEIw%GS}`6>4RHI zE6bG(CIn0f58=4nxePv2yi;U0V)0Y-)_@o9uCh+wJQ`lmyclB(t|u5oK$t=(w?(5S zV60jvxmjUfl6xclUm~wj#OAOyGh}d1zgN1n?*+=k`XK&gB;O`QX|!(d8cCZJ&}F{n zj`b4z*q=pB*s|@=@J3yg0v10mKAl*X;aaF0^M^}o<#_-LdbHgmnD+P$91wyD?`*`^ z)C~QPk?R;r{mvpCWRJ#9{j*C4^QiQ8rM#k}U##`T{jAH(#HN%LAGP}Raab~<+=TEe zl-RV{E|)qv>ybz|x?7cYE1~A66MZ1`XGi4gMFs!>PPQO=#$mkia8_h-Ti@@xCXe?o zuYTG}?mL34qo{$VFv4-YQ&Cf}(2!+oSP$64G=f9<>FH%j+eBLjZ-5wLSyfu*W-B;) z&8VZjHFaf0R!@LhfQz1luLgWL(Ky?d?9h5b)reD|WJ1pF?qyrq@Z^OzMa1Y%WK_0v zBqY~>!kT`$zaJhNKafC9N&AONRkeJaEHT^>B^OoiEz(>Yf$e!#v(2q|YF7Lp_?m%} z7rp!>V*0_MFf7_4<R^veOhWSnMr3UfS6SxA)4b?|?*B@sTqHRI%7T8aeK}lnbKq%B zhK&CkG%u)5Q~upmpPfD1J&n7@1H9bh%5PuECS?CD?OgzqvVtphOG!z`EYU6ZHv;)2 z@2V+Z=>zq*UBh{H0qGczzbaZzWj65ax-W~wyBTYU;O<rISorDGmnjIo<MM_YxMNIo z%3X5Lz2Z@;dufc4tfEm~u#EXka`#ZwjA@~bTL>RvKDQ=#qe?JN4ixWYZa2M1-LZKe zh-giAEL(LjR+2?77vpa%MSqod7ryNH_0}`kG<GzaAKd=0V%#*FsMR|FNc#ryIt`w5 zkTO^4MhelXPrtp19~{*|gkp8u9G(hXC+tOe0IIliLu2+zmd)fnddFnN0D+0z@-37A zv<9s<hC?w3tLg5#IJqx5H12K91WEK_WQt_@(wwh|QK-QBwU`GEmy2=dkGqadI4URV zzUm4piYFB7{5ZUfDeOk_VA!%3GI0hBt|z0Gb;RGDs`WL+Uoupa0zx?E5R3Z59zJ_l z<~G0I98WX6V*mP@WQW7OguKo$P=6~uc(5HR*-VgQ`f{^9R-oAJH2V{PThUfn<8Lv$ z#MAh;ZZRg0qm?kY7gbR=QtAevYhHJ<QRmo%e(!6SHItKO-=Ij7PE!$XE1qx8Wz{oy z%bWC{OACKDy|5c%4VY+b1BrHci9Gr=ov)*H{zq-zrhZmdidG&Esm#;Dx2%z52~^zT z;bXw?^e@ui25?Tc3lsS#+k;?*xt#b(b2G5e*)dqu8x?T)7~muW*3_;_OzO-SUUj8T zVWec;TsC$@XJ;kM>j*71BDXg^^|(zpty1+sOh~y}1=xRsVtRwcmd-t<dO~=<P8=TI zcJ&b;g;I94LH!N?`RDo!&y`G8C>nGwT3B576UCn@E1y}Fe>h;2D$0B#R!WVogsKw_ zx|uH0MypQ+@s>VX^9C9j>mD048H2&!EKed!NvQG-HHL=ayq_D@^K-VYUR9Q!kWj5R zxF$ggWb+LyniRhznp;k)Qa+P(uowdvPX_ng_pUg-t4Y7o1WH5yxedkT%ArsBRDfR~ zv>bpM!-5IjU6!D*y4D>~_n6+jr1kngjcl~(C61bZW2i}wDL&Iv{P+%rEuM~ej51JD zBGf!qA-BO`W3H8(>2R;J6Quv3N~;&eMApS8bGfx7s3}h!GAX}-!{JV^aP%>m-p>?4 zNJvJ<CGr!05Et26>)a1WGbc?IlVwId4y7-;^4J#qJn^lrd#%iuaU%!SSLwqJ8wwEX zWr?+w7_D?C-&i7yUD{urIHInh^_qAWRQUH?d?B8oZayAlsG_%=%rVFB{F#D%08c)1 zxoogvd!XS3<tYM6F%enIsoEXGzm@w=A{^fWU&gn)=sQHuZqLY5ppi9Ee?Y%lNv`Fi zq4oTEjh4<0#2@S0Jql&PZDu`$hJfr{q((=)+~(XQ&8v%B&0T-Y0tSmoc+LIKCoZ;p z9%wp(jfCU20`DF1!;CoHqz33lRLX??l>L{qPN!}Y0eX$#sE+{)!k}{lE*1v~8(i&g zPNExsO@b!dJst*hSyIDdPi7uBaoM#IR_@j~nK>!=MNi;7siKJSZUa;aFxU^Yiv&Fx zC#&M)?HEZW-LJP!|4afJHX_4L(ji{)hvJs?30cA}-tJJBmO@LvOJUuzoNU9*&JM8w zM<VCVhZL8Ev3vXXv0SQKjRhDjePUm<8Xsw`HvpNS?&=qi^l57HWXI!Irs3VHk>;o8 zqjXj9hok{qFxOH^dV$5fT0S1SUG2=DaP_;vM-vxguPxho!jNwBh?)S&`$-3{$Bx8} zIMc&tZ&__5IsR}h@R6*DYW;gXQ`vSop3F~L;`>xTq&$5++itTIaA0lFHN;L98&%P{ zKv;{YS5=h~JCkf^^kdLr(C)kNC~4aS8W{}Mcm)zLo1k1nMDM&CxLcv^pdDp3c)&H# zM`m&N3O^1{Nd9{j1H8L$)615I;**zIcsH^i*<PQh`@C?k*x!d+e$DMr-L_4`-=I(R z=96(x@-=V#?Mg0<h6&$!4IjZruZUlby?=9@yX~bBkQ9FsHRW$@IfX`m*^Yh7q0>R{ z(u`$r`I&708FUfleA=#XzJ2z*^~=kI&ygP^4e#o#)A$3>AT-eV)KjW4<r#GQvrF|f zLs4^UOPG1j!i%nOFRWL%6$^eb%AkN>1aQ{S<$|5lkD(1#e}QnVGdKBm2Tgq&)QW)p zG$UD@Se51a#m3Syo*VPIDAw*4F1VY1Z%ei(KqNEfF!pd>&q==4!7mN`sGC+W%9sw# zKGxyPAeTy-BbE2ODxYipCRz3Ee0tsP_Q2Wr38)qojfqk!jl&puIiggm2Yqw21v*3m zU!?FCS?awHa4~xRRcJPHV<nQ;i}bv5iUqhR)5Ehh8-d~QR*#=$0#BBt(~G|shxVS` z7Mo+18O7`m0gqUqe|oQ75>d6VQD}D;()|7{=?}}oIGPaMlkIez9JF{fNUN$3{sqAQ z*!#)WdBl5Pf9|IpviXO?u{#bE16Z}PBv>cc%zVWQ3yD9W32t{CP40qkorr6rA!<UT z#^t){Pl%AIt^fz(aqd&k4^_~$9F`3$)D;S|){?v45j+uT*gh^g=M*O>SpR(9;Jq>h zvh@^}LVh;-Mm4Z6kA9SFCxm>i%ds8C^`R$qPCE6f%q8C!RlcAo6yvs<Fx*nAvdHzA zsG43m|K4O?`)%3XisIMg{el+h(AfOnTkT3CLDEc($2L*<*LuCEJy}*CT><zzU;8xz zRyg`B;HN-Nq9+)p)ezPzXLFaE@j$2P=l<j3x7K_P)NTIblslyGWhC!b1C)7n^rf6T zn_aDrcc1{#OW~CwWD~^fbB1O^7%!ZdG+5a@zUNer31v1Fi_=W}rj})51L441qI!qe zHwA<yDpVMjTz$$_@2+gGwFZXrWEmbLDVa)Y;i0{eUz=Z$UI<<kb&#Ive#yNRcZ_C! zav~rwy83=qNAkI^TG1!bIxvb9S!&}(p(b+XmLmIB7Emfzlg(UyUpSqLbwhCmU4uqp zz@^;^$CB8ratqa8xsnwz?q*_tu@{%)MyEmqH|*Fj{!8byoqAG*Oi5(|<-xwyceU6a zF{_dIy=_l4>`4PQqbjQTKm71)dI?Dlt1{G29G#UPUNY2m9^+WHV^z6A@ayJbR1=y~ zQC7LQ@-}Ytx^tY4b#jZ)!kyp%m<2(-C**2N*xn;TWArW=;z!RA`_faAT;{0$EloIe zc`p0N68s(bZ718gh|Zx$*wK0>{rySZuhkYBZJ35=IHjT<IGQrig3jq||1~c^-fm|n z?HceKRL${=Zat2hG%wKhSe};Ycg&!qud~B|V8?TW((E!c(G%k(6)ur^XIl3~OL>p4 z*!%BG648?~HVSEka9{_Z1$Ka{9NgZqA;C8XSg^Z$+lh(C?!V7+l1rCuIR3*N`@jD+ z>;h4@Gmmj{dwGIv@9D&@6cnp6^;&dv1pV{{U%Fa4j!OW1o|oSwQyM8PX6Uur$FP0w zM0<$#C8>hmmW;gUAbGnxbJSIEdb4r7yF=lc9}J**4Z0QtDJP-3tAD#Fonyn_i0SD4 zygqR27c7h=pA0zYl9vYkdb4-a;3bHmr^C-1YTo@kHmOnBYo?Nj+u9rS2G~hK27n7Y zu=gLT6N(*0*`~1z%IK!XR!gLbsw|s#8y)z<8?#sSAxli%lj_G0Rr(YX;73Jd#;CAz z_1b|D8B;wi*h0>f0zIb6_8iw+8qbG?qqM%O>JksD3YRdx0kF<<wR?{H+wN+UiNckm zkf!&Js88i~)DYf8E1X!A$DYlfCb&()e()+CU}gJ8zq|ff!d>udZP@59;i#EQtbII; zG=_Jm%GL|Y;F<FBmXMvvsu9s#MoE$G$9Kc-+?^KqfaV;fh?2aqFkjni;hj8h3BS-X zjk;M&SFN<~OTPnd(GJyB$=!KW1eWd&?hSC!hBR|!+24_wA>pB0da=##Jsc9M;N$C6 zCV1({Diza0tKL#Kz2eOb7=ynPqB>Tk?CIV8(l76No;TY?Bbgw<U~FcH6tSdLpuXw{ z?R36N{{C_l^gbAVf3)77DD@AO8S!#{N!?H>16&yl2`Un@`MGOVCK+lo??2Upio1gV znb(cw+@FNFR^5<Y?UFp>^1X+?gN*+QoRGWYd#@}ZIWJQN+~r*cQP8bNF<M)H|1IhL zf7Z((OQbD04I3iRJW*7g+NrlaB7*r*qhTt@w0t%(ZK`KtSUdXCscpRKQ(axm3mrg| z65L4b3$=CkTwc70_@d`F1aS7)Q?a8bKWe$A43&mJnY{jQ@AWM_zpE-PTNNZq=q+9V zQg9tKR&K07Hp@b_`rTK)3tv}TJ1)ZSB9c1;1Zq{_e2vFm)=JVEFATLov6VB9KUN=Y zq$=FL&T$}B@4p<|&Ob|*s3v%nG8d$j<Vt;E&yf$+SNXPtyvlzLENc*Jh2U^Ik2&ck zkhSC8SWQ|OotvG;#0m&o58Mo`56o+WPq|bW@NBl&M&sglV77)cKq+N3jUU_h&NS+& zSJr`3DIGo12|Vo{7-ho30t0nF)5E1J+DDx!(DXOJJUYnV2M=ORyoL?o$$UUmt&{Zj zs0kVwysm6h==l$o4ImixlMcSkK$C8cJtH!Tu6F%;@o{$7iB0BVp@_DMGh`6i6+v<a zCNLNziOcIBsy=YwHx!E;h}w<kBZa5_jK7U+DEyAr`9k5{pl{V;DA~g*Y#h-p&X%17 z!<}nU*q}TX7WZqh_MBzcSk#`Zy?VOoWea!4qo+4F*EPf<cilB#iDYw40|)4SWO}eN zPT8Gvs(VrghuFC}GOaRztZ^6+pZoK?9<ZTz&2*FX!h2lt%Ecq2<6SdaYF5ybmgV8Y zP4L?$k`3ODbu+u61jR<yDei`xe~<e0YgL`ksG{P_WnqC_@v1_CR<D>r3j@)r7bfxi z*^N}!$KSoWPzxt$SHcb^qa8FRxn@(V0cZDUPq=y!toeEC1YNRjnRuwPs^ji1+>cri zFA6<{{eqzwUk*jc0idS##?M=7H=A0<q<YYb`?R^<RO020yKmRp0*0{e_H~KS?z>h) zEAs>BX$|&g2X|cWY>>*_4#maWc0O_q$9Uj%o-?Pq+ov>}-$i{3H3M#Q_>kMcE*5fa z)ZK%u`y6sbBy*s)PS+>f!m;m>33)4S6p7;_?H!YXOmN_HHFrMjO)ifSy;yaD-^+ih zW&vFahhj-|?p|OY8+<z^Wh9jn`yypQ*eAFr^??~byuJW4&}U0WR9$WJt{`#sY~?T5 zSrxY(npnje8)p69)b4L$)UYLRg;s@tNKADomN_dMx1pN`l7s8^d^L^64-b-PT*%<j zl~EPJhAF?{O)l*Iu5Rmx2XqJZJyB1n#~8KA;3~8Lk)`jJ9MGX^X&rKvD4KtKeP(`F zQt|}*v+Wf;p5WR0TLmH=qk^U;RaYMI>)Ys<zNFw%U<fEd1e)uyKpB2!p+7>p)@#)C zP+bomLCe22^M)a+b+~RT>tb~F%suW~-+mY(I6|6H{D|(ygrsC2RZ6}+4WS_eZUxVY zjG4PD<@;GI@0H?F)k7Ok95i;vU7D=pvlP1rK=BOfhhFYRB)91D5se0yQM3p@z>=M^ zbQ_}}eVkXyQQX^*;UMDR<cVSx=;K3K9%X}LNR19<Hl)|T_S6AAZ^pLJ^K)fE10!B^ z<-*b0AzE>4%9d0{ba*&XZ^yJ50E)t>CEwL3)2Lo;QtKm-%bTJNgFTla@zWbE5%K}H znSSgiV>3S(Ut>}`V@5tOk@kO}H4B<NV;7|A2?2m*(^b}uB7||SAFJ4zx~ub1_F!6b zSnriO7HF8faIlD*{ODdwsjyB4ph`f;!sA1Os1R@sF$(4XS))|1WOGFC*yiCV&P&4h z(^)0yO;vx~!60(!AF6QRGOMa<NfiA6;T^yx)0Ct_C5<8X3*jtJfU-wJ6e9o&fh7aX z!(Aw8#g}q*xRNY`8{p>|oZhJz8%St0Y!+sj{O{)tW6J@qwd%NADi22zFY9^S2oe^& zA@H>1&OcP!Sr^v`==-%b)p3J2>KYn!t%J(g-L46I^Ro5A#k+G3E&DcdMMYw~<kNXK zjjY^RD~EFSIjIZN=WUBMylkZiHhnP|9jCJH%1xyQb#<xiX$CnCna-MjLuoA3Y@?bw zID;NcwqGwLKW$lyJ|eLr%gxRNJ|T9l&P9ZnE|Qgr?K#VXjGNgiFt7Wd0kAh`7fYk{ zlqrDcOe8bdFGIQP77*}WE(#yfCa$<`yutXY<HOLgfXkN>6!)y#qPNd02A*fX=peF~ zVn#UP<x!08JWy3;K)ew@3BIXcKPuO%r)&^wUt1q*9|c+eQb=Xm0{%gkCSJ20J7iK@ z?o;EQxY?L`3Av-o&ZP~ISO$2Qh=86g+Q!n|eshGZ<9uAnU|iP`-ugh$y>vL~6Cg>( z{h@$exhzk*+x+y$3M_V48-KoP)UnWZkKRfMfh;cwlh$ym5BIw4T=mp-TSx1?yaHXl z+|=(EEFiuwFFdf!c1|oH)&4u)!CC3nep+YK^Yagu3*^WxycGkLwLP$~1&>wLdosJp z^MvG!=J<IrXmQLT12|Q=VN8_>v7RXbDgrQt7bLzY6v$`#e)gjJQbJnY14psk>D@xK zz4a9NHt5<vR3o-TBv7CDzY&W%Vey;gP=tz8pidbo&6LQ|*84WmL;8=zb1zX}#_FBH zfOP-Go@pOlAiZqK!faQSiL9{6xxGsn<olz}XFTwhcaCRQE*_qvr^M~Khcaw_5Z#QJ zyt_8#_Lj!_OMvrl<Y-4N26eQz_7{0DMQRK@EKle7$!h(LVErhyYtwYuhp|GH4zl_+ z2yh3_LKxyJFHhn;N)Fhhvp6r*UHr_Rz!-+)X+qJ2@ZY>_M{oWoAQO59@oOMxz&-gm zi4}&}d^S02@z2~;7lxmXPxA@M=EYrsMh2aKBK0kEB}qUVRc;rrb6QI5E;?CFifZ2X z%Bz=0i}i8Th?&^2RK}#J96Ylcn#MRgw*i2JUb20COACQ%%iJ<&HeP23-TocA($cB& zx+dfX)3e_}fg~Tlmo>WR$|9g3zPIknCUP&kuz=M4gp^EFS4VZZLKd<<^?8Z>Dj2SF zv3>fxx@zgl5&Bt`ckhC@0rOzdtY{XpY{AW2j`R39#CH1&mvE*N6%|Xs@VHNojk3|` z%c^)uY^kjJ#n5*a4zA1wBTTLnj;)Qs53NMr^L`dea=p3BIuI$g>3}?2tr)R|m07M& zp#&y^)Hy0@OA=W}3!CY`n-5B78-kWW(m>H-*|h7FJex+@tfj7V-JZqBV~05ba5#xG zLkE{@rg}9zzpr9J>Z55*9<cK*LFX1*IX2{A*$<YOJoTC<ApE>ou2ZLpiJjhAtM8nv z0}lPaWO?5{UD`K|eC-G2Un2af=FG$wmbj%VfZPZ>eR=H5g_?8Wq^ZW=^IE|Uo<4M5 z>?0L%{Er*xzJFH<HxmbECV^cYbIvVqzu5c6v7`W^iK;Kr@>+rlxbZkgds=wl$GYW? zH_|XK1)lY(Old7GhV7LiQpfCw$hdlG_RS3I8QzL74}(Krpq~{0l@5M0z^zOd;H_e7 zHp2oPqvREtEfM2o$2Sta31t0feV_0?9;tj>Z1Uy6x1zOT!}=dXp1}eg{N0go{=vi^ z1<rlOqH0AS`)v&a4S&DhHa*O3yeA{6YfZ0tTrN=!oMTn!k+U$ax59cy0M*)gI>l5N z<VS#HCaRcJ==vkv(fPI7RQ2vZ9W1DUgWN@qX);q2ppWI_7q2h;9<+y}t-D?>eXu8g zaM<q#p%2lpDuupw&Pf&ZG8Y9Ntyrl#goM<isXJZFQn2LrOUV!K4VhRkCbbJ7GJ8X$ zo7?J$4UM=R8Npb=XoK7d8_M(Tr;5iF(j;RwK+!B{0|d9Tf2e?qE<gGa$*91V<lSlL zs`PPx&SrMrmb2;o%9>eAdWPo7vu_m0)Kq57(N;(7=|X(|R<!15#m=+#RK<$t?+4}f zZojtZ1HEp0n2*_4`=Kxcgud(#6wc?H*5oqmoX;3R4%5eWl0lUyzZZ&q4dMYkM8C*G z6zBSZYs<=eE<^1K_8;6YVq>s>#0ps~mn$fjgH)n^ahDS2EB1wGTrK_#yi+>goFOcB zvs^}a8YKZSX2MZ=<+lIyow@DiLkWFwO+gbne&J3F!61CrXzXR=aUrC~EaU67x1-vx zWdHIknb{@(%5NXS0Z!UyX%t8;;hZ82in$}*!&)MlKf0^eG&a<4t?QmUy{7m-*dZ_y z1#iia)O$m?i5|u7Dl?D@n3;m{!<@m!kI%uPs!+dVY!OsIjVA^(MAE?nwl3RRfWF5b zbYmRW%hM5uv4Fd(wx@s5^W@0N^{v~W=eWB(oYptmCf{5R;*bRL*Y&CwXLZN9UE9r@ z+k2kVI43%qUU%=oMQc<lGrjnA2AhzZ^>y$m`Oy0f{8puBp-GigDUNpV^ZaaCJXlmN z$EXdnji#kN;&}ca2mHf!cNczv<ahD6ZvIl}$7u%Ng|pZ-5gKFU;&Y{8?W4OdtGFCf zApOshe_?D5-gYo26j>n#j2jzNpCy}wds4yy1MJjeLUcrNT6YMG`R_WReOF`q+abPT z+bouQpR2t47Wi{|Z3S{3*H5DB{69u>aT>d)QC9<~^b<5q9l;}(;LQ`A7z8aMg$V)4 zYItx3VCE$;+?z2tOVA4(3MJcrLd<F@0PZ&~`D&D8bcP|;>qOhWk7Lxx)_WOx8Nn}A z&yVaKwVauo`&lEEFETXk^tQq!)Yw!U8Lk>QmBtcxnwV6V?bpq(Yfb!V-yRtJaNsAM z%(%XM$N3>sFc+@1P2Fg?QmVdE_DtF^T^54+D6*eia<nvA%yF=i+-HOAne;LzfjUnt z^XfjcZTiu;e@f#!pa>fklCKkCF)F&CSd0(eV0%!T`Q|X|v-IGEZ^%SHcp1E%p2!?q zvXz}Rd8lf+wk<!Erdj6WdC$xd298WIzy0?sGkg?$4O{CrNx3%ROqkI;?J?UvE)&{i zUUHODJvD=dS4fieaQq-MqH0xox!wFs-z#VNTU5;XVQ;5ZoF`kZOUa!J=*jo8f$jb8 zH8#eH&=>c3-rxppV<(FL#UlGl_Z3YQwGkeZ9xNr>D!uP`;ZOVus?}}1cRctS_58d5 zxqkZ-a#03JY*Fhydjzn5O#qd%{W*}o^jRd+>shGW{)~<l5S!Gj^f@kx-_25B#JBOp zEd>P=;azGp7%NrZbIROPh3TE;yNa~=YUv{zAveeBrT-6cZ~fKu`^OKX*mO4|MWtJE z0@5NPF><Jg#7L=;6Ob-J0R;h(5{c0{K)M8^HW|4gEwCvuV9fjV{+|1X?|tq+;ByW? z`3oGk>$;xLM_%j3-{RJt7HvFxR$t1g-yCRkE^all&9h_R<@wx3a$Pq=g`?;;*CmS? z$T<IXVp*Rgs5cOu&rf=O%&ijqqW<mflZb6YZe0-R&~>|uIpP+LNi%}s`P35^Ez!+Z zhF|4A*9T8_py#^J;mv)vh}UF|;3}Bh`$|s>g%~}<VJa%M3<G3ABR~yZ!g$f05B6x7 zo5}gNdJ2h2Y4|O*o5q1zssezblYH(;br1r#b2ZV8(|)e1jjv)#1_h~u$gd)A=;Aw+ zuIU~w0l8h$1#aQ4KeLt|uniqvV!npt#sE?6CfrL=`>R`xbj=ThKF&oR$vs6ZG3AGY zxq+=a#+T?qNi3rnByIv6g;O7ekEoyUoEX>;(CSs?@mjeP+8qN+9=O`H0u;||9X>ub zuc>vmo1eFP@$}8j%tr;^F&so1ErN1d1F1?~C;Z7eOB>f`)cq_WM4KNJ=1BnIroMN1 z5+e#jz36pOKtAquGJ8iwcaW-jj+zZA@D_gB|HO7gF+L^Q#i5x0Bl?`}*D{wTyJMKP ztg#aw)^5#oPt~uU$Iw8-;IRsM=Pdz~fTAJfS|k||uf`sXQJW2DE;{+Ny#ntmpB|jD zAtP$rqbPvx%J5Rt-+{V8p#$fqZ}f5IGs-?mNj9HEBJapCt38J#lZtdnE-N(F2}Ej= zqeU!R@^Fd6`;A=JZGx2L@UafMmcm1ROssB4_Is9YLY71bt1{G()<(OlW(yhDQ;3@~ zuuUT%fHDp5NYWwm0o_OBq2EjFnfm5jnQX-U#*|=bvcxhd?4B7%Z^8BOG?TZ&XQmL& z<g};LC$q~J$c!@w*Q*c3)41KOaymwXliQ3$*b66)Ki{$ZM<wWhiB{M73ZP)72%ITP zZg8WqvGx8_RI@{pA9elBb<>q6qfx35Uwcqrig{m1L@UlN{07X<Q|(bZ%y>SbioD7s z{+^&rU(DnnM}leF6*NdCmC__{jIr15O<=extgtDK<AuS_H0$_jmz<Wf_5sL2#k>EI z*(mt7bUZWp2?l|)U9j$1HK{vuYqL;U4}ZVF&|!JTu?tM&S|$L&lms}tW*Hdg!on%v zW>SmFT~nS*mdM9vN%kx8uKq%PQosF=N~j4~C!s#TUU{+cb|sMe|BY=uaG5uZB^cjs z3KU^YFF_Z^n<h~*Z`qITf)qop6n(YXI<^h(m>K28{N<FKiT>N77v|D@4RHq`zm5m> z^1?2N{ZyDPcL#ekp7Gw8H~o0?adCuD%QDFZ#17tk*G##}095hCEy)q{+gC{vKsZn~ zVfV|lluHV2=aZIztOXa!MbJMgexxnnWl2OZ9++O(LNCuhvR@ht8@MI0Tg0s17r?2} z%C?%YI&o2QFdtyH1T{ncQ9bR2HWG>kO;@8U?*a^O1&m85Ry?%j$Vl#k3frdQhNdzp zynMT@uWjNr3WC6OJPy!pl@-Y1Nh!KvE2sbcDi=~^s*{Usp4Ml(qq}<Cl>YtlzU}vC z`@eQ68%Egw`wSi+VnUpcQV3^29k9oF+Y<9zubp<^>gxaT%e$s2Oj5!Os_JHCmWN?O zprZXfSME4iC{v}q6i)_REq)}=e^mEE)5vtdmX=sV;hMlTpI_Jm6O<e&cbda46Y6yc z90^iLvOJBQ?V{~9(S-Hj>pmx!yu=zq=-AdASyA9sx}X7DRgxOSlNnSq#<#Zh0QVsM zP5I!`U2vuauqJ+!rkQsD*bEkvaD2E)=fUZ_l6Szr`jLl`km=u&3iAfL{yWx^o<*Dn zpOS^7f6(6<WBV4SM?ge}1zqkTef$)D>pgbGWKFTv8FIF$${36kj>hMe^^WeCQ1^ty zepuxZ7BH;?;ucv3z;hX*f1ZQ29Pg97&EHy2N=k1`?<;JHnT)~UxuWr>GQVL)sF(Xk zDS)5LPZHH^`zk}}*3SkF-4~l(4Oe^VIE<U88|I`xH8h)~4>Y+@SsWKMct=+kvY)bI zUT&MK>R%jn?>3fq$~iPK?>W`003_DcMebhG4M)rFyYjmUT_{GSg)@9p1<L?dy;G2o zRaI=a5T0W<9~k32%p)h8FFri@dvpb0J7p2TiClS(AbT~SBni@bgt%mX6U6<Q0GqYC zEb}{#_7bm(dWFJ132aC)Y(RT;eF4p><TJD*?G^>pkvgzrIeWP>Tl&Tbvmk9<6D#rU zS|Xkzy+aXfC%OOy5G%VTl>uspu%!7zF8EV346*xM+y#e)zwOPJM-h<m0bA-i?nlCA z4ITNCZ^ibN6g-C~9_fYz_y88Is=&XG2u<a<c4OFR-p!Lek*Lr#5mg0gt_wAYE{DKO z#b2jka@$tvbBi_SznI3>Uu#AZ<WDTy60ZqH2S<q{5A`p*N4BOt_MMq&fW*5(g$Rh4 z2tjzy{D7o$*-o=+WLxask>J^ml`hlkH%C0CZ0Ut$2%#)4;*wk7RrBUHG>aj7&%l*s zu^gv?YrDfpD9P?=KnYoy(4YD#R;@i;_1c=wthK-pSruZY3)dnt^dtB_NOywzi(R4I zQdT27kEn)UzFLh~(7f=EDzK!62<m6Jw2TG!#rx+u_SS#T`s>clY1Jg9T~X6RZWRVg zhGw#DAR5>@G6#D=j6fr%;o5vZ^8=nsDLX>%uJTt!lF&COlgsq710{g~6H}%F?m@yG z@f)vEzN?br4+zAJy-ks+56+QAGOzOLccwZXC*m~4VQsrHO_@b-Edk0h+Qn5M2XPp< znP_Xs@B^U=fO@#cWCP!guKo^PFF#7vQ-t`Rzu=NU#~X(T=I|~E0h6+{v<jI*-~Qb3 z>Z#YtTOY{aGur3e2eyB^_`<}0pn~!601(SPj1v0j*%IfJOG>o2gdtWJ7^!+y$bgOc zlg1$B$|#W8ZU)qvZxH4wuZ}?^9$<rGb13UAxQZnS>$FTM>`6pmBnX1f`q|=741wr# z=rv6q(sVy}XH)i)Bx*8DQmPF8<L6vd#!!m9l5q%2f$c7tkKor0Wt*4GPv@J(|2@k6 zZE_RA4>me5x}&mY@GSVbni*?7=qdCzk@_2gKIaI`Wl}K*0Pz#2kD*3RIpR?Z`!YtH z%8s~;U*OcMo_mdWt<So}!+3E;XRQj?qq<)1=o!>wfAY?9g?PW}VOp#|&7zZ~iyhDX zzoNI=<GBW@iAWF{?8*?U+Mi^z&Ae>t<sfnk{Xpv$ZgBfEU?k}^BC7+rB31f;Bplm7 z79<w*E-4XX^FEW@Hr@<njH=`?=V~MQ!gt!H!(@xL+76Ez-Q1cjIv%}UP_O>I^Kq9a zfy$+(-xE^+lrVb3h|D|sNtUSg=4p@D<2$fh`azz#Dgw!Lr7aVr7minfS=Ol^_@4#d zCZ6hLoOf@9V_ckdv`JfQOI=5niutZ|r>>ySOCNF6=az8!N9aRvqV4Ycna6w#2C+ZG z-`p!H&9HbO()#N{<Ts?k^j??~(P=<asD*HxB&Du_%M)6evr{Y%?VJ|aerT{t)(rt7 z0quZV4WX3k2JZ@+g#~K|L(ZOI5xEBEIE)vp3aQpHO|~o{Kb$$N;xVk9@gLJ0!OoHA z_v=xfOm8-Lc)&a2leaSlG6p7x3MV5k8w?3$+?wJ<-+d=^>w={o6?IKHz_=#41tC@# zm~FN`<?f`Y;%{9%l$xxeicrK)1E}IW$+1UfQ&}}I=cuhC`7IU|@u21s;$s(I>w1&A z-D(GDfTBjwk3$IuwiTmK8$$9He)#d4-7ix=+e5zm+=`6Pzsb)+_}-Ri({a9P$k$Qw zIecp)5E~C>fm(YYT>0*we{s*}m;xlk*&2nlq!VwzKLr5}M1Q_mZl5wgP-s#*Z@ZIj z$5Rnnq4!<+QS6Pr5JqcA>EwUOd)7a~#8(j);MsjFoak}8p;y+)uPb_^7D9L<0vN~& zh~Bi*>x;m(%UXbQ0QXAsx<;tAW2DJy{7+&HK8MC87mWnEya`u@1nI(o<=dIql@jLk z)s>$fEl4;@FAnxy+~!dpRTxh^V+_1t?NVkt2n+z8MDyOAqeTY11-5?%p**K}D|a;e z{9}EmIGRj@1V%wK9G|p}3{SAs=S2~*%9j@{F@z_&UjOS{dR9wB697oKhR2OLHU>ix znaeMH+y7SlAB6!_18*AD=8_y1Ub&Mm){e>=a7p@o#5h(<|I^I4xl?Nknu1HazRAzt z^haHzc<!elNH$i6tFvl`0yKS8(-;%4_U3Vz#+jr6eWcetI-xhant`k5;zpGnV3wZ7 z?Vr<jvH}CZ8G>@BPTdl}9M^11*9V%nrQ3S@te72wUUzxcdqE~-;}laosmo@yN5P^) z?@EbSWc@L}bOW(g^g8$&h`{-i!sed1p&o!Umgd@YGHq{ZZG^8G=fc_zm5jaboX;_y zCSz0x8#sr8=)=+7m-~<z#j%&W>P;P;9xbL?CpTJg=S-EFBHJ9;(pIIiuZwQmwc4KO zTf4hxX!NCDS>Tc&3o~5-fvHJ*x(%{W0pnqn@%>qKb!@@W{ZcNe>MH$r8BdrK0Cnhl zf28m<*%+8~dMUR$-*y96Zgr!YiO}O_+m4S{o?d{K1i6&WK&H4I4x1`UvCBV)>aY&? z-}VY@4t--p2wRnB42YzpckWySO2IA^lC7h0FEZV5()^okB`EAO8oSVWSL*HnW}npJ zn%}oi%lb$ZN!tP%xUlZ5XzY=})UjD>yol0|{mT=yFX88~<;}0Q;~!iqt#c*yM04hf zQ+0U!MR`>>h-MEceN$bVTuy*s4X`J111<~`BQ!;v241}z9ses;ruYh{S7y1ck0a|r zM~Le|N@&lcZokUSdQ`caY|ld9R-HljZ{Or_@o3;%zlv}07BYPuA;JMaOIl|-IZ?!t zrE7_zd*u~y<baj08|F0m(Y&48<~$Iz>iqMH#?OY=1tlS(tY((K_dWLk&gw<x^FN}l z&j$%D+jshbuN|A?<Ak#5y~4EpVHSbYH@fiSNI*6?L9-QzZsr#?Y#cLt_6R8IdDC#q zchVy8biE_aw6<ZoiWy_t7=^~l#w1?r5jv;BS6b;OJ(=25pm~Scd)hSBZ77!I#;)+F zx>8x*=gPfGQ<8}$kmdAa6lY3iXa<bpU;ckz$*=RI=<c?%WdFMj0D00i^Uj|0A60$z zv$vxT1xkcsOt3DirK@yRwX{@~U?vnl@BK0Qs}~p7X=1&BHSP05q&g{@&;w$3k29~q z9C}`%SZj{@Nfk&<`f?oG2UVHUlK4T_NP@uiZj7mUK1$OnZ1b@dEYGIS@;FRt+EXFz zny!;`s0Jx^Z}(<f3ulH~%=aiOFhOP(ZKf+I@OaXqvBPLtZxVT^wk{5Hrd}|*H+(J8 zni7So?^ku{4L9%MfT|EpW7w~0Utg@QBIhR5rxeGiXNd$HRu)84ln9GWMb1y3uFx!B z*Q)e&4mtWq)!r`Pb>sP<z5g#vyP3UXe;(MPoiN+66zL(YsB!0r&WK0b_bBal-6PQB z>qxLS)}@ENq;S^1i}B~ufUhX3sl3(n{Masn3gb-?g5&4=X^I@SBKW2~T$<`b`{yKQ z-l{vlXV|;INHz%>W6MQ+-a1V!aSILgWa~qx5A#Bw#opj8^kO*oW8MF4B2J0S0+Z+q zaC*5#Zl}(RYyB~mR(~Ac$p^c$%9_3M(WuZ)B<^!S;qBk}Wo7|uH$2dkdDFI6U!%XO zg2~rgPOmnL>WV}qV_@Z%2x-zX6#R^^-^&L@6UUbuwnbNCS+?hr5vqsYRGV^u+4L0p z)(?!8^2DE$0g<YWIP>^&l5BO<|9EE;AMJ9b2{$+U;ZG<0pfi79*#hlZDgC1PZb0mV z=(It$3BYdzm+maV%O9dlDasCFfQq<Hzjv7py5O39EHAqD-cYdpqx!43aonrByU;w{ z;JCgnk|9b5KL+lBa-h3vKEsq|q@{}-rhYTjnyK(TbX&fBu&ATmNsLV>-^o5*wRUF$ z;<<(##?M@fg)<Ocwm>9r<7l3p1u?T^p)_DRpj@)hZ|;V$2XL2U=mySMifb56{W&@v zzizqb;oy{~R`?tO%BiVnFoW8ahS3o2SobM<-oT!c*GgO5M6c+HiJWgcV|qZZk6s1` z+1|{)RIr#uoT2FM2s@HI38lRcGPZl@?hNdS=_TUTN;A`Ylb;6th0X!_5FE(8hOXF7 zf%ckKrRLin+6(lx&toJ>7fs+@NtzdcRJz>WDy5<-dxYz@@7%(K<ka)HRPAdgYAv8V z*j5)US(Y$?UygE_S~`Wy*zR58kiV{UH%>5)x=DZ4@gCr-YA{eY#*OLgwP(40>WC=} zifL+#QiEKtB8yB1NXJq533d+lo#|zZ*Gq%mT+h=U{;_&CMZYKxm~vvD5EzaR3&=Md zDMHN=++>9x0KbAKz$0KO%^^N=y1q)smkcqV@Eul(mC{uvCv_Z5Jd>R7yIZ{HK6=e# zxK<U$+`9uD_|Hs(onyRKGN>i==_B7&uW1&k0Qm;&gr>Ze{cFa>ZrrH0N|~kab;bhS zsg`O`^}ud(AS(n%5p4xn<LEt<c_}cWAuF^h7l(tL%eC%;T!JmGFbjfu^z@Au2v#Y; z`tsTeEnecVol`xS<tkx5Cik$np!d^6V?Y<Je|sJe4inojPx>Ad*cK*h6!*17E1d)s z;F&yQWqwG7qyzDJHD<MFa*#ri@MvRw*`y(hlb1}pH8aWxE_JJ>BxbT4#@|1f8Qf%F z5&Y=N6J@3~NC!loDBQ=P$w6>FLOx|fVPq7Hl6=;jMn@8|gg^1rlgz_(@HAa?aFHGE zkL;KrU(PJ+UHeK8sP2Pufsb@2>ure>owJ`BW)Bus?+t_k{T3sGTD3vE=$QZJ6-YeU zh>$Ya$B?Yl37TzGJ2R!9cU|_j_7t64AKma!AzvfM0P6tl@Cx$u8XN$?sDafx1@kFP zf{=-f3eyPqymegQ-k5p>Ny)jl7g-aiLKW6a2G}AL4Rn(Hbd^NbuP#gW_NU`8&EH!Z z={3D<tL61QrufO~z8t?w^`BKUR5R%cwpclhy$}>jnaRGt_WJX@k4OGVbr-PDxG(Wc z1>ELvTC&yk8QpZCb~>!OlZv;9;>a>@WHOdLVq?z>^)7ciI&OMgiEd`9tTpK1G8j^P zk=REpjpRsFR}3z)Z<5?QlE~lWvx&oBU>gF4%H;pr*t8pw=M(_8Nvd2YnGs?h@)%Bb z^EXcbO0PSP3?%t)n*7A^gaDk#^seHS)PO&`8**IcF5tcp$X9^TB_gzer*E(y%1&t9 zD+_vB?9dw=po$%>-Q$)Pxf2eCn*>unoPps|tApHoNs8z?=5g%QI>SLR?fraLr(+GL z>eUs^xDt}76|pPUzfiuZ0KuX@)rsE{(RvepZwP4*P>}f-YKZyexU>14(fMEn0M6`@ zTy_l{$w%y`PcOB0@sinpkb_rw@?d>07c-TJS{Ln1YN{9K6NWS!<A4vWdj+(=117O{ zk#&OrF>HgKBRz?IS-&QCys-||5vx4@a56~g!Z9EC#_!Fq=%6OdXD2sbT0EESby_c; z=SjV{2le>+eY?2TMV(fqFD}}+V=LP%Q`%{UtIc#STX&2391MbE0&?hz1G)M0+`N57 zXOxa6``!-C=U7@&$!ZJ(9rRt+ol2AQeNcMzf$J}(j`Mfuk&VyU+854Yy(nYnRUlif zs*q&rNGRG2(XHxxxgFFQGW7QKF26?bAySX@3X@F{AXF!mZZ=QZ&AT@p*DuA_dSCK& zu5HJBLh62QEr{=wohDz$!BV^}4FOu&dg@jzRNpI69N67)e(?P83}p8{i{XIT9I#;~ zW3&jzc(HhO%hmXUF{d8Y?AR*3Jl~g>H$BF8B<?7!al8@%=Y=%-Qe=tj6{V!IUR9-Z z{=7Vk1%<k$_FI<mg4oEA+T~NL(h6h}1KXym^xSBknG~mS7r*1XuZwCM0bW+&SrwPp ztIFMoSN>M2cPZo-sP1u+#kK#(58{7*)KpSo(N2WG4^RJn`fZG@#`os*6HHU_exd+p zvv%<jQn8C9i!T>WRRhk$>8P+#Wt6Kmh4^r7;KfeAH88QtuX>+KL<j-)I#b|)RCwdE zqXQ5$@SR7Ld15l<X6C^!$Ah9K>kFCjJ=snTtH`R5egK6uB0Ma_tNd2<rrmk$nlC)v zE24ZMs5rgZ`j?~8UzjO1*(c3xX3dn96f%2wo7uSH{acBCC+lvrU&KFO4v-ckOPn}B z9)@^IVNV)qreFTu=6DzpEX8}}8RDXN15k2q1(eTrc=xFe)Qir3SDhZoMOJ!YukT*$ z<$gU<pi38fbsv(uv&{LNKwrf6TJvTNvCmUL$1B|fl?*zCamuQYFCZ-lU41Da`<BMK z_U0LX4XZUB9j6LA#fFT3RIT|Sg5tcnqZ<8kN2>T*CdmQk;JA{voU(7SUWC8y;b_*@ z3d=x*UD>*Fb=8)lNpd2rcIR_XlOaWO!4-77m9^!a>F9N(Of8zf{J>cW7uL0$^*?if zn6yqGax&w`*Od}oKR#DYkD~KC9efoAE+^eFz0pw^r!U}<Dkk_@u=$F%UliTT&TAy` zB7mX#u~YBfHc<P;E~;tliz!O`TK6E^_B%*+#1Hn<(xOkB+<G6vHBy?&E9b4DV_rTx zv>&d5QpNLuxAi%}G2FP%Wd~kB_G&YYU8eC*i|f48(K0E$_riEoCPOFaZtw+$yk06_ zY=>&jN}Y^OLwffCvf$8@dX*N$^rC$#!1Kno-Zbi6NB&G-te{jNBQ@0tIMX#e8aTw~ zm%{`ByPooYD9$lXIVM2*2I&Q!F5(CXr8+wD)ZTW@zP@hsGLT}4orLmL!l&^-9)TNj z%aOr<OjKc)8&PNC`$hS5*mqoo@-CMGModUwk9g6ckDGSr>IE*crebI1u~IvpXsMtN z>LrWq8h>*(-Kq;`V!0m6=!Rhke^(2l$ZR+}1bwbUpmR+Q{_d~T*=w%f$44UmQ5D@- z=sYh96D$8F;i1rB1*^z5a7sOzRL`(^bpn(#Pjzg6>Z)&=ktl2Ej8fTk(c!H%XoWnM z(PG0zNS)_~N%{dLG;!laZg8K;ds6lEew*L^QK<qt1lrM+uG8!AwEy=#M0Z6|u5a;Q zBbF9ayK>~b{(QGI(ZA!PVXrigPf<t6BHJKowU2usx02*%NFcMzLEY<(DvxuI^m*Mn z(nkDpeo^kg=ljx0g9ZfCS5`k@&FMV3NxA8*l6XEMiGQ%sldOP7ncS?ZAO#JAp5|KC zB=Wqk{vFA*pe5)-&!A2F9P$bC9(c%I64h<+c7C5pUFHOI?&VUhD!Kdh9DCGA_g{7^ zU5U?Uiqbo!cTB=rJs3|+*6+yvqpDui*q$KYF5p2-IuSX}PZ1Oihpz5j{vB<?*ly-t zwPHEuaf>7ZCI2Ak$^I`~<RwN^cff7VPR#C2<L>^l!vUgKH}Q0Ku0UlhxixRKNy};d zZR1NxSvK0JqOgY<pbtV#SO%fuHE}&n>BWz2w?-305@o+huBDlVoYI)u`PVerF-FbY z|I7y{S2XQ`u&igFy6$HU;8l2q)IBPfUZpm!)d4X@z;o-b1`IC@@UN>qNxX(_TT<N( zErJne{kLT^LWqfLC|TmR8%j^XP(p-g1Z=;8bQh-p8R54=--020M|Q8K_$2CKMpGJG zG~*(BXplMY50<&rCtL_7yT<OYmoK~M0$7z_+GzPIR#o+XccEit1`2pyBfeQ<K9F)( z(s~zppoDjNQvuV5Jmr!u8OE5Ci8uS4<Dqp&Ro)CF=^jUViXtguv=?pXGIMZNB3KR8 ze^rWJj0%w%B8x9<R(c|Oxs~IK>#}WYQn!tj<?Py-X+1*TXt8|{GaxyZkk<c<pTc(a zjc0b>^kwISb=tij9@eo1(P@I*zzhfNNhY`VyhPiw$6H%l!~YmjN&y3K56XEZj+9PJ zGM`r0`s!|V%AZ$ew*Vv{8rK*+m*7g(+UqI-Q@GxCJ036+IVe}efD;P5tB$yzVPY#g z;q+5mUc0~dys}huywq&*dN&5oM%&$vue6Pf68W0SgNi2TBLQ*kwn)S_-dcUl@oR=W zlmVB=uo@nTHaF=c{4%^*qCTbA=b=8w`Kv8re~-JX0uEcv?<lq3vdwSAxq5gD!^K?F zn?0UJr!8WdH*Mil4H{|>ZD^yWmehQ9XPa)>7mOgSAV~o+gyWb)&ld(c7B!7ozXm$2 zg|Y^>pwh)KV9L=go!`cK72raR#T#rsB|e+)kr|p8gH)D~`Z@)FAaJ)GXkEt;j4i6Z znlCi|QOzN}KcnW4B3q_^Q}~sN%1=rpq^rC>Gts^k8j%5-43`Ph`PTuAn*kszR=5$w zk$DoJl(-L=zlx_1)OcFPI&(Gp-a_vQ`=0%@xU-T^|GVH55>g4`B$?_F^OLbI@g7s# zGc`VPI>I3p^jb*Xj`I&F1?)inQ4n_ICxiU1V0AWp_1Dk9kXb+@^TH8`llWoWhahnR zcW=9C41#{Qli#pveyf>-W$U=EU&7J#ZCIlA(?|jO!(}u3*k~k-yE!#X_lZDln)Z}v z>QCcr`B8E0jDn+k{7=}{m7ub~2Tlz|?{)Hz70r=Cjay*WwnuUUL=5uoN`&Q3CpD&^ zkHR>080<+I)A;T(9<B1{*JA)RbyoZVO#A=S9{}6>LIGw7ch@>n$h>yfbm6Q(&K#Gh zVbS|5X6t-sMtp-M5DJzAh+ee^UxW8o5yaC4l5-&(Z_4A&e~T1({=r-Rr&NJA?AgnU z3CepKp@89_F}SOrkD;F;fbkDCy-tetW|-Ia^p))IxzB5G_W2qx3G@G-PrZ_I3y{=8 zT7VltmZE^@sV5Zyz9%T~eo+mQFi#1g+UPK_3tr8XX<PcMV`s&BF500pB-hS|UZX}I z2aN_iPf40gj_~EdoWu1hq~jdiJ@~0}O=B2MRE<!UMr}7AgV8>jjj++vNt4XLuz5sy zaD}dy?yvIfgrXyUJQp0_3EEcTe)ztvaj}QBX<kks_7VM@j_lyjH((7ayKnsEz(GUt zCPP>gF<~BkugI7D7Xs@(G))52sSB68he)M=>KM)>SNtvc*(cz1Y~YukzuIBjN)iWt zBX>+wM-Uw`N^QvMu1G-`)38WlywPguI^WLxm#?QWyG?mc8f)i$R_Hf^!OodcUvF(2 zDt@Hg{sCO!NZ{kZDkUe{FNs7J4fxK4q8XwhZjtl{IWp!*-j*E7>D7N})72kX1o6BY z3q0&2+f5&unD)xdZ*ebRubw{E7%$<?)ttCk!SO6enokXrWfLX=6pT@q#0|`!+j2Va zz1H8oz{@xEPz>MLg?m7nrzC;myY{C6CExZYg&TggkDrz3ytdbh&s}EL(s&ai);{F= z-Z1YIhnMU)Z01%qb>A`N=2V!=%_1Nl)IEaF_?p%B(#><i+wTB@o6q%X0Fs;xB=dHq zoLV4UrcpGWVhJeSz}DEQ#fLvT)-)=LNot_@BEl?=m~jdHYvyLglP<rHO!em<pS8D% zcYCXwu1Zo5F3AATi`qAnimks(WgmQ`0<U~{dT;Q=0tgGK)099=-ti{Wv27z5q`d;9 zso?IE^Y7U~w$2TIRkp_`#bwFE0O*A*owM6&3-8EGHm0jW!C1|Zx{qWo-z;?Y{4zHT z3uPYjzNswie^;eK0dkwDV>6>*dKtQ~872R9R75E--(`_`?9Tn-vx_HW@$b1ue)Y2q z*f8@|5VN~&?#t=Qks<;u=mZ!t{58CBgDD5g48zrnI}yBSq4#z)(`|N!pB*;xw;|wo z<kSBw6<F4sp~+lh%<2!aq36qqQhT|I{b#QYx%AGymHHi2B4a`HiqiC?XiK7U;$bEl zW%xzl_4nG}21THrA_6GW6)t8v0~zcTn+e!81~j%yG{yl9b@Z2ug~yzSy-G$|NRaRc zZ+*2HU;SK3PtQ3ygMc|JDK|&`%C?}KT_{f(?fP3;cOM8n_KnTn|3$GZJ8vYOQDO?N zA(jC*$Lirim;hm~5w}mf$iQmiEmix)apKDY4WcFO_OKZx6ypaKFDJ?4A9hr4AEWs- zTPHoZk8~UB&u)3vQg@HLGXNn;tccBu1;h#fEpwND4U;A1W1W8@5-=Qho<4c1)U|VW z3*AxCYlhO~nfjb*G?bMtPCdi;ihJrS_M@j}ZV;=J6rnA0&jJ$z*EtGnYHOO_qX@a5 z#<m8r-l}-<S0<L~>cUkOAn4D1(m!0dHz&k)i(M%vpmgPuk6vy0GavcX;<u+5QM?9= zMLVe;7j9=VeMu?McY=>nv>_nZH<_2tI=+7KUKzIIN*zGQ#t;tANSTt3`UXi3G$nNW z-NOrXaCGjfcU%FB?L2NRHZr2k<eMLLRh!+nSQ$szmGjV`>a=e_<t__he;|<P7PV*c z@)Ye7W!xIpBdi_SvqBqAgd%mFcc6lk2ZoYPXhk(Oj&^UU3%)X@vK?1K(2&$H1g?u( z>r&^<8LR1uiFZ*->C1dRU$0kCn2CC6_+36lFoUD$S}t?@45MY-BdzW$O%($X;+wWj zCHTKDBZNm+s&3ipvQpV!vilHZ@cgcvm|!4U1KEvaS>_B7cTBeJAN;`nbMJFPuD{D< z-@>{3^8a^&gr*ScwYvzIsH%o4+qLTbr>*TSt%we#vk&$v|3~PIo`gPi#yhz5WVb~U zODY)XC%)M8m>6<4&pFBSCHXKc>ZCUgHdnpOmnI=ANFDnJpw}UO?jGrNi|+e>x~~b7 zu5Tm8#j)xNsrkH98Bgw4xH0-HYW<YYnW{A9F}cJ~i&<-LwyS{umg2U){w?#qhY`!( zT_gu#BZYE%i~GulGF`%e@$34=#04YFQ{$L>@<1X^S|3AvbEohRk3-}o&FC_FM}1xl z!j+k>j0EOBI=$1lo7woMr`b%Rg0)=Eh2%hQLAg>n>r&tR_HpbX-aP2iV;$bSS>7U< zQx<N-GJrt+^-kQdM>pnO?a}0&1sQl6inVogCY?X`(XC-K4V1e;f(UfgL*vtqUK33d z`i~tO!VBdA@d3hiH-dSh+QtOXN%XbF9hIO{6troMID<cBD&PD^brgF|anm3220qcP zN~yqmhIn5fjnj!Drxa!@v4Vn-KeLwIAUWA&hARI~4ua=KBw)nc<Y&wo-p5@|>HpI- z7^vbR2*`I20mWU6lC0Y@gMu1d@mizkANAf~j>QijvtEE6548Q4V)Z}#5f|@=aF-xs z4{wvfo_tGHytL>a20qoK6>eN(0TYQbj{^)edy)zc3h)8Srrnscil$Lmor(&>`Om?K z!!d*x8Sx+W-2*;8>^c!@qHr&h{`?)pMB~{DN`D%(JyF_v(pSWwobeKH&h)=@WO3}@ z!fj5x60Q%on=t9wOzCt~tIe06s)-O<2-AIQHRXZ2hP9CJ<cG~kKYD*0_3856W5w_1 zxvLxGe^hW&3JHvJ2<mP@>9aK_UQJ$FGI8BL$*k&{WjZqUY!9zZLwC@lk_G}ntc?iH z?WC0n7VFJZjhX~z@d}HVzaPmnKJW<183CRk$ZGRBt0V(3lL!MBB`cywoH$QOWCw<r zS4_Z*nRwtG!`_Sr7H62J{o614JQBZ>osXMfm8AwHtIk%~K1PO;unw_QvSMKv+l)Fx zxr;tgF|%v#MFX5Scv_rxh*w&T`0)&*OVq&!#;l&p&38v!ZhdPxs|aiNcXNuFm7H{j zNEzSSYU+&o3`|N%*nsgW0;Z4MN@;x?xBI7tzHV1Ak>SfFK+Zr>BIace0G(!?*9m!5 zr0FrNz5BWWt@br@5<?kcs(pfa7*~Nv0HP`VFHPey68j>OY+nUnp=L0tUr$u2(-RLz zaFn}1nynzw`#idYV(FrdA+waY{jl3QorsfsBvfuKRd~-wBgGZb<A(D-<?;tOM*x0K z{Gx#5*vjcjT$?<os8E|t9db}Vny!pA3@>~*O~RM})Mwuq!vORqDOMqkZb#1bl(+5q zRkK#JzkU+mBoMny1rKLK4M`@jl^s{F2)+fSf{LD8QP_Z7e}wAp$H1fK-E3&mRlAwS zUAd!h7gO$l1&)k)9$$gCuJ#DV9dw&JP>Zb-P892>h@vIP7Z9bcs#4iLo+7BWWJAfm zZPv~UdQ`NljRBoB=te&Mm8IM&dwcQidN+`pTizAgd}t7(#*W{&oM9qI)Pcs+BBsW} zkLGpsi8fjS5h_*KKNGQzj2>&iw)<ff%;`E>nJpBmk}s}b?<~SOk~M*c>3>^hX`plJ z$%!beB1PY;@5-YwzB=!8?=`Oz?OX+RzpsGS+U@0n^-h~o;maEmRzDp3CWPfLQ&BA) zV$H1i)d<_9ik@ujy%w0wiyMRmfs?{aUe&v&a?wx|v3QE=7Q>M~AuFLW=B(M*i1F?* zzbnOZ3QnU%tS-mLqfChG#^N>}IC!PPsMKR2(y}n`$BZkg|1~#?5>0hTZ>5v{#rNsm zL!8GdgX$D>Mm=k=@>&9#PPBVK#6-34qw_dm-u}Pwq9PpRHOjnXr)@tz%&**LaT}YX zb1ikum)DT<?jSX~L#kyt!L}gjVBSO##Z)}+9>nZ$sm*ZN)u0w=GvA@XE5}C&&BM$6 zC*s<aQod;My$e!ih_GgJ31+1V>jV86Z|&M$1~8g~J0yJyrTHI~2*jK4a>Krza8x3l zh)<+*IeQq8f6Gp`kn<bVl=HayPs`l=0D@32VBk~(oJZ;3eM5uiL3z>VzV=du(!kdp zGW&wCI}!I}iunlc$xP%la5B6R72)VUftH}C^W7xaFO#f$e{~XXH2smCzYU$lnWfRX zQo5X8BUYmtTqFeElr7!xh0+vng83RHrN)mbEFD7gyG$YjT>hlq!SuYcV>WLJlVj@g z!J`H+nF{#ZlPzHrbYXT;8;03^6v?SW2W}0k{%T3j-;;dr9Paz2Gj3s!?#FH7v7~8d zVE^r{()IlPkE%g)LK1LW>QJE15}&89k}XYw(dERnZ?<WPC^iJFQnI7!b+(>=23A+* zO5~f17f(-LG$?>Mv0=uf=|X#w!_5L+!fw^Py(8yH(XiatOI-h`f)saWAX#BHXi3!V zRR$V(nN4GUIP*Bos7+}sNCrE6`*rba#JrsN8`8@sqz^<LYf^N%O(tPIkE&rR1y6My z6!L&y1F`@0cPI0b8+TeVDmWMy8+j1d+GHl$sa}4QDT0^{vP3>YN|Qb+L=vTOe@T&* zR{bnyV!I`mg8vi^1Q8wlp)!PzvJ$?eByEG4CwG?b1De9Ya$ro)f!k4H9RO;I8V~3a z%9m&{&xlHK=jC3E+Q$%?fuZ?K^zC2qcfq@tt`e)T;@?(D;ds+{egU)-(W}w-YLw@p z9kOog2OrY^((duZ@rA2wvx{(q1<B7TC}4#rpl#BU-_76fIS}sfbK-;7M%lwhn8HoS zV@KDV@P(hu3wDFz7p5gXeT)bQsUw?L=zJo<EN83VpxBk_7TOr_*NRt({qVNMFq=4Q z!csF{(#fP|a{tg67BuBqbVb+Dk;f)6fDD^a55{w$z~MNPD0%O47}M6YI6WemH^$(Y zw!*>Lw~M{8O6MLSZN8zsrP83iITioMI&8Kn@|R`sjbki5Ot=rk0@MlKpBm4_r%+qA zXB?ric &^XZWak#@6|Zz88Rwh%ZC0^*!50-!{?lfh(5-7*qJf0k?xE85J7NiA8o znFtbT%D#OoX%ucj-H_kuz2#uS)*WU>K(~K2EP+MPp_&_s>>1DhSp9k-9{-D`Q~5|u ztC|*GzdG7AHyEkFmQ4xeiChEZ@23agSbnbA17incGos}|P^ZxBy3Ia6Q+&~l_QwkR ziQv4zS%`V!cDN>9oF=oe-CyW7R#qUTow<zb6!OY?vw+)E-41`dVNt)gO0xIfi?;lW z37S8T%I|SB>+IW3xfOs)bU;U#*Q+AohgQJ7A_yrZD-ss+nFvbhg(f~y|J5&!6kT{< z>qOr9pZCQ5(iBQ#ROh}!GW-PSxOS-=cLl%mL*7b-Eq>e;^IlDy;J=IZ_p2X(GIup5 z2Xsy)bTyy8`D9eIojDEn>uUogJb|TLHLvfo#3jpJaXu3MLWaFSmEi|Ise|!j41L_A zu(Dou^q*n?0LvI+zI|LI{5@Xp*EeCH7-3?U0jET4O!;n`w{dji=YzLpb9U#!@DbjC zt+r+at~i1hfT;A2fuZ9UkR!DN)byg~2b*%1%1eiyPd}Y8X)IFp@QhkwR{?V7>LI>R zfa_-_oAJxc9Q>oYu&K&M$$efEn{_zSd2G^$sB*L&qAZdAPj+d+>#qH+e^kE`!Ofju z;CGbaq|Z(fCqf+@I0Z~Ih(W<E!29GH%EJr1Q+l*`ig7UUSXo)Yqnf{Q+vfv@gS`k* zw-ENCayy4%w_i#hyEf0RU#0C&pp}8u#Tfz1MZ-?+BG_=cp*?_V1RYq;rM{Z?$)(C4 z=>8@l@aULolCmRFGOzk`ld8Pxc!u_+lm?eIE=nW70QVZhohUIA8~_AJ>qri)hP$l3 z_y8o3kr4MM{qvrU7`G>cohZ^+BrCXi%i|1Q`nBrsK*#LCgP;=;O~6`M<KH#XvI%x! zh<kZIRRT!>2uE;=DZsRNl7jwGX+i+xkA1eD@D~@Dy~4l+1ws_Ko=r<tvfoypODa$> z%%{w5H2_!X{Z?XD7oLc7ytEy7Dq(eG7#dz~$bZc5)b?56A63(HbX>PqrOxM_EPf%h zC|bHwF}NyXR?N!MU<gDaR)J!<&&NBSB55!-H>Vrh7uCK~(QWY-2(F%I{71h7-x||C z)9dgg%NYv4R_P8mv|JfmHtlWa)T=_JChQFN2*I!wZh^Q0q_5bJBpbq&?@b9ev70-h z3fE<wcrOT^`iO6O)4MUc@`I-Rle7nxdY05&M+5F8va+05W%_oCk(^d0*r1Jj?YJG| z+<~*{u*vptBc>dj07;h6+#90U0KMHjt^4h&vU1Rb_qyM{K!w%vRSM_!(M|8`^KLtS zJQe-HZXw6~=Hf05uOYRQ|G|?!Aa+HKaC1Fi0($L|IBkvI<ChH<7-~vXSQd_4Smiv$ z&_+=2AO%~p@!1I}fMz2L_Yri?a}KK|*#+T^>Flft1<Bq{GyDFVxVFX_w!p@IRLl$q zXvr!$ZJ>i6@WmO5r935~>fz93)Ang|)3~vwt_*`LL-k?5HPt9;&w-a3w;U6!u)crD zE=BJ7+=!Fi0FFF&)AOLTmkfh!ShsAnZRTf(t!$-ZtEoTr_i(daOx+chIA7A40Vx2F zWK83;hsSvB?U!ba+l0+k+0Nzq!x+cA8+>2gDTo2P7F@S0tvYZ23N-*g4~<eu>)j@? zW2Zk=Ci+Kj2%w{Y$(qh~SRo6ij!g^gPkcw{z1EDs+SAo8DmgIMUw+A9{aWDi3cp$d zhqy<@i3CsS{sO)L6D9QNXiq0A4E8?5_5FyRWvo8AxdJ@D3|#V?=7j9?b1*sm5fldE zyxBS>M6`<hWV1Qt-bCZ8_^x>5)1q#2#KG~P`|(%tEK=T=9aTple`lYj@}>JxZSbVN zkT)%B)GBCiy}qG<8V<9c@(AEV-2b5%u7_vKG2Z|E6EnUb$5VKCSe-iK#(k-YTQ{bv zF>#UOkK}Hl_4Jy<SkH=oRmgg$AZeiYTPJ6M{p_=r9ITkZh}{<#(bTJtFF%1V;|CG| z3#Imqcco(Jkm8qQ^p=ZPB~H624EMpeH}RM0t~d^0bmTUG`JZq_8c3;%>p_6DR<{&K zlW5c`G&IMp0gn5Nm5SEwERl<_9~Hxza&U+du^^Rv{qxS`sOY<jFDll*e!i^j(*-cS z|NE5AAbOR^0P9^K{*Q`G<G!cK4)-7#cUxhZ9Lik+0tGMaX&O5iO&0WX!Ky!_So$0Z zwd(Ex=Z^P@3P1$y(Fctg_F66Wt?IC-q4B{c8+!4s0!UZfiWAJtA#-Mxa6GTu_e%D! zZqxZ7u^QPM@@kf>R<f<7UK<Q!8<^PJzxVSTrdLnaD$%NTwM~5+Tu|?5H|%+HsolY- zU;|2xH<nI5Qo=$r&(liai5O#4)cW$HR4v~6U@`Ia+iwD@fLth&A0CuUb}E7uFbmX9 zH7s(Q`@u@Fcc1-ry75~_*|aJ&TwlR#p@;Y&N#tRP4d-(ibw=G_?*z@uaAC_7?g^cS zx|Xy1at4#xx~^zlxtl+H|K1WNvgL*oMpv>50**q@Jn6A3h|$}PE<pM~=Yz%>xI8X9 zhAfT08?b!Mw%3KVNe(+yJM^cra7oPS^8157|EO#aZv2NGAbE)aafuWm(x~;Mzc-T! zZi2yejF)A?^?LqxV9Il0f#f@J(8KoySJWY&qJweX398eMg$sgRk|OdTJ)W*YKmmZL z9>Y6cakK6CesO6XFTLEOD)QB+1w;^4ocy0s8Nf~T7;Ss*pW8H<fi*GE8(8$Rjvrlp z)#sOZl53YXaEh)_?CRfVafh-@26<XeOPbD!^2g$?)BL0I6vsxelW4m0+3L=`qn%<` zcW*Z$(Flza`;GnRw2^kK_>I+`Hr;_P&x&E^t5|{Nte?_Z?GDcYcPr<wXwJbIfLHn* zE>DR>BaU&1o)1NvXxsa3(Lc3ol6KM>jlRk#pSbbgJJo9}GPzOs{?!GI@STw`H$Xv# zUJ~#4fnr!WQQT4>6nM0_p;{*Mg6^b+L1bY>JAC-kdu&Q`Z@fs|g`Y!GXVSKZ$k=1Z zX<TFjZ1IWy(a!rze}W%Y7pO?cK%!)H{Tm?BHW6bHd|7CffN&>APd%+R+^2S3?TvD( zLDTFbFT!q3>Z;Lf<8&x(g2=P&Eq*!6`o9<WLL1p0ADh&7)Z~wBFR4hnTr%dD0crRp zHe2i~oWXV~XcB%XG|6+}z>9u71E%MHg(Cu9)}wTau<&S|j;R1qmpW8@|DAHIQ9f$c z^aja&zBh2f+b#5~!~LIF>HX&|f4=cvUV3=h3y?&wgPGN(@jM00^DxRqw4?+|mkyb( zSn}gL<k1yT9r~Xy)G-%|HxYb=l<B5M;JFDkrcAYkw(cFr-ulhTT(my82<nB_6ViIK z0F{@At#j(9ws+;~RY8F~n$E*c>nsOP(|X#C#K*(LDi%A-S3QI5G0xmp+2I<WZFZA& zy;%*C?LT@+yfn4_D@{!TLTFhJ+Lw6%y20^&20j>Ew=4OgPgbvtI^;lDaSy=|@ByW} z;&9cv-O?^;{#Mx=>3iRSbwcrnxhO(PEDR_RjogJYtRP<7UQIpVG36lrUW9Qs)pMc% zqWSI$gv<JeAn%2JQ=)gz7zeJujC@n`a%jh$;|CckFJ9Tp_Xk`LU|_kTaZR&vpB2JG zggx$>4r5Z!(cS+k{i3a*$*$_t$wj;OtJ2ZG2U@yPRM+c^w>r59kT}KQiTHrgNbjR9 z9u|GZvnjq;5qb5GNswObVDCQPrt0(j+p~&`(l)6$k)+26*}^P^ztn}hADI%5xW!{g zMTM}C%+BnuBqM8<K5q40jXHb8*A{*4G?sAvKh+ErcJF>meq*xuhiXJ;^VLx@@f_Ab zax8+UNFRDLlUC++E4N{+x81z__==gb?z}n{88Sp_e{KaQn8SM*7&r)*oAP|Wdap@y zM%IIRhj=>6*j8*E<5>E0l6}aY#HL!eFYF_m7_;-J#k4beM1UCiVrLowa7B6FaGl)h z<gH5`|HdM4|Jj@q`F@7s&8Dv^xK#Lezkxcz?MgXu9s@#tO38Wi?<1w(QhU&?<GwQb zbKk*>l}m7hA*vxC8?N-DUsb{DlK7DD)kcTfrqq#<B{c8JBfZ+v;Jefp%f3jJ#rBNA z65>;ru3_~Be7+Wm9U!l?0f9GL3J0?X%W?Nz{S=-ph30lt38ZHV-#wN9tJZ}D5v6u) zfB5ghx|L2PtB%S%Sr&5}J?;#N_*@CTso;JbBL0ySgIgy$zV`ON-;(jup~2|SfX_&j zg-iD#mM+-m{DV60RdNi<1en&-0nD&%fdJ_?5$o2Jt-~m2=sf;7$Xjd7cYuG$i=bx= zLRyy^bDMA(S~@TQ?aE(7Ynrponmgg|7VQRzdgrtD<xfe!Z5u5m8_r;%XYD`VawvzY zuTze?W6tj^`avZLUb*<(Dy40T-C1ar`jBU7T^pQVZsp3FX-(Cl<`3(i-5&L(G6@%h z-wr)b@0d#ynFT;)lybi&6Y=OnI8wRS6Y>Bx+2~dpnx}fq)tvL-B$wxuKR<JP7zavJ zorwALgY5EklL8{d<hAJriMCUVYccMH_)|}pgmab6Yq>aid%r03EKG4qvG{eFni>>i zT^)p1D)TFXQ}>1BC3&{jPnYGh5BTixFd}4uKy$S|Y;&Y0vu${;O|Av;X6YmrYd`db zulUW&Ay%i<WiuNr_%+}~*?3GCDDz#VgV<7jbjA)ou1CE?>6UUX^PBS69Uucfx0oi& zI|4dVS+~+Hi1$;!if#5&x3;AHo{T20xX!CP_KRh|cL>`&zI+3jegR_U3e6dDVw8*D z%ux(DgHCR;L7dj4w3K5nb}aeW&{;i~GNvxgC{Z@~y6ZjC;d2X^Yr(x4#7MqfWDVos zc6fJmoE@a8t!KMBA`^4Z;UO5!V$YG{6;O}>;wU4$NI*ijxcSpOZq9f~@D`_u`#(tg zat>=GS>!am1+t=gPCKjoDsN_rFxxIU@J%b23#!>4-?8|+4^7Yw1|?U8`2vPY_HC#D z;o%1u(k-NVSXu$&EoEJL-(o4Qa}64D0N6fEBcx!1zist<Ne96TPP;j;%SMxyIk}K_ z1kEUQS)7Kv{$DI^_u0J27+PPXUK!t)v+zHq4}j@orBeo;ZAqw3D_V993B%?s<Yd^L zCrZ`FCYoj!?p+{@$2y3uGNcj$Qj8|L+sqH6z6WQE1YO!VP2AOF54$y~$$S3UK`L}U zcm5rX`Z4oH1bxKj3Z&4AA%Xl9w@;(kMoNM-Os5PyaC8lCCt}zDjGiV4U?tA!u=;?2 z0l@ATNr-<`I)T6;MD%--!2KbRq)#(a{^IZ28XDTpqzkx443_M@j0#MbE|9Fw*#=y5 zG}}wy{{^{gt6f(ISB$a^Av9hSMr!n#PLw<aPMk;;6E}$rX{gIL%W&uN-;Pyx3)@?A zO=bk%{JySGC167Z{p!e9F&V+I8MMSha>JbqLxgvan$Dc5HrynvrNSer2|z~W9iGt^ ziK=}3o<%Gxmy6%4JMQB0eb}{vSTYz<xvkru_fF5vNNOFcarqfMZm`We4n+rKo+rU} z)GVnz8;F<k-haHaJ7IoU?e`7L-i5n~t~?ln^m2DbDv~`Vla>nSUb1>Usfrv|0h+ZE z#S;mGec>E^`N|k|$+E#fMLOZ2k5hV=JR5tIraux4b{(qZO!}{BQ#(cJ>A^O3?a9yT zNx72a1tp|sl--8z8{a=$<75&H2e=)(-kw-xA7KXnQJu2?Cpbj#{G&?4_z|Le+c0q` zd4F{?MO52BAwsjrN0Ne9FB8>2*>@OY!!5IiaS*V7``+4<a{FJpDrbL<-9z(f3EGuF zWA6)W?AYcMBx>>w<2b|Aib<zHU;F2zA;+4<KF84krL|rlC1#nSvlkFhgW|w-mnus0 zlosZ%*P`w_IplT_lY!U{90m}jX$r%it;0LHNTnl^H}u_vrvo^<+0SxCg`cJU`MYcG zy3C-Cz|-lCdnfYWX=tC86g9*=n8x3DtNJlb<~0<odejD7>#_b$D`ST0#w^CgMisQ1 zMIY6^(uPL$v?8d(_<pF1;iY$n_7y$N%`9YlrAmBm%G~DTh@_ZUcTRhFP^4WUIi(d9 z4%^CB&Cw5=-;S{VxXg6&{zhRlqrQsbW<W350!=nA`nkmf=kGP`nnfb%T2jx1G(K~Q zhzVk@9!E6xAiTqXFKnS{kK-|b?EKLM{eSmI2aX;<e#Z?ZHTNwOY9u5iyr)J6hhm3; zOeyG20cs(GA!2r00g^%1BLaXum=EDZQtKV7>KM<X{l?NH{^GCm<)3HCL44wQEhHx* z_248EQMe!GR0ftTbu;|)(SI0x9&$KA4cC7_u!_pjix*>eT^r21on9C62llBNYyqh7 zI>aBf)XboaOXs0>t*O?}vuRT{b^qfr+X1+M61yu*0r;WR)m4U9&ziGzi4U^{btP+W z4toT$&AVX?5oOrLfs)5~(M+9y3$N~i^Q^z-^uM3+&z-+{*X}((bGY(t5E^wtR>8L; zqyLZ)W)6~yI|hQrDxPI7sV=XI2F6+;ZjzkUViuSP0RZ884A@$ISB$GJifcSxI^8~X zGZu<3xU18Eusywzc<alHwkV!>&tI8VZhzMb)tjz71P)prQ7p;hK+@3=$ld8eb<TXx zzi*X(RY1SlPs!jLPn_a-m?5bIwzBACI_Yun{}6ZP?@+)0+gFsblYK2qDqC60GLy=d zq{zNy%QBc`8w^wSeL^T=vhOC@8T*!0cEi|b$QEX-gE8;>_5OT+xxe@Q2Yimh4}NkS zhU>bX%XvP|_$?pnRwL511?$Hf+b~d6eW)<`_d;J#$oPO`aFLyb!C`O<<J6%(EkO*_ z!@qeWuSVUV(vs}ceG*k&5*Ri5gFDAgCO~;ujo~*i4?ATQBs(lvj~c<YuD`mUT4Kgj zOec87M&cDL(Jy-BkFY>Wmy9v;COR1>7t*P#v}k*!nLPc{@B4lwZTB1L%)*|rPuWq< z4vZc@+kFaMHz6c!Po~l~G9({n*@vS7X;S8e9%ZUq&|}xL*e%<oFXqY_U)G!9DaS)@ zo`M%2fR0TVQT<$@xvlkKyQ7fc#!3Ca<oslj{F}U2u|v%|QK4)wXm5IRM2<?*hQYn| z5$PSJ7wH18gv0-#LEC7T<5@3|QT@XFP0@XxrTWYpAxOQN95J>m$T_jZmZWnU<bP3f z|Ii4MU(NK+3p9<&7N*aBH`T4Wb{8h`uu0r_;}X{j2h4}?EA=dAuuoV7Q%}E=`G@A4 z<5})9YSSj88+v}@M7G=y&&s=rt|Z6dMQWlM>jhv9UemlMM}XU)Q7*PkWEgH1oadU^ zgPm*!kZdO*bE(H~x*VUkv(8*ALqxYT?<3Bw2h`)l8w~tlGpntQFZa}fR=KQ}>Y`9Z zFl3+US9kuR{0f<I<`U}-VGCKy3$BMACISy~J|0w2G046)3Gx?p`_gqP?QpHsmhyl- zv&?2%$aYo?&{DV6C7-nd^Db&6_%dPv&`%9;{=Ww{NUqBb?FABc9o<;iWrt18BCrNq zEeBQ2|IJN4@D$&=T$!7rYwMakPrtza^0Ia(pKvrC)lY-dOa_mla|OKK9&+lME*Enz zWMhU4YuES`#IyrK5CH!Tv%S}0OIJtkv@e(?2k6F)?&zfGUUQ|faIuK;-snVR`?nKI z;pYIoU=pw?dyB88UI1kahRS~(&aFr4eZv;T&Cb00ij<YVFIL6MwZUnYNX~jpa_N!d z+idnv!?&QAUHKK0aj6c)LyezuEqK$J3eNpGXJgn|)Ci5ly=-sG*;r!!`NrnyN_O0k z=(hOTt^Uqd|IMCuCb&k~1_z(lYD3RA5rUILBw*pEKx&GbZbiIHp?`b~#C3IKCN&W2 zp)r>2iFHRnZPs3E(2Aj2vnRN`6pp(~k<#gFzwDvTQ-Iq%vXvoeoJCe1pm8sAh+M8X z=O;;E9J*kw3W5j4`ryH|oBSr>+8G&a)Wv}#c<;3jA|55^s}o!5P?A}%u;5pcN`%v} zx<-+8{NRrAqHcq9E0^~S8f|PFiEolSK*r>7jBP0flN^ie^g?_}Fv0e`^=VvO?J=oW zDdoc@RjmJJOM{s=_(S5|n>CwLs8W#cuP~2-%|GeM4t`E}>32{mLbed52Ofw1ZWLJo zD0Sj0zznb<EiCB9MkX}cN)J=d?-bx;H+|ui8+<g9Uu&tc6Rq=~5|FsX+9Aw04uEvF zH~Z@S&9Eu91?dZr)W~=F-x(ARL?ZpbL_jDGtOw}3+sUhBtl6S&g*^a4$QykXxW7DB zIf*mlb&1h#;YAuXR^otvC#j#Iw<&j<NmZYu)-AWuj)-bbD;?M%<Tf+KdsQUywI#B< zRIwacvw;#;DhHMpt7&~jj)?ES0C-1x<a;-eSOZCGCteA9#YT%!$4z3E>LB`cRWN5_ zV}CTR=MGKs@K{OF-)Acw0x_MS@r_&OpbXZn-xKM6zvF+x+^Z>mKIEc-p%zysx(jt_ zc7B7Wxi8kf)OLPO@6DbejkJnj<Ou_zjR!{G(fljDL1;C)Ha`AT#^G?@_jZ{5`G8$4 zl{{lgy#-e%vP2X2dQ`*6!8+e^1o)m@xkMwS+`R%U3WJ~#+m=UN%}QfkUlk9Z{czBH z$LC~R%c}X=w9;sDCqp0bFVjERgh0htbWAT5R-c#+HBf~~waqMPgvx+^{;1>azmoh~ zv96Wr_o_q<K7-Zu)@^G@X4Xx^igOIxza0fYbuLg*)?<iZiiZ;=798n6ZpKFnJEZn^ zs1)mAlzAGi;HC?wfZ@8ZUynBrg*J0n!)LK^jH0<TcoXi8FGbY3WL|cLw7vO?2^Tr) z^@JIBq$60Vx7XNyRY8Kv-Az>-elA$kUltE$OmJ*g3a$hgF;}jVE`CC<+1@1fC7(4& zM5u5FC^Ozj(us3qpN%-Wc&ESB2X%R0gv}N<)&pjPLyADC5I^4fZ(k*YI~firM6l&L zRWNH4XjaJm)<C?mVoUI}jD5ZScS@7EdH&TV;g$Bs`wUTk@B;d7va(LPFJqZfbXVQW z-lgbi&{Uo8$M;8FCp|571hs$ZE}GG#dvB|p&t@_AGizLE>e!$4cik#Ec2Q5%Hw$<_ zQj~d}RTHEyop_amvTl-K86EyXiFI|Al}(wjyrfAvS)o{kybrb=Zvh(;aJhbkhdBC_ zk_CFWxj8&A&10)k+`mEoiEqy!zd*up6|(z0{jf7;R55nD_*;})LDTC|g>UD5Qa21d z+rvTy*Hx<$0}H3t{rMvTNb!L(cUlXmOPy<wv66p(HpUFlOwu1{xb#k1)+ZCd>~6ze zpNf8+woeDJ9y_KemsWYgY4~^k5(wKBE<-1|Wq=|n1BDuGwOfkro`Ig5ahFh%nlt)` z=J^K$zd+b@ATJZ^A4o${<g=gmX>!{3H*S`c#YfVxYCipMcWld4adN%gCD&)O7H*^N znb~t)I13By*RRsvU3K|-POr*%2^|-D)ebfvBGP}NomQlc^Rb=je>F1`%LRJHahoaz zaP&m?K-X+x?&fb@Yp3dX3+Q*G^u#?_hXJifejWxz&_YLH^vYdrIk2@`uR@;gh4e;F zW|r`uN5OU+`@Q<>e2}LgJ42D_9pJi3!FPPl3V3yu>V-%PS`7pE#4x$;VOJdIbt&E0 zdyY-nNK?mIp#CR>stqgMgZue}5NG;MUM1s$YaanjPA5HXf&;wDv74<EJiR8B4uH_$ z){P@P-MHeo{c>iyj6JQ)?R2f=>CY~MLQ_ZRAYxyv8!#bvI{|&ZRQoN`9_c-BmC5Ne zb1bhZM5H5=1)1xvsuWqfS!kEvuT;@s^drlft&_HTipB8pUOD1z+)?^-cd7#Rz~JI< zlXM~3KSquMPwz_x7=Gc}sx|xM25=3G;b7ABrYf>YZL7}HJ?6@S6qhZA{Hs*BnbJQr zmlyi%POh7x$bu+}jX^HC0WVxkXumv7uIcgy=6o5cSLCfLav+TQVQg;=ix3QlKct32 zuai|e=S5pa#7SD&4LFH5UHh!T?w=280-tneSFnxS5eq<qh~aV<pj#6MWEo{UVSm;6 zmWHmlgM^4VC>IF4e$yK!^IMk>SJso_vjs$5uPm@1p!he0Zy~$dSw#$Mnv;G(p?(4* zX^}S5&pGYe9KYs7)rK<7LH5>~f1%@*6vqz?z$WRxsyJ@PnHb66rV*J}DkX0ATp>pd zTBziLMv5UkncmL4Orq~2z()g?n>Wyx$VlSmQeu5e32>RP9f(}tG5R<t?3Jldd#h?V zeqh~tD4N1dr0)qRb;;j|vT9=CxQ@vb?Vo{h?dwF;rhWnPvqyfmd5`_gt=+qmNVU8$ zM2MRxdeSTEZ!&vdoYj)JX~;Xc1fE`j8~atwZUpt7eSzg{Koxjo?^M(0eFos<O79>* z!(vQCysLzVfMe=v@KZf14c-PmA78O-Hq#r={5jaP(;Kmd_HJ%&ik!D)7G3?Df%Tc0 z>h<}DM*YcN0U#luS;mSvo~ly7aSL9#_5r2V4RYSzfj0s`?NSWLZegYdpvjWdsV2^? zd>^h`+ve~D1**iX#Hz%yp}eG~Z&Y2uw<A#<hy1S9qkksqJf9N&PWpQb@`>;Pg6$qe zS1%bDi9h;^SbSZDS~82JnBiI3VPPV?uBa)fr{^o8Wnk8>P}Mp3>BkNr7-0>qLQW<i z*w!;w8lu%Nf4N?R)~Cm<sIY!xgavS2_^l(J^oc8YiMtgqgm^HHjNkgZbr3A{K>wa- z-D$Y{wFB@%C4vqXPvy{;d8`xbkkf6{JXT=hk<feX8G=3BMu=-s6&0ZlCaLw|R#u}| zNODnizm%6McKifhS9dGMc=w5jQ%!=Oo}oPcj8|^MZSaYZp5*(dlepc7E2%qsS8Qj? z*l507prv8(Giy5qPgQ}Y9J$-90^97n{`TJkeMDz_sb3~oRbDp`S;8WHZ5+G4{<@+C z^$~r1IB!*vT>LR+y7T$58L+{MYEzno8x}$AIN^GpB|3#aWjz&7xq58f&#=%m?f)DL zg`P~I=vYOoN=fsGA^SHp>9_wzetpRDBJAFIphMw;gU5jIS+x*mw2}a{`bQ1UwsLU5 zhpznd-Q)p>z=I0ba})`{du~ZaS_4t8cn#AVmW+XNACnn!8V8g%On$<3CjBbuyT%q^ zF4~?hMmi??TEES&40NmlI3I6<9FLo6C_l1$o(pL-aUd0tv+-N+@GR>k^7Rm0@gqel z16XwI5aiCTNEuRC45_ls=!l?&*t*t-J#S#$PxuX%jqX=ZSF}tj-dRPr25E`WbcD$> z2R@|SA_tbk7A#JmB3)!~GaY*tC3gy(GavrBU~~_<ZuW;PL!7*Xv%mnt0atm8!uK@b zow9Yxx!`<vVeY!DZnkcg1f){yw=SB5iZ>YN453&f1pitI`Z7tmnxxh%zloh^9`|i! z?8d#oa<7Y*iRb+7u&{}G{+7>({_)NVwvHFXAi~yvOUOur#_l*p?uRos)m}UVQabF% zIk7LJW|Zg;q$>t6w7na@P4x?^fg2QMyL1OtrGLAWcu-K^^+2H^i0ijTjh!kiyrZ3l zqToNNI$1UlD8kCyl5R?WmdmR&0@omW6M-aii?M_D=w>7;xM;Rur+%y8S_q#&VelMR z7u>$NxnbD%qo>l%{m#I0oTY&uU6znoK=;eTDiMOl++ige@YZES*Xfr?v|l&SUJ|Sw z@W>}4+b&ZsK*(ZUt4l*Y`ZA190La1|kI7h-7icKt_WMpnxl8i}=ejS0A0PaX8l=j& zagh6a+60Mk?2)pi)~t#O7C%?t+V#l6Bu034AoT_E?-p^Y`>ShBI51|c|J4FCKb3M3 z+&sek<8b{Y`u3cYZk=@c>J*<(Vo^@gqLODR#d~P|JWP0>9hcuGly5_rp9qd{#_lMt zB+Ng4wL2=m*~t2%2E61z0YD{r=3wGovqFl(_yMy^N3(WrMTvnnUfFFN!3ecScJo%{ z{Fj?asW@_R0Yo(_qi6%f#im!~iY*U;GWB1+yF0HElQWa@&{k8WSA?gR&{&s+jI<TK zQj|G)asH0j`Cqr%7V*L;nE<=XzCco2+wDnpC_(?iXmN9$0cg<hw<RyvVD|hn;Q+v- zV)F3^sDvGi#Zo#^Dd!{BGRQChp!L0tc*l1?WMXK=JgW_`DT6OjJ#CPk<0ScMax%uF zez2mgGUHU`B(L4Mfx&EscJCJe`P>7VC3Q$KS&ZP{9_+T14SkUlECquK|CqhY@s{B| zV)GN<iOCMx^)4XQctAo>&zlv&l_#s<I*TEa=B-Al^V*}|zP-IKJ4MH;8Mj_i78F`q zyz$^+v7O~y%x}R?`GMNgMUwTORFYh0b6d+<Vi7s6i||~g+CdL=yl*^$9LCydIgrQf zYKZNTej1SH+9{Jiu1NJYN}OKcJGjfWY>MIxmE2G!&8@dH4q86R#k<MTNEf$jn)!<G z!GJJeY-9z-c(HD{b`|p>3#qQ()LYoeaA&O8&i$|qh=}>t#^WjW1h`b@2nOPIF7hc? z5UH{%B2QcZy`x8tDyaxvXgvk9JbH%gygjts9_O`Xv27nMcs7<nd%EPa5AZ3CiL2c? zOdsvm_)`~V?QpEhf!8?%D%y6`!Z+7#GqeIxJy2FyJuAB=9u+-0tyg;X(PD1O_8*$^ zrdacDx7F=GRPS%v`sL2T-_)!2aNDwvde|9Zf(K-s8@1ULB8_VU+y9<ozfx`z6LJ`d z5te>)Bbf2)nffh*$m31*XlX>oicKUJVV;+0`;NfM59_uf8GPWc&xMw@p*U6SRDl3* z*`L=4**$w!wlZX$MS(MpzxrR+Gc9yK^{y01(cZuRn^GclXTE{TvtZ-i&H`5`ac8pJ zU40s6VSV6#;~v<yZv45e)Dk!n#Y!=s1SueOGU;0#eWm9Sv(a<oUkH`HA_9w}4#cyz z$|`GHJvSFWkI+u8)l|;aA<cAa__E90L-gakYPikPsUa5(7%XUyGsZ(24;8duf7kr+ z74+pT<a+^es9)yx8A_KFm56X+-Ck*nxcn9XwIAsmX9CDmvXteRx}I=5iLoacA}p4| zQ(v2OZKeCXph8R^k2nGK;kDGb6q5Xj@DYBwV0!*n;lhTe-y4|}M)BF>sb8NF9gseX zG09&BYC_!3%b_QEn5k+U;mrI{^V-@vb`)5s$q1rb6PV0D_*bD%<Y-1kBG?K@^Q~w^ zPtK8E*bm&8huO&APoHq`&xn9!UJ7K?6)i&!Yr9FrCYbfMagJbZ>Kbd3`k#$W92&&T zO^ZJqqU?+DDy@d{k+TT;lGxl)DleomxYS+VHs4x2UQl3ylm2Ys6qMKMvp5u0C&xtA z$j2^QD78KSa<#~%-}eeV-h*kRn)5I$`gZXUKofjrqmBI=ajOj#3@4rQz2rtG-XkHV zp=+u1khESqSeFTA{Fv~RHRUPAu^xtYC3Y!>@{gKya>#tX)p0;~weoRgX&`tSYv-Pz zNB?2o0TJl^ol^d1C#s!CM*Z57fDQjxC+KEV-Mi)6hFmC)N56kZoGz6Y*(Djf<C0Q~ zEnvnys!k1=Y1!4yt@Se;`9u7Tl5=_@iNS?j7q%u^(`tqS)t}uDml3bx(izVz4z5}^ zwUpYx1|=2*ImrHLmPbnQ^#w5eBBBy0Dui>liSuaBQ2T#q%&V8>Pt#s918R(HiWxav zF8tL<MQtL74b*PJ@=<MVVm&cSKjn3Z)*C>#1d>6FNZV0ZxF+D@Sjt1RyRcYlZ_q8* zhHAa@l_f8iZzg<B-?2q%!H~UMj-5He*g6^0qZjRC7)K_ykQDvf{I5im$6u_iJq?f| zStm9EqbFvF!5HYKjWx_lyD8Cj=1G_W>tX8Ah2O6cQ|fyiXgE>$T`}3Q`}W$2Le$t+ zapUgWd(+K<yu}o{YP+sx2B~hi)fc!PvA3_4{+*}qFQ5Ap%b7lIZyxzrs!z+)NsM!e zr_MK>hA;wuzIgRJ&PzgOPsZT)zKF9=&(2AQ=`F|705ZkDs@`^w*6W|G<3cLa%C^FA z5>a>7%5Kvy-vZ(d+0j+C3(@lu?PCL0EuPAFS93q6>T0?W02J=h1wA)S4(ch2F50M+ zmJ+kI>8Yt*PS_cAse%af+A<J#A^?)MP;fW*YuA$mT!krzj=OqoW0dudQFu}ZwtB=m zqi0&Ni1=d~G70#y49B4|wMQ|6F9&bsH7x3aBVFJi0AONx-p(*M*Xk#<$R;ZIQ$iBY zY5wr*TiFTxrrD&{_d~(K74vQ!gMVgij^m+hpDxFW_5ZjG<T*VC!Zu=am>Nkom5F`G zvcddKoJXQe;=ZFABXd<n>qKPW63{{PA40E^Te=^k_GTX_90zi(p_t%OA`yR~TUB)y zN+CfT_CBSyk3$26qIi;i&~%7cZb=QQ`;nqp8DKdCEjuO%uHd~mRDAL_R1@Q5hH`D^ zc{z%4#tV6g(86k7eM_Gqa3gM~Ncc*Ucq!$1fN(AxNsW->0aUXRK>^*_UUuwc$;XqD zZ#5;BUm3IU&ZMiG>HU{I=5N4PFgoRA$o+;!;&w`AeX)0dP=zV_ddEz-;3}2Y7Fc0j zKI+{8I$c1cD+umGk`3GB5F_#pz`%Bis#FKKopSDA)%}8b5`3@aN?X2mm6=4`aRPY( z%B{x-?#pf0Hvw>YG)6TehjZA<rrm9V`P*v5y+Lnss9!XRrw=4Ma-eamzYD|@Zw@du zgR>%1LZa9h5`uRp1`%BWqzr0oS}~Pg@*f%=pmdnCvYqr)*Z0Afv;Ljab)R9*Im2_E z$~4gkpZSonUq(!}wyrkh;LRN#r7ZQNd=+fDz;Kzu$x!`l8mH;(_0{rG@`I+X8y$T2 zl$7LO_DQmTzDG|#-)5G9=LWFQoQ8C;(927t+7V`Xe6LKlxW&+b)Rm-GNF^yC3@)>1 z7m>~_@@mY1^yJkPZZ=O2SBTlW^5@~v&@YsSS-YuS?7>Hj#!{=Hc~jy_R2NP^BMFS@ z<gBLMMPDKn_gO(XVa6sSl0=mRvAC1DC0QBJx@fKM4zk_lYh4)PJgmAfNy6-=Ti^Xk zJ7%~8f|ESf-7F2_ne;7eZp`?JdLHhuW#wkafWSOPb}Rj@1yo7;_lFP87=Dtgf?>WI zpe<;XR=1}PLsG8!@=NDlGa_q`+(mNE`o7`Cd0?1e{}!AoRMX3^%`(gUgT7EM3L}%h zhGJ7vOXP4}lz9~vqI{2KO8<M0Zt2KF4{%z5qS<AczET7!%8G7cwRY5Z>(>0*bYE=z zC-HP=iTLyW?|20rFe46=)Z4%UQ_$4*`uIMSVeP5RHBWh{^pJ`VYG@z*l&t4hI{3w% zKeQ<b7kQXk@~b$j-&%3w<E^coXs+4kwswStNJ(340T9uE(JCRk*rd_<3^}bjcRb(S zdDdO%<By_K`lZzqdY2qq3CVnRFPLUjOE7-~`4N#842qZeaH15^te3F<&8qLP?@r_$ zt_#Yip1n2|tbF8$k4QObXW4i)iI#fiCi%zTlvPWGnBkk{@Ec_CB00a7R2=IiHbFDH zE;J;5<*erk@<&6cAVq;JSFy=9v{Y$w0BP~R!e~*|-W>GtN2zEV5P6DM463CvkJ}Sh zdeTp7bH&13qb%i}o*6D)Mk@eIRTq*DHLkUvdJaj-r*ffsMNV!39PEqWJ~T|fQ&@Qf zbk((iDnW9Z7p*qmz5>x)iQ!8P$F|+E?FTT1TiaeTE}2S!p4J15!X>?rQ@|IM{!s6b zTb8!ydxK2V&Z>(`POaa&XLUpCwPL@of!k<+C4)7J6};v#hS;g0av3kJCMoXl!8J*i zYpGWAZj<TtdP2*(+W04hA5yV&)S}i~7%W~V0b`R#PMLX342aCb>RU2?nl9e`8TjT) zXxdLep%X$11`b?1kdOfU4p(;K7xte3npxsqM56z~B_#tF3*y1qLae7jPJtiasQ!b~ z9vb$Di!EgYSzsc@F4r@qs7q1ZTEf=Lx0Sa<riug{v-UM+8{%1env^O{MOa`LXP%F4 zL9f?EtygvN(LrlJb01dBnf0T1wLkeg0fD_<ZThM5^QCtZ{Q5QykxVUvORd-S%rQu} zD+*TzBrfVzsyZcCB-eV;ik-it(Fu&Dx#}>lt@8Sr9<#G+p9kX7jAgf8VqzVd5+!1E zQzE_J^YN;pN}P>AX%2CV)VrOl6qWWpnau4`zAZ1=tzoADs8A2|h6wS3`!0fyjC@G$ z#G^06B)d42hN71~+itw##c{GrK3ZlqCMVmB<DgN#$b>fbT4Ha}C+8BGI{bXMBfs{e z^LM`L@|<BDl{QU!;7`fn^l$UVENw)LCY;&=9>sOt-d29ACq_bFBhmMMR|0dB9c>J0 zVU;c;^Mn-$$o5_y&ih29s~P-%H#N@0;{G?VjSzqTQLoy@N{Kk}sBMkZH=iWRhi{-| zNo6pRE?Z@gJgIQybHJ{qAh)QqEGc5HF^>s_-?Y)r4p~CS&a*05MU3yOeH%FaJ}v)Z zk=VheDdb9aDV|x+VQZ-WHqKJ$?j`FIw_YHx7%$P2!u&I+VJIv_%TLklBh0Kv#Xm?S zo??O5c!dvU)Zg4s`k8mjN{g;4?lW`mcRSmIKl7Z#qeQsz;vhN(o1-{UyJcy<f~oly zXSi>YsA6xc&^Okwi_XO;m1H}1XPOoatki84m|Xxj{|}Tf4u50&WeVSjQ=Ha~AKlm9 zErv<;KtY!vnZ9U|cWu`;Rk=Ut-7HQIbd1;da2$SYIusttr@3SkG}I$}hh&<I*Ko7? zJLzM0<r}wmf_7mR-5F%E1bv%aPK@r(QME?|oS$(I(@kiI>DBM5$Q=h>t8?cu?nj-7 znytuz2B1!u(PahMbbdfA=&_4b28(nqoP*In;MfekfZF=wcRQ=bZ}p`U2j;b!SqT7V zHy)vwRn4x|gV?by!yi87Y;4?ZNT6wXLA_U{_P>rg@_)k?HmDphXb(uJox~5zH%ql> zY)q$5I>?(6dIalVvQ4x&GAMTa>aJSZpW(^90NVChi%;xdyAW8FM(XZTActEww2@do zac6lA$MZ!IUoi_?=cuW0q2>C}(cXPSz{_k9e{P!g3Z?wv;(VoS3vuZF`1ZA=%T+IB z*ZDoHw_oZClZOa4+5cUN4Ob%m>?t#2cLVNM?}v<h!`P}vcW$^y=nzk_*Gefy`rv3) za2%dUEq>#7Fa6T~8djlH?G!PiaEt{mRYu$?H5UDElf(<$upSg;(%C{H92zXtA6+NI zqUL$`wm#WkcX@E!$@gE>=^iS!O_C&$Q(a6(bOhN{{%H-MomD^bjH$F|;_*Hh^hUa; zF0mBj%RBKh;C_W^gR=F8QWnoE?tr-eLkMEhv^~tProxV#H*e+ovT@AMtj>{x@Y5#d z`xbR_5>SIx#Q|!4VYq!Yu_4xJ7*M9TSdZr>I^}49gz#+LQmOk@_F&hShf(Y5wD_oc zn$+9T%e+Tu3!-dkNF_}F$@qblSuLhH<}p!~({&d{C*nR|Wu`-#j|Cuaro`3{qxF?V z*H0twy#Ml=MW9WEVK1-^Ou3CTR(YCX=Vh4sn>ut1xTWgM%*cC-%r?3Fo-H<;uO1~0 z&rP{Nc!W-nU9G!-w9@}1F|jv$SzoDk4cK?B{m{NtMZ3gZjBmf<svLS1Tc@E>vBU8o z-Skk4@Als>$B{!vAyOk7h2#EjtSyv=V~dg;JR1n221zUnA&~&MZK7FfFjPHJ(JfRk zqbEk7+k2B;x#*I3ptJZTJHfvkT)$qes}8;MMaDg|Ub93-N&B|{<ufU$&6&T^5RxZ< z?v~EoUj~Z^_Gv)J8`V;}CVy70JGO7`dn{|Vt#>c`vm<e6#TE$eiSDywA}g4jasl%n z%6+O(YoaAD^ku7+n-HtSz0>X)uCyfs=n^slBZy;-f<ubkHl`hYWgXq(Q3SOp))gC_ z&hPs#h^@oK?LxmYD}m#AtJ6>1I*lLeZH{OZu%j(Mq*k$Hj|GmlYp@@L-sZ__CVuB# z+_WX`iI_=DUlr@EpeU-}7sM;*C6VI<7z!}PI{q6Ow$VoWmHLASj;`IQedu?np*p`X z^sYv*Ma*Qjxbg0HAji96K;WC~9|m3FA`Em1NKC)HY0Ef9(W+SYx16jlFP@Q;ML&D` z1U*P2@a2~X7ln2S!Qx8WD=ZAqw>^FI8>50PJjNf1Bkt&Yc=7t-d7a0HLH|lXk{ZgV zTrF+-^2_J6+?;9V#76~hCEyzkW5C3!12rM~9*|7qXim>S+vFc7GyS(CU#Fh3n0+ST zn(VgZ-h$_d(bV&3pozCZcgq9=yd!F55sZQPj_=If%GDGbkWwPQ-jjSfntSK39b-eR z&3e#$Gh}Wd)k6dRJ)?B$5<prWCNOQV7=o89Q0!F6fyG~;3y<rGZPiu!G9}Hg#>Noo zg`e(=iTus{gIEf-LyRZ^qc~a-B9JZ36H`PojNUo0%DP;8l=1wNRxQAC?^>iGOt!=U z9jrcnA?9RazD2J4ROnX!{ZZ#k9!%?T4qi8QkAd~cY6HQBa&oqhpttI=f0^~nhV}G* zMLA%ur~jx)Tdg$es`A=hRX97uHB2oy%k@v<{k{ojCi-RfGabe1PR2p0TiS6JANOhe zu46!i!?@~ONBjXmqH%E1&a}{m)mGBOEh8Moqiq5ZXz11v4Pz9K(K}zlf47FSS7>YP z87_W8LrbcPlO}PH*eUVn*OF(3&!s?O$J%a@U7it{j}knKnpI^!MBV(@@i6Lw&Kw{a zuY5geS1Z!BrBR@K)5l{}<a2ki$J{}$8(9jEj)2<{X4FJ3TguIN8CiI3i+^MPZlWWi zV*D$Z`8BYYuVb7Oc=T=D*QA!ev$f%CL*^g(O}54~F~_$$b-v9Ps>&huE1Q{#ZMgxB zDAjrF-_3@vI2&N0HJNQ1CZ*Nd1mnKuI|JWsoP7<lS%|dA!&q6Sb`s$p6GJ`MiZ2&b z*HOQRyto-YC_w2bq~4za#E7Vlw!6fPNX*Sjp@&wZm7e%XKc28ls|nRHv)_#eweE@W z_FeD{9WwL=cg=ye|A;Zn&Dz*JWLGbE^K?7^0Ii#c5y6{<fp~`S@l6;VeE+Dd>@p8e zrn|cyr%$^J?7JlBAfLd>30IxK2>R+93eBurTATjiZW!GbHBDj5g6B3Fx*s4|&pxm5 zL#Kud(bIXm$;}Z{%Hd>(S}Df<nhox@OW18iYakb=*IsSL5&e-Zt-lS@3zs0$KLVNr z#a2ffEJeqsWJ7smZcscRjz|7RsC>jxWvj{}I2!O+G4oiA`XxS_v$XA7QerH0UEWNi zxq6Ir|IhaIuGZlY13-KDJ$V>ZRSK~W5LF&qZdr;7HffQI6sE1IGZ!VM$E|_mAdk}i zq1h>-!>WCO**zxO0ij<MIsWPCjguF9^XA%miNbuM>_5(}8Gh6X`USkMT*+myRGrZ} zPw<m*KY`$ohtC}9zpB|6ij88%deTw!wT9dq(LLSWBO9s5P?^@b=7x;j16nBQJhMxp z;UXJ2pi6|z&<+sm(eDm|Jp;Njy$bC)9=fPIb@GQy+<#mJOy>Om%WDLD+f7*fbK>@= zf`LM7w@GARsg{e<<d?|YFcmY2?=0El2%aEl9Q=9l`T{XNBg>#YlVBV-`(5IhsGQ)t zLfg>xY(J41Rl75~iuRoo0Eqp{a--Q~A<=RY`vdjN0Q?gYv&<axvvJCMTfv5l>kn{s zDGqT?15REkqO>x$IkK*0dd}@grq;T{{4Or|w*3h<a~&i{E_JKeJTkRoF4Av(g})bX zcx^ZLCev#wcw=v})o^hrQpu1B7IX;ZuogerMh9Nc4RSn<*+G5?xnpz2)dllfFde0e z!3v#6{&-57WC}DYai(azt*rI_CZE1A34XknOL_o~Rz5*R900~ah>FUyxjBLBVY7-V z?*|l`1yk3il-9u)qz|N6BW?NXuwp414+Nf7rG%_lX9LsZ4u34v#D47WVr$N>fIe({ zl}2AxoAx{X{h#;l9+lyqMi#AGI#)(!7wAJh`FnYtnI63B(<|CIVaYCc8?&&U5$%<g zcYIdaN%xX4Wm?I#i|w8>BiOWu`>s)LesRUBUNt?HuF>c9H&~s70z>f`M6KZ&!wLP_ z8Bi`E$J>O*LvPMe^oW-5N29)*%nDnnA2TQ3r^-!L-Da5<sNXm_AGeBeE;9!(Z1t*z zDf2TBp3<V)r|0bEr9OYv(D@FDZzR(ae?yS>FzP^rjsC!d;i7OoMa(-FhUmqD=!u6} z5NGDrF!y^6_F<OViQ%j}&N{1rB!Q5lO!PvcDQ~KqNgl6l-0Y@gWpW!+JsezDtx=&8 zT)^mv0Z1=8qk*gaLz9F^gu+$Fd}So{+iQp|l85ksz0mDDyIPV0$sv(`FU%4kC`O7! z6|BX2QU)Ge=E`RCG*1AcCC)oRLzjH@sLW+?C=t+mru5=PP5~J<C8*V`L)EVjxoF3- zp7DjTTt*d#d&zR&H}(ZJub~9ZgQYUs6_o~rEQ0wq=6Us-m`0}`{TzmBnBTAu*N!G8 z)@DDLu_Z?mY>a#2i*Dy!+8&f<YgE5yw3T@nCzVKU#b>o&q=13QBh@)CIs08gq(IS8 z^0O=d(1e)fXaRl(q>r{Zf)Dm)_UlmEp|d9nnQR%#Is%fkAn)lklKNVTH*gO9s`x&( zFqNB~9@_1iw!Ic7)Wl+PxL)I!QkFR&MWfMUTxAYV9-B3zCvo(5oG2AX)B+BP84Jx^ z&DX;-TCaKjjwCbE2!IRSrYLvGejy$i+#p`!%C8n=x_PC8A2j!TEk$mzRix{ruQ2e- zwAIwZ5IS~^R*dEqU(cHh?`Dr1DN;pMtk!^v64kS*!L-5u6je~4BgZ>ey5}YG%lS@U z?>N&9`rJ)ZM-nI<Bxb$d`S;@1EvYEXl`2AP!E@n|Z-xXL$;00nK+dC-+$pu4U_s?* zAFI1@VBuSmEN1Y)ywKOP%fjp&igE&2HI{@W8_1E1rAnu)ENg5)E?j0s!<8<vkW`%F z%BL|QtdEl^9S8gcDLTRf!^IP6+@0w%Emqw;?lmKA|6*#&_^+DTNRUB-rEP|by(da^ zk~2*G9~!?GH_k3tmGK{B0Tn^MQ#7-Wr})(qZX<AIV2dRzYH#uFSP_wOsJfj2g{)XA zR(}P|U;S679A7OZz_|J$C{6+V^-=)O+6@xIUY+nfh=&ZOV;U}{4+y}Iujcd|p!052 ze4?lo3>GlUcz7;--7|uUa<UgKzt_FXOO?2Y4v8A0hP(s_-wtK^dFBIU=I-a|lJG-6 zcYoXv33=_)>xRt?9X1Hcp=}5eRm^x{W7>n$KI4aK_|uZHjAsr1iKayZNwrh$<g@?h z@M7(V+N(WBmhJJ&q}~edW-Q9H?e3);R|bx~!ypqSRU&p@i3>?}XFA;=v60+XekblD zQ9VP-p*#&|7_Z3Oq)c=NGOF3HA7|W6s($M2?I#@rzUUxTNe;m4s+%pjDyf-sT!K%3 zF(<tILH9-;K+<2+tV)j~BIziq#O&X#gkTik^wh#eCEA(`GOhZc(+Np~(vvEh00~m0 z4V1SEM)rBx9{e2bdm+!{Cy32;Wn^%*e1mJz^Qs?-nTukS9SPGJMNdLw@vW%tpju1) z593a?X`UaI@7#RAw%YJ3jubBvW_!ElTiE;ze!c~;ezJ?k@mzY#@-}cH;3@ezeom!F z^?H6ViP03h<+0<KX{A<pD^e%aNj(mD$R&GKFQV{?=l8THukBTMr8>obW}jsXX48VL zlkX7pU3PsD@v1AWF{jCo(PCHkhcbbzy9E|?#v-zq5o$}d?oTz|=CPPKwqcYfjgU}s z)g>=%^B9}^+}4H^-ZOu*W|E?^grb$G2&$@earE<T(lwHxqpIih7y2v^6XAh?s&^Go z^<HYHI5aOroVX<TZVs^lqq6`6OK!0E*N<MFgy}0+pT;SdEFR!nxvK&0yK8e_P0<D} z9mU+2UsS(oF$EtH#)JZP+5i{g0x(&^3y56N%%6ot{)vb=kVvSx)_`<H`uQ#p%hl<D zC1EJghP~CJa<wcOuq<?kiqwos|MuL{)Ft=-Fn<qbnymXTH~7Y;V;*&hpkQXBNvZOC z86NL{w50XtauJ#r{;n)$m3lgj)*j2;@kPEyxqpa`CJ#G(HbIkL0b2p^K1(a`P7Z+k znpvY47-|h^$Z^{MZ3F^5`KEc7ucbU#eH}9M4m1G({Fn)>tmM?^B+sP$rC-jzX${rs z*8^oHVSoI6ukl@`W4d{dE2ETrYD;u3Z6r~nJ<oFTv-S0w&5)p|n+%N<1sk9du*riB z8K_VN+mjB*mHVA9JXTiay2`)sA0g)-j0V95aNP?1t}C{FqL}sa_mR)c0F(0zj-Q3& zUeCk7SMg|)kC$3q%p2;EPbVw?$`+q0)fX#O$rQdnoXe5IuA!C43aqh;cFg85M31mw z=64J2MO(&3Cq4PUIzJMVJJFBJj+Eb98$hH<;whHjog-rg5`V~Z3!mCVQy40q+ggz1 z76HAbcd2H{FE3AM!Uk5MW5yEJ|19Lh#~elc*+#QJ(N2{6ho;h|p&J!R<tK+ojJJt2 ze73eOvA7QG2;Ss3i~>DYUz;+_u!AS_C+I3Uwd5>k+S6zhcTGx++bntDTp+YfinbF) zAIe6?>W1iddvEY4KX`cg{m?CVH=2dMGAN@9#j*}$r;MKjM0>T36fsWY<UUp>MB%>c zZS$F%Ia~OjP?P;Ct=+hB*&lF)&D)tHlE%`GNfw&lH>4iibNtZUxA8L?LgQ0=!k-c+ z)#(dp9fa?Udz$VZ;iKdBPh)qt+*7|lvH%C1c^U$hfPSytz8S>|P&_&V{q}^J2@tGM z;z3yfPKANXkCc1Ni9gZbURSY<eS$1NvH`-CJ3mi^60?qWUEGdQjOa|~O*Nb8iTePl z$}AC9v_lApRR<&TH-zbi6YFNRue<I%lRr%uvdr&U5Dq5u0Frs$c1mci`n4*`(^k@- zL{CB@L%+_LkSvQwF^k0O&lh_V$0~!lxMJ}UBc5CM3CsiHLr5_+^>^b{?X2<KIn=W$ zbavek4;gg&B2z9LM<4SFYiN~7)0);kF&q|wXcZyYb_3lvw}4v;Dpsl})*qd^>^KB! zd$o|di+)%Y+y`PFR(F0`A1X0s-}WxhVA}NIMnwU;tu+`p5f_v(&fGqU;xk*jq2s3! zEzPTATnH*(`_j-EEgC_THzZZ9F7=03!kKdo3*3GhAaMmb7hXv}HxI8(#c~0ensz|4 zJg|5}y=WRa0AlYU@uw{jqXz<SxSs#<H>%MNU<%LC;VWn)cNPJDEu;bYowH;#w2<%N zs>C>e={b-51E3<f*8Kx++u}6++-?~_<)xE#qpyu8gt6vwDgE2(WZ**(hQz*TpYlxw zUJseW<CI$p$xUHNoE(An7Q#14+dx_$aA|evlxLMlPswF4y;t;U5sne_U<<8F1QJE6 zQVE`V```D^j31BF*|{b$YqLuK;toAw1J<!=|KgJUJdL|12fkRGH9V^y_t@cPRdSdW z{baq{PrHrPSvo!4(lOktGY}2APVl}s@0S08fc5pza+`p8$}BbK;BO>LqM(_JZ%(x@ zy7xW|@MK=8t;aqWuiwp0BzUJei_x*$O8A|sz~oPRcrrY>CaSW<T}A8bK9?lje@fV+ z-7-Q>XLQh#{h$<Jfw^f`PB!kwK_h(yYy=)PoN7dV6;+%y-+iMeSt_1txo`Fh#io9Z z81Rt94cMQ585wSspO!*}?>c?>7AyEIEIHgt0e*>WN#*u*S8A#MnliR^GeBYnujn)@ z82(oi?KQFm>MoeV?XWIu3R*>L<G#EqYHo}g#aYFda`1{i6i-pJH@QC`p7YkkK+<aT zAX|N5T{W?AD@K~R7xRM@rb_9+qw~wZI9>aY5T?rS$Mpkl0PyZ0U2oh@xX$KL!QMVz zC`j%5g7^Kak{>(5SZC*Kq5t2J8%K1dkj&12xf@_AS(rwU4?M{9ONUKMaxrWh{HQnp zEr1&+vbNf3b69Zkk!hh(xp&$LkS1*FtXX^I*vKt9SvoaD*<{DE4W1%nakDob3^AO` zLL1=tNzBZPX7WtQCO@cD<()6PUm+&tz7`%as0)zg+m9;k$a-x+AvYYqv_N69qk?Vh zx)Sw!PqJ5I+Lu(Tqo20L>6%JG0t0$tjLRrL0axa}Sq@xh9DZ&o9x{M=EiL4CQ+@Bk zPf`E0WDfPRm-{qk3G1pyv2|)|h8=VCJ?WOZU<LPpYk&EIBlQ9R)04+CMQYuS3HSzK zk3)3nA6_f}E8=>}y(1ZLs@7Eb7?`{LcfX>yZl9G{elp%tQy-E8E6)=AH581WTkjx! zw-7Ig`|0ynCh((5KpgTPT}%g0W534<cE~^U+}M6Fp%nhQh9q3B`WfLS5FSt*c>uE8 zd4|B;v3mr&Ls2}DM|APyEJi!KfRsaz-A<sMAZ5<yH8IoMPAWkK$#ET;j>3@z`a)kb zWL?rtBPGCp->P>={q(>%lEm;ATPx?_8vp*44>Mj*ey#iKoJc_1dUsIDv2c1cIF@p) zaASAoEHn7yQ1(TimG1@R=*1t9FGWvsoSuFXdy|}OC%<Wyb2n>guDxqe<l@Hbjhp;# zqZ_$;HLje5pDgsGa|;XWw(m&%UCfM2g~%{P8-?d>Ij&n<GQV20z9-|getx?vVAixb z+4`R;2w=$mC|&8?)RK8u25+>hFLuF%wp4tdYl!U9pTkSi&Q(H2ACwzB*x=j~*X6CB z_^t5Sv6QP_XqLlf&^=Wfd*>D=`QnB5%Kj;8E*FdQFfM(GOS+*-T9Q3<Ur#wRAIN^X zp2vxc<+fn@vVHt;5p6pm_g38waQ!n|!0HMo_w}W&RnF?sd0Rg^ha8L-U^m?5Dn13< z43xnP%_h~G#A+w%S~gF$yu+6<pF^9_Ptl^-TvC4+MzeAO2EPB51oZc_@dILRl=v9u zsS=%2{auD7j3faOt89siT`(jE9+p<s$$>T$0+2O7UPgEv9lsFiYralKl3b-k$R^>) z6Zpkeg(aWb1%PxfU16&;Dn0%2K)kD+V57xpZ2ngM=>^sIZ-e4?kxBF57GhGQB0xl{ zM@yy*lv#Eq(z*N+NY3)tyme`Pz8bMqsICH3m_rF*;zcl3%^0SG*IMWiiN)~^D<;0_ ze)O%rnLm8KccpJ7?AVbe`TY-sDo}wl_NrFJyKvQI#QZ9$8E5R#nqLr)e6S4Kz7wgm zcN7D}Y#^8xS{u4TjBWUPetX;J_8(^56F-WxMxUJk3PznO@{IN9az=lsP`vJkTOSMb zZaW|Re3XJp47$Mi{F&99<{M}3-GV5|JB`NK6{@92rE6$O^4Jn0M)>OPP`J9zp@#Ym z3y(Z#&5u>}w2!`ob!)qKlzYVXuI7m6uok`6v4dkn4srp#9_uLw>#WKiI(O@*0hF)d zhW#yNkJHAjxb#v;z+mAT_9R?(rLH06jmCpgkI=M^IoOUd@u=%2+z}rie4!cQ)EG87 z-e}}RJE$!kv=RkLB_73w-f;Wsnsb%(Zd77e>E>coux|cMjm+O0zziZQAt4jsjl3sU z7A<VFU2ZZEzR)}_Q{2!RHJwDa#WWz7j+nn3w;NxNrOHw?iKFfy&Iv_B#<f&|mbCGu z>D8aA=cpl&wh6SA1-X4GD_BF}`R;xMCgsnGm7Z7xG~ue2Kg}KS!+l^5`|m~7Pm+tR zHDt1^9EwrWHvsXdnN*20HlCcDFC_kHEhJ|=Mj8#H#W2;$aTO!0bm8HXRTefg3syQl zF6urr-&<02KgxeSpnI`zHl%6{<7Oorej(i-G42J3OYLqfMPeMyLVZ`*Q_1jejlHh0 z3_NR;@50+VZi(d<)*At#BKo`)TYoH^<u%$m(*%<Yg6ShXw>{Nw=FKduZoQw@6rA3~ zXy>+DkI##a60qtTrRxeU;%0~6a4m8sW)BLGzcF&XLH#{vjGdNI@4#Wcn{yxyRsDx0 zZb#;ZQa^Ckj{?_!-#nr35s7=|YUyi=Vxo?C3f1ZhwtLV9Mer)Q!678Z7bKCW3X0ZZ zYOdQi_xHyc`ftP!y4ZJYceFT-oSc~U^!46-CS($KVnp}^x<Q~(PqeQbr<H}(S)oge zWv<mcjZVz*$CoUI1RaVZDhkjOTacouG{6VY56K6B`WlA4&CzjnEm=a^{aVdU(Wj~c zOHt<>7_U8FvjEga#Ur+UBwAx~K#5j~IeC9w&G*<;R4y)7MG<n{p>yHLIs~^XU>M6^ z24SCu1KZ1pjGn_gZPT6y`Uuqtde79)k5Pxi*im7Drtuv`eZ7Mjy0HVvCqodyE|bJo zT9&%v|FSa78^uXc3dC<Q3_Y%HZyuZ2aSV>nvQX9&)U>(_wl;fDMlAxN7R6D27fJo` z;?&7;=KS;)fcF~4Cn1hlXkGy1Zy|;!A{aYhOX3Gzf=1>Nb$YV_4+iALM3v-7E+)xp z9n)31s(Ks1q`gJE{3{~QUP#I(RVBL+k7fAX{z~r6@14E4swXV6In(MeLtz_N*Aum- zJS9aHR<Y@E`~S9Y5dMsK%e6t}B(}vbX{h`K35|XES}*A%?U)X#Fcd$7xC6JKAY7ef z@TaA0Lzn@O#td)Xh%d1kr2oixi*A8$quBL)16*!#bAcAFT0g9QO(}JuJH<;bEljO? z@DAh9KQv`^ApSLiCJ~fcRQK0xcc!n)s)YLY8;|rdq9e8{vvH2T7Z+7b*z)N<0to~1 zhcO_tOZ&-j0N*}Aq;%ajz>}2Umyy2iV^2hyHr2j=buYiwK``han$j}dP;a}Cf#dQZ zam;MQF<qAcIcgEV&-e~?0A5wv**6J3o$&<yfV7;(R94y>?HVXVJbFHxI&1=f^4Z9y z7NFZ?M2|eI45CXZ3X_qf=eb}KPvesmEtxd2u4tA454KVDl<ZEQ7yZz?)N~M&YV>l2 zK4azkvwK2pjn;r%s5>Yi0;5K9;3kd-X{9B!iKJz3Io(eP9TC2Kb-axe`<J3e0tU7Z z8}(aN2OmWJ4#cbF?@^9kp4-{2Mw{g|A_eu9WDw?c#DG}Ez0!GWt;5=eQ^h1PgI;*I zC~__#Od;7;fgr=UxcZJ_ES$<3?q}d*c6n8!Fd=0&P->$SK(F#2Eu7!X1k%l<97|xY zFYWi)$=<CGd?i%u_8@;dIl%#tynd&+k?75<Nuc~(IIy}poUgpBGwx-6{JK}{Dvqyl zcIN)J6np4(iUE;$YL`S6DF{;a(dhehBRS7*hfO>b6&dW6>g^U#I6doDDPaDKL627Z zc9HzKe{-|kKS^;We!S^$?yk`0DwG}|uX44Cu6e^U!Gc=3mJ8gj(s^~v)wIc2VmS`o zjf@j<zPN{H+?d>08=Yo+ne!%^p6?$T4XK4PftHB6y39bIm7XZ=j)4xoyIg+;NNU}- z;$*WjSecC~HH2Z_u4c%cB$v4w#KNhp+I&<6rSjVW#n`?qtR3*CIRLG1UFG6X!XZeR zRF#$Qit|D{Aq7W&<08LZeOcaNBzW{M=x8B^dTtC8+N{ym(6oOlmFg{iF7CM4{+T?e zu6hZ@=xWPbe+rJ?&(Z)X9ARR*062ds1vmnGBC#SYUKA+4++xOVqBc==e(0t0m1E}> zc^6a{W*56SGYi`^8g5^@OEM4p-8H}S>(uV&kaP<2tQhFai9-M{`r*;P8VuQH<Xiud zbt>EVes6PQOUBblIgi!MfZ5;cl9Ickt+(QccemQ4VW}oq#WPl;>S2r;cWI!Y*>=k| z-=nQA<j~lrRgg%B9E(oiSuTF&*TY`btdRA(%jW2_UDmzptzMJ!0{X6%TaHP**Y3yi z-!L(urJ+$hXZ%8?e#CZq2=XR(@e{v_orxHoS+oJsswcA|(-esZ19z({S;ZhtSW3); z!;L+3Lye{F)1Q{1m}c$DirKZv!H^<zvcJrON&MOm-d}h0-WTXot}4)gZ*6Y~G(F+2 zd7P{`#IJB^Z08>BUEx2N`EI;vDY#o;hsy@0eTX}mU$iPpla3VsSR3;;%y{BVjUU)f zExm@FQe)=pfV(a6ADX^f!1WHgMn?DKXpHR7K|3>}qogy{qF*(BZv0&K`d(s?AKEdm zTt66cVVOI{ki&ZR;+;o7X?1zhZ>bT)lwM)5i${?X#O&2L885gosP)Z}>!|o*RD(o7 z!g7weE^G05;Ik!#Kpqp*>quy`=>D+DKtgprb)ca=m7O<f=k^!%D{Xac0uW33NVq^n zR?Cc#nnCSkop>x$Sy^@E_`3%Q`~8KMXDC^TR<fOAfT;XKZ=V3AX0S<YmG~{N<vzd& zsI#F5wimrJcF%!a$Ea~R#U{(qVDxp@2j8Qa!t87B34c;rKH+X5Lc7{-q<dcJvdr!= zz2Xt#p?#!0e3vR+^Et%Z?pd#>KL3CKy*5o0{nc<I6VJ!N5Kq+&{PBpVXl%hJRNAGB z<|vO>n0uk(6kV*N9#sgg5wT_tSTs=2ym>OS&zZ=+W&Pbi;UkIJG?IieqJiby^IDk) z#8l_k(LWnLjk~z2FI8_tCfBOy2`({yNEWiV0njm=TJCN$@`}HA(suIjy7~`I4kS*5 zB~*rukz!19bpE^PQ1=c!4EumYQK8C^?vR*s$7Ek7Qqa;?E&5&v(jtny6*S>v$3}6q zU$kQ~ta7imHt@Vs;4Cw)kkU_EdcFxI{4eAzN*aEr%00-m9PW1s2jQ-5FipAr+^11N zR{k67WD|ny1_ee2!%cW#33U!QElF4xVlkcx!6u3I^4NmPc*sb^-N?tp=*T{H{&r4d z6VUP9YbWb0Rl4+B7ROR_9EFR0-i%yw_?RmAIQiC_rf!ZGIgs}1nuf1+Nw^=EJhuqE zy1Dn`@~0U7+m<rG3`^incC3Ke-aspDdY(U=Uy=1tx?E`9V|F>a_>cM#9<wX8gVbjz z`~cz|-<sCRfTvs+xBUt7M*V1Eji6q_)+RcdkibbwH_#NFQtkKbG(D!Io8Pr4|Ks7W zQt4Hdi#=fFA^V?dVYQNwua-BswZMcmC&W`Q|1!m9aYuw4-=|tP8Bc(qSl4fi=y-a3 zjb@>HY|{^(m)xybAe-6&8@aXex&O&L0%Aa#{kD_;4{>k(*5v<(f1?Okh$3A>DRqRB zl2Z{75GN8Nhl)sy5UB}+Dcva{3P^**M0%98f;4Qfk)wMfCyc%C%kTZm_rCvu&vEdh z2OezK^?E(yJRj$*AP739&%chG5P!`hNhD@<mw6fEuH6@%Jx?xy#2nTp)RCd>{%)|L z=N=c8On>G%b02>bxqD>dk08xN$#@=AH&HE19dWx@?L(Md=8X?;WPi2;&MK{UKHV|g zo!HtSue*&hXtx8?9|_W)f2DkWzqymNShvzWTt8<EplBR`0AEb72Ynq)!B)==oJHx4 zskvpZgDxxh^Ok!0B$}1&Eh;BWo!?F7+~k0%&i4X2=o1dC+|lq;`S3?I`4SJ-MQR>d zF+gqq!a`9GsU~E<R>CWbuG*7ggq!M19^o%3@$-;d-v`#=31k@~vQ+;EcSrKkR4J+U zjcZxqgUV2mP*fsRbGk_}awkjB$ror!{guKu8kLHWK~F~I$4m39)s_0(B%eKM2cLAY z(_dBwTv+8xiE|^x2_gre^))z!k|3E09CxC_a~teu4*R_gIcr#Jt2|bt9<7+=Qz)KW zI%VDN=5sF8ke`#`N9HGD`gRe9s}dN<lV>`oC59TG53jbkjoKJhHr-b3^bm+_8Wl1w zXNBVf)Tmslyf23_M9Y?Bz5BKZ7ZLd_UkUJZ13DCI(jNl2H`=k*)Xu5==sSAq0yloq z*7GndKSrCC*WUQoJ_&1Ex4ScSzMt3THL}lSNFEcbBKW>yM2aTCnbRv-A_Qexuon)H zbTW9+eAhpU4lMpCFP3zcPl9~1Dv|v?hil*@YO<G5!tC#@q$kHttsYLmpk+z(AdSr7 z-v1<^+D4oDX)Z&1)7jN^aaci{_n5itO4VmF+k5nBL~;GdX1UwOw)o>o3%4E1<AzZF zy%JC0@S~4B{*kh4SRabRUBl`Yya~^pOz$Mu#xw%Ntf(|K)e@o;yCuVL_!I9S%Qx1R z1M*}|c{lkp=i+Zm@rnrF-i&wZ<Xo`fk}v6^y#8E*RO;k|C(NG-+h}>&n8DB-+-!1Q z2-=r<uar6UAaIm}!0*QDSU<lR*)vX)1)y)NzCLZ+EOBS3Po$*v3z`}eVf77I*UHDs zk~2NnHK2b4hY!lzaIPNBL~bisBW=dvTrRRhM$DtAab8;39NgcQOeB3d;M#>!^tPto ziLi=_4=Q$vY%P0<b+==}6@9Sk(<Sr7n73UsCKc(3t1h*Fw6M`hfM1`@rmblyaydX4 z8KzIh1Y@e3-pWbEWOm=+xMM$knt{!qi0HjWogfj@h7mTwaFG-iUY+TA5jqVQ7aVXM z8Pq}77;;v?oSvb2UruE|x9y|2b2W!OD)K-N+=lZ1N;B5b7}~C4h3Ynh%6S~<WD<M1 z*4AWyJQpCdXpBjW2S9*h7}f?lYzN-6bvip0)?vXxpqI=`Js=!f;>06$1ODXc0O7J6 zY;8@KB6nND`Jf-vT*}(#;@G<dag_oADEBS_eLkVN(Kir23P4tc&7$9<9%H>RLKQ`D z?K6qQycpSs5F#<Ir#YS6xs_Uk^n+r_#}5dP<BMx{U`}Vc7#M5rM4M)C?#_f)&+t%n z9#dq3J+oNWYVp1yi$M5iiBrhj&X%bC<iaIE)W9%S)n6PE+QK+;&;Qo$vr+qsl$%l; zQt<iyx`a!!da+;TSHQ!KAbZ8EIVtv@<?DV3o@+^vX|qw#sA-c20A;AE-)}iZjnc2| zCb)V2-6XLz$U8I8`rc>=QrBnE8+B6EQA>l>V9zU1TOXHORhM#^knl065%ohhN}B=; z-GeY!VGGBrZ+L+lszVaNNYa2eW8xDqp(KTxT7*dV2`)%&i*P*}O(GJBQ6JJ;6OA8O z5-%ctS8synQyTJrzbGP7b!T7e%*ATvmXxq%8^R9%vGFnk*lB$T8U%8MND^$JNpg-b z6&_gQC;nroYzFpxibU1Qe)kay#_Ious+NPg14QE5Gr{D&VTanI>_i-y>-+mY$@3S_ zWaLtzyhrEp<nEY8RnlAAp=v+#t$5VIA5?w(e+<=EUv!heuZhr_+Lnf<h&vuWmHlqp z&OA25WkY5GHz=+j=FDu9I#jANGk+}iUj4<<tj=NtlQ%#>@$wE{F1OZHGgRzk1lHqA zPYGxGx0Wc@UY@q-bVo>f+`q-5EAqUjNBjO6FJNN$Kb{irU<itSH`FdTDvZVSopksn zH%xT8@x*_^OER);#q)s5Ui>qc#{Iqgul0VPJV;ZZCd<U4to<CYip6;r78B=CCDaFU z^-27|Tb`@+1_*^$vvwyDFKnN8QZ#kHZ+A;ya6{Y7{_V<x%XzY7wm-LOX%d9kU`6U~ zyN~ZH1m5s_-)7cv$JZI4@_vV?9P-MLga5GX<D(Of#<2Qs!d^$OOhf+dibzW6s=~mp zb?MWVg72c8ZCz@@?|0k$b+jsMhsI7{B!>k#?{Qb*UvatJ4)1m<ydz)!3y7f3=4|mh z)<GIQdvCT%fEP<m_2wDoZ+?3xT6t=hzMJni#u+r<F(yV1D9r@fTbqA<;r#23=0UlI zTO^l;Ky_UdiBCH0n?*KC8qWU{5;?h#K7{^}v&sr>v?gr}Qi0XfQKN+@!Tv)oHnqnw zRJ_g>an~GrEHJ;OV{xbgKw4y~7c&aOs)+_F^Tu&nV@#W!`9HRj=XdO)f5^NoxaST> z&;2gfkVd`yPT@GxI>`#5L0kiRWU_bu;3a+MTWqN?#N6hSUTf+^G2DUDK%7|Vb@cFB z<kS_DTe$I3!<hlCvPS^_4iH0*blst@;oCrLp6fUFuf9~c5EV82(7ns%`H9ZD+3~+* z@Bd?&pJ_9t@Kb${=~oR}h?-B+^cR<V7-O2@=paFGZBFHW4Cpa#GoY_@73Uk$?6GKl z??(|to4Ili!bG)wP=Bl)HFt8WZNBicn-egkOydQ@H-AzJ3d<c;U<8y>ws`&9vR%UG zR%fEWak6lh6M2RK^^}6knmth*o|%iS_}0zN$sM|y+V^(=vi5BzLd~4Q-;MS3Wol{n zn>uS{Mf~Nq<r*caVO1jjPK!Q^$u26AxgP3pwk}++sO?^e530xKCJ-li7L$q6qSzWy z=!NccHfNF730rgT5>StTG)oUg(7LsK>p&=6f*i9<*q`B$Pgziu_q#n~XV89vfxdvZ zYrWIyJ}d9n1Z}NpmX4PQS!zz*{Je1Us@`>tNAa-}eKNr=jdFnJ<*38r?C{>n%{^6J z=)@E|a1T1vpIH#9>y&6$55RY{aH0JCbNZz{(`GAbb_bV~#SO*vGN~+_YkROTlqH2T zESN5XM4MT&n2uHRRIReR+qo^Bx}ZF<_k0b_2#g6i(0kYZb?m3WO@K_LB#sy9yKY)n zQ&(l$lzyXZ>#}6R_4w1@1=p)`8k>6tNYYX6#n$6BsU@q!YuwMe^QW(#8R~fbw%Mxv zjWWw!yLp9Tdy3Md$R$-74&pQtPS>oq9eb*CHS0j)OxMien9m)RfBh7*Ht!jMz?*yj zgr=nJ%jN)1Je4qAP^plS{x0#XvE01yn{&MDHX0}c>hdgxhbm$`WLt?hCB0%})OBbu zHNG|iY24=ok{g~NCFm$MP2f~;1csbo%hnd&Dv%&@#9(Mo|H4>&xBP&@X5E7iFzQ)b zd^W}^r!GrSpM-Gn(P||3<=9x>XZ_t=m1raRSdMG3u<#S!)qg#cBGV1J<d||tr?CB9 z5i->Kj#f^omg_T{Exnf3qp^XYAIRpd^$ysyN|ipixA+B8YF_zK?!=+a{y)TqTW2O1 z9Xbu6Fc+iePK*pIa4wta)63AHKc^oh$9F7OsB6Kf5`{`(YRVYuau@ltAk3=4?^EM~ zDk(TC;ZF3SL}9+y3?rF-+A`c_dU$yKX>)ybt>^g5kgdEMdET@1>KQ}$Rhbx#8^~H4 zJoir(cocJ7zKwq2r~T7D2BP*XEr0vu43p*wt9a%|G^yHN=f7gLdz+bZKn~f!okrFC zldlyY37suI&xp((7V@UdwX-c3*YO|+Tq7jkX3|#3r8DOd5Ix6R#>%fXyr*yLmg`t! zfjYC$jX2%WlK26(g5jsGk|3O`cgDp(&lNTe<DXWhSrg%N6S!B`xuRSHY(IP<6#+-m zH1z|35Apz7;h$Z=EJy+PIJTo34Jr2!bYXI1v*3u7XT4;yM3Tp!&0BXjAPw+tt>?%A zi)wOzjAD~lq4f;^Lt(KmLeAqa<vxtRk=w&$VfHZ`DDRN&&_?jr@zo*0EJAveDE@ZV z!P!N&Irtd4w#}kD*wb9fYleLqv8(*7?9HWX47N^*x}5;rE<!qL_QY+TJ1UogotSc} zP{58`uCd3IAQrO!I3WQaeP8+*kfVWSqw3F|Wc26y+dDeC;{9Ika<DUX)M>%#$ra>t zuCUqV5Up9_wW?n%$02Ejbk&-s)BoeUvzPLu-es=k(i&giPR~Kj?W$o({rYgBz`7U& z2_5#8iq1h2)(u9>ou%zh<9KGZGeoaH>>nQAXb+nH*Wsi8za2jAu-z?!O9(>goE?#$ zdeE<GaMxAoU|k^ilgh<A|NKZhSy37{DWOrMG6^VIJ04rzxA?I$Cn<dP+WcwL)segF zRtxBJDBF41Zu1Rl4f;pL@8PPN32u^aKqwYZHJaUI)RA)tun)Dbd7xeF;yHx%`(-xQ zUAbU7(*|Lmq&EEI^DgsWRQMBWmT4BSP@v4KgsC8=Zy>_ROZlZvaCORy`q5k<7u`N~ z7<~VHpjoRx>86Ag>IB@|C{MpjtuI>76dqE0;WanKJiWT<`71m4?q@ej-GI85AE@2s z^?HZK+2Lw+U0ch)S90rinzz$q4JjMute#^_nXIE~n(icP8||UFAs4kfU#F$Q*(C?w z%=hZtRjr`;uMe-47uq9=%z9nWeEQDRY0Tj4QkkJuOXoQm67?PFoV<tdsA=CHW|^iI zz(~CNfO^Y|7~zG9Bm}1~)v9osiNxnOeTB61@RX<YY<C6-P=r2wU3-#Vp5*6A?*3MB z`gxR#e4w(i7pm(LrS%A(YiI@O9N_PpMY9nm9gqB+EXqy@W)l`cak8*}mQ|}86i9cV zGMVc=+etv-e+(eN)f$?<99IqEg<Ap-v~Ja~q2!qqGC@yJ;BT7bo6P~IeHB1SC58YL zmKwJRa3rM71q0W~Nh>!qSlrZ=5Mx=sLR(9vNybHi_Vj=;DPtHF_Kuuni9-R<$KDxs z^Uti0Yz+9#Q>GS}L@uOn7M1%vq_|{OlLTS971hmB1&?0TVI3-1(il`ZD}T3N8e8^_ z>qZ#kyza`|Tv)fjr4}g1?i&7x^K?)6k6}%{(|0M=-{sqCP3?iKWKF7}DEXI)?Cmq4 zUt{0q<z)oAOMt@0iu_|0HmF;0y}ls<?IrC#vWwBErEcE|=4T5Nx{)#wai@{%uQu=6 z?P}&?O0P*><z*t0yMtg=sVnecXKnoNo2}=vZ^6?mr2zUk7GNH{Ubbiet<(%Z5Yq_X z$+<&g1cIz1s0}37C<<pwB~5IWAHxm3(l#}De^HCA4&4aRTi0Mi+K?2Zyq1v|>!9Ns zTf}@WrDr-PgW|SXqj(I?yS8lAg7e2f*_yYC=Ov=4es6GydDE$vOmB}4Bk2OjApOq< zIDpFJ*LyQ;fFu3O84%64F}azGb`}vc-)ZsYKZXKZc$gai3hHj>rGXF!Gi*q<4YtB@ zE!K`i^CuE9nMT)V>m;O(Gv9528_G3FI&pg~3=^w|d>u-O-F|PRa=C`KuZ0hkJ*R0= zbHAcAD3absnF%FuCneLUo2k$mU5KY(TM3u@jL)*w08PFYP+qQB0oJDfcPrRH)d2*w zmUHVTFL6Vg!dXw#MBi$&KfZXe4%BJg$vLY8U=S-X>lRBfbKncWN*4bN8+8177ke&^ z;r)LMp6-LV&=@lN@DW8pCLFt!P0F~(Rxg<^47!isF9}es9HDa(ClDH(jr2ZUx9gDx zYy*F|i?+VejhzE@PSx6}D|2pmWs&%oMo^IAnJy*uveL?LN68PyPr!W&EqqS&i&R0t z6RJ^L)LFC+QykJ~+2WEnw=*Gp(0M8gowM3XD4;zc`-g^+$^ZdBU!s*2p|faJu6sv2 zl|2uAZD3kcc$3g{PziwAm~dg<wQnMFVo=*s5vS5+1wG=tIRBu)IFunt{dBJd<?K*S zWlN3jY-o@2!>Bs@CFza;lgTkel&bl*i?n?N-_m4l{PH(f9%p|oz?W1z&y*FlZ|%`; zfeut)+nA8Pj<xKq{EtEM<sX5#gUS)gw<GRW1EqHFifISFj0K@v(N$q)$&FnZpSLB$ z1D=JAV4A!FnD7dHMo)3hG~I&M7hca_+`E?Kt6#4xU0BYxSKb`C0~JC&q&(D6NoosV zBu}bT?>AwsrVKo!f6be&s6_q(CiI`@yHCz$3ITU4u;ZQIUjd!N?ECBgJirHt-WMvz z!=gOc_hM4kj0x)Rd1yc+TysDb#U=(otRl-H=TI8{M*8)*axu%Ss$e$Zj<=xBT#4P{ zeYOZRr)k?_TswE|X>ko7LhD4g6|5Th_MLR2dj8}S;!+Au!drd(t0*qy8Ezl!&#&Dw zx}8>5_L0r~CZp)}o3=;im$w?<6__K>qq)`;4-ZtF4I|VVics}w0!(eo^&*@-NRfFy zYMALrnF8d(I-gi`aYEs=wfGCbet4>4G;%*Ozif?B4`AFf2U>nWFb*uV$?mv3BO3ci z@L(Vi4q+_SoFy6>rod}z84{^3UnD2@x8W3Ac{zQ#<^Q(smDw<$^hVX}=U1vGXsRU+ ziWRG=+!xb>Eg$!b0eCJEs%F;lTGQ)DQowbT&JZ000I<jjs+x9w92-BbbGuN|$Y0r> zF7IGC@zrJeB$x39st<XML;x}pODKXJp*{Dvgk*u8-;8z>X3jNXo|XS066J-lT<5lD zmb++n=i=K7v)o4s)@9Gv=y%Bdao#Qp=qnCK{^O^jm0&{;XF;!>@#p4O=vR=Nz_u(n zu0x1F9T_T;scyluV7S5q(VO=~he1xu6RYchBOBwr7rSj0GO}|KJf$X4LRg;`{4rX! zf6iV7bmR1GAgze!$h7HyE1TwsW<1UF>dLQjo9?6j4|CScf{2b=T*N1zUey{~)ux*y zJdp7SdttTQj*iSCf2Kw*>jQtboAIz(gOQIw>Uw4Wy}7$Q|1mgWf4Ry3ZuIxEU&O8} z5<K5>tMi=`eRF5eVPM&s=?&y+!1XM~=~eFvD%u!V(5(CF-1E<$xMbfaLS|pqwNr4* zK*vorZI+&9mOHSaSF6&wJ7-R=qPYQR4WJCNXpjk>24gAB8JKB+cikE6zNSq8gX<1{ zvtK}3UR3X`pdqlKH|C;69~DIn89zVoeNWiF>|JUc{R)wafi;XeH)@uwyq)RzK9m13 zEq2xTg%74k0H#?$l}Dm~)=cx0Q@$SQ5sQtnw@U~5_3y9*>MHjcko&v3ACtus?DDO8 zeeBP?maj{Dv3M=~HN>>fbALBuAW{vTP2KGxBSqTYAWYev8WuAj1emLZ--q*fcbWr6 z@eoQ2J)$WU@R3qC?U1QJNzJ)kh511ZYURSZCaVpWbq*&!c6trk8(F0r_}|g;phNHg z6D-Kf1wMVs-2=hAk}Yv+LBfe~vo3O{K}v!o9WoC(?*x~m#5aUJ8x8q_wJWu}X4MJ? zoMtEB!A4t*)vAUZ+4|!Xjoxoola>ZTr$oc`bJ?<Oa1FP>f9NXK)tN!r)`V3hzM5Q@ zGD081#Z`7=wSHhJawfwALdK$iQO!eiC+IJ*wur`Sl1I9awxdwy@9avc0A#Q|{{Bnx zM>57+$<b+(=d|WIf!v5Mz<R!`B6kg!DFkHNoK%wZ>tb4AE)|xV4G!<v@YU`mr8HCp zP}yL~+hH;}@EURt=fL3K<h4u&ib6{iO^&(5%}p$?beprYG?(qnFK?_;-F2)UxSgi& zF%J-wr;vpP00Pg(G|0Rmai{lL;2VwpouZ4P4<NzOvB|Zw8SL|Our@G)bJ%s?#nM(+ zy(v1tG12F@aMo5VGoqaOqQJ^w=2D|V!OXSTH6k=n`6=M$59S4Bc<#XxkxHajeCQB) z3{_8_Rp&t!SH(t?zL8jz^z>Qep)<?LSMX5TR+Ss4Bin&~i2?LU+Kcq*7uS_gb_PyE z<{F}d8z|k}-U6qJzctSq-9+tq-XwxUlm*WjCcrjaq&8e~Ybyh92;UEm6+Qb+{eAID zxn*}V>j=tGD9NS#VJe?X#!!9A)bG>KsYgNaIuHJqqv;%O?dT)UGW7Od3(Xot&eh-t zX2@j-K$V^kaCq17?;FMDwppkH9bB2bHTv@DT|MSy@rkEq-ZH*Q!UJ2aqgM%eA5a}I z!hK%e)_n{Fpu0|8_-XOws=*7NB5KgnU@gwFXv?KUdC};j8`22aTwFA;L{=VjRS+NE zswx(4@YAWOKVIwM*aeJaCfm$#$JB%L<o+c7?hI{`YH~o1CmPUao0JDO`oXDq@lTkw zbi3L>HJxIqn08`yU!Ll`w~c1xK-_#;hwV8szOzSG_cXp9q8Idxx{t#8|Bjm5j{KTn z>#Q$TaXw5C%DIuw%NP40e-fVOVIWrZwo*1|m*Y%=MKVW4w>w9I-Z#qkTPyF*Tp7g2 zThf?@@vxEULmM1sPhG`EWk3h}8FdA8f72S;;eVx?zl>|!5Vur4ROY3sq<F`&`1s+p zujKv7FPqb_Xqb<2^}yfLYoPsY33?!6X@(IwPg)EM+*7r_`ctts{gvX={OVSzPcP3Z zX6<LDl?_nMY=BRG<?{r3Mh94-j<v8LbGy^GJ3(xk^KKX0vx(iT#0O84mTFovOZ{Mt zhHxJW^ch8skO`>H&rDiQI9a3{sNqM-=UgsYo)Y$X`HJVrL?#H=EHaGJA~o@MYFz&e zPaks;i*@97xPSfEBS!jZ@K<tdlNWkEi+=?#droAyT<Wm|!{tO`$tFZItG|H{+|h_2 zHR-gWxn;KG*_fT0g;QLlr)2ngy*a|-yT4pp<}GTO^Q5-W!vS&uWJlsZ242iVs(HB$ zHMQ0IsHVjApf+i8s)ShA{(ybyp|Qpq$NBXl3?D@%w$Y=M8e}*ez~jJ`%5~)2HNF0< z<xRz>)a@MBc6DEz4NV-#;t_5k2&s{$GyJ|@>l;0?WRyHNb+EnEG>mg7m`NS;k# z%$0eN_v*?soJ>rWH-$T>x`|Kuj2qfc;Ya;S{@{DG1$mo&0_br_2#0{Hc-oC4p#+4x z05)Sg^M~l1s!kl-A2HM{tg!eWLpbVYjw4oVmq=WzIZT=^wRD+_6}IGW@;$$20ZybQ z7f(4_ux5;frYops7g>C>Sh)Gtj&bqzPnN;-!a~$jGA-3`V*T}YJ2vQq=<=G;rQrk* z5ec}6C_h#x>)dbtdPRtI<5lR*`~4#Exwk<^eCQbk*T_yBN-lrhqU&?fT1|zuZeeN8 zlz5D_@$X70K;Rz4S*^vnOjvHqx<HNVAjDRX{1sWXNz1)vwUxy&hIitULtwyp&r6=6 zhahZ@Ph<d2m=5j60HEgE0|O`L%qp6SU1{ben2#et`c=aVyOPggvD{s<IohYO|3C}> z%O8w7^^faD)zk%e^+?{>^&tiM=DMl~A62czUm=4&cDr(LR}EFF5Hx&ny~VlFQfz2? z=tH$jo2Kk-P`tu0?Ix~V4NZ|Vqf}SN^c8&IN>4Y4>TfXU5|fpir|o0x${9(}I23r6 z6{_Drk;zQ;x!lKD*?#WrWe({}kXeOZbh{o3kl$xD0RzEP{4@ukBmPJQ>}?QV03M-4 z#hZ}hfM|snDVlESN<xCI_%{(9yIVV))wN7%pk8wMQ5|rrQkmO3GNl2DrS#VJ_4*-E zSxt^7XIwq9($FDq0sJTT+%_+@9fohzky=ez&AD7wMLeDJFrxqd@+|{9bo*^2%kj|w zoeB8Xt^h0RT7xhh@};;!ODnNIToqL}ZwZ8*8h?%bwhK9D<wO9*(qN80b5j=j>PE)g zriX)huP+yzjZYEVQHJX6^^_Ew5!Sq)P0T#3wEP{jqRTM5;CaaD6#1J1k8mN`TmoS5 z6ua7{knGpc#`+bVIyE}y9CkTOLs8Q`kJ#yzgNR>+Jy;vwd8{RJJ7!+!xyG<iR)#11 zEEyJsLHWEO#YGURqf>E)ztX)k91le#>wIX<)f=NQK_Da#kVZwWq#Sx<ZJn^yox?=O zg9x1Ngr&g2Uri6Ifp!}X+P!8<;}IloF9!TLrfR9FHny*}mi-p$kLU}Ub_2hQzbG}v zXYQ|5&Q+}fEq{*rZ4O6kUg%JKfY*p2To<^G+2g`&F2_Z9MP2BPyX54HQk1hM>NFDc zITF85La=SnKPHYXz!w-+a%tVK_xKa^G|$G2JMCwA$t;a~xg8KFew)z9@+e)Cb9yig zZ8@(o7&%Qfv>r3W6}HrjNQ(_S=QKBK{W0AcSSSq}Y~}|gqk!vaI|8mc0@y#o>HKTy z(Unec=b`-77f#cUHG9tJ3^0JYs`hOnS}yOaE3UOcg44gqcwB8?()H9Up93zpZ=n7r zx4Eq>|2)8Tb>v-ozoqJX=s7a6+3Oyg`Vs8D78275jRIzn`yU7Q+%BH2{T?X@HA0L3 zTJTo02N{|*b5NBr>wL6;n-rx;;fjWM=5upJIM()Q6M?v&_`#1R>bB1+hxU3ibe?5M zZIs3Tmc$Hk_$Vw*U!cy+&F~^?i1&v|y`H(A301AnHjb!~p6}nFC$ISMb!Id-*yZUh zy2)HiAzjwFSn-i<plFxL5q6d0i453nyXw$<W6Z{&dMwSdTlC#@|JgSj3?7GwEJ|v- zAe$9=CWr<uUXzWHgZfv5rAc+Rnwi~rrUPFld<Q<UG&RPP6MMi&l?oiD<(N79c6HS` zTx~h}MO8O+RBH3d#KJVm*s<1QHOykq7yJu_COrxeLg@)f;3cK)2fYMk!B_p<xYK|O zO4o+vB!xZTWj)&k)H^af3>2~Ch$+u+8e3|p4F!8(AHIsd)TFVx4v!*>cN<5w;?rXr zoSe74%APEnC@z;?H~j@F1au&9%@UdmnI&ky394P6vIDMj%~QIr`ue$@grtWFAph48 zLJv%50~>)Dx`L(ANiH1(Etu*Q!0)O)>=8j|hTdK61H`JKUv%gCZnjCjD7$_Qmb1um zx~e3U4AiA1GHmN`@K~vv^il)ml$5+j-JPy(pD6}=AbJll<4**&KIocoTO7+=(ay0I z><M|@EwN<?`3Yq~KG}YR+xxVCrm=F&87}AXmiOGTu`LgAMqyh4W*V_PjJY1|`tF*S z;hJ7NIE<?7Q`|YnD)Ip5$!etEFe3T#!(!dToxB^_0S`+3)xm?`N)Nd3+%>5l56e6d zEx%DapF{a~ftP<yLxQSrif^e@fSzBA%BM!@*(?6|)sUMkz(A?nQ`K37+t}x$yle3a z`YUBLWkFod_dGm*>(lEOIYI`Gb*g=BTDO^d=cJU3Two^FunxW$JVAj!S?yig9QqXP zpM(oc0bmwt1_;t8Pqr`(zS=P_<eV<1y!>--D8t0gSnT5Dn{!==94fSYT|=1ssU8?O zRXCC1R_2r4&Kg?C{8x8@2HCruri#DX0q2e~<ob;OL)DBPW^fsQ8X6!OXLVsM!0pZf zqK+*WysT~8o8_yTD`O3`mkzp)?xKE`zf3nxDxzO&Vg5{l#x@I3E+u<qQ>6*OFc4RL z7CwEJYdpv9V|0b{a}RjuT$yrJ+$Bc~kLJV5s>rF&$DNm@(R#xe4eHQ0YMcQ%7I+TM z9t53~T*P^FyG!~6-jw?AK<OK&Dh1D&KI;jI(ol=i9GQ=rQ^ff2S#|({>1TJfhj!7$ z+eY0aHX-V6C!8~M{U;1AII=fo0BkcGJ{_XI#fIFw)ufqaaTs~4CR-`NR=s;-q29qT z-z@j3bx-vBufW;AX``}+W(T}R7tHGcC3nuMhM-8q)efe|8|v9F@MMJ<lpqxfc`ur{ zG~bbmAJ!|w_RCC86iX<Zh4Erca_TW4B=I3xJXS&G@?_Q1hQIDP(#y$B96qI4Av5fI z1K}mb8MnF(E00e_Ka#OEmTJ6nh5>qL;HBbPVP9<Hl#()Ve4^;i)RqufYWNED0mhjR zN09tMZS-5z{OnI&pMxpfVc~ULx0TKa+@9&)FNJcTc*re4`G#@A?l0`XE8B7|sKytF zUjE8I8uYtMr}`Q2#ylsp9qwn*&fCzhH)+mI2mS+Qr{>6o9bbHX`RB6mo$gg@&j0ZM z0wzXbGsW$NS80<MBiFcn_}+im<TDA^2PJ_MnnF2Z-Y?Z-sQM^Aw^mAFXjqt+_}yKv z4D~av=!trUF7)=dy@s1*TT-?u{g3i$?U?w)F9!QvF~ZsP$JqIlS+4n9kxad8`P=#P zPZ8T6a&L63y1*h`LZal<AQzE(ib7v(7Dr$34A;_Ib<X<|JLO7rZgiW?(Iud0o2^09 z6|6yRWj^;Qk{Y6;G)dy#UoR`(2OR8ot834M2wzsYlu-#}RnA(>v~N?*v$$xMY>{5p zPo!iXS!z{ORiz0NMa^F?2+h)819Sd%StOVqD0Cf|`vEugycZz!zT|04-VUrP6XO4f zjqR6X{}XoYr|mRW<)135r^Vr&+OuXx-1R|uBLCDaOJ39cyyO%lj72&qmqB^IRE*Ny z<zE8WCHsE?FFyqMb=|iN&d~HIZXIl_Hq_j9(*V$Lm7{pZC+UZAH<9V;jd$pW`F>uU zohYMWg$zyo5iijBa8bNGVyw9~)He9bJ2(CgsLStb7~#*PxF`~3(xR`s4Rht(hyjAp zjVIy5>tvfZ?rhMM223#4KGMsE2O*?H$q!sLnzAU!vMXGcx_ExEfBUWb5x&e2?nsd% z1q*TFHr3Q^zpe=h<J_*x`Ns}<gzsoWSq2Zv*?UQf#daPCQK0un)r~W|IIwlx-*7p2 zF&WcA2#cgayo#KTJPCF^(|s)COV5NjpWQC|xdcoxx@k7^Xl^THuHj%aH}x&<XsPd` z6JN|6@%$rW!Js9p?>yUP?VU5cYSLj(DfR%W391t%<$jVr-yg$b%7}&}`*|l7SvnD{ zGjnZ)Q--%VGPyw=(Wh8;fF9uQNr0MCxcvCuHY@c3km#y1@_=a)%q5i@Fq`xxvSc<Z z6n%N7L&74-aD>K&xHd_69h*OIOCNohw!ZQW97-LrQwP51GA);l{}`$?2BexsYc%Qb zmyxd$=4mDd?{LMGxStkrk&T>aM5$C$S#YYhXCguCHuH!0)2EM)URTLOcnBzc>PWT~ z)ml7Di@aGzw6fvp$^9++?F=CD_fgm!>qco0Dp<n>rGfuQiR(M!=<%kzgX?IO3|28_ zh|+%+J>2Nm$yeK@NCAZ`j;hJb&H1oy6m;Bo4^B67yK${jiMBgMN0tZC*`aYZd!kfe zws1P^-y&)|xVBlknUWRxin8>{zF_ToH}s08!*P7)lJ)GehtGiTz8?5J1u#k6FQE35 zdY_Ot2nVrPPq|60GZmr<a=JHqO6CI|_)i`bsVR`q4EiOaw<jhXRF)Ce4}O|W()mBS z0=Ih-JVwjTk-(hsTpHEjFjX!sicQGV5^bn~IxVOfQowUFA=NkKH+_u1S2xFPw@JaD zwOEHEvc@#zQQ~zYGS}$%>NMS}H=`YQ1OEy_#_+{Rhc1+IJ`ZQ2h~pJ4+eGHp_Xdt8 zg6>;*%~5^>eoV@=Cc}P`Bk_pTj3TrB?BnhVU>i}>`j<1qZBbr$7W)ae!EnK2>Rj0h z;7HvDAWgueYHY7b--O$nFDAe3LT|o9|HNRju<*kCZl~Y>L0G~9Q4hzOMaOA+WEu|6 zHR2^!tAu#|y#AIrOsoH-!{s^mDy|gRrF#JA+K7x)I!oa{Xf&jCQ>jz)DMh1Y-V*Gu za%h&x65G$q7@l(D!0XKZ&uv1JbmWd3e=li(i8_4Pk;y*@4d2Un#$(&~<3r7)rs)0m zo<CJT7+JA|1c*?V@J~jorr73yE!_H)_7=redI)#p;;#IAf$n}K-^hcw;7p!+a@_l> zP4KfcXi<>p;WNhg;a?k@fT}4VdE5{#LK=uZ=To+p&J_jJPsS8aKF_5K#n+=y`oed+ z6qT0EC^Tc>V7O2)+<bmr#eQodI)Rur`rPYoXw&??`ozNrBjp9cz3NqO>xD|cW-Y_M z6_oh76s)HD)NWM}EFbJX?*0lq7PLyZAX`+xZDb~A6B&3F%Vad|nDNKD-Jh>}i@MG4 zlmT-1!!B<j(eHx+5)NDkY(-ZEQ?g$XvlE}nE!F_uma+9wm=q8<JBXBMx3y?|=1i&& zRsQv?)7IzwBgPhm1-`@B>Xyiqte0eTd(l3t!Vm7Jc+%<1{>GpcL<LoD7RpW4GN&1k z3Pz;}vR5BR%O^bWrTtKzIy%4a3+@S!aZ&_~x?#a6lky2&j~sKUzN$)5xc&G-YR}D^ zpo2fr2jw1G)ZSUJi~zFMG^^v>0l3aNg_&!FeUa<lPu5IQEuGm(4q0eMDU1#&#SvU9 zeNLN8<}%F(%E+Ke2wX{Tqjer~{UJp<x16RCr`=+0)T5MQ5&r5qrQqkUxsSFE0(`qu z7tE-=Y*93*LRPRRuL3V&d|G6ZAtL<yXK2Q%H5*MdOQ>Z<myD+~vC$#$AhLh?0@WqE zIj_OZLR^kbXL<t2hW=kp4**DHN~MQ~eZKYNxVietq@i4=Q~BjTKi_1>F)Hk$=m0-< zzRA^%ZDz(1!ZzzHF;UGBFs72V^)85w`mzZ&C({<AG}i+a%PcIKv9>A~lhX~4LzUWo z*k5Y89=U@NAUecRg6^R?S1E9_z5;!wPjxkN9jO{`y;~WQ)eT-6xRa0D&{xz93aB;h zn%`q*E#YSTC1+`s+=&%+nzhH2OfcfWZ){`VTA~v)UeSdW;G1e2mv`SVjR|aFT<dDG zXw)RZ!m495yI{3Ow5Ok2(>){+_Rg-SOUI$pcbQGLO{AJHBELC8s-&7_5C&p@^a@CK z%|40n-rPM`4^n^vAOriZnLRU_)_)8ESpawoR)|s>!l*%JV<hxO7k4o(FK<eI>ff#V zg4YLTNLk!!$|N8YDF+ftdo~TSM0~}w_z9=6pN>_DM+cKV;9>tKyy<Q}Py)nJqe>Af z?&STrFrj{RO_R}(!p}au2_n&&lCeb1(@#Y9x2@tj2RNyT>ge|Avt+x`+teTv(-aaV z_g8I*j`XR4?EO^>^riAf^E~8_-L`2tfG<^W%sxY~={_6rNonJim*CF*e+npl5-bL2 z9I|*NtNr2p6R#Tv31gk5_kS7QeI?4Sx&=xG{y0|U*{r{03LE_taG(ib?onZ+UML?m zVBKP*jHxWI_DA0Ht}Bz$%*(uxJHUssQG{X7>c)Z2H=2+H<+`|1zpox;emzQ#&E;Ss zCH*m(3>*3wne_A|yHU)GdqPc$E4SQfm%c?9=GSJ{Q9m`w<g3%(Bm_u%uHGA#9#`l~ z{`j;<$Ds8dq|8&^G~h$-_zIs^&FB1|-wBpq9~#mIip$P}!JR7maiN|Urff~@E%_hr zirr`k=j~>sU?l(lLnXOlAa_IX+mr$>Kbtr?nfXIMx8x4Z-P)&pCUW`;g(aeDfECF# z;j-CdAURZ)H8FG=!+&qS%#VqaUpv+q8~E#OUThf8uVUcM`<H(hW<_2Oi#ZH!R8<O> zK6JUQB|aPk^5YR}4r~PL|DZs-_JHIuz!E;}JQk6v`NL+f=+|l!2+$%73NezC;{qEY zTyX`^cj}GKX6mEOwhPCz?wi)EoTTY9<ipVYcK~O0#sT+?8o%bVEm`Y*uR)}TZdCH) zWU5pJcGaJR3C$wsr!&Vrs-oC6rwCt;V$v_#&W!_20n+E7GJoE=&&8NVrF`qDhu7-r zsv^y88BdwVv)|b;a4@KAo713=#Fe4u^8gJ7x0{=t7p09(wDL04NSA*2qg`49NtW2$ zD=UEp!euJo-*=>VScfw8kH#`Hy!wv;@AMHRO7Tj`&6}D;Y2g%l{j9Zzmn``|UK4$^ ztSy>!ZG~H16;=-j2A2V~(`8K83yf0aBl4~#C*RG4`ZgC)iO0;UQC<t@_w;VwzDr7p zyiqRmWNg1rhXk)I&{Bw25lUihNeewa(kEJEx$S!D-cLH;?kl{SKSiRe`C447(6#Ep zM)jP5gNI*;r8ABnz1CFF`%Q>34L(Hb5ipOvo@Eisv+wtA`A3skz;edL7=F$JF~Boz zq=j0|N5RRd?JexcUM+0(SpI9gtF(`$Wl8z+g~nI4hoki5eE(wu<n4(+*G8%*L~rOx zrbJZ7s(_|p)ecvq$}T*q+sTdUtBHk5-wAnKbeD0^<fxUhl_cFXn}L2*YiEureO()! zwJm!YlJPD!_4q#WN!yq_Fsalma`5f^5nk>hR%N^RU9je$0Mh{mMP^D2%4abX;6R4v zQM5%eJzHM<ZnjzN<)E=NQWG|^A6FG6<uuKsaKqHWHeEHubhU~9?Sel-I})(@M^P@^ zr=k(|?j&Vtk=RYb-RL{K%8cT5H(MOp!mhRr4X7V?P0A`H2;*<JTy18Ipv}!ST#*JU zofqA7&b5{cDE|T^d2PqxRLhT2_>C7*pp>^p5|P_Q1!o6U?>-f*NQ!;(PxSe}?GicL zY37tRB%}67wO`abR~MnbE`^bt%-W{04-^+-eQx2?*L-I>(2<Iv1Nvm^(3l(poWJiK z@RgG}ewjUmNuYCgFG8Ll8hJ`lKPYKZjC$Zryyx+yEALA{@~Sb6ks{ZP*Wk+R)*tlL z&+zL|THCpAe~!S(T~fcHY6=Ooq;px<l(2PR&aNgnSr`nrN#);HO2M!{QdVAXsP<|; z-7?}T4AhO_CqV{L+AWDciEY_N?@I+3m}Lb({n+%K0e(T=09oo==#}O#DefzW&INzt z#R2QVWsUzBP_G;0DXAeQrwhaPZhw7#%AX53KmCE`z0GmX?TFVCO8Xbj6j|ITSS}HP zlCv#+7<hMU5L=}DbMhYDq|yqQ{J5fY5P1=e*X#;sY`}J38<TS{wrnKKtiw6Uhn+TD zo-NF)-YU@cW6RzfR}z&oH;unv^0!&HP&t|D1kQ4^f)M}NUO}$@cXRJB0l3na=dL&3 zW267VWZx)-2q4<qg|3b%Br#ek<cSS)u8ZuM&~#5X7Cu2oV%?%>GJf-{KKj-&Mxz?P zj_kf@F8q=Gb?W6OAcQ!eCB_#L*?3<gfi!b={DzTZi51jETKkb*NZtbo#|fe&r#>!R zgCnl<NYXpYwQi(*v(U0cpNMWb({uJBgc*|Io^=Vu<T96ab()&m5g-k{j0_}QbCrG# z=7~^enDhtRw{x+h+j>X6)Qvj4Ei$vEzf@Qf%!xdS)06s%y3>EfD*nQNFqUUs6JESB zI5F<G9p9_c7IIQ<K@=ew7T<8*rZ{bM<->|ki;j8S6y-IizIQUw%_>yCwq~)G!R@`c z%ahjTvZZm32!Vvf_`9vLm;R`lGA(a%&l1NkDg|&;v^sRY=@vd*|I2%;{4?bc5cbX& zAeC%>h<Y6O-#QEIP*K0(1G5HC{1L4}LSt@<Ck4k(YO$#fKPM?A0s-Q+H!!UD0M)5( zv9az@6nF7DA7^QSvclUw)&_<*dWm5Q>l)G&rj}57^d@-hbq)9B`yw*rb9QEjpyyV6 z6Q$di9dW(|Nebn8_bSC+B}p)zZT+i}CH2yRn$?OA;H#rBHEn$ok8tf2YdEiX?aW0X z2mzGw65TdRwFR8iToHfS$VF8Hyhv~dTzOE6rsQwu9}xBCCxNmkk=j2OyT6*;1wamB zwu3zTH2h@%u7Gf36ZTlvoTzNhwl&pz5o~{o^&K$E5J170I;$H2%~$oxa=oY~|Kp#( z?*0C`<K#xQnpOa^2~|ll$AB)7_8L17BBX?Cv@fBC9ox4bTAVRG=fZ9=`K2YTP5Z5` z3B<FL&?E#DeGwpznN|(iI4x`TL$kWZAF-tV>EE)8wBMXN{<pcS-yF?^1c;){ku%oA zdyw;HU`GDmY+1fveL=u(+Ry$yP2GJij!mmz8liOb=T~RU*t%<g`%c^o0+tWlrDjdB z><BU)D^t5L``0VVKwKwshyG5j?qRs>T65hIuJ0gqt{8O*h4!11y1s43XEyfbv*+a2 zwcWFmI%|lbs`WZARt?<2_*USOSi0O==_ycl3FiXnB8CRechb0>Wz;+*rJzj_{5#_= zuX~%nySUGng(jW}K&`S<9|E%<Y76z-0Im`JmC*TGe$(>tsI)7l%z2ncM#Sf2Z<Y7? zsevAWtTyZsxEnAHSY~l|&wVbcQWtOgk3r|fh5l(r?khifN;QmjlEt)M|Npy8)5dF{ z4(L@t7q#EQP4ykQKjN7tedU>QM~s}_S8v-DFyRKU?90a>Q*eim2Gv+OKjHQjQjFYv z=;Z{SgRQr!JG1BW$$>UJ#P#VL!)iWd#I?hempHS$+Hmb~F?M$5D`+e@ms}fOI7+jf z7vx&F#;4v{7xB?{A%!WPaqH3=5Yu}bi0M5#hT%XK<in^fl#Gx2dBXG$>6NW3J}!`V zZ|2<>`2NY)$El#7CD}+ztC3;yodk><$73OFwTk<|bZo`C#Ar?<i|f;DolEW*q<VoH z_L_A3dO*d)T_W9`xI76tzj5Omj!W_2imqTDf=^d6>AT?6cqOPK>6w+L;2(BP6_$Tt z9=?~g&&pd6yAdv|jpx~U;<Y1HZ}6PX9+Sx#@$7AwXy+-*em5y2`YrkkEQ*a_-<Ib- z2Mp8Dvm7=w@1nIVkQ(DR7y2mKwZ$(s%VGFy66kO=IUD#Vv3!>>r7Hm-a&u70YMGCB z0y=NJn*+?d9`nN=JXur<;iG1@x6%c$I4@g?iP@j$__p2&e7SXFOIM+ldX?l|OS0i< z&2ySQ*FrvN8mp=WHU>W~@0{%kROA572(CAyFI!@wMaa9k7m6hf_S`agHG^O51A-M7 znDYENPu3e2)SwRhZA;75xgoJHw8&Qk6(2PdYjmd&EBPcjW~<sipI|Y=imOx!tYkRV z6R&=jw$4rGDr^TG@l-*7p+l^xJ{Y85hssQZG)+cQiED0i*nAEmQqw+Y`@MXvv9K$P zLjef;fngP+W~E>qcL<^`Vq<y17qMFmA9(3r{jHSt&Qxx0E;33C|0;7l<P*EMxUBX) zNc~>1%{(M}SkZ^7P7?m=aSS}b^9pN_OZ%2nKCOHjCEp%iZ)ke|WCap@M@(ly%hULO zTvM3Hcpf8GOBd@SUis-ZQg!Lvgx;**F_u8*^+!WoAA_{-Oh-rUNpTsx9dahL9re$g z_yTwKomcl~z68M$Us0~dpa?ZX4*>mq#cB${Z3tzm3uE%O?B?R9#MJ@_%T`v9<&Pn+ z7@N+g7p!fqM@3r_N721Z*G!(CoTgW=?9b0|sPX3_*GVm5Rauw2B~zmEtos9%6$MFV zIy+8LblzHkNcR_zWX)O{0tpyI@-`iX0hYW{C4&GA<}KCjCqX0bZMNNyu;0Q0dlF5a zqp&n8xSQJ-NSX)6!B=Kg6tl&!zgahXLqZp9MdbvXKcYEa1N(Arl;tSO++8u1j5okG zj+8AzH(6huj^K0Sy>j&BQcJ$yK4;9l;CY#=R2!qA!sI#qUyolJ9}m@<yx6-72|>Dr zhjkTgc{;eNspqZRK5F7lIsC3CB9|bL5VQ75Fi$<iv-u*qJGN1GzD%jp<_f*@1y|ya zC|23Qty2rur5pFvn+BW?oWQ*h2X*mXIC<+szU5?}+YA3P0%48y+}~(f_N=2T7JopM zZtboAF-ZF?uX~R*k&ovJ!_-cZdW+SRMcVMD*IrepJll8!NTV{RN`}Efcr_^6o}x0K zsS=u0xGGf`)urTwB8KgnKX$M1VmyCp#dnM{57wrPth^-kZuAzEt<>$}Q)NF+;0IsV zw$ymG9Gx>q&j5gRKFr*dH_<xw$Wr#AY3*AJF4#rE_#JI9ym;L404F!2@BA6QgRU~z zI=&+J_xf1Rt%4*V%1Ff^CFA91Dal!Vq>(ZqJli<no(c9<k!VbOBID`1hnN%^l)`{i zn)AZ94{)yd#$*<{IZ2ke&WH0OKAQeaFw1iDB~X+)5-5rM=(9-BqtW!?t);6)PTY6S zJi4aKIq=}!UoC%rGmX1=7nJfGVpIQVb>_jedV+e@dEUicLEH1E)E4T>^`DXtL#k{- zo=r@xBsyR@l3LZrf?mQV?c)}m<rot=-XLu0oc4eSd<8n#LOus+%dH|S1y`|gta1}H zG749fW*>*A4Bp~@ZxsJ%Z{51-zPlq+$HA@vUscN1tBCMLv*Kquvt5nb^IU}zA=^OE z!K&nzbXAi$=~c^R);<m+oyxxMH-(^#I~r;zML)C>o!udDKD#DOX|Ylvi|k>eAy1i! zrWqA#x`V>D*m3<h-Ow3z5?lRG0AO;8ipLn5T!q#cm>Ouk1UaX0)H<qen7(G*^)Ow@ ziTr!q0hhqh`H0ld4@MhhikvLOXooN^zU08|^U}Ou@`5T%J<Pmkt^frGFG{_NtP_M1 z`R4!4T0>oSiN5K5|NOfE%NlnZ9S6R*t9)Fa3v%7`RUJ0leS@FYpWHe@oy^Sy(b*`t zV$!CibqzLgm(G4+MPKL5uiHO-*~(miX}cm#6;P>wfjZ`bQz-g<0QZpVUW`%OK`OX- ze9aqn-VXcPMoL-)DEJQ;VKs(U_>P;^NR*T+@~uLu>F#Fm*$Ki#=Iz#&3BnT~h@3az z#)^t}>N};#B|hftmn?)*Y2xA6qt3YfZ+;y8h(xkZ97<~*6K-L!!6()KX?8%`-A$o; z2J8Rjj$jxI=cXs@6h*T={UBc>xg06GHBIbLu}Q1Y@q~DIaHP!u;<XtDeCmV~NT3X* zQ!>*!8^Z&4(mk(Q-S$^^5zL^o{T~AXV?b4(-85=f2`KR=Mg7`V(=44l`F8M#PMUQw zws{UD9|16GUeb10%FN|v1t(LwR61oZN=o)zsS7FfWyWIiz{y@UfQ4<C!_%lX=viQu z5aVORDh~!-L~5||>(!fYlu5e|i?eJ6d0ZQZeoLx4j$A7lXyhiXH|bbWM18l4bBOJ> zXoW9ax;sybVnPynA(TtLr!1PUQZh1Yg-Y>PCy4y&dZgcwfR;ux;;Fyt>o6mVc+!i4 zDY$Ntg{)=A?qvz9_*@Bru}$d>o7I%m$PlKEn>UPzZ&*NO(%JTxvTfb%-<}I4iAVgr zD`xh5G=-esc%}0)5rFy#y*ExadOEUMeaht^Z|30LFbQH04=o$A(&=1h)!T08!uyJ4 z5x4hBj{WsiZ@+O>tNDF@%i{<Z?*wd1XtF53uWLS7@A{Vnm;BA@zA9XgDD2};<5Mm4 zPe8*r5Q=Rsq;Qk`r~}91>yOEsvFQg~+N*C4FYSQkPHs0fl@Llosh_>_;JW!p8w>LO zQZu&w(W;x<_giQ6*f;*HM!N~J%5@3}kW;cTNXtjKs$)cOEMZAXqsL6MGvtcv>>lCU z9aHq2DUyvId~yL`Hzm<-4Fu5?zETmUI1+io6c=?TWT~<?`g&XIBNoQv_P;Qbr<#b1 z+}u~S_)1eR@|iNG3NxKKVc=Zg&Qu%G;793F6bhpnkJXhdGQr2dV}3I)COq(N#-+hW zt#SJ$)56q~SwSU(6hEmKUf{1S4K=k9hst}ut<JA#oL#NOLfhh4&7F#drgfYybj^Qc zieiG?yH`&7ACIO1oJJUC4a?LVBOX?uSnS~yAT>QCYDRdtW9Jb#d0LUtq{=2DKxkAZ z=}AlCyyh4&KeXaXb#lw3)J_ZSO!}rnPGdXiNw!Zupj&JmP>T4Ep@Ifc)#sel@HBMw zdPYgK@*g%Xrh&@<P5gSB&7S-UgnBy+Xx2-F_yHGhcz*%Gm||r)VST|ygO@QctS9z? zaV%u<D=5STCPT_PvzjS3CJE3EV)TZO`jsMYmbwW|wbh>qe7ZY~1)DKdS3PA(z{#H# z(w^-55S{3oWCV=Tb}=DptfZDm;FkBJNSG#|l-R+9RorHEIb~Qk4zs>j-e#r{7s3Y_ z-;3fLYm_eKB05}9_+Sro<X>(7#AUS{hBf()asEb`jbY@WVZPJZ`I8qA<JqTg_5_N& zwzD4B_*5=2FWyp$)C8)wpqw?lQnLikHL;7ZWu0S_MjHrbxb)R?+t5LX8y_G5?3u-( z+)midlnPHAcM5)o`@*$Q-G>Pa6ne=&d<-WA+6L258gj1s?4swd2&&1$b8`*U+>4BR z51I8t-`YWBg&Z+e&rFmD$U2cH8R_2);0owpHHa3f9T{iCOikQ=W&;3#r^=?%f_436 z($+M$cr=n%_Xm*Otyq@mQm%mxth3Uf%*}>dzx+);27-H~A@&f)`=#om-}Sj7rNSKu zlvZ;e|C5d*zyF80cMWIy|KrCMIYlJr)5;;0Q_kfqIVDLdhdC5U%rRsbi=2fJiX0-R z9G2r8X2O_=IZqB_b0%zZSj;~EcfWi8-;Lkh?{)3|u3dY-pRecZahw2y-oVf7Y@-KV z!@L7t!k0g34js_mJa4!Df2LUnFIv9MX9tY_)6W|#zIEIUNi$^ZbH!CKo^An53mzaK zK%V<wfV>96lAK?C(m`|-vE4;wl-n5wFRyB8V>sU)KW~I!xUdy=OUD|owXFkKT`E+s z``9q-4_!r2rk8s~h=`<*@M$2&Yx9wg$zsZ9`NSDJs0b$1d_c;tdakEQBD(%mMo$>v zBFHcX0(Rp<N<1$OR*!o5$~U$CdDkDtZES!zM_KI##U~dMupW!YCob3}iGGN|3R=)V z?Ju3L0)XTfNw^a}OIjLVSeGsvWipk*Vmz*GO)8~uM*GhyXh#Z0e!QWVqU7|$$j_Ot z(V2Vw-I`4I=(M44aCwhgxHLxGFY)HR9+;2lGkRk<T^M@V4)vENQ;1sK(U_8CC~$B= zs&3{A`mT(4rQgW!CkVY&y7I_$$%F4Yi{-wBJ%F;2QiV3Axss*o-gG06df#Pn&)z+P z+T^f!NIUO8i&}`@S_eA`P_S{RdpQ2Iimt=7{}`(3vy~i-;nNA<x_4`UAom|I5b5?P zEND^0SAaS?RozaI^WOGZNRf)9KT+!TwSIq7r+u@oo%)6-3pQKTl^&7WP5V^jjImvC zXYi>$QQq?1+XOc}sMI#UVm;0*RH^o3U6*l8wSaqW<0za^&5>=R?1=MH{Bo?F-a&BX z_jh#TwQ_*>R2x1TgPnl~6DJfaP1L?My$x8o*_?cfeiOUs6jDm#Ls7KT0f;{+Dd{Bi zAx3HDhOJx}@syx8sZEE=i6UM=@>c0~lK2+udsA9zV{)_U>cj=T0KGQ2Ro@;$zo=PH z$iWi{;-+0KwuJ}?JH9_S%nsJQWo*CLe?3Ou@t)q~1qV>FPf$SuNWdMiSs<L&g~gM- zE|2@jNnMrfpSvKrp=ZCP%Xhi@%SMD08I7oP*kmg)W6DBin*<K>_T9tl^k-@x<BI?l zCj~_OguX&?9BL_tBCUt3E;XhIMqvFU7)6q@Wi}mR^T=g}<27hpDa?6tdz*_^kDMq5 z{)dad5KpLX#1_DAIpfW<vRso-2uqiFx4dN1oHp^{KL%)=&|%HjX1Fj-jto!siJ6aA zjm{!7aAF>)KH%2k`SKjKt_O^uxK^F^C4w~kGIQ%IWV)k%SLONRax+Ono;z8EsM`Vo z_QD$1*5;{K?M-E?f1jnWok|XiNPgj^nj~WUWYCw%pGQ;d>lue~pBjk<WO`Tv{|$); z+uMF$3!kM!e$;flK*U|YHv+hkX8Q%Giw*B8X#Nj8K;o!Nh|TH8X@!FU{vqLh-%d$! z3f>P}!dK(908Q(KvNtsOfU5T7!N19*Wbf*@9Vz!9eHPNhiZdAv$Sl@!sU3hax#MUY zOWo805n!qm$oWl=f_1PS7g~BAio;SoMybJ%hrM0L6cp^#Set}q%}-Z2q;%%ej}Ue> z)>s0UGw+Q34@d=J?Wi$BW!jV9eKr1D_i4QZOMfT5N}%nx5N26q1{hOLgG-$oSa%{Y zEWecVu*Z&i?7sjS!=K_#Pb{OGCT^g)sSr$rSUcq+#i=|9lKb&9bO+WRWpsYAtTEJx zZzTin37O|@Og#rp;Z$DjqSzY+Lm>Xo>T+KjPfCAST!#CQS}kM%5F=VOx1nuJTcy~3 zPDWPlalBAOoDd)K%ZB=NQvu&r#tt(3Rj;H_=S6zqMF0PmUA|Id0+5qcurno7o~_Nk zzyB(pK@BC^y%St|qA$Lor@8A0#uBbjD_%^Bvy(+Hc<@k8J|m2ULFLxiKh+&^Kx-3( zs3Z5+N&B5+IPu8=Iw&V~`!!aQekyTK@f0<G)rme)JMnuI3m#QC)3|iLX-WE>rfJ-9 zRhgtV-p0Wu87)GE_Z|&q?j&sK&T*Esb@Os;zvh1u>}DJKSdn(cG8Vq~52}j{2GL%& zrk;W-nv-=(OI!<kmOKt^;1JVOauS!X48Jy$TEYS%%FruS&O+4mfi7La4t$V-tlh6d z4<_@L6x%Bd;ig~6&Oi#9Gck!X_%2U%9*N)J+Sb$9YX&rf>Q+eeZMju;W;4X6{XsaX z2|)~@K}tPCePW222L9eIl05gwJnC7O_3qjrXg2s~WPFrQ(2G$a9s+5~LbS5QUZy!& z)b(Ui4L|a5KliMTwHc~*Lek93N8&}P$y%Q=tJ(sAe+1191@~OvWWjn=IN2pPCBVO$ zXoBG_ktdLHNB1sqNop~%ZAMYhtjbxgUOp?=Tib$(<@c^Y+Ixk?-8XOY8#fzl3Se%D z$JS$kis#l3>uouMAAn_(KHL+#c-~w#MknDs=^ODRFGA#tIC$+(|NNhk9qGBF>lG0q zP$-lII~^C@FteGIe0tGRIIp_Bdk12}^E=4;WO5dWil{XT0i~i83eMA|;9XkP1P3f} zPWE2xf%y%oDWB3Tvxoe8b5@`g4<x)E(fzUdr=N!gf1P+bHstD4fK5@VNm^K(Hz5w3 z$UbZjzZEWGRd5&FqD!kSW#>Qajs!gO4yE;!3!O&_#p(r>(A2y2?a`4^D);!_rx8%d zPNz%Mpi<~e@8MBw8*zQ+KHB_)LP?rngN5+&DV@wej#!$UVhrH*5GUhL4#k3W&!qSI zGEpNOB?R7BgzL^#yS!UYmlS@_GOHl_vc;E^n%Zqy?MOAb-D-(kS4veMF{H0U>5_OM zv17cv4Dd9?`nQ-+6a<4nPk;?$F(?lK^QQ)X^>}GJ<ylcNJ6mTYR&4KZ@qHGfkP^Oj z<R3K$03p06Miz{S_qFc(sFtR&>TThWo`zg;%Xcvh@4|A3dc=<~03SC<<%KVJ!D&9N z@EB*Vz>c_lNeX98YPsW_Q4qvkwt6XY`Ih*C`^8gl3hwo`D<}R@OwbbuOpPO4qz_HX z*OX;JZfwh^|I$#cavVn>=RkQO=ys3Aowp?%PQ1W8DXnBq`H$g2eB*+6Ik0zdRfnF- zAR@%68pa7gci07uM0=*6P4-n!?Y+*WS)}*F=lg07yX^PN616qTHtnHLAz`eUjBl^A z)K-W75lM{_XBqe1=QMN}!QUTO^jU6Af1dw>ew@X~zTkK6nry*qJ<cU$`VG{LG_9+r z4T5f71G;l<zN|m)crqsU`_T7T`zrr$SFMK}^i0o0*#rt6lPuC1x*hjrqjs)+2qBYw zD)xGR!F7jPDc3A96~{)tL7EYMg^Y{#Rg={+2!jdV@b*rnHRhP{-@wz4o;vvwGbmc- z)Hq@TrMIILSGMtdnKSvVKGRjUr+>Vd=s|?d>EBr(9++%#-L1*#lE!r=#8BOB$tMPY z>HZtw4JSs(zYrIkY%mW&fxn6gc}vfGmtzCvzeL?q+HIjf!oqYqsE-zO6b|Nr*7*EG zVD^N~B#ozgh~V|c_(o`#G?}sqG6nkhZIq$E4(5TAr^*kJIA2BfL@WKS^1U6WG$ZJ0 zB1+7cqCt9GSq4qqT|H(rh@Br8TgY%3Q2jdeEZ{fuReV7`vU|O{X=?p2H2nLrOw{g! z4fw)sJeZugd$ieUWmq{EUUzKS+A>zs3g`z`*z&IfCITzR5<X&%O}B+C$)~m&u(FOh zIY(AF+S%E$z4Zt8a13%2!}30=qGhRk#N-PmEt4ogpFJ_(dokPI+b%63%u5gaI)5xC z9&mANa8^=%&BmWuq=tC#bt`@j<S^N^@$r#pL}rnQlQ&!*Y;TP`<Vc77M0rzKzUN;g zM<Bl#Epm!Ub=2kj0&hu1QPNHzfKc!)UC1M!Ww`qC1WL=>FYEeW%1w(dXE|RSIsp8V ziX###zP^~u@up{lmz#xyel6C!5$ayKrgXI{*P{$h^29UM2=&X=$ytie(vD1)LD%&b zZ1iFRwkR@Pah;Mq9n;11^SgBCX;i{Fkyo?4XPX1I9Oh}Npl+@sp^n{Kn*i1^fnbN3 zkP#`cFgI^vZo~Lxz{2t+D}X6YFfwb(`_y>&b_ZE_ul3*YiIAkkb&ARK<||I94Z<Hx zxP-ig_=;tA72dX;xc4$H{b5cY@Y1`H;U~=6fTAd}_CE$n>mDvP^r0pwvLR1la?AHp zL-J=ceDUk8!NC798UNTB5P_CJA@?+nwrKq7PoqNWMHLo@Z5R<SLn@fWRA*s>3Dx=e zI9p;}G83slt}1+I0$hMhdO>l`i#<8cCp0~x4N8&1VnDHpcOQdkh5MG9oGEWkhdN&} z3;ztSegSpv3U!aIQIk!+;n3JyEHMzIHrV}hSGi_n;KDR=Bfs+N`jHW0ItX%XE&^K| zZ29PN_rx|5D5v^{5&)=8cpRMU&IO1qY*1<>M@39U_~oQv&gI4u>@R!hGn*8X-BHWT z_wS6Q7&mi%m9J*WzHqWzvMn;m3ch$o{7cT#UMlFtA^j3w6^|YxCf$4S_~zi!Gs_hd z)MEZbNjWsBo5${6_EGQKgA%TsdWYWoh-MkVukf>KYbZ<dvEjr*L+qf!6Wp%_!4&1H zhcV(GtsNgpGJKCx=7cSh5F9Y;VQs~5A{W<`E%Z${k76c7<wnX1Ykiu~z}v;he8}xJ zXWj^@`SnS(&Nm=pgIF2%z9pY9sXyxI<rRG+cySjIQPhlkn-jExAlG9K>^*wMn;v*E zQeQ72NT)!_0lFeo4|0ntrygBeSibXxq_2ALx$QeCW|t9QsMdE)nM9ge@Mk-ZCgH-i z%qQw$!KM}sGw&ChW(&UCl#DpwFpBIZK*!n1>$ySKV2&R_9wDdxZmk$*`tSWyQALL> zZnd#qq6Eh&NNj0;W0=p*aO~)IX0;^F-8(wQ02AY2HE~}sd*~zDO7z-29@XC;b^IsW z*%SZZ5}cSPg68hvoX9E7(=zc}lGoYp>?A^ye0FEU!|?q1qSSq8*IAq(G-8zTuoU@P zNa?qB&OZD!)oG?nT=dPI#(YQ?$1W~F%O{;=qm^&0`z2>hHV#E~ChAz*O{h5ro79gZ z6w7!%D!Bg8m%PocgSMRfM$=mW#n}%Yw0Py88(s8Ppib4kh#P{HF9GjcM^yD@0S8*l zBh+Y%M&KKHB>y?&-riKl72M@k#hB3<3o^b7;UeY@uiJ`tG0b9@xPM9)Wn<~U)m1^F zaDGB7W^{)>PYeE9E&&OF{VIJc%B9q#s2w(@D+Ueg(nLlDCe2uKPKEFoMr*vPHM`1w zXL&|6Be8|F!wxl`>Ba}ltxbo2G5hv$%ZtQwiJ;W5wcqoq5jcXzgDey~bCT!dvMx`I zOMvByuQ@I~6ata2?TUrjP**>DkPc30SC@r8BdvsMrI*uOooOL4&RAe=*ntAPQRBif zE`F1uVe*aoCaBm1B3(UBHhE(D=i{xbxUmSxG=vdr56INxwXecUJv6^eTWod3r0mLV zCvmW?87!R!l8s?N&?wIanxBl0aU;z==nXSWIsv2-DIQV1`h6U11Fr1>k_!b1W|txq zsm*EsF<9~d<7#@H&IgsX0b=;I4Ns~O8@d-$wkL7@?dX?7>}tJhy|$k?zth#$Gl!rB zSaBh8^-p!W#H6?C-%<-o)mBvZjY0oi*e$A!Vtj9#VthmJ_~@K>ao&tHw~D%eWQxNi zlBNKP>)2CYcRoA>s^{!AnH$Ssx5$Lg(lMBBOGtwJgOwp-u?HXP-w8a^^Cpx=ku5dA zuzpmv{O4o!gk{Xzo_Hagwf&>yDri~vv>b`k-4Un*jPFa?-o5c5)j^5xqdx`IdEY>; ztS5)@ucyOT&+GM~p_~(=9*0)*wqQrY0tIN+Bb>waK6;Q#{eHC*&a^HpX{Hi-{cYdn zOjm;b&?&V9B3$&v5k9t|{od;Rv8okRV<K^DdW$W-HFi2=%g#xgQWn=RRyb7WA)Ghf zTGHNNz9N-=TPi$R3VO2-=u^=zYS{rn!{|H(?9LunUrq+|c%>7TL%Wr4K<CMBe5BCv z{}@CvoJJJN$Ti6ogI`ojMUq0Is%FNXDsU8whOuv=#i`)l(6SWkUcK{#QNs4*+*ZSh z<_J>i68$(M<A-RF+9r^C0COcbW+!Nekb#?#^e_*kujW#^Mf|8>Ft*_M0Afw&Lw4;P zF;K$*We329jR9d~RQFrs`<uROSl`nsU3hNrspa088=c}sZFgh`btRw|oW>icXeJAe zuow9kZH-V}kLJ&edz#%}WJ${y;<8^Nk#SfH)02Wnl$4~WFD!BLpDy;B9P71$e%e$) zxs1n9Iz)($jPVDY$Ma{={evy}`oE>*;O!j|;hPbOlzCn%WABkqd%5R42h75^th89E zrEP3ySldGBcqqEqRqxKvr0;rs+7ETRf!n;GZFgat3kh%jmQBWTTVNN@Kv&zoZYb7> z^822cX8ifQi9W;k)0LZ#C9OwxehdAC1Tno65VLui38YnrSHqO4VTII}yL4YR59HaW zFaCVnts7+>E?Bo-2XW|%d)hzBBSB5f9<{_=W`DZg{Jc)voT$eL)pH_;_vR5#bVuo{ zc8LTb`R^tVtcJpS^%0IWVA8!tg#=<FRCP-2rlL>bSWF`Z?clrGC;4}VW%+LlsZQIl zbgfk}szFE3YIy5uoo42z=UqRUBQK}BF-8@?WbxXoNu_hobHImNiU2B@!<lB`4qnR# zjlzOUn{r*fUCV!z&c&G9@~Ea?l5g6bF}Z&idX%$SiKAch6jzB_H2Ox3P~AZ~HVmpb zbG?%|L$7uU396(8G~vBeL!`)`(e1GwBnDBhw}me7orP)+7@U3>4ZmDdurRlisIUWj z1WHk;DzIs6i)BVO$P6UFGX3=R2<Lz+*++-qM4DoiCtZQO{cqn~z4vYGi+s>i@mG#- zS6P_CZ!))l_+c6p#YAn#uN&8?JI=$ZTO-xg)tTMV*CZSVUoV8yChch#C`wB(XNo^) zpWsZ_a>^!S&Dw@hY+pP=lT_xWdq?_yzqF0@fr~ee|BnR&4)~Nkd5|+urA@go4fsV2 zUS)HMP0lMkU}Pu@2K5}-00becZ&$$)Bh`dXjY_2&M(_gp9iT3~Lku4fybNdc(AD|` zHRjZvwo{!Q6pJc+i^%Pi4qE}v$6c-jO@TO+CB@lbO#9i7%b!$#l+-t6Enw1T|CV#z zQhs$%6LyE{OYQ}UQOk@c_VRSOE>*8IB!;zII8<a`s&S@=GS`$Hz``YT6niv-<BB2! zXE<L%3)2N=>n=UKxVlG^o!B@#@Iukst*I^c=GO9qbfasrHrC_Zp+F6;bL9LvHA`M< zjD2^2f!wu8e@iKdkNx#uf<DOw!xNi`*YLA)@=Go4BR?OHa1QNmT=;tBP-}A-b|&Bp z0jhT=xBHts`rR;TQcaNk^*g;x-$|BaHJt#nQDA>+XHy%<^vxe9oP9pC@uh<4*d~_B zNQz4Vu7fP=O<91hAt?Frjd$fJjk{>yp%6g9^_XTx!o?GG#)^mK=^})+Tcj0&Av_?^ z?&<Ebol3vr;hAtwBNr;p(D?$?`q9X<_g&eOTc`YV*CbHaW{9cZ2iha#`N!@H2!Ba& z1w(@bUfRA|Ox)7eBD;1HxGAM^Ute&_*Od6|_DSR{^gVyuMft{X6!IEhJ>uj>Sy^<X zcMSuTX7grc=9QiYM=*R^_?m0RE7O_)Ixp|kDoG{@chYWSNX8Q}basmO7LmeSQq>vo zOk(J>`rq@>A8D0i09$?KtNmoAYxR1z@T*F1v5CyC-&sP;k7A&oK=pcW+|c9FZ4e4m z1|x)5;Kpw8w668Lu$Ahv--8Pb-|IZ9SX_huW0*wPlaU9$G)Yaf;i#H--V*9hnHi!B zuclJZ$v!}3W8jPp-j?@UP@_TBVfyLIKkK^79KB*b?R$TyvFX;UU;Y^?UFQrW#WZPL zJTJwMgtvi|)*m-=y$<G{`O*}jOyU2m{Q!GyhTyOwbM03rBDAQ*GErFmpktwO(?a}q z>Z4>*TfO4gP^?krsiXG@MZE^u^|J@Q{7^}Za6~Ce+yAx@+kXttYWaLSg_}AkvZUu} zq_8~p)!Sr3g0Ejw2ShNPWcOY&Lf@v@%E_A&b#~C_Pq!{_)5P=9>Y&Pmn2EtQ@Ap_y zH(H|(5`L$TYPaD150}Kug_#W#w#`Et!ptkgH|}pcmNi=sb8WK|$fXErT(6?2$H?91 z4NXn8uY^cKcba9XuYo}n<6xNtlO+ObrL+wv1&eFTS;OG&Gt|3R&e=B4hEwe3$+5Jn z|1lKmMZ<UEuK-)D2GR256ipHkXd2i9PvGx8u$b(_Ch~A{AZEOj_1kMn<G;bzycb`n z0bZ$7#Q8Wh7v&RLt!>iVWt?`uwS?v))e=rVla|HJt-<Isy(&X4>l!2L(RoD7!>`GE zsFr*HHP*Vms(thAbHpx(3p$0|J{wFI996vZ8r<XW&QZY%ka17nad*V}+h^jaGu^^m ziGg<BD2p<~Fo<w{^5!2bR$A~S*C?vHtAGKBJrEZht;z4%zo1t2Qlz2vBNGNO|J{pY zrN)d5Jn-FHuBPK-X1B-7&{5NX*fZ@%mf53+MfCy5n@8*inzDTndYfpOF>SQ~{tV(u z`<UQu9Q@4okEc(seG)uadh=Q(e?J?*p2J8iC+7!Ufe1-JJ@9rSm2D$JjZ%Oa<a#s- zlhljdtG+zFEI4c4UaA};D0(hd$!WqU1lO~329QbluOkWSD04^2yJkrKf*+2fAyBQ8 zrijMxKz1lVoFe#>O36zZ8)v<4^}DoZu!GBX5vEk|LipM5qmWl<p@N_<W1pcMXxCdC zA1)Ta@F7Of;J177aO}K*nmiLV`@!&@yoO~|Aeeb-Of`B{Mi=u>937cKPm}=)0~Ol2 zh{18IWaJz921rs_TlzF<=j75%z@6#<$ynDDlA!y%+T=fs%)u9v8rKR+-K+Plnyz#- z5s`1~lhWoeu}bYiZQ~AH$Tu2ZJL!JKpJI4lGR!`hVmVix$_3*m3q%IZY1u|9+VA`D zYdvo%fbt;kGO(y^PUMor_`5OoI+K}I;OfET{@>~9eK`NVH3&xAn#}OwDIG(xOppe7 zMxW%64qswHAKK>3Kp{3#;XqFhO=S&G#zro3(ar)W^*sA3*(N39kz<(kr1!J2vc`b& zf%YO-Il0f_@rHkGDo30k6c<Hq5BsJV(#~0r`RRI(B%MY={+FE`f@Adi{}?>(KEaE^ zJ<fvm89UKZ8vil;*;;xF$W^*paZy?J`#<TIDb9&r_j1D!vlz-R4MMD7@zlqoH%<jc z(Cm2a^8!82AZQjI)7o3ipH^hSS&h#1xMJioEEQ|gr(;gpt0`VUy$ZGIJkh=RZ1=af z?qsr5^{86&`)37(mClT6BFSK)Osvn2<5Dxk@$GK-3hU3;1>f1X{|&<b;itx$r1!=f z7VyQ+!#;bktc2v?aM7h?!qAWPP@);A>C}sz-(vyfaNmKp*{^!UPjnIZusE<oGP(gN zMU~dyozI~(7W9N?frm|5_oq)FS-L62$=J*6a2H$Vx%c&2$x5DEn4B`fZpKndMya7z zwhr`2rsO4Eo9a$<78_t9NRLH~__I!Dm`EBE;cc1PiNDC%F?(><wI3za&>wQY-)BvI zsg(<@l}fkpwsK;j*f@~0V}l0WA2y8pdc#7I=c~+sP`M9(&;L%&pb{m84y#0DIpL)2 z#3!}X`VjR<7yW#kezaiB!nS$FkdEew>>3yIi-S;>Sg*ipWoPyNk-Pr70lkY@;%HNO zIVtgm>o4|e3T9nz&)u^yGve!^JrDap=cj($5`O6ad?p8ku3ZX=hJV+vIVB#mz$w1@ zT{tdsarC`<U2Ws6a%JC0E;!w=DPSt7I#qz0YdHZlzcHE)@3^#eG&Z;9{{}bva~Lx} z5KQ@qyR+Xa8$)d=f)FH!y;O0WP9-s88{GYeZj67g3VJZQp6uNr=@A|O)omAj>7bsL zg%c6cG}q72-h)5A;+KT?UQV%o{$#iupZYQV!wF=(9HEl~PQoR>w8vFCPXDr9BRd+p z@*Ybz2WLGQ+N9~9IgJ{{n);@I&TE^5gjIQRQ!S0&+f9{3(`~a14hwG3;OCu6$l*J# z!)iLRR_JW243qKIvEtS|q`8z?Lq)*cw<#Ks)2d}hw%%~&-t*;EK*GIR11-*fdrRN& z+FtJ1K@8iRt)yLi(+lJ%Ggk+b+FwrO|9KMCwdrYmTBhGX%#-n0YYMmuOBN*Qk>%hq zp=GZFf9=5;p}}|C860ibCnrZ=zhwM!r)-}YSzeT5YL%|fyCIuM#U2z;A5Sk%L0F91 z5<$u$BmPU#K~HXF{}w4*v=iq8$_>q(&#jM`EsAKoyA_jjbO@V?|3R?4S)HdyvWyKv zoVR^(#9ZlKG3$^ZgvMR*y=oPZv0pO;q+?!PLxU&^xn*nl60PY&kjhU}4qeAmiA3IS z&wQ{#NBA7zsZOH29)H%HN<!C_kZgs0uNf-E^W5V9({2$8?^cXE^6fsk9OkGCNouRC z(B7;Z$oiSlQBecP|FF*Ndy3-Fd@&Quu-af_`v+vK>c_<=GXp%Y(ri1(LvYTHH7<Vu z$E*W@frs$!n>2Oc^wq)AnFoMwFB>~@eRqy;jH-p9>4=+6?VJ0#F3iuB+*zK=G}rVe zRx%g3o>@ZPx0^8uQat*RE`1Il6qqeS4vNWo--S~;E+c|J$F`)=utpyzFT2hb-awcp z^Iw^eykB0-aO(9L-O3Fo=Yt@8LEDer+z3LOUqIsDFVOz^TN7TYsgcIsF5sjmW9wD1 z=C=2Sq=$^Lbh4=MFKW<&xgxJ6SCaNql5Dkk&t&%GZ_2<2<GgEkYcB4#_c0=op-23H zHQq$qLbR{WxciLlGvRPvD<>mL3f>S6)aq_&zn~!Eo(Y&d+YRwE3yR0M81Bg@)-EuS z@v$)f#TO05CF`yCV>_{#5+>rW%rhpliTt&`Bt22UOumQw)8OIj?b`Gq{Fk_vU%E0q zbK|{D8uhRft%*m4sh0p2n9@jhzW1+2G8o?VoAdjw+c}eK=<@$Dj686ro#I<_W)DoZ zHY6K0<&oIvV_!{zpnq^cDPYpv9g-!L`w3ila}6Oy#>V$15plxMHm6BNg_xRRIB06Q zKxszKS{chO^ZX*$5b94CoNM3m0+fA~q<|!aKOe&!au1Z-qclV$Vt9F8BM$Gei26Gl zLG9@l;BH~#V$GPG?IDpkt6`Nw7d`uNgvy&vU?=Yu*UqK$$j)FVJ~!uy@6*8#Tq6wj zRuSK7-1OX&E>^bn=F3W*E7}2#ei=iva57?qFC)sRsZQfx>e^G>qmGu8y#S;O3EcMP zx-UL^mhyf>_6J>k-lTMcz>R97sP!h5g*O(qN6D@<{UNy>15&lsr=aRUJ#rI_5rBVR zB?C{Mti98DN>&DGrrk<a_JgmyoV}{X^*%ANkHOr!nWH04=8N#tQ&3zF{xDyd0=Qe_ zv~64}e1qiQM+<Qm1`;A8CC_Q$6`vmKL6oOTKO$&`6TYfOE`w#=BF3pW!)(3&_IcB> z>cC`$v3p}ATdyq_+o#E)*UG>1`TS3hJV3iXq^mY#QR#se8@91(8S_@lvy-cFM|#(| z?z)8o%HIap)2RN{gK+XQJ#INwGll(vdPk3X$4eS!r~%R1H#E>(dTT+96ZbHRkpjU8 zGp8%KrH5ZTJDx>y{9Uo4%u6Ffrq`;(Tzf*DG7#(2^4$*TvWRM_>z&?GWiIc8rphnr z_buU7C>KaW$qRWdGp6YS4<>>_#(sizbV17c=+ah8MryqUB|oaQH2t~lVZ(!NO|L8= zfgMSNi)>*LYR0aXZ21P|T@LN&v6&8Uswn3@mP6iU#3b<a-r|a&?$@M~^v(f#ye|Kt z!E>LB9T??o*zfRNGbJQ<8Z(I-Yd*|p7_&Abzsh#wTkA-?kzihUjOqVr2M&fs$$tLg z!pn1yf$z^y%OWmOGe5?kG|%;G-QGF6NZd=$!}0Kf;U|`Bq3&cr?2<vcs(qDc7W84! zOcL4LWS7~onlTi=6h=%A+<PPsxnDQhkXw23;03W3`SyoudiaDDUX7S9O|>G&ZtCau zjLHwjrrZ2fw(p}{`i~(<F!<<E!E1YDSLavDrwd?kuH$3V0pE^Wm-CfQCZ(1l9&PV~ z?{_qeE&M@jS8urtY2Ypz;Yuycc@tD2Qg_7!Pgj*)d^7v-y_Hc25(8qRT9a53KM!jg zxcN;dm!!_PwnozGB!aJ42agBVWOUQdjshxi72*z8)lpCy%VE}Tn!@75;V0T`P*q2? z(mFR3Ze2edgU@uYbex$r3(&}ws;?^0%HGN63<fe?H$YsHNe?F*H{m><InpN+oh^_g z@TXh666HL%{~Gs>O{0#E7aQ^gCW)iZ#{)Y=SiGYwgas1)sj!io2aox7?19O2P?O;i zegMuj@E88E<Y=-yAZ{`j^xMc0!PH2$>`6BM>8VUJ&bF|tzuK6N@ricd&iPCPvB4fu zWPr>TPsM~fFt!|A@;#xNk(Wc|El>?a1jTDIXNZ3$IVW(1eXgEs2u?ezuOc#(P(Xv) zj5OHjkdovDfas^@#&Lz}FC)v)X%D7E*C*+feDY&VH9$2Yh-wgV9>8N{yXFsP;fwc1 zP&x~oBE8d6`2r1N)%zND6Y%<9tXJz-=HL9aDIIaxc?**-hGu$!G4~Au++21vGW<>@ zC){fBIyw#MhFL8-vq2@C>uI`_ta|B#SJ*GpTwCT3!cpB=+UYy{iqTG2D8UJPEte^& zF<`@>M@ptRBo4sc1Lu_^)Ycx_Bm*JnK^++1L>2>lkoj@Aq~++-_LR}l`}tn!=GO#n zvXo_=@u%~i6u<;3ovG=gE1UK_9yw`^_mQStSuTl2xF7Ui2;-Cd>feDoj06vRKbKag z%3wFu5@g7z)Tch(!o<A|S;kwG$C-$Y(7conc;$hzdk1(P5fA=L*FGt;NJ7s4wg{QS zZ7~v|`$?71s-UDig=x#n;ZB5^@CNVgfP&HXsH;4-lcrOe*O{*0WU}56nTi;5*FM$s zx3<n_udf&KlXj_`rbYEQgNX5J^j7A)-{AK%{`;WnRIjrby|HBx&gP+suKeQZtNK_I zr7>9|^GCbhul8s92k`OV^Pjk!AWcPpyg?lL7HZRlY^|HoS)zEQoPBmYW-b|h8}#^z z?2xunHOw*zO9vq-t!tCh_rBuUo0?n$KAYNom#2o}!>g!?j#^l{=<qKI^`rLo8D_eY zl!Q7c^0DW}iyAGG7WLL{KhBWyE!MX2D*FsrQ%g0a{nc+FCiiM69Ag>#9|JQTg!7yx zPdb4!K6q8HDywig_ydx@IdZl&xwM4H$`xsKX|ymv==CL&gyT4tyop~EW@@s6JL&!A z1JBz1-y=O9ns$#Xy!4y{G#JnmTsP<xP-VtkQRC>5?GbQhuPNBGUT~CTn=*>Iy1LmD z1iG;2sB9UR6Xn>xk4`K7WiFSM6aM|pP=cgPzl_**CC7V_@>NItxeA}uf0=oU=<7&c zW2b+p-2X@lS8FWb^qhY7l6CrE6zuj=nYWb>z^p?mp)VB~Y|rL_uz2A!=^SSrpIe1^ z`v1BeZK}7RXgkkIzX^;=OH$CV)X2)Xlrj^2Y-BNQD}=6Lce(+x9pE(YP=;9x8bGj_ zL5PqaazW-vxzGn2s)VPHKQgw6N1EHDQZu?bcpLb}?BNN!cYJq<wfgc5)6ZlIMw{S7 z2be9e!+(X7nH~XmYm<ZquA~b0MMeImc9pdZwZiKmPYo>r>m&BirTyz?R4cL`8M3{a z$ZDOHZo^)@Vet}ugN%=9Jf2fn?HO=Y<*&FNC4#gP5tuR$z>Bb~+JeYY|4^Djo0yIr z;G)*s7$NF`78nJzsWa4Dvd|~<jFw^*)~qk%L`)Ah9Vhr!f%I$l$k9zJJk3$Mx_a>E zfW!um!%3Dcdv83S^n)_03cfw$Iu%hqwP{ucQyOo?iS~-DBFE)W-`|McUW5R)34Q!X zgh<=Cni%^ikZhq>x6fv+V)wVp`O1;66Q}3@7=bnd>R}hiKheTjz9RCqBU_H{&p*8@ zUyP9yUCk#nu1H#uS+D|01|z^>64oxP*Z_8#sfZytL~GgA=TD5m<j4YXFisMuJppUg zK8`Y!I&T)F^E>y;uI)F=Zl!{Lppf$qSA2FWGDh3`DXCpgza3u%z89{!B64P4RS(4@ z8?((N@eR$j-ddHjlZcjt;_kMLZSS9!Y-~)|@F+wYj6D%rW!wc4C-2sK3ZRuH=I;US zvLH_9Ae6v6RfV-I^5<+<4qA`pveO$QX!;tOYm%-6ZPgR0&YP^f0IrTff4(x^guWx% zTb8>2_E)uYoUROzPZW*j`Zc?uG5IPhYb&@(QOV$<gL(9$opmsXA!|9}9Q2_RXPwC1 z*YIY$MEGJGWcX^$=iy3@3PB09H^s3G)4@SiKI~M_7q#SGGgblk60pWj7Ps+48cXPC zD^T3r18Eae1akaSyTt{84y>ek<+}rZ<(*Mn1Ec7uq87!(qeqi1<Q>Pcy|u@rU0W4V zDS&`<yVMkM1DF&Vq<L;9m?vHv;IO#3AUP3fzOS<F2b{rw!H?j}1%GHgp)83zs>i7b z5zHg1<sGD_WljUy2wo}qDv;ZIUir7MrRvaRe-MAe*+IB|ZMZ@|-l}a(v3OjvuJxkH zODjiMoh9SW;U1tM!2!Ktvu4Dp9bJJ<bqlvj18vWG0lT?J-;+&~L|6BKOfLaF0P|T( zg=PSBAAsRa&UagiK+tlO{okSZ*nP!wM$8|ovXIdQsvje${feXQE;(yrLbiU!oKVFC z`k5EkH<7{^!sQ879S(2=IoZ(n{qa#qx;tA+Z%dnE+&rgZ&11q0iBKsw_}!rDmI`2n z#iOZ=oj`{j?522f(cj)*jwSAShgxkxE`GAbMW_K1zU!DPA<d)>++N?@*w2(`smwVS z0j+;af3%uok^)mAzx=D3Y-vVblUahypX--?A9gqW!bO?`emF<B#JkGlaZd6ZE&Dm+ z`rAV>Y>$P6m`-0?R(t)#K<I&Nr@Sv(nx+u_;<31(_%-r=i)`8KOv?o+yT6b1RdB>d zI|aZ$o0Mb$vL$0_lHx)F=Lf^3e&4N^xc(%Ot68ja%|3R6pw(tqy&_VS$>F2&HtISA zXH7JIQwmc@lOuBe7?sS;mSDEDb3a5%dC~r3XcL!xJsKejW1Cc)7-^`u)IOf_+km-P zW%b4CyQvdMJsI2O%LdiJYCiu=3<S&e#QLhUDL9#ADKqrP%6yj00rJy8n1dYS+Gncr zuT=BrtvLmeFHLeAd?h8veBkV4c{kc6veU-KVkh9eE<(A$1}|@qI|0+%bts+<fMp}o zWhZobVES#8?W{wae39`$m&7WmJhND@{}^!U7oWE?C;pjF$U#JE%a*SbBq*tw;uWk) zzxo*)rdXt|IQ`PuOcp;+F6eE_?je9Cg0>_~d~0Wacy%%Qai0?k!C3(bt_Y)HRW4R+ zDfJP-TqI;A(d6AS!R=)o|KV)eziyMiI~aRlDUvLOW_M{?zS#$Fw%^*_b<}&*c#Hfu zm`7#%CCfRq`?{kTIs?@09JyYon;BB!sWLUdn{~jC@LzQ>jq{T>x#z#fx9-GMpKD3Z zN^lEE(`kIm{i9$<&Xa3H)~TL$3-3|r>0QP#f7Z?dt@Y#E)``Efw#T&0YXPEqX4MO} zGF;8sJhj!fklWd}p0~XjoXgk_uWY4`k&@NTXtJL@ki!m;Y~ii<X$BmTzxbq?+D;Ao zJGB`Fz|RM=(aeb=gX+CY_Rh5_Vdige+1mH&jOPzW*(nyjn0dYoOei0rg#2gA#$M|u zY(^*{F+eK9DQvMi2+q|27l!6yo9IfEt@py(_Ti|kqgS~XeB6}%wpZ8mhGc(TK`2ox z%5lV0KB{kzcZt(RsM~vi$Jw{~6_vqojeZGzbU|C^5ni6$BvK$mGsEjjZMJ&%#C|-} zI=ya1Flo$W_`8H%#T`Gw!>*$nCt)6o)!;h`y?OpRRc5lcT`y=F#yw$W+CSZX8CBdn z4515BCa_6?T<k_9=#KnTWT07euzIXA4V!uMG1t&dQnQ!}sUWeCveI55)6E$QsjM_N zU8>_aUa<XnY)jvyA|vuP0XjJbx2Sg{NdP7qdg-5C8;Cfa@KwW|n%S`b!~>8+PR=Tw zSET`B#{2{8P{?0>Msm$$y|zh_9W>Rnz+!yT8ltWdqTF!z`b$=~i-~`a0D>ABtF5e1 zO3_H&_ZDZ{{-WO5D3uC}IL=;ymuMJJ&B>dXLy%h?HMw%r8FS$A_4YDg{&e?&tR0^< zm6I!MXh?QNMyVyLIwgL+&a!Mht}-arz@>&s5LK!O4)(eh`9muIwM`85a3SW+=Ao`E zeG=Jr@uPGjMYL+NScV>Y^$g3ZJ<z(Y1brO-oQt)m47?tki{VztdJuN=oL=Oj;EC*X zd5tA0I8IU9l4#R3st{9J?X7Loq=K9?Tl5|%@R?5z$$;IZB1$fJe5EO79jy7U+Wzdl zeApics`iE{jnG_cpet|@=)tI%{9>Itzp$4@hOi3rbKeLhpdkz4ToZ;xpC5zy6Mr;V zKyb&RH8pn?YwOA+bC%E&Fl};5$(J=*Qp+NeOnBo-mKgMNVU$q2<t$m4x?f}1Rlr6+ z3vKkt?M@Rj^8O%KD*KBJbcX9rtbxv=E)-EOFFG}n$J0)tJc=)$Qc5GHS#t>H=b7*k zMjTi$zARJ?te=BoLO;uBLUIig!5W<P2;M&SnI&iUhVIpAm^Qj$SX-vtBVVabndw+M zCOb{r_2i?3^JT+5zCFv>{hMmZJfrk*-9Puz17|0Z33axq#pik(%KwKD{=ctAbuYHm zy}3g^D6W~##c@q}QgG!M$v>wtu4#O8VPD(ipV|X=DN*MOTR|f70j6*6TCkgPly|Aw zXq<od;rmujBl!=e39UuN)of0)r8}~Bn<klq(@P$Ez*gR6;-0V}TmXwfaN<4}3pGeh zOjf@QUn3kC_j~f!Y$0Hx@2bW6<ZTL&6fyFUZh<4m{5J~&^W3veU^Pryw^DK;LwPqt z^2x?BoahHVrpFTi4_71rK=sNtPz^~sV9Y_prFMMakG<UTeM>3ZpEEgU_=iQ^87o}i z!aygvD#bE}CQZ?Bo&+pN9&X!vh8!+iQdg*%+TVFoCX&h`a0TZY>>}p;Avzd;*i?J# zPs7czeZ(zlFzE^mypSyE(1_$8nd@x6b?){vo|1qy_MEl#^yU<qfDr?|%n<eLMQ<Ae zsxV!RqW+n4f4S#FThw{>uEbHUIgAp%yvEQBNlh+--WnjCLy-P%CxvKa+sh5p*Jexy z-h<}+L`H!W<Zq}T;Jc)WV%Cn$38g8$7p^AXJDdMH;yEfE+gl(Kq-DF~rOi@w*6h9Z zEy%Z;hkG(AT+8<2APP&57D5E-gzrU*j|JvQgjHlN*MGYCioagD_>`o7CXVPdViZ8o zo($AGM-8=b#q>Px>b;$3<~X>*xa%!8qa)idvN(j${8*(c2rXLaZtUt^0QIW?ao2z) zW6_YZcVT|LX&3CNUa)qkj<@p4=lJvHxBroiw-J!ygOYWnFp|EH(C&;57OiVK*rZJ* zu*;1ONL99f3)qdPP$y$nzvJRG9&eo|4>s7*Z+uC!jnMjv?|hVl>$XoxmY+qYy=cwr z&1D+>)RL&I9;;iZuE)N|F5BH$5IsGggt8-POrR{w*U`ew=s%KUUNgRV$IYEDLjzI` zN81q0Fj=y1w7PC`5jZJxJ>bS4fKfu{mJt)T)=Ix|u<G={_Q?e#lSmk-)bo{aM^gR@ z)%i}*%EIiu=kcJqcX#p$nZKNA!Q`t=GsO_U`3)XTEN63+o5D|h#%-Igz{`$(ZbimE zx?raI*h0F_38feAeV39D{~tq>TV+Pw2#oVHb@97R1V^e#BEcBN832($?;k5|{5=Y) zmN&t?(p<%+vQDjO_z`q-T_cX(=yy)4zBA@CKc~{pvhGxG1gJ22I!<+9SOdZQ?fL!v zg!R&v^tpq+`@I7V;lU5loK%a24pzPlvymr|k|6~jc(|h8mWE|lTk92s2&JZih&xAf zkF%zr?w4c^Wr_+1ZT-}JcD+B{)a~x#vWrm2S2PE}Y=ocY;>U#`)+yZzjXD^%v%bp4 zuJNZ6i}N#wBXISW<y0-}$+F0WB>PD~j}M(MPc+kYUV@BOrWEwFMmt}Sr(M_937v*D zl`d>_>pu8KztF4Gy03=W=n&AhJJ(n-?E&IY)3F~N+6Eh;qJBre?>#nS?7y+TX%|}1 zt0-QY7l<WZu7|{b`n$3opPJfEFK!I8iCsxw>~3`!yBYGVF<~zCvGgga$z;Qj8%+&4 zuY}GQ>+1NaIBCwa!Wbz6cgJX!>e;#lx|P0Sn`iB4sE@pQlBFSK-3uK|FtLKW<9qEY zL*t5y3*YRveKgDkGn=yRLw>!eF(>6$mah@GauyBqWy9}5D#50gGc~?E2gfhUnUo6R z#VFYrKwT8qpvMJ;=yzP8RywqRO}G26Wm+9B%?t<eqPf3O+#_j_Vh`cN#8rxVUbT^O zY)jm;tUtGNcgy^xP5XL6xA;~;{Iu{2>Vuuzqkzo|4%s|vGnFSkpH3`4^<0K>A`6hl z(FOniCOSM!W`g##f&h(y1wHjGBXr71$bv%{d*iKdGN}Y1ZWp0eNhTOhpit<G)H+_X zAby`U>&BLx%e+=^OuYPBVSPj+)`W6&gu4LEC1Mi-^KO9h*Na}U>-hB*47F!>XNUTH zE}C(Ek$hqO@bzpjg+uo5TgTiDy9C{($xJ>{J|8s**fhjFfnT3MbM-lD-1N+T<!7i} z#WN}R{KdrSip||sN(Cy2?A)1!7DrD6iYWe;2Lm31EkyP6ASLZ5-=uu7p8Fv7`GK!c zSCerC0WbV3zoEsEJjU~XbH=MIMW+Yh3kYtzX_J-NS&u{R9znXsi>Xt8b9TcO7ZeZb zJA)`PnCY_knuq?rEAJz@zHQPfCsArdZ?10s()sSANBITkj|sO8%)^1w`pH4Qm5zq1 zx2fQYdqH-AE%MVhi*kVK(`FyZ{y%>LzuG(Z;$rzV!`mA>5;7%{8LXr<IKGFaf2{6c zr`;#7Cea@8rxC+%=@=Qk#|QM4uP^_GW}5sgMtp!@+qr^}pkg7P=b?+8ukux)`0l#1 z#dSbPl~gOnMd{KJe~&HsG!)XUdxO$oZ#B9%cg66@Vt<-ss+RPRO>=UREs_FC(UtH# z0{@*>MK;yW+|~V^D%NZ!1iu5^La-<^vdvveYHDL%0Ol|_ed;GAJikk*>Cz1Q)mMjo zI<g}uC87>v*CfFtt|3>8Npj_SFQdjpYXN5RAIkMV{Q&6<gT6MyFb&^;qG^vqi2RZ| z-sP{*qUkg5n7#)$m=LQE<2pM|&4vWbL&0}6pv;C$-n?#YL`Ij^6A4a`(F-6-i!j|M zW&ErW87~n%boL2HP__LvMG3`*kYnDT0`4D?D>I)Kbu;A+&NQg+&YJOhrutt@e+=rK zxpg}H;A?7E+1I1w<eIXl{%++4Vm&2Yg3F0U{jF(HtO%Zr0}rxWZ!O%9bRZ&hM+5>@ zP+Eq=VBh!EZk&8XF=*CQ1G@qI#B=|I#k6iXFw8>n&T9i#h+xW<P8rYC0HCJ1pm9FN zi7n0+EbokcIrHKj?jVi0nP<i$_~SQU?nN5_9DhJwjc=HN1W|_a&ZVbg+`rZ3usv&= zk$CrdyKhbNU#@WmwN4(_t#{$<3=oq@?^K``-FPk%X7gbR=1R$IjA`J3Nl;YNvBJgI zc^FJV`@M}YEucFFpo5cPT3_a=z<qf+Zw^x_Ke(p#?5wv+eDD3>`*8LHd)Yy>+N`|? znQHxb^1fNo`t*1J0oE4n>5|D~ES~tgakP68$7;clqsY5vah|S->`6UgZ{cFu6gEjf zD?^0KVx`R6w8AfIfd~3-CffaMOEZL@f5=i03KZPFre>0loOx$|ZM0r)3@W6i3<}@y zt?o!szp2!`-LlgBfi6n3YjZ=6(=W6B?nvIMrd$QRqX%v1G7Rq_IH5i|0*0BTvHd0~ zc4A1apZ8W3;3%`f!1va+F-*1JKbt;by~&(s^vsr;ZQOzP4Fu~L6TBbyF*i3o{=3LB zZu5Q$0%8oDx#2}{W*-{9^7co7yGZ}kHm2-y<t7k&p`wr{;b8^!1n;h0G#9ZYef-qi zi)HIX1pOcIdJ{<5Czos&SImT$c5?VT7$IM+Ev32oX0vGP`V&xa3#uMDtat235OF4b zYI&g+_1$p$EgRnk`ZP71*l`+cE)cs%@fmw!u2LH!g}qx_Q<GQ`Qekg5_sf3vXDu#t zOO!RV?Tnm0?NntT!2KYS6%_Y<<Lymid>iukce*tW5HEM&KBKki>VHQ<rbRrMYwTd+ z)Npq{nKxZIz8`LidkV2EVG@7uZMK0k^R;A*%{?sIq6Jy|nQh2@m4Oe{$wodU7n5Dj zeC)f=Y?rd4_u!s|uI=cHoSP4|y;$9JSXHwqCf-bbT}h%=<wlRz7#2=Fuu)m;U|bW| z9OECryfXJo$l#4kMBP4oAlu*2@hh&g*u2s4f%iRgB2NNA<X!m?i?o4L<}ehpz!JH~ z>4|^X5OoxmYsZv!HYpG2_;qm20n{RrJ)wMY2`DZ27thY*%<-^i*JkYeUJ8n1xLI{4 zmh!pDh&S4Lq&*5Vk|M4Hw{A@R(d2Dzo$!_+^{|!HYHk-84kndmmtz-2!tHH~n$0<t ze`3}du4!XmS*QDB)z-&tGGOi#+kqfHs*Lq0N-GTE`D)j(uJZ-k)ARANdn|2;W!w4x zyZ`Vhxw2Oi`&J=n74Yn}vre0F_}k8L5w1M@;c}<q|A=;DDa<iM-(>NNx-xCZvDNV^ zZ_b#(k@LmIZQX?d*!fjHyr(laOvKgmj}x@u_W4tN0%<LJ`fQi$(9B=qU2VvmNk;Fo z**Sv4)c0;?Ee{1LXsq7c)4%v|qY!~4x&Q==5oiUvCHNhv5v%v%>bn!!KcnoFlBvHf zM{CE3&Tsc$+W_6drRd>dpZxwo?UIi+pKdbvJI%R}&D<D&{XSNaXb3ZA9=*|HX{46- z@U`vf(C2wZ1|h*`GC$#M0;JT*lIBt=e&w&9rH3=rXkc>YqfkZ*9~!-#AJjIJ`<hb> zwP+(MmE<bc{Vj(AnpDT>c5NXb#{WE=!UylvM05k(dwf>K!j-+$hU9B&Lq}d`d7}SR zzvgT-xw*cFcwB_qA+1ysuUK1-Xoq`?=IEAY=;d8&vCUWhuxxCj>rPk{tkD9D0cZiw zk?Mm?wVsn)(Ko*3Y!Z5jz&HvMhzk@`=?=ZE`8>g$FYmqNa-vddg-nI+O2gXM$Dx@e z%Uk=Ocq(V7TCtkJxB6=I)SlYB_#fX@6J?XA6+~Ht$cx80I_MJrGI0A;Sc~^O<iqWk zr;G7Y)qc+8LT7p+C<(}MyVhzM+rhD|eV&xNxq{!9e?GnP)3BB9xSayh%aR>?QDb9A zF&ac92hMY@ADI&d1HAAVxK-9kg0x?5ioxv5Q1(Sy2u0DciP8@>{2t0--&-pxL0aFI z-d&90x(D3{<pp(|(|!~{%DcRC48E)Bgm~&Vncd`e82#?rw`*Y)9IQ1>iQN>Fe=t(F zX#S;%s=fVeUE6&963Uup4j|vMk7y}2tn{$4nq42e3SD)GdBVo@XPeWmu{m~kQZ~uX zHHYoKrkM!y;|I#DlI3bT>iR$5audJ#g>%AypO?E(7Nh2Srn4N1y%TPNxnSvstg{HZ zBJuF!aB61UA>_+s1RG6bOm$tca5Td_eYPqg<RD>bH~#6+m<-|%!l|g9W&n3BeGz<k zRBKf>b8GCLT`*^&GIYmDE<y@0xxaUU8WLw^OVGkXYFDF7H#ZylGDoRgB>u9m)b#mo zv^E)&bFO*qkpC_grg6$x#1#%@){8_uEGldVM$jl2+~=A<{phOHgDY-9ItI+B{>25B zZb%YB2c^@He@A+@zl_Y~6iJ+8yhC33kP{K-dL}tXG@j_dk-s`VSrU?pDPV%8_Ry~) zHEoiD3OLt??OqSMN}f_J!QHQE=Lb4#9ykF)&!P^}{PD3Ou-6vTd9xEc)(})Aoet=r zu$AppOX8qm7eO37)(D=-yR~?H%fo2-$G}i^l;~2yu542gN@0_Dg6Ki;0x>u}p}k+c z0tb!ujvduU{Svs19NJEE$pfkK3n2@QC!ZRAY%ibJ&j$^(+?dwR7z~_0i>L{5j-?Bt z(cX9);Xs}{{~vMh8PsI=hH;`Opnw$VRf-g8q7;=9L1`jV1VRncODG~OKp+CrO9TWI z1*C(NNJj|035fKBUINlfLX8me?&I#v?#|AB|9{Ld14EwYoO7T1zOLWZ9fC9PvDUNO zB(sgm{YSxQvz>0?%ed9hF4Z%D%zUhZ5P<N0bNi3tin4$YTUd#!=_3G=79)}-cl;?n zNi_hNUEhR6;84+kzTzlZVk6TuO-P^4V7|jCcO|XB;A1<Pz`AK{qGCFRIqA=9GdS7U zl%@VE+vo?15CcWR|E?fn$TWn|!V|CS#CwN5XEPVGgAX9n`KN~yfe{C+SUB&Ps^|=a z6Actrd<k!iI&n62R>eF{hGdbJsJK69uVod6p0Q1ZRzb7%@N3y-yVfUvhyEn@(mXWK z!J*fCAAPW)wRajP3u?wZwC1)HIm&T#xHw?=WwLmg^yWLZHVjee64V;&eq%iJWLPR$ zb^KD?@u1R28L7O++VqDNe+>GC-8s$p-Z8xdXOOgs&H*bZ)>%kDPDNh_$nr6cloXzM z-czu!c-nvY$3D>jc%m8%JpliQ6%vMT=nUYa!yosi`Gf%cxig2F+ugfOTBbr*krn=O zV9{k8wn5ZT#ji70Kr}L2y32f^({cDqdSHj;2Kyfs=r8wBSz?!Y_<8pu>hQ6{4%3te z(5NrBe*yX0en#GBT&Gg12i)h}!GorYSG%E-9$V%282*@wRlYPN#xL_Kn(K+|ce7n9 zt&OLtXZ8%)d3}lU0mx!w&vSP-o24=HL1q9`H}Bg+{wuqjTd(QOfKB=2ZEZ^{Q3Llt zk~beA&ZnOBTte^@g3vyh<#7%o$;ZtLA#TLR@H8*zr~Xy393gYSWI7h^j`=Y#SV(^= zxi`esE0V6S^33P-<Iy%GO~af2rm{0bgjBh3!&os!ej5vg(n>g9tQKGToULv6R(}~1 zs_aFm4ZR@qZ1&EAwt9XZB96R{01db+Zd;$z6|7iltMIvW_Lm20XOG?e`#}C)!@qe$ zC&Bq$tql9-wlhxe9xah&&+wMO`?E4SCL)-#fCO~wiss`#Dl4aGt8UHdOMU|_Nlu~k zo*F+cp)j~hv2j%u{n7~VBQG*SGh6dQ1!1XAqb&PFhn>Cdf6%TuNRHJ21O4yYIMkWM zKP6q;Kds^xsua#lFdwfBCz%p7#yP&w2&br5^Ms6_FC6cN@`mf$Fu3|3R!-a1#VOio z(p+NAHB(icbRHowptkDWxV8p5gJU9YD1KuG8A5J@I$IRg(Rf6>XI+K9Ikr;%^Ud3H zhfzuTvVHR$n?!5@++=c54@0`dTmDCS&yScVD}IizH7b9HRBHt1P6nSVg{TkU#twwD zF*t=dvoDU;9Ir}G1RF1WI{BE!&{yQj0Ny^R^Mtu#t_mc}h(bpX8|b~}qiG|`u6Qxk z#{+k1+RYkknoR4V!f%=;+Iw0p0ZpQj%Hm&PXKeV3tfWt+MW4meXE1Z3S#&9V(ZUG7 zygt(P=5G?&gs9?NnCCDM62$Z@9Y3u(5<6{PUmp1;SIa8RW}r0?qx^(A5w-dmQ1`!; zf8Zz7ce2CG`|#3#6wpBd2jG&E)7jFu49Qu6(ld?YZj{=WK(bm5>z}i5tSV7Z@_((I zi94LPTn1*6ZH(JozcRpgxApIMwpKN}h}P25x!t@I!lJ;z-vaSM!EIC9A0?PF5;ME{ zm}<l5n>4Bq?jknJUv;nJsajqFRAgqkkT*EYz}}+a$gyP_J$+JzJ7!FmyawcYV?F-2 zmsQ}e8wL^r$(qN9ar*~{haSK0BcG+m9in1_6ypU6S2JSaG;-6&9J`R-wPAy~QaO!= zQX>Ys3UdIZ4QH=}L1dU<$nFJ=)3~}%@J+jhSFGym?zTw&Rj?X<Tn|(6hag>wv($D! zrnfXYf7}pfE0%OSN^FFU_XTsag+zCT2Ea}r#P^I6=iT?}%rfWQrH-#@PSzb5tjQ}Q z%AJPXNDm31Xwq$b=<jvI)|%Sd253uFVBEFKI4eOE;@K4ON`nO6r!x=l@qWgE@}l$C z%l{~NXCYx4@aaIj<?_P&_dU3MuK8)VLyCiZx9^WRhy6^SW9IvI{w#lHV*Q;{zHN6P zo)1%<_D^Jb-TwA5GV?S}BAHlKIKORk<9L={mA}@y-_t@2v|c7oUqimy0Jzt=Z2E?y zPffpJo4Q;ZZrSNVn*&)_R6077jRgn`$pldxb(AEU$El@mbZ>P+#_tlPus4IC8Ro7T z-QK;>w4D#8TCs4g0-{~7#E?J1L+Z~bkI_%&4chJRzlw>9QdN`uRxT(zxP-ZiT6~0G z|5gV?tQI;q?!T=aj&5VDW#G588vHt}_{qJ)xuFp`n67*@a0a&4V0o!V{Xj*00-O%p zUY3A19RVGxD7bDZ(Z-@t!}62+$DPKRyUi2#R<XAW$-|im_34>jaqxg|Zb9_*Bbg4* zMxQ?3J^c;3bE?8rZln3#Lul|3)UwwDj{5P(gInR;qsO}F8E5{hXz2TYrBe%aES$Xv z&Nx9*x^M2<DpeP~bBe*r?lh+SG4rzPhW~vik0Ch_6M^;3;=%~i>a_S^QCU~EV5!Ae ztJJOLq$REYLIK=7Y7P;>dMGR9_m^(nU><vDm!v~W!KfoxgwwZemR}-+2z{NWll}Nr zb}U)s{jxK@(Z$KDycCd#R`}&m%QM7*GaQIrFQRy9_GJ5m)E6(2ZoRvtkNb-KJ__+6 zM0Y;ICfJWi`O=$)@a8rLG`5Dt!1879y{B*#eb{4!cW!T^BD(hc!Z@2v1bwd1W&Uy& zxe58W&uD&21MIRw-OurR{5_S*4SE1vLw#foRv$l}lGjs_Yj!<0uXL9*HBRjh3(v~8 zZRc+Aw!UC7Hq>M3={A!1>u&hnr!Lxl-)Iy<k3&(zb&}|VyINUNwN$w=o+2Nue*MZ| zD^+4klilnmZC9fKW9l;K-3gfu@1Mh$?_2NT;+WzXX7cI9=8K@!6mRQ>sH6WVc5-fP zTDU$`@K3f}4VVf;6uMv#F&4XW^m?_+pO>NH4Sj(Myls^d>xoKF@s~*=V|9s_<o+Ia z_!OZ}y~I*Bo?~AJHdluX*9F*c!3~T0L6N>v3TL#5Z&s|UQ^W+`D+v~S&3N_bh6L87 z(gz3N0+*%nktb2kE<$LR6dlF`A!eYlJP<C?y{meSB!$L+s@+MhrNgC6In^3vj}Kmh znr_NZ6GfML<ChRzX4_mM#U(?+-p^Cif?roNm&>MI(h52rkQi*0*p?+e=?Uc^coupn z&&Zd9O%;vQKMys0v6B!{0R<p?3qX9TTrucjq7H8MKMF_<aN@DR1t!2fTy1e^bEvCI zYuYzGFV;_4{<WLeS?{fkr1p&gnxJ09&5cc*AD+-+vzs3O`&>*@s^+{q>@9!_Q1&L| zbn?+-LDllQ@ujE_p6N<vbgkN;g@?H2mYXKkSh>&E`np-3l9dKJEM=o%WwnMHg74cI zVTC1?6}aYx^o2ic+P96867F$ocTk~)Oo`XNNoX)cqJzs_EsXC=^|a<F{7spkSY=Ut zRk2S67jM8f#7Ze^;r3bF_=GSSY?vCzy1OUIR?X?*_CiZg+#wR_%0LoeJ5@ZX2q>7| zQoue+xc>QcR^m^u(n%%6CWh}4pDI2(w_rO+qdvpK7QyrDW2C*bhrc)n$9XZ*tp=#o z%wdNs#j_;2A)ow>Gr9U2$W;M8b4PVX=jr=IaE+l=Ujp15SbPlnP)A(+XG=?^4JX9C z4Wv{(M~6Ct)!&E%ppR$63G?^RbOG3?*&>hHjAkBjl<OSBtnL9r_VAYBWsl(`X<t)B zjK76r;Xa?yjH+4E+T&{mh<W*$QOIrF@H_B=A~3rTEQ4ZCAY9pI=I&B9mzT<E3X$%w zwSWoJe-u~Y5Amq*70RwN74*$Z5wE-8L&rWtU}8<tFb?o;Bu1qcNmm5Cj+CnZ6(jJ0 zvfkjA_rYE2Bxva<^Og#`zMf9Rq7>TB|M<Pw971_==6~ta0z~U!#4hiO`p<bTWX=gh z_5N{|j(Z~Bx|apOhB58I(cq8$_`aUfl?QS{1ZWTEXZ@5T-B$gjWX6QR#iJ3hKECX6 zGrp~R*XtP;uK#WOEaSxL{>&i!Puu8>CjDgWl}FfW>}`TP36jm1K)kF3jP8!+q+@3P z95!>Vs7O%br24we<vm0O+Y<}bdq>w=QjV`7VRtBAB7xlO=~h+5@aa2%t`R{7ZYf;x z-QJe4udt!rRZJ4<lf~?XA-_ZYY{M)E>Pa3N+sDU`r|y<vst>Eoo7=|7mNDHp%4D%^ zgfH1sSKf!nmu}clDqq84$B)J8JT$i^$QNd{_;$qXEOOh%$W_raV8*%-^GVofYUsMo zmE;RdLP9CuRF7rRGjn^p2%opFRrKILsKd~r-{355gb&~RWLT9!ZfJC7Am_@D1;x_G zb3Vy&$6hns77;J-_ojOuSUVk@{c;^C{kvfNBe7TYGju|%`~qQCJtAj01UAkXsIE;I zydU;O>;%xn7ZY^bTZMlpp7LL>(|ZM?^`9{|;-sz&tjuZ8xw+$o*8K`|?jm2CP=4qf z;4Suk&RnY2(saT6ZWtow13!@AkcU3SokPrLV8Pb4<CXH-N7e?AISWhaO$bQDY*6s@ zjsrF8I+-VP1-ITS!N8<nU^7j$={i~8$vfkh9D37NsdNI0^l#;x*r{7g%uHKDa<{Z( zC)8&sLJW;lUaG1`39YqLAENZ~&;dBT^+dn@*z^Skyg!OB(u*%$UMU_EqonF68_AmU zf3i;dE?9wj<*i`z@ViWrI$*utu%0HS;}^F?$gW&FmCDD$wpG@3u*DdFK3Ck`DutD& zA%)<0sea7~&dgXm$Ek#K9JF7f1`lr=gO+t*Wn`cy6_428X(I(i;B|YRBKmCz&KDPe zbruOOfh*RgcLC{@<$I5B&Tg7kX|t?SnHlr&msBRj5or8Sk-&XB^4)^`Sh=L%51c8b zQDj9z&fatXSoRIQAgxH{Ys)sY{p-Ylr&ZOTuzYaCKhubXhYv{5;=J#0ujN@Uc9_%l z(^fkvX$u)8FQZby9}pGw6+$u5xiga?au<zc*i;CDJMRa|QVbn?78B$fG+wu{f_t!R zK~gzk@?y0^>RU$z*!z#Gd#h*w39+NQ!#6BINTNaYd7X(_@RKRD0Lj8XXEb=F;etg9 z_z?x5yIo-&g^P`$?TcVF-8uN|t@N|H)pS!;jY+hi+!WuscxTB^sm(cX$v><ptsX%! zq4ieI4VP^3Cj3H{eNj)aa=IIQI@|pAV_<iu95}92>dK*02A5kwy%C+$1Y>8t3BJJ# zhiHGH#E$<ctT%55$+Vj#HiYl(ddlqi(QD2cHv_HWsJWrn)wX|+HX%qW_uUl`(fqxz z>=dGt{lw0}p4|MqgWOojZjiB}Sy;AJ1M^?+`tEuySXm(!mLM!!5UB=|sdL_DL-5^5 zg-LsnByA6DV3C%A9J>eLT9~nY7Z(UMwaiaks(9vbP{4?;{%$s^E35Jr#WYFgCW#St z6W8O7YuR2YH?U*IRM5_plB;+7HqC6V`te7k^GU^FJKsYpD;~<u%x{V5e+({nN3?@S zC&1K%UjK;Y%HsG^_lmXjnT4$_nHG9<YH!MS;ElWw1{8F(ovKU(;6o)`$dO0=59(5* z`HYSH)v7+>_fWugGr`W!ugqWMS`#Z>Q7%teBI&GZ^+HgLn@r7tGRSL0#32}u^e=5< z7H18t7KY%xVv@W0%*x$<94bFpS7KL&FH7}hw_U9hPz?fNzPbR>P=25ON<{gCG0&qi zD5qeQL~!HDvwNQ&vTn$M6NxoFUijHQ@~uf366l+o!lR*<8q2v&eBfIh=4y^FC!!@K zs@FD$fvG-}{D6QK=`+DfFRXbzyg|$rU43q^(!aTB?bS{Ky-mk)2h`R!O~_Pwc+4ws z<OY{s7w2sRRRm0chcU^3s45agOj*|?ID~SK`OX`KDA0Pl^L`$9&`;{oD}l=sD>3YM z7H{gc%ijA7a-c-;O3a`iUP)iz8<zsw0;3i^+^GC36miPh8Ah-GW4#BBEl~5PS8s6t zn(|*ddDsJ+;J>PDF`_vRw<6d*Gxjo+D*)_Z2v?vLS%5YH+BJxtw$l?EvWiAqXB(3X z<kpD11S*E>q{Yjt<mtY1un>z7cJ2KkWL?9jRhhs{w11+fuB(F*gnsl`;IO}^B$>px zYj}!O0c4=cQg~=@L$zvFp-ZX_g7;gQ<+C=kP$STO<}p3(ld&UOCg(iYlX|wV>jMCR zeI0wb)}>ObH~aD^+O^E(R8^osx7kD9Y1%`?zgeed?STs5l^@;A^hi&0O3!pGY{~i- zGW9h<GXl?J(j@T{?QBcX1rw4=TImS#Nyz+Jnq<MIIxXoQO4%#DeWm3nqDH6^VpM$u z_(v~;$g)}_!8YEuja(N5@e)9M<UnZ>4WS{9_*2dL$^J+0ysLj}_u2$IHT|!_uH`c9 zM7zNrQ-%7OcMY#Y(*MW^q>tINBoDlO`-I^%(FYJ;DN_gF0HnhDQ|!K+M}Y2J{pt2$ zh9<?MpAY80P#%9n(5dp+!0fFifTkNW3|JFT?E8wU#uSw>!I$s9I-H_(^3XN7;sm&f zBQA@-GyBr_njEv%u)XZyuJcCwmr01>LLVaWKZ=We8nT{saVJ0V8GS}fbkcKbFnMBq zXZk=rB$K}R{w!)GbAJQHOb|`jQ{{s7^^8Ga!NwDsHIiU|cDDEXNt$Lt@dG}j2jYLZ zQkV8VvA+%FSs+IDZj87!^>ocIatca`{th)82+Mhi4B833rjCb8jj-;{OeyQ%QD32w z3*>wsdcCtbPNGYG_+8r#RiQ<jZ7zjM+s~mg{5nlfn0$tR-_=CiStGM<wp~3M=I!81 zMM2!ix6EZd6!Of9KmAAXd`hs?>vwBLUgLg(X?n&YEn1%{7c{+_n2>O=D^=q%cZ0f- zwPRzkR;H`jny+^rRcY(;^{JTTB8_^|Bh&PF0<vR4j)08z4Y{l%Ba^)arn2-$4$ykY zN?zj)4wc{b1t*YfiG`qdejazGHpqfe3sUOhx0}P~xwsp{Q$_{m`&WZ}0T;+vHaC!S z<@~QLN(sDrycIT)WQ8`uVz<=Gm$l=5PzL(GqCQWyzY5epn5zbmr<VMYLA!w&-C0j? zq9oyy8AR7qZF-n{PtTxD#A$r>TLuzUW2rAHNgvf!ev#8@N0xA|WxgDkm}M0~{8~Z3 z$ltb}^A4d<xxLImU?&M-7xAC2aA8m0EqJBn$nbbf=PdU<+mna`QpjyU-Fkc;5=K?X z&Z?)K<jMAXKj)5CHs=B=l^~;J833C-`3JurFX>w$Agy3wId87HV<5IJA{cZ&2_ilv zKUyI_6N%3`rw0DDUWxHgPBr<4F0bpB^O~c>Y^kn1F&8H9#ArZ?zO~>uk_It%IqNbW z#x>Y=bNej(&J(_Lsp!<iHnG29!+haC+Aae_3aiX9H-!wg*2`mv4NeasYXDDDFFC{k zN(<rDu!r?^vxNdJy55>n2lH8FJ5&Bnlwi?*m%m#GEo2O><{*8fr->oYJ~)(Gy+Ms- zE&PXnWtDGZ**JOh6hi%deE%4_-Q_9N`V;9ArE~44U&qB_#p|5eMc|oiyu@c*T!2W) zS|_IfGVY9pbQ{<t_5Y&~25aB}MR0FGs}w<zBuPt4%Y9T`bs$h}XD6G{1Tfx(BNpp| z5?P0Bh%W{XdobC;?ChAcMD*pU7*TPaDk_;OEHMhF=M7OHI-?ee>4z40n}kY|lJwV` zyWb@t4sWU}M^>_Lj8HFI>vzdeX)Jls(M!pQv^J&$H2rA$03RDzU-SB7?ZLWq0PDhK z#MfQ;!LQop&AQB3A2lJe5LpNPoE@Nb%;!*5RfO~0-^AsR)|bxxzsXrOz0euBf}<+$ z*ieVPY+d{>8LWTDm-Dq+D5zWEjhh8ku`TVp%r%UeA@Z>~4fQeVv$7#B1lrSjbu5&_ zrIj7yJMU81l6bD?RZk;?bP;~A73~FifYKty^C9y#T3PU(sn^bfwk!gs#va5fZ1Z-q zeSEKU6_ge9hxHTA{OF?`H-^BHUbRWjnY23poypznLzHL&&k6x`iNMgoAC*4CNsxpH zPs;7mAmwzR{zx{4(`!bEEI<C5RU5jmilz9oE!_(3N>AZtI_c}qb2sj9LdF5waj%EH z8XlEMx{9-5d~R>~&`a==-92X14O;IF@4piu{3uY;f;L10fGWZW5$OwXY|!4h#Jzp1 zHvCRtIHzFj9@jmj_;j|~(WdphT7ZP*%%J4!{?~+DTNc>dDnrw~$Ni`BOHzb2dZE6c zk;z(qHZ7M|;Sb!odS!)g&_&K6?-Q$m6KxFWb*17@@kINcZXojY1A_FX85Q2}sAs=x zmK(*`<43=9Fnmil?|Gg=+JNWq!`Zk!Xpf(V)(S7Vr7VY5V|h8hBT%ZPZT6n9<I4n$ zW=0{&du)Bep(>)&FiU-P{<k6z=d(L0p#89yZc>E9bJgu%`m{R-v#L5uXa2*SC|5id z*x_i_($@D5L;Kk-E_}W_s~#6Zpaoqkv-AwT8C+|*u87y2uD)tcVV~|M7}&e4E5RND zItWq1REa1~B#z-C0tXbcEE>zGILyK={Bd6#8f;tcD(iOlQ$<Djm_i@up`gH6%kQ|t z@{2@CzI8(+oGoY5#<$8S=k6=&ha9LZl0JcL7MJ)dGay`*7s)i&fjrvPFumOXGEn0` zovJ)t!oE`uSnfQ4wRLyy4UPN_auGoYuOk;hpva&e)?cui-Wi!lc`0eEO>@$K)YE5z zjURCG4$}vzvr7L_JlpV)euZw(jn~P~zD8xFJ$3K<@fG6<fB=B)Ze!6(kXHe<2i=H7 z6irJC6t=uUwTyf7Z-X(_poUfu;AbsfmN`E|{1rs*?jr#PwK!3iOwJ)|qcn(m^1FRq zLtNIDWOW&CZsgf!OG9WK_J1tl(qO&1JKvI6Hn%X$+Jd&1k*s7j4o=l6UbJvi81ycl zSM&3n7Y={Cg<$G21JVj}S7exBK1O5Z%A(82-Sf|lMcKwT1D)g&^EpYYDBy4bbq}`P z+{`>B-I-=P=oEiNxf`*rBipweHw}z;k_q<YSY5;tus>ekRb|{h+m9*tJ4dp(_UTUC znjj@RSO%ozIEA$j!}o_*tdCh&vZaZME8@z2r2xZaF>=?>)wdvFVa|H!PhM^8kH>>z zoBJ~*h)zAi3i+Kr17gVzXrY}Q<wUV(Cgm@w2<}^5aeLF-yTmu#62>|)E@BGHGOVvM zx^yIeP+z<Pq{qN-M=Ynu7Hl!WMsvB0F;K7FSmEK26;PIcw$iBb{Ut=Cg>$6wR3hx+ zquJYU(zlxq!S?{5cCe`YK8uNpy<Qzgt~m>25Ton*ChDO9Q1xUY&u=~h9FmSmGG#H* zSZet~998a#>77xE7k@s2_I@Xj;K8{`9!$2F0Lv1%t${zX+*J;X6Ow8v=oe=Cwil2C zx}|opgU#TNUt|*XQXO8FE^!~8XCBxV;MbQq1AisS5hGkzVEeh}^b2Wan|q~!#S7BY z0>a)zu$SH&by>s4m9T9a)vX*hWsO3TcFt}#H9<mb{Hgtmw}0DnlrCU1Di11Th>)3v z3uYjC4seLv2fj4cX*e5sHmCCxyC7WEIKJmqr&QMHA$`A<#vx?j9e;1jWwe$_OB2y! z1<AB+1miZqf=zOU<4wlxZ$67LWa(V_RwCZ#3C+Ye^lt9d@iXg!-YLI?HDtzS327^G zd$0DkS_biF00%Pt`Q!HmfCaXd5U>J;<l`3(LbR6mqhwIR_vWo#{cDB<w)RF!g~=jK zcO*LC)`ZmM-nu;V*{w4}>@nvGo!n0k^l9RG5e}f$nTKAE!1esDZGiBN|G_Ut(X8kb zSZA$QF6O&_+jPgBJ&Nlk*l$+3avy(J?UeSY$=Ux)`0H>^JqwWs6n4N+N3KO<F9oND zdrnY{;&=RwnDG^0Akk%}E*HnEO3rJ^owl+C@3J6D9(^fw4eDBa%S|S-Zu2n_9Feh@ zy$6CnYTIfYb(^^xPxL66k{jR92<7sC9~+uQ-C};kwGt{y{Jq|(pun`r^>pTUUCFOk zwbe1ZbLx9eqTeaNUy6Ge;=D?AicwuqpI{z|*P|f~$=qxdWH-c}ZB=Gid^h<v7OpEA zcjV&hTx$t+sMUG;PC?k;E~Kj>$dAQDN*_G#o69*VPpc~+(8(Q}uF^N+DJ1W~X-z3` zRr{x47DTq3q(eB{KC38>R^`hAzo=<SnU?MuQ4@HQfcr7bK+MN^MyP&2v7vR4-3k~k zxyRjcpuLex{vna`8?^;uCf_N_c{7CX-+dd4%sTn*?~P^M4duz!MKQPr+^qjw_)m`Q zFLq5n*Q8E&s&-ys?`&OFuU7y5N@|^&=n?C(1-RQQzE$+Qo@M94)v=`H*SeN<lOs3! zw|~WxzWr*wP3*)rJ%dGe&S-uv=r5ht^6~a~!#l}^lfQLIeEW;<K4e?t^&*#)6Pg$j zxN6=)3=g*KcVFRz#^g07X+2h%)C&}iLF?NShI<z{@cYrbC=vWT;I{OfEXWjM{Hrw( z{Wny80Wt>*Y?UVh4M}1ZSJnsi@V`>5YEk@>SG8ux*ZX+OFk<Di7wq~IeiFK~vo4h) zwMp8zLzcS+e`sGLwm%jl>|AY*=&ArB6>yqgmz(F-AD7;jmXxw<NZHB#JZO*`mp~b| zYrz8k1lJ<$=0u>MrZ<72_l|+wQkz-vbE%Z9P8O$`-|akN&MM7Vkv0yJU-3<EoJ?d> z0oR*^eyQgB)eJ@o*jiYyc{SlitaF*`o4@s7?^rvy{VhzQ6D);%`h0Y~d0g&?pJhp} z>6o~w0wUK_qC;7nP;B+x+DQp0T^kJTOXr$)6ARAoN|C>k+B!^?UlI^D1nOvcJ)!4B zD6SDDvs+k~1P*IQ2Bpn+`VR#+MBAg|yUwhFKFx=wS4nkjf4WS+Sm`Fix{0hHTAGdJ zr49sdi&vxryjJzEWKPtT33On<66(?-(U!~u4N}GpnCbN-*jAvs_{Q%hYoQ)iNZni+ zwAeUd+h4L_vy$^C<bLva!xPDa9H^KfIsYKA$DmaTW{5W3Tn~Os*y%{i*iJ=090--) z^EG8pAnDsLOWl^2GU@h5xWrv^6uo?Fw;}L^b(!xzF>-02ZR=MnH9n~rC&MH*u=U8U z<wNrM-~Q+e2{iG(E8)?c68!OxS`X#igWTkI8QMOi7jG%gu;qqUi?N<?C1}|+D8`{K z?uoPCpO*1E-2%TLE*^7;Vb#{-CDl6wWVqar`7%-C0=*#kVO4FpU85k8JSR!#Oun49 z(aJ=K?he*tlW5~6Dh?qz1I8U*zRsWgDtbiKa$gPePqDMfc9xy|CPM*C`*GFgXE=j8 zgFU#j#OW4=zD>|U4i{V-X#B<P`^r!fRrP}OltpKyxxA$1oUI4)7g>K<kW7g=0YwV= z9(dd}$+!OZXj=y{EzsqbNpkLz2iK_?(?!$TCFSgwWyQaB=~$N%n5?D#r&@0f;5{dK zDO~2iMj!f;Dtu;)c2l`C9x37x_LF@1+=mFhx}qaD9B;#N#82g_=<2tuCqfxq!mV?k zJGt|gBZ+#&IwxFNu>dB4`<<Hyv!*Zl?3Z7-bD|FR(|I?`+KU4$NPi#|kPt$+hdQ?n z{geDfouYZSN0Tk@G7Ro;va#Q=5`TqgJ_9@ExgNM?`uf+nDK^DdBF1E{b8>H28Hc8Y zelv$y%v;%LKn0cSYiKGjADh#;Eb)g_=44ssp(U&dp+IRC&nFo|+1}LJ+F&?cF>zvB zUtY>|>vc4dCtw%2bVZH>mFbxf8EC!!%pp0o++VJ&3dAu`Zd%kA^QQ#{aHeSg?Coky zY>Sd8Dr&x>{_FKuhfI7hD53Q(f&FvHQd_j*qwM$A`B8i3-A<1gio`P;y1im^oT(0% zr^j-o!}b%~Q-2z*d_iQ_?bn5^T)goDyxta=idW`qRrP@wg$H!TPNi<GLM<bzyo<01 z)41M)t>2S-S(1)|oD{29{CQ;;nhKQOs^*or1=Vtekds~S+KUvv!HnA1NZxy<b27_B z+SUYyZV9K!n+gC)>FRE?exb`*cK|r|W?<5NmgHD(@}M?7pc`9%EAsAHtK^tE|Nd_l zvQ}mnUNJ^)k&9$DDL;I}Y2{hX*tmZBk*100$H6s<AKP_^qdUhIE1|cEYamMV&6>f2 z#Vz%d4a=)FRv(0&MZS}TNE-Uoux~SCi=B_^e*~S_y#z9&4|&{o6tY!b$`1o4{z)sK zzJmhaFNq3(%?)>Y-JB;jcVRONk1Kjo>qw)86`jk=8tvCZfJ<+)#htA5EDw9X5N{9W zf`;*H>q5ji!CRoy0Ws2@Kj875-J@+<sDxNLx1|e)!yXbBcbDSq5}?7d@8F{vL30=P zP$k=XW?WJj4EQ6KX+Qs|=?hk0gLMe5fggYkcAU;!so@Z8k-f$n^v>MyGavD#G3h3L zyfc*6<k1bJ7wb=sbK{6#AAya37?kD<%q}sf_35eFY{7Y*x5+1?sb^r>0-~isH10(y zF8+MhIS$t^d8<BLFw)S$nQlk_*P?<%Ri$EIroxXvAYH>0KQ^TkP^d4VL%%b`tizMc za_e3`V~~G2LrepoD1I@%LRoKl{t{ZvL;n5umg<I7_o`igU%v<cQMf0iF?0~o`rly9 zJ&-#D)ub~Xixf-C*{OkP_)`u~&?&YqsD*X4>3A>9me4&<tR~O&zZ%UAk*}=0V(4{P zbg13m;e9}6?IsF!Jp%WlcwzZHt-?`yPafBQG21j$Lc5q~Np<jjz0eEt>JSt9jwe?Y zO#dF=oPkvNIXYSB{Sh>xd4A5U5yTt#uD+?VhTv>5E=5u+-F#%4V+(y<e?ogb_I6s~ zoEh5VV&Ld3Zp)>jqA+tg?N*|0v*P2g4yih>l3=#?L+($W2uk#7sTVjHPg)uuwAFZ$ zM>*0N#7}z>v9I4qtmja|jR>02%e)fLs{xdf<)E$^+XHEqABRHxz)hj_sK=8bzEz@i zLhkd!R^IJQ7DbE1LUaaJ4c$1pC!|R&8}?J!Z~tGTxQ!7FhA!pMxN%*OjP&TgRSF{a zmF{0P;g7$5&=@L8($AL9#4a26ic>9F>;O45rAv!k#1&J*T3Rvjb0<F@Y4$v|3h_W^ z{n6KUz=sOzRTZ4{1&HU)nqxxaHQzo*rCVYhuUB1BGLSL-cT=30^dkUd4r-0_hd$qK zcU=ou89Yd{EQaq@3=CIKzCusdNvYmi@Qcn^OC4Xg?&6PhF@$K9z{)i7GCjNAq?cmf zBP?s{gLOBJ|2hxQp*U?vRwIa*lYBz_@<n8szGz%+zlqj-L&lIjQCbhQR3O=UDST;0 z{sR~r5P&%;ziS%>jTKHr?5Fc*1^59Yg^$a`&t6O8g*I~4GoMlQk$l<|e4uB`b)W>q z)Y(auZ4rP+qCc2j&}GRmHSkPwW!!bT!r+!$LJFMd&3Q8l2#`#g%ROQp8(x)oPmt<% zRe7^5Q4E_I?DS2p6?Vz99D^)Za(>s|k!Xfh?iMyQYNT))^lk*P3SD{WUSU^V6ONe% zqJ1S@e*9*kyQCB7=oP#gQgl1DKiLTh>RicXwF5+i(NXTo=7l1k%X)8DvopOQFm-?C z_8;Hzwy-e$WM5!jSd`)H;pmp*F9A!J<A3}B@L5=~cMnI+*mO(jsy{k>HWQk)eqW9I z!y)I%D`q7)05GG2*+0RzAgAG=!kMYZfwpwEy1`Xj`k0Ek1FNABXInXhSG|U?c7h3Q zxIy+O9)I}={A?FHgmrYk;+XcQ=N?L)Hc?$GN{GkJ(WA#i=fUNsffYGDe(Nzb0w<Bn z`!1V*@=x3<D7zEpXeJax`mFFCUPUrlPlZMIEnH50i6?(r3eNH$nV-`u+G5o9zmjSC zUh=JsiA>VuMjQ2!(mp*&4o^-lOFlWb45@zWQ=2ZyuG$WST-pDR^>6?o%~Fa%yLsYR zr<={R>XYM#aP^Y?Fe_v%+G{D6%->T1JvBWf+87E72UcVoe^@0IUQQ*6Hn`#7QUu*4 zWTen1<%cCRo7=L#vR`ERDuy5eEN!lnG?w(7dxO5?>AZ)9>&sM*_xdNNPnX0GwN@Zi z5X*D5nXQZ__9%}d+Qyw@SNUyk59J&`{=tkZSWcj?q}4ZkCdQ@s=Rb<MBSa??;gB3h zmG~ENsuI9|xm<oop{vKgRiZ_A*HJ!yeNI$ssIb%sv?L7h!2pCHhznLrEHfMl<s{mT z8=z}w{AjoPu3gvuc^$Q2J=DN^AyG-RuXM{6!n5UkgEGzbebZZ)ETs{Y_e~q8%sFuz z?#l89Le_<}Fu4u7hJn-{M~bx<g&*+aZ$a}5UU4vLu^u|VRlPe+)bBi*xs8laei`5h zmBcN$RJ`F5`7{k8U@jy8!S>2>Q$5?s0xf~Qyhb}Y7F7ZA;alsqnQ7U|Ym8DV;o}^2 zh|;*Tu_EvRug1FEDtqw-E*@OCbq^LOBU#55JF{^0$A1)Bhu-aX+6lyQ(Tgw2)b1?v zP>UnsB;{EmFyMB@G(@&iZDcbOlEQHOHx}LQw-i)=()iQ<o@3$K%|D$<JM_V~?Eqk( zg<`~!&o@}o;g0`hjhMkd$~m$dci#eT=FUOF=`uXIS_h}$U>i;!*?$GG*tAsXw?Eyv zwlpkk;q_4;?|SM2+E057dUn(nm92!&i1E{rleu*9skTf)O(~FV_;PO#o<-u$MG!cD z6cT^~u`IaoGfK1Z)7xxe5{oR+hnu72sa@yO?N_f|omgpj0S)K^e$9H!9({erw{|b^ z{`BxiPsa1^CB;q46MxeaO&<^DUgr-(BB0pem!=ZG(3S)s>5Y|ebs@1FV%-<w_Bh#S za*nQY`R7SFk_g1S+8i+gB}Kb9sPq5)`2R|MP5-}BUvqY8#XL#qb?1*^1fo-&OXbb> zHWp<?+*HNaxHE1Qi>Fs>&(p=lM5{e1fAMW+?rl^;ani{FD59bvkVmo_zP2L_mGr85 z9~j>lv2!2d40Lr5feGf5hIj;C29V}yk?s!_U))##6wB>x<T?l**%?D(U72Tp8PRP~ zSw!d4J?f@-sp`X41nZ73kj7_*#;&ER;nyQ&R>tM&odQ|+KLv0ICMy0gyjW>xjm4LB zoi)5`y|taGP=Tv>*=>2$Y}p~TT{UIlI`WpbfpmBQEyADt@bf0<_cRHQb9#74mG24I z{9U!Sx<^)0tDFJe91dciIzFVOU_q$OQmnG@K+rB>_A~i1{TqIEk{bT^Sg?u=&eBq@ z@Ht*fzF=(0nUkLDOQ>HoL(hJM=^4Yx?Mf7VYg&Wz^w;sdd@Dq|J?j*lyKO|C|C+Ao zJ1K$skri~Nge`MZ+1t<)?rdl?>Iwl9zf$46Le;3s2gL-*CA-$!Kou!fot~e|p4Xp# zYs0^T1OAh|u>4S)i(zBGe_E;6Nc9OD1H$iAZ>Rb(&OC!R8;q-n5)=YoOp2QUT?BRk zEwt+sB{D@(3%>&^r%e|gOs`6fh;cq7Npxy;BV!uwPC*|9MEYLb?=Z5qR8NKQ%*ini zB$r)b_C5tH#|Yl-QDW%0PIfSCz2V2iZiO)LtR&HWoj+B&JSsEemQ<B1%19yvhFO7h zN3-|6$#e~$*JLt~M8267>RoD1{sRG68xS%o@v<X_oxhh)VO%Z-Enntpi1vAQuyxn{ z_vA)20R<`N=OF5960#F!oMYU_wkE#6zV}2ZsO*Lsil+r|n99xcW}gJi3`{ZH-xa9L zfUT@f`3FsOop|G~<^1GYYjgtg+z>NN!0U;|2IEo7^9^17^35R%I9!P8iCJO%F0)s% z_Vc^Kmlm40aBxS0R>uPU1oj0%q3VRYH{rR^x!f4M;CMiQx9mNZEKA}cTurXQ%0n&B z?R@?W7tK8wzBsS6(ILp}Y!_J<4#kWc`93sFebJOkO{RJWt|L-*e}}boF>af}6f$nk z6-Zv<&QA&yGVM5~VOX(dW&P6x>Sow+^)vHB-EhOqSXpG@M2ej~PGUH&tqwjwN*9B6 zus(U)Gwktlo7`Fx<#kG0Mk#^J(MxzW%4Cc5dcw@?6R*qfqJ)|9k_M<Kirf_6Z=SF# zW(dbf;anYVIYb(!o?Slx{r@cF|7Ts7Z~k9lu}u)<S3N(U;E*@pFWqj|WZ|nwg){)L ziU$OZhIhU$$4XNLDYLswYN8(sKRv0R?|6K>YU2)q4wnCvpiyS!!c|yEda@tL9Nxb( zIH`}RFF}Eb#Y<2m&%8@|*|#k&$HX6*I)AD%2K|M_)c&qD?h~Cq>!0zWE&nfnFlag3 z1GM2!@FHLRkK(wjjHtU*h}QtDc02Zy(sg2MDc4Lbe?0l6`rNh(lBfY&jIBkn!PN=b z&Bd+|i63}OSiTN#slpxjd2A+Ya_p;t$9%6?CrDh-D57-{?fK?jCF5M*?TJ0}sqzD9 zoc>rjoEz(j*2VXA%~a+Jr0)g8bp^-@nqroO*___yNB>)8;GNc7M~_l-eP@Ih>rlal zeLAP{y{7E15oXv>hLJsAAOh6m(WLLtBU?E(yW0oVOe2>I?1@7<z`^bn1=_G0Mc}Dq z$Req__{!u$XyP|le^bm$mA2_Dsa&(ssNMGW)D{bs_i>(KW!pef0xU?ErEOf^OrB9j zH)ihEYp~cg@|{gN(@Fjp3ERo$PY}P4YtjmkvvdQ+M`cGni3U|Bmp=Z9;e8>Sst<_L zdNP3N0RlJgY&L?Hmx-;Fas<eaQdaTtt{C}*FIVl1-|?13;&T8RQZ^&93&KMTESq(^ zx<+Zx1lG>I_iVp;9r?v`4?5q<NpvATX}6FL->cSjrZDFXx}RbWz&*lbfvp5zO1=$i zHcZ<g--Pi=?B3{4EC*vn`@{93z4oFEJoq7#3TXtP9)+{SqEv!Shj@{h8*^bbq<z7o zF&X(2HF)U@BB-S`ZcSALsu)E5wyr|=1?|bk*IBRTugNhQq8n!5%#QO1M9*`@&^wdz zS@z(Jwd^h3tisO+rM3K58ai`0U1VVhlh)5&kLCxbhKuKa@(+COPkEYrg9<dsG~N<y z?EphQt|HKxzIO8##++a!d{%#kO%6m++*N6HLje!QCbDhAVibhG3_KVlQJn-FW$Kt% zV2TOYO66Q3ETczRe#d$u1DFAD{rUYqkIS0nik???DKi%V7+<XFogaArw=;#&(fh~E z;j?t6t|@OX2R!T$&>C-nS(#?b5dXSW&(9N`wZ?>Q{e6AM8lo|*e6b3O0XBQ~DE)V6 zCAJSU_4#ESQw=jRe-;3+8_f~r_sX~`AR(s6a=}ee1jAX>+IarFLei}-AU&DT_gqtA z7=5(_=0DsMdVj>vr`XbMuw2KRhy8jCgj)NT<NXQK#qJ@k&PSpV@&S{-)3|h<C3X0O z76lw`-AP)-v~`}xH@8LeaW+oGDyD3XC>I<{0zNzyRve!c5s6Pz<}IFeBTQ`ph;%0# zq33Kk*RR}~jL5%EUB$w_m6q*T#7*Gf<|I)T&Tp!+_Fmz;-Rz3H#lQ6P@a@@6NLM~_ zfFR%OK?}qWoxCXZYqS`oTkxxxHcVl{(|DbjnPzmm9J`XZOS+Z^W2KH=)wQmS($zZr z{F>8#^IvsweHe$lU=2o+DEU{kND`np(2>a=2v3Jdgy1v6l|Ay{k4L>oy10I{hF#U1 z2qt2X@xCZE3U1eu1e|JjH@Q43@~63Tm^+p$EHDVriwWT@d+}QwLUfu-YO5g<L-u&* zK8D>-eo6>dqML46yvr{Ae)>IIQ)iw)zDnp=>rL2YeX7|la8P}z2nt7UYLb3-+^fjS zVZzthd^UtR;uVD?EvP_W)VApcJ{^_nR_lDQ(WSCg2(-@Rto1EZjVF%IEw|GflBQ@s znm&#z-?_`d!}Eg_$&ZgB+LI%PfO!)IFr>q|dEJ184t8O%rf2Rttmso2pFe_Ejh(kB zc*`IF%~+ja{ZEBrGeQ-u5_z1}QaiFREcr$}=EuOUCjY@$3sq+O-CGF}>Tlm(r4Zw} z^x|7)#fPBuv|xK#Rg(!BN~WoMX`tV&Z-78cQV76PVxWOSs9Gn6K49#4!O!W1UlyWA ze_k_)b`?|(Rgr-1lI4jts0~wWHtP>OHuC6vqmKKNOttV2*?JR-J4)x^Hbb*)`AOdv zhA#G*N_1}R`K^W<*Y|EGM~F~YE;XK_gb*<{9P;paSio`%nvMDcS7bYL@^*wE;?5?S zk9e@%tt!MNnn045j=%-GSgg%E{LRn2=ijWkNNzg5F7b;jIpYSHLwp&iHqX8QNUL1d zp0!+WPyd0DZhIRkeUDz7u^%<(_lP(9JL@ZJ5W|Lk!++woLYaELxnLmz`1FcW-ET#S zl2WdLpnG!6xsF<=M#VWnM?vfR$^v;?To;(KZ>}d9hr?d1jqC=(xor0Z{=RuI41i5+ z{=dr|kZ~@1ow3#GlPCa3bZl8D*QgX+r4ZpfC1z=>e3(Z;p|1e`P(t}#`teD{Gl>CJ zS(5$)oWedr7vD0p@qzN>uUgV?1^dx20VIvrGy0u?B?bWMOTk~_Y?wEjY*#zU+{TC6 zyX5z6IOs+^tyi_Vn!8gv;*LC^diD%x?_E>r-+w;oZZ}ao+sqx_$^9{#{myIu?;SmF z5KL&0dmEjymTTdZ<wb$3B9l7X?K%Aqk9oz(G#F)Gob}~_eN7KRvtQy(cZC+2`sQsX znD(tu-BMnf4TQe8wTm|f?PfMH$%RQ+SBE;;f$F{4alln|yd}ZVGn1WM2!skk*W_z0 zf0{TXhnE|%U*e6uMZwL3jR9smr(GT|O=-VwvO@$2FCIs&KUuue(Ng>ZA&KehawXsI zaFzO9XInfsb>mg_#9lZg?TA^>9&|jOdCWjV%p31vvd*)dGutwi7DQM5pwOjEPX5A7 zqw?fNT_izYivVf%$(tf-S?8!5IR%%M;1=#)-hD~@SB01&SP&a!bBHAlAovfoY)&!+ z%4n1~ur=G0pk+jz<u*p5KM>O7ic5s(IpJ_-d`g)3SAI+@fQ(C?btP13ME)V%&nE;w z+k5se532TQ>)4)y4%><yywbjlu>&-{A(1}T$_ck>9A)pCDULfTqrZ}IsFAssu8}<b z#d(l->J$}(?~Qd`9%gVoQ~g3yTODbO^zOe!=Ww1m{=fG24`Kc0B_7wX2d(8pi)Yzs zZvXh8S%_3iH783Eio%vv=;cEK43cJgpVQ=A{q-*4?bkQ3A{c+4Dj%UIAp^oS!L}<X z;AowI<W#w2N`ckYU@>M3@IS5MloE}Db+Jm_jG{=&7c9<e9A?-$TdP=UyZQLgtZ(^3 z1h&fzy7j5xeFsmu?p{0PFY<1ne_{n(lbBV$ZP6B?tO3n~1?x9KErru39oZd&(uG4n zk4|KwgLeC3mDvm38b-?5Q+uBhP#Vb``C+?1^n8u`Q-8&dD+P#i@|Jaxc}b@Dwg{4< z<1&bSPBps1Wi(zqH=SBs;DvJcodVmYG2%YXISL(61Q7Bb1z_qzOwIDCxC5@a=XS|e znm_Ig%RId!A=7;(g^E>HD%m()x=25v3j4W5N#_t8N0^o*KiZ%$b8WC-YjfpiTCfV^ zDF@A7L2g^N(%_>L{TOb}z>ql8QfFbzC308M6lyQe-?~Us<+lXJ<y%uxzGK1EU~uVt zhpQ{&yzux>CYIpT9^jS4H-rLewvpKa#3I3hkCU(;4S!iaR16C?iZFzE^mL~@o=sNs z_{tx&Rf3WsCKG)0@YJzb-O2KO>4o42dy=@CczDXgK-P>DP?H3ZVIl;G;aK)p+Qvz| z#Y8!(0k>1fyf#X{vS|L(q2RVKUu(-JBlb1e<7vOyNxR-H?RU=9#Meq-4GkDJMh-+v z0uzdA@}QyYExK8B<@emeO=3u0Z!SfoU-9`_>dQZkZRb)suntMu`<t4UbP%%nmqG$7 z=m49{yVd*nj@I*F<Ft=6<b;B#$y&UYf#*vSbU2ic$iBQEAs7b@^bO9kq93!-zatmf zoYt>IJ=W}D({sl6sd&iuEU{n#LY+ak@w@vA1yzU}GG1BS8z+V6!Wy}SYD6W&GPd37 z&oj-9?{dD+rs5xKn)yS%z1^_Dhxgb$L0<9Mid?R*P10|2%ruU@znejgM+r<wwmvl9 zI@8PnCCS~+dFg7TlI~)1UDIm)ZZOw0-mf@mC-lz734#%AXj`i3Ug=yNhnY6eUU6#_ z)<l=MljV17!O7%N#dJ0<=O`~}-{zKQXIO9)4#Vy8G_oE(Ce9amsXX;utrxVWMnI4+ zgAMUDxGM|F1gh2>X^27#v)P$I|5Jkd`{ugd^}bx1d_3w|UiCg)Eq@xy)?~6!>`Ybc zd;e;AN|<oYUg;`UX$2JrfNfRg6taaTHCiUhe%NV4OldE0EIik@<n&DYtj2bac}3Qg z$|NG^Sw^!tOt!>IJok2YzPj#<#?gSwQyNY9V@pfEJvu%;fkc;VaZvB1kLgD&x}}rT z)`N1A<dN4&?5V&UBSZhk#Gm>km_S2hUV`#hcVxPqcXn&<k3=9YB|2KF)`kUE1F4;m zYd(*6LHYL9o6U@hCL5ZYYnj}mi#yE(&>&q<Kffhz%=bFQ2Da2$n~?X2LBDX=9|w{; zSI2kaDSm5j+9AWnQU?^r9q(!~0pQ5xwKND(p9uW8sA$l;F(@zzPQvMCY2><$pi8Ul zt=n&ILpuJcKX0OiN@3wDN-y!fMRIM-t}ljNl`1#p%_s=kpr&?)B8j($t)SEsL=Dke zpF~<m4uZy7*q3wOq2TvzL%dOL&L-I7hmk$I3ks#TJdD+*jbBSt=Y0o~7#A5}_5*-1 zB*Ls}JYn&*)pN#rm8-9S@!C8Q@h@y88BmY*_^L7!uI9waJvjEbr*`{8^$?HIjU=J8 z{5h4RUjQc!XVK87?ctZG-!&5u?Wf|^t<aD<%WbJ$9cHRt@+)w=&uz`OE!u`jSq&$L z70{Ddo^#&UD2!Me0BwGgaJN53<?RTjFAUIBdUCC~jGC-DUUzu)(2kl?-mV0ChCI=X zE^)JQPG8^gKd=gvwTFKOVg`qO;s`2=%hX}2BCfBAS+!ESYUB|<U)QSxG9Swygyg?T zI0FYSF+}n)<LUdGM%`z3e=CF(;q(q(olw^WOtMb?VtZeUeW^vKJGuJm8|bE$b2qmP zJ#4mXaq29+&Q3BLC+=j@^w`?4i}iQNx8cZg62r36eUD|#s2mZwAgjj#G+P2|Qi++9 z5#3GJm^QD1Y3nCGKJv9#%dg2m9yn}bHDcnE)+$s9NJVTMLtEo`L(gBb*K7@53ALDw zNoR?9V4!NB(}rnkIz+_<HN;bu<`M(iQ_L;hEaLRNrT)z9X$!;;Qd3e3f70@tT*oNz zbMGDR>g(w9x#ZzG1On_G`8c$%0UaN{-e#L{#4PTxr;6BT7Hx#B*tc)^sKJqFug2(b z>nbH3zly|!3o3_XxMB_J;ODM8pVg<^4k|dDw(NqPm@c<}pfHa3kHYHb@E8iwr3P%1 z>g@mMHO#=Uy1vc_2cq13)U)*=`#>Qr?Zf3u{_VGd=)ija<4FVSx(%1;Bah;!y4m=L zDBmG&Q{BOzxyWA*$bqygUlHG}xDG3%$+Ih7y}U{W0NfElMf9h7g_X4x{o&=AopU<m zzrfZuQpb>ZRzq~sHMft@)J7H5&e-1%{Ey<+?V#@llUpB59?Ek+owOV0@?{_E#9q4* zYR{EsYI`Jkr{|Z1x0moeXNNe0rKP2~!~ZD4$xQgu2)TLabNtZpB(5*C-`|twwurG+ zNjonP-}C{TO41^_29&v-&SXcg=%VNn4cU0rZ-uQi&NN@*zqjjwHtmi6IzxQfZraL& z_irhl)}!c~*_*Ipb9xvs!y9U+Unya;92r^pX-S1|tn>U_lO|7SH~87#p~iGLzv+;l z9QZA4d_|_yTFW2>Yc@LD&EN^I`{G(PCqugQW$oL>A~%_LQ%nlYy&QXVKAWMP4Ax7U z=cqw&YNGP~F_lWzv$<iXbI+1RpEpy0EDmyz7JkUsBQJUjy#OzfEWS1;>}YwrXJou) zP;g^~3DFOa_8n1H1OhgD5fv8roM>g<Tv!u=sPU?*7M<Q52(WUP@)x^!0)|=VN6ovm ztGUj%MOYt2SXPvLNHUdoa%Xs+A)gN@K%%!>xrk+fE5nT2d^a(2)`A$Pq)E0t9&}Z2 zK^da#RiOXcC*TUd-`94=t1Jstsz4_<0r2A~)MpPaV<RiPgj_1Wj#b#D@qcUT{2H;J zY|RVn%{o_t3G4t8aQ*akBlp^a!ns`Q{;h{)p#M*FnTeJ;k#<Q+MnC1h|AV;qifS_I z!h}(gBE5Hlh!knkl@=8N5dje)^r(oG5F*k-jeztfAfO;19i&MKy+{`kkd`Pt2_1n% zT7VGe{bv4)nSXBP?pup1lC_eR^PY3|e)dynOdErkDqM`5TCz5+?tOb1u-Z`<*G(FX z&g^#-Xq^z;v6D<MNKp`f=qQz>pJIJsC%gqLv;jHk%q+Iv(7pD>OmIU33`6Id#5upL zuC8HNXZAF_|BYz&CO7~^I0N@Ba`?*2CuP#s+RRwX3^+Sf4iZleYn~Q-%D^yIi{)CU zth`R+O8L%t{oYAjZbelkQ;__`K=`Wlgw$KM4=GGM^uPEJr<;}Ljyi-zZns6YPU&Gh z8<*|8h{8Xbdr_kchy2>z+$qDd4Th61U!pGclGWVc6$|7Fynn*>(}w7W@8cz>uG8{X zEUqs304CqqCHqD`QBll}&#gj(JiE3ak$ALr)mLZwBV)Rndj+4}0C=gOiEhB>z1`^H z-)-=#yEmM5@hyr8p#tL+i>0786vzDBj9a72_Fogk(OZL}w4aBPtvTm06T`PB;XWJ8 z8Q1L$xmoSJT&HhY<Q~&_LpEjKUugyO;J6F@*SLLkE~SLa_N<W=63g8%xniX0k)tTp z-x<aZqRY}^it~Dse^SU0H`1lq(-%i~Ie|1n^iSMW<x0lH4eg=o6|PTlIymwpGF5Qj zR#v0Wc0M}V$GF4Jx|#QoH@4G;LF&S%CEuH3kTKi5{>2DE^wvC-tZTOw(Ver8wC}>( zNs+2&aZUYWOyuOgMqPfQU$WOz&u1AB2-+C=Q<}<Sk<>Z;M-|{vTL#5%8M`og`O=yt zYzLgr!?YvJiKWrndZaE$C+WWRCa+2HEsS`;?ZlTq>b!DW23KKa0CM3^?4`aI1*9^a zSE_cS{WJ}7aJ~&h9R2;c9nv%NqlafD4(nZiDt0dX0uEA_^%I?pw@uG_F2>B;8~Li7 z8~*mkCYEC2YOenRSpb_wvA9pVDSc35__G@1Y&mE9@Xe<Sou)TxIDWSCka`U!aJ7@| z5L`U$UKmI3VelW?HPGg@v%Kg|g_17Zaj;#@`b=&bYaw@9uQMx_f9&Sp%rM6l`>{SK zQ$InGxiQw~c0=y!f^nooB1z)gpHE543bN6FBEXvr|3`BRz>Qdd`CwcjRbUL)baoCv zj?|&lYrr%Mml+j&kuYnV$6^34YME3h$Pkcp6TEe`@p2R%>6k~n3`CE<>Xaw;&2*v* zw$wHIvK$stB_9r7`c`KsIkMT^7WxNrnP8&Q*94%qec(&zZGm0E-*N{`#?hPxIO7Jy z-!*29l-amxvObQ*`&LL0gcNzuvD#HNCfo#au{RVPXfrp&0U1V|aWx3Hi|t38y_^!6 ztP<(3SAI!9G+X*)85cD=!6fS&J|PjuGs<B=Gc;6Q_TTL=EAx1^WO2JJo0@I2W<HG% zRR<X89KQaMO`M|2T+Qpv0rh(Uxm_)qABSlJePAD^a?ZN8KTx*bgG6d>5pXr}(PwQS zV%1m_ioGV-nZPt_6AUh2x5_vaH@~=V$DH(hfb@0Su~Z)kj?-o#-K2`yIl6`_$LXu5 zN%%Keu}64D5+tvnZ_bB}ovLY2#KFQ{>xFJ0vSKoDqGDmh_#Q|o*QBpAMlGch2EmqW z9==q6y~2I*LK97>?*d@Q@i|zfjvPsfA7CTgM7*e<#Me{D!f*PCCEc3^`n67iS_Lr7 zoF{HkgB81ofMRc;gC4h#2FoX_7*G6Bu-e3o3rep-@#hkKe15ZQDvKrndMYGak76vC zmBO}^4X4}cQ~xqIW8x)TDZirYCke0P<O0ke9lQyKy*XwNQb*-&<;`~luGlGYkAE<F zqLi8r=+>^1oUGc%bw#!UqcUI0*F1Z}P<o9a@k6@*lam+Cc?nt6S{xg#>j`Uoh5Z6K z&!*K_2-e~k8|t*D%TA*iHrb)~32Em@_QEGKe*i-4w;FBxC#@arpx^A}q6DsT8m0}N zR6-iCGNdcr8M&I{aG#t9d0*t`{JB2YKHAK0rVUDQbg2qvBs&zUg)dld(kwb${ix+R zM<wkguh^o9Ba5tEYdxnx<Sdlpj_u8(B}2bLxzqsHL$7%~?U}p&%7b!Iw;uoa&LA}p z!<1EX;h}vavR{*3U|z7Ga`&d!*+ESFlp%Z8QqgpOTr$8%#@+nssU|tG(@-wf7G&7i za=Q7Q8z?|RtOlbFhN0{>_H#DT<_KT4j}>CQaw#_r=t(?P_I{026=;mD@`m{@jW-D< zhpTU?`x-jn2cc>Mu*u*jT_oLF;EpXip%s+l6SZvaOpN$)iBU(#<dOO!2)J`W3tYhZ zvXLRh!3q#)R4Av-ZB7>PpVxIe@4sjbBszd`^a;K~mhBzne0+y4KDf=c=r0Ga+5A5m zI}4zZNF_necmN7B(Cq+0yax|4R5o(P-~(7WK-!MBOrlRRtZ)C&XF)?)xtRe3@-(9o z`LMiTHpK-Dd1Jt>YWsPI2)r-@NeG}Hx5u&-1z#sFz6N-M;vwg?(!5?_W924CpDSFf z?f0Qxown4~M9P}gXR0*jm4(!)A=;Q2elvo02m1p}c!mJr4U+>DP(t%}m?~O4o!RYd zXG)GGU#Yy79i`u<9l0463L;mIa^Fn2{Y|vFx(f$M-k}7P!w{0us3IHdN{#}@60Doq zduZ|#-VWa8#n{lB$zL&n9)CA9PTqF3@^*V*uQCb@RVK%RxU#!X_5~m4@?z9}Uq$mh zz;Ns`Fx9>8rEkqz?ZO2?ov21N|0%KoATH7$#Mo}^jUQv3-}G-x`&HYOCB5y*<?&Yh z?fL5m)id?M`p&2_Hx)ZK&B|62g41wY68HQ3e>7g*w2(LCps!s59<x@)Yyuk?r6H7R zf^%)chu<-hPfx24{2!A;NI}+<J927WF}5(bCI+Ww>p$s62?rbeRNw7Zo_Cslk)_r% z-<+Eo8<QB8rL?9W)4bBTRWWUB&j&BqykK&pQ~fWK_lD$T(?LIytrzi{%0&W&`*a}s zD#{%;PZGec&FMQfriV9mWD8JXx(vkah0F>!n72!iTe;0Jcba{DHO>n(6mhnbml$Ni zvj%S9$tm9L0kIeV=>b>@Qc|b=5>`zAXwHkV4Scqxyd*zG(7v1{r_M+_Ied<XUB9HG zyJ9mQdKIbIPrW`Nr^@v0z~q+Pgxu#;skiwzPrqvdCUXVNV1YUJCJ;MCrqCM3C+P6* z@F>$?_l|)r;rsQ-TMnjR43|A$qNi_OEQqg^_#(E(aYIlv*+X*5Q%<-jS=Q%4a@iRS zO@5qJomLKHp`CPAc~?rNOK{pQIEYNDKFZg!Kf3mKZ`U!_(S?v4K?RYp@h>pi57JD- zCuChYWfFqa8zN%|Pw_3rh%gYdLhx-=p}uojNcDFHmv<pmUuR`rcAdy!@+d0)y*0<g z|1eCj0Q|bydCAT#1Ii{Zud1SW=-V;>$4jnv?Uq9Ev03v55OucPd4oJ(LJqR;m{6_a zvclGQ7@pYF#VgI`86a$Tvio^SNCxC*q$F>ADT@*QmOxKH=+g^RVRn9#gT8R?!yQq9 zhnmX!*9>l#!$wux7C|=ap{i{pIbL0O-H1Yh{Of1m%T`{|LvdSUwky1gge_^wqn<dk zQ(Az8_}p)icQ7XSM(|VbeB;9EQpR^SGHkhCv&BJGukyHjIv}>hk6EFSDF4!hIs4ht znQaLf38mwq)$3vrM;egq|9i`W{(k~}+l326-dZ5=5pyJ16OT6IC_1s6ay$F<XMj_( z5iG5M)Lls5YJj{8hEC*@TmZxiXJSjmkLh<NZLT75nZp_gzVt>p;D;P44ZcDwNn08d zB4h9U6hnHX$}*mBj~rdKiCv!Vin6T(?0Gw{8agYFl=PzDD|H`hat?is01K=z1K9}x zHzchM2!WW8876dNcQC#q_xUkKgh|}OWoG3T@cmV;!zeaa&$O?)(y%9tDh#2wlLHU( z&TnSUVBa*1m|3EOjEBqK)Lh6nNS1ni`><;BzdK2nuGYgN;#I*HT{BLwF@<hcLa!TZ z2f~Wn;;x^&z1z^Fwia<1CgB_kLbfME>#UA?5ujutGJa22WXi{{aWYzi<dM>y+0?`X zWD_$IbTs;^@WUc5Jx5mYhsH8aS)=PX&+Zh~9|wAWi4-hX83o=-x-eJ}tp0OH4a9Yi z;iFly_%J<fTSUZYNHawiC=ov)qkB&r+xX&ZtWGUkrxM3o98)jQ$_{?HW{7i))DNIf z2<5aV0~XBHE#CMJr+aZ`*KS<-lKq6E$mu4qLa8u8?9y`$8(?nANr5PV_D0FVp#~jx zxSdFisCK@hb*wkzYJL2$8@OZW<{7M@phZLr*A(I5@w5?uvs?_C|NfN9_HtrQ)zzx! zS)Nz`{FFkb=v0Xd$sWg#>g{awg=21iyBtme6v<<hTWymb!CX~<qfd>0vA)|Chg+|? zB#_HA_qOd35uKNih~8ZBMlA21^^_;vKyLD33up0{e>6{Mz&Um#lgON=enkeTduv9y zm+GFq{!>@m%kT@wEG=<wSo?rGn~!IGACf|`BwM2J9ae+p<H6?D8xu^;%NZ9tyqRw? z2c%pE%O)cx>QK0QK(<@l8gMi0Qt~K%t;tb~tngp~yzJ>|7rVRWYFiMEK^E0y^fJp& zUmY*NnlpecnPSA&I~J?gcd`=s<Ak-aME@BAj^AS`svVMD`bSgOWA+1b8HY&LW%@}V zX^*HKOf|K(WBrKzp8od|Qo^vM^E$BcP}*OcDM-ydb1d8>X9rzAw^=fG@aF#S3;SoV z3F#VM%n~__u*(VKAS3!-B3*7xD$MlT-k=QaT)n-Qwtka;wY7`ZJ@aUhwqfKE{$Tb| zn&IBeCiMMru8r0hVFVGZi*Y8gh3$(x!`&GRapwMeZqi#?>YzG2Yt5Z2VF~ghD>|A2 zuMEDCH+YoCsRrY1MpJ(}=yvByi{DZC!g1A+1XRb~Ju~p?iYm%|z!kBuKg2z=apF5! zN&7nh57=z>bS4+Hbj8dhMHeF#AGeTf`Np+tc_sjgqVSvbo0~oDo`Xv~xy5cz%gFu% zqSq!o4v#Z1SejTd`Y!^H&>J9TDvxXD`R3M+hTOe})74SGYicAGudtc91CcP1<XE@Q zr7^)*s$5UBXPPHHUHEv3LxMMw?%8ORr@VVE?3H^ENn-2gMA8rPQm?j8s0q!p9+}z+ z#mW`39!^LkY_z-NbArBCPy{f$+I9peKRH80`LOp^r`_GgQ(L&(^F$k)*ZTwD`v)h$ z>{cQe&~?(++=fYJhLmq%ztFK;>vig}%O~VjBdcAgg6F!{bIAY-a!$4tNFcgMGK{V{ zaGqG6pqv?a%-%14P74=!iHgB`=?AE0HP#Zx)#M@2T+C4qL^H8(Yz5~sNg0|8SE8a# z13*Zw#jF)y1Rr?}|A)^H%qlNrM8sf|9G;Q<ItD-YX`yoUgYu%`D`<d`jCiR&!cuA8 zy#M4i2-5%rMhAGTC2=(x7+BsMU=)T#%u?uK@|ts-AdX-ox62PF-n9P)y$|qsK0ONx zSFu@i6HL!cL~lQ~h0e?e@MY>gS4bHJgs(~5goTdpaU&$UL}$E+q=|-QjERfvz+Zzv z-9ZS=sk4E;GjN@B5fNvX97X@pbbEj)Cc1;&x<Y{2goE+@ai25YonM+2Gj<X;S+C!o zp@RXjgs1q7=zMZ1K%<VR5HVPM*sQ_zYth<hWyo{<GvKlC?TMynIs&)b8v^<o=&;=w zD?jPrsD8Zb$*(=S(9-{i?BwEHLM|ORRDy2WCROmvw?Q4Cn!K-m%9!Ny+&UNZtb?^; z{%ez8-PdjLqL_ybp60KweE!l+KL?32BO2Rh_S@$4NB4obZEQ@K9qm^SmYZKOt!lu( zraLMfR7fqMV%|UPln2h>lU=EQG{QCa$zHe-#hy@3^th^BR0|p%!2RQoK$gk&s>`Au ztgN6ju$6R}N!$VPk)i#5nHcYddB^$RjzvQFcB5hCkI8tUFEGhHf@s=jid-!b`lhM| zjo?_=Fy9D$bn8wbe{hpTo+)fSnb~c-2njQqEQas8xbd`Ir;5jL=S?(hN%hZsC;Ruz zbk<9}(EozYSpGznkFx_6Bg-eLlGg5>{3QA~ZO3v%P=)Png=81rU+EIT+)^EZ{(U-u zYqzGf0SJj!GpdO<NBeomeyWVu@pTJ_be>)cv}1akq6l}x&2~GLyZaxW1p7Pt2Z%a7 zX%=k{MXx}BRx#KPhR+c)M8rEvznBthdH-GFEnF!e_}m(5(rls?6rC&5MJycvec8&D zpY}bCZ7`BRYfPwk(795+o|F1mK;_wf2MEYuW{mC`CkA2oUugQ)t`B*p>g;VlQa=qz zKNc1iBxD}?=mz(<hu~G1m*j@qR#Ob0d7sH*DD+F)psy#ifu<4XlIE2B{k3u-IyTAP z08Oz6>A7e%LA`=3b{=1aOIc<KHLG!_>b$OM@TybJSj2$u@8y&3fTPt<^4=W$qhWz* zXgr*s7m^I0Q`LAoq|z#!w*E_P1AI~LK$b1iQ4o#2lB#n@=wWqg$clXqP<edy!y^96 z;JG*8@)Vk~l*7EaAeME{<4rv8aze}8{0$!5B1fk(MVq7=Dw@G!fGe5s&34d(&D>Lt z`Q<hFGiwWIKMSeCsGp|00P6-2U0<3dqezOqp<t5bk5D1V$C=-Bshjr_JOCHOmluw) z0FB#%WcL*qu?5=|+v$CF*vR6q&C<EOJ<9S`+2AfTiLuI+%7c8>YuM08{2`^+SvQ29 zf*bBmCp#?vqp75CZPa(8=w|mROSbUEjkGy*mjyiRXiZPL*Ez<>{OP0?F{p+aca+70 zFM|6K!pQJR=yc5|;%Ka@Rf^l8C)eovp47G$F(5tjA^1`_;&)fC`V)JylLe+B#7d=A zsI0o~A=L)B-$MCed|5}Y_Y?IV|MI0zENGEAvbCNse5PB>SY6Npj#{`n6>NuVR?E>d zZknvxi8@6RT2)$1KcG@>>CRzFBM#Ps&2SYWFJ`2ogc=lTTZZhFgsGMY+o|n_5M|gY zMi#-V!LA%2#x@n#rXR4|51?z9Q1H0I`4KO8g`p>D)>!yYOy6HlePLxTN0Z86RdPuF zf?7!x31Z#Q3hiLds=PgQrcQEb0@yE+j;wVUc)Lj<G6Udgq}lFRU(Gs}N)qp-7c#Ux zv>hTjloX<H9R`zkI|M^ZRpl~{?moY}R`{&hB&c^m4G~Qh{kh$4`jebk-Q%$Nt^FON ztSI;*DDnxar;eNlSZFx{YfLjp#;o;18IU!-o$4JeB(s<j60?OH{zkPUNbc_455KXb zn#VO-<TR3t0g<lMt#orHwANSWhrx4oc8S;0H`WwnlhY2<h#zAtDO&h}J2yuX?xNOb zM$qI9;?5{xtbu6IL`$IB>KENgJdOoIPkE7DRIX$;`z=Q9pR?#cwYP=8aZGb3c+%v; z>I&L}`gM6o3yF9WGaIt=XSct0o5}%AfiFIFNoVsbB<_X{=zC>B!a}dRJ95<%ql$xy zTsuYM&bdjv<&YR-=N}ZE^Q*~k5K)-b8<$h9V7J12r)`SiN<%+BNBMlfv%2_ufu4wn z-ffpDCnw2<=u)L3{%A%Og%u`tUv#3Uz0iymTfBI1TK?ycwmFIQ=n=7<%V6lKoSmaX z>9Rq{92LFG4G|%Ql!92*$}0Ewr>Ygq<*zh&hshd?5742O0w}U0m1>L0yneixilsz4 zsHB?7F7ks1GioewnwVQp0^oZ*T{K%#gAj|9sm#l79;Iv@Juihg)q?&b&gJPP1FvUB zQs_hAE_l20rL0vIxu;@o=N@{^wC7WmgSDY?ByzEuPy~0Dird8M_}@w?8}9uRYC7g0 zO|KyZko<khS)`sbqVoKvD3NqO;Lliht;fYUtVe>b6~eE*7&!MfVh(8ew$^LdCPLZR z*va))m|%pjmw)l#XNTdE^_7?~%Mz#6>$`2$I$ISawus#Z)sE>-5hJ?1V5b*(CNlBH zb#$-TQ59+9(FBLaNQphyK%b_d&WXeEhPEhHeBn*emWl&I`z}Gp*fRHv{_(~EQnFiU zW2gNZ_Me^fZvU}Nr0A0_K&I79oXjH?to3gsN$b7tW{0n<SQrym!EZ8WP%*&*pEnsx zg-&5`Lz9-wA4#qy>CfiCvyYbIjsn+0#gI|ZOJvhM>&AM%`a9#|b`71@eyNWWoWFP_ z9&gN~*^#)ZqQo$a@34ejOoFjmN9Dq^3hlTESY5SOvmej+v`~lX4EE8N+Vq&_4q&6Q zvi8sYrd&JV!H4RSuNG}Ch)3I+z$_-J>g6&kn~G@Vx&oNi5NdsF=Yo~p+SAD$<;O+) z)L#H>9$Vu{e!9fM_chD%hwat=X<Vn5Di)#~EBa#4;VY{wx>{>6ODguj!T45oui)Pe zKTMOZ^S-`DNP%{8=Dv0iR)vtqge3IkDz~Co$)gCijhA*k<$`*vjKVu|fywRzzyaV) z0#oBUu+($Or0P?gWLnvJE`5Y4rZgzgKxlYT9XG&yTD|gA5<Ei-8fd#l0!-E@DB?mG zo<+~Fb-dkBXXM=gqvH%l!=(4;am2CJ)uU~mrH(rw$<v-r$(DHV=IUg=*Rg=tV*>Ex zE#*iKterCTXwJV`ReoHO$!zq|tIZ>QSMcJG%q-p<Uv=%@RfQ?k;@fJWz@R>)q$+<? zFtp%YU2E9Vd#>b^cM&IoM3bN%sDKA<vSCE`)DY`4qP{6xVYH(p{Ew#f=B?wc6RaK% zdV##vCwhINU7w`&sE%Vp&be-~Qg`WH0>bGZ%~p+DL2WP;Hw)r+tt#C_Xuphg%5iSW z98T3pjHr<H6N|%XTa>QnYDAchQ`89W^GOD89~@%+ux?&2n}wi1EVaXha^D5tAS23L z9Tl5NZ1LI_8Zl~%b!QpkLtpe6J@&`SYAg%dO9^fyxvac5c%o-4ynGXL#JR~Z`HlUq z_@y_`>yqD_B%y)zWz-nVJK+e{0@_ocM;qMwOf~}e;Chcpvg9?>2$LzRd$fLse-Q~% z83FX(m-c~h)BpA#5PkX)(~1h;_01ku?G)6^xuX@p_I)Sr7CrT(h?tb;AMkvVoY_kS z)w^6G7N@AZG}Ib4Xa?V3r1nj8tqTAP@Op#FJ#4~eQa{a_4|Ac_cmb-<j6HuoyUFRo zLc@BEEIHe$64^H3C(1slHk-(1c6wn`qkaZe{lPy5qqMFyNo7O^BOjd(1akWyWfE=N zufNIKKDxOGV~#!uoF+S0+Pi1vC03O*2fg<>du4}|aLS3V<sSggKZCUct1_s|LCQ&v z-Juv0u@?1ltH&IO{jHTB7IiEY;<+PDaccxLdAoXbfVy`3r+i+lqWsrXOVFR!CV@v0 z`!Gc|vXkkA&ye=4@r}Dim!I^Lrej5hhN|NJLOCd`<7k~bt9wQm^!9n<OyyzL9N#)# z@9D;8EoRKru}r1)jG;2*SYM-t7>5LJ6RHiQv|)9?_S&C)wx}^wnZ%o~{b=wS5TU#( zb?tX|O<+L_C_XS9lR_jowok5|s?FH_NkSbjTSqREJ;!kNtBJ%bfCM*H-@8Dv5DaN) zOP^oXE&XWaN>oTD?&75)(QNcZ8656MkKC}Wf%iv*hn9`R-qJ~3WJXm5iSP_jZV|WF zVn2;9eVOv~8ANySDf)WcO5xVKMrolH&g2<&Z*5A{W_#g@Zacf+I8nHz`nUSSE95^K z*Z0XAwosPPYk+fyK&}X@U1Ud7@{g<;WMiFzS5EJ>fPJ+EtQKCxqIW@H>hd&t>lDUV zJ?-I?>OTXz_+FY~qy~xuoUc$!j{0tR5%)2(=5*~oqwI^BH%5SGqlZ8a0!Tuhz>E;Z zMz+fAO>{9L(Pfu!YSInVWtwMmUE!?1KEsr7g0;~P=q5(TZTog0EPu8?^vL?VKibIW zx8?1=Rm+X?{h8Cg?cO)tsazVNc6U-&Y}Wd=l2+(=kt0*efvf3NAma7_E@aVwX~;G) zHpv{VZ;O2q^?;+r`nj-R%Y%1y1O0SsG)sY5$FJBfAk7|=Wl#i}$D5AVkfGB70jhsh z2EE%6kHVVQuJCLwHmIZNa+aLy<6gFotQ@?b%(vKUFZUKo2vNtD{ZH#GFQ7c8t1a2m z6`lwNUrfl%s+_3MSv^Y`6ht`v{kYl!j>}aiNrWm*Xmc&`Gze}l8?542mpzS<(ZQkg zwcB<m7PT5KqY8Jb2x;)wi)jz>s8!iEvAh24_v|l3{EQIbSyx+wa+bms`!u;{Uc{Gf zW{uWL9X>}P(w>_eR7ms@D}w|#eG&zEC-dP@!*P7qm7{VPf9iGA?-%+~r1RDPr;ChV zO3`mO4l~}o^S#28I=!Ehn3^mgWi`16iwy3IobnViyog=DZE;Ry<j69wAUxvFUEV)K znFr4-)D{*ThuluJv-{do7w}-_*elJ3Gh1Tl?{7oA<Ni=&LnJG3A)trN4)qSdd$p1c ze3(%=?vEkY4Sf-Ed<>#84+|@Nt{E`YFhN-<P~u}JW1=rLy~_1ErLpkgxffAN<BS9~ z)Lp=}8^p0?>i|@%^JWhkCMp%2TB1#BL0ctOXA66Of?jldF5f(Xm(-RxxXrv{^m6eQ zh_lWsl-YI^0Gu6uA77pDg!Fb^CGmz@@I>|>u6t*-0j=W+c>NQy7nmDt0fIV)QetM3 z>c|Ta$L2{phra5gl0x;f?9A}=Eg;Z=Vm&TSN>0$0#hE<9yY3suRM+g}#~uo0yy@d$ z-2d@rx{-XDh|B*Av^KmAOxqH#sX_G*DWFNNo|C~iij=dj+CW-~8Eqp>W!IJ0byziE z|Drb;3#fxbs*&J6zEGtpbQM=$z3ZwSQatJMc{Ao>jpbI2)A<VeJ}{3W6*MFaW{3Nf zr~IQ?A>3;hbulfOxg#8+C%6w~BxgP#c}COKe3}!AXN+aMY@qk{<!#y*jTJdxrnPm7 zk&zTFL<mB()^7qTbZ4<0zFe;k27j+t1ILBZPoRaeSq%GHL(nS?Q8Ld`VxB*p5|x#; zCifDz_p_%FoEz9{PhUQ@x|y~DmL_!g>k1>6i8~p@!IeHtE%$>p*I(CFwr$l?2uzG< zDC1V3Z}p<?&Oi|INSI|zz&x)H3ldERYLS_WjZTSLtj9C6tVR3ep_E(u%?YUWdoYcj zJmKJ*RpdA@n`2ZhruglhSnhIP+Jr#bEb-eEum4004-S?X5byFf`6oITFSx5?S|fWp zdoo7Jp+SC?Axzz(0z_y(=n@;FwV@l&>W4A`2j>9he3R<Q45u>!1Z&&Wd6vIaJE?Fb zr%F`-L%IAd;R8Xs^sI&i*dzbvPF+?N39_DU_r}YfyO<Ejn<D4eW8ac%W6S*xz&vU8 zXlj(|NXdY(Q}D3Kmv{&l9qXNO=(X*^)@EoVbp#Av_*>&Z6m6$U5u-9Ih7pHuJ5IVj z0%MutsnuN(GS%V#<!c*91uFNU%OwA^h+?YcsuIP8oKX7-#NZndNd;PCihCxN&#Vt| zA|W_-wg(2LN!1ZJ!vt-8{8-FP1TwR?DOA)|wU}epv|9V?3-FCO`iTx8mu5G%lf9AT zOwBpV!7~C;iN6OWG9c=^r(@D@g_WQ4KESvC#p1yI+-;pN$cfytp_@k*dgt~eu7#c3 zPJYLFRxzc^jYQ}Z^P)<|8)OGM)UgUp^)16419WE#XR-|i?TU_*6gXil&QWrrVT{)S z2{ZWFUnkx0$kAKQZm*Xu(4QhxBZL}%Mq)cVK~Z%aKM=8o9Y3|%irs9Ba^c&RaN#-^ ztx>#x=*<zIso%neLRulyw0S+9p%bA3ixlgLZGggP#<f|iS5`9vR~?pO<Y|}x&gz|( z<Zj#*eUjY6&)1jBO;RuQEwLRIau;;iqc?h@z|)vA9_2mJL5(Y|bi=d`r2Cg_axi-A z;9Xw;&^+h$ZXP^>*oA+QNR7uS#+s^5;ib_GP3^FaHkPanZ6@O3o*qf0x{FZ5Jyx?t z4hjOP{)uDxn#oam6qo!>@ZkQn+<LfoP_e_T^+HGFRIRe1PmFL+-^*?@dY(PsqaNdV zkX@cNIhL-FFw1bvr{peb*Y_I5&1y*1x*EjSv&&5uviYJON}Jll9qZrmjy-@4bmKVf z!d~@G`_X{cMy?d8F%M?~>1C|cgL`IWJDA+K+sM4je;in=#m0T+-Am;r@%4Rxqt7Je zjm=FYW!N2NE8iA5`b2~W-h76-)B=Ds^<Po@QtMDMZ5|GyeX+>(<Z4u*6X2IG<3Z@k zzTPj|A2!NlK;Lvwog25umasriGEArvH)AG$4w00&Q)g3ct^oYT;(vAD*XR(d^N7Gn z88Y7>s!FWb(5#GBa@TwlU#2fJ_}CY88SuD$))_ll1NW8XSCo^ATb=OX)K`5VAYyih zp@KW%9{mL=p1tZE;#fDJD$h9TD=&t13aR|~wk^_kU%{SJ_}wunN_6@^Q7A5Nf<YDf zmAjo&z6`q0^B%sx4lEXuhGqnC+Z?6bA_)*n-|YG#s{{}6$|<w6m%FoUM9kSkY$5|# zu!*5JW;X>xJ}z(&`z$su_AyLy9dUWl#-7O{x<xOOQ_6x3zD!VjoeDR2H(b<y#eKhH zGB|IKs(k5}arU18Z#}?JO|jh&QR?7oTRWjPuk56jv-nQJyv46oIrsB-*acj4Z=!K; zr`U9`3BJSGw}#W5;j)Tc5U2DYv5Z2$V%y0!e&DJN2QJ>e%o%w9*)+P6ebxri-@xE} zMXTlb!+R>v95yvLXxf*Bb+219H?erQVsUo!(fi5*mexn`Ws$IrtQ8c_hhhN8b8c4x zya^S+QSmeQ|N76qV%SLswFMVq{BZiua&1SZWvjBSQO-}1-sPM7|B0)B^g~&Ebs z2cT$Ol@KW)fRM|gb}ZX-(#azl)U%dAvSuMh_aO=l`T7u|+6&y1&)DSCKXdDG8&eF| zbyz~^UtH$>5^s{{@=LoTN1c%H7@!8UW(@03DQp++xr8qmIVGR|_<Ro(%d@1*O4R66 z6e7F#_W1)+3ttCy69c7}8JHB2lnNi=dxiT|dF00n*Xsb&ownqdtbsNJyxi8_*y&~D zqr1j2^Rbe8KV@{ZAT8$hrTr`}56886g1ieDMl0mr{+<cQ^D$N}=S=&<v_`B^M*JQf zdkl6XnI!}pmAk`-P3x~Ef4z=cv!ycrJOGrK8k50b$u|EgvbS~IQx8Sc4Y*{ie{N8@ zJyje?8YED!ki|iQZinGor&Y36Uoyw)rsVB7Z;`uC%0=`8zLA4S!FlyvecvLRD2Kd@ z?NlhH1B7delmmpE4jYF@d+wU=>O)GXJGdhg)f$Q!*$0TS!%=0(P$<bNDkE2bq&5(t znQA@IwG{^P`EvX&M0QYB@e&z~`}k#!VoGcn@xDSheT7GDGr57zzFtryh=lOq&MY2a ze99D6Wh-D+Is;cy=fg~IeC>C|=8`Q{$2iGrme|=|MtD#$U<qSbp^eLR65@Ws?jsVQ z2I&pG1Xyi7$Ly>Ux6{vNHnCoFV<GMd+tTkcx(BbR^h2jZ`N$VlD+bbf1+UgI*nh|v zQQ_}CjuvUf+ToVtbS^wFc4Ph`-*D$9L$~v<>t3_s4bnBaz!>TZ$*K)6HKiu<Vyj<} z<JCW!UyHC)4zpYB+&3sJJ}72wJ>r<bRM!_(2TeAXt<4_#`t}(4VU5!43^ss}lyxX5 zn?UZU+Gu49+u2bY5r;z`d`O)Ma;;6R_FG=wAL3bkNFCAT?TiwtX+$R9cjNQ6k)JcY zJZ4G%l<K>&$VwGOdgBfn8W%uesX<B3S#BD`3OZ(`Iu&&V&7fGS0#;SF>dHN0XtHQk zjeD+>LE2EAbYZgRns>?>X`%gOaUf6F)7Nf99dwCoJwGF7cI|^HjTcad$y3p@6k&|E zS#=(V89}wau`7HVuAg3*VXZDE@pt5?$)ze#pJzq%1~~wqJ>qXUrOks!kLP2|`5rc9 zuwCbU%-E?iZTj<~CmGs}?W807!apJJz@)mOCFY>AwEj*R&-ef&)zUp!ZG0eNDMZQy z_N!*4De+B{`PuL13O3&W?10Nb?Z4~1$1_NIQr9vCJQ%s7Jqvc(<$s<h-FWtB^pD{! zdfT5wR16<<vMEQ!a&kG=@_F*Z`k+^)H)orJds;7*o@K+%>d(r*oYnsU1kH<i$1ZJt zz+megB#c}NROGx)<V2W%f%}Zka`*sVE9k>^a8c3~iMxfb`4KnxPXy72Ab@YU&qItp zBQ8=r+n{e8xiJ)#lFdnE>BI0-n`uPWA#NMXQGV?+%@WG5ZANxL8}cdGw1XU7v#HB4 z-H<5RojQX(Qx_R{l9Dk8_L~>90#QGg{!fnh*#E~7C;X#H*_xp8+iY5iUYL;goiHsI z_E0d|S^1T>=AeI>CP9#xR~u|iMwS{8L$iwk{KJdu5ZrJhDF}IL@M_~@sG59k4#^D9 zeApOz6SymMaOkX?)t?&0jjF@1KZ#xo`SeytcCLbH5H(}i9k_PLk>ZP}9X`}!A7=E+ zX+9d21q3z!r@GP=K<->fh5&Lm_#fo1yg~5-l3+-}M*6aGkiVlitZxUXud_5K+%+lM zl+ZpUP%k=S^#hIu9+R$YWYG{I@6>9xE&t}4pEg*~cE<-j$s*v$m&=hEkDJMP1QtVE zv1J=OjWo}$X!1G7d>n`l>EEMX0%Bc1%s3Y%f;U?LpN@t)k+areapbTiSrl(a$DCke zc>#>~+juXkWb|3u)0@)2PKR=*S0a|W5(eXcMBp8}R<h;0W^RN~jHqSQBT^NDY#|Cv zb_#m&(9;zl0pP&Di?RJ?8QHG4DJ!%lK<#Y2D;J9X@oKMvT`$kup^66=m>JzEL5}XH zUTqj}zs(m-QT1hx1u&+y;bgxtM4uHl3W!NJe9)rNI$=+af8^;%c#OKP^pD2BbS>+^ z&JGEeCxp*PL@`WVGZc)p6n%XuBkp*sx08pA6)9>8bOBsIOZv-x98K7c!T0+9`qBpI zPOCTJY7$@ldN<u}l<zJWN*?L2D(<|Rav}T<b&Y}ts=zhf%j+7U62#(xoRYbI7;3fK z3!(kl#wk@MRbPV5ry4bQ0*zPj5n;0&FPz-bwkVtrsra*bzgx2bAvC}woKSHfh4vO@ zYa;E&>s|$-5=fq52;7;LK~r<m4PJ!OYQQ^YD!*us>`VpypsiocXR^h^I^sfs>WHo7 zd8Rs*mA7B>ew+sj5-2vfF<~g#uII!c8}DB??Q~-beGgEw+cc_->Wp}I5i2{T{?Uv> zT7i+F5>;)SB17zop=jWfIr6x->R}W1Gd2MlsfP9E9M_b>a%aPUV+B%z%?Y;5+8MMb znpVI{+%*$;1rzG*uO`-;ZYCncJ!iUhA>KvqjGx_z^ZhJSjMCqdHtC}D0U;Cr`D-hW zCVhq-w6>woP4e8DgFf6GeePLOje*8&qm4U6kv=SU<iX}wjv$=fYuC;mr(_XP%<Cwj zKdg0G@S|vPBQ=@Tl<F%_SHBHjojgLloIbPbg$f^RE3e(3I;dgNa|#gZ*1DV6=EN)< zy3^5hXL2Ate`Ds=x97YWq}gcCs@gltRLj8pPPa$j{h9<m09jZ9$F==PzG&^Mq=8<& z`ld;WIj&9C@|F`i^_S-xQ9sa}--tstaNzJ`j*L(o<g~k8<AkX{%Prv(EOpBAKU|XM zS>KO2PVY=v(I-(fJFgLo58o;XVr;_OH5hbVoef!&bQ3;d(~R)oq*lGN6w1{C*yYge zxkqnUbq2Ellg8ZhKZ9YPkp+re!TPD+F?Kf`Wm%Mm-^Fxld>fRK2unh5rmq2I&OVA~ zt4UKn`Hk=I{i~8Lt*uG&1R8~Da1sn)H~jBgzL3h3*AF_mb_62Rfd^W<-sB3A*rE{> zgIww9WsIl7)i6SbYa_k6s1g}cXzr*+NR+~h){yut8i<}%@Ip6bTidgeo#*pnPoCp- z*$8Iiy62F-2vmbMG^mVRVS(sS&sPB``<=I`&#{$mfxa2(PCU6E+z>8q>^*w4PdN;~ z2wQ#zU=Ci2ObEofbsF%j>hSN?fFM>K44>X)|M8Dz?`MhOj}UKrjp$G&<Tz`I5O4&P zUI>!0;79Gh_KG#zZOz+&_(H=MR5Bm5-6lEpY3LXD{*{2tN*d0CJ9iy_<F*3iwZSEJ za|*xn|F-~Lunp*IsD$+e)vA)YH%wD`GPQAkwGdHx?Coxzi6o{0Z|mQ!2^%x_fG<bq z8GTT5iwNmSrX%0PXBv*@YovUvnjhSK0W#15U)m|FmL<?-S8h4dwoe3WzeVqSBF!r0 zXo%naaiN~shbe0*IyzJb*a}xlqu4OB|7aSlntIRp@bY<m#z8<7P<8faJB3VNZZ;>; z{@5A2XL`Z$!xzUwqdH#2Eo(b`f@$Q+5P@>~G@HL<lF%HE-04lvkO{84HTyGyU+o8( z3Kj&|L!9LJZcUxWHh72|4|*jb_1H6+>!#r&v!XZ8Dk*{!+9o`^u@rrRthI-)$Sb@Q zua_?FlD=s7Sl52dgKCX_O~u#)Ha@c7sXkUeDfz|nCa*r2u>Krn3ZyMk9F}%L<oE$i zG~j>*%VXP+9yf%0e2HeIz3(sxUXc1*xk$Ex0%Yv<iuwN~;@?L^w)*a*EQx^3rj3QR zkiR8g@XO84<_%W)KK^g#0Q|2KM<Z}|w%K#P^#AeOO!*>Ozn;lV{Xf3_zx6gq4jF7r ziY)Czan5bc9H3Xj)Ex)StcJfbQQjm3f0DjZJ`#A9XBET=6as)PSUlkF%!q{AQhQ=6 zXCJnACi)wH(e1yx?0d5`m~YaT<<jW@kos8--Aa5~cDLL&=(4}ocEQ^uBkCE9qKQ@T zg<A|*Wxo1=HNg}$Mvgs~POPV%H{zLv#3Kvr^3G8VG1>spp21-)=Gj!L;<Y2Q1S6f2 zZy5E2gy%A|xh$_{Km!|9+Ln0ZA??ff_;>BFXBoqEwsUgUVoATZ9Ox;kY-bj`{HUd? zf#9AFTY@7wq+m0%II(}u0J4a^n&|5@WN*mTvi>RWdwaGqsj=b{g#{%@&VCqm@)!TZ zp_?J{slFTi4xS$XTrU^RQVhnmFFTXyA*A3V{r2qPDqdHV54_0vJKIh(%LY^*VDb0W za2Vsj=V7+n4MwUMtJS-SqZia~2~f7a@1KDP1H~>ZYm}=Cpn9&dx3@5#@1MUxe<YRl zlXw_OvKkwp@;8%eVtnT943jpUB>Y~!ksiQ2sqQoQ_?)l_n{ln?1N@+?x=S`RA(7SM z_0tCxI46<0_-4DBOo^l=|I1F`oL49oic%HX5dSVKw28n1>5KO+H1ejtALUi&8tA%~ z>EY!N+1d0;R|V=S>2Mf*C+gS&1VoUFgMM%vL*R~1BuTcItjsw0pZ0TA)^1iQHjLGR ze`#>@Ij?En&(>ktcxncY+f97)4GAG^+kTi7$9t<I>hP3h%L_*$C_k75m7^vZysu66 z23UN2|Isr-iJB(&p^T0>p(k4NPt}aeYDASHZOjjOKu6ywTR+!pR8cHse6Jl=4a^41 zkmZ@*_@LTxXVHhbjmMvnefN&nL{TRGjUy<P2^C|jkBwSRZ#49=w*URjYv%DX>gziQ zU<avgTlLOA%XyA3BbB-6=RFajbweKatUnw~qOT#Nno0Gfcnf04V4?>g#NW_VO$n)6 z_-a>FCnr^6gWpOH%<I>L_UBx~j8GtiL`joNL9;<Y^%t|~82-|rRx&3#V*&4`xWMW{ zAPyRq$cn5wxLI8V7t4CQkn+LvN<yvZdnbGU0Vo#?AfN!{bk%uaE>ZPr1%9PX`m?3s zVjAN1)Fbkp-u_&AQgvbxY(X}!Z^jSJ{atWXB-L(&6Y)K#Fa63D9)J|iLD)95G2=v9 z82m(YPi9+Wp>$t_Ictf>hthZ|n|MLF(YqV~iG|ariw3D-1;5%~+c8x`0BM^aUf8Gf z`{Xg(^$BXk05u6R+Xnt})~*}n5+V_5U&UP|&f~So3<a7$Ac@0Wwk=WgL`2!AsVkM< zIN;-R!^@9&V)p6jTA*)uMXye_i;IzRYY-Ki;dryfp3|NZuP=>s_r!oiawKm@A-Q*u zL{4@v<6l@8RLIkr??{izz0?ps|AFaV_u#^FZEuH_fx-X;kp+DZAu4|d%yL$)5IfAM z-?;Q!XU_o@rA9a1u2Ho4NMW$OAr6=Mvz2ae%L>heYP7bWMaZlfjPHmT7^pyX-9nYx z$xb*kvcXQM(AIT(J^J*kJ0IACf<BzTsDijqzO-i;9(r@QgsgS9F1tHdcIs+VeUxNt z++yI5JIu{GdvO!Z<lkOZ(DfO3X{5G(5qh=4>0DcT#Pg?utJlAqof@Z*vF+mkrBMfB zKHd&e8;I7nI{ApTYJ6*Q4RP;B6UTsc@&l!6ErMb!8pz9a4HX5<=|ZJQRxPg@Q|8}U zUMt)kYWlP(6MXq8e(VAnYcQd<%QJ?DYuUy*vv{)($*;z0teE2OrvRCzGeE%cb!2wG zdf;LdMP=zZI@uDF@W-<{Q|8j$PkDoBzxJzx{<CkO|NFkNBj!CICFKO*L1fci+?3+; z3@(<D_8{@+jN=B=!lLbvf^kQE0u021+#NVcj@}1zj^V06_riHwa>tEw@iuzbX`&u| zrV-f+TKWj_qq4NrO{oc0-47CZbTYOLF|}Fdu-80qBsEbLEQ$q$9ZN`s-BJx;n&|D} z0{%N?s8Y~`r>VxYTbNH$m0*IaHD0(yZr790x0$JWu#3~5lxZzq8~rugt2ASsp&+nT z3JM<Wh<t|pw%nh`jjoKYMXtXRZf}+(^KL+e_Pdzfn~oM#e-<?~qEl^BnQnKym61=L zJ9*K8?aeogZm1O=)?~7NogR4Om+sSpD#1ZgPQpy-8?_PLpBKFRowPZ^y)ux$4L4y) z;aI#z)D_FPH8WCT99s+cglBh&pwvW&Yby+XOdQ$yJY!I*-OAhee*Wp_var9X*5A^A zN_JPeS_@y&RIwf^m_T-ymcSr(a9<iuZ=cN=U2*abVugL*snoq;2RrdhQB2wgqoKXp zr1ZKwpYA%%fu~TDx9xzqswxW1ne_AzRg9c8{J1&ZAl3LTI@0M;oe95pkD^!~J;8BA z-%C_}O08Tw0GGpMFlAxZ*aGm;+q}<zn~*bL=kfPhHAVN3cdbZ@iMq1Mv}8T|%)7Od z@W|2P5KraP>;kqQ5GP_C!J(m(L?6{|T>g&+Hs{89=chZJPBJk0TM|Yg+4Tc20>mlr zM;J9lQSz6$P4mHgH<dv*o==gt<(?#2`K49shNiD92%?08?WcUl*j;n4w-R?E5I%>k z&mZ;(n>3N<TyhIKl5vgozIYI=n{94UZ51VEd@ca$KVm3NK9q}Ub(gNDCx~X_=Z$Zn zp|o3mCpteM=XNA>4rP+*6MyM!wKQ>FZGVRA{mxDQ<T~S^1kk$v7s((bP-1IzQk8Ea z`-bhssNxd4%`axI<8#X2CnBG4-U<>KOfd(B`QD^LYHUs>l^#G-`0T*U@L<Ge^4=qo zVd8!~oQL&emTyOq1tSyuUFTjnsvU-Lt-gSVgaZi1*wYH6i*4Fnl4!2L<z}W1iNw}H z@e|00?xnHB#-`SsUSv~mhT)@h(anv=&T$0;mm=6e*OKoaEJlekMSSfPppGVO8qb!m z2354R=<e@<7o3hSZI#t1kRwQ-J48@S5xRZ?;fvyOzn5y{_9U`M`qP^i`_=A?hp(IK zQl69ifi{q1-HN_yE=8-1BB)m5@^c{XEZOx$<DJjO70$2EP7{*%&g&$3lc!H)yBiP@ zxuPWJ^r%8NJd2+h!>~+y#NE^fw@RfFTuPy&>M?>&oH4H1Wy%*84`Q30n`IidgZVh! zP#O5lq;&k4Q^hgSI#+$#(+5lsv#m-nQkzcy2%Ln+y~^cc!XdH)=n-RrUsIvuMqu*m zVDQ!AWkuT0ijRXU0bE08Ge{(e(4X^>w-+EEhx22uuacBs{^x})z21|feyuKH<g>+r zT+zvf9C5pHy&)IP7C+wly25i;NGW+e9VLLRqd4+Dn1B8J;C7m|W4E${&4S+1_L^BM zVNZ>)yM#(IM@ITe1A6eG>Wp7N9z_bxf=vh|jNTqFgf0Ebr_0khbpYjrN!gH0%lO8c zJ<ktx@E8^cTJo%bImJoPXl*E4JOxy&&_vr9?^NdY32(sgXGk1m-i}p~8dT(&kAN2k zUn9}aj`6?0$HCSDv}`@VJU*N%G99di6EKVwRL301{zhwcgY;7^Qo*+!ws~-ZBZK`8 z{s0Ix-hM@`B(I=9r0LXZEz@j%;J(;ezHZJ5COMjV&b13pogj4<hTuCM9t8as8U_)C zm#LCDBp0Lc;B%jb@CYV3O<uI;(DLkW#Y`S5!`X1(du9eo#jnC=--^PElA?0#C1Z)l zmAar!QTBF>3t&wqU)1or{aP}DONRg3>8~-={k;youX#KaGoG&Kc1X?oHtyGIVrfg$ z9R&prA?*ZTO2y)OWipSemF_j-!A^2HU65A8uN5KYBH?hhXAE@BW^@!#<Ii?GzL*0P z;8$^Z3Qkb6?JNX1oMIeFU==&Qtjo|iLEWkfn78SI!w*}}+{Vq6{&b5gy!3K@NeA<f zlrAv>Q!#DS(yW=lMh4L&AfR-9=7)m3Vr9{9Rkm>D(m7695U#XWR*`moGcevA0;uQ9 z2-|!|RUi0Srxhc7^ojwhT)n&I)J$WoFWgO{c*#1I!QZsD;G*v5<LaHP(?<0lo`V7# zS;xS{AXLT;KqyLb73nsz5=j&N&Aiy4XUMyKyTfk-oAhiKi64UjT(ZE$3BZmv{?YUU zB5;HOwjqyc!3f_FC1Phj<*6nh787M1jG6z!jv9q^6tqJJpsd<3y248P;2R`0bb3<t zuKa3tXm-J#1V}6Y*RT2gYR^d=s?Q;`r?<CLgXEdR7A=-^BWuv~Ylih(nwx(IOFKf? zU<jV72CKvMD^U^*F`5@I&^&I4ruB9Nx+OsmpJE3t+*<fS4aYCH*S2zv_o?^a@Lx*c z84gve#ew5(A@P9FnH8DW+nN#f*;sr8hA6*#XIR2R#4q*S90Pr+JD{S;B<HXudM$;R zg18t>)1>beUq2(->RZb0@K?R+WFdp$`N&2^j!o)ijJ96c?7%a0h=Bw3))nE<7uB1* z#`FU^=hv*KcRZc5Fh{2fBk=Ld5$D0zGe&LVvi5D4LS>NA{WID#I(cC}@gk6i9m*fX z+tQvqzEvu=Yff=Qug(->2j&f}#}AC!nLfo=$uFm#SLCAF8kmQj{iEps4BdfzxiuhP zjul{70*D{!WRuG6?x;Ams|{drjME94zWa~v)Y{n%cS_vJfvi3qsxd5RAI9^AY3rc? z!H?8y%AHop<|lSRZ$4;rzlt+*Sc(YO5S{+Ifnw8DMi(#Sf#de!T4o*18LKPXk3ZNH zhfKi5m9SFHTaMTzMb-@}Cov;0e}mO=V#xOTnt=bDe_GN?Jmj`M@<o0nat!wZU8xVl z87FfgpB?^%ow~^x?ZFeOI>ujHEh*i=*QxEs0K<{wqB*j6Z|?c2hRCUhvu0)Pmosh@ zzSKLo{flq{>2$UA2sDT;bxTn~{;47~S?S!<zr?ly0WeW4=M0&z55haquF_j-ZzLS^ z@>`FjSi~knjW8ORE%)!nm|sC=+C}$d87IO2K#q2FjtP6!lRaQsZ4TVGUybRa6+ZuH zLPPE`{-V-83AMD)4?;0eY-@>4(F#Rr_d3y8b~&oGDXMF?DihwEeZ|H6p6m$h_wLjr zj+0E|MczUFZXB^Y==op#;VL{R;mI#7%67k-9EO8(Y-ahzhTu9JXB4^Jm`8+<IGzc; z-fGnM75J(hY8g-5?WU@sM7rX2#oYyiGrero(yOXoU*@ps<wPFV*cM5gONFJ7qnCnE z0=J(N9(7Il%JR81bk(Lkul3}An!6NNOq|7a<b}zrNj6L=)EvO|DZ@E;h`TAXO?&0R z7YeFVYLJE7wtXj!wce^K4kHq>?6+6&st-#)nLBhy-V$@E3dl^Ra?FxzAZ=3~?RpjK zuNM2hEEd0epS1D#seetGFhs9}tcpZ^ZCnr{W_&uiKU@B|^?K#lsId}#xY5lK6XNK= z-~*y$igU63u)hoK3)SZLPggF-yZ~E`_#7nShtR)N-6V)r=tN9O5l`Hq!CmJa<&LfH zU?zNCyr9*a!$8PuxT2WxY|n(+O!*#5UzGkS@F*`Q_f(NfACiX%Cg=Bhv7#5hOv)e7 z{&jBEC|j`Q8Y3Ol<jYSNhO4GDH9uqu{P_6Ye+#k!J{NF{;IhJ~x~kgji|Cr%cbTH~ zwjFq^ni8N~|D=g#MIX{i&ckV$F&kAw-DBY}q4z~m&a#^K{|9wn{tk8f{;gDs?E5;| zD_hz3NkWpOV(f}!8IvRoh9UbNLWq$yStk2Vc0zWOv5Xnnw;AiinEQF(-{bk^`+5F= z&++^L4i4|@I<NCQUz>Wj!|7~ak<@3h_0qg!pOAcOW0qkP01KVvh)ql{m5=P+a-ybg zazHYHb&RXF{8}0o(2zShaixn7w=lquNH&io>|1Mt5pu-L{qC`?AT^2wrf_oSwXCLa zu86g@!G(qd*TjYA2BXx}bugWKLPQ%7KG!;V?EfmhgdyODMBugn?7|bCYHG(@@V}Nf z12rgC7i}IgddUdMx?ts6e-c)QQO2k^Ia+RaUk))F0ZElYObN_U+LtRQBvYP|gkp}C zFT12Ii@RP@zwpE;$c($g+D|5k8y+YgVf1E{S2V(;6^K?ED>)Ii+Ac+rP!WAGis;IC zYsk2*^;;X)bYqWe+JC%-rto$4SCr(KTzrx?QQWnGw7cid<9J>GWbR8&oTYgb!8#JV z^&pa@3-lMM9Hk1gf%U(l`?W?sP3_ji(Vo9dXlY;CjZs1~!&OXeK?akO2~Y^#lj={x z)vt#PYyx6d4f+Bhv{V^nY!h+>Xe>w^O>*%FqowvJJ1(d_-DW0NM)9C#eLdfMdC}5) zKTCfe4hN)qwsW-OC1FfIXFIsZe!Cs3L|<-56TWF6G%anx>9LbA1?=gGF%%!*sSE!C zl-vtQibLXmWU5=+Gb(xry5?xMru1Q_>b}36xH~%xqlsr{+bh1DueCXS9nDGpQVvIU z*>h7gO5o{snbX5%1(0fX<4RlWcW*zMAQC(4k$40`2?)r}19Gha3^=MH|A(D)H7O^_ zt7P51%0gx`jrcP+@%B?%pUV|#EulRi4vKLh8TD-Zz$DTttrb@M^Ly=f?Ew8RM*~rh zkN$Lmn{rfc=0xOL{3epjg`+rxl4ASX5A+Y)DfAxH+jfP-jgzG(<UoAv=K8~WUn|?P zy?+1Zng>HjdFU5_CinIAqIIcd?%NKhyJ00AG;wdBLyKg+7sV9mHlkkq+1#{m{SC#c zxmyd|!||W5GVc^`+5qG-1-f8lJHR?wd;)v`PV{2?dn@jc7T4m<ApU?(HnqG4>x|Gp z@}vYh|HGyZ5+(xH@&a$HtJ9j}BD2eBRuG2AT;*{joo{63qKHmt8sU))@YhEh>otKq z!F@yBRTty(D8G*@pj6(_A7I=xl6V72jscvn5#TYv+Zf&LqkdtpwskoB;|Rx|$Ghjp zqG|`=QB1L^4RbWbG7vw)XL!`AzOvMH<Hgl<?hgj-TW=MU-!B^sLEPe&RD1N6+GFi_ ziP_;T(QlP(?{0IJOP2vt!*SsF?cY=AFuv(}H2n46arZRZ>1)>Ck2CGo?=HYhI-4`4 zx?9u;tqNUybP1ZqWl(vOl8zGlUiTe2BfkKN7gukvYF>3LF89pgAe+I;D9Vi_K<#k| z>~6ShbtFm|Pv$;RN5bWJ&(2YxYwcGShD+cO{kBFzK<Rbol(UsPCL2)m>J~!}Phb4J z`9eQo18V6Q1<<7)ho5=c&~+vX!WH5C`c<J86N>BQGL8{Ysf^?+FOnckycVk!Zi(Hy zoN$kBc{oyc%v%Qh46{7#zFcE%cwrm1JcJf2dzPK6&%ckh%WLUdV(yAX^Q|YhrB-Yl zshqOv)%eEMRny@5ggnWZi(e_~DGwS>wM$4#R@Eq~pN-oq6-wL`7NJ45yp%%FKyugt z0w9vo<l`EjWZRJy5h*6mfo(gqVaVsDOk!dbh+R|n3qp5{fTSabl*4+)|0*Yl8Q<Zw zEjyox@AW$@LE-~8+7FB<_JD3+1mOHa42fQkF|}t#J^nk5`3q~)R^dZ3PR@QGHrQDC zKeMQ(a;_gP3xTW28Kv;)01sMt%!vN@cG(vnZl8f`X%Ih!noqxpEas9Fk#@oMwJ$D6 z@;MNI`Q=kt?GtbZk88jb8h}m^2MHwlPdu$83UFZ$-os4gJg5`bdDzriKBd!+u7cxz z0Coc0t51lLXwnVl*CQ}<+&^YSSk3)BW|zJ{*K+R8HI6q(^^IL^EsA=~xa&2NfWm{Q zp~_glUILv-qg`VDeAb!B&+T-m&7I^_!TRgq>8uKSq|;hv_&+r1D}l)ihDXl)bvN9d ziD>S`CAoxG;bO6iJ2h)d*Urk@$vt2yH+Lc!xWp(j2XKkAT}isV>gXs%LGWYZrBeK? zbryLkZO?U3R_*U22SMoEzl(wjM}l1F7R48Dd7yQdKv=k9Ycufr&5x21{}qHUG35d2 zqY%%8x8+VkO1`z><yl$rq?qonMvh}l&`dyI_?*ame2AjZ+fzlF!Qu8yTU5b;a;tU5 z+Y@qPF)m?y9&b8s{UB;!kT%E|3hfJm2{+ugo7>kn$!0B?S2#xUyo%b$5V*5Zj*G%T zJdUHhDBWBTO*<HTH+I<^3kxw7xwm?4KUJct9sfy__Uz0VU}6IjfGG5RvUL&QSWjm# zQC`8e!eD{rNM+Iu-cqnN<6PBdBy|tJZL*J*c{$;+(wOaD@v5^65i3Q*5l3_CxhDio zB$tx1wfjofP|PwrO7T_<u68RY6QA528HTd@o`7Z5G0p$Q-oaGw4VdQ;$Ks+ckpd2b znIAuEm`t95&F=K`-7wMq@f95Icb5L6)xfO5gPq)E8L{7+ur7Zo<YjfN$9=54w)ggI zp+DdTXpJl(N7yo3jxLWMN?Ds|KY6rPFt~k5k}6JUwgS}usx}l&W4>unbddGkA*&gh z4};BLZd7LyYM5i~=@4r8V}N>F+N$2OpXA}8-sqrxoPhz(H}L<jWxndBeyLXF{qqdP zq;IP7BVvi--9<bZe;kD+C4Ip32j8T!N$KxfG?p~()stjXFP<2nWU_9qqjsu37%W25 zMuX@Onq%lEJ0o4B0d)a1_Eqxpb|SX}5ZBanBe^}Dy-lIk@W&CFjtK6Qq3!c$ERLo4 zysnM6wv4l5!N>``k%}vGVM(AlE+*IGU&Rs$6I6E4`PPNhfFeVI>N~Q$gr=~j$mmd^ zFp$-8jMR`KF4{+1oa{@8f4$pv5@zo2l6Ir4;=`qe$Bn8dp)tUljSpB@q8io%LaYC= zNwOdw_rx1@Q<aGeNdVZD)A+@DZf<bZ7|Ar1WR7*dEDvtUrE+c^rV>iypJ2NDKT<(; z3A^SAm!K|Usu08*#y8lJC<+n=3>jU=T$!?&nvTeKGAmV|QR3Q`0-qzPTaNAiEA90` zV8C{|6c0K*!BLU`F^31m&u?k7gT!Dm;Vx!-i~rqs2h+%`0X3hMR);E01A;Ao*W+0u zw43q~>)Zq3=pxvcxg*X#^2sKCI*ahKi8R-wauiqRDsX$_v2;VU?XPDn{%PRU=RoUh zM3kE7K#~82fLLvjozU`2`*$ZLh@am`eDLONL01QhI`%#YzC>5+GqpsOB+uZHm*Dwk zW5r`i>uBLrs}*Z0iv<;*`1@+|w8x&awXcv}58)6hP?NZT$NQ>1#V4K0XW!X=AV;nT zRK38Izf`*cV%!OuA?|k`>nlc$6k-RLdvBFCiL261WUiH@+`gZk>dSJ4cDhA<qF0`5 za^z<Z<b>6$=TstHge04?hI$6$+;!H9!N<eTttjA03TP2(4>BRhxRdK{Gj7j4wOQc} zZQ2Q$Jo?+}j~RbwswaQr$+LO(QuMdaF@c<aa6&bkXF(p9$w9csP2VS!jPK9ljNE@a zTyUB~3Kmti<1;il|Dn-gW(9)Rk))=LAWn+f1P}t%bYLX|2p5j)j>;UGK5AB0DK2TA z+smE{WCU!z{(#wmJ?|Wxgiu;EsqSH1$mW>9J<_(8TlmSq>_aO^-FAk1EdD_;6@}Uo zn+?i0Z-&`*1$`@8(oCWKhh~tA(y?oovFO3Z%;D<mTl&KD#j@=H?2k>+z_X%ra~c9G zP3ls>VT|F6{6VI;isjsjk%|vu<66`e_~Sf&=hNMwmPxx?<PKt1cM~t5&8odo?s(Vy z7ptdx^7A+G)to!nt4VW!BzCk@IL63j-a#Pjq7F^q%`?s)@M^%GC4>SAI>!Er<X`Cb zHPn>XlwQTT@|J@xB2<Z}_t^!2Sq)>^R<qUHVX-h|OLykx*9sNF;o)Ioh}@+luOp+) z#_cT!fa9Gb;WrM%tOUP>CRLtg2Z4G#>K}h^o~*D=Z)j-wsDZLi4L86iUb3d#Ca2{8 zCcobM<6?E-dqo)qsDIveXLU!J)N^j74gmqfZg9!YbiTPXZtiu4yiYJHY0eW>=oO?+ zj%AMAqTK$P$l%sgJ6+5^a)E2?74$hP!)u|26wY7B|43uC?@Z*kBTsL3v)j4)Vjr4U zbqScKN7vo^`7-5DY0bNreEfvu9Z`%YQ^X5q?Xf2B*dHgGcSOjl2_z!zQitLD-S+Gb zq;SBlO^{u;?R#B)jG<WD+w#`qH(+@Cd>MEf_b-d^CfR^W1<tk@@c#P*K3e_p#u%N~ zSE_XQ4-Gbn`DZf2K#1wq?GW4YmxcsmUd{VCpg{dOs2um_y70EQISpu)_Q^ITSF5^0 zScMV3(c7fXSbVIlHo@>-*~}Y56RVLagb`73Jw1!P^NGqwvPGFF(;V{3%rwB85oeA# z$fy4pht;dK_!IK|IlBp_sIGqWkass<9;*iv9p>R(2r+c(YZ!)4B5TlLl<(|aRH@%| zl)rk3XZ%KhZ-gA){)C$XfF{AWktD1)x=)a~r|sJ4J6i?)X?z3VW#iFad+#3YXOi$r zYi|r*`_{az^_u!a<;;&KKn&=%j6~CW<AkJU{PzF|Gbv~1)Eq;RBMx?93n$rdDH8c_ z60Ba<nNkdJ7pUiJDXe%e;wnKrExgDLo4phJZ5^Wma&G%{|9K{Nn8y<ud>E?Gf0^T{ zc#_E7y@q>&hN>KkI=mb;kPs-6xgGxsVNG(^zA@#kTGJ{F<LVtBe;(?d<dpRxAoOo0 z@bAAmu!ugn3<nA|Ex=8Q#}rf4#-4Vy(T~@_Uq9K<P#rRo7l=HU=)bmx&VJfORU<cG z_>fT^+(tyR+O4q_;nP!M3X8&;>gM)BlVVLHSrWhf*cGe3vA}Cl*pOf$a(;!5R#*}^ z<<Xec4UL4<t%Lt&A7F#*#&Lk?UDA$~n;bWq%6op!T38leGW;#z_4`~7^b;VoL`88g zsGtl;)TBb!q`J?TI?_zt5kb!+BP<Rag|WX>&p<J19xbemv*{@`@MG*h9p-<q)*loX zOjVjRwF8s1!HmE@mWv`;POjTGP8e{ncy6(Kzw<tQRU2R;F$36J9pjzP=rrX3p0ys8 z6HQzN%x=mwb-eNB?~RlvE5)YCd&}ut#FrIXb%~wL^iq6s>@NH8OeAxcKf261Z$PQ4 zl$|f>gT)f<wG#|CVK;t(kysxkF;>fv)%bc*wLy85myLF9RWqn|EfaQFS6n=64+Pm_ zZF;MEZVE&`k-uE32#K_(Xp-acu^9xiGa>7G%?-hVMB_=v3)VaCALC=dgCn&@g>c%w z%;mE}OpiV1j7fpzgLKhH-ybJE*m$cs{kw(s5bd7VxElpoG9o^zMYu1uaUBf{*L`qu z>T|SIhjasYqV0TPLa|bBNXf1K>ggBC$ttIXZRWt0NwJ0XWY_+g_8N*6#XfKjX>V8- zlm{=$-=erp0j$|iyZl||DqNA~r!qxfIF1JjevZu<x^s4gU)R|%;N7<KBgkPHIyK&1 zSJZk$6|bKZK7F1%)uH^8M^)@_`(HjxVi)S<@&fRR3ZU@TVCFW-H7b}CIFF7LPqyZ_ zW|fY({{VDrAb~oy?j21)(XZv)e2)dOxQ^lsVAnIn(^VmdfLC&Kojvox**$n9;o3yD z)jaH)(eJQ^-@p1C7Ly-Q7g8Y|+5%*=C1deJIVLz%uc^xNp}zjad&D3n;&A}Ra*+|F zKUNdl02r(xUkwCk#tK~K6n-;nOLO#6q{*%LMe(e~NT5s=EMNf0VrbsFH}WUe&U+~_ zp2|f`XjhK)<thn80$Z8y^=y}`6b7WFK7(p-Ve}DvDlwO}(>#I69(xFmw4s2BBPS{| zU;+e6O&r;2f7dRlNtz&5M0~Y|s>7xMDb=hSSBe`~F7I}J#=|7q(W=lSI~j18Hr)Ur zV%iCa7^?ZZ;8{nV3Da5e{~OT$07nk30FnTer^n~Xb<-4UV~(VC|DZ}P+0XY2b@lmI zS2;HoA#|iV{5Dm{wrOF`m6TPgy4vzySKz~4%<U@ztkhpf^?h8Nf1DMXB7$Pn6fbQS zG=DB99^<9a=hD7_NExvUl(O$?yYz3)j3IFf9bViVF<}|A!ryFIydcmcbeJO4xI{ub z1DSjsMQ;9eiA6m{<YfD+I)Y<q$4_HC<bFo!U8A84ey~CN@5h3}`EXH-Y!(RjNpIEM zkIH0&&n4H6*?}ZyKsn{yi#xEO089BGV4IT&F(a0CsIP{3&j;E1c0+<htOo<0MeMDy zY%bR<=XbnP6?(1}fGHTWb0&%Qsvl(#t}BAhk$nUmyS=O#G77Ta>v}K|zS%5$rH$}% z77}CaNKEZt+zfh-j(kp96TXOlPO>`dsAV}p?M|l$dpFb$8rwaqNth;J%$lkiEKW3& zw1<H{B>dkJ!M+%~O9MBuBNets9m+6iJ+k#7c*v7J^g9Mta7&J+*eaJSwTGJ&%}Zz2 zM@q)$Ik_y|PV-E7-%5AK#s2O@=9Hxj7OTKlIlxf!9Mp-PkW9T6zMT5LH^wr0>*9-b zZMjizB=a1!jxWxn;7-}NZB>;>IIpDir8^b6ok#&qUP2;^Za(mcxO%<mky!|M8?C|A z9~jhtegs%G*y2x3IN`uZqCd$H3vD=3(0|jf^YgoQZZNdJfH=}8bL$LspA->~e964C z+!l5P@I-<h8~n}O00L3?Z6{jpY65m3-G=4x;Lhpk61J$tdi@SqC_}R62yKX6w%!}6 zI!T=j?LJ{>iw!J^-md7<3a`v@IseH}71a4w;efLQpU4kPvw!;X-Hxi~ul?Qr^w&%H z9~w7_uEcKhIc0OA?cBT`UwO|DQ>kNEK0{`;o!U|&t2JDbV3WBU3$o+mNc&zGmzF4s z)w{lb;l0J=l4pNMN0}h_D1w*?AGBy_o|0pV7O$<EDW2g;x+d>ed}sw&-9{w+OXt$z z$5CigC{m4NTf%Ju?vnLp(&r9eFP|6UKByb7o$mD?VoPmp9R~0)HWQ9Mg31J5ea_QQ z$~&}0vUndYOM(M3A;w3C2q&f_?Q&mFnLl|@u(rd?w{zi7?wnwBd>6qHDdb1S)>PJQ zCX8|B$oBay%e+rZFZ+Ws)^yN!#>=_-jH+uO`&<hgQQ+hEUwMl+xZZ4Vsc`vT`}A7G z<umPjvj|49WNX(<=zvrKmro_vE62UwC^gC7=j`NEwr?-iI{sN-5NU{2W!HO^#XOpE zQ6{}No3@t<bSB1fx)|*#amrh%`PrLdFWwq0zXVheH*YK_VCmAFEeP>O3Y9+|tBGZ< zv>5o|L9FDP_``C82dFLxv~tI8o$JzSoZ*La7yL07iKmaq;6;tUyYJ*U*7T2@_J)r6 zhU9PA>+HW#<*dg0wMhDr4AC{l$WtVwX~J3V=Ee;#!2&61aI=|x11}030vxoK34*Au zTsP{Hm77)SaKvY#-Gd8|ME833Qk_bH5?)#{3~kvAmI5UY_!Z3A4uV4|8n0E#TN(^^ zta0r?{X18&ix*1a4nG{>f<sIi8?x?CIMpXltNmGkbyudjbR6uGF~yK5!~^0{<yZL6 zqYY#XJ6z$BQ@s0j{13CNE2n)lKU+5n>pK!TjU|u5>wC6c3mT)J%^5JTi#dvGzfcif z0ZIt|A$gV>3yNyrod8Pi#=&mHiPCB$g|%Sa>T{d-cA1`dirRuNd*-?e5PQqrjTRbq zEprQ^Ay#~9<C@Ssg55m}-cOTRaLl87r2W(`dnw!V9XbMYGCcno^1U!~(9<2~bAOh< z?`+T5+qA!`w<7ZGtqY*XuK&#j3BpM-xj*gAC}%v0xOpwbW(;k9vcQ|b=DFPB!Kzg+ z7SZzFBSu>;w$Br)0-|rZCuyuy#@OPZe=*Z6u%lZ`+iItcZ9V746yil09M_x1P-x=q zmKm6a`do8MDqW*>pl{QzR?iRBdl^CNaOA(+ZC0Pj;}8IaOU4Z}R9^M@x)Eg6L-x+4 zh?7H#=IzMHP9K?zEp0{_<(k!>Up1p6{lSs%tZiT6I*mAdjK2=7>aczI{;)*gbuj2; z1qiBj;w0FKk+S=`OnAsmMkCB_nNibDF*}`vaY0i5-~~^=N65&FV9_TC!3hx}b5|CQ zg*?y42(f4gXkHT2EBHGy$op7f!*ka*vE#ZOb9mGF)@EzE=;ix1&wCR^<(WGyAf9#% zj(HT%DOmCekfUb%ksG9LJ>n=t#(W1il!E>fsi+2q83u$CA5_q}SKY3#SUM?VTW0IA z=2wB2S9R@mOigWcIEQ37yA7ou-ZGuM1%3<#rd2M$e~+Z!s1n*Dv-q)X@=8|^;o|*? z&E?yx`{n2`5Rhht&o=fJ^yrR-y|!r_Q(P9AeEDwmg#M^Wira=bonF!UIsK?oF|GcF zPaNx8TlJSo{iUeiC(dWI04}imuMe3nG<UrYJLr~HSJ~w=4Jg4Rl<4U%&7GrdP%6=b zW8#^^g~<~fC>FM^t+%e1n_gx{J#`ned?}xpwaom!HQ-qr4G9@aQF0<or(2InmqpZT zelXzdzQaRlsI27phep`SzWQ)3vpDQ9&~Y$X!`Rxot-S`qqiqCy{>+07sgX8NVQ&Tj z$Gwj6*P0XAe40$<|A$8MSfO`7=o0WJ(k8|14QNZdXmgW20~YPsEZk^qt7_7Xlu^z< zf8FYj<3BCCZHFh$ZOAM#GiAHnS2FpodlVwKfcx(3+xjkbcwPI-D3H4A79?I-eS4EH z*}XAq$U(q!%<#vrvGGP3g+-HK*ug0reZUW$t+^xK=#%uYd_IbCA^kB~aPd_wct%~Y zHhxdOMdjumJHM1O*uV8|e%ieV<z(~AQCD6$2Gf;PI4t$pu})KXktHJ~7ItJP<HgA# zU%k*^v-aIDe=%8Pm1kuB#bJG5LS)+TH!GZrfea}O3eyM3Zjr3Dg)lAW$|$B)EySH% zrNE#S-jBmaGX-2@=NiKGHSS1`LdqdI)X^&(s4Gg{pF`M{zPq0U=H0}8C&|4(Ah%?L zt%%!Y_H*wyE`UBLIaAq97?7ibdB{bCJ;h89{|^o4@69%`DaBz~0(NJi6N`29@{sQ@ zEOZ4#sf+i3OCrv>+|B~&(dHw?kn1}$)i>+vxjcVw@cFk5RPr~AMfm~4TA1UdmfbEe zJHqwl$$`3k7o#`YTSnh#5*n7|80wz~Jo^B^=R66iK=2Z$3-Ktr8h=WxMEzIW;jcJO zHKBLq$#jbseV+lrHha5^m@uWmHH29)cEf6Zcqsj82z2#9xu{2%&^)xHnT#a1nOtgX zmW()<g~=O%>Uet^83i6@9Y6Q_poV@pUY=hwzO|hjNYbU(Puw^k%xDFiVwRbK5*NPg zFj+QemgNh5t#dE0fu`HsNe0n}Xf86hA^Alf+1_%(J1^}>Wm~E3_q7DA+z(6N1Y6;R zRuDnjUpqFB{IsL#q2%^vi7U?WK0$1@%=faD!<{V-s`qB<Fy&sBMQ8_R8=ry5c4}$Z zetA3keDnR%<N_A`E9l$62nSiJKjV;L1~zk|z-EpE*(pVurN(eY0^<!U@K(e$;$`Rv z#*y8EOiO**!d25{7kug8PtO1rG{xrKP)uQf5@*Pg7LY2Su82LH&h|yXSc22u_*K7% z`bGER$H;hFQ2TU?DGAFh#7C?Mbu7N;gLHF~PO<4k{uccR4iA8I;;ul2SjS%0Vh~1t z=%M8YwLetD&c%N-l;oU!YN=at^&H(-rAX$m19<K1u$g<Vf~^h*Q-t_T)J*?1NAxc9 zA1U2a&_lps&Kq?`wkH;?W$G2hzBtmj-0eesH*xU*U>7QD)vJ}$ORZ+#XknnENRGmD zT}l93mpWWc<WtsYTc)KeQ3DihOB;t8O(POrm%7Ifo|@jNvI=jFcILu3bDw?bsth6A z^PdR@60M<~%E!t%9AmKE{iA;O+ywW-1<}X23aAw@LS}mRq8FLjT<ad#ZR{F1ycY*` zZ}ZcD<)vatGTU=F`h#tAOc&-TWvyP>H?c@lSbXMc)XQh4)ZVQ?sgzbSx&Sac>$9V) zB5L~X+t0e)C2SakK98Bq7t5ty1>Zcm^ligO8C#SA7@qe^)HH`LW-5%0MNEUDBpUv< zag%+iEU_L}tY-cEIUqOQ9BmD)*l6!Du;&<?0)<kLxI_(y+Mk{R!#XFV<=-7m8wcr` zRbPa($VBAtm6{wy>4jIv(H|+@2YVx{wo|X*k+u_>8ifO2H+?_M%;?{7by9t7`0qS< zjAE_@F<a^`4GwG7G><G`HLF;7LXML#zcE@sv?BsU%t?{Wz|RL5Rn~n>UQt7Nv8nHB zu9C`8VJh0}nMhW-_dIj6SC*1j4(1ItY#t1JP7#(A-Ly-xvs`k_mjjqxhCoM}{7Xw{ z`y)>N0&b;~4!0YJd6gqi{FV!l2qHMH(#YlYf_J~!lZ`cjeWR{yG_b-XAxUN`p|#y4 zxd?afs1F8$SZ*^qRsJZ@&pH?MXN0BSlE+1|QMcVy`^)ptOz}BxpA(<_7iqWkl((+1 zK0CuH%oeIV#UOl120Edg=0Xf@#GUlFm0f{fH_k<f*u1>vB$RV_@RC)GrNA^!<oaW+ z;FA9$llD5AgA7<&2Xr+}CtXBG)Rss)PQLhHYcZJGVq1JG)z0tu;2Qu~v>w`@h*N=2 z{=*qCa0Ifua@q;ZJP6&%!@>Wl=S)$G{pF&OkDnA-rkTH4WYJLL-24dnKrwC~eFuuM z15Ht&7hw6yD4FuYA>!Zfv-7;PY+aQ%dIP_uM*ye^NS`E`AiGMsl+BnryxlUrVC_6) zRvlufM~lk1PpGAyvmZoT0$4iq!gtq`-fHol4<BCST#E{++^s)AKl|2{J(T7j*fV6F z&Yj4{&2@B&7`UY_OSpvOBN}-mPB+=dwA^iKizHNEf#2iOAGnbAJMlOqBqc5f3e3W; zGBoe65&L2mo*qA&$sPEIrag5Hb@@>Rj`1BWLFbK<eKoVjwpfP$=hq`@y;9!+EHkgN z#i<+}L6P|el{Z)sk7K<3aOoN(n%qw4i)?voZ%C|vFN=WPJn)mLyPI<wH3xoxA?x7n zqcdN9m2J^2v;OUJ?~h9k)UN94n>+*Qr$jHidCMFTObwdJ6>vnfZGYc6bjw8jRp*Y@ zMK93*%?+I|0CGbOC^9&po*t;Uf{rQXi4llEfS(Ula9t3Z%$*eC_w*F|puGIp+J*P9 zq9|r>H-_&xY}OKpb3OWStbV5^f%JN~EV++Cp+7Pp_Y60;X}Q2hRwAaD>P;$YDNj79 zr*b7ePKNhUwe|d$3tN<Z#%8fS0=MpcVN;#F`7MEl=H2<Cyq3tG91RjMxJT6risFkS z%H;?XFZW~*8Sman@@sfvdg*Y0KLYxV*jDdVM!7wKFa=nh5~UKK<md*%nX7&1-bf)k zGrNO?iM^?1cf&>7YZLwmQw2Aez*bXv83L69D4D5B44qQ6;}VDwx3OJlv5B?qEhq?u za*itoC*-@Rm2V`t<mYh5yoAJem;;+TEu9Me)gM7z--*W4p^VvW*|~}(-kw6c^Vtar zzFb;NKN#PvAcKSVG}%!ntK4KW6#W3P(*(4JBEA>oadXg!?|K-o|I}HdAN>NYd6p|2 zvxJvzWbC`GVJ(&D=*8)UA`Z6$#Ku)X0uP{)*hKOxTqJUT83_~$m^F@pD(DI*MS#F@ z&e6PNEr}ECh;xSQ{z|?{OVGpGbq<V}C?|h{s!;9zP6?newX*Myrp_!P*{b3d^%d8c zKVR8z$HeDP#Eb)#b-NTfCJQ8t(gJ`Tt8IFR$95w{E-;W_#2>G{a{9EXIbwWCV==;D z?yC+3ItqAN)Zkd);4a<1CWC0>926l#POi}P^-`BjK_QmQK(wg$e7Zfk5FdaHsXJjz zC}b+EuyaXTPx_5rG1#{|C&Z+6MQNMLUV}0rR>V649S%tO=y8|a=|(VUl5eWQh#(g$ zMofq}j?IViC8s{OeiZI>>-n242HKcC6ME{Hm2rLeL1`ewfMj;`MX(I&=`Hx#>D33h zp~b&BEmS4#FQgcIem8Zl#Kkj)?lcVSo3){4J<H{M7AY!G&0N!=E#%*u6hjCSK^Tlt zLG$bF#3T(}rvQ$vDiLlN=@T)R`SI!=niEr7ZbX3nZYKK@Hwak3EUJ_w*d6gxXGciB z0C1AgZ$;x@CoM7Z--9E((bk*X&X*LfTHL<+mSK_mB+0hiOIwt*8s4IWsPjK+b}XK+ zx^m&^Ky6*lVLC8|_yVor86(yJps@n|%Kr)owPPnSrpLSk0zz+425&fJsul<e7)Tj3 z1h9q0{LX7p={||<vgg^r_@G!68_EtDtQ)spv@~1F<bN^{HmzHH9#lIG2jiK$&gfSd zpX!dm7T(<ZFlVSRQa^8Wn{#c_Oa}V2eyj$%{pfEUcIM78Tm9+v!e~l3ytO!yDq#z? z;#|f>D4t1nViUf2xbgYo-aRp2TtXh8jY*GcnImeMnQvly{%o9Ny6!av(^nga3LpRd z$lTi$bE9IDZ~6DllN7UBnFoVL6U%LrueZ0|3H&*J1(##A1_-5aWVbpvsyt^&XL9S1 zhqbPH_CeJ}?MTiNOFK#8Q7R!`#8}R*I$^I@|LU09H8v)lC13&KiQm1@=TTrwZdGh} z7k^W-t}f#Ad5G^8?YZU<9vTS$5h^$+hXJUa|F#GKpY_T}D9)553cm_0_nkAY?O)8i z7zR!Y+L0QA_O)GytLT$3JxFF(ZQ%q<8SeYd*%#irYjl54{4>Q(QSj($|GU=?JT-Md zOj|u3NBL_HY_6>V*9@i6Wg;%5CQxYk?w}KM@*TA`6aV#6{vQ8wYGVF?Z{gbhrpk4L z6EQaF*9KqbDW#nhZc@J0#DV$y-5(3mQ%<L5gZyF9e`po@?*+sh>iwYHpxy!^1wFXn zZ%^-zQU&4P1|PSX+?2|2fKLk~?XNn!o$%p?_C)t9SGM^pCshBd5B1mA<+)9)u~Er7 z0<kw=^I|vN@&v?W0?Znt9_)0iY^4)k%i1stlKv!W2-Z_I%+_7T(UO%wb0LQG4~@_a zLgin#%6D2Id_RdUO5CJIt1wT&&vo+`GBrT53&p-py-6fCOt=?Kv<-?{nY_>pvPr9w zwD@_{$2mC$^ix2=e*=HoJ+U6dL!8=;(tPSoZ|udGDWD%3=E_5BGl}FyI2QgxQ$TLV z7nL{`qE7}(9maVgOD-b6qG99S47T<UYbO=|ng?inO>=o^7Z)ebXkFA#P;`DBb46)? zCxoyY7o-a8l<GBayuhC_vf*d9O8gB!<f@K<9%KO!N%)^Sv5m;Ce`sFpvyYrI?SfyC zvQgmyhn(32K@p7o=<d5xV(<8lC`ZU6riop1#d+<Kht&xak80mfV{eDWT<#P(qal=y zSqRA!Ya?Ubx3+5G`8mD(g^kHq*xwG;+@cR`bK3_+Eu1GRM}H+N6%vn<T#M#5MHbd6 zAHIa@D0e%qy_~g0Q*N5jAV>4_fdi>p0qw8~3eQD&U=&RlT#wAt^7Y;ad;x5yO1g)X zQQvMU0qRZ=iLM9B-E~TbIs95QbSk5(!*%>2eyH@M7OpobBtg!CD}ia?va_9IgZmP# z(%VoCH1f~@{HraD$dy{LE+m+M>9JazK4j^x?GM%q*W#wF(E2wM0%A3Va3s!lTg{!= zhf4sN8QvO2ZE?RV*=Ha8xWXB1E-hc%P4?(Pv3LMEsnjdP<KROLsnjYyL}vL(i>bcy zwycUI88art2;|xav5y^?r3`a%RnGdM7H;OUpP2W^!>CXHTHr$KwQKjV<jt-eb~5W( zB);!H!qx9`Rbx%`<woo3y$5?BJLYxUOU=ZIuC@zgV@JOuRT+wz3+!d&WBbDqzZKdV zP=#I~^TV`f5%T-$c}!(}G>}XLpfv$s(bREv3S`b$?o*I{Td@)^Zr}-ouZBLsQk2QI z7q0NR1cAIwgU301z)wt+lvD90=ht#>jqNBhXleJEiFn6ZUKDcJ`djZf-pW*^3BjK- zbHamm^{1xwD;w#>SR3^<EN*oOEj}T8=qBn^LtQ*-HAby{Grrok4kkYTW!M7+yvUhn zo}WH%-uo~Yw%6V8x6WC^YdsUVPiU<)5FO=V`((K{n28@>Fd~y>XNwKa8mnvSlX&ZQ z0!b!Advj<;YfH0@I&qA<Vq@>tA9_KLrhCm|LA?sebOfn&xI_Zs@=C}QK1sJUA^d*7 zNMTVW4cqV81TQ-#6xX5d`QH>-G7?$l;saj$zCbhfqeHb5(b`tqx;PS>Uf(8MHQM5V zx7F=Z4_}{k75h=6(0<GrC4i|gwMp#p-~zu#(3L<(tr<#VkunZp2hP6Fcmb!3(qEz} zO9vZOe}gzeMbE6AMgLBtLV=a7Yod_LQlIk!>d(E^z9XL?>Ms?*A^qs46t^YuS9&>= z?{)q+Y>&4@PF3u?OeOE95<_*DH}|fZPXSKw<p@pUaTLPPtCSpRTr;^~<O0h#imLb1 zxf-^#xe}Dx;i7$xD2C!_G0V3l2Rs-uKT4Uw*62q4tUETP9$obDqTD3=T`-Ye;23j^ zzhs$tk%qqbRNGe9n^^zoluu+vPis<nEA$+}a!x8pY3%@#iZCH(;S*_$&cZzl<~AV5 z9YtKX?(jOvtNkLtm#a7JJagd+1m*hjzHekNlWH>TMe@U2_x}v8x8bxcDbFC|{)net zjvkzV2fS<J{i&B(&rNOz0~zQUTHl6W!s`u8SmD-?v4WIAqf<jzY$AT4(CY*fOs?*2 z)2^-^13cUj+LLJ6gYvuBE!=wHpNK#Aya1p1%!LU_65w{i2b?iW;?zh)%k8{*M%}@d z{>&98Q1fEQkCDQFR?Zcm(CVQm!bfZyq$}?%l%R&*oHs3leu@2!rmcUlpUCURC)wix zf}8xHa;Hh57%XT5zGi`w1!J@=dR31o(E70!@E5rCl5u!?xJ-GO@vnF<i7!x(AK2u( zB5yT78R7mtx?bKM?zwX#9M=xyRc)x=e^6YC#-JV~i#90U0SX<aSMv~U2>zwadzF7l z2Ke|7hhGE4tY$Lsg5F_f1o|ab0E?^fxa!iB(@YmOzHrewY_7wdE}h@~uV<pEZR%U< z4dSB=g6)&OC(R9$<#J_9@Vv}k()OIxhx_8pKq_8su(h=wjh~?7osd7Uq2D|Mk|j!j z`Ip%??0JoT!n9a4pTUPPo{QPBw@;D{l^p(?BGKy=CIpjMCt^f6V^3PPL`li~oJ?Wr zN9Rkf7HpRSXgD&LwfV@!gp0@Vt78;ofveR^Sh3P}iw~@|A?fML3sGi*5>|&Gr$FFb zjVO$|6l)x78gnOTuO?al#~FR%FMvli)FzB#T@#Y4B0(Y!*wMZ2_K%vXVmxHc>=pc* zJ`4RFeu)5$Dh+BG^k}P-Dn1{b{3`1jtV%qt(ml__!ff|B0AfmP^w{yxv@LT}cUnkO z(t2iiv37hLc|!&tr6yR<p|k+dCzxYvz_bVxAe13i7Gj)Yp2;w)F*6#LBYfVV`VDnS zn6l|>Ngf1ffX0<+ewxO`^B3(8%_}5)kIq4L7nkFEvxyUT>znJ8t3GAgSLb{$ZB{Q{ z<e}f%?93w<l5UcWd((*n6=gOlS38M_&79g4{J%7QVqG{_3P7y?fYlX4v#5mrfh2vF z!vppVW<X8`c<WO$IZz_y^|;7@zpU=xn>Ob?ss5ODQ!{VtQ(GzHruIn*3+e5A*P_%D zk?RAJMD$GnC}jY%l8YZs0M;RlP}6m6*b0xgMpR3~r!ASj<xRVklFhm%pT_)k-*eq3 zUs9jHIQHW6xJKorlv>3sQWbD6TvS#gInMQTY+827T;I#@GrdA4N>z{Jl0s7#F*&n{ z^DSIs6<JF_E5BaHlp8DgAuay?X(TknE``{KZ;L1HbrNK56gM<CJ;$i{$}}0?KRl?I zj#;F5k>t9xS*Ii?G|k?mk+M{G9&^a^cD2MjzD5W3Iz%%ET0bT!tv3LB@L{N)yz){B zuxx!<ow9lEY!In_BK4yZo+)!)oK$dvIH_A|EHir#+x~o95fekS(0qY6xk!0I3V^3{ z@0H#cPM(rT_G6n%)qeTnl7S81=KmwFz;&uuVkkHAHW_)MHn<+of9m)(BCmu9;w^Vu zeuorX%j}C+@?e-TmU6>7cr-larKh98H!r<GOEr+Eh#}tl-v*09%S0WwQ8N#mMo!O= zR%ik!9?Ynz=jAF>_c=46C0WczF0k0yksH+Q4;h^Tmb#+^lH~hCEr}ibn+tgEVdTlH z3f^`-B?6U+Y)nM;Y>cmA!BK5L2ii2U!W$xZ=}wutGB?2ZtTsX9Ncb`JQagDX9ZF>& zLpySAR!vh>(^-tJzU{j?cspf?No#Xr4Vdr{j3h~YQc-ioy81(3SFZxY<zLQmH`|8> zQ?H$rY}(fTTQ}J>JqUsdHg&|+5XB4A-s{g#ZHn+mIsm~Sx3T|E(u4>aA%bbqMXy;U zkpf$@+t7|*4V}fz+uy+MX&0X!q8Afck)4K4CHG0vPk*~Xtlq_xCw(fo$xOHfbW3eW z(hYJn{!F1ehmCj~Zb!vEZE8vzfkZ5xy9!}bP$nASo~&kWK=e^~T*q~UMzJe*=C8bI zdFxMQ_<h<Dk>st_s@INW$QSsdUSow$tWsFlab4ZxAAl?3o#Mad<<9VgY3p5PHy@wj zIs#$Z!cjY}|IV4QAF2x(lS5xej7Tlq;480)MiyHaX7|Le?+NjWK8{m6=Ctk$(jeku zcWS_la677uBcx$UdR5njA@*5}Q__m8DvusGJ3z^cstuSmsNe;4&AwNi2F^F3Q(?^> znL``7&Va4n4PgHa+*hCic{6gI;@vBIe7Qz$dt7pKU$zLmJnW9_>?c?LLvydBov3J@ z9ts#5mpk@l>Z1tAEA^2ze?_zF{ix3~QdL2bR)E803OROZSn`Lzjf(%bITNL!9JAWO zDvvbZ15?X(2B6vr4wQ<nsYk@h<~R&N@}UhMZqxBB?O;p`Hq$bTO3K!Wbk^B7-_>VZ zIHtvmJ<*Etw3>v(As&sjC@tZll-u|k>oDaABS&{xhpBgqU%z+vffUkCNC}6Zkj@z% zB<3jUHF)B)iH?Cf=WC#zjP}$3yYPY;7b~rz^uizCEv<4BuJ=6$$fip{ssKgxgu!}S zu7{;4-}mC=^l%Y_>6@Xk{(dGN81L*Hh7lhQSmSPtngG?Wm57QA=%}#GfXyMR8Qzl; zPgd<8{ALKR3bt1?_FYDQcDNvnK+Nh4&?*5GXj={yA<k)srj~%qLcg4n*RL?1-%|VF z*mOvd>eJ?=SP_{cDeT1-8*P#xY)tz)Ob#n4Z!}-esmZrlPE~|!m`}X}bT^qTR^eyc z<99?@AAEW`RrQ$u;Ae5^hB8(^#jnJ^J>AunVeTRM*QA+rA4tc>X#`-0U715DBe@^# z8{^kO{YiE>ua|Y5WswUl01Jb>Oborl7SGgE(;++<Yb>qTyjjm#OYG{iqbEVSE%S)_ z=^hvMew%m)dLId2t-6)QlKcJ7*&cKTIvAu059so*%PQOuQii7Ft?zxmHA^QyAYI6M zK5VrDnhCrcKadfb%fZd{W8SlRl0vroCLY%S(58X2_&@Tm0qZ^>zwrPa*=H81BQF!b zmDDeiH2BfUM#!Yxr^eKxO@Sny9)`G$tk`&OUR`}>{BpXN!1u>ACrO5j?W{BK_AV~I zoloM{8r{<G&9GfppM{b`t=~by;Q0h(H$y4R*_@~np?E~>{Ujk*;wCq=$+W!{CHM&U z@knVyNQNYx10r6;M74xxmzO6mFVWGUe_De=l*SE22Kkx<`+u+m>J*Rt7o*5*AU#^5 zmXnIDDyGD*?~T2HY|l;jD^<h3G*ZjGqq$_hy(?|k$!&6iJ!Nx%=>SW%;`DcAQZx^j ztJyIf%fVl06WOQ;UTj8+s9ZwwS;(epO?`7cvI=@T`lG^T=U5U{?hnN10;mhcc!`6Q z5Q_(&W4P{th847A?rguU>@DVu2Xq9-eeEX#Ex@Ke7<ZP}3=UJaldP;JaRezfM(mme zLXg;Nwv_{*nOyp3&pkT?)kAF$-{i=Us~1sM+;$7$u~uAG??syRjw}m)y#AcWYLgg6 zm8I~IWHPavCxt~{UY9qB_h!BQ0Wv*plR}MBEKfDp(v#-bogYQ4D11z+*(|;pSTBr* z5g)bWTnF5>%kO=0XwelpcQ)V6JZiq|)h2_%bgJL9?fBx>l-=SC)hWDFrRhdz8=jt6 z2uHsM@;%CxF<o3NP%DENZ$^Dppuv_>d?D(LKKY4^2?Df;osLBYd2ofU1&LUT#>UW} zX;4qTq8YPj>5BV!=vpRFz{(43p*W_)d5uTW&dr&)+nw{`PQrDdirZvNB0OaYNV#KZ zzY<ue#3;M_V5+BQyRfH(@qDb`l4zpeMK{+R<ygW<5BRD|I863eXs)5s{PMxrmbp({ z-Zjc_z%b`(yMXlJut}$RlYN8??6nfZ>{^oXue+Trig^zc!g%^tZGv_aar+~k;4E`o z*FDlcd}Yr*>PAr_IsIZil(~^wkLqo;i&^moUvRN%k7c)?+LGC=Ak-RJm=lz|qokU- zXpS|2@ofFsMVfQLH(c@>eTdxQJ922W$AOGIb!X2*+w%3cV@5rUA=uKNv1XTiM-yNQ z+)a;cCt3sGE4$SRQ-(*Li+@mxQ}b4xG6~z$vRo$;ZiBL+Z#R1}v9;Kmv&U})-&v(G zQrD;Lr@J$xrh1H4@`wg8Xo?H?^KbgFW^r=ix#+T9FZ85dE*lOY;5yIjA0~IsK8ZPk zM&2J^V6b%Xby(tY1PNfOr)0dScbX#40s!D7H<LIL2^Q46m<y-vYBJCNW+FJB8h7hq zsq2k%Q#6_(+qT>kMdvP$ldCq!MUHlgu_bY&SB9=PNM&3RNpG*!?IGBm{$e}(7N`CY zmrx^+V$>+dO2!$F9d5HfgvP3<9Lrn(T3P0pb&tkLGdDSAVgT4VO9%MH3mL#V9#|m6 zd$qBUlvBQucYFBs6Pa@KKKo$U=4Vp11NuS2KM!Bj1bNSy+F6q>BA(*WJm^@&jr@vc zsHd}F!k6OGtt{5&s{4_sziaxppuZ>zB$eJY6SQt2<rc>3_{rqUR{aJ;E>)Fp*O^b- zj{^1lS36LQZh$s3zyRG}1@#Y~!^V@ICapf0xfVnN@z#T1n{JbauXYOwdtAh=HOa;n zZYa3+dpOLCp;<e?o@cJu^vEDhLG3kgEJaP^??dGtkI2^=L4?-)E?4Ow!SQi#rwo__ z6aQCOs2auXwBergJk0<aKq(_a$c_M32_!1~U_en-Y*5iHUPOlOV|zDD(f8)27ejrI znjm0vi;hyj4>_Eeey_1+qD?3;%q=r~yEd=D{OP^%D-!qAl9sl3a%y*K1u6~XVX2%G z*B0aA05U9uG~0I^#5!6OF>5qE^=Hpg$;iSqH|}r#TZPyC;yQvF({dEW;t0UA(UKHN zrRf8JW;gpQ6#XW0ILY8HjLrZftr)-$Mc20;*je57wwHd+CeMqsI{McSOJ)OxH(`f6 z_j0Sletju$CD~x-`QI%Z<#}9>4n8<rV4iM(@h`Q9l(o1LvK_1kyI_HgnRhOhzINp6 z=T9WFRE#XbdVo!&5;GV1*HJH&!Pb9;-T6Wn^PetI8qXQB(7%;)3CJhW7M??xs8DIE z#>U)hmg}HdTcJ09p2nO8JA$&G&XZ25eq@7vw_PerU#Y>O1$TE$Ng4m_O4F5N->k-H zDeAxoVA?-s1AuvqxoiG~)Dl?ntafRDx6)*NB7KIJXd0HEm&TcMVodMJbj?~VOz70O zasDWvUueO&n6Y-Uq~oxo%#0kk*z>p)FUL%yj_j@jQ6*BSEX?$M-p*dmxvoAC<&^U7 zCs?cjdxYKRZy3{uNn92)VvqZOyuaKp@?Gf^%;ah(7`IX4RJ?{oRL+HjaG1&~KU?&~ z)Os2$Id^_Q{?P(}*kA=fRaA=y36SM_K`b!#&U9BlKUm>BuUG<i^b_UG*=rG|$@f7? zXk)Yr`Pk2+7%uUP`nPTd>vqKc%k#6yoUl>~FpcpNXQ`pwAo4}v)nGUH-&gdV{neHL z=cU<Q78{rSjDsx07cq1$KLtMRods^Td|geGa<Q}gW09wm=6mg;P(kLOgG7+aF;y6& zh-sU^$3Ai~R~!EG(qzS;WhrN>@GCsFi_P*;`blrxQ6Y0?wN3A1bb}<%Hzb47T8jzs zRCj8zCSq9j`N+&7Pl9~evv8q|r-0OQKRs4X6SmlX1s>ZGi{~%*y4U=E2lr^wUB35v z(R_%=O;mIHY@x#cKbU(3m>^qOw%*q@tt}9sddLWQ!j%J?dv!12_SGs4*wrhliI~>6 zU~Wwa;Xc5YV}^@%q(AN=Fq&Ce$Mz<QEN}`m&}m0v3SBAcO{7;zguxL8_=s8kbk>#; z(iJHnBJmPenKbD;aH&-`X3rz`DZB~SOXY7QN`yFn+fY8Lml3t;7iHjAd|qLM4ubMi z**p?K2O?x&K<~m0@WL^!#F*1=Y-)PcOHz4(k9w6`j{OWiaGfnM^ZfbGNudont%emR zjROeoFSbzih~ls7X^>-;cwR?u_hk3qS$Cco6dD4Jh<$kbn$;MXcwUYwkx0Hv0V>zs z>F9siKuD63SC_w1edK`=OtugFs{X1d-FN9nV5^A=08U(pE`v{)6I(xy*OeDZoQB{2 zko$&-zfFaHztkSfj;~0i`(18#!t+A>p6jbOYA0iUrv`BC4Pn?9!vNVrg@QNIb%oEW zmDN^S+rC0i$}7V2>^GW1<!1npjh)lBTO{r?6NP@ygY0S&iP}H@id+;$#yf9-gtXZ< zp3qH}V>fihipMEkC!yBb9ON;;Mg?BnMHL|WH=I5jFN-=_cu-(;p~@*B@DC^hZC{4s z#NpQ41SUP+1<-!oxOI2rVy>!!>RN3#)J~ZMOYa(Hcoy2(K{5F{7wa=#@S&osPG1vs z<T$cqgP}+wd68=wR>;M-NRoFW5z`$cKi%RRz#VrWKH6>N;sP7@6zNCIaW4X5rdrOQ zo7$SAiYA<Wxtl=xaNyANfEVrDeO9r#on{@a-jV61s2N*Y;j0BNSw~~MIUw8wT#VgS zz&FKRQ>UWC)t|=ka)Kcb?SwD~;d^4=ZiM}TLNWE+98f=Y5i+H+?f7_6i~Dg#UoE?Q zL?y*9MDg<;4ZA@!RN@iWRl2E?W2}FlFnwVG<^r7AALOMPbi|2C@YeR>F)<F?^47+{ zTjo#N&K_sRq(I}Z%jcT{kyK8(BbzL`aLwU?Wq?h2mcGqjf7QJY@ehsFp?_fovY-3$ zKQw4R@BzD>GcmMFn|``Yfc(}~QI2T=C#cO_Q*C)?&*Qhe{qirbO<NR2>K~d*|ImyU z;&&-rU4RaM3a)uE&y^}UUK_}6G@;m6ZJDOy>XyWN0odu%wku&wfuvqhJnFrs4k3^! z(BUV4z~*ed<yEzK^lgUZxSs~OYMZ9WE)4{*jLPM}kp%(Bo!i>}>H(lg^)SO|f)@wx zJLC*sOa41<{%P0i+Ot;<k067Z0SSj|iV$vPbj3WyG?3jSvsX~4?@`3w)&PTMm1gpT zFC07P^hGyx(3(@;y8-|Qi=f|_2j{kq)EPSv(AAo~Q_Wkfwv@Dmls#O-F&xH2%tv46 zkywH^`Cwah+)wV@O0IHbqI<4OzvY5HANzz{TnrEGky%7tc2)7$nnrtydD;B>I<y(} zY4K-qiXiw2Nu|%T*rpmTr4#1&(5TO+a3Uf9_za3gsEJj>eT|aw87l!688ato*X2#x z+$hm)%1<eGVwMj8e=@F#nr0)pEy0_}>dp^;t7h)m9>qB&EYx~XS=s^eWGz6RykJi; zHg6|NMoL<HLGxYfo_2U&ob<BB>L>8sFu!w-wrwa#Y4RE5X&)4()V;-a{X_ru8qI*x z>M8*sr|S}DpO6&W0{bG%KX<(m3yzqhC)HCgNo4{3OBxwq8-Uf*spn9na+AvlS6~K> zN4zL@Y2$@vTumC3UU7K<qX%NOH){J4dgSn23b?kqfh3U5+UK(^pwAQcIV8nKg`$Y= z8u@!Ni6pWBKmIZi7=GxcSGO5nYVQ8sP)tINaIPV*Y775H+)cM^7&EHNdPUOXAK=xO z9!%@6*lEBCkwd$!WD9dU@Vm^~<uE_5<%NgkiPe2cBOCrF5VfTde)#4iQebb&BJQ$I zIbf{Hkvw#KUcT(~yPD`}Z8$Km<9h8+B+OA{0Tjj77k63iQ0wWB?{=GGJWBtExc`o3 z`+xtyVXd~R_Fg46HA{`QMvAvxO?BAgttgR_s!d2yd!#5@ik4b6QoD$~s%noAGf{gb zwSq{0ulM(y`<(m!{ePd&IsTTDyk5`id0p3I8N(G@N9phUv9kZA`7M-(mjc8|HEPlI zEeK83CF}?Z8Y~Dp3~kz4%dNbXdsFak?$h~_x4kRpW5Em+H~(v&T+-SvVy4!X+q!I_ zHg_~3Y~EPc@?Eg1?u{4PYGf&^$%A>tdy~jo_+BOVyr`8V$_p8rq0<xW`gEd>!AyB@ zw@$V!#MGsCqxh{sLRzmCQMNzq&gKFS2^=9-i|V#f?N)M}wX@R^`pl-RTOBS+Tu8D_ z=_3N>WeH0X=F_36MZ`6Va2_!SK<_)n&Xdjy&$E4+&!qZiexKBz>}$53)$afex8-Nc z9Ez{n*3ubmSe0t#(NNw|xJ*PexK?tf{ix@K4H?vqHK&(HDB(X8Xz^=lU!fy0JVti5 z5#i_89EASTbi4pl%rrV%*}oB|O3UY<4{dF1JeUBHjk|?-V!r2XhCbD?Cp;M=4!8l& z07jqLpM~P_PZ=wVON0-(mbu$#Td#ZM-XLA8i(ZYedRk7%HJX~Mb*jEOF97~rhIOQ& za$DK<`-Bv{ugDk3S(%V}V!j)I{Y1XDW{e?*rK`vMYa1%^xu@LYCf5aFq|9PIX125S z=0r@_xnr+`RPL{h9}OI{wzj(F1@Y>B7v5LR?bHTaeq6_4du&lx+qz*%UR`JM&LQ~E zs!jNvcW!YsKW?ub9-;GhR;-tjt%d;Z`YGF^|EaLEuN!pDkZ{he0co&<V*SS}CJT4k z79(6QT>(XchQ1HSXkV-+4#({wObK8fsaQ=NZ`KB$TU?3%<i7UOPOrfy(1Y==n|E_d z2^#W{hnWwoDt6>{5{=<r68++Ph}3CH*@!z@ll+;m6LP<G9HX_AqXyJzAU$fVG^dKG zR_3J(vYYU|a6Am$-ibd%GukB|bts*l=$&A{Ae2e=!wJ58g%bz+MVnLVEN-Fhw%T@I zIZ4!hMkaqw3%WQ>H+&o8z;zpHL-EF+AIfo>9abnizj6rKwhfqb*S*HTd*n(Wc6c5g zdmy0Y2ocBG-w2G`RW?AHOnm*earDw*IEbkb6X5e&B1i1PZ`x1KuYU}|zDH<~_96;L zd~?)(>wTU}a39m~G!eV{*17zZ5e*;!c8Du;xACefGKFek9PYOZj(&~o_#sTF^GI$k zvV{f9A7uvfRlr38C9b_R`PM=8i*X`2(rxm~Q_-#=MUbND3?B8XpUU-v?hwAU;XM#a zfO}HHKa?2qQ!5I53CT)s>$GqXnvhehyAUcDD<94HuZ^86N(e}3*;KI<Ac4D&bNNTN zXZ6Q3A5ZO7W(;-CWV<UXSIPBNM_tNV)fVtrWX<dwhk{sL$1sh)y)6;4Y{ysAInoZC z?O*Vd;PL8VpbQ3Nno&HJ?_JnF^uy>x-u<sxThf)_?uJ~}x=BAaLY&I<O!?<C!=rF> z4xLu}NR|$bhOqRdtm4E2n7wg1^)d_FoQE|5*KZ2#N;ZzyIejfVrP3x4*k>?GXa?5k z@M@jfT5Rx>2ydD`Ytc*Jgf`8BU6bZ`j$Y2s{7kdGA7Qkjm+mJf9QhdgmMm*ToIFNp zLftCe>jUndOe}ay?7V&3QkATgZ65<Ee3=n^+@--1Wf}aSjX4DdP~Gm7D~N<h@Ho2P z>rdD4`G{>osJ48cXcZ!RogQ8axV152EE*o38d>LCw_l&M1d2Xx6>c1HBU+%#Jp6rP z6%YT}XP^7o6(oK_@jIy8qH;=g0d~OvDAeAJqTYEpNaSf}VD(hg=T<NINwTZx-gS1p zLwDr?Y!aGWCZl{e+JIO1&(-o4P}g1Ngj<6J?oH40WGj0^OsxoVTJ#TZR|HGvW6lU0 z#Nb&dWV!Jdx3OFWZ6+??oNrBRmHCSQa!X)A;B0RzAiM8(E!nhj3lAIl7tT31%jWZ& zl+**kuQK}m#?~X`$Vh;Cc5xsS=#y8*=R%us(?eq>;?Qd!jNYZ3@2t(nA6%0iY84OU z-m{&^2UMvXbAfIa@r&ElbNMmG&*s0&UNkh2%1QwK$(wD>%S&e!xAd^(g_B+`(ABnP zkvC}|f;8xK3f-Bc>O06`o>UimnBDIu8;4d{P8hKG5G!}_H}MLc&5k>o2TL(0@$@(d zPXet_40jfgvr#ms`Vp7$$!GOf9zt}#{jleGe;LJ<sABe&T;+>ocYlk(!iw>d$x4&h zmHVV^*t}e&Q%g<6=1lk72MMCLcfYvsXT>k00h*Uk=dLZRjSGl#Wy7s|S;~aUpegcs zm(9GPp2e^ub!>p;O<d1qO!oWQ)Jve0JC(cf1gdaRI)3rOoU;3dWDe6{ZIY`S_x#$9 z()px${}7Wgu(bhVN;9v_nl)FS1%K2^?{?7d%nST@<y_X^p1s%XQP)FO@c`~Hw+!=p zXIqiEvJV=Ec}+h-b+O$-l8q6#MF?}8+}iKQlB45|gs)pvX(BvkyBzLUwxcjMMfR%u zFv0bnhWSbOy5X8t8?jEC7ic<r^278fGRIv2NqRwKieeam4|4k6z~YrUOn)L+FBB;l z6`*379(dN>s@h0$p$d}WMH{QDQ@kr}6N*D(v912Xg8ekPha(iRNxur)&IeTKj0H~z z-09}efCl>#n;X`*K}7yK;((pD2=Sxkm=04*A5K9eM}!xmD(U-7`->Z?@@xE`MQ#sA z2G0YH_Y{j$<9eP<+x#Yh)qTwBzKQg}IpuuO<Ig-@?}9XDiV(BZ6BAo!#%9Z2*+eka zKQb0r13_*P(a>><cMz=9dLv9_)MaGP>!UvWRcb<lMjQ)KF7mR~k;TR4rqwVheXZdx z6qk-$UTuHjyqr^ThLW1>z~L;*rQ*&(*=|5>c5paedp3ImeXCeH{h75h#}&p#@f+ZD z%Snv+5)|RHWKKLj6ScRnzpsCLd?)>Cov)L~3+W?t7(gk_NH5;frkfC+8W5CW%53m1 z5g%Y=mT*}*rjOr8UIyGeoCyPu{oqSX7M(N8*3VL@#`)}J%xVN@dv%I5BpP`j3+$W1 z13;8lwHQHSLzgx)NoJGE`;9*&`;Mn%l1r+Nuv=2cK-&1gIjrStaM1_nGMs8<nX6}r zM>hx4FH;%zyMpCPW@9Qj8V0pzYAH@oC(qP{r{%KjE{C@tUUtZjmu;uYYymLgP-FRK zMpn`e8U^fS<K!(7H6T%~lxpO4acAwrNLME`<q_#VH<%kPIU;AoF|*DZ$%+x|e-+eM z>{u9jVQElk_#SaEIlahqb;jmKveZ!ETp;DH#UvNrL58e+jJ*Y2>r=mrj8dp%`jvG{ zx?SS<ZL;m{;W~gi$+0cmNDkFbDI}xJMh>pNNVL5F?L1${Bkox2q>q>wpt_Ng-^ZWN zDD#@;h;#FQC>@X;0K02R?mG~7!wYTa2H{Sj6*$}`6a7h|GCPneZ}SUO1MlkiOQR65 zw&g$BLOjD4$7o(443ui#5$nWSh`7{cJlcK<ByH!;myJoI<;mG4n+{AQznDaM--H}T z<1+?;Bw!JF>s~XZ=N<F%ohyyQWa#4M{x`Mb6dmtZb8<I4vfl#(>CfFT4*fDao2@Wm z(&e~uxat7jKjVH_pompL{LQ~KJ8VLbspg**TIV^KY^kOQDeBe_PHNq<8kLFI+DJn6 zVyOxVkcme|<t|lc_dlmND^=g5y?r){wFDINd-#}h8clV8nr3JZ>N@jO816XrYz-Gl zGl}E#oIZZo+r%&16DCS|NE`|e)MRqS#~q&QaEYKyxx4y%7vCY;*HAiki{S`5l7bmj zRlqdC@d6Zlz*wJB`R*^xEcf$7(9hQ7az}nx71_D7si;9kQPcmX%BuKn`Q*uNdv_rr z;$A11RbZG!Ey~FoF46nh4J!SCl>Bn0<8}p}*wF6c5~!!UM*WyZk@=WQM~sdnz?mF2 zY#!tlI#z5aaNuUkpFi_-yG&1e)(9r@@2yuV5~8EZU^Zq+!_iU^f=H8Q+u2*-(?(ud zF$3zaO8p>CfDv2Fk~nUajsLReCm0Dmd-kr@tm$d!66zR+Aw%$coCAbV$KEhaBY8j5 zb@m}#FKv2#gT;JAsE<P#5R;tL%CR1Hhg4YKNO+REx-c~;PpD%yH>LBJsOmqP?g`+R zOe$KpFm)@ivbDmYjVhL}w!QtD$uqXa?@-DeuG-|#A&Y}I#bRKh%l=PTjXDki`3W=S zF5vNNk@ng2l|pVWNcty_yO;3>8LO}Fla&{ak^Q=f#NEw{@y%|gM7U*53Jw7R&p}_4 zi?3<gIqUW}5%xrESDRqq+5_wqWp2)+6K{qQ>Ft7F1$Ar598*;3Ubn4fGyt2aQoyfw z(#-MbEpe#$xg6rQs(YR32j_UYjG2oOLs!DiL(Vw?+eV7SDc~w8k0u*{@dDXr4BJ%r zQN4iIPGhfkGRAK(U;=35#Jc!-V&xA8+PDV1nzYk29PVezadV&W8T@&0li_&<*|cYY zn{+$3uj_7l`X8H5?E3JZ`MES3iQZ2ze0VLzt}rR=%BUBs%`jK3L66Iv+|2zUT{Kaa zKAd*TzL1OH$cCWjLA9#PKwHJL*2%$4Y?Vt55oY0Q*7a53HwhNV|8If@u+Qu3JcYke z(HI07d^B}s+Afc`s!H%@$uQmpSNL;Uz8N50LWoQpdW!WlseSRyPSPbDLnbOj*$p;S zl0*#pLCP7b%!Q<(;ohdug-Bpn*O@%jaya4%w{h3iyXutmM{thWEW|CQ7XQVa|9KWD zu%<44G2pmf*p8b1*{W$}rEoW)#0IySkzxmdi<|eaDgONRg%&%3O$9{F0mO5vkb5=k zu6CMQ3Gw+(<<Ht&I4Lr18f#b@D24C+=zBIGsBT!@oM2vk)6BhWl|F1#s9kAu8k7^9 z#AQQWSlFDd_ze@6-cq|dEZy;LdHOZ-+R0u|8^^(7Y^GU3pkccrp{&I4mIvFVWR|d? zbA3M~ohBcN_Fjv+wlql;`TVA5lX6BQ+g}=AdKZazEIL_7GE1$}W^N^R>kC|M#I>V? z;Es&P9ClYNBx0NtAdV;QcON4xKLuJGcQ3Gy)>TN#mPFM}Sa74RwP2jMMPISpmwDZm zWCw7Tt(U;390!V&ix6Td@LYEQRBWon6aV8=E%U$7?WI`JfBXf%IG=T$Sla3b875c! zH}Y`L2j;co{OTKEB|6tFPhSjI9rwIVH3*Bj6k>S+Kg>?CiGj3@t2okVrB5Cn4lZFZ zo~87;7H^4j*S*jlWJ|oYCf|~$hCyTA4v+U<1_8eJbJrfV3M<dYG?)TbMCJrfATeeq z)uSota2tEi4l!!LcTB@dO4-Xgh|8Td9d}9d(1Uuiy<&UG^~5cl40sIF>R?EFQRSY# zWn{T>FPDg2YsuG`sHbE4GZAWe8O^~mck+`7fFj3Q)KBK;vPk&m)pB{34sG5Mc-Fo? zk(%k`-(H%vFvIpO#O2yL>?0Y#9K^SJz(>~rLcyrKgBBi*(`(1M#rT%d=T9MKZH=4| zwm0~m(4J8zKLhZD&XVHEN(I2UmI3ypRlw^<SWPE!5U$%GW6TKCvl{_CJPbZp&BlVh zT@t%=z_^$LSU&;Bv=hw>qsmdIffhNT>+!n5(31YucQ^M9(ZA>#AU1m?Xtk*q2#%#a z0S_TXK*N&f`PJjH_JI624N3H$s<)Agty-`z-%(w;VB$xg8od&CEX@E{XKIv5s(Qgo z^KiP9<aDXmDidP}!NM8+U`0Z*=%aOQl5!2V#r&dh{Q7@N!OKKPebUFfLv_pbZOv1^ zCw84OIo{D%>)uqd)fPR^p@MAI`4dU<gKtu1jRpc#$CY(;&yNJ#w;Z<qhb#ttt{%i= zV)}5>fvvpc?4vxhn4MD9o}QYWx1t40EM%d@pBNl=sU>ISSH@8uC&g5&+j%Wn>)tKJ z3ECciFq1YvWC_i&=$OaqVKZ1a`6=e^o95q!EV-@k(PsIWMM7qG0-D|f=MeYFornLZ zr9^B%u-vRx4mKIraZD*o0kLV{kc;Z;e0BZM$sgR=ocAV71dA~&-f9q%9#76h!b=7G zs^y#eAvNtwZmp(iWNe6oJ)tdPL4bscKa_`ej}CjQ5X9f;YZ$J4RnQ2|S}Uhsq$spZ zsxmOZY^R#Wf68}1`=j%%Y1i@B)5ZU^T#oyAU<wOIQ&ndXVhNB0d~2i-N@EV1zj!WW zXkY%=yVtN}gKX)jAE=nns*JcjRcopd>S%J8TA=9^{eh_=m(=DvcaP>=R<Zpd!m4p9 zW2*~?XcZuKT!#W?r7#S#`Fqd+ImOZNsXY)5GwHik#z4-1nZD2BbM{J1ys1Nx?L@$d zwhr2SlLf%LolG&)YM5F4Ii^s_*e^-P=Js-HywCx3Mbotw*@Gu3p8o;vo?yVZ8IOvq zWw}m<Sxg{2%K}q}rU=gREvxrpRcn8U^ZCrbroeF0m4*a~=;jjre5t5Ci{2xxdq&4B zp!ad0G--`YG2zt9uIPA#<L4W|2`TGr^J*~PcXVezSuPF)F@qVW_TFgv;M;ir>FdI^ z)cuZaOl37Oi99cvWdyU?%Lm1DBi}Sxc0;&q9mx@<g*A0Ge?+;*FFjl77ym6ZT?wc1 z#k3>$XMrl%UI(05X<+T^L<CWeuwbG*;E%jZWg|Zu?w|^_j{43dPGy|FS+I7S`^h|B zmwY#VSGqFbAChNo9YN62xT>yIzR1Ywdy{(=-Fq4huA2TX=E=2SR3Gfgl;3R?M}{q% zsm!7~$@}KjDBu6`kT<n@f>$#`J-=?$HykO;)n}TE6Mx)Q27E+*On&|2cxf@vhsx1* zeIx5v)5FOxQ^&I%zN07AHyU0u#n0u2%8ntw9ps%}o<=SK?fG+ZLMOjPO#$RteMZKh zhyjP8SN6NI7{Rug%H;Tc#l$>Ll|@?Uu;<aZXN8ei>YOoDtaoEo8gcVcBSUjrA<#ia zN0MCuuwII4GzW;_n=0}V*5e3gl7{Y>reLW2YTgm7RF&iCxxSqYZ?YXN7Mv4&$h88x zE<Cz>2)=?NH{HwS$vSnchrj(|CLMbss;l9q(#i&G?V?+yw%FXoOvew3M|LE@ZoWnX z=lQ=m-Ucso<}n_gIkHo%Njpagw;RWtBYJ0t_1^#f@XrUCkfrOEWupMbuYt$3-Xv)T zR}2HD&&-`eKXjvi!W9+l6S%=<`HcxI;YX)$wEgo)8a+Jbk&)s&cr0MVF$QSEO^{c} zVWA2Hs;Az$g7w&{|GZe4??Nc7Dj#F|l-xql((C4L&0a!Y1l*RITnA=`eaGME$>iQ! zE_~QbP9d2rLcY%uzvFtVsumQ&*+|%nEj3*={eJj!Wdgnda87w-v{3$#-D7*8Rmyyh z%|XoV>~`R_af9$WSV*JS=Y}h*?z=fp=M;anhwK|95b5w?HD6{nZTt!k>NCCNi2X;6 zSAILC+@I8D45aI52$rmJ6I?0WwrP3WkWvJ_kT$H#i9+xno5=F?3JKQ{+hSHH_sF%; zMiv%Q0$eLk<ifIR$d*y$eF7w06H<B=p@=sH%tv5b)XF`xq#YMMK%F~5Pqz}krOh-$ zc^tj}i<HyT<nHEe3TwQCO~`9vDCrYA+<rPh-s+eNyIB<>o6x+Yy*v3UqhX4Jw>Uhu zL#AuO61ACkneq%_Tu|%Cj?wexKWSgk{&V!<LEj)%Asx8qt~vKQ9#|oOPeuSLIHAf0 zykcY>>Z(0CS_^L7gk_rh*3Wf5dh(k=XpGq^S9a7Lt%a4tyvkLXKx0(>iU7f#fIFL~ zD(9=zZ~N+8zISw$HTYeCz3g9_Zx?}me#oaqa**leGpnBY&r;N^z8^sKldfDdnv_$` zzPeYNJrFW`NBj5x1?uVBp*bho+!mS1Y4%g9d2E9v30qq;ZWnRCWiCmr@XBJj9RFYE zT&A`7>=v0{@b0FSmul>9tM_GEV>^$Ni+`h`#Gh9w>R&$nJL@TGKQMy741FpOfApUQ z^8CR`{Qqen-zw{hW`I9chHdp_xn{mDCV3UWk<LXuylDeXF#{jM+wBxWQkCqABea#! zv3{O+#~%}0tMY9(Kk$dHj6D~KOnfaMXoR+^^dUefX=qL$;9X`5V7}HlBUH0HoA%xu z6plwH1bK5Mg4~luI8huy&M~x~x9lB{gn*9ZUNZ}Y4nq8@M1KC0g==QZ-&@a9ocr-i zt@l5iM&g0*IZzPU!-`YcKEzW}SC@@cQti2NsCC88zv}d*U+QngBt@X48H+1}fm_8L z48W_($lpoBe`y5D7U?nmngQkH`YlNM+KBw_zsa432~Kz31VvKM==T4MLNWFQq5zP* z7<*9C)X>(`xQeOH#fR@aZ5<_;ogep|_P&@x0}4IB`NxrNd)H53OT*OEzj>DD{inAI z5}h)~2NkH-rmx!QG-VX8%rF(*1JB9zfJyUp>ztOaH^FoT$*cPhu~aeG-TT;vM{~T( zt!)3OYa6J83e|1S^D4bmG$v|DdvRXRQ?Ib;`}n<gd3Kv+v#9m;|H*UzSL=m+coM1g zb0Hb2mu8-6_HD}VNp<u0q$8!o9<h^ufgIe2*ZPQ{*S;(?6npMmf%**IN)<lwxBWL> zb=w(eO!a1#N%ZYpu9%)N5s#3+IOlL#Q+!L~9o?c!bc<v>X)z&Js+Jhg4QGViDA>%Z zIG(Qjl&W#HAy53>)`17`(4r$z)HjMeK+7o+0HUWnqpFP`4w{&$Et@6Fn{M~ReT4eo zT@?Y}J{$mbam_!qe=xGRu|F$6*i)K*jlN=9E-rV|=(Z~UCIawm;)$zk+}0NJ;C}ny znXHfaMZ?BU=hc&#`3*}D9^4)DG!>qZ72V6L@dEhV>*z=1pwBabu#R90RN>rt<=D_I zen`rGPIuMvT-JI?rE`bSl@W|UanF?$C$G#4Y6Af)(pk>)ADTX5A^+DiKGkxC&zdyb z^X-hAD}8H#y}j>2Uix;O(CR!zxj`7zd-5Iun?e|#$2G5bva?B~DVCiC0kt9Akc_RT z$N@6Jg9?>71Q=zO$}J$?RR8Y&&h~IB^4jj!FKuzMSa+Br$*ge<V_Qy!n??M(0^{SQ zFH{JQ@>{PP1S(4^$?}{FsF%P_W(G+<1QEYrp8loLNA|QGA30LB?AJQsERJNiuH#d$ z(opXbyUNchc`v@-NqspjGMhH&e_$Cy&RFZCvNVw%WaE+7S}U&91W2r86kb{i%~^TK zYxD+5&nGDB(_sUws;{-O*;-Ym2YmHt7P9_S1ySkOU`8@WYEMp4l*V>_;V};U<M3sr zdE5rEM@Hx?{)*v}kG<B@yMA$vJd#7xb8Z1y&+KOohi+Mv<i{^l<xIcmE!l1$3}HtV zH(Xvnc<oYhOLSLg`3^;9C==MS(`_~()SJALKFwP{$X?D8F#2#^Xer!oAz|5(zK_Jc z*y+F#`9S@Zp<HIQweHuH?dvyOm+FG;xqb%j+DnoSP|UEVS03D1D_ygk$fhXKpa#&{ zu|wD*upsOGz92kdN&QfP@B1_8x5%7#Z&Y<2-Vr7+j<0DL6Klvxgf#zBj_!XJG^fTg z)QkfP5Ri|-5)0<C>}r*0X|$K@Gl@T9xa#(&=NDS;>rklw8&J**3diWS=B=W@GSl&g z9mO+SX<t0{a=wbb`C|sU=%+e~(Lm4H{;1vnoIT!pfS&oSkMNn^5L#418|SwMjcZHW z1cJI9ZjQ?V?~J?w&dh6ddAO#2F4yUrI3I8;frikIVI#1k8;N0;NhazU(@@Wsua_Hv z5>MF)__Tpl;MANN{n24?#U!%5>~H{~Lj>NAc$IL^!a#uGtJipM*0sLF@<%WB@q}e+ zpfhj`Vl~x^bo1EJD&I0l=xO~*5<L8vmTrx!kf#&LCivL6k<`|mFlcF7(-Mt;fn&Mh z`oZz{rM*M#^xY>G>It<BV9xbh>!)w!U0;$uJVEk*iC;kqelH7FLlv!Oz@P=wHq*0; zMiu#1*gqH1{|Cu(byF<rNrO|-rNrI+2X!q1m~mg_ZKd|aw@*OFW!=7zD}fI75BR96 zo4I11J{ta8iB8p0qmqvvqRyaX%ds%f_(97p<A_<EhPsCFchAM^9*TABD)qQy<AE(b z#+Jb3V>tooh5%rRX^`T~_Ri|7IPS1VO2WW0>;H8so*sfD!esAyj)1r*<}dF*xTI_> zV!8bJd?&;*MkEmM&FK;DPQi62ZR=jJQB7F(6vXH+?Z6F^0cXY;vlo@YH+%t~CyYjS zy#tt>g#*1g1kQ$b%om$ELxtjyweq;z4@Q@<c{T^|Sf(H(f#uqImRCZkL`!`cJVa|f zftzT^Z7a|ceC@!-Isa#3^5>NBOF}waT!l%6xyw-4rOU0y>AZI5-WI?`un#aV)rB}C zdxf|m+&JqRJNciux%taV1=JmXHGHDlUz)K7RTkzzJxF!dE^zKgJa?Sz|Cq{uF^Mf` z6!*3UF<_wi<hr^Nj6CCw0%(mmYd@!h%@326SfRYA0AC<&sJN5LPR>Se@k3%&s*i(3 zqLutpIT0qg|6Vin=oxQw8;-G&YxDYEmrJ<a`odxUxya$hDfTmf=yGby6Ae--ZDteP zcbDcw=tPz2A2l9aHuLqh{FT|pQVZb$(%sxpfDkI6gq&!*$+0w~YmISu{v(2A*HaK^ zY*jp7LLF)S=vTh8njPKNuc6)Nt1eVK`)yfdqtOpz_|@#{ayfH^Q24*R6dQ+Q`7LAW zh8gEJS`|V951JFNKv&tEVuZ^$fRPBlAWl{-2z)-OngArZ;1;qAcm6ywmYDNb7vTyA z2G}nMhEW7pp*s)DlG#5V5m4~ho{-rep!wS&Doq@r@8^F~8xiR6eWv%a#F>40_1XiY z;Uay=)19494H*O@(SJhXE~VY%RXEfAefm)b)md&SK*-?%Trd(S8lm}H`F(~pulyK9 z^GFBE;9^kHE8u~|pb*B(^3T_FNrSzSg+1aAJ6?P{c}-na9-KgO@B`Oflq(5Ljc>tH zFQ7<h1F~(g!-mj>(S!3RRjmz4sn4Av23r~_!PuwzfxtHcqyZp$_pAw=3+txMN22kH znfynYQ3D?o#_D;ChQpNHfd(gL!f_zHIDRoqnbv5Fe{EJy*5n%|pkx86&45)Elz)oe zd9jj3(<R(gDkh3??!MdB2WDBv+EnIKxz6OPqhH1w_j)hXdXxUroGq|XvT{B<ARsXW z^*7~|5TDOI#b)x|@%4A+Wh*eRZw#NEP-N%a0aM<AimfK*lzjU@n}IXE$DwATrn)aB zukgJp{xgiXbEE*2IZlj+&oYFoD7?7AmPsH+Y(a-A*$lYIFlwqUUCFY)w%{Ce_eItw z;nAPlLt&A5I`%EV2*}3M8zxQ~rikUTU<o7gFAm6PuS!J49}Q#i*soe`zOdvGO+k{L zRkmf4w)C(76kFlaxBY2XCidhn&5!hT$BXQEO|Dm28HJLCWs-${f|N1IF)3>`VCA-4 zu#YyVRJWbLIMQ`%@ei1ec@`6EN0nMI&%3(kmam^{T>p&~KnJD~wihI)<S8Pb0{yoP zYrg*x%_4npdB$e^mnNg@Y$09mEC2x3&w-m5@cjVhmVT~{JVt)wFn+R$@pSFr7n@sY z6KU7hPJq^gs{`>AOL6*~BtT`YxUA}<)nVGwo_FKQou$NpH5_oMWs*OX&yWK;u))2> zUJ7#CMGYDM^agVD?X!4)q;f6E7mx=CvYV%<@Nzd|+Z%Yy`>8?i->pT)EARe&Bd2k& zT#7a$KmCtK_P|rEt83~?mtBK0T|?7DMX}I4@W-&cnERIHKy)&RZV4VmaYD~}puMKj zw7RrT>O+fGOd5XA9_=5N?~$K7(gb@fl7Y@|s`3~Q;GirB?S>{)*U0?}-zS4|V>|(U z50D)8Nq`K56TyW?@!LVCa6<*>ITimHSADN<vhp$renYoM>!40RMzyjLE843`=pHQx zS=iKm?qD{P`kCP#)fKj$cge~<3m)Y=>v-)%O5dn$G?!<gvN&h9In`&-YxJRwO^2I+ zL@kW}RxJ<)Z~eXoR4P8ck|dc_kgnI;9{u=-@aQG;+0GQ*_!NWBPw%zUyre0WjT!NU zb8R$X<M--9gW$DW)q_R2OC5Ezx7Ysg9-+0zTdyO`o2u%+rx5^4{Q>soUQgN=;=V(h z3fh7QothS4;ovAV2g^`9t@sc9@oar2KjHFmjT}tn+EaO|<@~5-^k5*z@KKKZcE#I% zIrJ!Jfa>Z319=g@$QM{Yt20{e_sHu~v_|9SCvo)(%R}4L^z{J#o}AWZ*Doe3a7B>} z0;?fo)jO8qlKsn2%RI`H2~D@ly$Mc43Utw{8JhLH6(sx*!?_LS&z2>5&9ida{f{wT zFEoU4yqo6s4BtIKA-C9J!%GHUxxK4YGkb7H^CGAH0{JWWy1lhF8WzCF1b2sIvY*H- zy+&fLgF0K3<4JATVT)`W1R)^Do#jDYQ&ffgeC3`kn~l=GM!?Xm#X@t`Qe_Px)0!$B z*!OVKQlqVAd$zy9asPm8E0-JaZNuAh3rgwMao4k^J`(QvX50_h0Z-*)c%D>~Q<nKK zI+ai%B{MqX>gMLUy6WgfALZE}KdgsKrD1s!fPh4z^|~>^78PfC3;G9|PYv;_6ToDk zLSBcyqoxDhZU!fj`o6v<=!h^Sa{YVX`{pYGLd#hr=sRN+{beg(MgGOWY=fFAPo?LX zrhkU;FJlwCUNVOAj90uet)w7b>44CvtBHSU#sPbj-|-$EK<B-NrD*Xas%TvqFbp-} z%CM!k>R+Ti_g*HV{Qzh?9EdCDokKjDILOh{G18P}w5>R#VRrFS8uA{3@b1_ja;<{- zFs}JzU3)oLme?kcI$?3F_O>%62Fm-s%`bAM=F~E!hj`X=T9jA3sjXQv@tf$0sSqX( z7S3uOjXJN0`@Ll`Tlg0pLJp&{rV8YdbuZ`5)a$K=zI~=i;~#drvK3H3sx{?A^<;d$ z6u_N%)j8t^kIbgQRZ)xyWTv<ylfUP@D`EPDtF&ju()YgfbJ9NT#KiK^b0W=VQv>z# zUz)=*?17-@fX?WSN{h^e%Sq+WZWmn2`KmSO2za9OEYeXFm$hI|n}9+Pr{LS7yCz!# zgmRYk-2m@T-GrqQ(UIB$v*d-LS$om}ReVa`mEm&EeD5=BosBtA5o`ls_x$e+3((5s zMfseZ%xFLRSJ<7q+#kvfy%DXBS!|4t@_+o)kZr=|4I+yWFUb9cv(q<Pi2*T7&^1Lq zHi(8VFF58m>^t#`5U7?s`*k+(ku0y1J)ia>S44id6bB+Z;^1W?MRpPpH3bl0Nj!bI zLNyp{g|GY-!h*GHE<t5hvxF4R^PVCi)4iJGO;Xo`2uyEO!Eg*v_GvTC21l>NoewTa z=IUO3BK;KE5Guza9l(ph0&@|Cw+p~bpX9QW<cs6-tV7kT+-j>@&O{-M5&vW!D;Zg_ z^;s*Cfhg9X`Qu283F2wxmJKN0WeoQxFiXQ&*fhcIX@rWzJAAkVM5Nh*xsep+cyU1@ zuUppa_O0uo1%}PmkOviBzl{nOvkm|pc*|c%d{o}gUere`YHTmwJ}Q85xq$Jg;;u`) zgBp-yr$cjUIWQKu*JZ=gVXxPIn&FG&u(mzVfEkAO<tTsq72dhu#y8yJ>&U4s<?a9; zm&fod*?v&9e{9j*V32X!{?R=5(^tQ%le1y#GO{`3xX)$;APk*f|4SLu<gZIQV!qZF z7~cRZ?RS>%)cXboFX(3`Q8+4QJWA9W>+g|_LLa74RrZ*+nvQ!MV_O9$^NHuH33yMY zqVF6F3PP(EX0I=--@>&l#3vOP%2?~T-g#uGm+10egs69`_{hO5gtKE=V3E}<KRd*) z_G9g+AzVdgrt^ngaMiAC^dtsMkoU2lz~~c^eZel=!D-ShiC^t{)<k7?_3GNiFJ$ci z-Lo+Ugumsg{YBMuHlY-*P}yfJ>9fyvVhPpfd~E)dQ-%icyu2|Pz6@s1W7u$nQ+p;4 z-8;Jaigc@gM4t7S(gHF}R74w~!W{qqs4xZpe^i)hKp7TbNmTi90E|c>-NY>(^_xMD z&Ah~{j(#Q@%dCA9Bcb!%%fb9zUm*B|ae{i1O02(~ol0K73orC={S!-uC3MolbrLE; z-j|8H?}_A+@yfi}#V=CNyudxVkz-Bs7PI=u*kI1gs~irtwwd*Br4(7GD+^mN?cVlg zT(*zeYRBaYF%w=+b#<{`snCz2(#Mij2>E3=b6_Q5m4$ip2=^wVT_v9*=hM_2kH!9= zChMTU;Dw7Wj0^@wKNvM!_^b2-_YyINp8{o<8MeZdW-qr4p*Z<NHyWV2ny-GkCUVg+ z>P6ZecWOyJAg#6$(6I}0-x{)dSCL|7_68Cz@mKp6yIyL9)y-2F&gdv&IKp}exXRMD z+4chHw2B*l44#>9=Gx#|72+cOVhcodA1&M@Ii$PE*MF9;tIvM*tlk~Z^nOw9)!Ey~ ztY$no?v%NZyWGzcd9M!UX%OOmE0jOz?Pmeds@Kv~WdVt&Q!UGH@@HVCUe4#ZFKmV- z|5zU-E+HmIp*%?VSULLIi?e@jsQp^=TA>3~*nT}tG}F%WV?>4-ec;*D;abJ1M<W98 zX52$svfWcQUmgNsDX!&R;e1bji<6d?&sS6p^~gK;tvpu!Pg~IQyfUK=b_VF!(foWe z4SV0>=H=jXt}X<$Iv4N}n#!*~LgGMf84H`XB7bQVmGqU3NK~03%+?cf-;%sxkHfXL zx+(63sZP^^yT+cP?`iM-xNspf^p*`jDA7|}f&v|>L@1;|^2z>FJC%xwuI9f#JiW*W z_$Fr^ZORUY$>|fAWGzN8_IOW?GYd~8xBBMsiJX1gfp4jKJ2w*fmr*++&eTtV>fM0) zkQ$0f$=fGeS`!})I5g&UFUXS20Pc_9+521#$+M9z&JYd&u^3-3x;mn9`=MY}TJnP% zfQ$Ugn>cbv``zd=@3O#e);N!2_W5i<-OZ~6Yw;J2C>aoO4mPBq%@>G6GONWE22y_o zGP}&OW(d1-m*0lmf@=m0lPxiTB+upn%DLFq?MF?7M&Pj@E}k<iqS9Pn<U-Tymr!@K zFnNX~y4)%63KL30_wcsVr=xc&MwhabgrTBL&3nobO38;G0A%|HzU`D7;RG;GlmKuD z*GxR?J6-^jKQ`D{WR_2pU(Mc6y_59k>gbxX$Rir5kI!2&0KY`>tpy$;>L?%%^H_4` z1!ek0XXUZmTZN@aEWJ5Gft*={(6_(8VR1JpZ<_I$P6+>JPkgNKMPw7qv@_#WTw9!E z>b@=tXw)S?v)=n;x^jhC3Hz$)<C*1SeJ653PZM2~Q!<2gb1FD^AWse={D^!YXl6I6 zS^>5j{XAJ)R<i56@ebotsr&6xM9}e-a@?F=5R9v*ylU`LiJ*8=r0fm8OKcPTx$!4} z#zY&ngo@4@j*-`#)(muOtWTZ)*GaCXU-p?Nx#Pr&Z4kPpO-n?FYt!6sI!u4#And96 zQ$d{JC=y{Q&DKPzoF=qJ*X(Qev*b~mpY8pn3AsK|`#&VqTZ)hjdr#rvnyTjoUu_41 z)_&HH*mPcietCg62#dxHK*$XQ4c<$^@D4{-Tiu{pMo)gKF8_KMM_~1_9m&4{>a!Gt zkl>$TKq<JZX?5`_HEVFUc-7Pa;%3t2NUJS>?&GOM9i<21nc5g^rbiyFwh(U9+e4k- zzOXXsa&4IpXQuL3Zi#D+&nW-OhWW+7@!*+1ge4uuRv{?;5)x)iq5M3A#84T>5p2-X znRWAW8_$)sS<!G~QMn#|wp8OgN^Ad7N%t2MsLUkAgoBa_iXx%3R`T9IDJ3#BYiC1k zHz~3|F?T+b1@OK^WM?PwOGd*VH4e+>cOGhg8cNzPvz*s}Y)%yoCtmn@sxiz<t}>MI zSt^;)UNI2re)@Bt0flm8@>~skPLe5)?Xe1t|Gk7dbF;Ep>p?}>oLFELRR;Alce5*m zphgrzNx8NhLULp$3w%jXNtN$|bMgZAe#YXU+;oSih{LkJPaE4KYfYw#giy;fQE!hO zK~nZl)|-5cw%-O{0-{K5sX%~?7pxhands?2nH94WINMWmQW(W3X`fW44in%}hh_mr zW4?k815cXUa`JC@-gM?KS2nUb3)=%F`A+~(lO4ncf#;*>%`V-I*u0QaNz02sOWK`; zKk!d$AoaK^qEtg!V}Z!hgn_FQKBdqPEw!gP1;2Etf3R+!VOb7sE(!-`x>MANk3sc+ zV(d=6ZB#6i$g^EdJc+H!T?K)?5VhV}<K$(?Hz-ae%OXQZc8M*O>xl)nQ&vm16X%#H z?`grnB-3aAo#qx^REJY4wJ#ptZf5L<VuCf)?=(ZQ9Vf)A;CuJRb{~PcJq~`#rV<<C z{Nw|=`6*Hl>KjIVn~SPV3tru?F?r3cp|&JFd|WmFbV+d_HjI-`DNKlVq&7Q`VS0#U zpzt9BHqthCrzZpwts0Ba!OyE()mhkvoCWTh+m<kYTB7=u0(qeHnvO*<98<+RwXXXU z%da5{xud+_%6(S5>F>nF-4@R3BBztmj7Jp5bw<A2Ma7DzKl2L@D6F))I0o9-15zwr zF7m%9ZX^4ZRJ7zB#muZUG-doi4*W8|pQ?$BFGb&-)K(%hn3F6c&^vxn4RzmA*N0MV zjf!YSlxglcI^Lg(j#(Cf#3A{80dur3<Lj-0b<MDZWxgjtl27kNf_GP2n&SVUl3Cr4 zgYzOi5%$6mhQUz9S@j=}B;WmmND&dN$#T3p8|c>M$Z;53%T~B?`gq+xHLs>g+?6`| zivEX|cRVCI_#7P<CPzLx)Bk9<q155*x%T<jtNZ!))3u1qvXkp*1u~i>03lK<-0(fb z$;G%s*mnxa`I6{;VXX%`2U=z6X@teN=e1|zZI>~+N54J)*r?w?6{p1?fFn-_dmHi4 zU4>fI_G7{A5x^sd?fu2PrhBxxu<w<YJwOafL&AzN!Z6>);b&Q$tE;RqXs`4N2DgO= zbt37ze54Yb#^sm4HwM(JtB>i`-x^c;aK(F2-GuBzH0`;el^2aQ$~|2EH-FYV<u?k2 z;rO+4fc6-BLG38Cw%%Pl3Vb9u-Rob%cP=x}wbaJd${C36ZWRtWB3&M;`Ba-d6nTWM zdaWT-&&M+Px`HM86x*f9=+UKHHzrDKi+vZ1W75CyA#Pi001#TXmf_04-TZ?wF}1J? zORK!?BkqA#sQ;}Og14eBQPbCu#1Swfa@`F?zToqhrgtlQf+|9xo!G@~nNzzP8^OWW zzQ)!lf>VEGb_a+Z!%_x24Tz>(I;yx{CRg3#>2fr1RiC<{e?99^Mz)`-wrE(ixxk8P zCaLx&6o=M*0%R?#_4@?Zv%fSq)|@~UzF=ZKf);=d{F4BzO4i1Kjg*l_m~Amvk$n%B zm$Ok(zxhK@@IwHrcKX<;Lr_JYAdWoz7(@KcA4+{IzXW>LnofXThtL21q5L)2?PX~> zRdVC4okVfM3qbse=<}#7$^O@e+S9oz`QKM>On#Cjkt$^w7p-^Whu8#vYW&G&UxyGk zkPUHcPm*(fOcJbHIWW84z(kEr$zUzf_tJj)*xoYUFBEKap7n0ir;mM(?CI%bq1i8n z!#@dGZQ<zH@sWB{YuGkC%int?PYW?D9}w195!_Gm`qnB)tgI@p4fEJIN}Uf1>OGIO z1trU-kql9AO)+985WbsvzoDV+YO8&s`jvb3tpuLglaH3FcnBZGuzFHOoph8?*j2Fg zSRMm;Zj^yD<kL?v2AdoO%chcZzDlC-Td>C3zKLc2s82BWWo08I;){yM)qzqPRH4TP zRdUpig(c_J?4$a-M!I{icG<*eD=EuR!H%Anx%A{Rw`FA9qYWXDvCF7u?a3;v@4kF@ znH<BLBXhuXZeksMgWOVr3v})kVk22JyGjhjxiqMa{YnYSb53=X{_+Jmt9%RBILNcC z__`e9O_;YqvPw-?;;XHAZSR}Dv!<m{3yEJO^OXz|a-4f}mAPwdp-qEx^e)wjJjquv zEkGqh+x-6%9go~Z0%$mPPXbU9gj#lYLEg{im@F{jCjf0HTNS9#6}Zs*V!eEA%Mym) z+%4y@)f3YT3B8ampA4Qtj9^EBxsCIG_UB-KcF%F6Nj(MwuJ9<mRheChvo{d2|7B7& z2i{9sO!rwNj_1<<rO9Jq1#oPBB<bgdHb3Ign6?P{>k$)sZ(u=fjb+g868#N1fceS_ z8Ccu`(#V1!-HyyQf%}99Y4{5NAmq0l-wjpunz)~#MUJY@0<qf#dA(>eA{gI266Dr- z^tH8AE*^Ok_`xDAAfNRJ5Jri)hTyQc($L%?Yg->V$fZZIaeLo>=m*Pl0iEjzRUDQJ zCaD%j9sclDWNztZk{B>-dXB8oWy$PoC@BMEUUYa{+qNARcGFOTr&+Z_sL7+B$R!ZL zEVw5sr#=rVSdoNLI~q+Y<&<XQ45qpJ<ggRqMNltCE$TH?kN7c}^jv5(mR}0$-6MD> zCQfpcAcP-B1}w1}o~zdUrQ!cU(g$$rIF&nNy~~}-_UySP&@o)l%5fr~Ovj=}?dqEY z@NHaVuuVgzRaKgyOGwDT`^tx3zzd8s?R_mTku#tRfE9dkIGA{sg{qKO2-vvRlNzEN zJKVZ<%Ccv4|I)bH_3m<PX9_f2b_SSwc9vD<c09cx?oDmRQQsU>({I_2vdr}5vwpJe z5Aok&9(@gYN>}W$Bsv~;lcFn9XS=S+RZz7m@FF`^i+<}gex0ID1gPYfn_CK3YgOG= z>Td5j$fDXS={9WJ7%4i)l7+wo-N{PAgrbV<mj-o`w7IuH(V-mOg+7rg`;{P2Pl!Bi zZ<z8JhNmJh?DWsdPSSx*R4ritv^-z;L;Q?c$;x7}hVBjfL$5kG>%1;A;)8-1!>L4w zMNHwed(+d_>@OXHE$LrRyt{K)nJ2^INhp3YOJC7n8pnE~L35GKx(y{7R<b+!rvA^} zsJGoeSr%wp{O*FI4&j#&s#V0jh_TL1>eXLJ_m-5;_jXdp-hS<-^cBJ>V1Q)@n5#e? zUif5d@H#2?zDi|{lq(+jm|}Zi`HKi7OT0iC+J<U_nA~wMai^W7946#x!lEGXD#vJ* z6%ccZl87jyJbe;#B)5W5vX%{RLeUq~>*8;I_eq^ep-hf#WQW6K5vF4pj^aU<qoj|) zOKiqW746O~{P)TOkLFJ-)l10*OJ1eESetjPTutA#Trx(13(KM+Fo3`ky-NwjFEWxZ zdfv5{u?;Cz6s>OfGsgZkTKOi;;eWXn@+9W{&e3(!236&zYV>E}aFGl(r0VJGixEB! zf+PWaKnIY=rUwr}Cpjp+oQ@t_c(uJY9UP{*1-|U3c*T+YG@p1$6!&w%tY)^FEA<YG z{mGgtU@Q=aFd<cj6Ze-TGSFpRA#&JY0h{l2v3IUXF}{f~4DI?;(uObA<oHXYEhGXg zp;Q1UCw(1sjbaU5c4V1{+4y~`tIarilE~Ys5!F7oEVT;8+oy98a=FNUcz{UefdeWk z#o6n$Zp$On|D~R0Ir|jvbN9)MrCWd2NTnD*qGLx!t5EBtuYlsVJmB}gyMwNH?x&>r z?>BL;K957twZ(z2fzE~#3Op~c{x64?M{{V|PO>JxX0=Nhw=jHs58?$X2{s}y0Ke9a z<Xz_v4(#i_1-)xtmt@iRK)}@nr?jemo$9yV%1G7%++38+ilJ=7fp4nk9l}l@h82gC zuO09YkQ7i*0uy(r#>3UIM@hoVj9gv+u2s$2{Z?~ib{);LiXZPZE0ok*D7T=Ry!DPC z_dExXK?(>cbi*{r#aS?^<Nydo+b6H-2(f41%Y4Y-owptH8n4+Ja1z=gJMNKD_0`IK ziXAXZsz0*uUPc_VUmbBP0`h2BVr`J&hZ;HDXMO5fw`-#$&%}e1x}lsso$OuS0^c~p z{05LN2w?G<n|lfP_1D4Vru9~?4!l69X}33-cSZoDOnaj$T|6=<@qDax9yYR$zD^DY z5Hen<wnhu__zgnMuQ6+kKL71+eGjYe&whtq*p$7FkR~-GLq3r7df<X-*K=e|Pn;<b z$Os^QAYU17594i|0KA^<-QmUU`|sTvgI?@jtMrz+qlLtLN9z)kt6N2h^(p1$23!;J zqD^dh_=WJQ)2X^Zq2eVJ1Hyq65bKg>IC&5<FM}_CK2fnN2GQ0(eBjfEuqcj3x<Rh2 zHxL~b%t}4R?!Af&m8sREUgWf_k)@+4y$pC(=U6X@js1(ofJ>n~t{Dr|1yks?!)u#Q zQckdmZCxOtz)Y)AdCgGtMnEh7n56Zje1U7mHX3r14TYU*UgX~hKB^<YnR|GFEvuGm ziGGO6n4Nmwtxpo>kDt>Gq6n3n@yo5U<a{_C8FKb)p>Jo8Yl8mBl`n|ah=-nv)wE3P zCzkarvU({Zj0sPwN0TN}hO#d1SyieDHAp-NNLfq+qF;!TZTZF(Gvrr`I(LQYoSZeZ z5`;mnv6{kB|Ee|Jk<nvrmIa=}4HBdWphZlRn<1lKs!1x->bPeUl$B>rF0{{bH9p4w z6cQmbHVD0Rq>J-8Zf(z_==*^gFmU*?AiM|qWq_+Urg#|6l{jixXHqNNgesst!G1P( zfGwj~$g~8W*x7qnb1%Ow-pSaQV6$sC=d@ocMPm8T{1XR?;klPcu#MAqHuVL59>}nA zo4|j;J3D=c=u(yJG7Ug<x^+MG#*61s;t@vFEdzrms29&FMjh43;AO=~#073NeywiG z-m}iOI$GeVE6!Ex7-iFjrjF&ZejioLuN^ytt_5Bfx6Fw9-Pkve%qt9~{U3HD`dmZg zJ*yGQoqVJhIX&G|W#$s8e*RZA>qAe$=@?)yd;^ZUi`jhsjqF57$Y#be2)ss05AUOO z$na&r8>39Sv}ktF^Q#Sd#;amC&4tMLTbAX1{LXr%7{T&&U&2`L9%Rz1);<8D@Zylc z5fdKGXBF_c=OsOHkFfm<&`f5f%m$<iAQwO*$h(J%G-Tc3jxdm!axZk({tGabRSNiK zvNtRQXcsk^05}gIuja=ET3SyYf&~IYOxo(2CVKmtnhg>kG@kwVav))-nuG^M0!uno zz>Dkn?FKjQt1-9!eo$3*a?j6<Jqy3Q2r5n8xXbtIF}Z{0Sd$-_(Z)(_jLbnEhc>cN zb!2<|;H?haVvLIE^Q!8}$k0!FP-ZLVq~7l^Bt7L?Gqzw<-qY7M$$YN2o@i&XZRLMr z%QXoFLP;nB_(kq@bt>o^@O)*h3*U?W=&2OD*)Jf?2+@-UM+KX`YGcDVv@#G+Jq+(- zCWVa0=H)A{xIBNcd}5geA$6KY$E^Sn)-(K)3sDu?%gY;&k)7n`zcl%90sz<m)7_TE zUYBERL#rw&YNs5>UHTa}YZZ5ihxEeDM^c?x>o!_{>>x?qIBDEue0$q`XwBB$Lbz`t zidNMhgCb-^F7Lqmg6*hufC_2)VBnT;V@ra+OZo?Ex*v<3Uy=L(rQ}V(^4d9bE^r;R zdjo8Q!+DD6c-{G}F6;=o$!K*7WS(pMJnm&`WTJ8+GnjdD&Qbt4!ap5jgH?ypk*+*Z zVsTN2&FDS*liu5>0lXcRiVmYx#mzAB$ra*Wf}C%Kh=Q7p?Yy<Y_Cx74Nzvf5Nig{z zs)jSwL^2`oj1D;Jy|UwBd^++CUGQtR^9G~C+-cD3vFA_UNM8jf`PN!SI8Z!7Wk&Of zj^T$)hFy1|0A&$}R8i}AvU5VOm*P-C0up~7jAIm4aC28e@2oXM{0ppuCI4X|bJGzk zGveDxnNccvyzXPrrup*6on(;@IxfO%GDd_NB;GQRgBryIToW|TK*^aJ(Uib1vY3iD zamN%v$9||a<7UNQbd9`~^@`s|C0O$CE0p5loQ8$-9vQ*<-HRR(V_;<$<7d+1Pxoq* z!+;P6Ca+cr%D<U?cazftT=D0U*lnDRqhVE+ZqQqnZtAmU(1lI^;Nu=JkB5y4{5-c_ z&0_4qGwB8n*&$=T>v$_hY>~MgU3Z?KJD6qn6Q;SQu@$Sz+s%Dc@4c7hl9+~ay*#{T zCqoIHlsCkw4o8PcjUSMXD;d4oSsXubhShB?Ft?2!Cb4Tdb|s>mN^aSm#9v)lixwA( z5z8y|1Sl22I~9c^kuL8x0KjmjHmGp|G>EBl-51Wd?;NJVaZp|cf3u*9{bHpp68I<N z9E4Kq?7y%35*#&rJ<M;1Wbn4Ts`s<ly^AGFH2*E=x#E`1+#n;GN}(k%r9t@!nLfFf zeXAOAyat?#h|G)MgAgKkCNaGDspE`SEu49NnDO}Gd<^u}bJU7=YM1|{&`cSUSkMYs zVvbb60Bx}=AU^qO55i}@!N?N^WuFkwlj{E;;@&hI>c0>BS1FY(>)0ivvPG7%%v7=^ z+4n8kO$cEyObFRSC_;8(jBSj4-%|Fq!7xMiWd<=Z=68R8*YW>9xUa|eaa_kS&mCqy z-_Q5GoagJz@GqBhV)^vBTkN^^#&j!F6~zhfA=anF-UM#<^ptRN@(CN{AN09=qcN8s zCf0fE&m)m@$LfBIYTld*i<+-cq9}u~iD(UYJxMUZ*Or~g+?m9Q`~maQp76U^|Dxto zVb)cv64Rr~3H<RpIl(K7fVtQD5o6(jh6p+`?y{rt3Sa7XTAuB#pHv~ZF_?vPYix%i ziG&)`8#e~Zk&oXo4AVf40bDUyaWI4Rc{@Xk<;{;YyOIxHv`4#VP(i(mXKaXn#mR~Q zOsm-|+U&<Nisn%%Ec&^&`oh$hLO@k{;L{AlZ^F0vO^lhlnw4E|pfQQ`u<=_j^<#K$ znV4Llp;0<#WEL@m&y5QJ-ysQ9<B?u!<49=~Hz#j7d|<5Ssm9u|*tgROc?cr~ma5yV ztzw7&Uf`PjRP&YMec`WXy}@Qt`6<jyZu&nXMH9zG{8WwK(L`9vubx;7Kql(+cyv*A zmW$TOa+%lb;z7@Z*=ara*1YH-NFRV&o7npZ!Xl@S*cJr-39fu;MmQkFq>HXpF(EWF zI%vlkyc_cHa89m&@b^0lQ`+tuGer`;<rw7wzRWM_+7l;qZOQ|O1T){d&gk@Oh+uyi zYr8P87&KIr6wjl9Tmk@7%ySD?I^G`M!9vW}<4c9@ADxkK&Dv<j`xN!MiQgCqw!BDJ z1;igODe>|NFz`ti2J$}#$*COzyri4e4rNd!lkEAUy#BoxnygV=-7CJa5mb(VFvz<8 zD1vwiLadB?GIqGYG+?oQ5>gadD)QH~szN(;k=|?_#Yz&3-v#r)`g_N1VZp|e8nqH; z{vgf|dx;w6!f}JXl>4{;@}w^9eg?e_<-?Jq`_@O@n|iw!7P)UoiVcUF4~FF$B?WDV zUU^J}OOA5vU}shI?mS+;Bp1m2A@pijbF6q@izX>pm)KVBiyxtbIhc?*7E&=-;fb;M z*Ud7{7vDO3NyV1CE%M0icrL+$`$Ji#Rg?w3F=hfqvIhKfKtd7sd&7IFSYVR+Kh!#i z54Fk9Te=a+MyAvH+W8yUNnaei`JMaAG*%6P*lqN9_wvYPU7AcFO<R|RDvjw)I=kA) zOt;0O8Pg^U<td30(P>r=xv6aRW8guo#n0wsH3W+>U2f1HrCY^160eIlYz%^&5-);* zuZyBv1gj;0;sGA;Qvf*>RmaGqwWD2av^M{2v?5;Tk|E6jO=Zc_gtcPV&Rx4jJ-^pc zs}H0~e1>~nk^@*n(;Sv?&3**CD6qhk-xUUo?;OE`nN%b5crkIFD*tOHei5hu6{2(j z6d4cJ(lu5)yx*WsQ(@`Lw%Ke?64D1pOT_dwz;D|#eI{hH>D4A!7-9*Npm;jSVP7RI zq8q{^s5@6dF3_B;!%Juo#>XeGI6b;Pz!gm)v_<4Mw8xM53U)2BsTMp<l$i5XJDyfa zx|>A4w7Dca+H$U70d_&3s1jrtHEpWU9Ay&7a}VmH<v$$Eghnkhv$>s=^a;|q@$he( z1sq{OMhkHPOhWHF2Gv+59&Fe)S}!J|7nxyRPcc(17O(54O^<ImeC*q+H@s|njcv;s zL6Kwb7ChnZr_ul>K2j3||1}hNp^pv&M8`D%xHcUf9(o<-&@UjH4VO`}L)Yhi_Utk2 zGv)@b@@r1Fvi^I%#JkY^E`+4`78ioD^aXb%jkqFLjK<IJ0bI$&uVu9c<yFYg<&iUH zFdtAUr~~aR$0meXa(5?G5O8K1Y74hTKdVo~i=J*>k5RjHJPge%ej2Xz>&o@J!bw4Y zy#OV`HM)pUkPTdgWE)-jYt#QIe{g#Depr2@`l~A(F-ONp6dPPykXr~tj1D_Y&_+t_ z+ABrn`CfYx&Yo<2D3<%tY^?78xwOr|7C{Q`H^VX1j=vZ^Ecmt+gdX{Yl>Fgg`0%^P z4De#QqS>Exa;*hG4u+Kh^xUl?vROH7!iXgH-l)IHqxiEgV^Nls6?Twcp>{s}FT;Fx zTWe&H2gh%v)y4vt!?Jf9Nwv52W59`==@AG+BjNsCE=ub-=iQ!>O~Oo4ixAY)Ik%UG zrw0<ZGbXq)HB4a)hN2kVo1(JLMLcbv+O2%WUi`DeoaW*76(idub@mYji1Hw=&7ONM z$6GJI3>xsGXnp1+BF_(vN%1Ktr!|~C6JMMA7ek7*p?gZ2ZeC7MgCF~|CEVz#GyTCg z!*X+2Fh}GN$mcAtv|i`&j0|v*NyxRV#U#^F(23d#vY}6MyPDkxNVbt)1UqJ&o1%|4 zyV+H`&n(@5meJH`^YWz@MS|eFHmO`jyC>AU6Mqu!vfoswHZOV2hwz7#1kC^irPuPz z8PmU!*d336>h8`=q?}+(dOM38FNz;(8Hz0F=NQbZiGC3?==VyaHOQ>a0ML3S&ZxDK z`onirTuG>CN06rDe&B0uzxO>a)ea?NtCwhrGf{BwW!JibqKzi~sLuYh8=3<CI;qnc zc+P4s0)!9#Wa<!eQ0M05;ZXl6<d=Z*>l9gP+Gbh@aG^+twJ;O3^GTe=nW0Eu+E>fl z6I!-+t;KG=Lj={d|JS2326Pb@i2c+kpcsA&f>1o0P*IjcN$=sp0?5Li>RB6{ZHuxG zZQN0r=I4k3>F^!|+QtN!EOR6+^V_#T@RBa(TJWQZ?cYr-hd2XzheH(C=nnV+Ia(V% zwL>w&pMh~l@;Tyxl8+oUxVg{1uhC6TM@C1tNdtKq_h1D*na*W}y$CkzM=qWmNB_{k zl39u3bN{wgf1-+j?IyI9bz<lE#N@24fdA8dMFA_vug4G0#0TUNNmOpI>ZqUcg0gkB zhr;*~b`=YCVig~JaffCR$QDXkvvKLRu`?pakyI%zXQ_V0F#mqtV0z&<4Z+cY9G|J5 zY;jXN#%A)%d%UhWv}1im1m5&m5JE~$eSRO4pZF)0*i5kfOycmnS7g4afOsJjb8*`} z5)*a(?G@@qWr^;z#2@h;!|`809alVjy}|IVNvuQ!@eZM`6vamZ{9D}G%SgR$2opsb zTCP(h;(SEd^^)W$)E&HJp{W--rS|`kZDGOxKiRgBa<^sDPw?CZC}>I8C|yC3<|t(Q zG7y$Z0?rs%oH(5Db>5YyxZJ*IYdT;?JcMz6i~h&$&q<#Y1;5<wmlx|x;wEeA69rKD z{bd{2`jXOz9@`ZjH!Xe#M-y&vJcqq9E5}yEcwGHC_xth%Oj-ZU|EXc1s>K88ssxIb zs-#$`)>*1C-!XWd^RjJkX)dA}{7L>meQIxeL3J_5!!rsIF4t^KskQAU2KV9Ur+0VX z2u4qrU&?m!I*Ok29Ao@RUe^SpH~%$h<XgFcW!KZOZAf1yC(aDfp%!}B5y|@bO}kd~ zTevha^Pp#JJM;m?e5Pn}*HcPG=<5wDD^1#lM7Jc|3(Zk#+6IK~Rbo`zP2xi9<Z+O5 zLK%JV?VBMxd>*uhT(#6r9|+H(rT7n(z$FNK`}<uLb>ec5w=1@YAQAwCitS+<Z{4j7 zHN|%Dg<$b-P*HXu;5ZSF$_TA@x*v&B#+;jrk{$hBxcB@0Rks!>w+m+11$ZY8vqe@1 zhgle09t_xC5u15{bpQADB;3c-0~RFqm6Tg|xd4Qh&&z^6bnYZ8NMtUZN^qdW2`$yS z|FdL8<ui4?Gav8dzh))m3wTr{<+7+3(+1U~r-0S^>8iGQkf&;SO+^yRIwx2tc9`+G zNG1;Z+Y|ozno^^F$0a(<kU91!Zpn^$BV|)*Ist#Ge80NQ?bS;f7wQFD06su3y`*<s zCrx4b4%}@}Up(r4%N2qkA5MEowEm~1D~Qp<)g$#Y?BdhgVz^dQ00s6QCq(+$CaK3r zQL3A;guNO++TW#6lA{BRAFAr5>w2GP6p<!OQvOOx!Ead({zf_t=C&2&u8NO=ui9*$ zL`OI_llbRBN)?zHL05AhPC7H}%g%M<GD7nv@EowhP=sWXZLQPN9=+>HVyeAThgjnm zjqSc$D=OTYl*7YH7o8^ZuVVKT^jXQ<LzbJxq#yScV-hyQd?1J&O9U|$9t2Pi*}B`w zT<w(5Rvr9M@6=-V9)tBJs|qI7&A;aPe#mNazG2VlO6EHBLSN49T4G}ASwSgwlMNfy zou%w66ORadyRN#`2Nyoo1fscR9GGK0Q6*FFV2w^SgXtqP>_CvlY2H?*qmt&^_PXCQ zyPjWljIC_mQvc{M=jm%M+dVe0R_x2Vy+`GD7x!{G%R376*e$9N+&^G95=jyye1i_7 z_2NU%Pr^->%1>?VJ$7D+G~FvqAHV%pj^XV!(9DE<ULLt`f?(H|eRZvCL+(U6+QSn| zAorOFXs794A31GAdFHpYFGm$geW0>T%Iz>6SWbDM)kIrcD+AK@zi5vN;^l{dUDE~$ zamE5zKoBc>)O$91UG2PEws&XH<Uj4qIC7xG&JGW+az{Y+&V85P#!G)+yxFl$1t3a& z5Ecq};?1nw-uodhIYm0S=?MKG1#t~4+iok~v+c+Ht8IAwdAgaDrh29_<`J3A?g{)J z$uw)3nK4^a?VWnDrb_zs(#;M7rgL+18#Xq;@{ONl`x&2bp<m$UwESnW$)!ouvO)%^ zsHHXaeiZxroJ%qj(+%xc;dkn%LwT(Mk$uledY)jM)Ynv#s58%J2$!ymc<NiK{Gr{u zJ?F_5@d7(*lIqmQd*7)C*Tw$Gmm7>Q1l-kT7!bJ4UT}N;(NZjt5rKE<36{LS9?DAc zNE?YVH7~@}O@WT<sn&5fZh7;va(oDSvtii;>dxhM4+Tih?Xfwx>e`}pvpppxBxW2R zzYf)a+=-`h>`eZ<WVH<-`I-_x-Y!|s0oNz$3L0tW4yRdH=y5;uDG<-Sx91&i#$OmZ zvPh41oj!e<NuUlTKEh1WCIjJkeXVibO-!HhtvC4ZJ*kZy9%R|?<?5eIoy_&M^c%s! z)YK>CPmyNE6FbstIXLmxQeU+nOE|0TuXyL)rJ4+q2T$={;e}DsY!<MfK5a7}p$U^; z(Up^rp`U=+M;cM=6bqtWUIEHi`9+FQ(>SVy-pddFo4#-;FhsP9zV4NxufU~CbYBlE z2V;ptUcG`G^36M*$DQd|4pemAR#u#G%3-PqRY$h@Ot!enj~}}Hf@rjb0pYlko~Ddi zH-8h9z5m&_o$K%c>g%CarX)|-?VA=0lFO!POn9NI;1|IW(^&-ZnF$q088Cnwx5WNX zDt{xYUq!c%V$14*@X6cA5VAT#`BKI=St}C!3w&h%p_xIb8MrEy^s9oNR82@ynDf3f zX1DmS@8j|S{4fI*7>Cupf~%AK5!YO=k;}V-oKp*bAXxQOvpZb+kF{7ams-1k80h## z4nRRInf6)tDb^wI)t-;Uv6_Uy%g@Qyq-JNR{692qkZ38N{Y?f<WHMwLNv0=!w7V91 zO9ISw>Prrt)A4=d68AFZXIyQ&wR3B1?0#+>HlZX6h)omZfYuvYuczzydPsZ+eLi|1 zx*z*g^Q=}_wfxIis4V&FkA4BksS?upkl0;b(Xhz6o<{W#cQ3d!05+ts%y``GX%)9+ zA*g(PR>eX`y3Vam*izh&MRMk!Z$L}32-*x~C07&rM^)&{x3>KFGZ*xndEEz-S?Mk# z!umsjZ8q5kEDa1yA%rAK%)fW?1ej+FlyjX3PAhl!{%e-u{aGYF{+06kIr7UUcX6N{ ziUr(vqGekLbL9RXO;gB`G>Pdk-NvUtu@5_;Iybg5_X}QtU&~O+cvm6d@$%LJ@@LiX zwjCeMxQjF5>PgDK&C>tsBmM*7%F8Ibr$(F_ZU)K(r^Hq_)vkHL6s`Ti4l0A*k~@}s zfVYg7LgW1|)UQV$mWN)Oq3|NfT?n$eSanl#Vn<-Dh3vLDWtcr|QDr7jJ<ug-l?cRs zX_mmCJ;`nvN6zEWsV2ovl?<~4|MP{{%poZEdE!|~7+e`YGxmo5O!4`|Jga(r0eT-M zx$3o$3!e_?w5YpTM^ev?%2TgJPZw!?_Ox8yVKBV6`kAX*<Sf{%&@34?+)c<qE%O_| zxd~8yLCt!W8|r@Ui8is9US3H^GP1BE#!~!&UokQdn3d5YC@+)9>Y>VrvB#r;3HLmN zDr1{K%%48_f!|H=Do^pdyzKNPIlk>^$S-Z_C`Xn&Q`RB<26Y+cV*`FxC#wzabNnMb z^6f-05v;hCshd+$3{&gAXTH#PGfJ<{!6zr%rNENp(g%e}W>^uaVTH5SHjg|+w-q6B zV8?H7lNN)i=);SEe!UtqS>asU`d-IFb~_npWhnr0@;XI}C>G<#R<e#`X(Z(|a(Af~ zH9r|k1|l8b;@aOLbKfaJdc{L@rQn*u9O-YZgmqiKEX;p%cq_8=7q}lknti5t$LR$_ zu6{>ZX0@{Ndn&fZ4a!z_Gjv*fypYCVS_QWe3{w#Y_Enoo^{M%m<Y1!-m#~`(EPrpj zASrR43$FA&ECFI}-Y{wc<J|WiEllYiUllUE<n}Ee3McJ6-7fH?+2Um$Y|V*XK~e6N z3BCt(?K)F0Fi|=p)h)G|liydrDL2(r`C&T-f_auzj7s1-#Kl;2@LqI%Ca~6V-<SNE ze!PQ5u3awefp2|ye03v~iR@rX?2oK;An_4Lkig`nbU{vRg;gu?!hYp$OLtFD$aE_y zUGg@%)wx?Y`Z36vA58kne7nKvhsRcL&?~oU4xi_jWS{FQm2L1u)}so4xtmI_TG~F$ zxYo!upP2V?dENatM|P2GkY}1bM_R%cnK||5m#^r!MRF%IoB6Kw`0^R#{V_RTm|sPK z5|j~F$ewFvjhKc;E!+D&oSQt_0@|GNCj8%BIMxvCB}BXE7O5Ojl62Uczki?@b9_xh zU1UkRGnLbi0m7GAOKk2_)Gh1ABYiu7vlTt0qUY<xX9fQpzJsIDSEyRZ{1YS|1Awy2 zlNc;Ey0ylJYf+2OUrg*6NB*r(*)~7aFUUnYP^3uGiGIv%n^?^re&weVyDw^^02uM} zy=2^zmA?r%rA@hPf8`N=a)f%Y>vBU?__RqDxj6CRTJEuh-kOa($8yd+0nTyo1B)%N zRLg{LxD7+^Rb1MQ2Zr8JG$-ZBWF7!P^zIn%az>{D+-@Q2RE}oimj0-`suXprtIc8} zhx)3;e19c1;pZnRn~jNDV1SpC=LAlV{Tj+b^z}Cgo9+E3fTt`7wFJ;iyo^GA^tz9& zAa^&pK<9<SgwDNvK!JJ@TGt{_@C#)j&H6PBnA*A&tyf>CcxbcJm<DE_EWZ}xGYiHy zmwL4*7cBq*_H!dp_Uit#UPoHy4xZKr_6(6=qERf-M(h!Jr_9Yipq-e#!MW%fbMx+x zl0E^I_#H?CFy8;K$GRK`gA#yp_F0=4$v@-U`q*Z@q&L*d`TchOrtp{dVaq7nsXdcn z%Hyd&jP#u+i3Ry{YJO!;SUm7q%KX2k9^Mx|#i3V}W`GCVby^TQ*&>X8|KdRSonmgY zwD7m<9l6bS%NL2slz*#Q@oos29YQ{{A=<sCirB$5#}7yNHvn3PyN9QgsqzC1Z$h(~ z;1(BuQ76hNzj2StJqQ%F4VWiHNbF@^j2}HNXQySk518Fy_xo-_DPPNW=(!8SQnlNF zO|nt6p$fvYQ)uFY;89BrryiLba2SVjY)}=d#`wY4H`D)3gZ|Cy*!d_?t%^qG<myf- z>ShR}dq$A=&wz?vk<|ij;g?0W{GKFyWtKK<>I&`cfy!XbsWu+6|7lN?VtmD+vg+dr z<3>N7@{6KhlYb_2C<pRdo4K5-x-*u+#l}|me+g-1a?vwz#)$f<{XGXvhrFq5L?ksb zpt9S$Y!2tz6uHnlZ`$s3TjY|9#P{|<hL&7B$8VmbsJ6SB_|I@=7lCNsJTBdE_Zsl8 zwjUU0?f}1jbZ~$4;of!vo$kbws7Edy9Bl^_D|RWw)0U3A*AvBmf|)il%#JW%p-FVB z`)0tT*GnBYFB{|-D?w}W@(F@5DAH&W&Fi7Oy$DUUZ_M@}EI;sHzw?_z(`<Z4KG?W^ zQph6DBLB;6D#f!hn&`v<ncZn$!wH@)87KE8O9|_juLFbN-vE;V_NLWAb2Kq2pxk<k zUf~9YB~5GjS8HzYIm~f*OE<x!{~cVK5XaBlZO15QgXlTd^1Rq$`ub}E9f_^#gy+yM zDo4tT-R(Hp#&v%^v-0zGOw&Zs^}kO_ovw!sCXY8OiGPQ?EbDRRa=0rocS9H~-9hR0 zOnD(NypT5cIg`^LjrGgzMShD6enUn*q30+5=)P2j{n2juohC%9QJK;NC{Twi$i9`m z1O%<?$)v)DyY%$~9`+61mFNppT1Eh65Du4`Y~v?u^qWrrAnER9<0O+N)*r7296ts| zyNR4S>;u&g2W$=htc`nWIm2+&a~Z0wW`(T-{Ecd9k0I}Y{P6#!Jm3YnyDQT!4k>|@ zpYv;~#WaGzYG*Sq62A(1eVG=d+>ws{hvx9shT!p%X>^pz1^goY);)JH|AfckQO^7$ zk=IgFFL+-=EH_J09ON`&GaiXPA!qbnv)IUdov_@f^=rwZ@a5IJmo<Oh4e~?X3qv^n zs(fPJ9M49r#u7zCM2P^ml!yz%H^WqTFSZ0dS!_#K`Z!p#60)<BvY7oQtshq2BXDB^ zZinAd)+C;~^XP7+wY4!I#x#Pc)(6(8coo0pQ#~&CCYN_`(52cE^G{=ymMa=Mbvi;^ zV)b|nL1H!q*f!=n0ZaU_4ZsySQ$V@X+BO*~xIU9v<z1@FtAZca3fW1vvC$aK!`zLe z=eB9!dto+$6C_s)b`8nSbwRGZ@py{!kO2>Qgg`IDJnd~+`n1+A;J%T|3GWb~ojf7} z0Q5XnZ)tpov$NI^)`6v{`@sG)$38Umijj{)Ft00O(Yv8TE-dNK{5nvK<fP@?NRMy# zX8XO%V95=MYu%1To#31xmNTdw{!$6a^wda?tR*)h*0qvd0~J*#Tfc_*gT&5OICkpH z6an!PXci{cJ@Rc+Tjf`>eK>9*Kt~06Y@k_I$<|4gZ6qgE+Q5AKLTNl?dn`kmZvA<* z%Kh;5*T1hKPN!yJ_Hfm&u$<GbCeCD!;-~4!?h=v&V{L<l36+40G9ySoVBO1Z76~^X z_P?hXkP>gH+$Olm(Z7GgwUT1~<HC)sm`h+IV+h_5ZVY^_sKCEJfG^cZl&ne8?^&Xl zG}|YB{)pI~+FHDtAxKXVD5+0yhU}jQd`z&C_o0vtQ_IMCo|_TnTMFqZfA1~M6-$oQ zjtl{OK$Hmy-0X%QlJR4Fc)$Mi$=!RU!y^jn@iIpjd!Yu_?LFB{$30+{#@cbwSjp!P z?3?S{5L16g2WqZ+9ce!l|M`ldx;!F4Q6H7J<6oa{5=i)3-4KfvkIWs(tzOD~^f#b# zPCw3K8hmHnP$5pfKCYl>B5R{CiEV(ieU8Jr{;r<LRe<jQmRw!}-8oA@!89&=$%pU+ ze6SdNE%h>4LF?_2s*J5Mz}B>(OOyg;q~$%iZjBRpRj0RDIT-nB+IDbyXYzn*=0O2D z-NvN{EKNezn7apc#@?^ss6B!?aM7H8q2~MnhIOI@NOT)73EX;CPT-eaG)(hI!OCR^ z+_~uTD#^F~@S7d6v<*<sjTRIl7Q?J?*NDSecwHqZBPWZO<3Y>T)w9_je)Kz5X?o`4 z+w$39D}Kvi`X3K81h_|)Fq1rgXL{|JsaIi~n|PHM<i;H5OnTRn25COc{2jH4Eq$2s zld~L(T6s6L=!x!@f^hh5aA{98m3CJC@F$BV?QQm3Wvsw5nu~_%?bVcqgbO{m8%;AU zMjjO~ziqh%x$3HB=ljhDxkS1o%Y#$M`*sk@<3&>)8R{n5GEk$j=xLB9EL?8nNpT@P z-rUlxpK0M>N+{MXH`i2MF?0WYZQ+T`+r?fWSYuCaM%_DFU&A*X2nR(KZYuSM?Fo%` z)tA#&*<uUc1PXl?HG$ZCLMg=^r4onIx4c;0lvdNesrO8eTb<Ychi361^<xe_Nqwys z5}T>eUc6zJ4xnv4b{|_?S5Ej!46@M#pF1&YGO+HChg$$TOJ+T&6QFOhvQl1mM#!!w zN!D|9K4!N58?ledMcZ-1{5>>W!Iw93ZYs4KVwJcmwEw`YfsTARymbWcF_I|t#uV}1 z-_ogQPrwihHcwoActszvAdelh^(KJ`-o(CY&geWc!hpotLOjbuzM3T5I(R$W!RNB^ zjF?>+P11Z6XGQXgI3)kkD$X3&lFGNpVdG7^W1i%`1+=@rpgEkiEfbQFMW~VUb8qQV z9Q@;p=`LK<_4@bKU<UyB@q0-sk6eOF$-e!^JPKJ-MM1(fYS&qkeXpxBqk%N(LUI|v z_OU%U$N;+D(j{`paw}agn4_HpN~rYPqMfp5bpJg-8*$(h>}&VLzyiqa<;=qCF)wT> zO;U9eYQncKX^Sk;D5vN>#e)SYHhNs-Z>mCY`SJ~KT`$odkmC2Mr`Jk>L<AvR^F$?< znLXhgCT_Y`u{?Rd&i+WShZUkUmEUqqu!)Wlnto%)MphV{F>IeG$iYIdtn5?BPP5Oa zRW4nUF&Dh5B1zC{F(63u!wBQ|(XEeY6^`yUAZ~C_ula5(A5~`Hf49{_VklO~t)OR_ zTJ0%VacH1ZqBeuKhQ{jb&vT+9+?D$PERNF_)(rftaemnjkBO6QH%HMKIx#QMK2nk; z=F_sTIbsa2`B#FvLRCp8u*X1<w=aGb<xvXy#Q1o_=El44;%$35VDIKelt0-8Uw~&m z=h{Ty^j-4HIY+<sVQpt&Ds3MyLI{h-Gl!AHapa)BlT`~xfXppCzdQUpQEzh6GPg7L zob3k2G@0zBhjuG)?IEhyYklXMFR4bU{qM#GxAGg?dCBQ^j8<+@GtW{Dn<u?e`gq@b ze)&UI*|FC9?X{^^s7<tHk`{<KAUavOT&@0|?uvN1qFB;L50&X56Y6L^b&5KCK!>H| z*1h_N#=(D{>gNs&x4B(U^xjitT$Nm60CZvB;?vC4;bGrTzZ(uX%+nz7Z!eYsF$aYk z9~b9Ki{l&1VZCcmQPBUpz7Z0Bly2#mb9elW81vUzs3iX<)A{P%D6tfIaO^ffg*Jg5 zp_i?gFTstbMM-^)WwUM*{a42GZVO|T0v~F3-TvDhF*E&by`8^>PeqR)y(7rlC5I#` z<b-}#6dpXo<L^xdAQ#DYc8rj9SAel}&IOPbiGL&eR+PL~0TpeI^|IfFCEO|0K|hoT zy1H?j%aJ8>pE=T2tOhfN7Dw>GX7t*pZnUK@P=5t_mKx{{3>5Imet=d@s)XSA?>!Hc z^g{~ZKYS}fBUjWHJ}q55S6-E0qhgoWOR!^b50cogGq8I&dav}mzB}q2@b8aYnS0-& zTwpQlXkVBJ!QBOhZ6iMcHVq@Y*+r5Mzo9Bbefm)6LfO1)X6&N&%aXNBX(_FFvD1gz z$+p_kI~Va!$Z-N_U;D~VK1-w7)@JP2G^cyQ4rea;Gf-mYsVNE5!*A8E*ksd}R+#-j zu2l&*qiHJL!a$QZyI#p^m0$?mSq$}8%17J^H?StHW3>rvAX#mRK^;!oo%46^_Xg(o zA}RLd1j7A_7Tq!cr9S$_@-fyCXOZK%2Fcy9%_gR78D%`2lsohJgQnjRGsx0YOl)wQ zx@$7G$RyrS$<|}bMWQF4NVAfC^~V9PYr*q$`qMyB+Q4GnZU+=HKxTKg834R27rRXY z`KgM1-%}LN%PO1w$i(!h0)5&QuTTM4_~5Y)>0$zAw(GB8QzN$fxU{?WMdku&vFA*Y zP*l_&4!?MD=g)9~FEiFN^L+B$;}r3X2mjFcx5eZ)<i_JfCRId<%cj$EuJ1D6*&2I$ za$mJo*X;@Rth^*hLwT7gm$FQ7y!KRch{vLwCKO0a$1`6dA8V6#lM#em4n)_Zl0x5v z{CN!_=Vuqlhba5}h7tZPo`uS0e70csgoV}6H(kYS)%i;=lKTY?BAHrplxO%!X1(B> z?WEn*CF%3Fz4oOe=bGDEU60Rlq-N<T`{H?Iw_pNP(#wp9iT^_%Vt6!oS=s}Ij~l$# zEw0tz#CIOaP1zdV`UIHidO}qqx=n+0<|CXlFrd(&{BB<5uYdI<e4>k7|Do};#KhV? zoRgk29k64=tjJ{Cj$f-(hnm<x^y}MC^?o@n9tCFN^p0$TV$te>V%>s_uwctc6$9jE zJ*QH78+K|%k=c(cZOJ$-<<_Kvf0Bfx8{Cv=7E!6fTw&vGX`1D96l|8FJe#Lg7}-UM zG-vqJ>z~7xv%1&SB;N;&<OEYK)I@;QZcZdSW-GI~G$ym_w+F9BXUsd7vFiRUTL6z4 z*9Ic4y<^HI*s;0m5IzxlR{$55wuG7Tr4@pT2cxC!HS*q47+w;HFlA<YBJWk*Bh`V< zim7M(hsIB4M)l5W9;u`=sCFaMKdij7bW<@iJG<%O^nMAWH<$C@4-AptPiBw?*3rEs zQ#Z)L6+>U$g>@(K(L+&7HKl_e{C_v_z7-~Y1M`twA^=zK%S9MUt1V-Debwr8mZAUk z_j%d7(3f+4SU~z{U*u+46qV=wM&y27Q=*>4jg=Jk+#*0}D!i<B&J`y&RTrFlZLVmc zKC|{!eX6oe;jaTefjNlf`r(kmkEgXdy0YWA;VJO8zJ~B4GSi&}cC$qCNDoGkffDj< z>m({J1cBdiruP<Ih@}g*c*)Rg%?dVT^0iis2nD-ldZv~Aa#MPa`sO~<gxpy`w&=&R z$nCCkMdT9J&bP)bRYsQraZ|WlXk|iE#fbdEIKoHU(M9-QwD4-|0rORI)b5BH2@$8F zSuw9??-ml8{OhB-j_cR7F{7}CM*1xr5R8{2Kmu6d+<qjUgTBoA>~bAGOuD~;HZ``o zcw4*=hV`eK94bbk*(zYZPbWXC)VJ2fE|nbXe0>#)F0ux7|3kw-&ghz$x3G3s(w&YJ zT^JhwHaCE|<CL81xpVrO9^v1Ny_MepiLb}_kWHsgx;oLf<&cjT4T9yY>o(Y&(ljfX z5LXZQ)t1}CJpo5{tILjJmDMi`yGO56Eb9;5blb+l0JqhUCq;=Qk;~d9`JE6VHMqLi z4ID$!co67H-Tc$t3h%@7t@W|{?eUrYahmT{B=HE^1+@|!R0F@#mUiL&IEU%=^UM%= zdqh_Y83PnK>JTC=0GP<=244EoDvy9+zCZG;*4JA^l4CEUO6gr6%@Il+c%+#(Pgar3 z?Q9PZ%=-a_E^LPta{Y7Rhfcl<o!yQLKdC!`{s~C9206Q8%d$N}MID+C3)X9bT8X4j zIf0yl(nUfbN=MSsK|B31z>CBkGg<*k?R!E(sV8$4gzYryz5#&Jygf7E+x5+@O2+95 zS5!V&4IY$#rZfsDcogi$7rBvLtT80cjHA>0zqR0hzxI5+&~)2YVef23-o<oMvJQFY zz@QBwH9ih%_)N+!jkQQxVYL2VmJU@E2Yk6S$9j!hQ*zGz9{@eVODNIY(I_pM>&**j zZ;JuZsu!h@{)#FBOZ>xnbn_n?E$3up6ZKH=9_9}cLN*crD(3udg5BwFU|I9WlOjuG zYQ;miZE;ZBn{6aM5GVarYn-FpGm+sAddxJiG+&|KAk%A-b~8ANt8OM*1sq6LA{QO2 zAm1_%03_{3v4HMgk086X`9CxxYzp^Ia(~;FEa{4?5s#9k!tkX%rcKtkCow5n$;pln z#L8}{12S?yEB&gvNn}D>9@NY4f?p!6yNtr<GmT(W5%&6KhXZ!MkU}jfO8b0kyt?qL z%zi?P$sYM3MF@yNE(Q*3_&S1|ISwRmLh(DSGfyWbkwrCW@d6zw-Y3&(kN6krFh*9I zDtg}6E@`E8I?@$uzM4rehYOQ6IX<$u%WMQ>gn3JLyBi9nHGjF{Uf)Vw#0z8;e-AFP z`elWCxK8};RjN`W9?jLo9SE?$YFdntb7bG{rl@LI<<XIT-S{29>qhVg1RGG#G{SvU zURn1s(++J|>?zA+s60v?7<%)f(EO0DYj$pybL#}$31@S%1qW{ai&l9{$PyF&5Sir# zA}ig>V<sT42EKgQ_9lY}y3emYWHk=AD}X9(ZDgvR6;Wb5jxtiF-=rCPV$Wgq<VTG` z0qN6myf%95;==DI2k-$h>jkPquOaL$Y<L96f~77Jde60~kfqLh9&3wiDZZ(aH(~<# z+^)I;bI9m-&%^M*HM+6+%L^S>D)4fxJiDU|h&5^^e(TqnsH5NV;5^wfcrqz=4`-uQ zquTR3EMUHXF4YFfZlY^sP&58Yv~_ZKXM5)ccVNi}fE(n{s{{3B{9PBoSyMRrG;dsM zR<<VR5v|{);^OM7SH#|mkH{?o<5wYafMT4A0e&4>2YUf+FkLVDq4LnhU#1hB)<uR8 z>|#9L%;^Ss(agH#&^2d+b`(<X=&;`NV6Af~UGYaD@*5W8O=o5n8PUy>cW}yCTMgsb zTPvr9-)|J_P51-1+Rh@-gE!&@hsrfOf$c$ER)6LL64p)lDa%OG_V(G?7q5{G+g^1a zK^FK8xLJv%d}Wz;0l*{fBMeh%uEf-*J)jFO6o7svJ1s$_FS}<JV=BnSssTMp@2^O1 z|JJ7!>;icoa+EFUf?ZpD3D7egyV_}aojB-2!|~Z}jtZfY*{>k@N|b7_+1D8k(uEFF zs$_6*gS>~)lWEE1f+%1K^`-Y_mybd9ajI(h54uhScM|9`T~90Ghk_NN?)51-^~~UG zZ`pE@SgZmJz|^CA+K+)z4QX=^43usLL`<}o+?nk@^t7N<PkQd=gTSfxLL-fp*x3C& z0SeD}i(VzTvBW(yC#+(SCUZ?M!|My(adc4EL>ujfe}GOYxxWWH@*cUv{N;N4r@z9k zn;ogS!>#$l1o37qDUacG=LAQ!cqgravT|`V;%*G`pu&yE@6^H5(<8-@ZYr!ok{)03 zt`5o5*GYjC;8g3bTxn>iiY)wC+PA74c(b^P9D;Xi`+0;F$Z+uW@@1U##s2E&iyhOd zVYsHm+Hk@HglF3I1%)O9n=v{YbDZs5eX?@@+RvJVNJA56n+{TTLnS?xL$MR_mpG0f zLdE`};V%dC5?#9Y7-4%)ay!SY9+iIQ?|O;dDPhWbu+TUZ^qb=+thNs;9Vss<HDlMD zI4Jq#>5Ybu1bN3_`>Auv|Ij>L_mFx4#P!5!7vx;IWC)zgsz0>GlLoeC$jt*c2#>w4 zOK<WlEY#-i2;&zF%afd-21DN0!&mErX6ytLRQS1XLRiTm+FSKhKzdROFt{0@={X|f z8bvSEuyqHWyy0Asw0k|~EVCa6j&7j8F{9_=I$d4f+pr(dD);R-_HFz11~LQ63o^4U ziR1Tb9)UiK%~vri#QsuYa<@uEbKZ!2`?8f6qq{AA2oEy{qp&6h?V7`{uzS%Z%t*l2 zT;_snKgS#yvAsBJ={2igRPw7}-=ygsRw07?5;dmog4<GZN-S`*4=A<hL<Hp4&gsZj zq&l3&KDQzwuZn*mEyiSZVRc(4mEf5PLqqeX`g5AsAMb0uexPE;Lh|hiLPWh;xEa_Y zT(a3FKIMGP@>h$tkZf?<{4qxXajQ>2sBy-sJ4ccDyDhqm*CD{|$ih_1Ip%5kx$xJ6 z=HCAbY?AtTy*L-3q3qy`=!um{r0wd;2%I_N+I|mg`LxRjum?9UA5#v9Nvi-)Tol-v z{n*J70z<6qgPfwjpNgF%WI-ZGTeflPfsh_VR7OxeDx_>ZRIZ6QFvVg&dE>Hxazc3( z%YoGNT<<H_AVyTA%0(!k*N0+5K8`YkRPLyEIy+>9<jt&#oDk4dE_2I`oC{++64LE; zFJf<iXX;R2=3-nr|Gb(pvNa%hy)(jX2ABbXVL+oP>$!4o$iqdM*FQPYqQ^dic7_*^ z2&c;OIDP}jP$$plK2JWn7E+-y-Sb74qL$lNL{jYZ;?cn`XvmSXQJWPnUQ0MLur4j{ zvO4WeWS;y-ru{!t9>kDQ<y)pa;Or8ZaZlzdI;fuW;HhlY`NX~3g4-3&Ekp|4OeOCQ zXptSREqYA(qv1z$$}9`0XJuhok4aK_cxKMc2+RGQbZWPOFcZmhc3^o@L40Csh$=>b zGytZLLh;R$^o){UbMv5-E`%i3)b%KWd>)z(ApQgEfOXznZ~K2>uLV@@)d^~}7vKY1 zvipy#<{gecwc|($mpK!lSfx{%^-0RJkXa&j^l^#zKQw{7`y30?Qe}h@rVT}n8IzgA zEZz_2?#|;h*}@K;FMUIFg)Hrz@Tx!nF2XGYKq$q7i2-MfIlw*N`4K`fabM?YEp9EC za}Roz<CNVY3Fw+(=Yibf(Mr81M9zc)*rFN9<U<2>a*ECIbY;-tI<d8F9VOmCengCZ z7zG?EOg+nHFJ0!uW`gH<<L<TZR+dTIXG?(TMIrg+v}LSTf|nd7CC!ZC@)9~&o+FvC zHeuAQ6t@+jWd1HIjM^WxuNO-dA?p;|eh(;}XC`a2?GE9OZ^M~el0V#|o|-U6;ck=5 z0#$0d@pB1k-33(DIm^$Io(mxX=fV+J|FmBvH%;^yEtqFPTNTY~Y34U(VmVzq*Sl$> z)P8*=G`X+B1DAI0^__$y=2nVjmvs7LWYroohPsp@MYV)804y@*ztTMG;UMBjch1!r zDS1H#i#XcG`fEDp2X-seJQ>p+4lA*ZkoVy8WAI=%2QQRlXW}rTPJKnEYPat}MG_xe zjJTHwe=cvwHrG1oZBbMqBZ3kb7toM+ntVnALR^P)84>IB5GtK6us$$zBW`sbwOt+) z8-KGa5jrD56nfdq@&2#2{N$KLrbew>xs7}JQDoc(#?CR<XPGt7l`K%edi5tc8NVRj zE5O`7@rPWJsz<-p5O$>f@o&_`R<90`^af3oiU6W~PX;m{)x;o8jWSr$E(QcI&8X?V zv0zE=GmdAmQ{J*;qTX}|3u1^Y&Euf1yG=dv*M3Tg)T`|aqfi%$f&_b71&vZWrvbVf zF6&j3QK7=Y!jMmLQN`u0FSk$o-2um_b$<^s=%71?xutFVh4vo>7!oO*x?49sP+c5S zLugs+&NNGU!yE(VMsSjQ(N-b4m4-T8H-24Z5Bn6_Hnl*Gux*^6-X!a2nOzz&t#4iA z<`)p+Ee|aWmH%a6t4rE@*g$%QV;U1_Xoz^yHu+O=^-`zTLhW_RBw(-vqOuSN%l}4Y zdDt*_OGjgw->RsgtjIo^TDv<)0Ub9HsdbZ*bKh07#HfGe*FT!2!8L%3v!E9&lhh>u znr4c0@p8^+N-W^|*^vCpA>ppZz2EggW(w`+ThttN`_f37JqC76YCjq$bG_SIh4H4C zZ%{CI3WP<%ZqCwUvMFR){a7UB-to+AIHSKjAv3r00bH$ei>I=TkbBKsJ0Mshxzhzu z_gl3+mjR~s-6~kb=ni3#LJ#;|O#lJ-FTw?f*VjoIv7#UQ=2)#-%3gWrh-2&M11077 zm9Q^ptLD^s<JV|!T|&tKwO{Niu(SWaA6h|TE=-vkHNp(s5rcx%J9&-d2)sJfb*JS~ zA<kOQo3TzGi_?^d-`BckZ&Eu|US8^nTy92Z;_RDl>-R0+9}vFOaw7N+E09Yh9CtQZ zG}y=<Z9Z7Lr`<Rkm|Ppb<Y!K@_ABYq3lGTb7)SC9FB=I%oRZ9vSC$ZOv@<tVB#9AS zI3`kJZaM5FbM?GBUzwbbbxXpHyB*hMRDmry#}JU7(Ouuvno5q+F)vgIu(eu{t$57W zyBf97PdV7yv%Nq-agl|eP2~u_vzr?t+<yK<fRENvYjLNmqYtrk+cpj_$OYG|8+!?i z)gs`tq>K;+b;YZymgf-<p%Zfa4tgY}WUsOf&~0C**Nutll=s&UuOG=5SkuK&*<eP! zIid~IExILu(@al9rtAIqK=|Fp4Ro~iG~&OW_GUp^nEOPREpN2?1Y&s*XMy9O629LX z01+3Hx-jLbSsj*g?JU<x1<3xRp9-rBh``g<=BI03m0UBzene1bW@Sm4yXBvFOu+F> zs`d99*5A3h2h15RZOfPdxdSec=ma-e%MGJ`Wno(1z}wiK*P(xcD&t(ImE<G8#B=W~ zCEm0jP1Bc!+-WwE4<-X3;bZ;g0Zd)w+J~@IG<)^gMTlN=EVT=}%kWo`rJ^i30v)A! zfC2;A=j~SkuO%HU&Ms;PZPFIo)k}bD)V$O-f}NBB(HV`97@kXc1ZHN9O#Yt=*w%ze zvuVA%KSN)+2w5}Zg@s9#%w51HDW{br^`p0)r7y#?>6s))WLhdn|K|fZ6;b4;4@Ar- z^=5f!8dZh&Kb<%{{UkAhHTm5TC=%_v!_R&vG{1RMe3*KB(^f3Y2teH}WyJ+c>KJL4 zWS;oVOXkJB5MkPW79sewh!`}}6QuXP#jF5U(qjajutXMC58c?gEMjqm2GODJMb@-! zoK*2$_TX84BoSoNTOC<-&N%a;PfO5UNVdPRS%iBo!*-hx{3R)ZJZ$x=;*eYcRFX@H zHt&T~6y_0o4MPBKx?2&h1aLR#_b7}A60ndAD8#OZGK?QK)2B6|>oj5?WRTxF*zj{K z{lFtQDHf;C(SFPHKnUjkh)7UKRL<4fCn>VgAEE?hdLNaN#rp*5Ux|=7BbQY*ttYnG z=WRDKlO;qW1APjsJNrV!7hj}_MT*A%=2yG0?e_2H_<!{=<0U~JPWdfx0<FHax);hV z02=ag0#P2IKWG44GfqC@!;1u$UaOE%Jz~AKr>6GxFP}yZsD9Iwd*do5ft9x8+J5gj zi%ms^Ef;8s75@(p8jm&a??2cm<>RjTv9S*d(tc|#SQL09p8Ia}_H_u;<ud4q{NB49 zPLg5_S`ylG@+K($_=bGan-sD1(k$=&sx52CyEaw|WU|F>Sy$osA;zH?*U868ShfG% zGd*@6g7}iMnC1sUTmW<RLgiA(K9?PgMGH@jmtXXY?M-7kpmlBJM|ij8NPD}Q%SY1B z3fM=MG4i+xQHkp6M~xl#1&Z6OBRX(wQ{bz1<UtdqjMyAOw5_eKN<3+Pk9YE`=YxUX zAj}RU@=*zl`xW7fRBd30v)sBdW$%u4-?E@CdXwE$F!9Yjf*0N9$@Nc<y>@VmKOx-> zFRNOZiRE1a48LwB6h85sfouc_wr1rXCFylFHJ?4j^&LE~&#sordw_Yzw0k4P2uMfl zn;KTfhdgS#mCL?hXPKpSI5Uw~AA4Sq@kZOK58~Ilcy+0l)Qj5s6vC$KQn*axN^<zO zBtu;QhE>%9xQ*2i(FmdoaD#Igt+&aH`t4ZiDnFijg}z-7vBPwfaYgpVE>_k!$Jgc} zyNRTp*~FVXZXh{QM@XoPHzr-Rf7DZ0-h<obg3y2PD8_!s2l5_Lgg%|PW~a~opOIp& zPI`WRD?G#n<)y^-vx16GU=di#AZPP@lz2(t%`+@~|HHEM9FfDvD@<u>Qqn7gq|+Oq zP~$Bj`|P)M5Z?fFrbXDHWTTA}KuTz<EXdNEr(hq>VfxrTUL6l~4nd6^MT9wQdYI^t z@U^A(tCYt;S+Wk-3nmE~jsl@r{8(|``_BiGtt;>Q9U^r#m-Z4^XO-d4rqPj!PkbF- z$Cuq_U>bimwP$P!N}wo%;#4FN1tTgzHSBuTAxFBM;eF>=e}fYp5ydtoC!P3ui$@o* zFfebiZs-bOng)_W$w#b!$r9LJjD*1r;V<F#B#=>k<J2++3e{15beiSpFszC=IfG8G zSAqzb@Jfm=v~c!O`ND>2l?`vq@4Ap0KA|f~WEPGN#SStj;yUFSNk5kwm_^F{A&-Si zkORDzbRBHcb=^<R!>PPZ+Ni?CJ9W+;-Qe67E(#O~y1PqGE+%8NNh(0Rh$y<g=s_K) z8P;(JGm>EOnV<Kx1E8FLiX&+D#_da1P`S|PABZ2&vcaDA93WTGtXq$15f;#$Ab|1Z zpRNt`75%ea%^;MimI9ikx#;)NK-b^caQLCVtaf4SlXUqM1*Z6O3`~#MpXE3{&&3&v z_xUl0wOtx-VfGctWKgt37Jpe8S^L@MSjO_Vy1kKokCwts_AVzYs!fWFUT;cS9ptvP z_q~hjy`;yyl{rFM>mH$nG1<{Wd2U8CB2Tuay)~Zf%Xo|o{QYzWU0APVUXI_P>$cGY z8UC^wl0>&oP1*(V28tz!+5;#F=St0IM9@39Ffg7m1GCg5%DkC*J1?;#of$s6oT4R< zCNR1K@YPV}3AtZA8K%=bVeMMO@P;o>^c5*gGPZf@ukF~tyl#kVXvxc4L*i~H0bhn_ zJ&k_4{Ccakv!A)4B7;w0?mB`v0cpKZ`*XkF$wW%-_Lo5{tK>zR8Yj0U9PKc_@^=r| zw@v*-?<E!_LfP<`C@H`OvS_sl`mnHI>ki_1m&BlPe{ygx_FKy9i+*WY6<b)1XdW>7 z+pHVF1o5lfWxckj+hb}*k&wO!h)#gu2nsi_8R#|5h?Z}bW^vOgbGvt?BFF8ewsCk( zppTr>$N2EVyv{?U<*jeb6>c%5l{wgiPwn<;_4iPp5K9jL=6{1%EEOp5-u>vF=w)jB z<_2Qvysn9EcC}9x-u>CitqL8f+Y6)Kv{9OJB$pA&UCckq$>`l27=B<7qhtysTW zvaX-B$EtW&LY@1Tv|TPzdcJ-+6c#zK9a0ZG?w51{zynMWJoiVd%>YdOk<73LJXii` z4?u9C`${@T_|h)v#amLTr}l8f`sN%tn0VS_%Sl?XOvDhj{-I&B<X0ff%FkY(8yN5C zU}zTn1WbS1pwqW1*?_M8j|Y4s6BUV82jU)zl+hJ6QtK<4G%7yKYISBAzc%dnk$;8^ zPs9;Sntr7fx8?hY#+M^53i(pUc5HKrsU63*Oyhs9_#vNc1|5}qAC;e0ytub~PO}OS zE$lOMQA8R^X7NCjz*=umUov}+@oP<cg$`k@K7iMGL1bDU)iK~%<3SZASH6U-WfSjH z5`r+@3s=1uVba=Tm8)z+E}-;rL~x4l36Qc5vp#^UlihrMOV+`>(LGdNx0THA`Khmt z26nCcy4&u}a4?)C_3Xv?*SMO6awc_Q`KNERH#dB!8@hs@mcPGpCcdzo@G`;R63auH zpmTcv%gw{THVYD<=3pdb2M|Ef6j6MuzsIFv!Z36$ZUA(gP+eW;qgt*=W$%witXGk< z_7OmEU3-@oy?YKz)r<r>+i=+|Cq!$$KjbwcP>D<E8AgPtpV(U7oZkZJ$6f;R;9@d3 z+xVybhUoj6-dxTA)!)_r{mN-RPMCqgM|tWdS&-0b4;~_n#5C0x6jlFBuP(p!A&AvF zX>_K+HPfazuF%pg^VJPrW%KD<1%h2)z0F)vIS9NhT!!4J($tn*HdL}XqxQ48uDVIx z&tV4cD7ax09oBXcrq^ZpQ>jUwT2l5nKwX~Fc_gS$!#7iI%AEA(Gx{Hzi_j+Z@;f6T zPLeg8D(BZV|Df*tS0pb4|LI@4nJRjOLT^XCfg}en<wj8$my;N_EE$f&3Cd*-e$8LN zf1nmo>=*eWMn-v#V#R+@RV+7Vjs!TXNDQm|m-eg@#V1z(zCfkQs5_jE<Dnm>sN59U zaqx}x`hXMFgtoLYx7tq(7$4dc7*4pG8`98+rh<OK9DsX(3$B(&evBR2Miq4jh@|fa z=7U(-WjsYrB4U9*^xbc3;e7XUOf$*p44u+h@c0C3V|_V)aZPtMIW>IwH$^;#s2TMJ zAnqxVG~?jf44F}39`~!q^8;X`-x96DRUe&X9xjIKYue+_9JFh*OD5`CUv3WmtjijF zQh4q2kx1;JlK8-%(;XfB@Ba5H#(q%oh4at@(cvtSZz#|}+$Za0SxWon2wiohBdopm z9~$nph8iN9Vl?G8@81BWmUa?J`di;u;AqWk+5T9PR0!ei!10go(SS@X{aWk3@+EAr zmYu14j@f}>0bM|bg8lfihjNdtz=UL_fKIZTJZ9udiiS_gv8qpB@f1aoRIkI|go=5i ze9E})DT%y3ClS-&czYkHgIz1dmPP+eMZet@scBEuP0?xA31~~GN4NM`_a*)XF509u zYe?VD)00~&(!}F#OZ4Do(^N++G~;6nX^y#N8`w;ZBVl%(1^AMr7D&nZ$#i*O@s`27 zrY{t6_rsMNdUv0;FbFIr1dDR4K|rZSQ)|TINV)8%y0@UdgBY_9|Ik!u2`BmH2iHHW zG!Fflb74QWrD<XyP!>H7bYG+5`D7D^QnFc((qe=(+A6`cYaE9=)yr8~HI6b(W_T5h z&tLwRGz!%390#kpUtwzm$a@t7V6bpyx(L4j?lx_h@Ys<E+hFN?&KDG0iy)fy$(mc= zBBKe);bT=SU}B~BDD|Wj^{_r=;?aah39oY$_Wr!feW8btLDc^t?oY#^{Qp0GSSb>c zeK(4zY}rz_2?+^p42Dt3Iw9Ex!(`tHp@_*AvP`lwC~H#5Hp5tF#=g#22V?r5pWk)s ze_gk)<9i&Ax#7mlIdh)x^L)Qvujlje91+}Cwi&mx`@<G3L@;7{zRoNge}M07=bGrc zo(_~OXRvS#!smA5`*${d9ObMyNo(%|yu&Qer_;Eecc~f=ctI+Sx|*XByy{H)xI3ml z3II;{vC;}IiIr@tB%;>Q!1=DP%R<JU8Ci1kKURf*>>RB2RE9FqwW$|@E*?7~=E0G$ zj@r@Ke4NGcmiNx@AeYXRD26C4G`&8`>q^T9kIWU~{*TUKoznsQi!=PXVm3&_=0QoE zbgtTjlv>)EOK0ZCF5i0&GO+Wat8%>tXruK_K+gpZ7&3wCf}?X5e6U`HnzaSyEBtu6 zEJYxP!q|2g-m#fBHJOXPpMF>3vDUSKC+Awr2QOm;aY$LBgAm;n?}2p_3uw5$cRj+q zHrqcj@P)JrpXJlW4gM%1C<e_g?Z8cdANs%NT*&=we|uGZwP)~qYqk`lrX<ryeVQ=< zxsG>WtMzsiG4f&_I4RU~Don;3i)u||s4w$D!j`60DU0E1DH3o&e0^uPX_>=8W{tV_ zqOQ-unOJjw?)dK%Oh=NyBJuQQ0`|GA?j>wpmX&7uq^61IOW1WGuz`afO?LyBuXNa6 znqU4s+MUSr6E)#F(y(F%$7ukjk6LX|l?_||>&dZ!GnxJqBA!Xn)_cs__)J6s>2dp+ zZ$n5&gx}n?%`c5%Z|v*A;Y2nvqxoFh`_G}ELB>VIOqV8Cg0_j8rd6s(fOvO(9CzOq z@El&mPaHt759}b_$6B^HB=7ZHBIdHYhQ|3jU+=bLUfSl%(w2Bv#moT4aOfRPgd-sN z>ix$gg~NBQi;~o{x`aGKCEW@BWv*&1?>+_#?NyjNHQew@4ZMId09fdOo5|8m&9rnP zr?h)RvtJ@^KTG9O1>-?8;+K}A>|akA>{0id-_!sy=S)<=sNy<S;o}5r>ycQ?J^U#O zxMUXILbGu4CayblF$6;HZax^^X;PT0$=ovA>Pf$2lGyO_EOi%S45S`)g`P#lPv4-P z{?uOXphwK*ajm>Kyf!JDs~mMH;FTUAu=yCue`=-%75(B{6X12PbUmza@zr=>|2&^w zbBG6!2skD6%@fNa(Pdv&xI_(KJ=&<PZn@JHa+lZse^+Jyf2w;3h$?7}^Cc5kLFaTn z1VxvZv0Gf<P`zj*6m273AARbB(du*)C?QXdDh;@EVzAt^{iRQ-ET1bCy2(bVUT1+w zb+p0iP%T5;9#LaVby|$Vx_q8kHQT$?UfZ6`&8y-y_G3kBE&`SXsB7;ifnac3v#ic3 z^Zt9BUfTGF)B55<Wr>o1dcGedz1)Yf(Pn(gY}|Qh4IS%&&Om(SUg$0FXwZtz=S8|y zI|#hw3qU@YQy4}7`RjB{T!lRLcAk23__kI0<899FX3`bjH5~D7;yIQ{-!*u90al|M z?{I#dAqTfjd9AJRX-1C|E5JM8_mcOI)~UjXi(74;y3r{#lQwPOwweI!mN^_4V8FBZ zIYfVvxR-SOYq7d)Qc_1={(e2Yq5!K!vTC8EcV2(vn!Wo$@GvP7e(IWS*K=$N^Sp%X zcc6Ga$saYVwHc2;{N;miFmJ7<v^egEUTxe?p`V&HOZf#E9E~EkuS?Cg`W&74(cCaL ze{><%DYC_UGI)`H9!05OT>i&22x$ZuEXoWuR7VZ1@IN6i87NPBX(I%|FsyeWZMCC0 zCYJ65j;)Zy=J>Kq-nl3<<i{fs0z4N_V&DbkGh>96^Fm6MADdz%*RrpzqVp@jLNvKf zhVo$H(C)FWR>F-Rt{K)n&u)CX3K1fGq=0}iDvd{&Ou?b|oY4|5lBA3`li$mm`S}gd zdV4elBi7etsN#p?hJH$^ynN1+GnDi2H?(#D;_IJ2zKr4_j2B;Z3BOq>lf?|Y^9Xsn z;zp<vQl#N8s#?Jh;jvTMqWhZ#?I%KJFbh?6&Q3AHN@;g(v@f`E*2jp?4MNXkjM_2p zf0^92pW-LODd7Y5w1_H1LJyY$a6p}xlC!r$$r5%?es+#zXhR$^H09^bW{w>Y?j^#U zcO*|iC~2OFbn|b>{Em*1`xxcc2y28IcjW<^&_2HRj|sl5`;RGizUp}Ts0QjgF3sKZ zXU0!YmV$ZjHzn88CQ0D~5Jz=fqBF}>le05WH<4g%Z|QrT?$ulaLc16jT5r`P4gM`a zvpaG6@m_;fQp&;7Ct!+9f1GMx$)81v^(~`ol^T+ySogH_JC^=T+&4-N5TSUTaz~%k zX0J3UTRL3Qn79X*CIw=@1VtUll~Q`+u<RsMd_AQ3TuVsBs?sTvdZ3trn}o^)_ZvqY zxpCJjEs{&*rnbc=o4x{fSyO!NIAhc?FzLI4o7Elh(Xj8Bo2p2Z!5*rH1~VX#wL@(f z8IyD+N_}Cz+2<AA%cJB`<b$$6uK;Oy-G!upGi1Hv!QTNR5W(x1sww(|5MGPy9&w3Y z^XRR$K6dS|+G%(5`8H16ky_EiXpj1BiUD8((w(LPgdj9VZ*WJ<Kxg7sjd00La_SmN zad!zY|0hAL{(2Tr&%a(3aayYve0b|x+E>SOtS_SZ$MEqh{vcs>doL?==d|?T3$>`0 zG&yT8g|PHzA5L1N!Idn4t;Vq~=@1SUK)|jjIUgDJC~UWx#RCuE2aF#jD=;w{#do4E ztD7N~%5m>(w^y{MRw%g=VBwL{K<C_E{wa1cHBKFE4nKdA({)5}SV+D~=Du)Y(g)@l zX7%lXa6hiZW~CSf4>cubSMaz|NcY!PLU^2%@X3EnRsWdW>lEuY6ZRptw{>MGRp}+J zTkiE2NhI8yT5P*}%Fv@V%>YbbLFp<GpqCNW(9Sebk@{!+hHw(jP<G<7+~SNlVwf29 zr^+a5r+f<9wRX#dt|mcvgg*3;P(8$3QeIia;{}W9jvVKgID~o{);=8@Q4)LjKp|xH zwb4a@P_cvJUv1D-NQv|t-?=2?(%hV^KxR@L1t-Ik0nC95)d+}c?foyRwUEJ&?gkxR z-3QTFz&*|Fk$Iw2t{5-+oxIDVb2v}MOJU?z*Lv0m5<u`<;R8$Q;TOfN$$L;Om)69m ziX3;JKUfkK=I;THRxq6I^f}2CHiVoYF$F$*Pf|HC>_4PxA01OPwq*MseSE?Q?&R5W zF;4Sx`RG6&S^O+m*oX*edw?-z%T=h?kP8ppQ~t|~uM0#aVWAX5I^-47<`^y0<R+W0 zYFc8xRuPjgC(OzZN^Dc0OHdV)afGU3iBG9l5S2wWEr!m_$*J*s9xUE|`OEl|>VPF% zEYH^0uJndP2gXV%X>D-?DU2Dnm3<EszLN$#s6fJXrcmcb3?PX)v*U0Ew9aYyr-q~z zc66-2v-!+;PEv<;^$|Eq-GS5n(1CtY@M|}5+^bL{$mXHdsR0>YI@|G_Hl%3K&ZXPK z!E%VMaY|PV@eHS~HRikO_DR?}+hG649uuAm*o~e=!~jwtJ~it)w8+Zz1<gEk(586* zjp*xfAHP3VG@{p55mxP+Bgg{i{Dba_s#-Ts4)9c}%zY4*!-xp1{cm)qFBD+j8BKDC zg`A(TE@}#Qe%rGw1Ad+C6HnA;Cj*iJmLWxXZ4DBCJv4eszURucm2OKspmv09cQkyZ zrJ-17U@Hliepv*d0_0i-E|{}eGe?O*J`KVik<n*pe|o$2Lod<bW#ipG$k>KMzpaHU z<1C}87S0phK2!qTAMfLc^7*(VFwm8iIcst?W$%_uYw-6&^{g1Wa*3Pf^E{8@4;Q81 ze0fG&=}MlP!*%m7O!HHti*!LN3>B*Oo{PC*V;+G(;7JmD&{E3LoxJE#ID}oigKN7w zi7;eH*}?rm<8aX#PPR%s*NZ}JV-~$$Fs3d<(Cg~JsaHL(lJjH!#{W;b3ZzguH%<S# zLN^?QP~4Lqe2H#ghHW^7g;;yM>#bkurFm1DQJl2w{jN4C>giq}mB(9fy!%&m;IkXY zOs5VlG3Ul6^#JBc4irah8#PZCO!e@3{=`@zabU7VKr0g<>;c7Ix2`7jPX<+gaNxD4 z=kpYc#&}VvnbB|4w<;a?nz*SAVd3C}IvB8iTdB;9*oA7Klt}syXz`hL$%CY{wvKv8 zh2<W<_xtRg63n0a;@$n8gn{F2SgKt>JXVjSpwZ2c7_LQe)#n#YH$hitdyn~CF!KZI zKWUx4FmNq3y8IKu==)2!re9o=$b8l9=PkFta)$?d@}~mj+)R(dp^O!pCV{5g2Z1}v zC)SOKjHJMFR*}fTnm=N5G1KGxqk}LhaxRLfFkhS%>o+kGY-VMgMq*oYx>70=B-Z7F z#sE-hR+4OrpNE?xK;A4zBy_Crd+s(44cP^B^>1m+!I#g<<<X+50GR3NmBZGelcW{g z$-iAe+L2NBL%td!rYqg3y%sqprtKoGFZ;@-5{!rB)STjey#h;j{^)Y9Rg+VSZT9Ng zWP>7aQDNv(>z{bl@BEd`M$MLCc(;q{V1Ir1lxsx_4=u%n(wzv&UMCTt{VEfMDm9*| zVHa-QH#g^WqOJBGvWBY}tD6Na7!yB4MXM#&rir<na6@y2UT~Grt#8WG%kxqh4<GRI z24%?yE@$jiHP`sHvYOxv8&YhCE0u<(AE=pnpMROGd2Jww%#fU>F?Sv|yE8O%%mf7m z`n`Byw`8@XoL_uC?T9n@{R&O_8p;A_Rn35o%_$6UM$7AHMyQV~K`i-!M0Lv{rx6$B zwUmB+M4#oiZ&jpt3c$qQYZt&iBAK@HuZpBr5336fulr7zbV%#*zgjz^UGHPB6t)<S z-+MJI+w#`%Bm$*4M|Rz^P#;Drwl$50iqf7P9yHk7x&1Yf<KB<c`|YO&d5tJ1f>QwX z<2w7d=_@r7{4GC3Jd3asWgZh!A<5ncmbpsA-eja@<?<Hb@3fEFLzn!?k}@40IUVq* z_kE<rDs0^_aAuvYMEntvHP(YpJX_@bXU+VC^_-CuprZSX!=YI{*3&Kze{)t7I-OJq z>dHpnv4{bvU3!$}B`K>ehQr>ih>f)a`he2TKITpVwuKzEAIDB}(5GbPA7}YgI;io$ zqWa=2HN1Bhx2ggde0bpMU#dn#FzD_7>E8>97U8=CY={VlEPLwdnb^!N!r;@^W}zpJ zZv95#zg}v83);t+0`E(bjhgAwRg0y;y90oThkHQ?6`^O_0`Nx{n5B|a@^(uofL>se zE(zmm9#+$$Dwe-m*T(OA3j&2~>_@NFhe%MpsXephol*00q+f7nu+Ll|(<IyVMz-|V z*W>_IKDRwUalXC16!an}_wY$C{L;7ACMz0mZmG`#sG1ydtM;mQCuP8L<X(1h7cc?q z;^+ch4qdHg_<40r1A}Q2ipxDn40YB|)Sz_2#MLEpQBLGXvB`q+Dr}k9A6yRRa`Pud z#3?<ki@!N37X3z&19c6q|NmFhrImksxvguqBWy*UXT*fhy!Yd_v~^F&*AA>`Z|Fsu z1u<72jy~t!U>gt%3fGqRSpeO!*yW^c+e5z32p|pdReOlS&S(XpjVq;-l6AQ;lm#*L zP-}SnHYPr(A%UeVpBC^f%?9dj8*kyQFi+SpzL3z*%FHVL-pF%w5qBLVy0N=%VPYZS zT0r`KA;8f|Ldcj6sD&kZS{%Yr6Qu3#YFe*#%tL(Treni9L!l%`z4Ol{Pcw6XbmT@{ zD_p3$$$7F4T%x0laaZi-*T`oRV63qaGquW~7bHx-FgxXQB=xwlIs4$wvSZ!r{<(-_ za-LkvpgL5+$E0p#rwK>;Ie#kkZmW<;iw!2<&7$g4?O{l{d!JxhL$vZjBx7Tv5u=9p z+l*}E9#sNROWuWTrTaW~lYx6+*SFf0*trT9@gS?~B~;#7WV1a<$~EzMRMv|i1D2cO z?S8O6Vs1=lkVOVsX)V=b3NOl{YHJB_*{wpjz8x~ko%5?IDr6gDuaSfDrFQvAs`RVF zzH$IAxPH}kWH&d6Y*VdbKWQ#<Q@a=B>sUgDrBfl05Dh5hlz+|JmL@zYwyR{bWAN@* z9vv1UEXL4>p+)I#PoQh)W_WAks(z(?_c_s(xmCzw!gm-h*8_m-sCDY)qDyoe;!%^l zRHj^TOKiAGQA@zaN#5h`-6}HCqVw3m5T}HEKx*}cw@I}|LJxq7@N=}JPc=aMJCysu zP;qTm0Oq?45D@4MzmWf3eeRKA&`Na;R_je}uec+_vTTkn37o&s6F}$Y#p)yCA<fKB z!H02v;7jbj!Cvaq`D3*IK$hnpO~0z4cuH%q1+^hX_X;BC?y$CvAF)!@K;TEgph@7b zYOetfon=6)jP(G@*Mu(cKH$}-?E-x|dx`y90O6_FJuR@I9vB1kec05Bo1!hM4?lpN z26sFq3wag{V!cWYW^;0u^XxBp&};;pxB10Bkbkk(`J)AQ;x5o!{7S}GC`+N@4YgZ} zKgUJmPB)(LFZuHk2`Dl2OH(g)CxzXz3wpHlKOBKz#A!8@O<>c3lUL_DN5ed*eGtqM zJxZZM&!5>Y+!sEEgBkn|UG0Z*4Kp-gP&Xl0N^_x*9{?e7O1qofi0s8K&DPOo0-JNn zljLg?UvBEG4gqkPTvDsScZRr`(cQm_yQ|T;7mn2H11^KRURHQdlmvCqlE_og&Y-GP zmYCU`c5c{|ZJ(C>qd+gukEN1C(I!xa4~WvJ4RnETdjY-8Z#{syke`6OK$WN@1%uB| zuQoqFG#d#jNt1W>_<b_L^_*(hNHsVKs2tM~Gd&DtFTUv|5GPW@qs-nq_V@ApYGkyA zA4jRKU*AOXE{?8@SGVA%v0IF)$F7q{WwtXPM{<ia-(3zHI8t{c_OuAbVYv!dfnX^@ z<(#gg9%w3Q%ODJBS#Sbm@P*KmG-aX^JM_C6!LpK3!LsbR0r`D!l)?Go?9R{26%N9# z4`}F)!@LBwfl~or)O25<0@;=fU+F3hR@FIh*t!~Y?<J8|O~@^^&F`Nj5uR&1UzkWI z07WGy0!&h@CRcJnX)$GP;OB$3CJO62yI^d9S(B&ED&aClht`JA^v{#Pd#J4@J=76= zEZ88B+20IF>C064(fafKiS9t4?IqJlYof+?c0F1a+zS<?95)?ZZj0$xwX0rDK29Op zV`A#G6avW3#es!An_e!33dO(iZ!M+Y4!p^aJ@|5hzB&w7f>6&T6y8l;A++T_l}jwJ zx0g1IDdo5W|KT?{o9jaMsIRVa&l4Z<t;v5^aAY>Z(=E1qL+6iby}=>gCM7a2kNF={ z-`y!%08knIW7@O-$3(vfgY3CX6a%GmP2cv7srfasO9>fBaGrxH(!AiL0iG4xfe0)V z@R{2i2>_AJ9R9{DuS-*z6^&2%<n8uPAWyf&+>M{;p4J)lQ#xlYv$^);0XebY92)tL z>FT~0SN~J*kITcZ(++z;bW<xP^IF@3`;R2Xx*a~<vw8L^!YArK*-B6?wKXdO<$_s% zr@rikH7&J$EwVuQtuocX(IP}|g9Qa!1=1|xvnet4c`6!!#Z$e0%S$%53XC&eYx($e zdHY%0I{*;nLOgO1K=>~jj;QWwWySvDJDxY;|H-)EO~XgI6O7gti|utPH}_uVnhQT| zZpmR?Ni+;Vozv!~tmxPdceS63!W>>p6PCa&m>9&s5`~lHMoTf;wC*BWp-uf?1+1`6 zaphV7iCE>C{>rdgC?ctH@(==Oh0kpE4jhVWD+APEpv#uJT0*ldMogGfm13P}VWohA zNY!?{vb8(gBgMV7@5(+Twb6e=Zum-7%bP0WA1iX-)xl8`H`05yU`s$7$?t|jQO#EO zRM#_`$84%|lsh3lR=}Rc5^35?&zRVx15JqajHPxCq(~bpWx}lzb-mC>y(=p~!-qrd zYm;col3Zn#CQ4w18+osR@{O{)>b6D5i74kdxZ6py5ZYTE!Lygrt*K^JHRZNTD0V;2 zhd9C()H~SASKs`{gsC^%&aOJTjQ)(e;)cH$$^*aN7&nmT`7V}rG_#@wsYASSQ`FWe z{;isoX=<H2wk!QnI(x9x%kx5QZ60YpLo!apM7a4hvot;u9p}JZh3kiYp|qh(5Q@-p z*P&qC@6Jy7GLg1HSrF16;CtX&1R~(YX5JoRd;22Al|@ninC9Q40()kz`sN@Y*d4HR zVI7HbQ!Ih^?%UVuTftfc9{V#-MgexuX)anI(Sh|NpejHa*44k`2%HZ9BIrEQ5AhH~ zASR%plh^$amryab%HtLgWc=PhUhZO_SdK<H%lc8ZT}+bN01p5fv^Y<{im!FS!k^cS zC@6}Vh(;+6w)cOyHf`i72O$bZs{cN*yYA2<h}+L*G-$t?49WEtgNv*if}&A(ckTk% zdK*#$%>y{==Yhlr(5SkoxbyUQ<%Ta!`<rx}4TpI!?}#NTJje&()0quCHj!Rz)uVp> z4NW<J4B9T69PkPayb20}*i*n<vzHp9r`8n|>)2OwpaEvlmtiaV@kX9ptM<E3rxER) zR*;8;X+(@sLsRTJqPR6qoGbtISGga$64prV`cZ91Z;~ncEI^xCZQwQX4pGMz&%Tk5 ztF2z%&db29I1&Z-oCe-$^UfbApk>!`_Q<)7oA!*bJ=B_l)*8%ZJoGmxV<BWc=g#C2 znLqTi`=*mbI^qzWDKEgP!J@Zy@YH<m$WfgbFmrNqF?s}WQ=O|Uaea2XrMBkPcJB$0 zikizWkS(5q>4Yk=&}vNabT?9^L6_~$wx|{x#^8mCuxQljoKv6kcGvkJd35*2Ev$NR zQFByJj*BkFjdOlPkcGwAls<C<d|4a9O!Zt*5~P)M02jGVnK6!+_xk6(;lPS7l0=)n zJ%;5VLgPEZs}mDfuW1oA-)JvqHSDRVC_n%1hg6ziq;#Qf+f)A45eO$$^?RED_1f1F zZLc|TIn(54x3`5HAIS{7YkZpc;u!wpVgH_o8}c<yv~{tSnQ{0BY`f<WJ$;U{80CSH zr3Acfw)*6lD<FKYn$kE~Wj!adR*Dg#!osMU`y`3>Qks<2kXjClDcoUaEI>H?4)o>m zgs+=5>hLrA|2<^Dn9`oQlvyLVjO*|wnnm7Unq*tDo}qI6_!CI25@gum^RHh=H*4ei zII{fjF_(!qiABI<iS3anZV%t(rx7Hbg?Hf#uP#9CC$_KXIvW6}AG_eu{+aM;HJk?k zCudw<5o~_k$UBknu+2T<gUc^WK=h?(zBtyO@q8fwQR{zY8Ua3+7^>*7s=RD#l|oEN zbtzvB=ywz!x6APz+cJ@q$ae(izElbQ-E26VlVs2xD%035D>FMOgR%twX|{;AA}mHB zZGvZy;nrEuFGnIPA|dm=hjX_W(Ax~`EdDbP*O;jOJJ^I;mDemA^N*>%@()@*>xx)v zx5|l&PYS`)n_JEm%MLvBn}PoIwu$>90!5PvI?lXqQmAI=ycdmKWL07PW4OtDLlXbS zbDp28bdS2n%DY;YMntR27;#_(mCy#FHQ3<PlsHXE9_%*0jhXC_izI?ylB4Vi>x>Jm z?nI<4c?MJxDMi7@=t{Wn5yAprk0@pgUA~vrvT;CO6m7}g_lgb`(LGNQNch-Nkv9HK zzzCK&m-!4ldk_Ap;ET36X$sWcY!}dcX-zf!W8c{ypN!cUg7-ro%7w<uy`i;~*)M}Q z>yD;0XD959Ug+DM`!W}$sQWsd2FdQEv~=p8r3${@4LQA0waZ@l#PHJEzQoh_A~<5) z&Z28oXD{Ki9u-Rb9aa0&t2l41@676)kf=P0ACwVf=7cDJj5ee!6qeaq_m|q)ej6&T z0Ea$g)w44%r-C3gwBUSNG}jr}q<i)U(xfZH%_KGU&DLEPhRtG05D-`R5^=<cod)D8 z|JS9G3npTc=!PVWC~Sfj(J9y_63?lv?T=T<+Kx*X?RgLi!1(7t!nI0g1~AJa=)_uk z1N*dP09x+!tis{f=^}-#AGwVsz{BrUC~%&A1-)kbUJwlX!WS0&Qgz<3aRS?vC^pIf zBMJf7E){{BZ8F4W)`889!7;cnv=ga3Ci-4BUOs(32JFjYQk7h~>YoK6Sa#Q=OHDsb z8NW+jxiNGn_Hg})9)@)g%T5i)Kf;^mkhMhh6gCcIvpbac>Xjw8Z*Be2bflE;hn}Vl zmO}gCAyh8Y>or$QPWc-bl^x!e8`B0A^b*_I-8AJ@Y6r)lMlZfz`~C!A@Md5Pkxdnd z{#n10WS7x%QGuw>hS&ESYhTxLO5U92YZMRpJd>b%jmF#q(G2SUgos}_l#5NOP|b=T zGsSwi+|FX9^6zx>cOX4ehl#)GCcZDo&Dpr0!5Ooi9C+?tDb$R-o9{p*K%%P@m<FA7 z<N2KE)l_fu0oZ-#$TW><Un!tTky&G)9bc+GWRJFvK<e+;OZg=+OGU03c&Dzyn#=+$ zkAAV@{*!XRET|w09Nmljl&GKqZ5&h!Hsxy_aRE-Gy>iABkMa`O-^_=~_#@&J!Jf<8 z-FB&FBrBuwNPm&q5pjsmr(YS_1r!eF>}_eu){CP%<>S7qIgxhk5faKWV1gAt06(%R zq76fbibe(RQ=$uf3XRI94fz?FJkA8!m+ZG1QMB_cEnHlP-cHz68(^qsj$5(g&m8>I z_a=ag_h~OlE_C|x`p0CU2afUTXFj(wi7{QhTlRU}sLTygugW`buTN1HkGS%PzPhNy zk4Why$VN(1qU&bi>-WaZoG*;}ej75>g#H$LopHuLO{$kXRNpp3c1X}<M0o@fp=eHo zgGF1ygQm2ji>B$KPWMk1w$}yk@~4xMf_giH<Ox-!4EqmUB0m>t%s<K+k4}!4XL}sy zl{tw|=lY$Vs))EE&%=7>klU)X09#06WB^(P8=}Qocl^FUkit#?M75Wr&87u`t*mxo zu$XBPK|uBx3sChm-w9*xe4c7;%s;0Xpz_N?rjo8Qn*NX$MZKzZCDY@&=#iJg+j-<> z&F6cp^s~ya3_GtBq<tyE<q_q$9!*^R4b!>1_#+#NB#pn)b^fMXQl%-fNJmkXx^yL| zj|t!yIxC8#9(`sZlSG*Ps6YRu=*+}X-2fodn5FI?bGHI#j2Y0pBtr6$GB_o=-fXP8 z4vb9!Q__Ovf%f(5)vs7`qxbd0XppC{6C@>8+DQwLJ5HoGQay!xbzenXp9Gg&NtMQI zUD17&JUWKzh@`my=6EcMCg=_1qFmKNzXo&8HKg6Z-bmHDa#GLl=G71s4pOvi)&68y zer@0DNc)PwnxocZV6C_}S|q?EsGwN7h96f{-QIA~^{rloLa5PI`)Iotm!j_<0Ti*{ zpzrOXg+njWKoV|N)fLK7VQY@RZgDlDd<b=Fs2I?BKM>DS7DI<xTvhB?Y_G89UteD? zvHaLOjURz=FKEKVHmAhY4zSJ)khw)&6ANw*-Btw2hK2PlV7b17`P$AQWCE)Iti;r- zX`7y&4|)p%60fl({5ZM{H6>CTO0`{C?6eYT94Q)FOk3D|oG~8G_K{uW<l4#YJmtRt zK@4V3HM;Ya>X4!>PMiv9aQ)gFfW%GwOnConEBs3D6KO|iFEJoYWag*t`M-NdHg~ud zSO6WaM7kRh!%ge&wAD`Zg^R|@G(;6C?fGZw3<$|K7|`$~j{>TWTcS7b`T>$F1ZVqe zbx^{xMl8~T<Y5j3%99?HEN99~SrZ}8Pj8PV&)iLTOtUXV$_-UvO=nTOD?>@@oTGno zLL?DYPZK@;4sLx1h@Qu_<=&@!?u44~T|4A{_`h;u{P($bF<lr=7%k^^m@jnx3$Awc zZEJO-)6cla+|i(^3$b+g@09p9?TNm<0Lt|UAIW8HpD2Ta0sE{@rE`c(1)$Z?)uz)@ zpJm??<xx-vSVAAUolKiBDwCee-f@@9rEb)eFX@VB?sp!FHP3H-v8+uti;Ngq6fgfK z59$Gl!0eT}+AaavWbhVV*Ed~;3t&RBIZ6!Qg4Ces#Ju(etyL-la1fq}etT1F1mnk2 z;TQyB7}&j@l_E*CYA<!=UG`Z{vk=TES-H9dJ%2~IFvDabJ+FLh=r>h=;*KkcI-P<d zW~J84Z=cX9(;b!-J`A(p$U(V$w(bu6G}#&8c6mzdZ=>(il{2J@LD)?arv~v(1~FIm zVLP@K$ZILIUJ=-?t6Tk~YxVG5YRW7;ffCSdAuvOWSc9<+@1jHyA)$}F%f4lPHTuWo z#XJwD0DB*oXgb{O^NNdc`&aCs-`{A9FAk-g7n3VR%j7PmSjsdvcT#%_OO|!HM=^CR zkd`50gMU-l`I`u8w5W;jEIxV}#QZ|r;FFDeo(NSi9;x%m*zk8{Qs1c#V<H|-J-`>x zuhR^Ghs&cZh+qJrzTqk#d;&lD-NH#6Fu;^Lg<mO(n@<ui@K`eLv-&P95yQG$_L=MJ zH_z_DINiUz{oBghr~i0o=V8%gOq@JYsth4&KibvPGw>**Xba-w<8d_^JZlMT-8l7T zl@8`B0lVH+6xA2ic^|>f2!x|(XMuTC0Qw9T3e2e5qc_z{2?lO5`I=BRKDjfGlRk#o zcLNKBZ~VNbibNui7m48NP>KUGX1Hc^JXlt{u78;%n0bp;D9r2n%Xoa{;cX^0+xw7> zI&&@VrTtN`Rd}!=ECp5O8+>o_L^&;E)z?xyz@!H68{De&IMTw&PdMIsfO-YP-bgbe zab7p@A_8LM!%Vazh}}awik`m&4g$ZaY9O{p_&S_Hgn0r@3qO(tzxx9<{k;_jWo+F+ zd};p+P*PB3;6RW4*^q}51|v`Z4tHH!hInWbOj8+eDn(@;OR!&&d=3ANw4fF&IB?UP zfI^>xYLzFiSd_Y6)G&q@4!?b-u&Hl=2%Vw)1@Bs5p8`FGj6u3Ab&_$DY7yrYqV!;> za&7%Znih0!?C5<J`*j^kAq8VmfE^$i#UO1!u?pBnlta?rl`@Y#t#Z*n7n@@RoWPq` z94Gy%%)xy0fL2sZNw}{Zi;k!B2Nle$490@yMSM?JAm+QEg7=Qi1Ls;=n<pB6=NV)^ z(eei(c(%NfU^-M(q`wgn%^}(!aLeIQmT#)QN$;<?fdzQ%UtJ*>@_u6jp6)>|4}t#t z#{?0G9E?hs_{Dq(859sGb96jiVJ2n70T-zSY--HH(pzTMp9yK$Y`-Bxv~t0d#?=pE zkenqI<Xy@}Qc3Y~bPmbbYKkAn7TS-9@siw>(U3YOW{(Z&UPibdS&A4QcM%lpUxI6P zt=k5!$bK3MwHl}q*>J7!5;Q2DbZxV0zV#(I=gBLCN+9*%$&ug~SY*p0wgJt7<PTJs zs%nsp@tdR%(t_-a7a7^NRE2?3BH=z=m6l6BhTU9fp}_JhT;sM4N@K~@jj1}wl8`je zzDR3u$Mof4Z8Nx9^NTb#kC~s1^?9m%xXt77^IM-9<ob1Qa-DOJ%SU*11$kluz01sd zI_#An{f>TYmnIzB%hF_c{9zzh*$ae-?YzN$b>pDu!5FZgySqDZf(9^cb;BgmKYnv; z;IN<ivzRep<v0mw`)|LwovvLb68D@*^+dnpCo@yab%l?0cam|^aqQTr$4@-{<$G65 zq>tUZ5s-w?ORnH^p{npLM4Z=|wqf~5uyZVU(yb=XXuk|aEY$|u#oBf4^wSm$#m_4< zwVM$Rrda#yI!|El-s#(pDz}TFK$XD(F)o>_org}{ou1iH>mvW%XRp%_a8bab<6mg6 z<!{SX>g@EXFcY)#2e8oQUpXrBo$fn=?;Drm$t9iYc1m&U9myR8FUG|Rnj?uT5=eR| zH`dk&kSGlHDzW>4Ka-qy&)NFKy=x%EIsk_OvV_uUsk4=;Jp?s>!rOfTAKSjY1n8>U zbyE*X#wGQ+8A>_!@$;=B+DutU*74r<nZtw86%dCSn2QEAYxzspdA0AOCz-uRGSTjn z$<)i;=q$TYg~LL-c_wLGB;9Hfnx?<0Z6HvT8VG4dJ~LUrey6(jx#I=%NeVpkFGIu3 zjfCNWnGm`7?25@yzItmF9P!!rQ~m?COF*U`Y6Xqx1eB$6gAD!^yvTm%y5Qqhc~3=> zN*kj|9$pUE3hocLT|uyHY)yQt*K~+Q-jv_6gHBAQis5p`suPi`8K=;;m_2ZU!}$VD ziv+cGrA}Qj^nB~JYiWTbhBQcvEY;4x@#AwWKhs$jCcc&bVckw{yW)Vz9MG>x`R?#s z<oD<bG{0Fm@e0HlaExQXTe^T4ZU7(ok7+Z4!50Vup%zy=Q2XBjH4L8SA()IOonA%W zO23!(=o42>4)@lHg>4#uZ-Y5fjYt7>$<T|#@(w20(L04N)=#%)d!`m!fj)7*gh>wS zUP9W%8h&=wREnzoG9x$LyEuh8DoR$RLB1ewP;&8++PZ41>!=6#OH*iF>eu^@8>M}c zp}=!aZXi@?0;$(LL~@7`%oG@U-Qj&r0v;6T6!w6Ie?xQm9(q=@;vpS6Qn!q}GZ`2v zEyErF-ueCgGMPaD6^C3Yvaw!1d?Ao+*4o;dXj*@HeMH_JJkA{7WQb@7l-(|y>`Q~) zfh0Naij`j)CVLUhr*z}d<m}y?@&s{q6E`Pr+p&pKp`>f2P2Wx!?En-Sh8UoM<E2@x z44Gb*S4)_0%Y-N_Hl1B@yw7sYAfRd*m?^~a!t`cyJ<YBUX-#~0lZ+?aR{WZ#TwA(w z4*o+;2TZO{DzaIwcOyRXaO2SveD}+IR7hC8>?5Yzh>DNmN-i91|0=NM{0E);ozeG_ zWo>V<F4&&`4`QNQnPxj-?pQMIuAv!48i!8UzL@?4<PVJBV!E)XK0tp!OVj3u7efil zsw<(AqYnMG!v&run`x>$q!OABxqOp*W_npdigMf&Rz<j7Q&*c7XJ!0uR`bj10RJ@P zJraf;t_6lmCs%DV2@0Az4=poI3kuYKSA6tT=(Sy!m)F)QB^dcVbt|@q8mpvr@_8oe z#0r&z#)2%4Pp*L}0II5-=AakRNpUc6H_Gq}RG7WhqAz^zZu~f~f*w*r%cy`*`a;el zs#WnP*Jh8S<vl{^hY1x&X5ZxCH0W@hFXMEx+>tJTq8EIq-~aI-$r~Ge?{?^mBfqK? zVqS@NC0&OyU4opb+NijYX~o!nD-4dS%8sXS@zM%sdtW=5@oXCm*U7CKa^Jl;e6car z7?@QifAgV@q5-@3>}JYFPgc=Vvwv>cO%{HS>vC>!tl$<u);t~f)PJLZqvN8PGjxOF zbX5azX3kvF7b}o561XiOJ*%Eg?7?X$zN={yE4(*^6!EuRC@1T*uK+Lr7z_1N#%DxG zQC;&DwL4cz6rE3_Vsvxiqoq}*B;Eg*wd_D@`9G$(wgoi!y*r<?fvS|`8LhOc(FHW6 z&97d<*MS{*f6rli(ntop1KGtG(Y#5mti1vantO3#srKUa0p5RdWMX@)BfZzL48Jk_ zJGx0LElxJRvUW4(s~dMmy*_DnrYiK=S|KZg*={kFy3Yv3$^wTCq7?q19sOeh!+3#l zEf)>IZn&v;Q8tRSA3yPMJTjl1R0FN_{WxkHogRdVhfvWrnz(8rp!C%TD1LZ(rIH54 z2&d+YKlBBjGXCgjTB&0?P-3)(uJg2*Zjs`cC@((l2K`ut@1XU&C5PFEXFH}UUp#3D zoNq)FK32V}7a-~A<JeTr2Z=!13^J}dz=w{r9yca*oLijx%NJ4)0L5IDANC&O%G&r4 z8pP)!;lN^CAJH}x^-NVSFr4!QFDHbh{A~RbKM&9{+#Q4vviJW!{Q#{a>wj|C`1~`m zE0}2Zlm?nzj6j0s`yGpmN4I?TT7H?zpx)3=2S7CTaQpR{>Ba)V1s#_ddxPnR5ZMA6 z+$x3?T1|p4eo6kh(k=fqe6lHETuP-+=9cJ}F|zsuBn#<UONAAqhzVY&$Crm@^t^$I zI6=v$p7*>Z6A%f}0Y1CffDHX_2+mC>G-Dzk(6H{hm(qLVT$>a6SUTMpr5_WI2|Mv} z?-RP=;ABOlx?AzgFWj46h0&F@^9BniADBbEW!;wKBB|i+DNAh^6mjMh?apGCkJ~%J zp(4ipr1oYNF7>5pcB*(og0{L##dx<G_aqA^M<>tim2P_>{|j&9Cor;Ek0`q-Jp<g| zNv63fyxyOzL*6;m!W*N}7c@{<xxs%-Uv|)kr^isUny4ttQMy8ryQbxOx*P66!aE5b z(v(X6+o~X|=yYebW5qwi!1t-?NcHSdt#wrQ{6hCB?*lGe7I<?v7A}nwP_-*)(Ekw? zjk-#eONp_~Oe&=rbc<{zs@pqQ<ye2Uk#bY^hyxX1ii5nmIiH0{J)(feWuK>Q!s2np zVI=FkE6mS>U&65kU$9Oku7u<mS-Nza(Vk^_<>ZWOZ$|8&O?1F%1m;XDFcQ}%%yxpJ z6cpcz2|xKeJN}O;<q42g*v{ch;fk$_iAAz{Jw5g1+g?p^<=2U?al)cJlFaBSj!^Zb z9Y_k&gVL3!O3e!M6+Oy{rEB>q3}TZ72(a4;$R}tTTPd*r&IuJq4MgoTSlVfLfO!8c zTlV!vT|XDs-O%6KsdsUk7Xsqy_hs>w0f6}vsYgr6M{spLv>jj8Xl{?IlQxmA{h~j_ zcVAyM2%_$Fbj!}h`0M{+sbhEKm~k7%xg(*RBKVpmM+-)8ZHVYkP2beGC(0o`Mh9UM zy*KIZ#|Zc&-F?(coxSoTx%0uY{@#M9Q}Z33K<{5ms=Y^QZAQH_2ZxlbV+yLH8VUEH zexrfyL@M#oww-H_LOw#}0zZM}H`umzd*DmW|HCcB|9$l5>*yDR0(XV8$JH0$ep!u) zZ@NOCSOSNIwdgvW>FT2glI*#@;RL*%r|ZuUGzPYynGK0=9~|!JxZluah0)?&H$r6* zEf4XzCKvy(Y<b{^!;YCSPyVU}b21y%5A7uQ)qknCufARMrts!U;HEAAEDpppy*27t z=O9SSCNQ2o&%CUpd;3|?xvRZ&)!*pjbJM^|{Wid;dpN3l($L9muf;+T5xo)Y#$y@2 zM@7Cr+ZOsFe*gcrUR83W(DVv-&Cv8xnvKFdt~Piu_>>@LovZ}3hnhYicVUsxh&f4f z>;`z1g+PJYkg_uoa@m@YV-L1ScFJ+naganmI>1ASw7OPPQqo>c=~93Q?7i0~c6OJ> zOqsy3{?;7smM6%<%7ER|Q^j?pQ!NegzO0hQVXwhSx@Vr%M?DKyOTM&J+Q__g+62g7 zcuSigCfE3p<XTbR@~$>f_6mb*rwtmAyk8Sp<i-H2UWf|?-Nhw<CV~a&ruFvXmKV(~ z;`GGQdNd_jPciPaB@e&w*qPGB_4KI6;|Q0cFXIae5>FhQt+|&K@RkA7m|Y*J49r?P za>++^v<`3hj#Z)`r>d6q*WFtHTJse=5>3BV$-gsW^MvEKtUU^;d;wOACaFv|zk9P= z^d<hw995-?>Niut5p|pbKbI>nVYkStQco&EpB=mds#Z@>Qs74#6Pe)-N&wpUSL^74 zl(fZ;JhkDv45}`sqLa_ZNIEESV$Tb9mZ84-81fF-u&J$sx?pE;brhBamk^cT%A#p( zFrJJ4be{wK<2G$d!YvsGz9pH9s_jSm@~9=tKDySZZ#y^AjOt%aOcx`V+Kv+j{6LdU z%?8TS5=RdJX6DL&J%b09YE!y+^LW<^61Q}X$;(-nh19W{29im+?*mIe7uTJZ-lX{E zj<pKSa6Wvv>qELT6&F_$yZD7tpN*p~P#9YasI1K+7fMx0C+K7?C)g^%n##FXOww`J z;9)Oc9wUbRkYuL!VeG2lB*oMK3{B&~Q0>87_`;erT;8ktO<+P}#F{D$Xrpp$11|;* z2`Gx{Kc-5f|Mz9;O4A}rQe2X2ldLAXMCwb!Z<5k<^k=V6mYhBveEPp{0?2BHxWs8b z-G`s*X6;1=>>6;AQL@p2T^3$yPv72{yfc3_DEKj&4XIF$)TQVgPnS7euOyk>ncu`* ztV8r;6N6Zum2cu(ebH<?>lPN2<n^Gx)+<>J0J2BmC$Y;+z4Hg(wHw;ks(L<8y5Te) zvMIh;|CIje;Gz}yJ->VW<x-`!*%A3F1tlpPkCLQ<wChVhI{}a-RuDo{CqoVEYbXOL zPWB>yd>d=)NBEi=p5MGB6cox|MwuWUP0^Z_xB<Z8Afm=*_=NSvhBs<f#VxZE?XNK& z1z0lq^SB97L08BA_2Bc-imV6nV-_{<1E*0fxpkAvR+>)rXg*uZx(`-Rlz;tFxr9!2 zci?D7Re}?BfuFMGUk&RovJ;1CJ^B2R?ZTGLH-_qVC_iwGqLGg&oCC?5YR1F1Z9^XN zi9^`Thc8ld!y~`%9h9d4lO{l5v2&m90L->5$B|blVhoma+hlv&ZOiyQ<D%r?J`K~Y zPiNF;24QAJv;;j$Z#PN=N=x1vHftZbRNqwJ)FLM`;3;|gY!%|b-nKdAJW`KhnEYNl zyCil8(s0?}cEc4pW97dW)1X_WZD%L?;J_enSzZMi{kl&~C1i>0;+$kLcoy#gT&4fZ zKmJan9ks4E+*kBw?e7~aw)Ode;z=1*FQqfKUt19Eu2E%s3&3+G6o6;akpEvgdNA=* z4Hfw9da^QS&a1VED+pTfK)an}Xp;x;<U{=z>w<~_yTd)|?m$#Y_0Wzu&mxS<d5C>u z)8QXwxUvy^Ze%k`_X-|s#!@2~zk~2ivM_Hp79q&aydIQ(ot{3v8r;FSkYeA6o3&0< zUAB!F`x&`-<LpoJ@w_*5<S|_2!n4oJ%KhgxKRC)16~t4Z;)3Ml@)udSX^o+^kBtXI z)4@XfJ*{EK-PV9&1VU~&=2PGTEOAo*3D^uAC=ERiK2_t8j>Rjsulj`ZhNiojf9CYu z>Qdj~<c}cdB595tnpI!lh`v|2pd<ze94lVEET^T(_3WBK$Qeb=uFblF^&WTUpnB&| z*WWZk^6n%a;*!I_U1N+(2&?{HJb}k;1Fykd9DCuDZ&;R>R6{lw5k|IwU2PmyKx&j( z5RY6pc3o$k>%$GA0(zP7oE5Z`-n|(vI@sH-V7ahIV_$z7ex+~g(R^y(57b7F)_xWI zD1iKr>G*6L_dlj~pnclM-$20ury?s)7YjOHdwjjaaQH-nDa$3HKx}%JCxEj6QsW;@ zL0$KUm+M!3Ld1Bq&kKCZyjAqsrQZCs59q8qns>F0UocdCNbv5c_M+a&{CgjJgvxo0 zP(NGl%5~Lx@&5NK?01>Ly8<YN7$`8i#p0Rn;TU$#m*Uu#CVi_Mh%p`Oygd>uZPcu; z8`Jg>YnADcqF>8<u1%dBpcmVO)*7PyF0Pn@@7QmSOu96A=*x3=ee~VOxnp=)L0d2_ zYjz;gHY;{h(TfgYiKqlnKqgSrrN3F=8GSBr#$$?S2F2&QZDde)R-7Y#_uZJhL<q@D z@)crh5Qx_cI@B!%Hl)#EMU(D9-6Q^)*O;8L4YsO`nZa><Z&qzzG;0T8CN8F!zhSXi z(6ycYzyXj6cPr1T=(rYqUday0D}Sn<S?s|%^`ZZ(wezhX<i8Ox=b4)QPNSyncA^B( z8GN?&5}kRtlf-K>yrXknj#J`~sMh6Z9wCT(C9D98AsKaX@hnfP)ltx4YG>5#?bjGn zT9bWWZxkqfktl3$4+5Gbktt;SF&hl%Gk*KOb%UjumLg&vQg+v-uSIKx*!!^+rU^~F zy3KO!^D6`$USEK9>~81B8moKQ4u5Oo%CfE<dXB&-EvENJ8b>IWuclN63?cHY+k{XZ zk8$BP5EGFcX!$Jf+(DFHRg8H{%>ChYFOTFU#b-8!x}U#sABt3)JrO#8M=zi6V$?1E zTi;IR8v3BPWpI)dzaxaRgRG60qLvNEvs+a|SLe!3aficyp@{snbwGp5ZU7wf89;>F z4f_9%_Nzje>e14lQdtcesROYu>dH@ucYLg?x2Bg|8LbxCUH*^K0_5^=BMJb)=$*e< zHYXSFN_SJW9%xPMY`ntj>fMD~a$&V2p*N@Cf``vFbor0W(z=GiOK3etTj~V55Rj5E z#{eqU$RS3LhwU^~VS4)4`7cqo^uB|-M8Q!(PTp-gBUt;VWwcN*o7;8#Ui#Fj5$TLC zPZN@jq-OBNJ}_;nVAmM-sb2|#_4eP*3WZ8inu*efa<7m{u4$!xIM@HrVwypUqaQU< z#CYLL)hoY4P<urNTSehpPaX$zJb}Os`FoHM9MUWw@py_RXKW9#RJ|A|UqLhYQ2$p? zr(JUy@OoAGCJ67!`PH{&o(i1hY&5)Z-$rlmCcl4EN<7OP@;cSz%cN&}jUuwOH6YMq z2n!*}#;aX!6I^0&0ER6CpECH6p?mo$lFdo*jN7?aY|E>-28^yK(4PNOI2#PiO$rGs zi<aRXHuMFVjhiQUSRQ(B_TJssl+)_Ezns1lPz@)IEn9FyQ(xUmaS7?7#vf#E5;wm) z=Q6sfBJj&Xa}%9qUH3uV@Dawjl$dP(ZC4Q2#yVz0QDJ&xW#MLI)$JGY%wP7i!gev% z6&}G|hq__jPrb@#F4gXDIMyeYtKRJtKFg$AQ0s)P2jYEg6fc^_bqW=@oG4=N=NC6u zQMJ0FqMEpEYUtCZLV?5}U0gF6mxeyJ8*k6oIN7Tn;~t&?K<osrZ<{gM>MQo+w9uQf z1{p{9hVBV6POcd(!?FzdXX}BWbD+4dT3{@GlQ=)Lp=KH!r$BCML&NXhpZyS+0O%q~ zsN|P4pGTS79R&W2X6W4^JHn*1^=tirlFbw;DklGbSq4=-A{iwpYJ)x+pqvWrRw0k< zifgU>yJGyGSO~EW4`Jcm|CqS7ElI|{by-B&xPo-^ktZY1o>hgqPJp+2ryEd2Us^jO zc0V4x1zi2YK#!{=Wp_q^_H}E(n$ng}{2}?3S6c9Mz}=pEo~H^vIL7au1(F(NOfd+T z?rc=Tj)H*MtHBq9j>A7Q$3dU|F)2USoB0p{gMUPN9)aStANaV;4shE6i|&EN>BgAT z{?J|lQEEy<Wl+|4P7w6#pkI<h_kDJINBa@!_OuaH|LF^s_m599>VRT8XU2ql#Kph5 z-+U=A_w!OT0$VOxMiBlZnc^LHa9_hETyp_4hP*e}HY%PKn~$a73KrQ}DnW0PQDbkN zHRvKOzD~Xzk^EAU@qX%K7X@^fFdzKHUC06@vqvc+W3&jPAz!zPM^3G;8%&;CTimPZ z#!Kvi<9*u`G%YK0XqaA+d)a*Z^?Uoy>}nj`b4>r3`jv`9cnzP@X7nUvDVgO3#~&xu z=UCL=DQ+q>NB35rY?={7_;fWlgs)$07_D%kTIKqPuh-$ne_g}IhOT~sGL-@3M}tm+ zQr8SG4VWair&RhT$(jEp*c8Tp-xr?xTLRYd9w^;}O&GqM5!CkZp3P<X<DqJ<nORv1 zGjeo-e_*?WoaLoKIJAwZODP9DNHy^K5{h~_O@o&s7{JyD|AwwNRH4>wudRdiw`dhQ zcqg5^{yV5xz3;K~m1nGaBly=V?c!2{49Q>FRbix-;7ecFj`Q|XH@A@kyB`B{mAhep zSM)7q=9vAz-0N>b?X-1&hf}-a5Nk^DLP;eQW_w)ou&J>odRzCo|DU76N9cRmK!#n1 zt|DOLRd0y@U6SA%Rspw)=l^xR;1Q@mSvu4X2WzF`i7Byash`{l0!=#MJFf|m=HRKc z)`o9_-ZM1b&a5{RMsEB)IUXv|-u-8sJZ~b#T=-kfQca~!zfeBKybNQf#1PTptl<g+ z@wHPb+b~``qmWCJVd!5bxm=GJzkLDe>uX&h8@DvOs+=Ml6J9Cly_S2W-=nW59^xyk zxRQNAG!wd9NKp~c-^+ZG#5WNT_)4n0(6LSUG$N*J%7Dy9sXYEv^O5EmazpLje&)k# zVEIzLvs*!71mONal&0+hdK8Q3cFJYo*G6{`FkL{28K)~@0dfs;&T_7{7czUBzu)#9 zzn?^Ct%~oVD#g{JI4=Q;#Bz7V;;kn?Ro{bzznx{PK*yrEwZXIOa=|I*?Tjm5-R<O1 z-b~ZiIc+fu5?jjC8ot!}S2h(VtX)RRIBUWibWME(l0&~sOZtqku&WzZb6|B3mCl5E z)&6*q5W3_!@#D<s!fz^Xw*w`&m-L)wN^)ux30@w$!~bV~`&7Ko+%ZaX1}Hg(N&lD* zrT*hK{6N#4TY&$-q(_jCh)0zM)?aeWn*@jT<rnO<&lWLNep>(nOc#L;JQ_*^QhYtw z9|E_5GS{r_DLZR-D|YPVM(0;)=elivKZPQ1<LOS6z2R>RPD*mAV(~C}SkY@E>-qVT ztoarf{+-aU62;Vfw`TY2J2mymlNzOl?C2rPXo&G$-=lmlv|87ZGTtAc(!ujrQRk62 z3$3|$5rOKf-d++%Niq&QrGKW8Kb}hkyHs`Bdqrb?h@0G#>i-XMUm6W{8~;s-B7622 zSyI_bhO&liNkZ9|Y*{8`9}H9WeL^T=vV|-|c80M}l6{%%%*ejXlw~mHet!4=|LQr< z>*w6(c<UU_xqjF6{eIS}+)|OvOVn?DzaR75Idgn1uwRu4ptIszjSE6V&z(aAo!@5k zazkB;QHx9Vv-rC^SwM>6wF#;A`<9z0I!N^td2ytvyNPP1+jB-8o3-1a{L@50SGOI0 zYyA+;hBkI6(|J|p`YmB<`l%klqe)B$UHXa&20Ads@x#oUN+t2~f)Jfa&;8T3JFdx@ z_=%x(tjy0c+7ZOTi`8aK9KU_aK86d)4pUAvY=;b3?0CQOp7luQ^G&I2hOgxddSHPG zjhUSFxS1r>N(ic>&P=T(=*CR^7ST(01bVfvC;U+tq-c^}g)8TDh0_oZ8cISvUuE%_ z&JTRM*S)_hDM95>N7(O+LxHXSTr5zYgnB^M4=T4ObI%ZZjEk&VZ5I+h;C2fu=L+2p zdC#@p8X$3(1F4#ZVL~6_Wpy@Z*_~X!y^o%yW)l%CK=m58ggF9;wlfV9^|*`HkQzB= zOH+90d#3v+s}}@%1zu#?RC0|)-^Z^^dP}b~Hl%OoGwOAGt-g6pg)>i8avpvEaC~`3 z_Vk(4(^DyXccHXx0RXt4iZ*X=X{@PfYH7<5sgF>|v;;*zJTHcPA-N`~j7N1QbJ~X) zX%pv1Fm!JNASEeAVa*PR?`FlZz4o+F3|=C3W!zs{)1KYHw^}18lx6fBdp|EMJY%2h zUtU-!WoEH^vG(r!TI*AH+1tOa(+aav0B+j?2pE&r>tbejAPf(FkNla9>;^nAc5eyg z`YN&z2N$?Zj&G&l2i~-6QhYB(M;j15xO|{RKtKZrzO-NI+Qs<`i*mPfi&6gVbh-b= z)Ain9&};KlNOof%P=OXx(n>_e_T`_OXL^`GIP&#M@}7IV@WxylK;|T{s1ptt7})25 z`4xfFCx-0x^2}fp#YqiFPoS9~p!$z=jxXJxCgEN0H6ZZHNgMAe<jrZcO!j_$kmzrD zz2Ui|lZhPD)fdhnD?G)P)cUWioNh)T-!Djdj)8}M=Df&*u&Zl`sWwi-_J)c5Q^?k( zv`~W&Qx?Tq?>2QbxL%@-o{|Ug_v)oJ0o_kb+gB@Vo55FEnLk(WqZ@BngacxA@X}&j z-YsHp^n3=YOO~^~4p%$h(`pk85zU&WmegEFks}HANlqi)D~M%yoIKV-OfvYMZzkEk zy`wjYHROab;Xj;mVnU&=&^+jvPBi6vKi|wRQPD*@Tq?ze-0Z$|=K8ogBS2X$iv*rX zc4@h}QymoLH?jW}fB?sU%u@Io0Z6>*xJw0lFC%+ygkOU_o|M_=ts0K4tSeo<YsCF? zF1X^g+E@6agOjE3>o9FKhPJUCCnB}H(h!#RougAxPRfN=4BpY}vq)^00ZhX=WWX^@ zi#eHqcaedcw7?s<TPc7Ad&}IFi0H-T-L1ye3(N{s-glfxMk@sAH|RapU~-6U_J#BB z-9WJedn-uL3c6=Y#70nV2PDSjaVPA0U28CpzH}K1f~F5Ve+IZ8ko+yfB-7qT&d%1L zL%Zw+oAa~kXCAX8*=Pr#nbW$>uaiG{D2w~!`Nt=oljFm#fmfXKEic``)@Vvj)FrM= z?3YWfzb^`UDz;fULI3oDdaiX9lP>Y%css~LjU6+!iXPjQ&KsgnyOO*^a1nJA-E&es zlN=6UJqI%<shClPNOqXQ##pCpg}l}Ii%m@rU;Vj*`vX+i0H**5w-%CWBEn;rG2ce3 z0?Ny(OlBmN9kp6-OC+5?TYN;q@K7F-%;T?(P1#4~T~9DnHjXroPiQ_a1j-$UK_LtO z&wJD&8<VGwgIVJT22`E8PGVz)BfdX=XIC~a$#<uTBf%#{a^gmn=rfXCaxu&x_VJ{s zfpyuo2%CM=H4F4NR`HzA5(7Wh78+re_+)`DtH;?{aoz>B^>*j){~j(#DLQ4ulAjaA zNoz4*rt+il^`Xs<jV!nOz@l_G7j39lG66&fQza)7zJmun78XtpPn2`}F7b7^b>8{? zjK~64+JG;IQh={JzkroOj|7PIs_u>~?x1i6;=xc3<WTui-Bz&lPNUZ!r#m;F4a3ec zEL+!^Cs>9LF3@woPJSdXP(Ffb|6ud&I4R_l>B`wB3MY+z-3M=JRDplmO{?FZZkpz0 z>|8OENCuyRn8?<~Q($>_Y0tvB(Hs5m(xacM>I;X1S4<#_f(K5AZHnDi+*xjmn>)KJ z^fvJNzd)6>tx-2h5Ss9}$8Z@Lr*tJmr^x}5Xem9kE|aRqTD|f|?%wbtz*#$_CT(Nm z)>0CUHWtbX_-eVq!x{FKNsrQ>DjxSa)x3S|{t1qA3EV=?B1PC=-Bfx$pB1~GV_)m; z9wyZ1erffAI_Gi1HjJTcdTa3t#kS0C6muBzYuZ}>eq6!aW7K^yXTRtdckMntpSkFi zyGQrP>#_sW+rM0N?=T<1%QLaq9Zmz%PH%hp8Or?&)|qX3_=Smaz-oxAI?#;N{TQYS zu$d=FDlL*!Rk9S`=!aKl+~n`=xvT9N`gMNL`MPbz)b_C^-2O)!BRbTMjJy63wVCbG z7@?wDCY{_pTR&K&ObE2sN+<-#Zu}lK9`i2;0K7$&&+BCo<^v^jAKHb;UoUYh^n9CT zEA^Qm*^Mqwue6TH4}6^UAGhiiZ7jb+mp$@z=2J3DZh(|43!pUK7v{8AU#H3grpoh= zYK<<hXP#Ur?<z1fA-fKW`H~{k^DB3lmV}UC;-pGgrH7itWXN8oYYO;;#t+fgP+27l zV<$0mQ-us23C~9BYvi=NgJpAlUXrkAwzXBa?{u(fY-LFD3o@a50FSyn@6H?~o&IQ4 zFN^(#EGJgvdj;*0h7I6FP?4?jpk5t|$*AhdyERsIVX}U^I?B=-A}T4oL~kzor^>HW zjg15VC<s8d%1O}%%$a9dbfcCt8=HZv#xYK0_@hI9;P#gM34@b>Y9w6z5TXbw`kcf) z;I`|W-Jc@5FhnDKjk=6dZ3Geo%Dn{uW(*XSC&6JijfKctgg<`OYprHf=-7z)-(?Z# z`~BZ-5%rL4S!EB+>I^(-D1UX>m_9dOKKuRlNK|tM7i&xOd16&d0v^VUZxaAc^`OX% zSk2@MOtYMI^)0V+-}~2O!imcFMcXt;M);UW;;Eq@-1pmN)yKvf#A<5)y54s4E(A4F zm3R7ZeE0YH!KTI(bL@Gk&&W0Nat7?7*$Lt;Ov@$sUPA-YDDS?js;H@e3u3%77|{(# z(bZYxz0bQT`OoZBRvaGQE&|Mzi&AgtNnIhU4LNw+8<_4_x0#n&rM+Jljly^%#8WJO zdfkneGjBXVnG`f5;=(!VNtjr8O#p*SZD?Hahnt=Lx|hvWTg(Ar+vR!U78NFoAp(~| zU!%$;Vr=&U9qH+mihOOC&<|_<!c5caXTzK~>GrXia3z3+k0BQl_$adUIi3X@vH<LA zoLX32YezdHw~PJu25z;aULUSr81{Kxh%ewD8l;0THQf6Er9*Zi@WE`0=Yc*~_ir0Y z3rNLj)VA~54;Ve2(5A-ssvij?Sq|tBVYws;W-GoHTW|OfBG((_;N#9hUU7-Ihb~d? zjzFfCsj+ONLK&6^_u^n)$@JwFHmdWaG?6jb+V7-NzJq&5RoJEXvJ74Gw085Akv)Hk zWNtg@rha5ts*r4|0I_dztFep}wTCkGdva(F3n5>*xJVh?&9Iy9msmi%cERgnqw~iY zp=p1p)&!r|(*}1DH-0QUB~U+Rl%j)9HK0zm#LVJi=+n(0{@>en+7)nT^{}P`RKDl* z!o`{A(*R->#&Vxa{6FL(jB!9#1FK%^#DRVfw^_|cm-i8xrF*?TR8dk%#C2j|2Hw-_ zz*-~p!|%H0+dmfDO#&%jiw;$FD}j2*L$VQY1Fx$St$qHDUJ2^JaH^;i?AeCDkWDsZ zrKLUT{`{!!=bn<Sli}0#*eg#ZN8=H!Wd51io;(pb-53RS{VOiBM<0BfKnDZr(Z-~s zUi-_?D;os6>=h>R&uZRla`eWF2VDK|ZUdMKa5!=e07_w)j58;u_lCG8S5ovV-BRVI z^}il_Y!_SEHZ&~NvW~A`2%7wzr$}yE;3a8KC3-IlhFU<JlUMTkq}LUb-rCHmUv-Ia zFN$4`O*FBL3%*z<+}ua266#p-|4cN&OTmt$#_k;en(hhYKJxU(xVgzJnO~g!!1_MP znQ>brStQvhSySZAxwmgFaI}A)ek1ij;(QydzJj9CKvM78Xcr|%T1^B<2jb_woiuK9 z6J26=Gkiw<5M6CKg!ZZv+3x<`oiBG5#dkh7Jbmr_&ZaLA(ZRoeOEQgIQ*P&mWI1Tl zGHBw))o9Y0X3**U{Lxw+cGt$J&k$}wjE#^FW6++g@`f2z%!?=2&$T|p+&M;Gq!E0u zv5-HaB8`IGBk9IG&Xbu8n3Z<isF0OLt;ld|T~3P^?I)a>NzOo0$d~|`Tq414Qu<;F zwQI^C(Xt`J@f{1V>z0)o>nKXT{9FLDACP>T`+OSp7~XnsMfjl&<N7V+j1;EfLi;+V z4u-hvr3RM_yo-E1`9rdgDnstwALcY%HekJk#WR~)jyv7aahj`8>DTy+`DNouQo-?j zp~z19GtJ-avFBLI={;;1*;XhM9X|WOARIRY`z?e_VUb*b@qBd)8OrqwUd~D|;Awt6 z)_WxOntl~j>^*8H007OvD~A@u8w_~5c8_ee?93tE@^0*ttDH4;eaTqCwymmBe>lx% zJ7WV$-i~?HsU~lD=dFOjo9~=n+b?9Tw$P%?(U@p?3x8KRcb{p^%%mp<nrw9U|Dg%u zssx^#2(-B?{!H@J;Bf;cVGyxf)bgh1y8WI+=~1OLr`flu{njvDgPh@-CfiYix~k<* z{=!0&FE>{O41)4jpCw%3bM<?3%SsYKt}R*gP@`|**T&53?YK6!$IMbg>o~>Q?I{<p zOD5Ex6{6`K`-&9`zs%q4$;5Gc*|O%(Fe`Ua@5JKaJ%%6?;!gC)h`d;nJDBOi;icjX zmFhUvmh3|%$)0uzilsLb8LLy@Jc`!!hCl)&pY(eqb5X(#-iRn4AAeVEd1g->%L68W zeAhk@`8){75vm-H5|W-kd*U&iTlC$g--v&;A%gFN1{&pVz;BoCZ)6{MtWlf@f=r!< zhw0FivsVQzS>NLm?s|EXFM@~2TYU@Xi9zw7b9%Ezr#Ju1TuI7tclilC2){IyR%<ZJ zp)den`MeJzOE&?W-}4!m8Yuvo>>rwIZs3yEVXIHa5$*Dq%jd7d8}K+zfFTim{|l4^ z<DrEfwAP0b`1=AmW^?1cO(P&5NUYes^XvTchZ&{A;f;Z&@*Gk1Qs-}Wb`Cmu05@*; z@&0TRA(LwE_R&nCUigk^iPa%1^S$)$Y}2o|=<DL5>=OU5TyWD{7Ja!-M}5AWN(oK- zGok`#K|fbT_h+~?&ZR_!5UyyD#_$Ulmm`<65(|@Qo@ux}pb5W%A-2>Dnm--g7AD%q z)kOxEP0!Z<UJ-D57#cU(DHdd+OR)Pfqmy&JG&^VG(6dZOp>jI<@z*;^41GS4TjpCy zWK5a8d-%Dwbc0rIMZZDsmyNN-)!F`W1HjJ2Vi>#{Pps7^^7I<fFIw1pWC3^?w2_CW zmO(brFJ*EDnqvlmC#zi=-+3uEH|=q5lPyGtTR}(kY(=DvF=2_~;`4P5rbYac>`-Cj z9%wqdU^{nwi4TIf(Zxj@aPJ=)3&YoT;O41tF_;~)GaJa6D{>1_t<EuSs`gD&sT`G4 zD?F&eEt`1EJSo8&F>RjI4^?MBd#4Wx_78eI`Z#LGZ?4RAxGh9H7}cZay#|B>2;SA7 z^r{P(G}+s!ovsLfm3Y}>G^wR}sd;CijlOHTV%s6Y;N$L$JfrKUh(AuPo;0rOw+2ne zT)#Ed2aP{|NvpEncjxVDMa4I&+6&m}YL&75J!q}<6gsS85vtW0E@0rPr8g;~G8m}o zWFW!G*{)zuaJhO0mu%-I4k3sGW|&rTEaa>(2x^0huVT^{i1~*m^A+n!mdaTeWWFx2 zF-xx|RP3h5i0H#8f6c=4f66no>;N5vyrJg6Q@G5~>Vn=&&)LAjn`ZY_?}3-Cf)L^C zKx0t#h(F?j<-*yQ-%<p$q0pT5o)h+G@R{V;f%;{#gzjV=J+*sW{&X6Z@oKfMHs$)? z48E?+=j)pMyAYn<cClJw!}~@YY3>I?K9JN4VNcT+3!M4-Rq3zE{8mGtl}qk!;hJUf zM2*H(Kb@d>@fW30mzUBWR9aOXu@%n+etBpeZ(OYR_b-=8{s-0vwtmzDivsijzM)t> z3az~i#J}gNZT>@JP!qE{@RWO?c`3nE;L?L#+C*ffGjc|K`FkRC!ut|+sTKyrf6S7# zgM#paT0MC($R|jnZ&PA#rSh8uT-+Qq3v>h<x$m8r7d^LqvTC5JhF_I5NW{i7C5DEz zJAV-5@i`ATdc+&CTeh;jcGqm}wMdpxXb~n+=LmyWx~Cl-{e4E@f`4f0GT&&hL7jTN zZ=QaAHRAja&Ek)JqbLb;@0b=^l5i70YC1OeFzs>M6Ghig1g>A^s;o)=Hz_Xa(T?qA zxEFDT;thSrPv3+P1bKzpwjvPt#V$CjLC}|6yBp#un}OMPOXluaW^0c5{RYIc*^$r5 zXT(k1qxPoJ0H{}h*xNz0x<eCU@U_}ADJR}FuI;-2P_pqnO!LRA$+x^A>VjmB{s>k| zuGA$!RfE1sJ<fgEhzTf!NVFJtFg&+tY%z9mY4M8g_Z+%D+V5MlZSLzz-fv)9ki%S7 zBjQv(tLEX<NE670MbgNCSe04~N&e~{Xf|c4ikZ%p&bJti+39%4V6{-i)5o9Di%YIE zy3E8ZwA#0ON!Ha<-(c;Bzio|#CLuhy9Pq^&lI|Lgua2i#m-*+!M-N=xP8N^4GNbFe zv^LXXR6PS9t^gfvn<+-ed;+Uqx&Bc=EU~P#g^s2@Xxfvy*Dx$g8uSOR<%yF&F3Hl7 z6Ap*1Co{2TAH-@)rd{7v&qm*WC|c|a?|wkJ1H2=j;7b>Vfx!MkDnG+A;_Na37{z4Z z<oQ4l3s}<7sng1?u;f9*VbF~+ZT>aJ;@PQ|M>_ZDaD#z>p&8iB;xe;~7rVWAwq}H) zgYPJEo6P)>7Weh-1B>6IY@vv_&YO7LHW<NA?tVrx?2U}~%x|I77Dzd@%uz1}x*Idf zl0~gY4wxX*o?dnR>^r*{D5Ddviz6#Ny0uH48BM#4;h2RO;4K3r%QX_^C&2f98#quq z@QwA7o*YMbqnLVqn66K$jdV|qg*$PWHiAK6>~1roA}G};9N#9=1W!@_qXz?=@Gmyt z8NmsF<$IwQi`aj0XB~blltpDj0NLkH<-LJ>ycv+<=p++tMe$EQW7xnswsyOQ;*UA4 zQ@H4`qPwyohar+f;bPD&4I)eJg^81}-D13;=A0ID<@?az(A0Pez0DN18wBVRy8J%R zc^DSYyPIeP9wI#bjwavVT%(?ptI=iY<zY>8G^0N!*GpzJ$G^X69rdp06RSUf^^*jZ zu|ih?Cjk;@WWK{(Jin<FX>Yw)->PK$;76;@Z_^_^k>*M!f^77@eMGidysQ67Y}`LI z-+Dg<-qyON=3|(zj|Hqp-KsKc56Pj+gK`wl*1GDLo93etG}`|41Vt(hIXOQaLj2p; zkeMx#_M&FOlYOvBLYeFEj_8(6<69MJQWc2NLhB2(<l*=>!R%Q>Q~d=3?eN*1@;qVU za9`|r;Fj8r(F5sw2JB6Bb@k^gpX$lcU;BsV9_sUYK`oe-b$up@8kk??e&h!a4|Pt( z$lapc#(FdMo|Ezs?kc!Uqxz=o1`w|t6c0H6Hn_8gnqM86boyS1VyilKZgLJ_jKo2} z!JPmq!G|0|EMG4<)S^gB9wW1|fGa%wDs&f%wQ~76HH9<dnezQ0E9I5-s$p*(f~uJJ z)))&|-ys0zScCn>_l6vE53h=*B;8$TQs;vRT^tV=<wd(QrwuFQ&_v*=Y{a*#!+&;f zJ!kRt)dMmTzYcT@v9>p)tPW_6$O!wq&jdsXdWXV}RY0Bip`B1eOXIksUgcVIDDo!T ztwQyuG&@!YT~Lro6Nx7trV$qGP^cq6JH6i;TwsC=b%MdRLnK*V-`ab#GF~s>>1MrA z(|PFW_~#PS^3QLV^j(LPGdHaH558mx#h0ocRH!>!yI=m5<od$2b-#?F_QLbLp@Kti zSp(t+2M{Vle|InGdB4K3(Q4Swt7nq^+iFTM$?BSjq2V3_!8Wwxz0p@PufG=3z{~f! z)G6|;-JlabER_bBbV)7cr7%|_H|F}s;`Nh)%^;jr#(N*@97_V9;vLGgTgR~vva2oR zU;Y1rn}QnM<ZqJi_ZjviU4M2a!HP~Dnzb@6f|)%%O#7?#Ms{W-3Dl!tcBfqRJ%1F( zrOJ$0ql3s}#(n!3B;yWRu-q166;m08f=2vSDQQPLT3ipI(Z{aYr9NG-wVs|uANlpt z-5k)Dj5a>F-VBP*<0kGU)Scd=XoR1<8qssEZHrj99^@p@74m-vqKQ!SP^QP|`q6-` zpcb^}--S85hkunrR#7nd>ahwif|FU@5<Rt7lFf&bt#U~*?7>E9-zlZJg?b!Rb%^#O zWFql~rhRJk4Me*V`i~V{n43Q8^Nbw8lF0<WwFY0lNInK6Ip=jKnA1E2SyN37KKfu3 zBTHQa+#!74VG!cX(4zT!!!qsAQr!Sy^>E|Rdw$2OKr3M%TA$>nMYO9dTVDW;fIU5S z7lLJEslDuXdL`5Lnuo&;gR;NWm)KF{ns8u)`(k4yW63+c)wGL0+#0|A?G)xbHamQm zIl7^s?>M`|O~=;Y_nuJ!Il$%B4BVks0aK_Yb$0ieAWFFH#^2712QQP~fGVMxWhB?m zyJSdL3+yi3an3!vK7DRuZ038+q$B*(3z>VB(m{BZ43Z=^k97ogWo+~Iug%oWMjV7w z%t!12Vec&tycZBlP-oS}htV6V?uyr?hZtR$P!GRk94U%w5<%-??KsIDQk55QN%Czb zW2%~y1-%KnBK>P6S)vyZyk?zCQ&@^9TnMusL|mkvW2N4)3a1%WyJi71XlNn7Ew|Vl zfjir3dyBu<;J$v>nnPg4&O!#hbiED8VG&mW=ZoWJ(zVCA*Y5w-u5kDZi0iF@N*xtA ziG`IBnjI$FEyUkOVo31H*ROJ@)ruQ=oh(WN$wm-lll(FJNFIv(q?CXCKQxvBudKA# z4unw$TstjK@*(9LnJqEMTf?pa9D|n=M^j@o$^&w^ql<N``YUxyW|FP+dSnAdg`9+` z9P>VQu1l3h%Xx)jEzX%OQdS);O_stFFN~CQ{~~=ZZz`^wylhp40P|T4*pUC!2$&G1 zqbFEdbD2MRkalgnOdBI4%m2eL!-9k#q|4d1#qTBqzUb}LeZ%GXt;EIYm{8!~29I$= z3)e|s-V(x|Bf7n5J(T*IN^)QRR73u5EX%m)eY%}+AR8HC-(#pYW<<77D$bpFjBI`z z9$a{zdXs?xQ5oXm7k-~;7D-5!mV#+J%Qz-C_H6drT|Y1rl>F|c{u0TY8#190TEQ&U zDUoM5bDVhHbb#rPe;@o7AYP4eA=;nOp>+XzFdo2&wpz%>OM2lT_m;ja7pZiM;c&0Y z8P|DX)60*vuCfGOtHL+;!+7#-AxbeNr5l;%M~caOP64mdUj52>V4_>>0DVWfL+lyt z#WUG6Zv53#l=7R^tk50zg0NCKh9i)FNlO45bpZgs<AF^lXX6`GKtGI0efm|BXD#mK zVXyzb`H;}%399VIiOm?<yOW>OT`9UJJL;T4u}Og`rX+XI{9uut;+Fo{e@aEX$YNug zl$e-kP(9Wc-S_A%IE+?1cnV2GJ{+Ym;aQp8yj2uVI{YLDB|d04AbtbF*Z;d@`FR_| z5-J)kjc?<$Cbp%|*i0LWK5}kKGbGh<VBhfO`7Qxo*XKi&ha<ZxhD)}7+TYS{?8@%g z(FOZ*8C-TIWT$tD_COpRNsp}_{e1gez$jang=VEXz{c!A(Q$9F&b#k!iqDe*bS#!C z7Q4LGlaCMc?OF|EFdi4FQEVUu$BbF5WDw!g4ic-9?}&|9<b`z~a^B1AlTGV+J4h?k zu~E55N3UaRd^fLt9dqtgfF4>fxOA)G%g~Y4#BPA8S4fxmtG6fN^&3~rx#)|F$OOyD zeQN*#&e>5n_%z!e6n0r|wyxvc^Ji((0xdfzv2mEsmtT;RjJ0l5)M4X^PL`yWPr0S` zRTG6pv=c25zdw?#Q0!UZ&TW+ud7PQ`u85@g^)?;o`{WOuYZ_uCyUXb?Q}X**3*thp z(=wdpr_nFt!bKI5YrH^Y5~)vH|H5$3UTly;BLHc=Qqf<|{CKT3TYg&gYwZP&eZH%w zxK?9}a4<;_6Gc(<E1#R4vni6j>Ig*ei6O)i`M;*D)FyP0-;y|3FF<7kA<xEkGyg1S z^2$%S$e}AKe45?3FA(((b#`#FeGmJ3o-DB#7wf(25Sl3WC!WLKwl($%uh+k#xnN}P z&Xd{hkhMs(;n%Lc!i`2h@t>v9)FGF+0=);@te|8M)<iqnJ9~hfvQcjq$o}bdqTIzv zp=}9!SICLoo7jgyPb96c(~U+yo$<R$YgMBnh`u(>1Og=#4{%^I3%1@pyERO8)}p7i zl8<>pZ(ZP{{^chswoR&7hj@iEK|!X(%^$NVsKZECx;G&mtnU{q!+4eqyg97a*|7xW zQ{^3VA8F~LP)=`$S!7oW|6i0KMUa@44Av_1FvD@5B+>}24tYz@vDy_hNrMiZiN8+0 z4>PC@&CPJ(?!d^~q{g8BsY*NQ&pdX>{obl#)Y<34i$Am6o+;e>{%32Z&cM88^p&*u zE$4`Zdmm7bzrF!7uA4bwuS%Lknv+F=OES7{M`mo`l;II_n^>gws==5itdP&CvC<cJ z0#v`xt8H3a_rpL}NrF{K*QgB9MkdQ3>NT=an9N7d{K4hJNzk)zr?;ycwR3**+)0h# z`AdOJuLC3D=@Yf95M#@YjWQdX0xMm&wR2{f+DVrIg8MJoJjVip5t7=Lt~BrDzuf-V zBWHmm_lp<c)eg#+RbBDGXy3!k0uppn;D7STWcl6n6HsW>l7g7Wq175XbXial7^`z0 zPNDyysrj+F(se3u%lCd2yccj?`?GRsEN?NJDW>a<dgfj9>`AKd6@9MUIeboisv3|- z<*M-m#WdV-3QG<^4FOr&*zU8t9d|v5>o-?68WC6GFQtAezqRu!^Pp;~$s6P*B#a@c z$AB@H8{WSh3!e~6e46&qlCHG8Q(N_pZA>1{(}i}zDMI;M<e=VFv_tET*g4&$TZ4Dl zop`lreV@?mKG823wO6%;o*IyYSQ9C-_*R3h`+Hs}uWghGGs#Zu_s1u?B<5e>^k5P~ ze=?lgf-Ku*hMQ@O+w(8o$J`XYW}KvEon}-5-q($hKO9p57j29+9M#q(%zuEhKV&r8 zunIup1<jaQA57Fks#j<FW(+=R2HZ-pAS|9kZ}sBBS+hFEq2qn+%#DVrvFwX88sY<M zyD}Q8ek0j^0BwV9Y#ZA~sa<8gxS=!<RnyXVQ8e{Orgp%^A`S+woe6Vkl0?rq*}UtI z-Nqr(YhpE1*+9~UFqo&qm=IP=DIb{aTogFqJj_7}Z3J@O26(+tDD6WEtQ`pJ_d!8h z270~$LN7+kVfdkGkV}~rG0V98!V4Yxt6mKCAz@rU$;jTs0?3REf+Y)HX73SUmh1^b zKTO@8+qHd9`!``#?K;c|*)4Rfnz$A#e-lXemu&jE=#pY2rOQhdc^$^=MY%^x%9E~X zLl}=$$%i=^z1IqMxIgD4=4HYfAkxYxiCrcI#x8lsQ)TN&E<ZNDd5mj>x`ryTrS}Ny z9eRQ0oYix^w$%B;K^qNn!xHgzr=QEIUnhHps2$R7u&Xsq<L&%zW=Da2Q>L5-hkjFB zL9Wjz=V@(oxd<3em>==9s|MH&Wh>m(XBA)U+1^q%zCVzAJm53rH`Rn-*ih$09YCwl zppt<l6f13=<z}O=t&HkJqwi;u8*Y&oCmv~}pZ7UWlO6USa!Op$K(4KO9)HA-FfV9j zrA(FDPuGuKeNlaTnG%iPwP9yKlpU0A^N%iZ_zBJnrY}JvJA=RJ`B0oL*i+B4fpNqf z$-Y~$0+imrs>J{4d^_>>HFk6o3Mvk9xngX1SwL7QmOfV-TA32LG|UE+a~GE+?8u*< z`44(|O7DJm^z5y3J#q{Co4tm<^M!IfvRf$^5&xOE^QF?kFBIY{qf*yoV<fEk`P11? zC$3HP^QfURVoo=Yw>NVuxYYFOowyNCak(r0LvvK{{Qp2s;19y$ag6l(U?aoH{rP8l z{%x8=`#P^zX9CjQk7l6d6UN$n1v#R0n%H~iRW4_ftPuzy7DQi=Le@;zmzW0YNBt#p z45v@iS2e$=oGo@CA*95m-uD2tS%)59Y64-o5pwFQB7*@)dWxwJL6&)wAN_OBW2Sf_ zP)@~xX_nzwj-e404On7h$&E(jtj~7P^e4n8sqSU&Eh~R)wL)+=uVk9&HKpIe=6&K{ z2g*Fp43-gHInts!V=g$bznQEcI<-K4uitS@Zkd+)e1ZZVa~+|Apne8zj53u{*J7TQ z2;b9q$BF}wnL2BTy-Gf^V1snX568`5x^m?fyM=BNGs}WKOJt|F4^&lydVLrX?>_C{ z!+&WaP1TYDr(vqgdyF0-;i&=gPERMn7k<@r@!q8qoFkmiK5CKtKu#~PBS&^ADug_) z(JsSEDF!Ah&i&0#b$+nW^BHx!mUx6v2_^A7n1lrtTCImDMD*b$-Kx0ZYT?+3Foxd? zt%e4t)@J1T<)xE{nb}X$1?ReU-3tc0>m2XYa1D403`-TXF*fh<lLs`2PjZ-n>2I$$ zqiF2-2Gz7bOZbz+mAp5HRU&%?Y*%ZkSj1M3u_05EoEp;iNB3NCKxcm?b#PC8hF@AS zs9*!<0N;D};Y@NeoFBT_9WIHU@CQmm!*c69Z!OH_$IO3z9(=juv(EFSi&(FN#ZepG z6cyK{v+JR4qJ2T!?AAFJyN~QH1ms#4+2-Gu(#;GFLNR)ChgBWtlbMRipXC~O^ZT-u zLGwU_K7e@QM#Jf{dTPnxilpND=!Oc5T>}ZJoKViZgOO3~D+yXO8u-jw^dkwitCQLv zMOJ1EezQ-gbt7<Gf9EkV;X+148Nnd!vATh>3WvJv6Bm00=UXI|&9lFa0rn)|&%Rt& z4umJqlSM$xgXId1ZVA~z@Bi>lC*<*@&H}pq(*N04%1bvDtXwe2vIT3)&QHNv92F2` z*}XE)s%tH8B^omC=lf(pf5}xJ&^-gtS7G6#1goDU?q;XuL6I;cvowqC&z-4+=-;<g z13ycEqM-}vq{R-U=&BN)L@>m?@D$cHra1m3)vy5`sP||19>qgClwjWNsn~VWLcaSn zV%9uuMgwwaD~(t4F|DSIzQqYbW>xM7_=GL*$n759<(llRFd5+Eo!Nd<O}PZlw-mZP z8XJecS>e`aFXq9WHXDqbUnurF!NoxU<3>7(V^50+$RFw;%!=J7VLg6}wi>=y?RG$2 z&ENO1Z6S&&%Toc~98gz-no(CJm#UHr2SY`FdTK=a_#$q3E$H9d=?%HSg@u`p1sIxk z-!WL;PqDQ(M8_I8#Aro-#J}2>XwZQSxt`^lbPhJuFL`s!*rOI=`>D2)pUGiiDDq-o zD!JTzq-3Nnl<B^w|0x7@FjiN|7tH$kY(a8z9i>M8SVB%?cGV^+M!wn!5I9r2x$~tu z&q#JS!8Z1{Q^yM@22vG#SvMN3&y%2{O+a0>(&cU}6^>cx<6&LV#B{NQ#fDFg!tNWI z?e(hNnF>h0Q&$@Vu49|km-p4<xY2^i{7I|k`WOedkw^@eB1?2xwQksnOhspYj;k6C z%XGgjP;w*6TokXKh@n?8c-hcGEpsomF88|R^JT7@VIq7lVQpWXJA7D4d?hHvay-8| z>9?4t(#8*@=Xb~~j1wi1pdwkaWqiW|#rFLTJjmz#KG(k?E(q#1iX?hm5n4BGYuoon zr=d$$ZkJp4)@$<*L%O9^TAg{<$Qh*`HJCT@ZMJB6UCN+uEFBP!K<02Ff%l87DfNFJ zu)b|#`FL0YocsR_<hQ{fV1gykg>IwjsR@IU*#+sjcPnpYCIT4sROOB-lJ;67`<3T@ zTCHaX6h{M-UuGbQ4pi(mYUd5)6_PUBs@%E5*?=|t!Z+(-aBo+anEC6`D6Qif%GNMz zbofnpmz|25nuOj<1$xTBp~f4P!8eW#@MRkqus9Zcg%jz_4S)|?bF8~pA$zwfAnYZx zhjvSo^Dlk2u6XQeT>VC!`3LAJKB<K#4x~ZE#ehK^kW`&-bGmLt;w_Ey3(H1UsL#M$ z1;66Y1mb}ry12{AZ5jTGxO#RL1_GVrb7w>NR@6C<mhi@<d64nw4v^rg`c3}!3)Y)H z$sdG1U;*V`R5V?B2MQU$3M}has_K-HoNhuKqXc3TJtP?QTg|U~`bR|pvI1I2P+@YR zZ!IAE>DRQi#*CtbKV?O=5=4(C_b+huP#|)sE))kZ|8tRvJ-2ou;`M?qg&`o=zSq<5 z;Uw(-GA7oZrC!-GrZ(WJ+*yK;Y=-Bj8mD0#Qp=VR==)h@h50N6tB7CD49d##{WYh% zcK7TnYweHip-X+wK7)7UpBri!*NxANddqNd1}M#T@tz%D6uWVB5A1~==xk>mqo|Sq zJJoxo!O5Y@vRS4wDQ6ogWBr@m=NCVGM;R7W%Th!?Z(40kfdys8cK2t`KGYE_B46%w zN8AKf_&6wp8odJ$<}?8Rg@@SjIyOd&yydv}&cT?TM(7P=W&#n?A1+4z+eekC2h?Pq z6y<_-9NbCk&`0#=l5?K!K{<$sQj-QsB2A1av|O7YRw*z4MH=YKF6v#u`Kl}k-Duv| zEsk>5pZx1?z#WVNo#lJM>_IVJ1ta@8OlN{ovdY0lHaY{hs*jC+Jj>t$){0BReTb9m zf%gAXB4tGc!mCvbNg&-Riv9AIA%o%AizaQoH4gc~TW_ZkpHXfV_H1OJ`Gc;-Ve&=7 zD$~uuu1<M}(O-QeN=M3qLn&sNiP(6?WF<kR(FWF{QQ(!ZkH)N9jj9vR$x^T9=9BFW zM!`9!XV=G=t_9QG?!SOG;1Ay@zE=I&7dC#(IA72-%tpBnT($8q2W||Wi5JWhF)IBz zB492)Hc&cgDZRC6$JVpBP9bpPLdBi#%T7#JJ-8kmp8HaOHZ>svmXjdcNmSjU;6S1K z>Y;Xh9pve(BXj5A3#fe;<_cQNB_M#IXG0`KU^ekK|A^qi<4Qj7p0Z+6Y=qiPcQx+G z114mAnyvNBjDbqE^auKf&&1zQXi-5#TsrWdtY#d#qseOhJXtb#R%JS4uuZFVWoh5v z^^8606n$WDXNg9#yM&DMD;;J7V4PB0vfb*YvhL(=kk<K%G%4$vYSLe)N`IUkGm+;_ zfT5&i9dWWqF-Va(-K(^ABztp)*X!QZlMq~qvCUo&D?5@A`sBzwVHD*hdQ-6N+f}~e z)Jb-R$q(l5=Ak%3a(jNs^x!h+vbNf1n+M5v)O{4$^pIl>6m~o)o<Ft+!Yqq5Q&LOy z%Jj31t0)qi3!B8AU>V%Kr`j?T{-6?M3$Y|nr*1C~yY<F7fhnClhbz*49~2nW4Sx;# zXbu~aXGwX-RkJ%(7UE8I!tIoYrgQhVQgN8GzqWf_p0}{w;S!{h*gCm^!f7K<DegW^ z{QOFy+zqkxiSuOKm(l0fCMwn@W$M;TblMt{#j}NjwZmrhPj<lOy&-bY#BQrRgmg~> zY0<i^)qwr@-R(YYKjejdTg3<DFozPi?4p_C_i~TR{p7BQM<wxIQ1_>&b8JnJ%&sHK z#z+^nzH<xlM+GR`=#5*8=I-G5xO^A87K9oB0mevOX|ZVrbemwpT63-eIIaAf<8F2= zI55O5s`i(qp>Jwlk}(qv5O$M$z8k~~(=W7y$WgQ!$Ek~qHkEaOdR^exyetg)T=_0b z>hTKUA|oj9Fn_Y2VIw9%f9FCq;x`D3^f+StSF?|zBgdD+^lQi&%f}UH=`WiGUS3lj zoxaZ=S0(12#?5rdj#mN~aMT(>_l#3nmcj~T_O&1)XS@?)06Y!e*I;%Muv??TD)>o` zfnCaYd-KxP+r|12Tfa22tY*tp0JD+txD;yFn_sSPb6RY=M&V5n;!!%44Z{Q<sV{&p z(b-cBLBwdXH8r}D6S!1FfJ?<=EoL9$&AOgBW1A8_=*6qU`oiK<czubsj}SYcZ%4A& z4wqj42m!+XRI)hi4cXikl{1h1a+`)dcGmw>ka-wapR3+|^6VtDHbAiWy{MeQwIy@V z5&(Dcl6Fym_cz448IZgT1!kU0Y!rTNG-2+<UGAz@<5R4ATXBkr^%1k^eCFF}z4#s+ zp77T`K}j*;+LZqy7nx1N=j*hFcyVuZw}VXObmWVW+b#!tHlZ*Ra<SZ59&2>a9osyW zX=gvSqtn7;TmaFvn;#onC#|#B%c(1asaR;w5B?nn2=HhbMx=om4o?*!C1DsTo_K+s zAe{*rigM*3*F;EilBUsh?Pw9V6*|Q6+Pko=IHEn)T7Z?#dfkq1^uW`!Cs`bu%F&_V zmF6y}-#JVI>{-i1ME8*z583mx+Y!K+9ea9zjPZ+oDbuai8&}ny`sRhkI%II)==_#3 z<raqcvNp^~_>}Y4w5@e{L|I*w3~K<Pr1-TGncPeWQv)$V)Oc&gJq>%V@0q8pu$kTG zIx1K@%RUiGAnXGU70xL%xEx|;^(ly7C%4&a_0Oj$8fQvVKkp$*end?K#z5RHz?}#V zMkf=J_#DS&G_Yr<_&R_4s{m%9*t0|LeOaHo1g~7?9AD)evn<4GwqT|V>pf3?&~X3+ zH>17rN0F4E3Xc#MT#SlQqBADOVtegde01TP?jhDjpYsxtThHLj>|{WVp)CNAo}Dl_ z<t0!S5Kc$pPQ>SG_1N7dT@9Hk_i>XdVArk@jZ^!F#)~??HC|f9iMQ_=l<YvbLVO^h zWgd-hazdGSDg8DqB|;fN%ZMZZC%Zr51-?GETURFB8mimSe7gDL3LxMQGsDIl4A`?- z+RRzT8hZzTKa~r2OQqh|0b<)L0fR!hH|e=b06uY%ZhD=~y>_lBxQ$MwSmgO)@AW;z zKQw=byX-%rOvwH+xaFf5`XX_j?#B(M53-ag!#9JxhGDBM{E+I0QdnSluR8yLboO(R zSw;ndmzEJ!>aZ60el2F@=N`9Q^N-TYVX9jZBjKVHJx{se-j?0yBHg8d63q>!+buB+ zVFh;943$8Zc_abJuC;8>=)phuQ}(s=JI}Xj``_+fcnC5RHctm*u=8$bRg#O$>lfEV z20H?ccNc6vQNd#{0K-n)p*+sxCa0Fn=$6`Oj{jPmzS{kob1z@;!#U=VTrOS9$+|O+ z&b|7?*-!!bzKtrei;*O7KY#?yli@&ujaTYFH1J*zs1cT*Cow=!2iJ`owJ%P3-7iIK zSos<AfJd!xKt0zVK-UPvLO>;4rm+n<jbeRV6j$(ER_w!8^cA2WX#x0Cg7e!eKj%cc z)ymTi3-!%?=EPDinzbXoPH%CK8I}AHkG`HcpK|dU!8hfiT2j&T6UpuaV-myiP+PfT zjQkBW&{wCkYrVc?Hmh2ZmOFL>aFhl;VYR~I0u~dH?61U$JB^X>Wr1()^aABuQxdOq zs~8wcKBHix{^Yt`pwPHctlO0?aNWqZG+%f9)^B5+lzP3qp_b9&@5I(%;l;E0O>^~1 z7!Hq0s9q1JttAE}`b!%b;N&-?*fQb-g3}hDpU|Fp(N1R&FCdEJ56pRLpP8p~MyDuS zyQ;)HtaMY+IO@4xPGD!urV*w%j1_pX*!Bf598eR&lW{M{dd%M!O^tcarE2=G^oyi1 zw3w?C&SZPDlvrZFu8(dU3EdpsZJ#_05Py+trI<{(kfQVa1n8(jFwByVdXXIaaCT_p zgGM4Xx6pb{_bQX(hrcR6=;4=HpJePjPX?S&obGDuqvDfjjetYzi_^wMzlH~{(niza zZjvN>?O7d(tJ$ysABY;F>@E0X+JgSnQyS%%-h0cjYc}nXB=03`?0&QS4(Id6>TkXV z+Vn{O&*>BY(3B7QtJ8zw7dKt)g=izh#|rZlf=9(o<tsiq!iJ#uHkr@p__c=28(%_$ z1ut5rYPj`Zy-mlSx(5V3T_D$c6T%z`dZhZVA9t39^8HFQRSxJM>(+_Vm`ea+lYb4F zS262_?jSNPF!S=E^nnNHB{3-S)qXH4n~GP=w5+nGTIuZ$VgG_BjqMBwh~ydX*!qEa z(MO|T&yd3&cyZ2+TEXW1mj_iFXk%}lH?avN5e{xGuP5@vXg^70t+J`=aW#6X1euK* zc`YwzoG+BsEOO@0{H9_rRSh+=%AT3`a!vW+nnG`gH@m23()I`13vGyZA}u}|-S$7d zhn8xXs>aee>WD{tU2^?XeyC1tTI^A}NP6T3{{^IV$IS_x3)(pv_Bi4PkfyhI0~E8n zLb`jyrBeF^yKX0My7b^jb~+v6)vp=Gnh}ZWY+!GO4J*NvtP-mQXrtA84NpiDTH}oX zf|y3@uwg`Gh=)10ivtru5MBoPr87*mcENIPWBakmSGn?hI^+l7w*eC9HS!9~`s=!u z!5BsI%k>hxs^z?=Q)&a2<MV|TzxDI1Lrt>Vm>C*S9o&ly2rb4NI>)zu!>#r~F=~<% zDuyMCGvvr8)So1ltlN$44Q4-_lYgwkTe@09B+mm0dc?&TmlSEZ_4xj=GvC9!7Ztiy zN>dUP=|#Zuy07RCI--~xE+>28dP11<P$g-eGVjq3kN8B@i#?3(+zIx{?U#r#l`<d8 zHaQK#F3n1rjeNYUJBoM!X_*Mf5meNnPPTo}ay+N3*FnjTqj{&kz*YDkuH8V~F-UOm zJ->Nuy<p(P0yMnaJS9x$8t4PJ=+(HYt@-EE5JnuH=MA2Wgp^K0vLEt0x|uw1(P97E z+>{j6$M9+r6`LnsPg?8?3$hz|oVISp|Io^6F5_0M!J2$jRVa;NC>PiAqF?}s(GA3| z!deL}@O>y0((nDdcK5N1SO<0GgL<+(Kvg5iK7gG;8ACajPLZr8yAu-CK^B`cneTe* zW<voDRmXO;Wk-aBSR{2K`Pke=JNR+-tQ+vn99Y0~@#~fTX5SL<eLo-{9OEsL(<Ec~ zR6qDFv|b^VL>A!HImlsm&t}QG)IlpX{wZmSMuD|QgFR`-mlyl}K5g8PZk43TzaG=I z>wvY;0f<;F(kPkPIB_BR`DcEwp&wq5IM0POz<WnNZ8mQqx;boIVK`<?>9!(!mO-&y zB&eAux1p`KxLZsPhosYXdL+8^wAGJ{Z*xpoX}@L(IjUaAcGX&U!#zuxVnW|Mwx*Md zsG_Bdkz(Nb4#5b>&(n`?2iV@)hql>hoyBr|6w(!qF+cCFwRK`j<?1E0F7hry7L@A~ zh9q0rGBe+ON_;9d1Vqia9Z)2v+)&p@z$SQ&989_aMcPz1BQ+-czgHOUpzR#$GVhDS zK!+Ck#|bNda%`<L<Z8IY$1m+InMdZ?y9>OPLmTXAx0Uu!ODaQTJ8}d~WEt!{ly=H$ z+otN3bDz!TRmWQkha)RPw7CdEqC(2R_nm9k-8HivE<ij?_c>H-c{s27vr_{WLfgbr zP;2xi{1)`d-7+@}+jY{Fcg#B_o3|Sz&XYA<Ux9kezd_9{5_|0U$Le$ZofD`t${A*x z`4d;e>&p!TSc-1{NR5zOi>LCD2YNy-WJOn^EsN$TO6K%8m-t%TxY{lH&qJKHX4=l< z`*KT>mjD#V{?ITsHg~7etIDh7HA#E5?=AZ|HouO3hbh3wzS4ekBj}_tqH1}xP(MI9 z_(fYo{P2L-yT@r!>b4(H_too=(c89_Fpa{klb6LHj#+(=qB0;PHug^?Q1O-b7ax=& zpX}SM(>6{47hsij148nJcHK>1vRx)#Nk@hp@+YjWGC4E*$v-W-N3Y9xi2~`Tg55)0 z6Tn7v+HfCFzk=Sc8EsKdXgo(727jr_VJct2yIRP=Ie)+kAmod8{-H^>C8|X(+p_lZ z&)Hpx7@J(FtApf(K2WJv1iTGY(ZAuEz&6)MfqVtp)i8X^6BO?&H(mUSb?I|M{a8O< zmMco*Grf0g5o70pid2&zgC0co)-FI!V6O)%jeO2&&i+jOfTt-aT`Tqn)ozb(s<BKQ zlr2F;rs{JBA1x?uiliB39rN#RO0F?8U>8~21u2h6fLAo5s>(Z2Y5*eojT518mGJqU zxpB~`9!%ZZG8^}_C2iR_$?eq&?FSZyM+cSM8>oE<Q}Z*)IcuyW?Fjc%Jy5Rg*OLg9 z1|D|o{f5Bgh@W>(YY}b3#lhZPaPEzPWjcF4DAo`?h2F^g?JZl`p`+`3OoRRLpsEFk zgW-Ma=>*t2%4g$uU(_co%<L-qx@0)<KAorErgBaFi%UKWs1$vIlRuUMCrXBH-MlD$ zd0p@lgJ`79QQ|&;JxpKEEhSfMWS)d01!k>_iAfJy4~ge5yRs*Rg8}Ji*K?v1kPIyN z4^22Ah{Qu6%f)NaU}mG9yHM#J=laESKRwyan3q`;E*x&z?r^PT?=MJ>psmXwnP!D1 z#Er(c;@?c@2ws2wXr)hh@tGzaR+-z92NmOXO&^kVUz{vd-l7lf7rp7}#u_xopk5pV zzgV|p|A;7FiHrvgPL6Gos$6zN!4s9}P__;#c-r{?GmD&q_p}o{-`(;B<y$dgVXg1G z*`}v0^?*{|TS%1XRp-^r{!&RehAGHg(aR3Z<zzpXm+<J@3SrC2>Kt@$`6zxrN1bzP zl$_JuQu)1>hvWM6&P#_sVH%ygkQuisb$m=37{RQ4#i~NdtdMzybK}UAy~Zm8n|V<+ zh_g}XppUG+yq72&e$ASU!9OYfVr%<L)1jted=lN%zq$7M>K{n>5VPG8fsV&&U?cEw zO3Ais+H!VIr55v1O5+Qx;EmdY+jpnhSpMBpaZ1RTgErPaCA$o@N^f9KcZYj=|7?Hw zMPVVbeVk{@ri3C7_=X-WOQ}2<hYw%#$ieKp1gc-MHk+&h80I$D$Ladi=}dNri{eR7 zgxE|4b=%^TdBJn{z3rWqY1IjK^&`6nB?l<JMxuB0!EjQz0*2&o6<(00?Iezvak-qx zmz?^B54(`kf+3s3FRQNua_3XL(mEA1>mC@+I_|lD>2mfny#X(5OAL5q)c$TK9(2)d zky*uidB<k@7j#6UOxst+u?J_W^uu`a`*GtrNmqPh&mxNloY}rx=qe`G5*OemQWG&X zd=#bp!Wq|Q*+;U{x|-ZPdagF)-7Twsk(B@FX8>q3k_Tow;JLBIMD+c<ZKU87Jr}~b zvPNzuZbI{JqMsL`y>9;)ey97}MzG@yDI;<BJ52s6a#<#lddv$d4x-YMyrb%+4eMCX zE94z=H(=bHoE5~J+eeyc!XRxGvV73SheWUUEr_^1?c72=5%U{E211dHm$o6<q@zR_ z?Q*5LA%+w^$38b_tu)g*)BhU9E}W(y%KB(cec2y&6|g<!BB+cK|Jt4=C=xh-Sq=@n zt!~!<=<ro`)nwYeBu6vuhNXrvdR3*ssy_*T+kya@T9k?bUfRftB=eyq`8Po~VyqvO zS;qg_xE}k(ql9w9C<eYSi3MbHK_H56EBvCH0+p9InUeT&`*6z5DXG!6Sq!f9>&qkj zz1(4Kz~;0vW1n1a%di9?<9cSI6mePHj=L8hN-|37sRyxP?FyQiuP@>i;+L6Z<CHLo zYc0|%3$|{xTBn7cqB2k60Uh3tPGmlcR=5p|UU(p<e~-re5-AB=L6ISWV?Ks?d5eF8 zOPjb1EP36!ze@{Bc7j5dv0Vp5Dl!?Q)im!dz~|}`1S?%h^Ekjnsaz-|qq>8v#4~do zzA`m)&rM%ozNRqlWrihg&%tT!(zSz+`aBhTtQrsnR%Es9Uz^EaB~I+_uIR4(<U=gM zt$q;KIsn&zyAlM*m7ItCY5a6D`&fI-@Qgf5hFi@Mi-!|F1I=8r@%%HJLjtl2%$jt+ zyq-{8#>u=a-3hy;RVGJ0<NAbNVr5l|w<x!JaIpX1TSa$TTWIT&YLr>ep>aJzQZ2D~ zRa|U4FBGIR0hU$(hi)~C>d`&if7;Ep0VHR@o-9Zak7m83?2RxH?$WZ-f|0!chq(8O zYO;O1eNj-PMtUbol_nxhks=^XM2hsP0#ZUzX#oOJ5RfjYpdcX9r9?`op@t$g^xhJB zPpAPx-u1lSx5gf8?Xkz$W1X!3iKoHjN$&fa*PQbw8i!34M0gL>yGwMS)Qg~KY)!O$ zafWEy0W=+Lo!8xDR{2u2`ujV^Yqae}H~7Ckf|(NbV$7-*=txSVhYf&(*I)Wb!6{}z ztzA7a?HF{;H5!Yd-Qbq<a?+=>+(BpIrhmE+N`ux=Zf-chRtP+``gRYD&1bn+7y1*_ z6YJp(M+j!Tb~K^uDZVixGc^#~Yop7SbhANo_11h4>1$3ARCb9Y1{bSOu&=|e`|61# z=x3D|2bL6K-+@K{kct-|ES>W=3~7lrM&o(NG=kK1#U#+eXGzverxRa+1L}XT^e}x( z^2xLf%%Ue*63IvT@H{u5n*%V~#wz>eZiu3l#v?ok7@>GLW9#j)MfybRW7?%AVIp%^ z*Kv?}RtdY3A98K_RXlI8sz4G2mG4R`LU~m6GD&J=uWIH&vCZVJAB{DS^SNzQ@NW*a zUulED72J#H_YZ|C#{v<sR4rKp0v;b0K?QB@;C6`QhIS(>f<KD9U3t0{cgJz`IzWg$ zTT?b%N~9;6ukyf|APQ-)5fS3Jf9s1Muj=f4a5`;`Z#%Y;rNJ6aNUw6kD2Kl>%O2^+ zu*x3>H29%U;8S;N^-~3{psx2QgBQ3`aoo9%YnEZms=ll9M^c5j<0{+Ggqmoa?=6xu zIKuu^yHQfaw|a86jOKi@>!G3jSc?Nmk7$5xv@jX*<2koPQlY-@rWh!=>3&a_KDhRG zYtK~PFwTKGe?(d!;jHsjvWSDkx%dlI(#VBb&{||nO_W^zqsho&0ggcrUh}V-!PL_p zYvKM23JOoooE+s>j^Pxlyj{*z7OMRE(Z+1{&;0J)ez=7m9U?K{<>OZ(cB6AjBeR_Y zugpG+Ui}o#`kRQpzj;-S8>pyDCKmkOR8kCItsPv8S$LMVIX+C2XRyJQg1gttv=J%a z1#>1SG-G!_=y~oz>2|XC#BKB82Nf}SrXi;ahkRPnA0(Bn7UA6M)7p)=I+8&F#P~^e z*^4P*)Q||NXjaeUu8e(y(d?Yf%q>OPj%zCP2^?w}fubGpEII^-c2LxkW!m(CMuN@X z-5av;k(yVDz0ZLeSk|T)Uq%KxM+Yg<@RN4GyhSM<H23X-vR15I&3h}X;vJhyE1ff{ zwvMB~bOo%Hl_?R>HJtp#kNS?)@7SwV)rxP_TN|D`ovH(A)eR18DFWz9S;CHJWp661 zU+<iP1doByuN(FLp~w$k<vl8k!XD=oxzBUiG`^klM6&n=uzo7O%JiWwiA|mFp&9Rl zj@FwX#%7M#<{IsSY&3sV!5qfDM$ts5`1N3e;2({9##Q@}9+VnE+CGH`=n;fIz|KXH zZki9@3;y_6{f(sF$q#9+F5Bl5gGwRGipL5kDWy$xAIB|c#w?w{JtgKAF;yQ)>evhm zos1qGI7GPe9{Kve@)mTMWJK8e@WM_O2r`4@rOY>HuQgZswqfXrVCYL#adK1<v=`^{ zvC0i;NN0eBGi;>lhyFw1@zSOKtJ>H*+9Ko67`7c>i$v0!L6Tn~oft}@&`Qsd?<lv} zS-1wn+k5xxXZZbxuPuWpt(spD|Dgb;T8C@!1>oA>x#fag`vCJ*_63+&AhVI%!jT=@ zo~4IJH%(=WncwD|Be&$yq^E>E(hb5!gPe-KRodwsGY{MBk}Fjf;6EceaKH}@{%vo5 zw{YPe2lM%%w+e5oBDj2m$8P^1L(9-uop^+@rym02m+#<aG~G-8#@b$|TC2zD^O5|z z-^#oMQ3~74Nko{8lMHxISe^>#K6+LaYW-`erl>3kvnbuRHTTTuPc^a;QmXuGR$E$# zhpude)B)HxBR&7u9|yadwtH2?CZ2Vf^@GOFw13yF%YM@xio8xi30V<-N9_wRbG%f< zPDjRG^x?Xf=dx>F{PK#`Q-EalHdBnC(+X#Mg23_Vplc4qcdVSxTY|hP)k>YM0E`JH ztm=Huuq|s+)U+l{C*sAb6{qy9#f!`!KZO5(=o0i_m#?}#9;o*d!tE@`)!IMZ1=h2r zqvcP3cHJ<05sC4FTs4epW)Q5@uTy@2%|*iNWYw>0V{&|dH{+vVz}4iZ&Ih%<Z{mP@ z#Sa=r1t<|U7?kGq<OW~qUon(Kq_+wiS|2J6O!yi|x3g<tY=BnV9nGkHFGt3PD9v!& z#P;51DyUzn-yTn_MtS>q3Ssu42(^&RwQtHK<TIdM1HJc=+jHzB3iY5MkbVF3Zs3`R zZh)i8onQ<7#dIlV%()Ml34N{Rv$3}-r{m<OzN9Xe8=T;SK5%EfwS=@afiX5a5Iz&s znUQ~*<+GD2#<-V{leNmi|3Lx27n<-WINk;H4+Wd`JpZ_q{00Av>4-yLW$l$;@I4A$ z%!akxcdpJr1Q&`(nLF>G!+J)pn&(Ye+F@FM<#6bv8a`c*i3t)t&W{4m_<i@ixIC|$ zheFoWm_t5Qh|$z$ePK!XIybHu4+MHaALKK*gqY+na;sZ0_&t-l3rGtLgs;Iy#cA~C zLmfKqSlxRGxDvi$Vf^j)Mfb}vWUdD61c~SXUxWZ7wF4dlTwUm(h8;lwdgkx0=dMRy z(hq%^PfE&nbrM2m!EKG^0JvFllY5ri>vJB|8YiLRVBN$nGxxV4qW<))?k@FPcG=Sj zQTzg$d*MT<m|nqF=$$c`ZjF*$s@g^z*71chWWUJ2i*3?oD?o5b{y5Be!PWPc_g5Km zY5V?7QY-kY|ER@x;<*l?G%E&Jy9g3ta>d`vJd!*2F-DR<Kezy>RHnZN*E%%usjX?4 zFy;HD?n?Dtzlp_WwUFMtgooMb71U}baP9@7UEb!j|L5Nr+^w6{qe!Wz!5cRsjRo4l zmn>dywZ&|&BS7QIZb0TMRCb~Y5mo;xIn6&_ZAzqel#{$~3*;97i9T`Rp!eSmjWN-8 z!W%FQprwkq3=Z5<Iv0C0Rt^8370ss@y?aIyEjzyOXf@VS?M6@>Pg@Yflyt$gRj0ML zsG5XsOHnufk>X_2O_FpPgN-S{f+VcU%c8@d%{J;}K;<z5YZp2e3P3=APXOIG5#=?g zIK4~GZ=>qW=|PJRi{;GRwo7+!@02;mTL-`F6y0rz1Z|kRA~=Yj@iV|;KjyGhA5E4S z^)$8nyL$hjU-=wsIP7@{3<XD;!Leo}eZZpA0BC^k94;#A5fPzR)7yeNYXVA$Y4GdN zu#21Lk184R1npX{-VFhA*@rPpD6_>q0KrGHu8Ar2-D+Ky`ogrJ9hY5`avBhDzf(M7 z52)#hG-sx21m2TK&ma3#gY6&4em3OmdmjLa_ZmLx;^2x03?LzU_-2^QpatYdSWJEh zv{S_MtjrdLpQx90Ryt@5XW1FJ9iE$yB})r?(>wOlT+9JMCgUY(Hj)^gy(qvLVLdhP zUWpMNYl~&A{UR5S+7)^;F<!s518zCtzm{r~^=P=Xs;ESDe1z^AI@f@IXOiy6J4pF( z=~C73_Rh}`JepQJelz<a^?tFbg&KUxn|9;G#KwV`u323dhs9-*h5S?(tF=tBaH1b- zY`R=<QUYhI!5=+;g$*BzIk_Zj#l6sUDYmfDa)K6XloKqX5WXS0vQu;UUAHEkZ!BLA zzWz|Y4XU_!Q5}JsMClY0qbv!GIo@0`V@F&8rxbB-PSYk)L$o9#U^i=Hljgs_`*Oth zsKzuw^7nVnKldH00?IZ~IZMakKi%u?zZOEPCALb%J6|PkS1b2QR<Z*6w$JH=3U=Wg z9OM_T;+2ahHx?u>Y<ib*-=|)rDK#X%+KX~HzyhDydjwg20swLb<iS*xN|b1lJiMI} z)L9d3bHo?-Lm<dssMyYNRdK>X{1F(m9x9xLwpLA|lJZgc^;xC8BJ%kq`aDyL2jeHL z_sVuiJU-5a?uyo5j+OF`vZl*^RQ?sH^`%NS%(Et{l-Ux)Tkv)ZPl2V!>gwbGe5EkK zMa#SWl3gj=;=DLMp#9t81nL1+PtFJ1_zLG1(bw1g#{F}-+cW+jSpy9c7?67tE78~+ z3#WD?xO3<`jc0m%mK2Zc33%)?A@n(B2PI$d4}}vk;PHqa)zq|>chbVkE99>^R`yck z9O!wDG30jvH<Pw;o6p=w&tq)BdC;b$GLjF0J>9$5tsWk+BUv`|DoiYv;~H8}P2RpD zb%~i6r4Ed%dA>3^@+6JLjrP-Tz#{xrV^a)J84d+H8PJ)Wvg_5|e#LXMTF%bAQP*B2 zRTp``=tkUyN2swN+0X6s2(OOEw~rzRsF^_LtB=6M9p42;Z<s?iu^c71R6G;n&|ekY zuVxzW|J{ts{E;6Se{ku{qG&A8!*ivn29+!fiS_e~J}-oMk&a`^wamkM=ILhAYjfz{ zyk&iSG2_}osx)^mD{%EbJl#oI#f|nvP>pZ1Kf?G4@p9w8sWOuu#<ow-9)p>Xbh@H4 zY<0<(1ZS}_2Qc*RVR0fp3#a_MTd|{G(~+L9+T~yTc@a!`a2qAR*eIbhyc;^<=E4;( z`uB7IXGz#K@HJZ-hcmz!CjyK%t$|IR`*6SfEanZBr_6znOE=$}0dX#64t&0Xgh)JA z?)htVUG=Nw$`Gttgb`HDE=f}PzSoxXedehW5!b((eU9hom}Bw(l(Yi8u0#T{G%!~S zt2lyE_b#-ZhA_w9(|o}dm@#Md&KR(($oCUJxA3#_U%{t-K#JCeYZ$0g89nWD{yHTr z!R5UEc5VOPs>y*Y2KYLi8kySQABqn1u6JY}Xh2J-R9z}s;@GsloJP2EU|;t7>B0d^ zmpcHW{2MB=u&xB^kOpm%<--()(hXC_hgYGnNzdK5_t7sVzbvVa>7&8SBv20Ya~FpX zuqun}Sv{VIcuQ5TichuV{(6t;%Y9=F{C$X(i4u|pPCm?1?!wV38TVKB4(9r!hm$8W zXBNMW?S+(iuwX8rRP-0Lo)gLNblL{G<C$0MJmr1tnlAnuO`NJL3vSD#Ae#9sUg-Jt zhA2#!{Hbk3HYD4O>)jBOi(#bCn!DU+vFJw%%4&0<x6|}w`;Gi*C@vFmMeo`BUDK@2 zhP0(BFvX<nyxKTW$`cSMy!$)s{)?p6c#4@pcnhSzYH#Xu8^a5lagov7QQGhat#8@y zUi5@zh@HSIT_PlLHl?%%y6#3w`qWvzv|i@aSt*V4F{i26f-cNe;<HvI`{*K_-yvoF zcEbCfU&;cqjxV<IfivSLo`bXx;3)8HYQ%aZb}#-+Ivy2(&0s;RdB<UVWa`hKT%v5R zuDnCB43vrh#eu(LR#b(EuNFFjsQeA#A{ilkZHA74Olb7$=GTeisCW{H&?9}lERQ3G zbYFgWhDW|W`36s~bn~YhTWPzY%tUcR;5_Tt`{=g<xDE?-c;<S41ioGgy8@mQ;-4!X zDMauR0hZH}H8It55wOg=|8f1)mCx`PcdYv%A}YPo^{>1RnQg73`Ai&`&)x|%G=E6D zUGtOZzmI93cy(@~c%VDs?0>qL6xHRvQ;4{NBB;exfxu8Sa3o$*KonqtGM!uMCb^v> zD8Vbw0IA|HvHTy3M@7weIg28aa%0^n&;e0=esb4t&Mjr6Z>{*jqmr%zk$PH4p|3bv zT>Bb=s*2zcPiD95!p>l*?1_nw%lQo=^9tA>{N%lnq)~m1O^_JdxxkjpM-RQbhqk8L z7j);S4_7#euw+guGFx6k$nVLSdq>MRs-e^P=1WU#>4ND@7lb~rB)q;uEwmg%Ae<Wz zrRox&5_n@btKAYWxNKBuh!Z))rH<nu_UIQy8qP6R&dJA2{FgykH1|<jD`7mNc(aLh zR1&3F7%yx7^<mg{+^N$Y(F2Oa&RU>_KDcwDi3?vAUjWV9_H(`mlv?EcLt#@bJ2N|> z1_aZ3aqtVaU<8R0ykrM%%c3JDqC;;HxCl=h6dHy5^HM(t3I*R`+x6k(+NlK-*@8R+ zQ`>hG(W-I;kwmOY(1=A{L%3INyi;w0u%r<e_>T~GA|SGYP{K=yk2bI;+?)Fhx7Eal zgrGe-tKHuf#rTMTOZk8Ms#`eVd(qtR@I(E6u+CThP6^;9ZbkPk{Q36F;FzsKL}t~( zb*LIzv#VYw+8{Fv_gz{#&&_KIZJV1n&8{Pu-+4LJftZI4hQF^qV@Swj%qz2ZP1;DB zoL<#Au)oC5s6r#ZLuRSUG6dcPmq4KIS>f0SEq%WE4m`>|R<g&8B0vMolKYb0Rwq|I z@?*TdbkqUc5k)UVW#RKmQ93S;49kQL7nPlbX{UhuDT4Q2Gb(v4u@&I<7)T2EuY2J~ za9V4(u+yVrt$5F}xKbgHxretyir0f8cdyhV)2JocO>aH^as67?Rn!3JgE=?6t#^;g za$&CDCHU=UeJL~p7B)H6(n8)0MPh(s@D7yv{0u|BA`NH-)?_-Oa5j{uGcB|RTZ6hO zm?jZX_f1t(nsYG#VS|vr_$j?OjH2-@vWrxxwnj$uWothjt<_fRsdFH@gD$}_Qr<vi z6!4tK0(~ptEe;30HbBhL6xbSVl@av_mq8x`G6kB4r{UY_fzM;+TppGb^!6T}Ahds> z&|PG@aU_TZ@J2xC+TX0t-?TK5D0DU!Qe+DA_qOHNQO4D(NMqMJ&8r$l)__{s0=JVI z=GocC-=8Jq5cLMR+DgkOe2^(JuWOoN6pSO^%^qB9lc6-l#q9Td-qGv9j9_A8ef?vJ z7AYM-!1&005-mEU{LCBMFK95jHu5}tyH~LM<KpM8;r!81K9UWD?o+66X^YI=Q-QwQ zq=fGXSNt-w4K!Fk%uh_tyj-woyOlzq3J@ko)TzVePrY`=H|HPFMW$SSEo{ug{NX%7 zqJwmQ2_6%q{XXAq2qu$^mE3t*!;G9X!5Yz%zZN+XC~;DI9}js{Ag!RE8xtHuUGfXl zRN-!9Q0Kpw6jf2zw3G&H9ye9FPRXR57TkFaUL5%HKJ9$FQ>gsvJ_$kyiH-F%#HuzQ z4`i)(EbE*xaS(wb>m#62H<1IxMy%1bqa7X|)>lz8aG8_d<Kor>H2)cSisu$ZL%?Y4 z{m~kP-chAPTsOF-NN>XV!eC!l=O^L;xC#@VNNR%thvL6yDWPYliJhcXN&F}u8-Ex0 zPY(20;tY{D^f<qE|D~D;wDpehbzs@#m&WfL$CkzN@%ML+O2)vu2LF<Ogv$RV*0k}f z5JcmU=^1ogirkE;tVx<zD$uKx=iho2jY&@+YGk%l;PW^WKXD*lRqJfz!Fpu`=R&D< zMvhE6&*l~MzDLq29Ip|!?92jF!{h+9DICX+Sc(@JF}HgZSst7oG3Bj*UMc?=@DGJK zkbTu8isAR#$7_^I`>X1|_MN2K`}JVt)N@(xy{HM`ybq30Y|pCPL$52V6!p3|AJct6 ze(La3S<b&_<IOnb6<&n!{*Q_!&Ad=oVvdf!tMuxKx96&U@q@pn>|xG-8NypRg_!p2 zrI(~>NKS6PhE>oSol$0~$L#MrlCxu;++nU|^5s&?@PxN161K=uaE5;<7H<G@G#db0 z(<ZEDE%nZ1fj9kwibCWa!*ByPlJbSSH9yz~Pm~PVhY)z$t5die%c4u6{!2DPW!uZO z8P6-vExs5JUf#ICq?bM?>bEviD{I})LZ3a22zUctc$aLaHXo4){)n)y4wG<Y=7A31 zax^OZNMT0#lftyh%y4^4u#j%a#q)SjAvRGA*5}AMH(m>8hw<RmVvsds$P92_)2DEW zF6AT|!*g}r{s3#|i2T%onaPcD!pzjn&xBi!oTkPt6lQ6+3db#{wd3vd6N)pn^t1v& zE&5q>n{ZGSgiT4Mvy{~&@OYu#ZGst$%E@|sxUj7vN`CJTCNgGWtxo3IMpnmt4Ya4} zf~|aKQfv85#q%Ey>M@x-1mxE5B#G=_D2pXiI1?NxX9ZL7%y!rq-27zV5tp1h)JJ*i zfbk-aacQ{t9|}(x9B7krYy+PVnu!-)u)Bk(H=^-K5G(8<xv%E?Hiuyivi$y~N9ia0 zjR*6M)-n6i(RZNx4j;!;9YCd3zmBJk6WsP%TbcWw0^YSybrM7(plk1R4GZosZXjwa zYb&b&^Bm1L^^yz?N71iY61<MR82p5{mK=rb`|%6|Gg=Cx%kNuQH}Tm7fcr(!T|g2Z z+w-ImxR0xUSwRu>4@Ds`K(*lrYZpw7J^*GQ9Y~a!Nx9(m5=1KYor!KGu0@hbofG@E z<<~DSx?C8Z_6J`WO(28$D0S<`<b&UPzVK*R0a{e!mhJ)JbL;|V(=C!R0glda)U6~) z-nG+>mNY(Pk^VMRUu*kiuZC?>ozRPoyOV1~Oqsv;<%OB23k4{@r~DU8AMX%LdXc+v zc4gT*@2q54GM1;{Q}%tey9tdF!?((Gx|+BESg&7pb$YSwhLrOgp?)9Fnm(@RFBF{D z)un(!Z%C*h0sgLpJchH0r?wfM5Zn>)8}WkgMTsb=wnliv?g6Iwy^lt-3h(8}et(`R zv$Pv8Vb&qYGEi3&Xk0$TgaOi~bUKKfd~q(Ti<cZSWZY@xv-B4_u(txt4v5b8OXI0z z<_wl|t*W{F?P<gp#{>A-QukISB!JA+3~(AA5dS^JsDTS;*}~##MwweC@8}JJX{<uY z^w;*}foP;iFTGM6BWSpxUZMlo{4fz^9qOBFh@Y`V>^u)<((lRJWT^C)Kl<|XvR}8! zn~|7pWzb?Gh2^PI%?IBMJ`AY>RW0yVZ4Q>TW;e!a9<-ijZE0)SRbbWS{5tQ|`<rHZ zmpE^}<5ad_!D7OisPMZD{D{2u25Es1d}?j7R&=AOEcc=NtzX|+i^RR6$0o*}YN?|3 zmP+uzTC#2Ru(SFTL<#o!yXw07+Yf8_vUJ^WG<Sc&bQQD;a&GeYbiA0g&@g}HZ*lYg z!r%VwYR`upLWbC%_33bLO0mevbTS$J^8DLX>SfBI|G?&Pb+UHq6;R4>kuyUA4Mmtv zHDqm1c8M>sox$HzQ5WC8a(JBb%gyxfC(f@0Okd_id`>E@7iPd<45>HsI{0{~nRpaL z-KNI4Y0r+A&rB~f<UPwum+wGpooIGT+@~a;0o}-WcqPd$s-0iB79UX%wK$BBw_1*~ zcha5l?`S4d39`;TA_Xh?{Y_S*+u2W7)q8N}kKsbN;U`ncOmmX9S6M=mrDfrEGgp1~ z(uVRYBB}0N(Ou^DyGe1xitLAJ5+up2c+^>5N~%byZv~p(+_<|uFHp#of|q}1!`>Ot zKV!SH4z-UkBwBB>j1K9xG(UWZXF?4x)=cbxkkkl!(XeL(S~@;>n+2J(I#Ita!?EsD zZS5PWS}JFb-AJ{Qv7kAhP+0;Z3dQB^tq6dB|0Jx$JnH9Z+P|uMs*V5?qS`T0)&=cq zR9n3`I=7$0x%CO2<HH$YmZ3Tn1+R=xCx8c!ZV8LHV7Lxn1iTp}Ef3&zy`xYs3L!O3 z9L}{dijnvCSno!syHL_o&+%HgX$8)mgrgqA%*wW`!7)z5)BDi02YNU3V_nR`<b=Oq z-wPYwY%pi6BZN9!o)^w)moT^|%NvrT(_m%zwA5=^H)kOYumCY``SS}6N%`3c_^3n- z@5R_f1kf+#&>xp7?KAkagsKhi?!vKl(4J}ZlT4Rdc8=pBfwtYgo$_OuR>`NJA|NYi z&p{kw|Ja=iEzm5lv1$19B6E;sm1cQ<VKYe9X*BZ=zPWP)CRW^01TD}S^~fAHmd`6K zJaEzYz-kKsj)qMCWAVxVX(9FDS0zYgh5PFHZI#~LzsR{PX{EmUnDwB08|7oq5TF>V zs-$&XN{0>w5BaWqc6UE{D%|h{{w6i)up_ttok+i#$$=;S87Juk;^;D_Smtii(mT2? zC#&X8SpEOALz@3(htU6@utUDfI7jy|46rT+rJe4MbROF?Tx2#^KcC2JB8X(WQ$W(u za=reucefq)PXjl0th%sfh%i<DY3Sd1cP8lgOgAdizZR&T60F#LA63vFbM`W(*t5WL zx_foTYDV)W=K}BJ0<e+z*ng*50}b2n!3=Q=Jc)GB00%h8?bu&te!;FK7jrXd&X|Sj zdFXcL7<@6}>+bg)Vz|MmA7suxnC}(jjURL+*N>_FVYldbRVW)I0O&(U#CFH+6l~Ru zi`^vO8n!K1<^;7hxD&oB2j&qaa2y|_68$b7_w_3HP6{RHR4L2|u3Wx(iuUSP$08EQ zAf?Er>51s<^E=IIQ)}DFfS11JEBF^29$-E1o#?<op+<Pt{^lQwr<MPf#O=VCejAiQ zr5}!!eKiMM?uIq>NzZ<|#9O}K`D|mxkWm5@huc^``ZUwtU?Rs!t0L|mxjRnR>rzu6 zEfUem#p}fM%-khf4&uP%I^vcVwpaBdJL&bc=Vd(9lejuCClubw&xOAjC{_#irAcOw zegY|YNV6c&sTOtddj?P*savDS&T1g|Vm+8FQa4os6T<?2(<aW5!&1<bic#+ys3hU? zn0r?K;>>(NJfEg(xKSXck02bsT97?&wUPEE&2G87TH@~#;}F=WpcJ;eK)Zkr${Roe z?U_x4(h69YQKC_IoFnmPNG{-vbh4-+$pZ;(za7yYyyW=haSA%?nMXHeT*j5@L(L|K z{(a5^)jASm#<LjmW1rUGk5*R31{ZiJZXj=W5%W|IGRIonzzhI=d+x2;_5Rym7j@@+ zY984dhy#R6<3DhvGo?-%sgj>zkm%da3G(J?4=HsYwmQbqr&T`5G!5fOF{k4ednNjZ zEh?ATtUd-1O3NnQWmJ<cSL*rq{EcCC`tgVBavg|<^cwFHqpZ%DSYSJs*N<kc3Eb%s z+J12J=nU7W6thTHm{n;;_tx0V#H-5sx$vHR(sfL}X1#h-FidR<vt}PmNHmT$1K!?e z*n$tp0LR~bSC-44x<Ge0&N0b>TbMiu5F?qkKubrfawG9oC$Fa=GPdXdH@S24x19M3 z#|h<7`RyaNew3my=kALHSBzPbCg|_5^>nKn7|6I971)*kG(M$G`)}hIiq3wB^kRuf z(kUy5^Y&%nFwESY??D@0u~zr$i^zSxw0D>Pe%bz#F{*}mbvjoukv$t6NghpowDRHC z%xe!I<=Bko4tJmD8TJ$7aGbZ+dfmHjN9lN!4=tCcQI;ynkLi%tuJ~qsXGa132lx;z z5j>T|F027Z3x~OA2lsn|oI*0Jz7*BzSI>km{n9mGy2G=CK@)N&GxXaDbR(C!fCaMX z`HFUsXqkHt%nhG{C|;j-h&cL)*h6?bzU#d4^$pi~7f>|u_-B1}<PO{ImwLv0PM0EI z_XLQYg^34=U#*VV6RdX~oz>#ePG;&U{whgbeyjPU-_SDjCcgSJPGU!O$-1(pN&lv3 z>XkkTNvB$hWKMo<iL_C`mo^Da)gGE@t*6v0Dn*xs8@{93*Z7>3`v39#my`Jw-UIE~ zF8Rb@1LU7`*5mFwRoBY(>aVv%7%3zjP#%_@#T+cek{Joov4@4FKtE7XmB_<KNrmE- zYv%*acSsUFsQcMO9;`3GxNpPfrqt{!uvj#FaaY){DQvj{x~K$OpGoVCdiZ%N(9Mag z(iL-A$QV#w)#h(E>-i5V)&GjsNyH4Codud79JYl%(;YjKh|R5z8EoqB2<LCcb06^R z#Wb^Q3sof?U~}K-1>C85Z-Bp8{=nWsVkMhF$n4S`h%@2ve<&y;e8F@iJKP>KwArkR z@G7jHcFL-K%Uy(-!^I!{`4FH86_(NAz#R-ME!?H0%^x#$f7Vq8{&HQqJ+RrMK%o*3 z9ViMYgXuP%!_k<igZ0X0!|St;$M1rlomVvcLt%ZA7{%=neb@{tZI1UVl#kc(fAj~v z5@8!M3|%;CDJ%QGz^;e|Gp|pa?d-<76wdVjo}!pw?^#fOeilRMjc%gMV#x@#=?6SZ z`m5{*LNlx3CvlE(Ycp)wOK@)39RhgDrFQ(+7((h*e5uFFrnGy@sjsK~#b|*%C(>Ap zt!0b<&O`}WY$KDW8b5o&E!C&$RR4{kS{4)f<9Vpxg0Zb(hXKTT#J5xd-4^S8(NJPf z$K!Teby=`CkY95P=_ua=yEme2_Y?Lc^$Ec{R(K+LNjJDkBb`~4MH>amF01EzyGCX| z+KbBlq>?@KV)Ug+^X3dDS%K84CJt<!9}p84JsqvaN|n_Ycl@dhug_?B_EvaD;`nB& zl`eu0?7d$s!s8Wwk!fHK*d5gcqk2gC_iXTkhAY(GyV^>i$H(4L{MW1SY9Drd^~LPr zl2yqV(fJhZ`>)iV*~y!ZR?YC4fCQgaRHLHq@9zp&aj0ouMJ-tkg>pf;5MCsGPwcsG za~39sr$N`Ix7|HLz^<;VH&eyEAPR{IBMYJQrNlurn1Gwp<*I2(9ICB@uNoB}4rdP@ zGRW#xNsb@04_UX{?i;h-5?#1lbqjGl>o{sSzdl0_=zdGIMn?C+-K(nmJhUtth^KEP z_1XTV{J2O~2x;K<XFQB|J)Dc@))7j?Qhbg&F~WVswk64ZGh3k1M3VwEcW+Z^LIP-h z>0JaF0D|FVKn@zKTg-}>rzHmBiuDe^m8F|E>N$q#N2B_)Eu<4NibvNG_lO;!m{nj` zvuGZv@@yxWQmUoTI6GqB=FCFE4KE%N<hn~1fg+v}=zE8!6=fc(+}k>R*=W;7W*vk{ zxO<XR@~qtmHS_z9m$EKaH{mQceydr`Fi%`RUAuq1!v|#%`Tg-Mw{NFptHj%;py669 z!2%cT{?@GsKdjJ{z*Y;@TJP!XYXSEg02`f%SOSC`{TvWGv36^1d;yjO(Fox&WlfLj z)Qb6mu*o~#!p6rQe-Fj~MK?RNFYuydT~xEP9ozzf%F5Yhk9D5Z)EqoY7ZRtLmHA6? zQYHad+=yR`A!0>PeeEdhKuV~i*Fj~J+Kx@u7x4Kji4A?KOo@AfsP8Uyre-N-2Ja^s zEpI=)8*G+_Au#+%OL<>3seu)#L#D7g4zg=px`3==SfN?g1n>90S&`h*5l0z{)?(g{ zp(8dsVb_+XX&9BVXC@LPhR6b4IqUV(5z0KdZK3n^DH+Fd2?7T7U9ThZg&126*X-+z zdj&Lk^dzVrQB}&cP>xQ>yul%^ZH3Y|kFJfDNW<hK!!}<%_|@7XzHl-~+UiGf{f05% zU*$*vK~6sv@!?%9iB+zZPZ27q{?Jkc2r^GG9(rra9vWc8-PG(u-}CC+W0=nM-K<6q z-%plxiSfc;F^i#WP_zTV<+zI^WY3+Yp%8HS)}!pGG?mcjD)m7VAzFdb2~LFOSY?-B z?7~$D``Oj3d`-G}hr5BvsN}Go!Uq&NN2UKzgfqK)E^d?_^*^?IO71mjtO%|PJ^Up$ zcL}&fx=*yl`){>}(nlVX)uo1QZLPb--%(|n4!n<4(TLdw92bOCbRu_a;T8v&QQ5%L z*|E5xH!y!8e;w6LJ+SVtpco>NUPW{ua5((=gWroM*%WAE{|Y9El#l!oP7$JDgq3gX zIcQGLbU-}W8tboNqc00EzJJ)lCiR>c+hz^=Sh{9lq4%dQ#WhV@)y651l_@S#P=3ui zzX%U$Q#Jouf{0X|^5$+^+!*Q??NLi~a!H%Ucch}d*?ZkW7S|62eF|oU|9&>CNf0wi z=u?QKg$%ov!Mj4GMwD5w4H@1x0XCMpM&)HzlZQqs27xa_2Q|zXINmAS5;Ehe8zFG) zUWXpZZApF@0Gf{;LY)7kZ6xHdcP6FintC2zV1Z&OF&YY|w0$r)j1r$3P13*m`+0J| zlN&cd%E2Ym@^wf8JOfxkqwf+aN6djQK{FW{0H!C2VY8^>pK0RTO>&cz-_BJb8oz&k zTc`FAQu7OC*q#P%kN4>!i&Wv8>KG%i6SePi>s(KsV2)kY_ld_xYys#63X%jQ;36BR z=Z!Kbs@BI8J+?9=QIhl!mVYX%M|K2}<u#G>(=tebh|2<r52+t#qO|vL7VXh~d=FjW zj3Y)P&l@tQd6EJW<#Z%;vPiyTQnI*$_6w74X}P_~B#g&OSp9s$>(_8=1kNEE&gOZj zkCsLg4;wd@OSkNcu0P25O;mYp003+Ldl34M{HrA-^MvqS(84u6i22gwWT#GcYZ+)s z&|QK1RWy!Iq|-pdfX>8bs`TagzQ)UBF@^K@B9M%li<~CDZZDy9Bh-70W#)hedY|f< zDjPJ?`=c7m5u9^!a&`t9#3v(HY$a-!AHe*b>)kPC3jnge+~nsPMyg%6+ER+hwNUi` zRCOotFQ4OVOA18-&kFDO7^?*jZh_sMTRIkYKi3)>dSHYc6B1K7e0b`gqhdpG5hzdx z=Oh^tZYSbOb#w*+b|E)OLDe$20rKm&)e<O-%H@0>nFz=n;av-W*n%L@17eH)XMFQB zAl`H(XHzMyVt%%B_;JZw(^M~jCkNp$#8*cb5W@gOX~oFTD6^(ZUbjtQ!<V*BX%|1Y zsa+$fu_}2XI6lPh)L%(LUaeudPq}x`!`#0)AI8h=6xo3iy)x)~r@MeBAj9ExXA8)7 zqRQCbg@DF!;&mdt>18&V+*xM+RH0%f`oiwRKgjY^uUJwZrxJs!UM)SNCZjOKQEQh@ zeK0TV5xy*S5wSxfMVeYLzS~-^jF5<1KAWgDwoPr%qQ&6muHKT{QLmaaAHaG`db0%t zKD%{;`9YivLNHyQxWy6OS@;L)wYno^5HoxA(i3NNvgs$EuWSo2G5qbyU+zJOk0iIE zt|DmaGt>A!O{P}nL!jnHrFeK9Av0R$3F<uMuo_#fs;M0MSzCpKjE8aA_TEX>sJqnj zPH7@zou9XyxUmFq(YG>hWUj8Ext*GykK9bq__!Rh2F4J8vVq&lRz$e@(Dc4dZwT0| zc4TMe`-$3@^v98^IsR(201&zhC9~K_*~u?Qh^)b--;(##Sa=qqddsWHw<b)^?we-U zgXq<2lnp+yMe$5{GF5#<t|Cb`wpZ8u>bv(Dr$$PSjou{bruwl^UZRW9C?|4dAcLx+ zZgbn{ZD=E;5OK5dB0H2%U2=Sa`|J3MFmFhLVHXmZ)@jMIFjc(wdk;A=q(rjEa)w!Q z|G=T_eGBCPDhsV5@*w}EF)8l09xDJs&-X$<(9>4(!yjIP{glyMOO1Ku!<Dd}2%2YM zmpB(EzS@!Q4v`e`fbY0X(4^k;?*2ZDRL98W-X`3Qhtt&gYTSPT6T)*m=;SDiMC(8n zK$1A{`Wkq^M0w$j_J(Tc$XU?&+<`^f%e3s-*Zljn*Z9+3!*EaQ;JXIL%mEwq4VS@J zs2m)13=g)e-GQj*r%%_A#o!*~tDwkX-iw+xU`@W80-k#zy(&((0FY0%+2f@ek9J1G zb7iLQIReEI6cXNxDowetn;}J83h~Z9C7Y?%zh)FIQ_TN@*Zz%Qw&PDCeM=dGx6<h> zQ})krHtDfhQm}5W+43vzsNVkoxzGHH!6`pjGSD=eK$*P&!W6wcc6=Yhc5SyCDAfWI zJqVe|7Hg6Vp<}K}k-eGvDDe4r%AC@z=fDWzajTY?w`8DkqFaF?`u$#KuTcWZa29%B z+c}!o#a-9=qKdz_HQzX$lXhz@0{5M5>9yIHxG<0r<O@8ii95V?gy_|47}=|p;#8Y< zWyQAS<JyDDiRS<|JP~hY0|LEgO|+6~?#vyO4CQHE3Sl>-Rt@JbWPVerC!=sUHLxF5 z<9;MA(XRZ4(5#PNNI2}3z!qCh*~CUPC)n@?7Py~2`LM6;V*(r``Xm(qoEC2gcx5oe z@wHY2cmGnUPDfDb?>P`C<TvX`8rDBk;Ifh0qNZAWkROo6zOF2cn<VLyMTtJYt!Lby zwN#%}Tjboa{V-SF_{~e8mH~`z<~8`bo64HT9`6|(AU}Gdj=tyiqhY&qcN;QI=7*Xu zwAwR{`10t{7r93HmfUgjf7#cysaKW&%sq@y#1lNQIY?xIaQA)QeC=*QNPiGJJa6Cq zO_TPKAtmR=maR*KDw_>NjiC$%$A#z{C3d75>HS8B)`+N8V)Z-W58>Qr(rp2i?)Gd$ zh%#vAW)BzOaS8mya+Wq$=7W<z8c)Zcx7VBnN(6Z3&l=D%W~V6JNX+x$rzaXLK2QT$ zei=NRGs}x`g7ns=`2R@CIQ2N{cZ3$V+VkO~VwD9E(3b-YVB>VNm^R%Vos`t;y&0QE zZzj2ql{yHC(Y}~##Gp0n31O&*R1Xc`^|~wHZY>5U*|QMTmekNdm(42)n~=xYg6hVa z#)SKl%k7c()y1K^vUUL^IXF7;jAjnlC$eT?tutwfIaoLtI!|ZFkXn~H^RzZiZ}~%Z zJZzHVIp(A?i+Bz3w9FAF9llKpz*-%uXy9=3G<LS#Uawn<FhNV?8!*{Hn3WF}1cE50 zsyU5#>?(g7HxfyAeSb+(=f%X9Wfs1V{}P!DNO<o7|7tq`=q<+1Wufcji|uaaD>*MG z8C=ga*yR-A<fjhWTL+f4g`SHsbIJ|Sak*~K-xOS;LS&(d2&fA#Ar;>(j1NfI+4B(j zlW7cr{*mqQqtoq6kilqfn5qiHUIIA;Y%k&(l#!?3!D5_ayZ1aYUVv)9y;?<L-Ntg7 z$2BM5_WFB${$)m_)PLmc|L+%NYlAs9172minFXSc5&KoT$<P^@2;muze&k>JYk&XB z=UjZoN<`@)ugOWAFXn`d;#-_Pz3*j-8Lb?zn(}*-Yo*WAm$Km6F8o;BYnqxmA=n(r z)&cG98qZ`VFvO=6L7?Lt>=lN>bI681spI-Gr)xBH2YzLV>JwF2*RALpLB`1D>H+26 zK+Sg{j7sKTSxsfsS*0a9xCI~2%)Srne|I<JDfPxPQ-zelsg^&}ok@>!KmERQ^{Ih@ z!6#YmRz}Y7@O4N_C=-kmpIN$??y1u;{Q$TY9N5wUBl{Pyyhzfuwm)FB-EAb^20M^m zpcl;knLSmwK{6Uz`D9gq^ZAbS7HMmI9r&6^jm2lZm)|&oJPRxk{*mQcV?OPa$oV2G z-+ed2FJ~*rxsm*7Jk{T%%rQ;)iY_^7x=ugqV?8~b$rpZggT-dn-NNVb?G*k`;_8Bn zNhB-djvxlM7LrBgdM{Q=b-}cLxb%p@S!(yTXWsto&qxcVaPp85zyd|S30MMuw5CSe z@tD>jEB39oEYhZ*=n7J<XuvO>#;iB-txGR@e^d<RC?7-Y9ol5vahK5yQA|4?mTa<` zesf}}5c&(S(C;TEC_2y&&v$~N)A{YKr&u4qqO9Y$xOYadZOR~oW3PV4BDPgTj?WE8 z{yfx&1TMYEEP$@5#RJ|3DsPwye6dalA5xNXb_ezS<=uvc9-ov?sizfs^6RV?sl*ek z-UM<(8BofZ+*P?IoYi>`rtVL@W`#A3-r2C7D`;g1FiCnzXl^%v*bKLxZd2+pKUU#9 zjXJfcv7YI00|t{S2rtvEM_Qb;Kc8QEW+AGQ6^;VuT6g@ePAr&~-pxrja{U~*b&}2{ z-%EVZHGgT0r05t@yg<}>+WcM7!2LvF)6wH_d9^ZB1iH||-o*N4Lot(U6k#9ir*C8B zn6%9Q)~hQe;PO>N?7tUHXfOI0a1I}y0l)O5AX`0_$BhBM9w%53=n^|ol^qNC1em<J zl12N2EYRJMIq^Vv)yuA*@1v7+YF}8WGQ!NpQ9k~j2xXbK)oORRQMbCii2R8d)%J;U zW5Cbw^1va@fEu02+MM`gRQ~(2MU(UF^BB4L6`hkr3Ukpm1ZZ=fnHXN?I$aZkG-UD~ z-tnfYDeHRSR-i#~d*J|cRF;mOUK#7^P-9>J{KOeqRb5#d0bfh<d)-Uix!T|^F`#S_ zTslKC8Qjht7p%mW9_6NEU0-_Ng$}I7e~;9t01wwo7|6DcrwXhN_oDH$jE~B-X#bEN z_Pe{*cVt$idcP3;mNEhI*p>;~id#&`NgMiwT1DeJBkN0dGZ3hH$v^Y6RvjwK27Jh_ z)SC}Y9QW4}tq*TGC*aspIIIL-)7JBbsi*@C)-Eky@kKU4D*g{9THKn<UCbY}D8vg} zDEu$yG*pNEm*Q)r^q7+V-QU(P7wQy=c>uU=>-a-eLlaRQ$LZnZI@7E3H5HLuApsa1 z6C!{6FHn%VJ1%R(6p|N1PHz_o0UnYgmq$dm#b#<^v)-s2-MzzxW2;}f<9cAsmHS{> z{tO7P)|c)Kntz`QxP1u3h@0`dS9+%H`dTDSUdrEs&w~=%>LJG?zUTK5(oNmo5Zcsa zH;vyv`MOmkz7zeH<`laWm9T>!QvoQLuHX+bV=;*ofK54VY#&fyD8JURz?|OyYF9!< zV0bLMoMk79F~MF3T!6KA#3nNK6432UHwhxerJLjP;Hr9vihzU|DLVqZr35yDv)DJ{ zBX`f%T4S#k`A-07rBv%+yBe!@S=0+m9j!#wuO>J#yATFS>`c~My7sGf0(;YoN@hSi zM2O~t=vKeh5-1K#gVN7VXVBg<NgJ0F_P}zmcZ*P8n~|~K`Pt3a8C76FFTj~w9Y22a z??cn;)We8T3nm>Os!s#4LMCF`=3Mk3DkgiuK)j~yNFJ2LKmb_{R{hd5P_FFdwc0M| z1NYQRUxtY&i8L}c<KRs0_9Ekp8r28(4IVWZyBIx$amkLiZq@kq5^~h>;D#Qqb~1=P zer!TDM_eL`a1w(O#9CA%-(VMZt~ORj2D?oQL9>%a<syPeg?h!!_*9q-kf1sVZ^qxA zAwdK+0IsT^TAaB#Kj&vXl<82J)voWc`L!p5D|!xJ)}E^(H+?Ncm((cT_@zgEXEOZg z2Q78(B*^>671t%MG3H*^Nj;lLBBHyh9T>TO0RfP9+0udL1M23)bM?e?0blWF>)Vjg zCN^T%GeSzV@NPM_c;~9t4e{AEmdmR9PLzqjo)75dFvx>e;yB`t<{msI*kK~87`SzJ z^va*D%|00{iPOJoLUBL=z{E#v729_1I4l_Yy^dVHf4kuAK!;0G0CVV9$Hn;uKb%9P zD*u=t4SkKz49*HfsF2ZENC0Zjr-tmU7VnoG>7n$U2`nZfN22AUnbUMO#g<G|4<&SN zajv~>4%*Cb#3MfV+G!eB#OhboR0FD_Nw<KupL*@$?Yoeo|D^jXW;s-lD1z=fGl=|N zESsS!(NX`^(Sz%9=O%^VT-S=NAxSm>jX1?O0TRo^KNQ?!#9;g$+Ma^YF>B9rfJ@$b z${@+y<Fu%cb|RZ?99pm~N%KKnTGRT#_+%jDAXJ?wWWku5V)mNeodWY3f>zeT`4OXw zy4Bj?m*(S*nANa1Eg-yLe+^1_%M2c2j9(y0IWW2=>ES@z2$m|y_vbYtJU?ZIEZ-%B z)*>|V0}YNi&#M@V;aoS#-P9m<&KKcfB@eEvQw5vn`B;0$vKSLmN`G2!r1r`6$G(C2 zU!z1pZm1u4iPEb@q7KZ7UB$D|9MchHj>X>Q>r-wffr>T8PX*B@*Y5btH|n=d&mp2= z4_=gPoHz9bU;j!OcQ<?#{MyHQY=0-K4HFe$eVC?Nii2NQj3&+6%~&>kOE$mXqN*)J zoUm7W<v^Wy8cWOq)+U0$FPQHX{M8=g^v7Mf3<tY&4`!iqy5d}DtQe+`%5S&ILWMwW zf*e+6DRoyojtzuBJcfI{=J<5(AugqX*hz+?NWf>AQQ8#&Qwih=Jb9-3Tq)-t3h1qY z;UI5tblDo#D|M0Y+6K2>{&$g7Tx@U!_xwrvh+2|@)wd90U#J%?Df8?0zX*xD7_{O% z2o=@2M-?R6;}n?n+#J)ReuR0v?;SONi+FR9=63#|JpQ(qws59zrWL1Or@w_EzQF?T zg<R@?xz|>YBqIxZU&Z?b`bboCaKclB>2vszTfP<v&_1Y*E^)=Bgjj#@B!R|PmQ^Ci z^y7+NCnx1*na(1_hs?4Nk#)$6Z@xI<Ae!%?OEn(?;r??3?WxPt;L{3%V{h_P#k-C~ z13yz^)7yR-cc;k@Br>!IB&JkXP@jJTbF-GH2x7?6Vi+3G?qk2MSeoyi+`?8?A}l7M z4bu4Q6SFTR+uD3tQZlEeZWJcwC+>2$xA=x520m|wtRxC!R})Q!q9S&Y*Z8dGB|J6m z=Serj$2ciZ)C`#+)@o|1MfSB4IGkhO+~e}6y&9tTT#XwKW+F-Av(Op3#BjqgUwxAc zNz&t39~#y2tfO}qvUUz_@VN2N2V*>XvD&CGoMd9vOpg95jl|P+jjucJ%p2dvERltX zDx?>A*0BtaLqsk9r0*zj;P+pCc6*jIr>i{iIq?eYt%1L%wi+wZW4_-b#WQe){`7Gl zdSze5b|MERgcl^<RWT2-F!yw55Bd?Uaxp{i)u}<DB9nF~uJLdaGJp!ke@2s42paC0 z!dCgZ9>e3DxG!B*QT~#;zyo3q`hR_4x5zB(+zt_kQkpu0xk=lleq3K9etg69JYH*( z1(H<Dsv^XWMKH)}Q^`O7m(7QU+Az<%oKz*d6@Ol~keX$k_Jb#WxSFe~OdxBIz>)Uc z-j`iFVjtMqDxuYyrxGm4r-=l_3kOzWRNI7tKUuk|BCT`PsV32KB-(OZ`<}6!LC<CQ zM`np3@y3f;b9O}z3u-2Hmd9%sU%BMFr-|gDCa~cWgM~rUaMfSz`D5X6%w5aBS9EE+ zQvSBccM$cL*vo&<Z#;uE(V~W74~hp;j;&KOg|5uvRM3={61m8JJ8b<h-66w|D3;%D z_VB6U6;{1l_r%|i{Q!2`Hzp#8&lXSG{-NO5<L4tt#~`lX#sz$N5@Jsw@ozN584tg> zLINiK_vQb(H>UB1tp=j4s&^_TfTl&0A6>lV`h17Dr@U~+>lT1#)sc|ZX)XOhc(}9S zmnz~S&)d(9UX0T}DLVGVQU#!I2J$+9P!7M{&O&pRdR3kpUY+R~2GLL3Rbo8ZRZVoP zC=TaVX-}G?_OLWJ>i|E&4XcZECsmiJtAZ`mE=w_6>j-`#Hji|tv9a<qj*aB66xQ`I z^S+fc^k9URQQK#_5UAT=A~S6?u^WP1GsQ#1J2<W#yD7g#sAzss2C7~?tIUak1zB{b zT{_IOc@2H%^ABs7#oh+*-T=Zk))H+nrjSJt4P;)fhQObf-Br|EHfykIf0v8i8`-ve z#tg|HQx3ov9nR!^Hped$s-BeczPdXgGidR1oq=xM+Q+(BxWPu-(fs~R|2Rsb+1ah% zN}=WXn{V~`(+j8Ox;f4|!kj-9j8b;k7Z#*EaOJnkaEy_c99X;ba5>o^a3S%~;SzKL zeLP)V7nq}v!8>%<z0);phxxYSLFG_++^ae`QLBmK9|}xYI1tu(okapxVo}}rJ$=Hx zkx;PKuU<bN7peAxjR~>)TJboeGEEt-yKCgjkda$u@J?$$`)w3=V1#(|Gi-9~=X}Ze z6jyg6Q9}!A*O3@Srkw3n{rVf~VsbM!B+<m6{u6MUq<?di&<Mu{w9^@Ww3cvZ5ArH_ zUieU8SE{fb_#+f~@12y5$LwSHp+Ni!_aKo8fW-4!D-=Pa`F0vdgLifx(@SK1t^Pv| z_OG>*z@~Qe#xucGenSzD{|xHE<*dp!oUHi1cf!i&5`#|Qw64cW)RBi5qI&l$DnDp) z4ZP(D(>oe~SbrA0hml`$IS#;^ZBHl$^#KLiCyLA%$>O)`oDD3)6)=Z$HIm9OOsvEq zSFySj;v(1PU+2QKqu~=ikrzDopOgr`;!2r8%tRmKp|X{<ThcFF?XaF@KNH5<AaEMF zIeox-6oq1+u#g4-rW$S;%a>h@Dtzye55sF7FH1GMBt~+i-nE%_w>X&XRE6S31zj8p z>FiR`h7n2@=ml2$d1y$PYDd5;fls#jjUV10kcvkj5;g?>sGr}o8%j3n-O^PZW^SAC z5x3&oU)6$GW?_;9osYg377hgIh`s(eX<mhc%{y|>%c%pe)G1pSQYWJ5ylFM5V_~wq zx_1iGzEE5`oHO@zxNZ%t@3P_tkLJis&xRyP?|c_AnSb)u`&rMAz;7gR!%M`MAZnuf zf=+dP=8izJ)susz;HqTV<ku>e6YBQ&m*~7dhH?`)KHgTQ$+6sG4_XrL+;Fj6uKe++ zoc-oU`rI4x1$YdaI}t4%Ddt}9F+I>ISL)-(R#Hg+S<N9+BZuNrzi$?8Rq+l-3%6EE zDKolIT)DD6mx<@^_R3ooMGGr?iENk#z91atvb1H$0=aH!Z&*T;tQg<zbgq1ZpY@D; z9gYnoDFRmU{0TCt7q}#wF$63nhQliXcR9j(-aT3QP3yG;!|&hU?KWE<#YpgU%DDLu zpP3n6zhiJ?rmp_gz4qtMb!QgoM4Kh&ghrg5sNOJ1wgjDL-+vq&q78-BK4tnJ#Jy=a z)PMN?tyDrH`#yG+t*lw6k}b(n*0CgHC;MQSBHP$P2q7e78Di}F9?4Dy!^~vgW@MQd z)BWlH`#<>|_mlh4{e8f3%;Axl`CRYoeO>4II^TN&#J!LgE#AxnMIav1J=A60={F5x z-PorAOn0E)wjvTn4j*o=Bc;wh`iDwE?h)o@#G>SLJVPe*`?8LNd-b*Nfe9+LzhEHH z{%|KXh1%I1CeVJ#j$;Ad%`IOLd?d5<m&z$v<MF5*skH+?x?!`zwgzH3@TP(+0`^8t zeJ)}4Emx*io>%A}f2o9$^!Wx#ii6XW<2sz<hij-N<$vletD#}B`FRqHYS%sjiK63= z__?oDW%@|iJg9!_aE=iE2+mmS&uSj$f)OVSyb0Kg&7O_jTaLG_?|4riTt$^tNpAeE z&&)F3xMAJV!x)7YPf%kB!^_0_v^G~&JGGwbWle66`$cnV%&nn9ox5AMD)q6*sJ#GM zZvCc%b&>S>^4s^moy<P5#-uIh(my1=D8WH^<oIjK#D=q4`vnL1SU+6Z;gc9?Jx3V8 zn#YoroPAtNEH-QZNF2pI`YwtI`4fxWS3-Ghf~Z@s%#@spYu4AaYnw-}*xq+=@>tt5 zF9nu9ed^q&z2TSJC;a0^+77?hQ>;6e`|6=T0cEBCc{m*&rbM9W4m1aQ5$Q3|OcRgH ze3Q3d(<p1C)wbvTL+I`qRd*gBXsU=)x8N?K=qFuXqaC6gw-v9>KH8c6&gw-$K!}NZ z)<;VRi#M{$7i8;YP2FRFlgb?5aK<Xd2#m)6b+)YVZVBQ%1;Gyd>D4vh<OGIMtgg1V zC)F%*h9tuPNSM{WzQnbQBdtR6Kl#^gbe9fFZ7i6VnuCbqohtC;ii7#Ehr9c89$rxs z3guCvuh!uMC_gxJJBy2k8u8W)?1`V6Sz!GQZ;rHE@fXw*`r`OB?5+D^wy}g+<Cq_l zdnk$0X77kI-f(;O2?{$&Mdmyy1g~B9!d;;y!#!-Lss1+Sx5KLLrujWylA&R1#su(C zoUm0+iF>>qEq#y_Ggjt-z`-<@Xb(Jn0ZD4IE#U*YZ)c&wAV|8vYvM-AvAv!b%|vtg zXq+v511j4d*LMC1H^)AHszCB5AJw8UskSGMNZ+I4@x+ZIPz6RYSg5|wly&!pP&qqI zfw4{c)9G!8Y5Dkh+Bl1<WhiITN7;1nk9OEBOoj;VYgSBOwsC$`^L0$hF<Q0KivE>B z@9kHYSd_Q#9I|ZyNnR-Tb$L4mmk`!{*XWZW{hTF5Q3U$3v)*N@`h9qys(InGlpp18 zcFbAmH{h<FP27vN<7mBDNLD3aa!R2|GnoBZ!-yM&w;u-Hx|ee7UJOV@)_}0t=p4J# z-!ec4VL09{0S)cN$WHis(`{y)yvh|%U2{`;cll$LEKSIPn?xk32xoYeq<)YKw}}X? zyw9GoWZ2M<4Ew6~I_M(k0qauK64PkXuj!NnK25Dm!`m+;#!(BpoRJAW$L>1a*Idc~ zGZ@_I-cjgEOPmb;Co7j)dca$U(_wKtw=EYW`^<qIo%nzh#E96NEmFPUYNYTX<WmZp zLB$}+^3DNy#9za(oAJ-uGU#;mN3%=}_-8&LUYsnnv`=$tvzFH2_5JL#&8Z@>HhiaJ z8wU`^dRu*fMy~64))zXl^f=$NEl+=dx${MCLK37f>7pYv(EC-pbQ5K0qC&pW+e?mD zU$m%m+whqFDrzq~pwPngs6K_+<Z_0ncp2R-aJmJsNqF4^VrVt-P~t&u59iBx+h8CL zY`BhVYQ_axgbp15sc-X;Cs*G#Rl?LloO$pX<y6=2t)ZbUsx26Rk-)E_K-5blPyShR zl?ry|(Y4!3K7*XPTzUf@#EG^aUp503(Vw$|N-+ImbuCfL*>dCK(KDb}vDURd+p7fc zXbSJ#I>)yo8Tw-Kr3a}dPcz<ua_1UN48`(233k}T1qpRzjO2^B0Y<*wgc2g7RX7L9 z3A;oG{UYVi!+y=RXWP%pkel6GF0^+j{CP;Q^Y5xn#BXrC?Zv59pK@rpgw*pr-Madu zb(;lrJzqMxLR)#Sj$$ek3HUI@ySKm2Z|H|XuZB;;<MP3=0~@vpRMh7)0H#AAh!t4k zZ^kc=vRJI2s8`1^OO!wL-8PbAdgKw3J@o&fNE~=au{X@vG5WiQS*HQMXvtp*PRI4` z6;&$3oo4Jy%zH4GhRjNMfQMA}LdWh?sv-dgaHqs~l*}tzYUTwyQp3|c%*j5^a<P5k zZNI*<eci1C`Rvi{0W5VPCYRYp|MWp8aE8d)P=m6P-+hpIglnVxkEHg$`7JThuGD`L zoryiWYM^bS*kd_uGPH|R`q?kXn!Ezc`0q-9I>XP6sZj#}OQ;vx;(6nkW2&Y|@$fYt z&OHdXZAB)ij=jOb>3ZtrI(i={D<Q37*9a7r%6*WH2V}Rv<(ODiTVexEol)J=mk2J@ zcb2^Lhg+`Wrj84dG^0blJ{k=GQX~MS*wO}^)C|UI!~Qi1R<o49RKS+2Z>FKg`>G3u z4fy2J9uf9GndyI_W%$bc;Ob2MuM%)1ytBNvO0_RLGu{(sgB`X5C@`}jY`t&X%%y)q zIn<+dydA7F6V&vGPe~nSH3Y@TkC+X11K#j}E!jbvLLK2Vw}Yh(OS}0F&|j)`Q$q6D znKwljsYNnSI2`C1VfVCfFoOR40iMUqRW-MU_Gr)%IuI~>{03RGaL!HX?UpLL-lWe{ z#W5zDEgL2BO%QO_9NcgPAFr0W1Fk?}#q6zub#ABVPe`7gmo*L!648|Cwws7w6bV-j ztK*)wpvRMimb<GB-(NQ9S?YSmYyn_dJVu1HhE>16*KOx&psC+7f%5SQb@g%6yjzHY z4&pKQtg@XG3rV#^L%^^M(Xaiu&TJ4A93~&imRoc^7A$A`TgwMXdxEKdgvRs`k~#HR zL--OqTN{5n-Y&YRV?=-cG8f!xfAkVmb6F?hP&E<Uqw*ZHFyAlwHaN5N{2HH4OvnM4 z8p_zM!ANxaL-?fU<nMt`S{-o;`lFwk6m*-i!3Jzq(%r4t6LE$~;1@(m_TzG=!ant= z+<tCZTh|N8)dXF1VT*gmMUw6QT;*=7a?vpDa*?G@@{099=ip8yOrhMu)i1bNE4n7Y z^I6c|d8W=~{$)9Z5QV4H3iRq?{gB0noAmm+(T>@{fE+AK63T|(-?F18yH;+_YTSa; z0zBY+=h~*cT>&rqYyDlnTUL2KB;gTg;wXZ`?Pkl;T-!EFRtojJB3f9RY@}^s`god_ zCn8LulH?hlUDC71u%zS3_r<WJ6L&e9S@Po_^Pm1zsR+Uzk0v3lYbK)}J<_Wf(v~2> z>-$qV*@%-*Uo$cv$@Y2~%tO|iR`|rvJP}|6>HhwBKAHJKv>_bxaqSTK>3U%qgZX23 zAP24Tu%P|d*@s8%&V1q4t5xF`8Y)wVfTce>3b<?>^nBTTS$b<OGWk{p73FRk$y^kd z&kb#OOlXMq0($I$033r6E=<w#=>2UTRllA3rexA%iYy>!m#qV)n}8<?w^c+kMnaL+ zM7uaJR(2eSxGjnPF+5mj8B}H#`k_%{#fM~GGH$Di-@9S~yGQ!c&PSBm8QM@(d1_v5 zp$X2Ab_#Yf^V_NuAa6M@=Ox=?bLIN1Y_p>oG)Ap+h0S3*#;oG0E+m$+s!Hr)I1U4x zp1|W5X>`hh)P6N&seAM%F~lIaF8>mYr*zXQqX@Zvbdq?svydqzrxyQeAga@A3f`UY z&ntKzg*>BV0<QNj*+`)5MQ;=@Rugtm?Sg)5w8ek!Y#ncnk?+(1kw$gVhKi!7SdsVr z*y?9^Or3i)fl`B~Rp?+B>-c1a-e7l1%6yra(P+eo;X2|^@3esC;71M<+ZH>bT18h3 zxgX|ydiJsh{2P-MT26kJy`>Z17s42`ePBLa!H#q1vKacf*q0D~K>QGh4E<uYMt-fp zcygQufb<krK=k2UB#;Hk2f$72F}MaP1#!ce4J5Que;7GtZ^E%gWH3;W^noQ%hkSNW zk2>{zqE~ta$@|gQNrSJC(qf-ny1VuI5BJ`6q%^6atRYIx0GrQgz0sf&ol?^0=kD)0 z8H$c;Efk}kJcfd;uyx)^luKWUC5V7HZy5&EfubuFdu3CCyMPyX`F;!dbpr=QU`h>w zSDojokP6s(Z}5TT3OMabxP`+ZC4KY2JQ)T7M%(nBo`-;G#`l3!Q=H&yk&I_|ADvAn ztaTKd0WJV!Bt?1*H+=wNtn5oj82YNvH^KaLnJ}7t0FG{coL&f3`7zKlDS7hnn_B&k zw)1*&gB%p<4p0;jr=AMCO_+^ARciKeW6JFv%G`G<Z8cvW8^_sR)Uy;y)O2>)@1Du* z^S%gG!FQhY%@h~A*4sIwf`!`<tO#9enL*Q6qt@oGSmj+WvP6-!8;JNv;hn5O{-1SY z{qUwrt5sMKo<X8pMSbD;_=stV-t`5lzNyh7u}5gl?bq)gH2kO@C?IpeGQ2rzKCE1d z^j~~ok)g+}I%rxLWcU7DOOl^4w6;&<auabWa?d|Bm&JP4OX2$VaZkWeOhZ&kR{&j~ zISpUS>{nw;TagL>GiO6xRDfA+gk!T4%tK6ZLCMj<n|Jm#siO~kMGai4+kSZ}KtIga z497^PwEGEu^p=9{xVcMVa9_HHigLgwUX@T+E4#HYsFo8EdMW-d)wFG;7C_pjS3Y<5 zo7k71ZrS05j@)58m9y{e!i7x3Vyf?`nGQ)L5zS-Ov_6wMdeDK%*rO@=oLPx57$*Q7 zOE@Gqtv1<lLbnEv@@`H46Q4*kI6tnrU1W_KOvrS}xPQygv->L;t4bOMa418Qz?dHR ziAU;?Ohdy;$>4FM!ZW;4wqkJ4hqtHmLe0$*tNKeZXz}=VUTEz=o={WE6ii#{ke1*q zD2b7gbG%1$teAw_u;W&^BaeLD{APdQve+rF(A?`k33DbnVfzx3QhdKqQL8pzzn&jn z_c8fDcBuboUSsXtr$FeNjS-%NxjEQK7&k%eWc4n%^X6DiH>4__{Xng{pQ`IfZUlTL z-zCz`e+_mqGg=!0ck}Y+M}>Iz*u_}M^z5jFhH)B5^$pWBHaB`sJi@HD-24rX12`zV zYC%;SbSLe_#T!R~#}|K9=MM*_XRCjtP-U-lVDmh|>w!dX%EiA_howNJ3I>X8!F*o_ ziQ_NTOw}-!@l8ymBw6!Q<yn6L=d{{%V^bQef*ZXgI9jE%g4kO}@)Co34Y?PfTTcnI zfbDT^)B95e+_R}I^SOj>&O653(9pbeO$sv@uu+Rb0ZH(Apj7|?@ho<Jr5Gr^ZsW|X zSBZ$nEcH0hY?f8|v@&8dh#W`1UFvl#Fe0b6qZlu~-!^=##<qUM9GrUcYc=)2N`FsO z+0J5x(!8FCx4=3rHK@{W76`DQTy=Z&)h#3{ec{#1S?&iD*Z%anW(W0EQup%TA>_wU zK#O686TvS|{f+19bcL=lYwRac(s!PkXOM%rT_(uNGI2~w(fAo5&qqwU`$M`+?aDtz zB(g^)0`kvqfLK2^jiEqSEH>ajWy|$k)mx3dP9Hd)f12czozqDXt|cZ9Fa$jrb2>Fk zDOs=H*tbS5r247e8NlWbwS^#-HKd`c-IVK-l}<#BkMeOl7H65pko1OBG4)6#P*kui zOrB7;Ei~OOw`gaPSHDx<Pt6D$gr|q*_pB05pgxkV0`@9eZxUU(;u;E^R$`w$-Ziw^ zaFcj1)bx6}F-|mUs=R-b%OZryeQgxvVs{C4t_%ZWb*=xsXs0VJP#vKtb>5Ty)t9@b zqIzU^#vYZm?XwCupLv;>OvCh?%g5u*{f1M@pxiKZ?+a!##4c~{zAJ9mu2Io_xkN=3 z$ff`Uk!eg)*p{?haf{9-^%Dxp<I<kUot6FF9O39|&-TCsYU{m-@LSMwliBv30#~JW z`SAf7lT(430F5;<xfAp8r{;{r!V}y8cI6bk#CK;zp{*jbsIty?l-FC}L?Rn|kQ~j= zLtyOfxM28E$Ja~RiYS^L{5`6({!UeXZ}XRu0mF-~N4~3plZTA;+Lg!l_B?{ZXCx9* z52-{NE;THMxP-hxN0*eW-?B;jV)!|2Rq}=6&&TIfmGA&RV2Q7l_hboZxWB^muTAz% zl^Bc7c*M5GDW3hJP%!BofcSU|TXM#54ZbY-&tvUEq8`WwCz6e;@);I1gB_e*UvRG& zr(`Ye%6_^<Lv@`z0%TZc!i<47|Bae6PC|;&ddhKve9x1rxu!V+YoBwqPxpTK@$G{u z6VTicyR23zbiS9vOb(o--o9M;WbYf`QU4KD0(I7`n~--8XsD^TN%^RJERy#t&;4=h zlP4r`nb?3u2h(Y_Cpdaq={={^JCeIKobf^5`fq|r&N+rBe64^j<~97xt+JFdYBpT5 z@Sg07i}7Kxf6;uAb|72=4O6C#>}j@^sjCZ25xl8+mFeo`WyJWG=HhLuz?`5^pL{X2 zcoy*+x=8$wdGz`cQ@9K%uUj3`V@p2{ui4dbcW!A!@8&iB*4Zy}CerlZknxWt>tGX^ zdvw#DeAUm|ab^?(Vs(8^C$}~*ZI~=cS4mIaSF(2mA{V&32%{0LO4#5PKry3`moHLY zgT64|7&@z|#cG~JD#yn}*V*y7o;aS=G@xEBh?S=P{K2n?R;zGQ_nY{F?Awbd_c@Ac znS21GqK&ysULun#X7vd<0}cZrqw!vKe{93fV^%M3i$LpH-s`*v?*UHKgAj>6RGAux zrhmkme4qPewmy&DcFgqs_i8mA-|6grF?0~i$n^MRS}3GDdwfcv?dA+d%GnqykOUp( zO#B|DR`(?JcEU5W+3ka4769zMyZiiB<znCT)NPg_9g*Elu+;&OAQBGnF9^{^II-zZ zM0-MBn=GTEg-j~-9lklvgflH)H2js?MQ7janD}r}MwS8B(-l<96#n)~=r#tRH;%I_ z-Nwv87VqWXgw8w|?CRoTQ-2Nx%%D2)^1*dGzC-lyZ8#<LIA6r39KXwZV?J^Mgt^oA z_$DgiwLGm>7cQiR-dRk4&-g@uf?9%c<zv}v%M}J9<Xa#%Zj1V{Yl#_7d_%k92T0Gt z+QXJ|PRR_ZCk_x>-HcGKAjxRW>KptqcaYRXAj9cuIPWG02O#v*9Sg|dajKh4_ck7V zHqMLx&4z|?1E6=ZLn}10JME|C7Z&!SNM`-{Gl<_G7TX%FV4c3Rn;>>*ZFe5)G;&w+ z0J6SY<($L?s|_RuL!OV4uVe>xgXvr~t`IvC{S(jAM1K>iek(C(z3cQo&j3PlDi<pz z(&L^6K9NLwC>>!SH-`Q!IX`{RNMe27cC$6qidY#Fsc~bAnS{5V+LqtIzu7Q)m$JjB z_E7}OO2&3=ZJGMpC1I}eivuS_a-2Q48HvXb?3k0X5>6mwZK}@fk!6t4`3LfVO#T%h z7bUU*A-ywCdim)m4qb2v)>iFw6H)X>cJ+(?@601Nm#(x55<y1O0f1o*ajM(Vn5v7C za95s+dD&+-5)YnjbAkFTUrl$anA@}!oDG084ZqO5$F`l7c=>2eVdp>U75>L~V$ptm z!avt!25kU?pc3EoZ$$lAl89Z@2wU*%jcx^Yd@`iqk9Msf2ARX@SrLc&*`5n+70G)% zk+h&)sSxk3MP~q+<SGF@eo#M&qdm>?`|9j{R5S`I4sl{zfwM@Gb#Tc%uI-#-YFgl! zN|SB_?akFWy$nOl&6`)Q4TNA1yrcOgrvet?2Eh2T76&vAUsn-)7>_sYB$G#fsjB`` zxwS04I`S@Y4Hv6!o0dk|Jf4SStG48PmfY>WGkw+Yln%9VxMHh7Dz0?VxY0I#kbG{7 z`^2i^g?^4u-@Sl^bLZvATagptf~0Z-VqjZk7a_TKZhB(DfPIz|8Y#UD%Uez!Y5*E$ ze^Lh}_AeCzyf6MQ_RWCgSz!x}>^yl~UZ(xLwK?INq@#oVg7)p51ap1B@(D8|Mfxmj z7Sem3-?LCj?0OaN7s-En+xIbaW1{6m0tj<Z$c(L1T@-&BKT_KgSC|sQdo3aIXHx$c zcsB_9!2#fk@PH2SKy$=m?!U<KaAGd!(WIouT%#D~LPGu^-B@AM60dtRe`1jkDgDZf z`EUAbUiBls&OsO6>`yWKp4+iiAj$zZLK-zT2luiqe%@x+swEG0#Rit(G^Nw1ewEo! z0;JcLeX4G&O``imwEwkK9D`4Z4J25$YBxa#b~0OR3?QG9&smV>@lgoqXYuAS{1`^x z-A7PMPGl3L`Zz>a!kNM<-UB{i!vpu`mSl>u4X7uXaUH`o;a%5pb&w%JX(InR`&rKi z7JfYu{0YFL2zKttkz!vPz^FEMAkf~dVx>bE=p{$ge$jql<lz0bKH$p_^o3WfNme9) zRW4Xu@yJ$h`rc!eGIgFwVBpN?C*C7NhobD&<;pI!?>6oC1w1uRCb2Ao-qc+eY?`SM znnnfMOsaRuYIQU{RRg9_fdnm2I?W5NtiZAl!S*zS>ZaAryqeEwcW#@R+_Jlw?B=)M z7ss8*<`uTy-#hYcfRsYCiTSbqrxvug?usn^`b*X9d)p?a2N|Qm2k850k~ViwZKpL0 zTHC_*by>ZhsjHY5Pu#k4Sy*6JumYw`XfG*sJ@zhiO=+uGb*6V_7r&%vfZX5L@c6x9 z4#rXgoMO6c8VY^Ezf@aKn(l1v*X4FgF7;+JU{3^RaWt9@0bb0y>~WnpUw&;}A_ReJ z4gN&BZM9}W?3@^BeXHZ1tMj7o@{gVudpI%8$!x+ma_|N2<e%X*`nWa|Copl-Xu(40 zO!VU90kQx_8-&x}W7Gn`kn;vgrjkKj?$U?zKi9-*=Ea&-Bsyita)3-rDfW;=4*Rkm z7}(H|F_Rsh-*i`3#E}Ov*qWRE8csOvqsICWp8)uK^#vMz8*TR|a#;L+>%iSd?ODho znDUVWc1LDgmaCGX!uC<(^yD+N;nZ`a?y2w#AoF3x7T62X7xkj^a^I1(a1uEZrHxL` zPAQxre{7>`VO&I+J`5M3KBusx+ne=q#;sWP`@HPNlN5`YF;Ww*d`DBSHV2DoD(DL+ zMMLz$f?9?X`El~k{5Ush`9f!#{&}kbzfD&Tg?*1KX!kS7R%ed9x5Ky8@?+#@ze?cN zOv|POixr_gxysFq16`l*8Km&mhcTbI@m&990fZq*ldJ&DP<9i6GJYFQR48|H_H^*5 zKQbfCcXkBcF%nAt$fnNL1?>l4B6ZmDGZ8Pn56~wSa$F1_7K8*md--Tc;}L$Q)w|aU z-qmpt+HN2=+htYNR0fegjoncj{?q{4p-F9zC$u9=ppiW@DtWP+C!XK!KMDq7Lmc>G zh5rS%D!tLTMgrC_g2ehFd_2w6;k_zD=HN_bp-&f0bP3mD2!j$Ir^2bpvdM<c4j*+q zE<Ad)<o4kYENq)g)x3E9b{~68iH^5Y{&|RY&2WR)A>FN?J1HZ!Rn9oSMe&|wR>k~A zn?%`PeGOH6QZ<MeY;jDqXRC0D(i{7)lu;LR=FTtrAABv6Dz~y%HALrJGAIfJt-g1G z<IsXb=$r8SrP=ynm1|xDqUS?q|H1qEKs3mt)|>t}N?fEqH%05sJ?89B;))>7B9O~V zQSDa=;j`oZkbow;Kfxb@zXC&NgF&)HeIa61LjWqQL&PLB2R8AxIQU4ibf1bw4QQKf zyAN?3`Dys~wT9t@uPjTJx2&e<Joh`3m}=*T2K7)FCrb!xF|5d+bB;}zAk~(HXorQj z;D=i`>kI5%%OE^q_h&Ghm$rC`F;7U`D-{%OsP@v+jy9lShU>ny`2%kX<wWRIJFM_P z%a;hRNt%=>18M-bItHBD3dPtq?%5u+XjOVi8ARVnf>Zsq2>!70CV++ub|vI@*Kg)s z&mNjLNkltl(A+3>TBz65ic@K@!ofiJ4v<@RFPwmsUv!5M=6*O6uRj&}OI0g-c;>$0 z690Z`sKAc;C5-@g*nfC_v!&x`>wxioex=Tpdi00r(V;9&kvILjrmwe6x!d7H{&K=^ zY~spy%mt#uM)SLlE%_}@?V>9se3u>e^G{tQCfct;m-_f`)usSBw#s#Ho?eupy`J^~ zA3MJastmDV8-Ol7B9OV0@^Oiw=9xN~kIkaI%(m|)B|Uw=1covfA+RU|ws65MC0j9) zIeuVLny$F`6jG3S197E50Ka;!97(!|<$+&b4<d?Hos66<Zl^6_lvmc4Z;@}?ECwUv z?W{9#wrPb>KMNaniFuy*t#3uOh!^QaF5}@qOov<B)d^)m6he8`_16QsiMQtf>j~2x zuCmSg>?2>xqKy%H2y@_jpSlmf6GB%jW*8IHY>J>@eH)!#CFXfcj>}H^!J>4AReg7m z(u9~D+T{kqbQ}>J%P#e-;PhefyI+?^PjBOjhyYml%EAV%=W^I{$YO~5d*OyC$zq#7 z>6($N0=!l33+tsaUOU?!Yb~wmg7vSjqz<joAuj2OkC|scgYX^EYC5=KDSF+yY3Ebx z&)4_3sj4%m)%8X<Y}3Lj=H}c^UgW%7@j`)aL8|UJaPQjxF-v6YBAZ7()i<EG8kaww zmX^19V5|O4XDwTfHRYD!QA}2fHRw&{VMiQ@V@C~AMFI$XT4M+L&okIh5}ZVWbIO-b z;P-4YWA;GSq#k(bylZw8kbU%4GI4tG!&};4a^BtE)B@*DW{ZpgDH{itKZi))$Fym+ zLMgh~hAN!z;d?jCwb+&wH<Z^)x7vZtf&r_Wd&#WuWe+&ntBnJjA1OqTiE$dQ^b%>T z=P)r~c{mqVIhUlYFl!7za(J-f(XGKjd`F)%718gW-CRWLeSLKG72#f$-Tku<WWf@< zzMwK2x8`qeRs=gf$lJxz$=S9PY_g-<<4ZQpF65{VLw5xS2L?B}pgUb`fry@&RtR?S z>WU{SH%Py_5$1_l-4OQ6KhhiV(3gA}C9Cpzl}^?tHH0p;2^rh0h3Qyc)Ok3$mP(&f zol;TL-hXdZ8pl{Y5}Z$#8!0)vijn#slQ@Vls+fPE3I$rb{{wv}SOzLa{Bj4MD>tek zHo(*5HZM_+zvv~8*RSP|eW46S(}#(2S`C(miQ1!vQS)x!0#tfGot*EzGGj;<$6N(w zS+zZXsYtTG&<RmQVcDaBkIeznCo-2NuwygLW$aT?idEp5S7$Lobtw91Nq)5&`udTX zgHGv&Ft`O=>}6~nlO#zN#a*uQPv+Ed5^bxv5%`x10C+z)mww&z>)8rp2%(H3=-PfE zPhA-MxFrb3cI85d%+K&?rcs+(=~=Qe@*|nPVzc=uA`=MXR*Zpue~KO!@Ow?R<VTH- z+xqy0E+eB)ew6rpfxey7|1vDPP_Lu}nGF3<`{}NuGh3G}Omyl6;q;yp@#gM4_Se{- zE%%$w!}Z?pufJ_r=-T^Z-sWn?<Qn2s995WJkBSmVU>Se<EIgv(Ehm%CrPg6=7x7Yg zxx3$R)fo_ya2T4aIR7xZpY7fii>Exq{J&JDApuXPKGh~&P>H`UDEFXz70+*<@*pg9 zZ$24j+AQ(CT^43E31cWxZ<sfzM+qe9`-px@<|%n!K<Ik-OL~`*Zb#u}#Acpd$^Rql z2juc>*2fW@4T#CTJM_AQfP;o?_*~VeDZ{xewwI;Pm0vPiQv$Z8%oXr^JT7?`#`}wL zJQ)ZMxU{_1!hS<x(qS5*1!tQ@WDAfhw%AmJKf4`waoa7bAzI)SEoGys#9&79P-4eq zVh#uq|NKLs(d3pXLNbzY6IWM?<R^wVRFUWhtT2@hSOfiDMegag_JPT_gJUC1jz5>L zvhMzH&A;Ryzehs?(&}^)Ja+rrDs9?Uri|`RKKhuSt|;&$Se*ZGn#_&B!dTW8Ek;XF zD`z`6%LPF_sR{iozNcjyU88uL5jI?N{`OgcJ9?(Fd@K8NU1q~<>JP2riNc$5PUaUG z?>*gxzwo9-wH7ki^*(?8Nmw0yi-teXCe$q6WrkZlF{j$OA>vN_)i+;WpWR#$q)Ol> z!kH*P@~%xC(jw)za-V1gC)rBSM)Vt=78`g#m9Y75!Z|TrrB?ARxsUgq>hxQ_T}X90 zy>c!A*QSlQf0s)k@iVlx2VM2)BrvneHM3#8IGaB7Q_2*h(WjY)9Ip4he6TSkwow88 z7&g&h;9C!-wuY{5JwVx*8%;`jexERuN@$1F2;OHLRTzNxsG;FwJGdn>{a>mrW1!{# z?F!`9G{nORfHtMl=3k8honItHj0EtsX=8A@PI^dDMwx{!2E@U`zG*c}?4sB@db635 z=HN>u#*;IMd#RDoISt5;{-uR#Is=a(!HE$Fz|r}CJ)M;{)aG@wb)lYy25J8yaf<$L zBo3>23QT)agVSA+NQ&>x3=9d_#R+yml7)WNIU<MTGQ0Sr8<AJY&xs-@q)GA(r!f48 z$je#n;cef6omN;3(b!I>|2t7a<=yjhH-iUI8vl*l;D3NqI3U)SpD|WNBew|ioiL{Z z%T&6gh~7q|Ub)frD}zlbQiB`7>J~umjeFWR8YkB^|49RpcpPW#f!N?BmhD#cGO{V* zFh40<xG-16xfZc$@K!Hq^}1kk)zBCTt`yUHy9&C`V_CN-qZ2_{EHq6Kj=T5uRjTsg zh)idjm3k<J#m1^PW1{NtPu}<-?yhj6<v@*4+x^xj`18<a@3?k85aWy5cuUGqv$R*l z&VK7pzvI_?h`v*f9TwoMF`%aW0aihY<3}=RaY{rs&Dn3@9?XL@B;Azez<S4Mt&w5z z-k85sZH=ofZVq3D5|Rp1qA#mO09p%nOA<?OI14IAdt5%^IgfLMKJ-`W;<p80!G_{U zB0pKqkI7W5p8pAmBM`U;Ni%4AN6Sk`{i`=+%lB-Hw0uDv^7FuRjf|D7BQcCjW%Pcc zu4vJH9(lHWne0BSkRMOEFr^cbm`IwOG?<<Vjo0(cWvF|O#$LT^{nFaMd<&lo#@Y3C z&_bYhMuI-Cry7Qa!Ja#6EwTuGTu@E3UDJ9A<|I3pl2q?a{)l{@iT+U%$`|!PHf&OO zjf-3!|62nL9|h6EmvqPg8>O6lUqimlE>@^l>nx9<v3fK;U+%*isRoGpm;nSEh`JUq z3z`&SDa~Wn_{Lhq7@{X|ZC9c#>*<$-2xXzV=mM7j?a2qkoRv4$oPNJA4|_5k4E8}v z@fpfW7Xmy>+@Gz{j7_EE!$nBfK9YL+PIg;xmfpR`nV0R^8_wyxtL}frWM1`jnvwJZ z1h8sGJ%Pe|eik5@f24fZpa$>H14F(}6mXN3m{DUa9w{J6^qd&XnKf2V?(8^9jD6Mq z;<J+i@&BeT>0#vc@+wUkGE;z{^ybhoB9kJU{<s)d60>8TnPw=g7NpvLc%3K7_qJ{2 zsiwP;E9Mg9P6>Sl#?CTPg$=AalzF>xVA3-rN;5?CRAk8+IuTalpey_3=W_P%>r(B) zb7aZZc;ji0Rbu>tkQD~fUlqsmFn;jox#gM-ayd2S8aQd`z}Vl8%+UuN9XI#h)G@}f zgP8nPlX;<tQAoALF5AV*ui8SsxfT`ffSy{)w_T0!A_otxE4T4wZJP9y9{FCsZ9&VJ zE_5zkxBy0BTfy8U=@CvJ5j!G1IPOO9sB1$?R~h`2_PFear1ei$o0mvNOAO$3bD$8N zF9F`7&CKpxaZSQN?<ns&Klj%p%#Z6H&O%BuHA91Rsl8`#?nB@ZBnJ@Ebb!d5<ry`- z)e#4G#|$Dw=f>S#k-+CacYa?zL_@uMxIxjL1|2a6<?0&3$8WA(lsZ&5#6wt(?bJ3x zKoO{D;^9)<^T|Cm2;0tIs_e|K)FQgY<YXz%vn5GsiH}4>#DM|FQD74K)Ck4F5zecB zM~d7ht0z3~Np<}%m6~}8>7G|+cL?_;*Qra*E5jCG!Y1i8iqD=!X4h@O<Grh(jijr4 z`tiCdhesE?`|aRaqo$RNHR0pn1J*GhFs*~MXxd&+`UX_tnEC#O=10v;Gj)6Fo*B1( zomHu~u?F>pf&R&7*hMD<2~r2`!l+ZTcVF*{-<5sJl@i40^MS(VtPiX^A`fjecovnk z$Gj>^42UBPpB^PKzPwxItwlt>!IR>>u`;w>B|J^S8TxaQ1*W=3S6ROjtlFdz`}y(c z#FA(=dn|~}z23xnJwxBmQ}P=}){(O4KH{OyS*@^o`G@gvSrXmw0Ke393GsXwVwXqs zbyQt%lh)f?)Xt5Sz``Rt0doV$>cR`UE7a#yEOut-U+;o0#}6-&vJbxixRPKzn0JAE zw+ZkFjVKuedsI3!H8*#7zw=)IM~whFHz3Drv>Tjb{t<TF)0NCZ4J}RH8AV~}E1bQs z0oTvTkvaR9Jj|Ueti%y@l|fIYD&z;6vOP7N8yfxGZ}z6%=n;5ZYNAu4P*SqVo{d=G z;hM0&FzPKmc`TwC{bcuM57Vm*f$O|!dOQ_1<^5eL(f4Qs5Cu4hascS6TfG_Sca^7T zl<Z3-StjrkTLsV4TTtG6pnQ$G7ijAAW+Pfa#eEY9bNb&;b-9Z9HZbTMWq`(L&$Oy5 ze)QV*nlR%~5`6b@Q)4I86i{OGXYq6~SuJ7|GBSfp=dCt5=uYV%s@Oj}=$ZqW3xMGd z&I-G(CTh?3$vpeTN2h@FU$Rk(Esrgej}z@|+%Ts{F%big8j}L+#+)I97$I5bgu?uz zj{dg$P2O=v(2T9_OeT`h$;<%6*-jdg;5ncF{z`;gvfC;-z?sOt&&XgwGPJIp3=sAd z-VE~gK(aK)MpHR@IK@A2LXsX(RN>=V<8Xo<a9D6wm0-ovacwdt#G9lg<Cv#YBB=|- z3%6p&$8^T1zT5%Ud1|xm%uq-#Mr;a&WZ4+slv{|MQJ>Jwvnuo)80x8fNns}a`y!eU z;feC|i{}@UazZb>gv4jXWU@dWET2()^}|i4Y{*wg4r~<@`q)9iM5BzfohONry!jng zOXsR4PO&smB}r^i;e*0I+hh}-fRh$xL$!iAqA3@kCbLgkrctK~(<s%PEHBPSeFX+T zEG|CIJ)JF|Lqp~uI^NC~j3E8DQhEzab*kAE{=*>xtC?3rmFo#-ji<?~s>|-~#R^~D zF7sfsXSC|FOf#{{tN_%=j`&<(%G>tebF1J@FIMYb{wH<7M{4P9wY;YEJ*xWU5;cd) z=Y6LNFpVVmt@%ya>y%3^cPOTt6j1e~e3-g_CG%yeO3CDR0x_?-1QZ#Yt}x=Q0y?1s zkBA}~;PF;X?1;*!F#^+#8-j|ro+_W=`#U3RI@WT76p@k{H45LK-x!KmuWXcXNXe5! zWEVC>@VLA&BkHg^6beOA6WFBKepAf`fMaJ*9>D43ImVD4g8J@@o=Jlr?<zNJoOa$m z#1ku%&qLk2ZCN?$JD8*#HKg-pq|Q#W!soyJ*~v$i@VT#tNPzm#XTXJCu5`=1W>}Kl zn9J&pwoOw%6;h29@3Xw4)Fp#w<c5k3V(Mw;c6XkIX1>i&*H8FMr4osSCzd2XtsYab z``4MqXqHKQD|vrD*6C&oLN>|<*^uY{vlLh`Z>aA8rCrZIQDF1ri@V|k8gdD(KhS*N zkFu$>W{o6ECdY#g9s(O#>KGD0JL>^+Ks$Q*W!q2ysT<Nm)Oscoy)e8=YnTNvt0vkW zH!|`=oqHR&zuO8B6w90)DvBHCM59mm2-XiczeebM|0Kt+QyFX#gMUcAAMArg?nHjR zxH$UGo+UhZ#GezGuxw#vW?JkbZ@Z@e{vLh_i|DWD+#W+<C|)j-avWCPUWm9!uUabO zvD{LZC03uyuKP(dJwR9>a$U>NG7-5xr0WSWyby3{1>D~nGXT0A&hsxcaVn`!zGXPo z%DZ~$L76cB3PgCnPYc@-17>IkEg)mzD3O@}9uIi~zhK@9&JX7iAN@w#LQ%eUY;`=z zEF^l<i3(g&Xxsx|5!w3bcLPFt)p=d@4nzQyH`*r=&v?<`BZRC$WQ<9$)lK-sZ+-h> zI%kv<C%MhN2vD88{!8^G49`fuP!2#CD*XVmhKh71DCV$@ePO^yq{BP@Ste~KnITk^ zZMB0Jj^$`2oJFVLmKvfvn(3dNz+^-=UKXv~sN;v{`YaJj)L>N6OSsiK$-yllz17zn z`HF2IY)sFhYA3hTclIC-j)sQR;Mt%CaoI<dlF7=zcV-Um*}kMV>#5eg*_m@Q8}={G z<#J{D7PZrHPXf5s9xs?UFf@p7mn3onbiPD;#T5S;snQ<UgUKB#<RC}ElRUqf1~oZ? zc&9Dr6pJyU8xmKbI==VfH{0dCB$_qbV%9i$eGw0SMXK@}g8~NvQ|W8A7bjbdv1f3b zx~2(_mGMIc+cl%4L+|SKRNhz5=f2@*+SorfHAJu6x7JSm7!Y7a^=e2H0Q8;%2H(Tv zM>8H|)#a@=hbIjj?14`p!$J;fwD><UjX&UY1om;V6OrvOOs8{3j%3%Z)bri_MdQBR z6OsL)Tld-dPJE_jKa+3Pk>DkYIri8sYWpfk7WMq%b&izw(fl7^!=BF)GcHw-zIO2# z{TcbN%j?G>s2|m}&n0}go+hd1%pF(rz@ZY~HAJnUI)I|3W{j*rnADmj8~R5tL;9TQ zE|0;lsWKJ-Vq#a^Dp5N>m~AFmI_}FxDt&0BiV5SphtVdNdCT}DY71MR3;>}!2Qu*- z$NX0a?(S9o!%(Cs%O9xfiX#O@^S>S|^8)hqX_R_Um*PoMo0lg_*$c_;4m7@!4{aVs zfJv8)z;s(%-vXAdz#fb%sB7b~n93qP4a&-%$k!>Ha+0~SZ&lG-LkDY_NI}vp-Ik^< zKbH}@xMv}*W35S`iF0QH74V5f6ib9<+7S{s8CqZWDr2-KC)HlG)pie=_o&>j?qYu# z0bV{|w_aG#)D-bk+e=ipH>u_`KJk0Vxm`Cm#O5l!u9bUPQMBmh{w-5bT!qc^(;k%{ zSw1ChnI|?Q>D`<w(fV(0E+47Q#x26AN#3GAwhY<rtaO0>?)j8`=ZTa1SUVRfv@87b zRCE-UIc;$X@-0ANG_O{7n5Dn*1^;g%Y4+3Xd$Rq6SU%vyj};;ulSQi6_YGDz$|Kgk z)5kGgi*~vVgeR%aP!txyiE3bf7$2_1@hhZ2G-n=LMK8e1c;u7c-^@sI0iBd!ZUNVX zhno~;=*(LGF-Ev08*t(p0L!M!g>`KPNYL*70RL(mKLR*CKrY-eiQ!__R-_=yS$P@m zjWHo>+n-(H={1?Yk_oqN5AHq9S%xDH-<$$ie6dY*QpSL+Rewd{y>&fbu%<1x&^0hy zI>q&~Yjv#0j)O&E0-Wx3pG{${JfEN8tfxr+qb9x78@9Am_Dy`8<q}s11ZHyo%ahgE zdN0A>hR4o8Y_j*pl^KANw!~I9#3i2g?VX3f;U9e^@}<_C{!Cj|(z8(@Km?$qtc`iG zByR^elxiL@F+YM^BPIxp{ZbBQ6F|@$jHA5gIndh0r6<;YV|h)swfxfwu!|0Cta_{` z?Wg498>_ZIbLka&l$&nu1678fl^BG8X%;flZ~3g(&(Ml?HMu;9`2iN7rkpqMTLPlT zfm!Lei5>YI+Z<V7Okt04<K%$<<`f*IKzj%V?=%j4$ba$r+<=G20M_R4-}`7DJwhz% zY`=J$<e*(Qg)EvJY;gV>WhL){&yZAIZIi$$w8!~jJM%=0k2C|$i?mR4zHl{l@X34c zt6WuxSZfzpHzDP8W!I;8-ilaV<<%5i|9a!fn^P}iTP;7JF2>qj13U=ptv&^FE)>vs z)y0Kjw(jrJzie}_`cTAL08PG5#TJ-JO~&(5qFRV_X2@{^_q)_yww&$#LZR!PYgx*7 zswn^Rtw>egw9pXMT#e3671VUMm4y{`vf_&$m%{EStd5kx;7wpx1NR>GR|hD^#gjie ze`cKt9evG|;?hli5V1XrAvw0f!LoJO@4Z)n!)qZBk`t*_*gA`Ij)xg|BdwrzSW1p} zP}QjSQB#%l4?$FnkI}$X1`XnuR`L#Y2?)h!-hEO9UKw?<rf68f*G)I=7}XxbAlTAF z+KOM*ZAs?!Ep=&o_tc!-OV(@@*p_8UO4g)w{1QifC2qu7w|c@mDz~`!O}oWhjfL__ z^g(&dQP`8&0SYiV>uf%>JMa2+opOn=o8>$Bd(L&{XhN2^%rWli+b~&)z*dLHXSuCR zM?M;;l3~9xMXO+wU8AaBhrHAIBxi8+(g6)%A?%!klfD#Gz%CHjGfTdOm7q~k)3qWs z3!_02A`kAU{iZ+x@y{2x=77(Y_EH%Im$PS#sQdM(e&;PcY%pD|ZOGe1uUe#(G%T(t zZ{|c_)hMj^w`mv;Xo+WJw1PV5HcX+sckb+d{Jn6qdn^LGuX`|nw_YNPEb+tFwFrBZ zOTa$@s*1;I6yeo%`ocxML9T&ln_q!}LYJkSmbmU8E8EA|r|KZ>Z40z~Y{dvcQEG-b z`ZAcNr*~)o-#dwVGxQ8G=3U&iXf8d~CK^;QO&mqo5~k72j=4%~#fYZ)epx@hK09{= zdF!i@rLa!nCw&o_+$kZJ#00?Uf|s9%{?x0#khFhpAKuwLTU>VaoC#e@7Z89nzeELl zI0Z96ZgD#&I*bdqw*=_>xKzR3|EzeBe+<txp9<%NS*CWcfN)j|F>#sSPC0G<@X6Uu zV}FXE2uGRTDmxhx7DWLE&t6@#Vl~!wDXb>DUrhl=%NWLD<R=8@d|pn3E!H%5Xv`T~ z%S5y*LH+tQBvE7X5I&=v*W#H0@^o)=<A6_yJ%sV$Rsh74jUu>iVl7}0?CE8TzWbq7 z^LcZ|(eHD80rKW~Wc_NQh{}(69Q@Lp)u#E0zu&xpy;`1K{*@M5^uVjmehF%<PE@NN z2SQB?kL0z|VQ(lEh{p7DF#fvV(S0>6CVYB=tky8&Oa#XVw0Y~L>2d5sv^>2fYrY94 zT_0SS=Xxd5gjc{A+d_yeec@97veXFi0I0n3#T5Rvw2b#2<F04=x6AF@foYhg;(F3q zQ9kNh7`8H)_19eKWea%Q%D^bzwq_Z8O$*mSXR*aJ-&XeFR>mUbK(?GMg|X4e9&%tF zzeTxDipL?D+_K?4@dhfx4=262e|YK}DgS<9*nTZ|IRsbhI8Biyaf?sGESkY_^12%C zsOoM5UWanzP!|5@Y_p|xPpI?7>DoAfT=oY(i@Jjf3eQL<N5=*PaI8#SLC&c=?P_EK zdGk&3lz9TwZW(nP3se5Qr83aV$jY;GAFW!ZmQ#2w=oN|UWadW}!QcSIwBB5&Aw7!% z)nIgPG;}mA@-PyS9>B_7CJIN)jD|dD7C;;Nd5d<ZYLikO1C4ZiIoN>hP>(WM5wL2i z4^S=v+Vj4DQ|~pxJmu9fFna~Q@@(d<TtGY||9RqB<v{dX^f$laMIA}mM-ytV^gT2g zdI>7<&Zv+mHWR!ds;Q&4HIFScM}3u+@hL{JUZb#b8tSowZE0*qutMS!+udIe?{IRR z(A8)`z2mFe1?S0TGbj)h6k^aG!2^{P&)ZxU{}4#4b4hCjwh+buBBa59nSB9APX~#! zgB%Wo;XOTx8tvKP_H=saX2`=6rLMW>@lV0?xEL6r&R7}G*q-@YK1fZgL}S8|UN{J| z4=2#5epRL^ei@?E4@7YHmKQ-?cf$oOmou^@ggw=uf2mwxRq98{m7zM(WS`GlRxwA8 zV;EPfF-^fq6ep|<kyO!UI?$YEWBMN+$pG;186j*b@jzYfVQoj|W78?-;Hu|${1bEp z?i~M#G6B#a$(NwI6*JAxF-z3>D7)v*H1pNSdrEKVu`e9$>fV#bL19h(a231;uM2m3 zS|zC&*nQR4)ig{a9hw?y>vKjd2IEW@a?6L=F138Q{<*xIo$lVvmtl!2h%(Pow2d9c z67nO}#_}D<wWOL%o8kP@iVl9LFL2S*F&X>ZoH3#Lvzx2%^jieu!51*?w*QVQ78B)J zxXHX}<qKJ*FJmp&{gn0rAfr`&)-A?6nW1}`7>i+T;z?wM0vOwr8e^HW4pAY!W9~&A zls9-%;>sYej4JWN>8ut}6BihTKa-vB3cuKtW;(6l-s11-5H&3|?qn{le|@9AJ)*D) zj^I8UjcNyNWzXbue+zK-a!j;v^cv))1gxNgA}F^v6^(2c$T|@}EXQ;`C%$p&q)gta z1Tg{uJM5YGWClBECNO~|ymbvcHmU8D>b130tQBfHT&W=eXk=^gzLqdEbtRpd1A5_7 zJC`6F34Nny^cq6<mnpCc^~eG}#KN&9Y8;$5f=i$gn2pE$G$?~1_+ImRJJ)7Naw5z= z6i=Thw5B(~-s^gFZ87odk1IK76V)rPBmio^7%8U84#>0`hE}^AhkSk=R?_Db;xP-W zA7vRFBvCe)Q%Gh4XP;X^zGhN#kBAJ1^MtorZaMD(4NJfhOtfZNs#P@@jzq^x>6mxq z7^luE-=gV!s<C{%3f&sii(w~aRzYhaP2+0rXEDW+TYQz}5Xr22%*@O9(_V^pb)^P3 z>=DOtgCd+&Dr%}C;@5y<(+lHHkD&4(ekv03ij3qEn?sWPg<2jqD!N0)=!|_U@*P5D zE9tlWgr_i!HzD>ZFZYJT4**|rw8sxkwwWY*Wv`~)u}FIyZ7&k&rIBzKxB@=0)<`43 z`_M_b-a!FGyFT{c-&=k~(>IAc5GQHU1{ax<WN=WARxA<JiyloE@#W#k`tS*B%~v8j z+dg9#cen*&a8YXRuh`>D&kj!gD){`8&zN~8P`Y%<DnRLqI;Nb{qp-sN*GslaV0WHC z;UeZEDh>><s`viZ=l!ZX(e1F`%@}g938eOxd|9WkPRWqLpZUz6MBR)2&Kvxunr8n( zes>dyl{DE0#HhE*`F$dpsRDIAhGpaHXkAzA+<d+#>N_Cs3L<7w;?hefG{7941915z zhW3T5A;@|_XkkW@yeqc$>%J7b-R*~&O~aA9=AfvMFt%SyEE+6~v9?Olzn@I)Ny%Gy z01*zM&RvZ@B8idP)O1^|9E9U;%9S@VF?FHtu0D~<Hv0|JKMY*AWE1r@rv)Y}Jr(q* zLY?dK45gJk>{I4lJG%}P@(CSUQ);Tq42-%nB6>0vJH4{9ir9Xi$fX2xV=X~}E7@9t zuWtHYUY;yV9jxx%*9|O;&^tI^Fey`sGEhOEbUWoutSV&OFfS^)5&@?Bjg04Km<ZTo zg6cq~4~N_2H)e?g-n_y>uAc&aHc`$$e4Tx;2@pUhod8Z{Po<V8FrBT_7?o<9s@J60 zK1VpF;K`;2!82vV<W8$(L@OKIy+W$3@=d0;e=1t*)}_~P&!0azc~K`1=0wBvNs|TE zBpb1OEy7OaytN(YP|-KpFBiD}QUxjOOqr*X9cR?60D`ACJxOenPvf_h5~JurDX;e1 zFEvz5!GFr>|8Exc4L~X<)I9nIuskZh4#qK(^nqS3CnrwO1qo|=JtcOF1{EU3hNmbH zMVESH_}sG3b`wKON#2$b=M+X#_d@jwFNQz!*-sbFcl!>iD~Uqpde-rY+f5yE-9eyL zO)n;&9oxnekor^pqcmD)P0U?iFbmdh9Jfjq5qc}Gbc~<3&26-xk2;uiy7>&vCe$EB zZaR96Q_?d2XAdU?MZD5<Cs;jFe&28~b_4TPkljlb*TIZ+e0EQ!_w1ppBbSpnsjqmy z-Cg#xoyG3lapk_0^*ILfFCTaDY$uijT+A=%UVuG&w9%y0J@bUh)-bDjX8?~N`YeOu z?HpOG$ws=b9}OZM8}B7sy~rXA;G!~e-Q7!I2GJ7Ng>;v7x1-OW>(l3mY=sw-@_Ur{ zMTy%gZLg+)(UYdj1F`$myvZh18@4+Z?Q$*kb%g#xZ-w`D@)_(=3bc+EeSj09ik?Z9 z_EPHs)Xv)b4R>I?J3h1}XE^@-d-pMGwzu8;Yb#-Yyx#%Q+9?3N{9l^zfqAPPAW~QX zcpNCyvP=wm=}o%;p!y+|n-fJpWjpn?pWVN|<m@NaLM1z}cM*I%5;6j$Y_$tQ;hpR= zex%gk0>sXo(Czz<->AileZYhX@YRlW!7$)sHi1Wh{`bp(zf=tELaug9kINM!MBRCA z2q)+Zu}Xh$QUg8QasU6-l-J`Ap8HFs*E(GlV8?B}=;o^zAV2mqxc44iUGXc<Uxypn zhr{|(9Ni(j9S-%i69+98Xmh51;Ri;t7I<_MGOiso-Fhz!>+@;eYNvYoS$oE=B|^=( z2)6n0s=f@Ld&_?aW2{obCB>JMVjg^*tm88~*2{)W{YFaux*=kG@%ci8diiJvRu5WE zK>$~H_}+F0IV726Vhd!Y6?Wj3PEUbGlD{ev+wlsOf0;C~zhz34F2h}ymM1b>+ci0` z(8^UiCC{`yMgS9lI3#YzyDu9aMdqpKDM0?rqwF3Q{RVjv5D1N?D&dEOpx!fm%b9~i zQh^VTtDg?F(%e1F|3loHe?$Gh@&AfKCHuZiS&NXelrTxQBt?vUD#|i3*$2Z!A!7@n z2-yiU*|$L$OJrZO&)8|0u@1)cdA>g1U%uz_54_KD{OHV>c|NYkb-(V{?QYNW5kx}* z(RrC676;WwCXw=cjnDUjUdg*UZz)LHivALLQph;`LUF}D-CRXLx?y<pQdNC&x4(pJ z3a4y^o&n+QGi`}!$U7S<_rjSP^xk1*zwn>?GS`zEGfg6mCs-?y*{TfR1c;S3Epx() zXC$dHc}x;adC|`Ren9FTC?Z(cgoUd3U?8VX?Oykd@E1zB<ZC9&#@^;J#5nHNCf@Sc zExdZPD&G(|x!mY0-$v{if9XUDh!7V=yIo+9*hjG$7YhLNbKc%+K-63LHk&&VFo%ze z2<9Jv(s}WzLL1z++9JM3L7&a8-@uT4u?Jp95Zn{naeQul;!m+lv8}y|nB4N@Tcq^! zC1IbUIn?*Ca#c|aOQj{MK=jTzU7_q`nOls!S>H0Fm^;OQ1NQx>cYJnK9kMMy@#{&l zTf+|RHgKfur~a4DwUEZnfOzAY`ks3lS0Rt%BL^KizMg0A8vlxFU8ES*CenFUBBOj? z#ATjv+kxAlAB47|kXC^XB?xPvCVbR(lrg|Q-AamDcq0Wt@2+1d91_U!ToaP3F+Iy# z1d!P#*G=+l*)AFxRB<)e!D{~y+2{kN7q!B1%y(<4!_SKm>E6A}ZDvMVIV*O`rI&QB zhH@U`y0uJ00><)A#yis=bO&Bl2A{XdYZaI@|Gacc0K7f$k3n{?`Sj`#pdhA7$9T#1 zs)T*D*t#U5WX>qDT{=nbF>I1Vst*$fkl^`ab`IzL+|tr%esMv;oBtT(IWn7fF<yk` zSS@LnrgK9jyVwXldba?&^NoA!m$N%SCX0sA!dzrcfSJvDCVO9^!?m(&2T{HP_;Bq+ zdJt^YwQsz#*bV+L@cgK}n}ozIffa}1Q`97k%z|-VOhnsp+R~4=EiQg9y*wqt`~)28 zBj-S5UX`IWwP2pnzX@ALDSGwQ?)T&UU&}?*j(exY#Wo2J;}lhL%R8SVRZPm=WXs|O zqm}HB$M>+-*|p7)vkG-&VDTkDE8(c4vGCEevI?`xn`f^5?ks<My963GD@EzcA_f5f z%y$JY)<M7d-pp$AM$T;C>H3<f)X-_Cmx$5#UufoVF1KzMZGX>Kajk93SR~{KSS#p8 zsjn6P2D}#%_+UkfaorHk23UH36#DxtOi+L|Paz=8XSJ#q)tW$ooB(DIKHwe-=rVgC zaxM<I4(p=Yn-BJ(bWOXhR+EcRs!iK?y?arhN8uyI<xlpuT=qV%IaUBea=cv??|gk; z3O-Jtm&oR2KtVgJ8z;@ol$L%{J^qqBt9P$2$WX_YUO>o<lqVBSxTcX0>e5USjrn(` zN(*NeD+8w){}$|GvvC?f3L<vftJ3;w_{vz8IyBlRu1_3@jD>k-aw==0YzJwX7Z72U zHdSn2r}WhyvUH4HyvSUOl_X<B>B>`7C!^4wj(YbmZlWbdqMxdjQfeO8PM~}yE9a?h z6bb85?|jN!tec{Dnp_u_t*W%V!x1qhdxH~j*J3rPr4+>n<VTsx;7L`Fjkmgzsx_x# zcU?}GEll|>+0GUa<3j55hV5KUsTS+=dkHqWufUPkRfM?@TEY#Kg9zl!dDhA`?;^L& zTpYT4uE*fPcY!V-KnjBSPnHUwYOk>dHcLX>ybo36Aa!*&=NOmp8f9X)=;Tjy^WIJB z380(PBo3>5npshV8^=x`Oyb5S?7uwU4*o^YdDTBp3mDHHw1+ML=dm22nO7#f5`J+# z_|h0M-a}H=C{v!@t3{<(rUT4-`B00En&h>L0q@5In6#375Ad@Wsz<AAEP!U7xMu&S zLx>~ghIrP&sk@kRH0+Ac<+qpi&L&*RiS)&zqgHcxj^z63N-e}G?77)a!kM9bw2>jP zA$0Thg#-y{u=mrwjWHas&M?}f-kEJF6&FsEb>o}8%$jW0@Tw)6e!K=L@y?9WlB1|a zq;*sWTujMX^IIzfPkc>D8sNy;YCed|3rzBC=2AY7<wC&z)_d8o-J4w&o_g-xkmWD_ zX1)9rO@?;?3}~>F8#Z#nZZ<zTY;uM2zW&nS&%U2*o__8UaIF3S3(WzmT2T}ydZZ;F zB@!UCQ$!U12C&CO%BDnwqkc$4={H<2NMB}+Oda8-qOA92dq%u%M2*bK8yh2ECj4@= z9Q^t6a6i;Q;v{tkC}z{nK&ng9{Bf_VoSd<2pv{!Fa(p&Eu`DFf<ACKZ1{g-Rs#edr zfG3F47Y>^nrsA*<h+6D0)%yM@txHB(^+trf<{H%mJtbkoeIIT&z}#^KYnlz{>U1?q z6e9oNE)_;-aC@+h*Mn~<+Da-l6u#8n!91Gw!_*LB>%Jp^%XM&3i9TGcNbPHR?xhc- zLy(6TQGbd-7gZ*3#`8fStD5TAQTXK@Ar|^yc!CH!mBV#SuFa8ZOeDDiRrYZj(FCm= zS7~pn?E84yz*GRYy!{j3Jl(khbTH?P+M&A;8ZgmCy#%gsqv=FwXp<aJGrXR1A|Fyz zi)8-fp6>P+$!nQ-6LI4JoAv+s`~Ek-F?Wbb2a&IL<!;e<_q9uA?DOh{%RaXz`MyAH z{r6ExENszE5Jq$=n4lj|IiLsQr2a7=LF7_Y_#lE5e968B&#L@OO8wdK?K03MF*uN) zGRpfKHp>-fPSN{<omx*h3L<?nan~&ZqGWE$@x1B&Blu*f4k|{K=-@^qyZI4TBEJo8 zVlNwDpEZQNM4Nt@XuC3T>(&}j3t2U|edZg*PJG-RuBSHT`Ht75*!V{HGQ0tw+bqPY zj4C2c2ym{Aqv`6l$K>1!eTgZ&mxp^4)AMER%rBk=SI47c_kM3Q^Q$QGL#xBczW8-N z#}`5N-j3B(%<H$oD`$bpu1|PY9+g?Id@NG^lM-*OOvBde)OFYMQ$~RsR`S?qXyUAP z6)}minEf6*Z@UYW1$X|rgJ=c9=|TO~%-Md|*cF+&cGtB`b{Z&ewjGc#9CWMeKWxT2 zmn=YZ)-T?WE6A>E{!ssyE=<<L7F+2h*xR%nzem+OzTmw{stfbCYkm*-UQq%Fumy!Z zc2CpV=EUr8q9tar`c&z1Fu(7ui93)iYQJs$5YB5JW*{v-XIfWRodG!a<Qd+V*U*@- z8vyBdX|D1NJuL?j*mgAbJyCtFo|HH8f_EBUEZRn=&KyF3UX$(ieC8pU!cIR0blf7C zL_$HkyaW-1#y%Uo=7hduq~e#c$&irHf1u4oYou4L0eopcVqiQFR;%KWTlLdMxv?I1 zlgWT{W`M1>hkGd_36H=Mog$?vq`9zQQEKp%W&LmtJ4$6_*486&P`hin0UOaI1Ls2o zl4|%A3+7sslT(soTcWu;-t@$e*8npRkNVj>B30}1>X@~Cq8m6YKQe~2peiQ4BCxVH zu_9eN6Nt~`e??I(gA>>o+iI*e(>vpN#-n>AIM61vYS8TNchLVspn6DsHe^H|Z#8|? zp6@0;_%$Q<GX&gMA0R7i<LvgF)4E+m>9m2t$Q7oq8E3RC6P&vrpjQKmFT69!u8WHd z_{Tt#5Mvqj@f`+NU9OJ0X$?Q$bmJ~Eft`UX0P;oWSQ8-wt$g<cH?*Y;WDId>rYHSl z_#(u;Y6VUT;D1Xy1(;a7o(;%z%@Q}3T=Ei;6%Jn=_d34;LG<%lvTKvaC<oXqXDE;j zqnEzO=lS*g=Un52OPX;HAxSdrV1Dg|s76PcEJbG0-Fx-5RyR|aj{Y@lgI^*rR)q}& zUv#ERrC3qeqiC?#$wC=FUc}0sd3};0(7~X!0xoC_NcWG!r_FsxKzyHiL=BXV7m;&R zP+&V+Syt%2j+$5L^9O-YD;urQgBIX?(uj*|-q|B49s?Rrm~ZCUL|c=K>pJavXUD*m zn`~{`^pdY}4J11f?{5UWg}f@1T%lQAP-yJ(-L}V1D!Sw51y6&iulXF;e`%f<+D_Yg zp8-~XI?F#y^Ei!AX$iZWJfXbij@YhoTZvU4uU(x)T0e?&D6nzrstCP<IPjT7^8|-t z%-swn6Cc$ZXy2%O`2AF;q=!8;pSrw5*o=Apl5#(nrMl~f>km2ghuvR077`@qkA;A4 zm>@%`!OxiJjVNo1?lv<{ttXoq97u4_iQ9JgojPd=MeNd=Lb88oyd)UQbO<S@y4S#X z$W1J-9$T^8?oPN>GDkI^Wda0o9c`e90sTU2RV6zsu#YzMOCc<4E!Df64YObUOZfV( z<hiMA+yXI|E-_M-e!ew>dz4#0(=?X2yz%%?y+PLdj_dD^@m;cUExp2K<Q23AG{?0` ze57i@z1lPPVCd$JEh|<=$s>z{(7h>Of+<ElFvviuPd%)!Qe8O?wefjn(h@@308$Ip zIx@ijVFjZnlg0`z=3F~UPI8y#`w@A)Ym;YN{|OCPjSl}xHla}w5dfca7?>49vT2GG z9xYk2TT_FJtGwHmyL;-bP|_XU-)O;zgU@Weo5nts5E%lLuLs*(`uoVGe5i7&h{UyR z*s}9mq5Ch-MgApC*zecDO4K&1&||zhbLh}ci$%gMSol||-|+>rKBgW=LI?6%+rr1f zfjt&;XYjCVZtEpC*q1Ei`n;QgxOdU>9W}GkgC&0-eXcOdJ9MkH6_@xi%?Q%n-LOsA zXa@ZO{=4rXtrFnf(dI+(1WhP$8n_xqWK+T;zWs6DD!NzR^IT5w&O8dE5zM>!=_$X( zz|5uCb;;E0-2_o>;ZNaa@1{9eiq@qgh0H$|?mXovjlFwIl5q>2jNXAp9qjKIf1|zv z8YNEHe(K+T4zB4#R-O+HAu=wP7QjhfK;9FbVdvm5Aiu8(3P8xMuusXD$ZV?9Lp%Pq zvHktzvFXp^uao3y#(kbaCf0wlaenP7846Ssz$URAz^N!kR?5E|B3jDZMn$=dsYHK0 z^Wy1y(c&<2W*jm&gCnlZUWDpjJmq?3nelNw#31X&gRO>@xUcS;uo=LA;Y`)}X{`{t zS#IRSU?m!GGr<a2FAq_|q~cUIgH>E>Qp3hVJP3umS%F?`<uekj8nw&bf(s|9(EneV zwQN$Urp_Zl7&eQIHu>lKSDOaplW@bJWIv|EfCZIZyZ_-Rg$E)EU``=)-a$9v`@lKr zlYWo%x`bpzy0Byw>9ESn<{tvA)?F^m{{-aIKMxpNUX}S8JRg+10z}{x6JFIVq(eIb zdTZk3cYC#rgbhNiCb}$@;v=~@>>94}u8%x<m~2Tf9;(mY?GZT_!~^+2O(AsDEMPwb zUy6c^ZvMq_$%N{>WSxXdaolGI&j_Q`*QW?n@=v4w@MU>fqVjp^jKgE8RmQmMo<KXb z_HAWcWr)iCxOo&Q^E|LbXVH}_e1}M1V18ahZihdye@@JdwPz+TS00&<WofprgHyyO z?>Vx}zTd@akEs}GijOMzu)e>J8@yYhErE>XWG4PTW1n4t)X$kjL})h;sqnt4Yz)i# zbhTwt-@#t6gr-St7CG{^c8aPjebi%I&#!8N68n?$EczX4vo9FpzFeQlKvSa#A)46v zkh<dwqkAyR**mx7$6u>XbqK^V-`dC8W`CcxoU%7|k^gNZG1;?n&xEWsW=ntQI%;vu zTeBZAh08mJCM_PO?>qU<^#R~|=mJTtgD?0xefGa&-y_iLMRH1N@VCX6oYT3*q3VJx z`7|l=tBU!!i!ke0Oxb#q?5MlY_L{@TE3f{B^p9kAR0ng~%t=QU+q-rQ!ngKd#b2_j zGW#rr-<T-+d8$IZbo~n{{4vTifp!jric;q%v!6mrG3E+6cRxImKr#!;<eZxvY?460 zO>s7YSdh`kR9<WmxAmi7G<Amhs($e?nwP<xk>Q*VA`po(lMJ2vnQ^r)()N1~Ta!6C zPzVj0<h%3P)CP5mim`-l;(Q4qv?6Kho{#6)ezpBsid5;$@4*(H6pM+weG^z;U|1EY z8c<y@pZ=(`Euq9ZX&{y<KHgRqhZgxb&B0OSABJrMqpN)frlydO?uYWQMD1UjKV_Z4 zNk+wb!$GU#fD6xaW6VgjRoq`(LYQY`Yp5|6y?_gPPP}tGa|S0D$o7eBBAL*mA#I61 ze0aJ(oS7-!DsBP9y~?RXi3^iVm|^ZOboLC&S1kHK)CGlL5?k$WkPo6r)~JiFV>Rn< z`7Nhb;=r?JT{K;QNc{z=OG$}(jWc162nMb4)njtyb(cnJ5?-SP{(N~HwDe1gJzzn( zUkK?rve;+@K8G+*?encp^Tt2_xk9%&20|l*M^#GUEuE$mxt5b055L=p=aQwhkgH3c zkFGx*_tE9)R|QrnW}BW1PGxwQWPe|8iA@TSV5$ovGkaBzM*`nSHR%GrbPVlDLz>-4 z@*l3*)`idV-0&H>>2YJf=R`%uUk-3WUGG+S!N_Y;Z{wh%YP#^W`1P1rzYg=Vcilc> zvst>@LH_XPFEy8TDN~a_!wscAlAb=kVJM9|Zp{?Lfr$OQI)syR>&xrgkC#Ay|CXgk z)oy!C1VDVWik$e$-12_iDBZ)Gn(#P!c7^G1?#_bM8+ARvTsVF&;^)_j%68UvAiTOm z!yo%^UBVrrB7S-d!RAZVv&__$vt@<$fREs!zE^OW<be^#w8iz7HyUw3r=8N8c{+~K z`M_g(uBT{yGOVS(sWGu+NbDcO15)AlLCY!KAP;|$2Q_NvqOPS+DEQK?R9<~w8&f^< zW@F2R@wi<}<OR*e|Cy#=!_!q<(PS_W!i1<8PXt}0s;}J7Y)dU2ZA&Zo82R^opS3f} zY^&GjXe=gZ9`&y69=SKKaag<H7hHa{x7$XSWx}s-ss2C(__ntlE4BqZ%B%(dkr#jW zX4UtSZCrO{v2cgij12;8muc+8KWO=g%p>^xQVcqN>nlXYZ2`))Iw(sWZskY6^$N<) ztZohZ?Z5?;{kN%Wv^&IRc4`*uK$VTra`aM;K0ZEk|05xVa=NDYD-hQtPDX`ce7?NK zz~3v1yqKMMWhglF_zcJbE1$9-W^nf=^?bX>)i-Y&Yeh0fWoU}~fS4TkpG&rME+Ui1 zT?4+LIyByvnh_6!J4pTRd>jRYjOvwzQ2A8WKS9!vP;!4H&D`gk6%`6G7Qf>!iOX2Z z=6Z4e>e90yBM2Z!pW7mipYQ_B;7?9FNUJ6z-kJ??a}Bo#3~fLX4H@$$?xv;mNC@jc z0QgFMim!40%;>5Uox7PvnGX{XxKi*F$i0cs>%Ai1A5DMVv+qcTqxmLp>hs6$1_Ble zTuhnMXI7Ho{+C<*Bj>ifr;asEJLGy*mxUV)^;Va|+H%+*>+`-slZ~B#faa+NI~!Ya zW|(&(0VZ+VsQ570-{Jiam(!6vKo3cpECdGB%|b---|cmE_VC@Q^I-<YyK0h}&7beF zp4y33ss#XJfYI%L_G631voV{EWeqwFxC4YrQN_nL6O*e-F`X%ruOr|Zk!)T7*_(v4 zb0~5SmLbPxx)iPZCJ+6Yols6=8tig-@i<dIZd)at++adUE?zh>>kv~J`Znmdww6C- z*?Hw7i3_e^AVW(9mXUfjp2$~b3VIv4K`rXafxxPS<=Hd1Km<mHTXA;srxrie*q`XU z4;G<cgAJ|wsqu?(3~<Vq=7ienD|c>PmsmwT*v))bt*-;+M!3(e2R7c+8wqRtl&G~I zs~URsg4I8UXLX>M|7L~3(nB~a%K46f&GbA3W~I&gY>cFD?nKefrnIw#p47Xm4E}E+ zW@HzPFv0h;;#NU@t&W#Sidmi0i;Av>NbrL)GTg47qSyvvcddUPZc|61T#KOo5y*mf zx}${tt|f#!Ph6f{6anc#6}5@bGi#YlD&UL1$AFY5x97*2dsV*!6(s8{geS^CT91r< zngz8a5U6$`CNWNOavooCsp~=VAYT3=g~KYoCvi9?X>%92*r1*?3^fUDjMw`NTg~V* z{P9eG(IcAzx@(BxUeKxtBy6!bYjFVF4}T8~Z2YPV+w}NZLs~vqIjsXgCYMS_%v(^Q z#C}!)OtM~+d{i~OcCbI52sbo|zZPmPaA=@JuOd~oA#KNf*x6T8-A2Q+E~Z?lkG^g< zXT*}^HvjC;i-Neunw{_V;?%UPwKuDB`P8Vp&Bw;Osx_uT^%B*57V?VS(?NrzUT-Kl zg9@gHH?spNsvRJ@Y+4Sr-*Aj(ES;DGwQ^+@&792505XxyrS`+_7#^q$n@LVTet${z zmZamWrr^>34mogS`SjWmBwTSz_#sD0w^S@Q%crl;^NtU}NiHZiBnoJfoLWH#lxFIQ zADBhsPAMQQsOhwG+w_#U^6#vxou1p2==OYy%GjG81oYN4yuH={NkWT>OtXIfu(`3m zKa~P<jsOfQ<7o)!Pv1H2O$|VGpxsZw^T)rO(yx-9u*pPxJ_|bd3mLRl{Q}Egvq*JM z=TCYG1K5FqQErc~pEZ;moh*1+(BhDn7Z%DQPmJq{)RuAX6oqv)aU)I09q|OwJ8kxo zBcxq7xL)LIh0-l(Ph02qqSAb<Y(a-&q&;Zd`wpB9q4PAtoN_iN$W>l95zcwzQ3Cwh zEs$^HP*wxCW=ZyFlFSuk_4ALyB3yF6zg1D=9mwVTY(`Hj(>hE%i`;yeTvy|9g>@3o zM6NmvA6hWe#8INC)$G+ds$vvikT9QPbp~-=)4H_kCw7a%n^E(uY+ClbjbrrvCG|4P zaqNSAYq^_vSg}#oOhLrUs&^Jw>9Gf{)>5zkF>r{C|2~QcQ#qc|v!HI2AmS?r<}ME} zuoq<NIq>-gD*>LWxi&lImQ=k2N3w{zOXVkq13pjIho9*?i;0K8R<9?20ACph{{g3+ zZ#xmA6(~@Gbz8C6VKJ0^v#Kw6LJ%3}Ct3wxqN=qAjCQ`G-GLEBg)P(FTPumT<qNh) zMMUD0v@BJIX#4{zrR=RWZbT0**Q1Oak0KKueK~;tFbVDt*eb+wlef^j{TG~p_orG` z@=L4WY#vImvbIrv>F*c(_1ybprPz$BcB&b{yt;xsxzb6O8L48SS@|%fmZ)ubIvi{9 z;GA}uDcEe9OrUBW!A|ICC33SQE5qdA%PDYCsdZlIoI*+tbp2x3*x0OLcWeo#k;5)F z6He1yaPbzE>$KjARbktinRuie#WiSi&CB+F+O1$j;!vX#5mV>&&841q=4*#)kZa%U zebDyUZOMsWhg_(0q(aR3g`~P#s!LILb;9Q4RUm}5H2Zkirc(nh8%I4|^=2Hzp(SQW z#4_4BTVvv3&z%p9uROlAtz(lU9KtA;<lECB<QGT3g?NK7bqFkQR`pAmwHMF4R@q%x z$hy(J+?bEvnG-Se@}bDI3K@*Ty*C6)w-g+WtY|sjl+V5$Cf}xw{STrprxCY0gqzRn zez%)K*l1U?2kzhY{eoegN16N__akR?FSJcIN7AkxCC%m(ta;k}a*|(6TZ)m6P84*X z=Uv#akGFR#LNr!l(KSN8jYQ)+dV>z-;eoKgyjXBG-wtEE9A`|PKI2%yFkQyk4ABPp zQ9HiNvYQ5j`MY6)rv$hfzNp2t|M2+Xy;r(LHTe(wq4R&&l^lSxgV&4-wtt78yfi{m zRcV;9ZR5^yhZqzjT$(?+{*bQHV3i?Z_k7nsB7E^j)YFA-*rIRL+#6Fi1poWZCRIyO zPffYI<mo8sA`j(dr{`ZRL#J*kPOn+3PttsVU5LP(Ip<lvvg+nAQeN^^8`;<f8@e_4 zMIfZsnU5`RRoy*PvdL@GM*q~uxF+*^E0lI<c9TC9_;*DPYz$ipJOh}kk<V1J813GE znXkC??ET3ZcbXd2n2<a|!r6HMsZD$^7UI(p<FUnynyQJJ`0>h7yL%n8^jkR%(FXB7 zBJ1o<dKU`FmxPGHswN8Q1Q^?^JN^on2lwu{-CMpDZrLV`q|(?73usXCnZ57*{OH}n zk+=qpR%sBKuLT2bomDKO)O6~25nSvy42QiTH4P2s;%f0r7WV}=1~U5^6Y5YO_Ge`p z$?16evyC<7V?9N&RzGF=!PghB_Y-W#V@v4bv)Y7W5bH*AfP1c6ZqOqVDT(O!gyZLh znCP<C5Ea1vpV<jLx>B!3KTiY(1-v6P$srshZ{1!BD!hJuJ@tKp&8LQNP9b%cBLI59 zyY`;}7+Otz=aYwTzNmOjKJV0f;xmo0-R+*!ITY+=fSgI=@v+PUfZDJjYE11m&EO&5 zCTcA$^hxJQCHTRSnL&Bk@a}}Xa#~<upg_v&CsT!%BdBs_UQhHqQgQyow5K&-F5Cy! zaJ8~H#D_QSXNi<SzRSh&e!)}6kQ78HC<+jA!g9$fE8)tEp_W5KZjQEWF+%Y>VSQd9 z0Pz=_U7CG;N}to$6U|e%{ziSI@_%-x0`?ZpP<&Uc-0tWO;=qNdm$NWy^dA+nptA($ zF9}}2xB7uB_lfE;A4k=0lJ9X<>4iYlQY90ANzu~!2pSIP4SAnP0LrVQYc*+P@|Q(n zQe#o~N`@|t)dG~{my|>_;dBub93DG{Hixzj)J7ZKeCDos#$%3ej?lZ86qACtiQ+{+ zepz*+Yc=SPD7d3c86-%%Ox}us>JA{a3)c28T-0sE7hRU2;#zi`=2Qld!YOSxTvFGm zSN&W()?W*)kl2;#lCmOa@AVnd0ikSF8InL9Z&g1TNAHO`5#rD!??#V=TYGop-b#g= z@*KWygS~cZ{<|#~J**{&w5c5c7+3{S%EfF<DLY{ad|$@&UwLF+Lm>{ZaI$EAqQm@* z&{SLEwWIsKUDZSHGL@9toJPj>c$Yj|$j3yrh)oR$hU$T;AVhb;w@A3;1WBfp3k4oe z-r1_PK}D%*MkAyxWq1T6RXWQ5R%H|(<n-II!cBNO?i2SGRB!NU)u*x)LtLB%hw4{y z`7~?S_HRezRK=7aHd8~+hs@uSAx<A1R;g4QSiJZ0=I<X)$C--Mag*o7IR<J4F(tyi zGA8%{GIpUtsuZ(gDX;%$QGp=HEGezNr$SOWLn>|DE2$p;*r|#8ZfcPGxO+Vyl+EA0 znauyQKDyfT&#LcOspyc=EknsC*BrK_8U0F*<HDPnfCI6|3;wOm6TI{(wL*@rXFCp^ zj|-=Zl7kymiwHK36*cvh92!?8x-fp57X?29?KPmPH=^28>?LZ*DQ&w|5vGCgYI|3H z+q@E8bRlB{S3%jDZ8lYHAt>b7xF)W$VeJ#Dvl0JalG37<+;Ec+B6X!*OOQV`J#)gx z$bYe-v6?NOhw}CMSpY$fufj&subc3}fER#$?=%LNSJbF%@G75`ypnrX3m6`kV}jYK zot;N9m^_Lc-eNy|dRf>_`ivFu*Q;xRyw(FZu@>b<g|Uv?7zM6bm1rZc%Lxz$pI4g3 zwz;q87fKOZ?=|kYQ1l<xk7`L$;o3nDgulGrx6u_h5{yBA+=NOuh;p|CpC|L&Shs!^ z<B)&o5>dxu2kdd-JV$|Dg-(2Fz)o8RJFaQync<!)5G^H<xLG;WRhA!APQ)#=r9$EW z<bswUijUe}WfNqKF*Onp|8tHv<a2P-=q%!$ecdo!nrdVKIooeh-8d&GDt1}8I5;;L zAi>-FP~O>56o5P&II|_n#Z`^p^Zx5UKN1uZR<3#8GChR>1I|QzoKQF%glIdK?l5W0 zUu^@W{bM-V7}OF&-XgEOy_62TH%ZSvhEx|vg>8qCaR*(0MZCO(6=g0C)Ve==xgNl0 z$*artWR|J^*|fKke0=kyWr_X@OJf}zZ#z=^u<PAWkBjZJN##jhs=0moRvfegixeAk z8dJ{X@IPSlOb*yPDdDPcm*?t!;PqD+6y{eIFB7TkND)T_?FoC7;Ospo`3}1Sh`7wo zCrGYlid%a>dQ-WX)FrvS$!H=gx^Y4-U>4hhb<owRPl)X7jmZT>VOZ3yfp{l3KjrfZ z%q;g2U0BFKUhIO-aDF%^lc!C`8pq-#Sr#ae&sOL@Bq;yV=v)5G$4Ex+saP+lmMfGE z8SH&UdFwQy$9P2JvV@MuOSXN%?E5~+m&%#ky3b*5|CKX(NLEA_P*fvIY0oGxlcrVu z;;S>CyEeQ~yHDQ&i$~LWH+L<-QApjF1UUQjhS2BFlRuwWJvZL`y~%kG>uD9{55WUG zu-FI!ocaK#KR;n=HO*ADjr_6{-~9f222N;zdWT37w`n6xAUXZ!8;Y{j9^3T7mr92& zvNF3Sv}taPJ7bs^<Re1iG&L^Tz1r}}cB$Xo%K2)BN;D>~uMpOGs4$J6tQzm}oY2fs zT0X71_Dbo|cG=#vX?=g_K?ZMQ3O<plb#(C5O5sId!*QM6tpB+;H-3s-AvUU(X_ye~ z*xOYj-H4(J<BvlwK7RB?HYo0iy(fU=2nJcXri|AdnSXa-V|so$VfiUXeah@Ht&fnh zU0Asl1`q;$?qpW1RR>5d0b{Uai=*PMe+(Z}fMuaG<k6b<8Y&kfpP>fjm(vN*P02)! z5EKKICKrsRXu=;;;}>T9%-{X2*%uQVP@XEf)-<Jlm@s1`IJu-ZcBtJ&8md^T0@7B6 zoyHWaX29(M=GZOwzx)1PpF3wKe0{Lq!`RCs%Ez!Ni<vWcBjx`lDqtN8Ag|AFcrAl{ z98MCD>Mec0gU35vD63$M1Bg@+oxtv!h8Gix97cTrd<o6FMtm$t>%~BwRmmYA%%^um z5>Zq`nl=&E)98}RWsrQX`iFtOlR4-Xt$5NInCs6r7gM1v{HYybE-pTr6><+!w9zbH z5wEW@hggBg`83W#Nk5_SaOH>*OU9d4k{|E&PJcf;4}oO4OtObNzS9|eO;QH-+;1yL z)YL>vFWn27SQzMPPIn))_oJAYQZyzrVhC|e(>8xxty7IP#)mNkw+l9>F8RH16gUDx zr^cEjhLF0%M&WiX@ihC?Q8%er7k+1L@h$^k7f}w?s=n8kwU8<7Jbr`KVF)81E&ujh z?tom<!XPjkE6>K6;E(3;011_7$NqDS5AK+FZ*Eepf7>RxCi>Hpqg_qcTUyNaRJ8ME zuneNXbUfWqyzlI`+xT$E2?O@ofN~%kqki?!Zj?{;k7~QJ`?();Zm;`qS@S@CH(e%& z7cT&Ub3|u7P)scot|($kynFPw=ff`VoW8vGj{)-Q0BcFj``({}6d3Wj1FNoXs3}KV zzG7zneMXh;#7M#H4?(rYSRasXh*xXgxCu<A{x{~0|7&OkOd2r`ZDxoEa&SJ^L>HwV zAJD|sGsq1c&l^t?on<7>;)sgjAnxUntWf~N8_C&aJ=KL?Ck`gSrP6%Qee~~BAJ3u5 zQ9U!xx#<D<QD(JcDksLDX6E`wLwBE$>_aT+SIK=q1nceB8amH;_p-aBEEoG2FGj=$ zruL8HSP5GkuE~C>vuUv4<YW?@tr0Iv`6emyR{!{txe3)ggYmzC>pegw1dMCvhRJbZ z-dpGL3ogbnsgC)jpj>SbkHzmJ3l}b(`p00qLmk&P_ql~B7~T~BQD<XQb5A@yhl^#Z zOx7ba4{;_ol9E5%-Xxx8Jc3jonpQpwE1JKONQ!g)bSltWYp+!L3+3pk(mw__#G@Pf zbLQ^gZQlP9F4%q%K#VRzJmaUAZLXj-zF!xN;sa~}u8w7q;@*;k5a5vBc~nzCGiW3m zH@6AH&wqAX;QXUiD}B;7C4+R3_y)Z2UDSu8*OREW9uO1NPp`RYXQ8It@I{;wfF*j1 zi<t^Z-IJAzruO9jDh9GjH9y_Ry<zD17elIi8T^`i>W+tPXN0^KhxWILOHiixeZ=<o z+0k6EB86`;wZR3{_LAZh0VV(m!wT5_I<5YbxJBmvKlwAwJuB|N_kiwuQm()0Mte}v zT0MV+_wk>SvkgV^N$tO7E`DUmOKQ!)f1p^tq4zbj4YAAb`Y*u`R}T_4PXwMev*9!} z7#B!7t=4XP?HwT=1u>7tW(fyX#gV@1Mf44KW-`_?8&^z}Uv8N17sN(+$6O5Zd(coG z+w-`p3f%Mozpeftr}?N=E<IvD!svi+5*$J^@+(xEdG`y1xoICs#u|=RZe6ssrJ`>U zNB4k*bK%btuS?jZ8SVxp-Np2wu`n07>rNHUP}t;hvRyNN@l@j0TiJG=C-!UwG)7zk zumvEdK~WY8>yWCqfqlK4D01Q|51W6tmKq3Ei__3~BcCp%1hoq$?AP8xxgM;`rBmN! zPXZJL$fP;xPlZuT=$)k3%4W=F-0W`%unraD^9x_qI}*K`+m7({W(IDX<q~sEn(yn= z8;dbiuX!j>ra-0uQg?)e@j;L#Cx`k5f|vgY?8HIoKzeHZ)oAqZlJ4`0_w*kCfLD7> zif5bQD9tH%%EkUFj(iY1G#&M-D%9%2z|EjPr=wp_7ZhRK+X(FV-}W}sG(965qd%#E zDV1*z6YgA4qKh?K?*jp|W+r5lu##O($=fwGOev^FiNs`wO=EABD4DQILk%;~hdGn? z8y@Y8rDGS#8JT@Q5()5kxwW{u5pT9TPjC%&smoTIrGwL7M4E2sYo{9Zhl!od7;<(X zW1`L*gx!yP^%kT5q}`|9?(>f!l04%kA34{iESmKArp3l5YE%It^U2`DVD`~#f8p0# zhSukP8@32cWfG2d#&GXi>LHzSa8~C57r!Rq>ay4&sZinC2_qpU2DzAYm>Hd8D=JuW zWcLHkrF4}w`_G(CkgR1E5QnBZf7Y~d5=dja;=+G4_s-pI_X)S_8{;!e<qzH@7+&~w zMQ{I(5_LRTDlR%$26>;nG>6tuQjEZ9X5DUZ#z=7mWj`Ml!0bFtIJTtL5Jn>Onxjkx zht>_NShJ_NE93v3i)bzl5anG&2`bwG{@6|w`xeq%<>SD7>h{&_Mjy*Rv!Y#(7Glc) z$MVQ_FbAq1%mBD(Reg%cCrIh~<T{|McAB^!n00LMW1HUJ;M7y&B&t5{qKjBT<3!;U zHKIjv0Rp|fa?Ge5KG!ompZKCj`Fo$E*Wa^O$1^LiZEK~~6Ke+nK|hydLbpxVQS<l5 zZOG{Dqm7m)I>j?V<;N!Vb;Eh}{}?isSu+3%!iOhzdAx+0jO$}fz`kBpcmW|u$AV1i z{X0GeIYP`VMdrE)$uQTx(ipXgi<<0@t2|EU{z+#W9b4a4eLDv&NP)YTuqfc2@?lez z^0$>^*dGnQaQo#17p*S?Ze+kbtMRe@q;`;#X6ZCc9=AH!6*CAJ)LqR_-DP-o&W8tb zm7><>7c5V%SOtLb6Xzp|+`Z>XC`q+G<`KwO#lQ6RZ;E(Deug{ezmJod+Y;yFK2#sD z5$(*Z)YQ#K0#yY4%3r`7lJ@s#a$~C)Mq)(x)?RUp^l|GE-Wr1T9+s?rbyrY2raF>y zy#DLCojaOx3sp^Z-=Vs2Lf2*$Z<uuL?70w*XSoWfNzLM6fCnMA(K2bDrBGFvZel;` zt~HACi9U;bc4eP;_Q{hH=P-2Ph0bet*FB<B6VO+%X`4tPq=OgHpotf;9q6XIZIx&` z>{R_}iuvP<yCvPXHOOG~@nQM}YMM<w@QH^-E!<WKk{!Aque{1p^605YLjfo(u=jsA zx&dT{RAf-XUxaG6sDwcf#60au#NQ_!$JV#aytD5H;VKTtfqHaag4lV&mHeM`md@Ki z9&Qg-pfJa5T>=0<ivto-kJx$Z(tca9rkwf5pddHu{N1lUKhr^j!+y?s%J}vakJrP( zA&@T94%I?GN&`-4X8B+esS+5-sCHD9D3wNLNF5v8Gh%}q0}(Zb4dI*J&p$6m*2tY} z_-~}8sy7imA;a+X+~G!>5ViyLLEV%Zad#96&R$b{)G;<ol;8Tnb;Bf?o>2vZkPkYx zeq@rs+|D&)mj?@K%4?>SKL|L=Yz7b;_tC#7uOitaHB^e6#~=MV^H=_S`5wb~Un()U zPhDl_&$LyiMp0Xui^4MCya+klxnzfJ?Y}^i9oZ`dL#eLfMl(0`{O|SL4#HlDCpmul z$58Y27*hSjwjZx}PJe-&{p9UTuY=!(Up_AWrw&QWI!PY8*lU21C~$$)z;c=57oi|d z()htJmy&1)?4U8uAv|FuD87Cqb?(F7nWq_RDX#iLyRk}Zc6<Ic_~s7*<6%`Bc8Yh& zFIOU8CQp$}g<ZM@!cTH8>5cZFT8WgE6V66ptacjcDWjhNpHNh1=C0meKkXcxu4K2; zYK$_YC`N2mvAK7<Y5iU2*4@7yYdr&DxIB+a1kCq~TGs$)JDjFlxCUa=P;o)=rOCwm z6}oaUMfJ8Od{Dy}Oy9Hv2nPB=-)VAX6p_KZK7zab)dJ&}&;Olf9?o;4npwu-wFHK$ zK0MC#+b^4b4{mGJ?%c4h>U7rPA5-1}!2*`%K5W93ix<snhDAh^@ec8QngOTAaO01t zDhqNA0tzbZ=wP|>h9n(hxajZLGBqFO-u(6EGc*&nl&@M6)HJK@+*ln4ubZE~%Dt;x zwmz7Y%cN|+rOS}pI}$~<;48h1%7sgUywdtFa=mYv#RV)>rJ=YGTm!SZ3qe{NMrLs` z_{Ga&t%U1_M@5Cff=K5f4Zo7=c($aOrreN7r4W_6pX-v0N08z{TR%Jt@`?QNdn8Du z#7kcz#$*5I@>!FsKR{04K;G0$4y?Bskg_J+JUHUhTy=K8f8FjZ;P4K)f|)WHtt7qr z1y_#RfNfYDmrp&AG^3&$bP@gS#x{6scsm<#n$WouZJNu6ZKn+?4jsC`bg`i3A16Kq z+<=Zqz>J=4I!6@&w>DtkTlZA}-0Y(Rd~&(vI(U*>Z~yf%z3-I3U07{)(UfaI(9HB$ za?MzUoi@E%VA%rkk74$)Cs=5CQ%j1fI)#_f$;1aB1HPfI{OlhDRyk}o-%)`n3-Ao_ zb^`8r<NkMA03CiQtbW>Fdns4x$Dtn%{WkM>9k(sYzOYD%v}w-}tWmhRq|)>NwFq2v z!(%A-hC2f^=(oqbNoGctD*`{FoMXD*Ko4N!Re@|knusO2`Mpo!Yab{`;B0(eNe=ge z!Thxg&$ynxqk&2hsk6bodJEmhg6ID+XtFd-(RS>Y$k<joKlvnVX(eP*B4_<|;+1fV zq#HRdmm^hxIh+fH`)BHY9;TBBKE1JUpK`iYewhnHRmd@Y5Fwxuo$)4MT!ue9Slw0s z?-4fI+vfbeVE@;Iv!>ubCj;~sje#w*q7~$V@DgvkTV4D6g?fh<?e!#+Uupi5O#Oou z8f%hAd>^+Py{3!`56CZrz4Y8~-9DedrDxX1{0WtA3Y^aE3;jnD0W0(~Y5=V7`(!}} zSQPWccaB`-(_njl@sYbFkZ?fM$QUKri=-N5UR?8fw6v5wCgZDV#KV+2_}zM}0G{JK zKAFDbR#hIdDFxquV#IxTjuL1BqCKo1tCZ_$zTk3X5>_R8Z+1j^t7$d2w50>EdD-U? zw>SYeCpd`EHG7@Bo|@{i`Df{Tr^ICdiTLr{>UwewOp_jia&hvLO6tXP>GF;^0H@bS zk-$(dDkQyk9?soH22yUW5_|RRY-h4kEMxTy6C@OtTV@i&7D@qXPA<{}*v<)T|Hp7Z zhtluZXq~18l~Rp}7u1g8&{ZfdYr}k7o2?N^`F+0|Q$HB51(VGHll*uI@My%)gw-PV z8pSp>t$|u@!-C;4etsM6HY7lq2yMRHr8U}tDDD7KZ3Ut;E&+hEy^Xtd9JVzR*a=j5 zp&*og$UA|&PL0e%>JGhX8YE#$$M{$_eE4Qf4lEsoNLR3GO^KcRVshhK-bR{t%m*(} z{4LagWu~v%Vhh~c-`x9|e0rfjs9$n|zTZ*g)bS^j>h|%mS%a^N0Qsj^e#5CMzN_7< zf-JIn+C1xWE5?lN!FL8#K%6yUbP>bAT<CfYztXS$Z{M1HZ;RnOQ&ZYeT)|h_&#y1T zBNEnN`-U}8sd?$CMKDgpcY_KU82KOS{ZEV?Eo3cEKV1wI@=<f$nh9wT=v7B=n|w$e ziy(l}M+yx@%94w|QS#&%Y2L+DI8(*)WZ*$U`blvz73NTYG@(WiQ6O0I6FX-PxALLn z{YwrLIm<{j5Pc9cH(xu{-XD|Lre(5!8Ybn&bZfiqBm<-@4UPy7faDL_YZA*AnuQUa zmP1G>tTtgrSPwCuyr|pcvg|x|kNMlFP7gb1%SQUW142IF44~DdzE$Hi^pm-^Boogl za(tx-xHpBaw1e0x*<Mj28tQ6Jc233g<ra$sCSjV;hr=zC%^mXKwgDZ&9HX<7LHtr( z)eh#~k60_AyDT?RHIOP4HxhQtDwO$tH%6<go^{hr;hhl|pP($$Y|>UGgqM;{w1J0Z zNF}h^^BrH-kJs9k;1G$+PA(P`B&)rvB#BMRgLH<(26IfyqY#TXqJxNw$Ul1+6TH3X z0P;3Pr-i>stg>==FL0x-G{2@wH`>-FC_~@(C1^%Azwy<7;>TO-Rz)F_1GMr63lI$V z*pP8Yx*$8Nx+-*{`&o>{jk@^#Xm^K^)KoOZ4rWe?YlCybyw-ww(%QvDM>bQBZoa^q zxXCd{TAZ@{(LK&hXy!v|H&guzs4{J{j3a+B7F{met~KivU4f~}+Ud*%=zWCReJC5% zM1Ro2MA_21(`^}r`2N;p&4%X}v?u0ksBh>Sxn(xLR-xv|CSfBAH<aT3{lN2Q&Dc>; zWrKW{-n07%8thM#8jO1t#E$W~b9+{}A+SO3!{wHbC;1u$wG!eD-LkiTDwU@wZ7#gI zbt&Vl+=@JE{?n0rBlv?#)F(>mN5Shb>vxkqpp&Y;HYySDd5596kZhPo8k&UK=R<Jf zG`J!`()^CTl$b_G+q6nR67LF10O|Cds-Sr`i2FgBW$Gr0)cam=PI2>d^mD`ckfB-x zfU@u+va%E9Uw~L#*vE!`a^Dtvzj8EgLg)`^5+KhcvR&M=E+1uCF$>>I_WFDGkY!)a zruiIF-yge{+SpX2%&#`7mm{4nKf=INJHZplAj--%)PQzxzi4}^HkzCCC_l`+k3sOZ zGVrip)dKuHY`a+Di5Z#r1^p51%UEzl^+w{g=mEoKfh&yihFMg`Ryr@0*~@DoO8D~k z**`{J8VBE-0{Ye;h?gziS}3@U^&rD+)!r+sHcHM23tYhODK26D(r=fdi;AJ0`7V%} z;nNOPAuDgxKYj;lwJiDkM6h&!o=cPRn1*GtD)-DE17#b@pPVKd&K$KH_>8>`D7ViB z_M*$A%2E!&ag-$QWcMuv4Vn1q)O?A~JMqNUq~kM2K}%pGd0+L#{x(6PCX|t8s!<qq z$j3~^umJhS{ixGaKY*pl58!&oQr-dJ<b#YmgCv~Cw+R<@o7@#uvk0zRj~HL*9ijJy z<a(N<)&gENQzTlf^*<zE^)5hfFUjYErP{k$Lgg+}Ar5wF2(>nL_@Y{bvcp-Wr8I%+ zg|+J1t@lU4={Zzvr@B^1l{d_$R_qGLlKe8FIiPrL5H`FD=yHYfZr`dPe1noN422+* zO34n%U{lus$Fkf(WzRyy1V?uOhszHg(MnF8bKiA^-kXau04CYwa)5nM@Bt@ZygFpK zly{O_-QG#wGOas-{X|+VKtWcMt4ELzz&!+#5@3<#<_q5)+Sc(DzfBjQ_QG8fsr|$_ z0Nm$SLUmnfvlke256@bfbu{+65jR7=JMT2qIEyA~DY^>f6@<%|dJ9*T0WrSELF#g? zH}_F0KWy3U!T+V;%=3{I+Z#F4@ajz!ss#m5<^CXrO$Qhfwdyl5v!TX8bNew!OwSlw z&`BWL1WijwcJn<9TtshODKQan9zsOjts5fk+0010yq)rSDgDcgxeS{@p!(&}uKHKS z39i;Vq1}4;=|ibx$#qSw{+s@uY740cCJ{}y$a683ooTH#M%PrQObu{3f)Sdhm;!w< z7&HYWh}5Qx7R2t&T|g+dF<aI~5}Yy1MB$f+#~(XG4k9(G%uU|WuTqLj09S*CjfaMC z4eI4u>C#Wl3P3L}ZRVm{fWozS8^$#_3#ZpSTs|uI=g-(_?E5{}d%*iKAv%ypywS*@ z$=KvUc~j&AeV@~hzR%o!$;5a#TJI{GO<-W0j32Z+S9`{wg*l7o=zl2oUcndvNV-L` zZ`hgMj5O8aB757s^z=_MY}ZOyL2u8&ew(y|&<<vH8Z?!6q!`v(&XXGIP4s#&KLXoM zm!!PHGNX45DsTODdvSWyiHpzg_Jub=r?93N6Cxy5c`oAUwCg0E-^&KK;a>bYB+bi7 z)L>U7i~=UYBao7*K^cuX>((U!pQOFRCkLhNazMyC?A8nVB+hxl%Y7vRm?z4(K_k9E zr$X%W4y=x<LQDhky9kYL#ucQi8Aq6^?(g@z|4<KMy5=XFaI-FsfZmmr`$dBjz(Q;E zD>w?M&F;Z3sS(~Yo9V&L4e{~5CFnpA2zxHVXyGXx1Z6Y!$zH8D`odJB#3?!D==+Kh zv;{IL4eWfkdmefo;b1&??YuBdz=HSH`owzY^w-ph{D$}U`rdqVOg-$kqp-IJIkfSM zsSf)X-_aot71q_1b4JP}oJL%;*2)c%n`pX1MWfCk)Pr2-o*%39Vp9ctVm2l8K?glT z8&?Y5Nm;n6)X7b$)LBQRU&7JFR|PJ`>DY4yk#8E6*C%P*S(tISTiH+Z*Y!^_p&^9U zn#8F5txZhhZkX^gtumtg!>Vk%SzA`eOA-d=cUM(AP_lagav@Z#=3q*zbx>20PoB-X zP`Ayr?Ud0{o%RKc1oKJuHwYWW6)+HiIV#!1>s5=qU@sS|#;_`tpFip`cfY4I?(hyG z?+ieH&T+WY6di!nxz!r=XCp7dkKih#Tq|Tn<-+EV*C)CGrMxRpuBK})T4zQ`%5|?* zM9nPfO_b!Xy_h`?f+Yf_i$1q&f_x76j+0hF=aDu5|MQMkv6q8<$g$%Osmh*6&Zp65 z4=^3LckLh^nlZpZc{;Rf5@DU(=vL7E1MoHeI@jl*F9H7)z%06Plg`f{2VRZY$fWYj z(O!H6;x&LpvsATGz^!P8qM!lbgW9-IO54^2DD=V0hWa6rQ?kzJOtyu?VWJ%`@6K!~ zInHX-+rOD$NBu)W$`>=fQJ#7)f3EoBT!Y4ZFmG8l?J|Wg58zk-w*haAX)pM#ApiG8 zoTJvWRp6ffy|Em<(4=7PT0>`SswQs<H5k8kOFNELka*TP;Q$Wv-^2baP7ik8Y?7u{ zn2j&l>y|uv5fc24ret4CfU>NL@l<bXXy#f?Torf~eq9u36Wt3aDh;+Me7`U|<C?FU zQO?}@_RLJs7x}*_is`Y3fJiCVw?rjetI)mHe1T>?bl*@9_ULi^ZV`%rv;%OPY7`Wm z5w%yGLxnCBH;cmP;zqrIv}sUTSyjpERH$F|D;}e!rO9Fr44IGYQwr9uR|=WOlzx(` z`Ao{P94XrhW6Y2x0lG#UXd?jhLB5im1@QvT;kxCnC@tocBBI21g;gu}ovlwC9te=| z>-DT|W-DEUxy0bU*~caQT!dsJFOThIa#HWF&t49Z$6zq|jx~mi9~{^!rS-GS?5aGu zsmBi^h~~|q*22vs!_t`UE{T(|0oD$$)q<)wT34xa00<jD?i&ynwl_7S^RPA$UfEvI zcI9G0daPsrc1a9sKZG2dSJ0)PA%&fO@S%e{F#jH<cwtt@e&bue)NDk7ZBLvk%y|)c z!Sg9MWL>z&87u#)y7n&lcZ_h+X6`fe;TB$unTpMKE+#ZGKOR=;zt|>u!}_F{bNYVS zgL1uS6Xp|3-ijQA1d%@qXPmPR+!NTeL=_*@+H@&zoWdt6&M5A#GzP}-_R@4I7w7`y znB@Wo*nSUrum$G!)xW|>yd&x#L(p}s8u=GBJ&&eCo<uA_hn<G^ZhD4ybX+>k^Zv(S z^=Tjtn9UD=b8U_jshG_vST#!8Vh1A(Sz<zHp8-&w7nlPloP(Isb^}B8IQ3dB3u5*S z8DnEhC&oVl4QRr9`nm}^b;AnP&*;}lk2sMVrHibI36aOr!4b48PdgpE516#}ojgAF z%}j*Yx$&+9c<<N);=)zjm^-mzNM7Drm{V)w&Fa#k$5AlvvX%h(Z?lMo5fQ}YT0dLr zMmRRguNV?9&+Ha>La)f$W2UHV%(1`~F-U<Qt|@LoKF|Gq3aX}jzUtiR5IO#s-S7ZN zH87;iJs6_tqH@-PLE}C>QGypBiqGM7oSm=7j8{mEvepj=sm$$9x(W?k+<v@WsKdGp zY-SwaAKqN<Ow+`9R?mKU$+WPOH?G)RzH1EV(LFm_zu=O`H)E!Fs&7&uQSFqJ&Kvjy zU9z7wV%m|@7kJ_`{~tl^Q6)8NK@@@)x|msrU^E9{RlPKi9)IPf6cJj1(#5Jx9*7c! z-*5<U#GUWWgAF$}Hcpr6@|2Z94140P6^XXJz$NSu!1&d@|3ln+hO_zqao;)=wW(dw z*4|aCW~ypcRjFDbs;WkcsuhG3wO3KJloT~;rS=xYYE^BqNumQqVg`}lb^iX>xbORV zazFeZhbImX9LJfQ=lS`5-s5Eo$z_jQdok@HW{u-}0aE2MYa1XVeUUO-G(M`b50j_* z@ls3W0&GdNQ|}TkBZ>Z2_<9oQCeNQen|BDvm^P$}5{vbv$UbzGcoehgjkZ%~B)Tx1 zOKrbP%gijKo*C7h3jpyiuZu`e=2kZCG>)9Cf;ONv#U6oz208W~*4ES3pAVlj#k=TH z&Lp%z?TE-kKm)(z=-x=<#5Ke;8ZVjreX<k<ALJRvlKX8Xa*V_I;SJ*NV&5d*X8!P) zd!SKffU1~?IhOcOv8xZQAt;|AOHl}+JGM<Va`p+tnI6PMZqdI;Zh3WN+<&XOM`~PZ z`sU;{DLN^Bx`!J*4VWa6>n`Q%B77w2PSRpTu4dAqh;7=FABX2AqO4T6<3YR^qLq+m zAZv*)3mMTlr%KF&w?$V_);xRS|J615RWh^Dw5su*5Qa@i^s|S3I+VUGttjQr&Zp!F z8UDyS`I%8<9;!u==Nx+i6<m<~gura~Jb+bA;KffdrRJy4k<3PGOLgIVC?0qs!4ORt z;rzo54<B5sS(`q{XmlKW)4AKVf2|`NfQicxtgNBU&N)OXk_fs8=M8nV>BV_?1<84x z7qZAVx)<3cwfVu%A&9DyibWqYIw4msq3}S41$oJxrqoF0t--JQx+zqA8QiG<HsnPo zpRyQ>cbww+El5xHiGylRs)l+0k~O<#>uf67Jb#`e*M0RyCSWM6(KtX~CrQ5c4p$zo zpiDq<suj#03QNM*WMxr`gYo82)bE@F)a&ECUue>aQQPEiKE6(fz8sMTQSlzz2KJ#| z03ggul&&lC1}lO{K(inoj%q80;n~?|Yyr|JmtrPN`DV&5#=10tp(J8NKFpvVlmO;J z?`=4V%y@KyNK+j>4hs<bK@rou*sDxz)bK~!lR&H?zJUkGB|ICmzk`8Dy3Z-^vamFQ zS2WN%qewT<8PlR!(;%MHg`GRqyF!KP>B=82PL1iZ!ol58CDK++0aKNt<+{~bSR~CI z<`MCLJscPoLiTz35f5VxCRH54hGgN0&f2MMLJcFxIeA8zVWe>`6~B!&XQ5m${p`;i z96t3@N$!waK<u%W+jyO}qEGP}ieI%&s-&ZHs&t&tlD_q8_lH!zU#ggd?kzTUA~e$h zoJx}hVgo_b)8XQ+`ApR=H~P6Qyy0OGuJ{HbN@DvcXi&mKi)JO0BDFjPFOW=6K$^KZ zdd<;?s)EF(9y2WhgT}ufDGCeXUdvY;-P%v)I>VEMt1VX>FM0l0fKg{;ue!52pu zB7)3qPRg)%NPcMV)DV9y@$e}=TQ1C(Z>QR=4<!Pe<x!kY?zj-exGnGJ3r1pDSvBoX ziQ3#(Xpho>QU!TD@|aKC37DGz)a)G4@OUV(i~k+HmE_y&Hooa9&EHe~=j{sneOOUp z`^()f8XpB&Fux#~s6dquOp6eoRPS^MvSh2A-r+TroZuOz7!kwKVFa~t|3zIN!I=^; z!L`)3qlo>m$S)$br!%&&F#S&4IZ>IUh;-ktH_wq(<pKSVxD7PB^t|wxYfALa8kgF- zIQPRP{odWNX6-9rY-@`T(AORV-cwGc(gE5i(I1JuMO6Yk86S`<^dkU)tI8?1Q;l?( z-2MpdKzZicny~cahlclSAAu*()z??Mz>1Qz^Ds<db48UXw26|VIxMepw3pkVD<s>O z6O>}*zM6^s$f)nDaNW3CxmR#Isr?M0Dqzp&!U6?lG_^&)r|2PV6X_%`>i>eL`E=2L z`MgS%&wWzfUz$WC#LUQQvN}Mro<a9kX47*TGB1QjdB|M(`&{QUrMAn&@%A<c3Wjvj zbzHTS>KDESulp+B8%WY_a}AU`x)SiU(#!N9ffC?bvS@HnF?-lM^i#-4Xh+kg8t#>D z&bH>m67Jvy<Fxt_m>hLZcdE#)Q=%nj2piHcRVD$K7thiTSST|-1%%;vZ3s9L>~>;y zf7zjRvSATA$LZy#O?#fKQm%dp^fw9BQwBlY?4SgdxQ9!db9nA<EPL0bT1G;WNef52 zV&1vF^WRr?$2(sa0#{gs5=!GjU3Bu0emNb)^*nv)X9)JjP53g&m4{$I30&|D=$Jw& zsXF=d@F$fLp~T?G%J~Ur1(u@Ap%*s*Jg!ZD2r4DJAIzCQzC@T_tlB%(9IJi9aI%^o z+%@nJiZOs6_Aj%T5Wxa)K0QoJb1JsUa#3gy?^V2N+|<wXZ*(w~CeVb(Q7OQa4F;Hl z0zfPXrb0N|hQk-qUg_V7ua~O4clhABJ}<*U{)N{#B_o9Jit)P29pn4+%n`^>bMu2f zS5QL=83IZI|IlIFcB?x9XSj75{yd46EZ?6|+S_JrYSL)jzMA)28)g5MBChaW5?jGD zN`O~B$@wK_C%OABGyj$?hWvE(_flIcP?*C3V6YTp_uGagttJ&*I_lo^$t2obxqjI9 z0?ZCzB6Uc0lsqAe7LIkn?{i58&zCbZU3BwOU?m-=g*4%>E-$$b)&pm{?o6kgBTp2E z{D`>b;BN0f*8AmC)>vzQ2M5pjGkX;_YGg-<sn3f@W7pd$|53?dF{I_*MQ(=)>O)@_ zudvIyf(i;*#;+DQG)|Y;!RsTXo`l#<d3@AAbT@tj<00vSB2DXlBW1ae(&RMi@2GBo z^V(AIA)Nj^Efn*-5KPb?1}4lXqB)Blyv@i=+3LXo(mlcBiRiUkNkSe6sy}s=CjCJ% z&xuBqWZ&YiAZmB@{E4L!ZSXb%_~1MHys3he_mvcq`ax=R^<S?*Zjr+Bo+XEn3%`$W z6=N3fIqqJQQ-5RZuyd>5e8bYhAozEDxCETJTlZQ=-Soa|%~T1K+}eTNs+=1Bz6Il& z-7;wu%!2&m2BMq+w9NiL|FTdhE<nQLCLlF4qiE^?<2?E9ge}QByKHS#z9a9ON}6Fy z&*#AX>hy$N%teZgLlX(wf;V&b*eLy${ld->a&KGIK-t)EPl`_FvcE+8MDOuHFNTAn z>2!7he!+daG+C}>s+~HQX$gkwI`~B_btW_#rOb(CQU@NLL7fZ;d)ogumm>gfg}t{^ z0f0_Ke?Ql&*^&Rj?Q7yD*ZJj?X7p9Ec|7$@Il`W_gb5%BUp(kp`WE`kPTa=!>7YLX z)N2E@NHMeHk*5q)U=9r%u*a}9n6s}Fd-=k7-Nov>OrK}yr7GANv<tWnG>%aOH~yfx zDS&fMvK99cHE<kh=UH+E)AD}WM0B&`frvDSVANwvRRj!MBfMXWJ;;*T0$;d$*L6_N zXnl(P+(U%U=tyi)mW~*NFy;EZv&;BA>fv;2`O}e~z1xxVdN+kP22=nQ%~Mx^!a`G; z-Y=cpHywJ^{Q6#5S)H-2@!Ko=;Nq99$QXnZ9z{O~Y|F`6b-I=3)tf?|?qqn0-5+|F zkkO3|*hhbossvy5$j(`Qt?H$0)&heJRRktTXC}NA3m8O8ryhhW6@GH!(6)~&qLcq2 ztKahv9fLPQohZ*>pV}9)RGszk+jw``NXOZBu7MV#!&)Lqq9XwyvL!fOpvn@NKLHik z5a#0duI;Txv%h*7z6&+o^MmU60tf!tt+|cC?7pBR>`6Au25?E`?u0jN0ck>}6%@<t z$Y+Y6L3;|tOC9CDdng6==j;+d8&>8HGv7m5huI%2Ntg2WEGtX7TCqS14pqC*sfhDS zieWdG;HD?nZ4)Cx58kQ0zn6OturEHI9-xXZ12=*W@L#DH8v$#4>Pml|3)<a&YAKtw z){gbr*3JCIyPpOxd%a<QVGu$e{5w|L+%JfT=Ca?=j7fxf6^|UiLX8}o3|M@d-`0T_ zwA$FFg1S4!$EyPrFZCq5x@XN5q$1}ooqjyxRLVe~*ivOnynOCHlAFtW^WcVgK89%3 zPOq9b5YeusmVFK~V^Rv~XqS8GlGIyll~3X40VM6FUZ-d%2U&idGP?d{<~v?eUHy56 z-94rLJ-;NEr5c1J8FPQ4p-lU_N}G-W-TWmQPsAMO->ahFG}S#}o*#f*4G7dr{3w%# z*7R|ck|q~zvj(D7j{38Qv#$X8{x?0Umz_D%OO+YK>oEwPaw3dx-rCDF%38Lz*e`** z5RIZ5+HezFs{DIZmg+OpxY{egv;CQYxDd&6FB&MNBik-rB^{s$O#ayNZl3SF4|Ag< z-LXYA$;6`w;dZQD&X1@SFK%<dwlzl8aCHMM<%Akr7!j;nfVyDai^!1y;3-PtRisHY z(1g}?*(Tc|1SSN_v^+;$EuTccs&SA{i|pa8qZSRS?3g>SAg?xhNXb~~P<+r_Guduh zJP(D`m^f#>sEi#=*aendhuDsbCw)7ft<$e?>N$&jlQ!JONlznhRlk#Ll4w0OCouE? zj^ivdH|#_~d}dK{ksMK&KIoYF)*SDL={U=UdBZ2x8ZvE$XTbL!9qT9gIjM_*=%`@A zKXjXln-Je%AEiwBe=lRggOKtv(XxHfgg*#<;z+En0vQy`A|l#8>EklFNneu3lz#Kx zug4XlvXWYU`3+ktHbP{WC1wJ_shwl6J)`)nwZ0Kj_3`K|<Q-8l>TiEDCRy`W-KVuq z0g_FuYVb&0z)*zG!I}`a5y#26@T>5=I!lTTc5VQ>E&NCGX}<K7>Y}1u3SKPH5~);> zrLudjVDkg#ztY4=rwshU?}4BkF^?)I549{q52&fMn(>eB+mBBWQ-C?VCjxma6|M+8 z>dXHE_9-^xIg=_Qg{t84zECksBc0XU;-iP>1-I9Q+T4BQiyK?x#hWr&eE#R=GU4bD z5VOy93jUeP{8dF@o+$d0UMP26emRTRA#Y}Z4L-m#<PpwzirP1AXsRQdjb^5vg=H{; zlhPub%-|2Pb3W1SV2>jA7s0%|U2!<ARIwVd{7>m-Fq~=-(1C`{3d%mNU2AOIb?E5D zskiYUzOn~;5~-@hWx93d&qxm^_}#(zWiy`(8@ax}dSX}KJUzTLA`Hjjf0jlCeD*)J z>9GlV^3CVkqIk?hv0OGF2`njjwu8OLZy*3jkP`U6`<lA4#Ko3JzKQ^{6+<U^iao8v zG!#e9!SpwemAItXG>i8}gj>}z^SxP3;EMtB`gW84!qx=h{TzaArLF$ukG<wuh6frn zE<eY>c!IFnp~06{*u0cI48E!qk6T^%NUX9XE7TQg=g8S`=>?0mzLoZ_xyNJ|e3ha@ zHyohyNZ9G`%e8H<vOz9p%-(Y!DO=39OPqs}sw<i}ESec1HR%Ky-}gGpMO>{Vi<#=) z+~8(kI!6)QqH!S{8z}KA(_`+32N^w|+6xdvE~!8^qAw(wryu^i$38Z$VVHN<Y<g?& z*_VWs;Dcz>EI;1SM-kReZ&pE`{TMP|5`x`L9G9?JzZhir+I3$@+WJR;2%6;+;CFb1 z!9$=If!Z8Jf%598O32VlEZFtUksmwd%&#_?-{K@_bU@|0V17}FozudSifi&ztx4Sz zuQMhhnb8CQWs2oC;)|0<$d(RYS*RKDx>y4;YpDePUw3$$Q;bi^*A*}EJ;0&mTC3DJ z;+Q+nGcoqBS?0g^;|tUz1SGrN*A=ND5oZU=JX_z??|Kt&i2263rp>!QHt7xT*hr(a z5HMUuXrSm;grzkG#Nk;!z5rDT<|UQ=?9$lN?T|IcPvH_(QhA|pNPkFGXZ`XM$cZTh zeNnv_!1X{@>y@Dn8@=bx2}olB{}Q`(JGvca=zS=@JPO5ba+h%M-?{d6H$X!7-7 z7#7yXhAJrRhF{uzI?kr)E>k$p)`RgD2rzH}GcpEd>$8mrVZ4rFkM%KNvGmSr3<`4c z+!5tBp8u9|gKz#Ym<lTZq7WzC-P6kg?XWOnu)o05mY8o4)hVcGjdqFAnWwrn32WM@ z*Pz{zE}#fJ&wrU6SsNQwzf3U-LOy-&Q|CRfun-0o{8NU`55SzKUa29Qs#OtsBX4@M zV%<}LE=rfT|IkfnKMhlcU^v<>R=}6^Jh&;VCSI4uKz}<l3ET%wT+)v;EX_qr3_{Hw z;2L1^42JDfswRkBA>;3LCiQvcI?>imWRYCOSRuzOJ1>>qq;ES*w@H`uCTp9|v-dR0 zNQ<XPB#XH|6!p4wU;Q$71mz-7<&~PO=DU8-$v>+28?KV)WS25WD*C(2`6Nq^6TGS7 zDQmfm_ldaD#8LWMMZ#k7Z&4sHLB~n7Y@dgRnvvZ4s%#8N%g4HzVZ{;!@(C@{=X;#w zZbVH0IiNqP>zVY6iw%VZt@%>cMx3SZy7iU*6zL2Hm&S+lBQ#sddXo+F!V=QOQLNrO zjOQA+_urlOn^y%|tx(;|#|-XZ%4H;_b*r6OBK9;@zBGDsb8~M<=)L?S`L3NqML8Rh zU#&94c3;v&Pq=!T1X(0Kn@_5Z*FP}DK;*q8*nW3W{lJT45A{UO@iuYUcXYv2O-t#o z?cijVFuKH}N4qEL2n|utEUst`c&QVixhtpQ^&lqq9PM-_C-a)fu}{MM1A-++I3BbC z925<9+mLP35<-DI?ei;qFS~f><Id|n2mj7lSxqgGoo&~`4+~)fQO`#Ghs<=(O?eTR zQJ;l@uq&}s(WJa@h51NZOCZC>t}3}48Dd^<6an=B^?>;)v+dgnQ27t@+^D}DN{t4T zd{hDYF3?2>x<CmsOCK;JoyKO!{CzvZ@%|@hQ~7Dm?@r-f|J1m-!`MArpV;V+^(pSt z1da37IIUTzlxb?SO+NVIzUEG9@|gRL4Jea2|2v~tvprxfw!8dP*XPZW_3r+#vnNf6 z;)4f5C~0#Wt=18)pO!tO4p1H`H&>L!(3tb&=E_9M#R-aP5PpozFd*m?<udUj`Qq%i z+L^MQ!?%yWU4DU;1)|q634~u$`}3Ft#X^r=TWrzH+USzw`>SqQM(HM2*Ydigdc%xW zf9F(p5K$niF;2z&?8b{fnz~VOZf)+oE-JsZU+Sd(Tmo=7fi>mpbF7olYaGHZ_d2qA z){QT4S>JQ++I-W~CP=EX!P<)t^oF^aBzE!YUc)^146->4g0XcgH*%aUy*cl=OqEdt ziuv}W)<B0VRzV;J#2FPX!%p6bYYN3dpKL{S`T|?M3T-{68-3Hio;T%?{CrXARA$%` z=fz5kFSDy$(szJ-<;XtCeVe=-;|G-|72T&ex&Wsa!&qA<2DP#;5rIC?Ig@+X?Wawu zqfULK8pwUkmlRtk*1Hpbf8XU@LgpR3J8*HkxtP2(i?%MTZGTj}mNOFTvv(S7QQtz4 z_3b!#)!~;v)9(kBUTFip4re1P!(hbb21f&qK9-!6;>)z#`QL8wOt{aXqE(j@<^l_x z2}k?G_w-&gHoh3**7M9Y+>L(l(l;ps+F%R4MuukMH#XHqEYgXa_8FS?eLh}dn^$i! zzew;+##VWlm(4-ec^j2~#0U9b?&j1U<TyKX{Pa<4vTO2B_|#;p%gd<2k$aPGZPJz~ zHb&&8e)%98SKPw~iH7wJDL?w3efJb+8MzAmeTBWJRmU8!_^Lt3s42H6=Z-OU8v>D2 z0IwLIDWfsgvD4{!9h9_3_HS+V&#k508`bv}^Q{41er42(j&hsjSzPg6+jgykK#|;Z zhF93y`h$H?bg+XH6YbKhqmx1btmvy;HVe(63Bm%*z*&!dh&*DQXDB))So!UPXOZDQ zVjj{mG0`H?8&fK6@6amqkaw3pDc`BRmX;(<7hw(iN`;WPyIRR@EvY6D9mA(ywUBS* zk1uaNc|}AwJevvsA#(17zIA!VQFS!=PM@L}_WI?VjuONLQdSh&Ll6`DIDdMlf6eWC zHXHtJ0KY`X%LJmX96ZQ^Z1Z~J-dOc&O<U+tF#UoX``OA@b!gEyvhPTkE^`JCb<p#v z!e%mC;X+4$8O_~gqp9?F&OQVJ_mUrHc6W)n#BWP{P+l~8#&Qhccg0a=8@5@oq{BhT zY(bl8yxTzbrQoPvx<_jcv}_Xp`k_Y|&_*m#KrrndXTSc5c`X8WWb<*E!ruKE-~R=L zo#tHoBAs?eZ3aF_Q<YJVIlMe&9(g#Ix&2x~u%<KPFAm3hP`BLwRj02Ov-Rmk*X2xb zaZo0qQIkDNTaTRBpOr6LKe4?(q1sa4)OIz#iFXXOSaA3QmQU)>CFQWQtOx2!L}43q z8ls0cs|K5Q#__(|5f>x<4waH@%BXA@&C(tp7RQcuwZGE^_g?gi>eas;w3yKHqx_r8 zZi+@Ye`b$8#w4|y>%5;x^OkIEY<yj0bjf@DoRUk+y!#$nW2^ya%@E;4#^D4PV-M{6 z53#pl0oZw|5w0_Dd`C7moebu`)pcL4`A}5mym#%>f5LSCrR_yaYMcnSIp3eLxv*BE zd0SJSLgls>jmoWX%bCI@`;OvEYDKbAat?btMalF7aR@zMzS+L-HNj7Ap3<E^wr+~u zlbv^pYmGry!y0k8iJ3~?>A-^$`p7d9CO_xJ8fBZ&vZn<B&qnKk%U&}(gg6K}tp^$| zI<7J)o^Aezj^bWrN{cUz1FQYd4Y7fz)1H~O-cb{<uB_e$;G7EWE~W5XoA&zVnj0`y zLHqkJN6Y6S$sG&`RDXv=0vVhD1yRgPDKUrkluR*2WZ5P6v7e}rLc=mT<CM^VJ~KS# zHHxv_<RfIm-aIzTQ4`PnDdyKtCc6B--5FdF{G8du9_oSzuf6zS%lJ6mbRAnNx9~UQ zHQA3PgT-l)jr@^k_R#bcebPwxxo+OyefHk(gV9XYqMhkmw?=-6{fPYxoMl_hkX;}a zx%#gPHfG~;pW@TfLmf-39%F?J!(h|0ihY9em^i9d*`LFt4X@C1U4LWWF!mcYqZuiA zC5XqsBCHJ-`q^EuBu?(<$(^rE33vi?#=t#7Ll@;Ax`tp<R_Oj`6(9=<?qz3GPrZ=h z|F+{D`XKzJ*okl#ecgNp6mQ@RpYNFqN@~~gErKx)!_@e-y<(HQzqRJ~3hpSATn4TW zUaO(BR2OGEUmN^UG@<Jiw9MMh{fWYBI^^EKoM#H1yyUP1g_?8*Pu(9yE(-Jo1$?FI zk$4k{^QJ;!!QL!^ey4?s*BoO5m4^L9)JY7l5q@O;0YcIORKFOzYF{}lF#l^fTgZ5% z6#oc`&(jtBhi;S?No5044hhv0cwE#bg0s;4)7paVX|>(T?Y;zA&Yg7F=l?}~u3TxY z&-}lL&j$K1U)G=XHoUb1s_o^%0BK29THrkAq+m|MZ{4e&$0@NZr}_^@H}Nf#1ja_v zNM6d{^;efUPq*!XrSIl;D)4rcrkK)bD4KE6Nht9jy3>o{T)^C0`VU>Y%yzV@d3-jK zV^69*?9-ZNV7}#Qum2I#5?)h%Td*T1;V01AHID7JS5XgYY*NRmD>H|h%Gw?d`AYvO zmyIS(SF!gEZJe?b_+AO!<-I--<iomGInMKPs2Ndavt{GFB4p0yuG!dvN3nWXcvLyB zn%zvLL4p$k8$(aWWg80H4+)@Gid2L0?n(-*HybKEZOLByRhu)O*S*R6;!xUXx}PNi zObG=NWqeUv^}}pb)AEHjbJf!YgWg&cK}zU&3fQ=YD7)Jm7Wnv83{-e>t#dCx7e47e z*!>V`<9+|Sl4BSgl%jiO0nR|=Z4+;bRb_p#wAQE>T>x&KnFu&Ccbsyf3CdamF$NC; z`!I&G_;4EI?r7;HNV^H}*s^L>+ak1DdhH&@fZH~qC-~T4gzBfSqP&6i(eL9|)1xHn z*M$b@hd+@rQq|P%9Y1~2`O=4tHgbIbvj_eJPrp<vEYEKwKEM5zic!-4!Ub!~UD?KV zupJt=f0-y8Z(!UP3YM2Rxr1)CdSfh#)c{?;EjulR);j&TH=k^SXNarXd@41>b&s;{ zV#2e4T$b@{D8;fzXC16@x#wI?h>A(W)*PpM0##g!XWgOK$F{U}Je*z1dGbUdI+zYe zl-l1An?jrrnH{THT|4Jpich{PtOcE5LAe19fP;BY=`?TdX&LEG5sz0vf*8CCX*Jsj zd&8+;!Fr6aaP5~8COmj8VR-=9bvQAFH%w4P68jP>;N|ARRb^8m5QLEVzQK71FZ8{C zKS?7j1j+9-x85k&K#L+UTU{S0n`yC8%E(JPBLGVFRYLHP!^k_@24r)G_KEq^rySd< z-$h;@#UA6n!0!V9N(9)e)cxY;Qahi9WUJpW!=L<Ip)uA}*pn8GcKRYyG8em`<^u9L z*4qnrh-#a!uMRxMC%@nYG0;HpriVCHSqkLAr0bLdZSre?*fVu*(3>*vsb|{<eiZn0 zhIn<RwqNaaBlYyWN+X7CoAN)6$u32<c7xsdON@kP!c6~CRx0W(9xN<$djVpDRqFRQ zcXCtIfn&?U<fN54AIJP_b*@j&3x>rrEHx|t5~HPntX@e6QC=oYaHLDq`+b?y()*<N zaN|dJF1}<8pzZr2=a+%9r#}x#*{7#qYMRl(A#fd!FHyw-EP?qybYeCZq=du1>>O15 z{D5^}U`XMRH?NT4cRlS+My=c<T=5vxnYf*B;}7&o7z1D?okW;a8wd{h3Kzb~T3-$d zjn?t(jKVuHQ7uO05RL>eqkT!0Kj?dWUekr-Ic+5&zeBBrt#+pJH6SDEA7*6K#5;#L z7#!_>rCr>w_Bg}^6b<wU00s0BhavU5GkQd!6LThqh1~c4&Wx_-8wuqn%>oCiII0P0 zs_*x!XJhrl&*pE9Ua3=ZY-v!wF@No4c~ElE<HPC$6<eZ}Ui1Sxk)FK&;_kr?Dmzi# z;KSyrCKz5IksIX8Yy{jeA-p>LHmp@}$zGfY9Wd6%ULij#5-DIEJb6}gJ}ILfApPXc zZWW=O9dJ}>5I5iygOZV_|IlRvMc+7m(sGym$ZKua(16dBj7Maij=opP-ioVoPkbc; zS!y<iLo$PL{kcWXZg{PO7=pXJww{*??T);xoU<5xW0_<};G9I2N7dTb(3194@1u+3 zx5?b82M*_sA07XgP-zR(-L`6Ok^@<`@;!VC2n`80fjQt+Z$ps*JiRFrPw6J$iBsd* zmT6T>-TS_vEU)%VP^;p=GAk-1y9>iX700u`23im{1YhO`wmz+kfq$=}rCohw#h@cw zL1Fd@fRT_rW6PgShD%OMYn7EHX`0q;bF#m}{P5^*B$HU+(v7LEsmKc-m`ho{BNK=2 z5qBy?_$e?_P#+hXdQ}kpzP!sCJ}{T}J}|#Tz26A$WNcx#BswjR0DoLwKaS$5uZ=E! z8<Ejq2uJg0^kRenc@Y7|Cxh-zeE7wWUcK-nFA=dkYGbgXC`_pW5YBjXye5n0vm$uP zfqIr#>(c7Sg|CMII4-}VVyYsAQc$=~yE-OUzsc~ZWBggxzV^nD#zm9MdXS(ish+#b z|2K@Qh;}JE0rLk<X`<1F0RLY_0mWxU2i5~<sI61lCgqfbB|?{BHs4>9_}A}eZVWW3 zu3On~5`7pbrVl%saoVoJ@8ji*n(V4SaWcP17WKBfaWMmfYk+rFku|izWyP^rcFv7X znbw>A@BN<p;B}jGf4+5Dhb?O}RKRj@v4w49wb%agdhen<-MFY7xuPXu?5bn9WJ)TY zbvc0wsrJNm%HZmoe>Gcp(I@|y-04+HBA%`wWmen8NzXTitG3Al2?Pl1ec1W=ph=?? zr2WJ+?Oa1vGBUu6IKtCD3i*0Xt_dl9)!gY@2L%6ox{j(ws+(alKp(i)_KII=wh(;9 zrbTu%;Q5&Y!lF6hHYN>D%#<Fyf@u7m#*nv2&)T4Kc~P-RZYNcC%;br?V-4Mflu5g} zB^R3RUPW5ybMt1WJoXx%4Ncyr64(KAXyNi4Q15XT5_~S{__Dw1!vVp)aDGyCLFKTA zJi-2opAX-1h8!K>c=(ASbt+)~<WeyI(4D~?PojWdfydnc{(TDB4LHCR+abg%kf{#~ zOi;MZNIPA(fNe}-az(l?l%D4|m={yOH-uuNRG5yhPQ}D)SNXazo^I&Ng$j%YxdP(R z&L5;Zm`R^}5on}HAAxY16+>nck#$DD;$3nAMMc~`MYdt0SSu(Qy)+4OXI05avArjZ zz9G7j$iCXo{v-SoP@1y;jTkNthuD(M@^g8k30hSbOku@2c2~~7e}H7_=7}b=cjW`A z)<n_V`{eKj{ID9c*ge~O-z0KFGcwsU73O{c`9@<3ik5H)=+fI%3^lL~fB;^e)RxDe zEUH^~v`i{oC{QWf`57NP^+o?f2F)OF>gP*JBo2!dXgHWE>PVRbz!9~^5-H#8Eb;`O zM_QO4ZcNE^7P;{jlrGFJoOK2)^e@1zScapqQlP!u*~^3N-itdm(%#J$5jiz>v}=&2 zQB{?Rc)nqnRFfzgKqj90I%(UDkbWt?4skn>JP>YdV>$L{vAg4eNS9v_@%35;yKFil z`%;D6bEdYV5gPca`#8&K1=S&q8aJu8x6%fM^Ahqkk(vhyKoWI322T!(_EFJllJ@c+ z3kKkrwH05ex6_<-JoC9u^Zj#68#|_zZ(Qc&S(u;;uZff$)#agTl6bP(V1O6BiSYA^ z-Q)LJzkjec`|HMZWC6JbNy_*}PvcxzNo+A-w-&ZEO!)To{y8t9yqSYXJinLcFrcx{ zQGa%p)_>?mzPv$#)sJz7)EnfaPQ~$ROuhfCf7P=dpE{=*lWEDW$9h|zL|6j@R%x0f zzIbg%qQ;gS!mS$acQ57#Pl^`PdrJ>>W5+l)EiX{!lmB0u7f_T@bf<&#JJM?}&obEC zdvgn|ZZ19aU2xsnj=k*y0~yG8?WFQjO!3>Xef<>#**_{?h6DmE?XzB>mqL8{?N#a9 z0^~Mf_Pe`_+=S)0PdJ=81u23i4okDmieYLvw2=p-X3*h6z+MbWZg-|z9LR??!>2yQ z!jbZEKZDrVbUZQfkDFUbTNOS}jN7uNtzJh(wHGjtc>6-n0g71E4T@j4U}yc3I@t=R z#(Trz$O(4DTnW4u?#?t&&WblC7?BSXgEXbJygSM>N3ga)s|Y*2r;V;O`9g({?w715 z%tOiF#New^NL7GlRP6_ZeMMx)u1(ngf;~O4;%@&kXn9NY#efT2@__x%>P>B@m0X*) z2C{riLt)R2QA&JY{a`2V?sfB%HOds25fMysi&F^y8WhrMw$nJCeZS-ya`wH+Z7?Ua z;!>g<OzgP;|5^Uak+KN@Yp;)_x%Rx3x2SR?WapZ}lia-9uS|~p9LxciCHntySpxmn z|8LV}0FsI75kNE@;aG53vuV9&J+6N#u&L&6=F9hDxIzo4B0-UVh=lH6y4s2J_qx4} zZCx01G%B0v72A1gYblX(3s~Lf2Qw@+r_xgcYQB&RI-~J<AnPe@<8g;zPPuc>)+Ev< zKL8m^4kFJMh>;5R!y{wnE~Fy=p#x=2AH8$C8TjO{@?YD8jg90wQezE!Z`%l`DZ%u; ze{j`nrM2@Q1vTQY%f!jOE!fCN4?Cad!$qhg!i=n&vpXVNRowACDebCXjoxmUlHHO7 zMUsG~7^x~T^kOb~W(WnV&6;byZPvOks*!Pd5B>4ae{-+#zj~2mN7^miR*)cg46*0< z;9Y=@k@=$=sJeUf%>fGx`5);AH(T2SsR%)mPm*_~9D=8OL)|_Y`1WNjLbqg}=;(h< z9q-H<3y?K)GpV2SpS6a`mSx#Kg(iLSwed)=6Z0NydnbJ*B!`T74Q8WCR>2j`$-H&N zvoQPqYSi=g)($<58yGn{?<f_74T(LPs_~Ki5}+c~k2MS{5Ck?|>nu3ZsC^<97TqjN z!m_h}sv(4ww4iFrImpD`Pn(W(*3lyWpxeS$r+10u>I*{$i6r}hpRnaQd);EtkWO)5 zZdP)~%?lYO<SBF?_%bC>@!~ABGqG?{=X9w^TZ<c+A?Lw$j9PjM@URUoy%*>YE-q{V z2~&cwB5ILl?7d@hgel%#5$EIr))xJk^DbKraKw`Om@a!n3BVB)G>VrWLJrD%F`!b9 zk6%3p&?muu(4!S|P9W{YKJeMmy)`9Sv<CF7(=0XRyH2vdl}$7y*A&oWh#l4^c=LFF z6SPn6@T7`R%V<;11(pQOlqik92a_tPDZ0vyVWJLU?0Vx{7lz(@*(%qHd~|-dJJAq| ziuKP8W6+zZ&y`<(R?}n(2e3WmbR$23{;VIsnD&r}<b#KQTkc<yX`iU4kG2$+`Tjg( z=v;(^kweI@4!>?N3sroj*m`s?j_aq9x*z)uz?F1PI~B_lK{!=2(;^tfsIoJ!@ue+0 zI-Z}ZmiHQL3bkfo|A39`T1nYoQ$Mgij;?8HPck{<`ZBf!_{++za@y7D=Rj@6;(BXk zkC3d@t~kQ&+!|C1Fkz~$5R+TY<KKzAwi_6kILs^tY#@pD>b)SLwUF?%!u1+c?~Hpm zK9XGc1L@RkSbm4>j5}JDG8J65HVqYNsU<VJH#*Jv>Lagx6;#%{I%llFcoc#&%vUD8 z2$1YOKKJc{dM?EjG!S4n3M|-Rt$n94si9to#uxf38T0pQC7ya%DOlwjy+vv+{qK7% z;TL?<t0X^g{*tj{>c?|pxHm8nUf{A-@ox9qr=%ucukw{YG4g%t`rw8WC1`IW%3-;C znFn#bhRpg&grAgETBKWawXtqW@v)m}ER8VuqnCTl=?*|s?_U$vy}aC;ZTLg$bJg?G z7AVX0Vc*Ly)lYZ&v+q%iR^&Cuyzr!wG?}vglU&#LBUGkZSYA|5j$)+lb$CF#?8UXO zRggu4P*>(B>b9ddZr<-z7Z7RKcngp!tS3uJ*>UY)B6sPc(^}y5g;~$Dvq9RNcU_#N zgu9gd_A4_^jHnu%K7z@3@B*(7>L&!rSiMEnFN0_FO{`6<9oYB25r3<G?s*l9l$9~I zkuU(dy9Yc0-f)Bn+RJ{UiNl4upeo7x%N!1UE;_kD{Lp^o4oCmbyVo;TuUywL2&Scy z3)*$6An;H<Q>4)BnP^Rg{DV59y;~Q-R0f_s*JP}to!$$QskdvgL!Z={2~jOumL09B zgc0Cy6ulJj83I!j^vIb1$}?o#ZDsgP|7rdQ?qRrY3X0bsqFP5X1n`mk?himR%-Qb+ zM$a7b$6QX)%2^;`BHP0V=KLP^|Iqc$pYT`Jzt=v|Q5)DgYVHaIpZY;(4PIab<OAkM z7_p$&B-J$J^HD99%BRM<z^(YyhPi~wkPT@u1y*b#5|i5c{u;brucn+o4x-jT8;amI zdSm`g6Dl3odgglcVk53P*0LX9Iw&{+QsXz`J+fPp$_cA3ZJ=jNr)`bAczf(hTGUYw z$8z@@u;!lKbFZJBP3`I8u*86X_>(e(H}xRlSGXubZ%h}o_Qi2yL`j|fC-BhfG!dGy z$wOj+ZvgF8zBFJ7kph;wn}HxEs+%+M>;9&b>G)P<)$1DlUyg=cCJCi4m@d2V{PDMW z`?abum5h26+Z(QsfHQzeRm(juX^D}_jGMjI?3^(htFuvKE(q6D5C!T`CculB*T}z9 zMfj>G%e{i)jTOMOEP}h5got{>pR^i6X!tK}&;L*RUNb0RcToT#UJ76b?H_d(R2Fyi z4cB)<-g0~+Tu08y(7#ybtyZAAkeLBMWRYjKS|ild(Q_AK5`X?NqRe~+tmMdt?VzW! zk}quc9B4M2(h~hjSPi9oN_L@h2H8Ve_jNZej7-{;j~N)ebmiR<dQsw4`q<?a<nps- z)a#&d_4YAE2thuxqnOfs?F`$JOV>ty8cua_3@T6X;e=-c(q{s~Tp|z8YUI>3{WE3j z2ciGQ#^u8EaRX8oY2P1Dp<inPMft3qLS|)@tRKf-J{HZP^D~=XON78cZD}h8)I^4( zTX&mQB701Zn0jNn-F-_Fv-*Tbh3ulumh2xN%hnaP>-T{eKh;ldZBd1YfbEV+d^N_S z((>V|a(-pGu<!Atpb<7#Ui3i&uJZ~)uY;^KQOphL)-L^;aF1H`r7az{SXNjUAk1t$ zxnS~n&6+R$4AueiDR$S{M&7HSKEk;n=BBe=wDG7+>PH?`9^jmES@jfYG+Li%&eZ;5 zJ*U5vEhn3crBdWs@TqJjh)q|Hh)O^miOC}IsMqaIAL0E68+}XHG^v&|jQHlAM#gt0 z>8Ss(t1)pHrmD^>@HwGV@8cbL5oX4f6V>`Q?L#i(fgoWz=OdgQo}G^3)WaEp-xM4l zzxVh%w|~{X-*CVs3n#55%C0#H+&3a<=7u-(dw2r5RX60}&M!9@8z?jy!>}%EOB?k~ zJ$i$10@fUv>-lt(-m0l*;eHQ09v=p^dNq9ie&NP8SIy1ioF(*yFD;ax6?0XzTtB>j zZSxV{ZY=7rWD>Q(Wsq|64;>f^tZF*hDb`MLRWy}689lTE{H2*J0_nk9j+hW3fADp> zJ?7xlFT`AB)MevqJEL2yVxyJ~exjH0qGn-0RFZIMTCx|#p_W|=f7owcybhi{_9B{u zdOP=$^u=!6aVSB){zBczC5`l&g5tn}D$?yj!o-=`8AqdX2UFfYrN#*ks+iMs$B%@c z+CeK`paI#EZUVpAaPo&?rKW{%V&WH*GOr|g5BniW1-gL3If@3+=ogUWZ;K>J>@aiJ zT-IlBOjY=R7xEI5c=NNzf})bcSz^1t!ZU$t-cXe$K9t~U1IoIsp|)oHN^4BN^np0G zz3xJg6M;@9Vb@gnYUfSF9kTGxt(r1@ybiC0+mkHrqbGI@O9&#FY7mm$eb|wDYjUs3 z@YvDN4D=9nKV>~|Q7%nlym%xK3v}0QB><y)RS@CC{9-VQebc#hS{s0ZGt<y5XW~RM zC*6kulGT&rdf&dXdPZ+c(M-F$$$0Y;KO4`Kjwb<T>=qN)qi0)l#^?T_3kt~`*>KW; z=WO%?%`Yiwq$NcL&yYtwN4&V>q_XgD*HS?@Zm#TI=ujj`#o$axzoY7PWFNezEtbl? zgv<^)*GJ06%?ysy&s?uL#+6xE1uRO8IF4=Yby#xhWKKSlb^-U6v?~zt>TxQwte9Au z;<|lU5<<Ryhi@nL<LMvT?bhWO8tWM1DuKSGlPr&m*M9W*&KUFjXGH%F?w3rF{FiXm z^?D0CX?zuvLg!?T!n-DoksNs!c2u>p{iFp{mIzA~rc@BZ3-GCo8(%0$^YOp<<}BjZ zrJedb%n!{+NQw=J7yPFjMLomw2YJyy*<7Dw)|rRC?+w&sq6J}500=a3@h-uf!togS zuP2!&YDG7;f|6^E(}t)neZ*--_w}klgE{(>uU>iV2d(+|N7Fp^FKwt`Z90qh6wwBc zJhwk!KVDcveSBbw7xrqfwGX>#`@{PQwASEf<38xoAo@HdjGUs#4A;6hW)wkvbiFQd zh-<(#I!*6nf5HPJ^bFUoU+AG0&Wqb?Z0|^s%s-y@d``Oxop&hho!|5`CneRwAO0oU zWf7K^E;Kvzmzbn6iT>$t|NZ~DnJiWjVgJyf&_IA;nSm;6+NFfhGmp<oCSP=vF~-y? z(tn-+SeF6Sr_045r#!!xG$0k`aUvYk*Txn0wY1<q@+E3D!O73ZgT<c?Q0Wq|<m?nV zT|tBqrjsnjm-q>0ZA}nrc3!Gbk+?O8Tv1>JuRuEyHlHat$d{((SOB#B+S2xDBl*Ww zW@YvYDS#8+zU>GwZ`rvhi4UjSO-mGtg5hH;^|eMn%MHsedHJs80FvWHZanJrA{mGq zIReY|%hk(0f~=SrZB>`T**2Yq9Dbra&f5g^qfrXY2dsY+L0A-H07_u}xNmrWFZJae zn}=J*C3cRY5qwQIt3^#o7tn5`A3pKwOOn%t<d?IZU)0S{@(K{$+*dEhfPQr5)V~|? zVCf5d&!HjmUf}b;CffhfkBo+^@e>b;0OLun?*nva7IJ=5U5hDxeNf&|FsBJjE!nT( zb@ELE$@1D}oiHVb0qn>{gf59C`=PsFG-}Q}+)hD3aop$%lFekzMqAtkKW{Fw{?KDC zZ@Q`yYF9C=jf1_Yxm|rL+4s;8fMFlYb|D^;je0{Ad)u4?Rxljz3Tm2@?Cb|6AW2^Z zxLIGFjsmUXJ~Y10iqs?V{{$=D{-GntR#K#W(Vl|HxB#H6zscTqQq@kuOKz*~mjTnA za~j7sMPtB0A0vp+n`%c^!Ts>lfMZtk`fJC<<&4N32@-=Y>Rb8t{~?8k*kF05KwTmF z@F?G@dtL{5r$O7#aTaD7f&DYL5SQJiJ6}*-Nm^K%Ea{WxVKSy3t*sZT(ofD=O|BKI zeC<oy^bg7Yd$OXVFuH8VoXDK(X5!M4v-Vz8rfV0vXz&D%b4u-5;+bst{5UkaF7f-$ z1N<iqI;rDy*$?EAUM6im5(ORw8Bfwo%uJBiaAUK#{?pcVoS&Jvf&sz%00@jnCzw>J zsU6bn?BeUAMiR4fQyOd$hj`}f170wxbrJEJQ7@Zri#gpoKlmF%U}-uPEz=8R{}H(C z4SSmb;b+Y5+aF08VL88K2aTW6yCxq>SDbW$fr3p&nipi5Wu%vzXgWbYZ+o6L0&+WH zIBq}sK)Z>yDlBTwk%imatr{2VWd&WK)A?HFe|mew^3`zZ;{4(rCQFjBu%2+O%oNX% z=aSYaP&nfeeyJ_z(X=W*b>5$o>osB#(zK{LKuIOKMQ95X<V}q_Va@1*Y;_T{&yO9F zerx=y!{CcMMUW#uih-B68x=O*DdNZs5K-aJ$X<j-Nb-$2XBK@Xkw0%YE&eD+IMTzd zKtNB`azV>@=jHi@84U@6&bgwH-)Q@68uxbM^4>k5ihy(znd}DZ)TUG(`$-h7+!>e4 zBXUCrLIetKukiA#?y>TWP<DG=dOCSJrm|+YB@>^%fJiRo*j>JM<+$z))CZpoBOshO zRG5)M$%6AHQ)WF?#UB^`SaPlKQguRYf<MDhGfTRpUs0EM*W4=g0*?&ldTj4J*ZE?F z`quhQrsH(8I?qFV>a<sFdMv5E?&ckfEpwg-AcMl(joefJx5MVbi+||IkKAsNp@{_f zy9X1uC*@T+JuX=e0UEHJ%l8{}>eAY@zqBV!<;-nEFoWdk(gdEgUeBj5+TQJ1<o{~+ ziKks8IVC~I5RP&W79pQ^T={M@Ju>-yKL7padRDFOP9f5J5-p-)ZmsbSXsJ6q(s7_- zTZ{^Xc$Rxk%($?6ZFQv8i3NKsQgg^xd&zG^$?L~YAcxj~n|6y=-1Z+90RUj8*^gS2 zT)nPky0{(l656?YP=WzN^wTbFB*nx4Ud_Cr>X|w7y0gpc>_b!@Hvn|p0BptJepcfu zBQc$_2|Khoi0vx;GUMTA#|6pfxK>J_)?hohc;Is$ZVkq@Aky;Y%Hr{_dYO_cM9#C! z(6AdB!j<e=(d)NAyQF?=m((L0^<(%vUTlQ0<>K3P6#fQhjV;tDJk$=Vc=?r_=i{GB zF~;2z)R_DmJ@!TZckr`c*Fz5W4*-&6`z~?&AOj&vW<R($%tEvGNmuK(MfB~mpORZ! z5`AXTc<O_4Q=hVXE05b8IZ<5~CrPC}04`XlKgaqr{vdt&&!;i|k`FEKcxac80|573 zi_ax^;cpYNNOa-a+(S?Gkiy}s*L=CUFGJL|xY&@>YyfX0lPqd8j&O3ugXrCBU?NwW zV>fTejsHzyJT>zNvr=u!C@HLWM|uU#4-7HI-@h!*RTkdCDy;fDPhPM7(T*luC?el5 z7cecQoR#OFfz0ZwRF$1&3i7ycDb;-=P0(iG5)Nf&iezFwY~-!(LcKrd%~Q}uJf!ZD zQh!bT0W*OcQzKS%r3Mag^NQh9O<P+hR+ymE4=y4z)%^(-$g)|FF(y^!A(-umVg92e zP;X9-fJ?qumZVL5m#eD=3;UHQOA80J_kfLq8D3#ZHjY?rsT<2OZn%`rb;hi!jqY^i zc7reRAd3>5N;#UukXV59p*(s(k&#m8IJy_c>aE}d#OWUK@%G(usU~kj#~d)d$w&** za<t^63grA`gQ6zmm4;_?VjkjF=fEVHT_nZ4QxQ3K127^1-Ki?bo-lGKEj|-NV_+v& zDbi6;{l~c8P?(PZ<%K)%P_d&4i|-FH?&h2st{2GH>NIT_4&Xo$ViN)uuX)KDki2tQ zfx_MZbEU!){U=hQfGi4{|9!SD{L(VK_2dy*A(hOtH($}l2@`|C_;-2+#dJTMjybAF zQ}qCw9Gd4(x)B#EFJVzsDe0NUV>>?Gm96TMgrR9*{`muSI#{YH_2_h4IC1@^-?rAA zH0?%}Q=|u`?`8ZlRRH@BT_51nYDhFg8Z}O-;CAJ<&bXsay10~&t&?vlZ03-wcnPBZ z<znvoz_2S6w~??DhQuR#79oAgp2r`uo{&p!EI>}%#VmD$72a<gSvU28D0dpr|Aw7m zFrdHwrbuvQ{mGu*%QE%9R{~BtWXJ!D1A<iL2)BDyz8LBBAoX)RYu;Z&fjeFejVOHw z?<!KMUMI;g7SGF-ch0P3cTWB7_8YH^WGtvp0(tQl7;l8Q3JikoND@r)A38n=m`$4# z4`P55HW63lJl!TDa_Cz;Qn^U8VyCi`f2z6rmJ}zb>O@Cr)zDjwFYUe$Sa1Rzce|qe zX+Wf22sdf{I}zbj05>(ztnMi5_Hs8G4D!D5!HtnYE<AIDdWBq>uQR@1<yhs~&}epN zey&dn8~2*yi{!cksvnp<u-f_rMczLk9&LbVfZ&*0P!|87{xC5@<f(BJJ2mhYSjLHB z_wR)Mwh8!7lF)Z4uAiMYM9z<^vO3;f=kB);0Qbz#a8hh64B!fRq>JRrbkl7SN)Gd^ zpL`F*@rjb?<wog4<QWB*WY;G0K-{)#it#G%VYWtsS=9&C&<-GNTE#%)LNa;gXfA~1 zn3e?&+!WYZ5dO9tMF;zu(TxP^xConPed16vU))>8de&TOo`g?HZTStJYT<l=el8yy zN<1EJmc)C^n;Rs);m|RDl+AX<|3TV**Nw|L+y4nM5>Wgef{k&l$k(o&Ut+ByVWGLE zG;auuU7R?Z`GdHAvkZy%LEHjdN*a~O6&EBqXPV;bOIYTh-kAd0Nu1cgv6YxQ(FsCR zmf47?TqV9O@FkGKwt#98w^?ivdX(}`VY2+@w>33QE1NI2`rs@D*I-v`zm57U)D5?l z{8VRro^qc(G$)2tcf=u2)CRF>aY-`Wox=UOx(dG-PFOO?1}rPDqaK`aqYYnuvok(8 zN)9o5lwn?*bId&JCBNDpako#apCv77QdZ=a>MBi<l7?SqfM+}yt50QHx2H9Tp*-7T zdX~R))+y4bPBaA0i8PgZE}dy0-yENMoIkL+?8aD$58RT`;<gWGG1CPz{4p(5R?BMS zU^YayJMZA0Ay;lz<)kncHbp;)R80`$x4K1lZssDX!<0B(dH}1^*QW$mu7{kL3-o+u z7^7hY>Qv?=6itT9!@p4>9(B~~ll54nuW-48<2UGa+e211*3h5-cGZkZk`-V3sLTtc zd4%_CY$~wpI*>KL3L%$`W&2by+z4xP&ObIG+1QZ=NB3=|-RI9Fq`#*f1#hP`Oi^{m zs2&6#k$Hd-)cC-i>~XLIS(|%q*7Ei%whi_1AG(|9r$D<u@foUU{TLIux6Jchl(gTs z*N=y~TzYx;OHG{CS*>3!p_mv9%ieN4YUVgA&DqDruUPD$W;ozlOs4A_T_)sKW)&vt z0X)cv5=+cu?|CrKs(aPrX4WFL?|jiYk-zz|k|Mu45?a7<x@X4_p&l+iX!-7xAIN%x zRnsq9{Th|#aUkY)B_fFPAG+t14#eQqI#XMl5%=31TfOOwG*Y!2?NU$==;$yOn0IQC z<bXNqwXu2>I|b;OFeB})Dde&hf!}i7ra_I5UWUmw7dD&IQ%1}&xBy4qU$g#;W&zB_ z(e{ecK3N(9_tG*BXXu4$mdX&1C{2ZMK>@imKn3sRy1FAL-+y>Mg_*6Vt>Y}gbeQ>m zOS47}&`0$0g6@-#sL840s?W6&dH&;u;s)`FSO0XeW$rFVw)>D}jY#>K&c#%v^e|n< zvp_8V!ads~@ZA|?9EuBgWhI6^>`E=PHUB)Tud_XOK9_UL<+c)S^m(}IR=tffS?G2v z864HX%KL4tO1yoCs4V)pGW^NWJ79?Q1|<i7q|gy*o*+QrC&@GbNSyTFJ^3mV4Vh$J zbS3tZpOIKd()@uB^de1l!^#Fly*q|5(Jd{aM0G1Z4oKFJh^Ruxb1vvh-v*qDQT(dO zq|$Ea)$#oi4hpuve-6pHo={WOQQ>+u-iVQDzl&NCieId*k&L6-Rc;(KPCtYWpSQ5r ze^JL@l%T8rh3LCv78F1~aX+h0wGt-ZQ=rtpU1L|%CCNaSPeG&1d(A~WP@Jke;g^>e z7r(+hV}7vSx|=5R-uKG?VDCMnntIzdZxoawML>F$A_!8YC@l)oL_})nNRtjC9Rd;Q zy(pj{M0zLm8bIj?h_oO<N<!}mQX+)-?*BdSJTuR%Su@|}p0&oTe8>tRd+#%Q@9R3x z>o|XhUkZ=h%3zZl(2%%*j|_%z&BP!9-_WrDn=6fD_S*O$TQ7{T$&!AMQ|>akidMSQ zOIY;wzA!vD2YnKQyUfEL2<r#SgU^bK*Nz+IfQFDvmur%bKA$<M9Ha1WP9}R#T%9^I z?34AVtAw?;_uQgLm+sY^_pq?AgfUErd-<G{S3OU62hx~<;%);s^SWa$A<dLW$eVeK zi<1K<x6OaA=rd!15t)98ZFTmY3lF=mu3;a$bxr|Z#~|x5q9ggMnEqbmOULBznoOIE zA_`*Fr!ltE9$%He6~(y;XpxxBa7{}c-K3}~$<L;!VR|%CSmyYW)rp$+;aP;KH3(+~ zk5H0Tfd_agPk^=Zo5KUNWollQ6;98->mC5cui{m?YJe|d@nIrQID4)4o;4zf3D5!z z0y2a|6<+0<I`p*^T6O!9p<VGJ3I4|P0TwoOUV4r&o5z4(?|7H+CXqj6jK43Bf_Z93 z!8G$$L+d@AGJ*NdyFVgW`4E8RZ$Q7O9)p|0I~(eabCZ(Ht)?{<qZfkw_X&EzM@tc5 zEVD8e9!_Ss$nV{;P4j6!uTn3DjKQwFXVkL=6V?Js9B9Cp&I(r$*v{HS^Au$PtXmbg zI?j2WIOm8|^y25*YC?MQNbtr!%NN>yBcXD$2DPo7O&#eLNNwKRGV!$3u!YN=;AKBT zFs#Rh+DgrXsiNtVo`_V`6>Y=teIsBH&0eimA}^RHsCD3q>{iZSY+v%a<uDrZz<9{U zlDCEy8V;lF`}H$0UFNMpTb@Onpxf5Xh0YObn&TwQQUr)<7a>-)V3rf&_TGIx{r>#3 z0Qy$7h?W55%1x1fSNY?g?ZQPa@_lovLwXmvC+%A^xm3<A8=I!7g{W;)fquI0@iX-2 z@`U?5zi2x_7Q>){78M?X40h=?#LQ19hAZE#lDFPM`?mi*$ieU)s*^kZa6Cap7THJx z)tx}dqBoC6E=<08-KH2)WxFH|ol=s5g8(Sc_98dzDNZQXqZ$HMZeF<+|0#CQD7Sa_ zb8d_a@v>wHxH*uc&m0too;i?VjUQy%j1G``kJ5fb&)B9##$;l2pSb3G1Wpg!>9>{z z`m=-3u;^xHK8qU~-P3TreT<XU*Vh4xK?kM}Ai>z}ocUpbGRD*}t09tN)s{F+UmQXg z={I7-fOpbGy3?mG9@0w}QZtPkt1PcK?Qry33r!I8J;VkgAX&8<^Xyu^SIDOXOp-Fz znl6e0Oz!r3d-48E??KPR)G^)XrGBfU9t7T_6N(3a4(>C*nqwbQtYa^-*qB~FPPM%D z-S;`UN>gOlJ^XkR6f-x+4cfQ>;n%c3!Q!mN@Zso6z#1#ib-WjtItxrS2o9yKNib@* zM1vNO;GR`*CfB!{fK<v)REN#)T7oINQB%yp*9V)T(a5lyu9<&G=zMvu3q^SDH|aiJ zv$f(JX*OMAkaP!rwUVH%#WpzJl3N9s>d03AYpN5!gm+tk(gTq0*=8ayw*MfyAVQCh zt7){DfN>bWy|XC}E@tY3XyLsI@h74t(+=$o(_)lzv&dKOnRm|Ef0aR<giVK;^H;pC zTbYg$9Zt^Q#OZb4>h$@H43^8v2UZXRU-9tuKFQdV3syKBRQ{%Cz9|f+h4Q$-s1Q~d zD^ULlI1_nR^64z8q>!51!Kbn!DKhz?0Y!~k?-Kiw4qarnX4Da@L=)%+my+qA2UFW% zHef4r2JRx<n-rG;7EGYpor9>VUAt&YC`5RC$BK);%vU6s-Wpthx9{_T0C%J4QpYPL zg<hpO9NOv23c5|+96bAn<mPCE@d}&?f3DMlEr!27?vyZ3-=ACW$fbDmV^E~+<&Qrk zK$&gUMpNICXHX|pWdp4lYd=#nmH|&?wY>7;aFw=$mgVg)j~bR9V40A}zQxTsRrNeO zL?HTxO~at`s)qN_)(((dsQ~JufiSVDBRy(e!QQXw!}l}E6AKD(iRVB?-q`EtTv<af znK-$)Evxuuob@GL4b5}>(&s!b+&36aX`IYjTQb9wNB1=o^IAn*7O!IEV-Pg<V({py zD;1B`9<R+UswyzQ5SZ0f4@~I;UH$^(u1T4}UU80X9+#KY0PniqTc4*WPozK*@oj+d zJQ}+}3~zzq*@W=3PCz>}yHli$;uw$GM;&{b-KvDvy4a5lk$IT*Gtmtw!xFv&<5^vf zS5uv+c6aw3Gq;uNcv*U?eoOGlJ)p1b6EqD84|M7^5BTz-=^C6Ka5_XSc!98Kkxm%_ z(2@JIxe*t2gViDaDR=H}$r+mWuYM5_#tkNV7<>x<ZTvNQA0w(`RwHgIAayhC#}U<4 zZ8&9&8NPp|%+LrM>`dhRUc%PE9?czOzq_#p@jj~NV(eR@N8E;Q`9m4RWERvkr#%fO z#WZ>&$VS6-SCT1D;BFP{`*pUTT;$pF>ioEh6G_-!q!KFANyahi0t(0+@f7aLlcB<? zqDz@UDVeQ8q>6RPp>C>)Ddxh!B0yXvM7s{3f&N{E5G&c%@$^J~{_@J`NlilTc`WL) z#8kB@Fh$>3(Y#<(lpxUQ5yjh6B2ZrO(fOEA=s>f{ncse$5*^n^X>$5I`n%hdJK;-B z!B*Z~$~gagbgo|S2?`nmmkm4?h4Hy~{7P^f`kg~^me;!JmIIVOb)mhB60j#g5&gB7 z(xZuab%9y`sdw|O&DV*$XHM{7;0%lUvT|_7Z$3-BDi6q+0mzDOl?^agy6zf`V6d>! z3kVcwd7ByGF<rqA+K(c|*7N`n6CT2i34&pjrR#}8NooEzSf_bghwWtx=|$6l<vt8c z{%DF?o+yI5T3uu2GQ3_~J%V8};)W3`PC2f<KXCWh|1|zq#*NS6`Ep`>UM(cFc)TW% z$7ZscRcvf8@&w0tv7QKc*?mE%;b6UbMS(s#)727<x`x^_?yHE}%xMf$6fv~*%%p!j z#e*n@-|1-wM|gM%PBvCQRt7)o&Qy+7`sDxV>@A^kX|o1|@&8ca8Y~u>eFXtFkBTn# zf~0B-Cppr0ndxwUWHf~`0LWKC!d=V)=pjr$`?D_7Nsjycy6L*{umSm4;{ZtE3qG{Q ztxF!?2+<&NPB$tu%xZ;jF6C=}KpA_7C(rB|f#bs_<N;G#KO3^`Md6%Nli6=Hb#X;z z7!lHR^3yOw{0t2545-+7ju<<DddzK5Pdhw%>ALShEaMKN^Am?D_eJ4Jjl{yc(rfiJ z0XK~Gc6a#8uB|wEoP3u{NVyFewP#&GwnCX999U3%Q_D<KF3)IJYJ}*ZQW~Y+`9rO- z0CUHvlC0ACA6rP={M`JfWMO+&BmK`L#@V79AQA}McZ8Eim0Oqs%WV5@cJcIGp2i!L zYePntQi?qS6HbEgK^~vB@Agukg$#P|Uu*MRNWaW-P%G48e){j6DTuzoPn2*Oe)+;< z);8h(yj3S*WXDNV;F+*TpFI{XhMnz6;_pAH*C~c*;X?P?nFNL$9&Q%}y*4=|2(tj= zPz)f@Bv93)pi6soQpoTHCxo4|%myzX=bH;q@ly@DJivCT46Xo3AxY7pV7(Ys>=EiT z{@{6<#~%9L9961WZil!x@Y6-9+@3|~UTpx3t^<K(#Ha0A>?on7*AoJ--@cvO(fneb zlv!LBSY(d6W>FbxhVC$!lUC?wugaTGl~}W~V!{Ag=R{z|i{JuZa$}dh*oc-bFX+(O z0SvwJ9HaPrU;ZPBd_H4%uIbF4C#H0}z^%QxT4;o(ex8K#^k!19O|LTh&I7D?TB)lB zsHMn5?6Y3GU>Zu3^vB&aE9JlswfMT_5TgkMM`>Vy<@f6PW{+0`w^ve>_#xXxDf*V( zz12=D%2{uYIzs7s6sXU9okwoG{YkPb4?FWXuI#!!8zyb(e8Am})}<ZSPB)DjJ(;~! zl%zB<b-MKUj61#`m)Aia4H2tw152?LHiQ=)W>v*-3ZH$XI%LMq4vf<acftCDonlP% zKHL$*EUeLfeY)5kSKWPeo2Z2Cjz2n}C8%W&nl#MF5879tlA;_RNvsXEa;bjwp05tx z0}Nucrv0pBm6XLJO8U!}R7&`nC$;JhY#K%_XdhC&RG3kO#-Vf(m0p+*WzC+`M|(V| z)ZOru^Sd>6pwk(DlY+0fm1&PBj17Zz;`}%3BR5Er=PLcydFY7@TQ>Ac#vV`%rFiBy z<oHmm#S{93EP=PFA$D!u_!m5v05!7*0ROr?3lugBiEJ^Sp}*!WfvXcJvtvX%@Y?7c z5Je!6Osh``-8GwcWejqJ`3T=rG+imH!Neb)cQd)^Z?|7G*Daq{d-bMTzqfB~p#Qc^ zrWWD(a`ckWI$L!&*$$DsyDgoES}x123_7Bt-oo5+ZFeFAd;#>(<?vT|H`M($VsKku z@b`)fK8<*R+aL&P7r3aHb~H^^Gp--%(B%IN_;L!j$G5<L{$oh0F!L_lp{cFu4h1>H z!<)VR*LIa#T|wE7xm8KSbN42S$mTJDSJINp@BF-B?qwx^NbFo}j;QN^gYpGVz&Hq~ zSiH~$N|Shf!GfF~p&!XB`GuURQr$i<s}BW=PM<mMm}z1$_$}$kHky*Se1#0D*9VHt z<H26Z=p2j{7cglPw2fvx9lpu^rW8w;?5oGMmA<&iIJ85ZXM}qkB@oxi%DyeyA9mjv z84!Gu6ABL;G{P>vd(K=7bwWgr-+y68^$FB#rl9wEC-lYSyg?&A3iF%KZ&X^TD)AC% z&j$=h_aAg$+yDVr@3L_)dCwB1-trQiUa{qpE|mD;&ak(lXS%xk^R{E4=#HbiPSBo} zxiB=Z!v`#vPVYAEeCS$&-pRA%dl@iFUcQ0syn1f)ONDU+BRWFXN>|A7yP9;5np$!0 z5~1IhodY#o;Bo+jXfVNI;5&3yy3lJYzSF3wgTBIf_AEqh!p}?KN+;=UOJWoH3_P%- zciAN~j0+!;zm4*&EbYl0(7MT>rtk?RplbTk+Ys8*$HP*yD<eVSoSk)IurzPEt&s6k z_1;Q6n~7EBo3K~Us7`~w;JyK(14>YoSK~X_?%^nXL5}Bv_#;1G_kdnr_;q|v8N^nF zsk;&B%R@6>dNnTZ@T&&-S_Z{UYrSWRCQAeX7<c!kHg=YHg^ma^#9J8S)1Ww^-r<!! zx+jynNYO&d`gba)KNN_#4sg?iH56yq7kmPfOUn<GMlM3>UB_<5TfmM@CNx+eNdQzV z96w8|#E5I-*t>>feBuV&qAJ|H*MN=?fCqZoGtRK1FjiAq64?Ar)P~-Lv5Lix^t{|S z>(%4DQBX#J5jfYCC^*}g!tFXS7ibr1|5(TEMW%&Nk|)3Yx~~TRC}%Lvf}O4pMB^s^ zreA{CUlA~MOo2i!L+9_42w}&3n=`+g7izjOJc?RWt&o&gWVSyRNDphWLl_!dz#xhk z-2hW0L{qLn0uFclc+D-f>^kh-bGRiS>-Zlo-HNlU-SK5--<@*XRwVu8Es=5G4x^Rw z-=Zj`yF6LwvD@;ZyNz)H5*j^JQ&nDUi{qt%Aj_`$=UFC5#_?<R_xzG#@2Ox~b-J17 zJt7G@*gGdzG{Sy(ywz{gtBR%6>sJrRV*w<<7qT`zrwYDE{{4%n)K3JKaElvY9-Nx> zj0}iI6X<i@eKt~Uv!HJ4xB;!y7Pv>d`1!J19M(E(#fBF0WKs-Zdj0krYEtAFR{56Z z9)BzL%RCVU_V9r(SP;zWzMJ)$F1j!*h%7rgCL6PzF+nFgs6>I5a*e5DuE&!nXQ<oj zP03oAUpFK#ea&1xz4%cI{ZE&+uA=(X(R{~9&Nb7$)ehkohttA#g(S-%CP_?5EOCuN z2whMNx)Y2Pn{ddUGmcBr8oJ{ho*L?wfC~UhEm!dteRrKvQDZ+_UUFJ;I8(=6I`YW_ znIGxOoy{9g?ZK;VY43^Ko7rX1s+F^m8E5~78DpbA_^s$Z9R%Z(FcxBAA#;KX9tnDU zs_8>x6kp+lU;MvnGC)oXQC}esaIOs>>saoM86knZXQ#Z;VslT)4`Wdo6V><9%96OP z!T)+?vh(cUrpW+`5@;fjb_@e;MHdmpMB}$ExDGVJq;?RvTGh+u*b{@KapA-@9boZp z9Nm3EBiDVpZbRg&2~@+Vq^wA=T5c_JbVn0=7W*u<Mffk*vjIH_q)h>h06F_fmNj-f zK?W#iZJOW7UMrYuiaO5iK0DSW+6_f?-@l5OeSlv$0Wky?tdD=m<7;b2iWlTv^QNWR zZArc(zry2Xek}2ZU8TjbV28as{u6WiKu4K2RIm(4lBiTG^3SeZxJ_&VgvQc-57*fN zFp(V#j&#D&?0+nqO{er1P@ff1FnI)}SGhevmxYBr2Q46Y(AK%wal>vT;#!fbLi>&G z)<nb*G^(X`5FNj@38%^#1kn>Llnx0}*pnQVn2EWY)3W3wmdh)z#5FlXW|Bk)Vb>8- z<v-MLioGYIMb=M%x&SITWbL{CJsU{}+(Cbc2h%u2?fW`T=uK1Ttx0{RnLe_I{Jv&4 zqE(^Gk43*a;7>#HuQcFN!u{rz_3wGRhhu!U6TQt<*l|}oaEkry%%1>Dp$R34!qM3R zi-Syy@=*hga18}I$?OwXk<11kAE#ogpFhl$FMjIZ?RTxYKKl7(ehR7VF9`82K4PWQ z(~E9t$pu8W>@GCdL=rZm0NW3Wpu^jBg3%H^N%H8gdV+bSWlL6;HG+4wV^bhi_Tk6t zoqUK5On>*u%(s|A7owaEjqAYL3sZw<f^AQ8RQJgM2cBXa`4@%L1cY78Q(PV#JtBO^ zp4%#Nx68dmTe_b#`Nukt1mg`<gn)@>Cou5@)Q%E=NVsZF(GoF$Vm~nKRCfmM>31!> zOjj7uW@qi^etkpW4@nx}iMS5b5j`;D6y}d0VrUmx$H3wAqs+i%&>r8R+t`s!3<@^D z=v5gwJLnI__D1U{UmrY=*tFmbGd?m&DpfDqlFJT7yd9=#bYoCDWaE4-DK7<>BkMvu z6mcz_>s>C>z#3nWjF@3BuuQIw21s9c-Qh<qZtsG2zvuQy1B!oz#e^?B3<$r9trd*% z$p@EDb3X-pO-&Cy*=RNNyuNjA$Cp-ZX9kOB`INi9E$+;yXA{gg6G=W^Ej>xc`-9d_ z2p3}PO$07nX|J^m&Nwdy-Rq-NKPXU-sC`eUEnGr&ssPZc1TYJ`csbhZhGy}CYi6)| z-;(Q_NszRIww<tm@j+v9SW_RK#<NS1@H}f!Avq(!5q)uMb{A!Cqgj`&8k9=cN3`qU zxwP#cd<sY*T+L;?F7le?OeUY&3AZqce$!^-M4M92mH?NW!%X7^xeb=Kvf8q^2If)m zcyjb}YFqO=+PrmOxR2VvE)k=1Y|eiHKM%boK>`#FkQQWs)sCePP@wq~?}KSYI2KuN z`=@X=i-yW}HkMH^XvAD<1I%=OpZ8e{A&Kns_#D+~ghZLExgg;b%*>wg=736^?PF0y zor#aB$r8Qn9}+f*aw8TL0pYK>R_=>G8p$~?o+G=x_S<u=Ka}T_%Se&4xo37#=bgR6 z7Mg8()s3UdW1D9k(LFuuhXCcki&2L^SS0c7Zz^nuUc%x%oZ$OTEMT*D&=^#2n;nv> z^jUF*=^j1?$92${V5Rd}EPw0Qwu%2Q>uYJe$?~m96!XdGI{a+=glV44>@GwC?V)Kp zJyF!uoZ|DS@RsURrU%CY!0?}@4Tl8Gq@a$LXq?Th3Za!P9jR>I#M$wSD}Eqagdaw9 zoL)XUjCWIiiya+RBj(Ve_^Dl;SEcvu(9nvq=+q|sKE9N@t=JXClK_z|;j*@p5^C<K z)#yu~AE`};?cGjf2P|$_+$TfxKxBcr@b*yH5Fn}rMFsFsRr}3<Xc}k07xcMgwU5@l zuezJr5-lhaK7N|4ExUOGOpi0{=e~*Uip~mS!S<aU?P_^*K+8$-@pK=$sc@m94{&sY ztf_$=1Hq0>A0KsWqU`7t80P~$HFs>(0@Zqvc}(BM8WSjMN}3~XT5lWjANmYeXaA~n z1~m~Sx(Z7I=Y*PSn<W9qx=~jCqn}^tIDZX&Q-9S0y#~?8&{%+{p=igzl*h>yTZ9}% zi!5h!!l)uiUj(OrMR3X&o*TI;n-cwAOjc5HpQFu+MQ;vLK|>ZhD|?#{&GFDDExG<< zOjY{rXOa&ns@X+1#$#cO5U3l*WI{|PhmOirCRzr0{6dVB?tpyY3k-tn?uAE4nz>;E zd(CmW-&(2^Df^I)cH!d$@`IGG|9G+xMO-r3yCWT2re)tZ-sjK0zb8v6Xxhg@5x{@B zk9r;PMu#UUz<eO9a&82jYrhM4N|)r5m9KqG{~hx2X#6aHvZFg{@d}P9CGG%WwQ}+F z8lWVyoKMgyXkm><iOt8upB`_&1Iq$Ne48p)rue&Xf*W)BY0VlHQHvT!&lG0!{*d%) z699cZY)lPk9%k?0iSDMC>5kPjhN+tACcR7Rs~?KGmT8$sSL{CxjthJ{5CFKl+GDmP zl$0x6`OPv#JFX>Y1q|}vq3>V2PvpEoNYcgzJW2QrqV)pUp}x+tR(9z9gTyrEw;P~4 zjt|Dm2Rr>iWch(A%$rmvd+yvq88^Kn*p(88Kv!(7`U6L;6|mhADq?}ZAv%?6wt`cp zGPV=nmYa#6&yWZI<0U<U(;S46q3}M2Ff|-aF0vx?P`2t8+sni7L(;=DOsD_<JrfV} zakPBz+}_O(5TT-sG^X&wP<34(af<=&+80#jdKbUT5mMN5Eo@6d=`=yv-lcSI+)k|M z4cUBKUrt1rCD=_pP$)i3j)oi~h6pYR$5dLdx|byFq9!P_)%b2?NZn#njTrAV1K2C? zuuB)$R3w4SkoBK_7oc$E*J;t0?b%)Bnwiz?9}t`~T-qBb#rLI-T<^)oF<h$v!C{R% zhP?*LZQZ*>_E}kQSMtzL<wTBYtu#*PN+L)EMr5Z2on1%#t4&~QiB`5;Nqsq22%LAx zOK?@g@VZsUtHDID_LC1}X-W>Mtn_II)^z{$n`I02E-;UOAu6_XP5OCo-*oBNUBk4h zvzk4Fzu=rg=;Cy=@E=|P?rLr!dm1|ifh(=8a%(pmV*<ta-;TSUW)I?`>mkZ$D;rZ& znlDp(4sC}49!qsP|M(S25X2?8p%WalAnfgKd_NDi6%q7@<dN4uX+AI(tT5RF;vxnm zGdO;!=gbqn?4j8!2WBz!YHfSpn&nY7%Ks%P1jvg%yP?WzcrfG1jGx)%aw~sYjQBX8 zj(8|NE0dOPd_~_P;L~P;m^DNa`3d@sa=|ulc4a&mJR5c<;!INxDCVH~H7fu;CQ0qH zNpf~f+(DDoR--v%Gm7-%x~#y;5&SV+4!56+2?h1P#KXU|zkpR*g~pt#V7{*F-JWAY zJ(y@)spJ+NogG+Wi0KOey7!|3{*W;87vG_AI)VRo5E2?C-}bf=BHXb_03AIZB$89@ z5~*FyYvAZkjbDAt9`@xb<u3&r#X5$0Q?g{2^sR4W=n}JY0sqx;YUi*UfFhtnF*mL1 zT5P6t{O1nZTwR|@h$JA*PLUl6_34*4w~4Ibb1$E?=W!oIR0I=ckFKUTocU+CIEk%| z?R;Svm}R*`ot~=l>pJ<Z8hslnf&#v}G*Dg(G35)?zVlXe<r{Qe1mr^Pd@{&p)yfEv z?De_lwb+=rJK`_W@1?KrPn~*aK9_b|+^pePF)qsLrjxKw?y=G~Sf31X&yO8Cr7s?R zx_QIzx6!QP$^}?`q8gC84ov2WQGGi`?&-$G?O`(6_^ENy(Ioe+7cO>$9^m$)Fz}=> zo|Mn&7X>rE=S4HO;ui`MOK$W@etyNu^R08B7UEN5iTCMgIjc_opi=JR`KkCLPuP=M z&d|HCo;C?a$RngLoD%P4P=^iO&#!P}r75{na{sxC*(=H)!S>(5Qa~yYF}MU6U&9I1 z{}^9O^uSnly6)iQV^d<4lmpPnrpEfiDo+9NryFgfAA~#o!>90WQ*L7_5-zAPI7WhG z>ujt_J~(usTv~^^P-JPdJ`L7q5<?K-iTMZo<N`WfPr)03=zw(GU=n&T<`ziagT-s= zbWZI~vR18jWv^2du$oSMQzbG@B5h)u%w#<H+%}I!E_4evc99ftQD}Qn;%sDKz)4hX zodO~lnS#k_<IvB=P`-#6icG8L&)QZnS`@~g+tvX1yeYt~W1QtyWssL(XCus!!a(DS zakw_+@<-g3^$vQx8Aj&<MHRBg%-Nl59c4XV`bSn;Q<bV+yeNnX${f2EXLvr+xEf~s zYw&fKtUCID+(khZFWR4_Klk}&vP0ug8u@}O0>=3iUbdy+&V3zsCBk}JE^{42oOjpa z_B9-bD}~IqO;|$vb5+juv9jMM#fY;|H|5SFxustVpFRizM6Bh9QkKT>J+9@u%(Aze zxa78;3N*JiyxI(<{qC~Jf=dK368W6ZvSQrDqr>wBd$r3f2Wxfjl&?iT+?$@Qo23NQ zu4kn{`K5jZ$SnLYiXH2z*Fu6GOOuhj?U4(f1w=Og$;n*vKi@h0x+xLH)qypqeRti? z#1^9j5viJ7Q6rhcR8Ibn;lN6!7}IK)GQPnZZNq7ae>K~CdbU8w#Ev^%$=*2dqCp(* zDuTHx@H`m#evTmtC2hBYz^9A17C6+eXCH^Q0OHC0Jo<?jfTY-?)N;E8)mZ1`x3IIH z@q6Fx1;Xc<4NoAW0a7oLAXSP_(4O`x?!Mwl#@H`V>LW^e`dYc)JC73A(pO0~do>5U zv1b=*z8>@|pyg{u>>XHmb*LLgsQ<;pL8e!9$qWtR!$)h<HJZ|oA>bywQ6_dEReM<O z<?0#XO_QilKPnQX7kON*F@3wWp*|ZU*~|Y*!_*1Kv|^8$O@R1N#Gntti_=loDod5# zUKf`L+e^KmNOpi4b!)aMg`v8re)Lw>lL@=)=EKC1*ChN{xK{yU>Ll)*5h5~;Bramm z*;<(kVuiFAyA@l~9m^_EBbk0*nF<fSPV%05<CaA?U6=6K3Y4qAq(6VVUAZXOqklS~ zOs#elW6DHzLE5rmU8f!d?{h}SV0a?@xYV@Trgv|?Ibrxdr~JJ+WAuuE$fvYZtucFi zLO(YL9*UDU^kN#M$;+wyF|S-bK1Utb#n0EyRq^uWXQHgrazJb~LAw&ac%TLp9wS}g zn2@VdLC-rLDeaOHe~hnKH&}WlK+MXVyTq{TX#f^%Om)^Mwdiz$bPbhw>`r>T8ovfK zM1uO-fi)Q}9#wp3nH%=UZ`=L7n)q_3L=_5p*g-H7L=dOr0fr!CH&zN5f`avWE}s4} z$1<msZM%+y_;6^8)D0V0wGu?j;Wz8CDbWZp&K{^cU{jq>%oCAgwzc1K;-j1YknDgp z|I<vM3Vs8^jP=Y%cN$D-VfQl}%f>te{7?DB?NZ@GOX2;&QU6AsG!q!88p&EIV0!gi zlGneXsbBT-0x-W%NWgVLEFW*pR)9Up@+cjYqT&18p+-O1TviZYEtrJJe#dgakW<E& z&bqo^wswuKZ=gHF3}Ebab`~-J(z_$Yr~R@=`#m+w^ZbXPH}Q4PQ08BpF88`Is8elF zM36YFPEQ*vYwFa_@X>E)GH1mqi1q34@|=Dzbvg6P%%RIDHJdkAzZl{(ojtr<Z6x1Z zYmFN52w>3l5_y*{&qiHZCM(NChOGUm<0XJA>_kMHnkMVV*RO`4--pR6GZ~!fHFsry zvv{AW*_bmP2}6fgwGrOWv<nyHpUZ$;SX2x`Ki&EwKGEUn)1s0gtC6P3jft&9?7LGt zoMorSm)n+_|LB}Tsn#`34`A#l6<2vLLj{>U0mEDO>gV;1(a1@G=*1iKgY48-o=K7v z93rpHJGFGg-3lLI<8%P1fg<<O@$2OAfk>?)RtN7?&HSqsE(+pVg@rY5OXf@~4||Yg zvGTLdOkwfyT72oIt7%L{iRp<CzOFvU6qhk0Z*-<_*+2BY<Hk6g@*z!!iR|q19#91~ zI!?jZP;Yh#HN`LWDR?yJdoliweOt3!o%o{0h20}Bt@NR7$^4*)3&lLA);;}?I51Ey zt9EpBbMT}ox=r7jQIh3_YXeL}F;x@l(vQsS9bU4rUVpgxuw?!VR}<o;MZqAoD?Po& z<ubs9O?>ZDhkEk5KnC-pR8i{JLtoxqJS0geHZ6!BomK)By59YbicTwC7`ynrm##q= zs>JqlAw+LTRe68vDWE1%eqAm?DQ26#FPfFa9+;7NpJGkTo;UQRNU#XS-t+i%w^)pN zwnu>`Y3AUQ3*gNnh0rR6q?sdqk%gZH0^bx`pX?D@c)nFns54PBV;?v;-%P$M`hmwT zyfX#I=_d>LheeaTxqmf{$xi*zv$8@GT9O-py3x#HJ2-SE2^i;Eq-3N^w0<U1@PpJ0 zH4->oV=ouHCgB1;C0r(6{k+|@zfYStSv`Z4de8AbSx9_dWm6Sh5YzmlBp(JP?OQ62 znj)rjcKSZVJ>Y;#D_nxZs=ZcSo8?++om8wwMfo;1KgVZ&{f6q95v!`kw6r{BzLzQj z|4x+`A1%xmwH8?T$i*TgRnn~Xs$Ti$3lZ1oNfgIDW)9Oy;dkjw8YIKR<&_`1v7l%_ z8i-p!yVyrmt%I%aR@T=<36+_Ne>Y<O-*`9ryXn6X_#1)05%?Q{zY+Kwfxi*>8-c$O z_#1)05%?Q{zY+Kwf&cRnVEQvh<>=|)<NM0d)`Rz-mtJ<Ryi{_$lDz+Vp`=75q2c20 z>-dUSLc`tG*YS~~y_bU{mBbTAPbXhzUfH`;Dk@a}<=?3SKZ>qO%Qt*)kdc#?Y_64* zGnOP#HPm5LR`X%>G4$cT#$T)TN<1qpGW?B>3YeFLgd~ZI^MAH^`Tu_NYF_SMuMA(> z+B@<}JaY7Rv3JybWgA2#Vd!V)8}t%*Q`^JV3D_eoM;9k&UtVcxNy-1V&yUoM{_7qa z{p-V~dUmdk_P$iWSN(G!&um|L`0!HwbC~*mw(c&zLA>`Q|2ZTHu!{q5d{XlNe4DC^ zug^2bS884!FTFe+J$-ra{YL<#@7=q9|Neg$gg-z2%#)~*TqV15^$OY5t5>d)lV7Ev zx=uw!NlA5smX7*5%MDgmmK)5>>|BC8>>T`@%*?!Zc=>M$-4?mc#v>*vCM+o^d|UX> zXOe3a6z{JVUAjb1@~4l4hlJ$Pl}rD6ko^CTOP5K3jgV7NQe6W+&~%;T@+DHz%VeZi zu8@%dpAH57PC`b1h2f^u!>f$?w&Z-?H>AVU@+tUL>%K4<Okf4>+P!*1NyW^<%Em5u zOGx;(h>Wb9{Jr}MYLC=4G_|xJ8yXp#fKAQJ?HwFnI61qx`uO_!2LuKMM?^+N$Hd0P zr@wudk(u@WLv}%7QE^FWS$Rc$Lt|5OOKV$uPj6rUz~IpE*U72r8RYDbITRYRvbwgu zvAMO4JN$KYd~%Baef9@MLUHL52?>bgtmNOh^8ZgO<lpDt2>gw}-w6DTz~2b`jlkas z{Efih2>gw}|9cS-QH(2WX-Ri^FQ8xUZ~x;`x?5TbCgzPm+qqJh&?E}7^87uch4pP5 za}L^yArx#18>)}th&AYc|MAK*h4c`UfJlTrdF-*Snx29Nym--c@J79QSx;Jex+fLb zP5zX<J^MdW4bh~@uA5r{L|K&^>Ej0VNcFb%!<qu)tDtAbN&ZG)E;!`DBmsm;5>lP< z@MEp<GwW|EB5FxJ{;hx7u)WgcFPnkkp?BeCZ;aotp7yBX&3wq9tr$f;*yIYxDl#hY z37V4tctT7^zqz@i8!C>x%|mlHSeT&hIxP>DL|N!~`|+uhX*r~8-ZOqCt*w#)L&F%H ziNaH3r!mJA5__cYq*doG#XJLSxc_69ffu4Y{VIG@5YYm?iXFz^%+FT5sZ1LfUssSD z=(&EwW+gtyahI35Y-r6Kb&RlL0InjdfwY0{m&bcAh$~=2b$|uO!)Srm)5<dJs_$xT zh+@~yLrN0O!-sj(Ob`+^=7CwgC+q{+mUD}b1QSNBsvFPZrvaHuxs8QOc4+?|VfadM zqsN{4w$G3B({+uo8?iDlhOH&9?_SH@4U2|jQS}`$`X+ul19kNwkqvDfqJK#4RKH^Z zJ<uZh#Q^Aqfp)#*#)Mo=RhG+(*Rq<RD$0pms&5Ag6kxr7toL5!fpEy&Wh*6{9sl+S zQwLE?iyi?Zfo0Mm*{S)_7G~TN*ei9~yPF!WkA(|bFYE`;tdlSo620vi&G|I@r8naz z4Jo7^Yux=sdaz~nKhb^tFMpSR2}77*HEs%F5hXfhJMu5*O#735J^o=l{JBz2{-uq% znxB)1u7@-wUk0u5bmAMDfA(3|pCal#`oXa5AS_;moQ3-#P9<vt>ho>mu=>KsYN}C; zYQ=O$+=NSof-v~*XwaRiA6uI2fl#l~DWTyvoANZ6@w(x9{f?bhg2$DYgG#d&|HR?H zJiY4(52rMftCjfu9LvpJPrVV}DKYw-vH5W~BY5`Ncgt!({XqYMOgF`LwqItQTiK^+ zAsx4nSTqge&;rZ-nx2N^F(<w6zQcZ8FZMY^S?ju7EU4P<F})brzqX_0S+%BJUGh-C zApdK7TI$2{&4PNrC3@#G(z%kRvU$^-;YV^9r}=fzr)pRG_5$Wtm&4Qb9*FYya^L<= zFa&G@xu^G<C~TqP8d3F3oirZ*b*KMh@Bf!CY*YdbiF$VjpeK|mKx4W2RJW^`r`9Sq z^J6o6gc^5?mtt$osbMNDy`KL@afn3Ju_F?R+1+f<%aTr`XOC*{=MPVpioQ=O^s8{d znm?u|n`QtW;20X<;$FPY>|8bU+M$lRH$1*@*^AvGaOwg3H-H&H`F#1kIojS(j*?86 z*87bj<^x)f(;_hbm+>1h34?koX_GhGA$8Z21fNmre%(tarRuN6mtL)A>R*b6$YR8N z9!GtkIWD5V^NML_El$7$`q|_lhTvC>f7>(ZmdBmEV-PQGpyO<8;_E%bW?4oS>H>&S zzvZrgC{?;YnJ?+O*WjvX<I_8Yo?UVeYwRM!E#|D;KYlNBZgFmQl=IfjkL#yvV*TZZ zq;7J->{~Tf`ERrt<UeF+)0fCgk$xH`m0dqsVu#$nyWNZ#v0%^4z2B1k#hoxb@+Me> znRTVcP4yQhFUkcSN^Tkmcg(UhcB4_Dh|Idn_=6Yp^!Qc=j{6(*h6O&re9}*s9NeBb z?8f}5Znu@ROf%^R<DNP9E!@Xo@eYqd3+MJOc-i=+Hu@i$Y?Q1XZ7<TMX<g~AKpspX zj4NG(Rn2X-+P~#A{+zSXsN{>72se4I`SfDDrV=Nr*Md_basob^U>l^zJJ~)3h)eSl z=-0%mqcLG;>_|+*1AJ1IyuP8^Ik`ss!aKj{zBCIT+67t99B~C!bu)Q&qkSzmQ#adJ z0hMCr=t-?PsmxoMI*cWQWcX8s)2aj1RUAL=wCCEeeXhRW?ORe+j;rU$4GwU5O~uX% zV1?k;tPs}nDe$dUGveJtnv;C{)t>RKbRQkuhzYhNr@*`=g`gZ-?n0^1u1jK2E>25+ z*6;b@q^4y6;D0Kym00}TeiOvK?$`u8Qbsc|CY!OHV@_Kt3L$X%Ip_A$XumP;?PG_K zAaNvf+==))M`2p6H>yKHbTo|5wTr0*Hy(+`fnyGwrUekDGC6w{c4i;mavpG<9FrFt z;?HrH&%Xp~z^-O^1WHKMpd+mWZl)Q1tiK%Gc5Slb(X9OpL85HI8XsV$MdIu*weOMj zEmw;q>Or3*@7Wn(Jv5?Lhu2&7fEpuL*o~9=SF<C`KPWBL^}Vd?Ps<$}^jvSciT^|$ z>^HU%iO_K>ab;8^V@dD73Q%{A#L0?N8G6g$8a0fAFh<{TGFN8i_HQ35rI&{ITJk7X zoEI*nEuSA%!>;3V0SC-1<UwPu&Mr>lMQfbWTLFL?1Q{Y<)zzN{8sN_KB5ZNDTDaCf zINh_k#qoX+cGEWFS**p|Ei-^sz{ERw^UbfmE>;|OT+!&)g0pSbynCm<(iE#N^!iN3 zQ<VH{0gQoo8`LE<peVJt#y!%rjP-TVn{6${7=BqdYn(efC~`11N3XkMs=o!bdM-WK zb+6g$r&{~TQB_+Q|5hB9$ivoaTmI9z{?QBj8{WUuJ_#^8iYqI=Xt+a^!UvyNQ7J3T z8@01H*7n>=o<WpxTPFy_tkLY=wa&6M>A=wrKE<(OPjXAQ&DY!c8HQa-3wUno1#!(8 z2cJ#i?J?Xr)%bWQ-GbS+f=c&|Fs~ne6dC3KmZU4O>T55qLIK*(p?JWqhc+dE;J2DC zQ#wXJdQFzNvaztfobukc2DM^T+dN(EyS2ZZe70xxsm1Bi8kKavCIqaAp<^G+$0z7b zI8MlhROUWtZ3=OWEGjk(S#ErtNT+Ys0=sckDZvbA<_{jv8X8B_HOAUC{2DF)=t!m> zcOgP|jbJ``+zrIIM>eR)E%;U?9~*CiQS;%GuZqdK!OD>HbA7jTO^L|Hwc2TR*5i(# z#fNnJrM#Scd3)oJkN1T7B&}Ug$#9>7?QHNI|1G_i`Knh6!eWQ$<Ol0*isOmQ&FpvB z*Nf3!jAqW#yZwakYK`QZqi+n*p*Ra`C45>DUP84Q*>p`;^+5aMC!I>c<VU~TtZV2% zk0){P1Tg}C{&1D`)>+a_qIMU!$;h7Jtk%h9vTZ50y}tzjd+wk*Q@!0n3x<_!2UtZl zw8l4#R9JW7(BpIGz3m?}vjXD0O39_n2RpyrMde_52D7sgAQGirb)~Ml0WUoTL;jF7 zL^WYdE-{54t(3YR2aA4Fk%IP30B0*jtxX@x*DO+EuI<I{(kD_}4f(PUw1*Do(@!LM zE9!JNSG5<kaByaS2+w!x1vyCkzOMA}4~gx0$^{dRAJB<^V|hAhb&(T`?5=UiOjk0n zG1Fwp-0gg1y9$_UzphDw*cZ`}eZh2mKuu|8&WIC+v#85@d9U9c=Z{~5VftQfR@PVs z>h$591<9fb^Zl>ipRY^Ze%Xbu0jLEtcaE#Y=k+J|88Bbh$kHC?vgrk9Z?AJGn$>u& zX?dX41kx34jUNmPoLp|DQN+9po@TJdyY&DrwZ27m1t*KFh1%ZJ0|IGg-6CkHv&3~& zV8e;uTl3oZbq=?LvgW~;d6p6G{S>zIsct1RVUk;mtdkysK!<FC;8bC}?AvEnl7pAA zSAF<z!&SZLU2dbpF)WBAUmthzu1UR-HTu-0v>GO&lxc6Fdd&jfr_Y4Qk>zY<yti_Q z9lZ3F@>=9+zdtZC<VB&osgs~aUFuU@#s%r1k7KQls+XqICfh=FFgaW1+A~cyWcZrd z$0*jHGA3)O-1~1lMt+0EaNR^5y)S@e^hGQ2<!m9oa-g}36WKU+`)JJYS?6>BE5k6q zPt<u|v>z|k)~D1F2E_r~U132UHp9)AT4UZ&`YwSj7+q9V_CBma+wIk&xh1NfW3c<Y zRGb17<!Q5XV2>`H*_TOrL@`m6In4^${O)uI8r1S>oZ3xXA~sk7&p~7uGf*58(sD54 zcbk58C`w{fQ7Gq=C(3?`sdquS2iG*9L5y4N{L49WpJHRDk6h>-#0#-CG5spCQwT-0 z6h@5(Sy=enO)Bp*e>mGFp?>w1f>BI=^TwCvJb}ikgM&MsVkTJ4%Y*AxPjY&%?-!PK zzHnJ$kQviM9}sSt`$d=f6h)=YG2H7bOUtC~V<9DVIWVn-cw)z9qB8<Y=Uq?JmWDZP z+8Z%H5IN)@fB*P+o_#EWZjy*?t_#fm^<cu+18hCL`-Y>bmY%HTr!*-dIYMQo0q7RI zF&_xiZtY6`cKY;Owl8z4H!OiOtvz&iISt^gWls@rTkLpv3q>j2hwq>uwDxX0S{N<M z<bu0*Vr{TDED0u)dk`jxxV1^y#;H%ad;4kmiMk$q_f!Q`2|mZgQ(bqQ*#T!w7nCo1 z?$C_soqz;a^?E7QbLtq9W^(m0v*|E_IZcdCHR&T@IuT;hK(a7cS`{MpYi?0fALcrZ zl}~EyW<@Qk<cWLKR5?mon=K5k>3Xg-ly7~Xy$567^|J432hxF<<2@gpx&ZBiUAx%6 z$H#}KL&ZQ>t$7O%gRe1`9p5z|x}d54!)kGc5%R$AXU#~W33Dk9_N4LqGEz)Q7SnMd ztrhltR_@H3eju;-eYn+9Btoqe5ASU@M<(4&AJ~)EFnylLK*3)}MsNOVD0N^`>kIv* z7j`d6xU}I)|C`wzSPkvPwiPCVoz5PQL7Z={{7mw!U~o(e&Ntz`dX~K^M!biA5h{I# zxu)xCk#IYY(mj0~vRt+nYw*AZ0!-@hupXAP({KrhHhN6eqEo|^HX(2*ia{Gv-zF+# z2QE_<Z3jSozOXAUwF}#OcRTwE7E!20khEJI-6QpVH})xvaREL{Z$fsD#q_(EEN8;4 zZmm(DmQzxVUD8+g0FVYfM0=8OA2T9G3a*`*+&(s)*QTlca0_)Gb-jU@@xcuj^91PT zsULhe<10b$JZ00J<)TvTv^sb<m^3>d2geAWM#*|z+cLLG{^Za-BZhP-crBTEeHo#@ zQQ1NYP#LYFPLryS0HTXFhDJ>bS)H$KK<^@0d#=;aUa<Gz=W6YNnGhzbIJvEOEAQra z*)fXkR}}6WUCI2MDHlEVY0Y`LZZLc$j^`P6BU$NozKcJ5j@Zol&ReEhdmo0BV{eDU zplWz*@JWIXcHQEDHPFT^=V2;&dvm&snQiau;%P044K5mA6gRxUERggmQfxFB8uL~! zeqC(EuJ=+R6Zs}Zjj@X8pm-uc6s5#xuRNfz+1v8EeuZQ>Rl|YSaEWPRd?iU3&x?mY zu}A`InP&TkJm|=jC2P38+bQ`<VOBzDAXHqB_Di)(7$?r8)SfR(+I*|1>NzK8-AyRJ zRaQ8{tQbGrn~7SC<L@l$s}ZoON~EPq+p#zTkEa8Wlr^Ab_BmjFQjnx`ZoNat6YkO2 z-_SWHo_{GMMdFmq_FK;)g6jBy+RffN9pm)9$wS1H<N+$9z3*G85S4KbuYGn4#^bp& zyWqEC!K8&%lOcz6MRk)@VK#xQ{P(K7V)7L0aQo?g%Iv-R33@;EU$mJ{E0Vq;q19FF zwU&#qo;}v(6XP*yY@MR2p86RJX`Rb@Rb!wr%s*K#7IxcwdkUcX_lTh{0{WQ!(^-oV zb;<OUw$nG$)tB%l-BA!Aaj8`6n3iFMi@#{}Vd_uN;A@S42xKm==~kX#B~lufI5tty zh54u@kNVaSGu~V#0cl~f@L%*x$hTj@RHhK%>K$|S>dZo?GUwg60Ir|TtzsWZjOUeU z{JuTTzo~OwfwlyJl1R+sR!D}I=s8wBtk|k57fhLh%oW*x=j$7XO;)$`dtBuq-3k-z zh$pfh-=~)IS9!WqUPNnXH$W%E2Xn!ROh9x>H?vO?s+{Gslhxna6ur1Ve;!`wf2oa= zeHw5+w8QR~mTdKE&-huXUN{6kpIXtlX+PigzN3tEgUPU``})yENZ)K1S6;9Fq~E+& z-?&p)EZcXW)%k`$^?k0bJU)C%39x-`uBj?NE+6Yd!ffMIp~)c_srkZKA3yuvdb?qJ zsY(9Lt#*LMf6I7sBW0-b@RTQgd6jh`1^_I869eC3k}k3aJmh<k?HUcTk#at|-ek<L zM_vs^Ib4YuYE?Q%+U(s77OKa42V?a-Y1_!EZ=}Iw6_?8ntmIm7mD=CE_EwMxWlR!C zFZ1E`Y0sk->Pso-eezotP?m!uMbOm+`2=5!G4KOk<)LPjs%`Y-tL@;GG!t-t9w&CG zS6Q)->>{SO(w;1HB9`coGy!R(Qd|y?FZRMQKZF*4DaY&dWxKO~-174B@!=FC?S9B> zrmfcp4pk3=_FowG_=DT20+$|ib|&n_H_J;Eyhr+Ps^FD7lBdT}jDuNu<XGjtb|V&@ z(3g)S7X*TmuPP58f3E3%f@7VLaXSZ0U_58Urq@yX)09FSK9SD`1B$%?%SbUN?147U zq`S;QJf_q}=cMk%LHF)U4O-IcdP;8>8(A=;PFe}(DhxQ0&AaY%VRkVbrpx#B<OB5} z;Nn>t90%s<2Q1!vxMu6DD6>Uut$3_T9|6n(+g~k5;7!(uT_-B+q1G!}(+`r^wLKoj zd`r6eYVb5Cm>N4!kHN<j!o$1KcV_qzlfKdF>2jUwbbPf}9#`CTx{s-Yhl$?GEg7uX zQDMZX<P@k-c4kw=Ch2LUF{^Has5T*nD^`lVU5wlUk_)a1pv(rg-OKmr^HN5{HTjFR zAQqkw4i}7$t_tyR05ju7_VP}cYu_+JigsHe1o<Kt$NyxS$PHX~j-{rq0Sa1XTxtA? zkK@>$?>>AfDVKMgKt6Cly<qAB4i0UG2XPV7`p+w$iX{x!294*&jkm!KYUKNfpebLm zu%!nrP2DrcTPwdzdU_=H<1S9`80&`)mmNvOq5zY#xWO1%T}6ZMO#>;T@$>qRF8duP zP0U&39~cYZ3mtiqy3vdZS355n4aZEIA23awqZ3>CIxIR32ELwr{kFf)>IpYXM+v=T zw<{D7J_sN4A&TNYTC+_z?uh2{7<YuK+IqR4R8oRd-^_=(+(^8lTq$pa&oACmxs%YF zotaUiRz61A8pYql!u^VRwJh#qUQCn0ccS=KK$k=_cCon74RtF&09Mas@Lg40<>PGe z|E}kX>DNXSX!Vfb1l&>I18v{N)y~9en}C044~dfCHY0ie32O^ouU82I422q-3v60n zu6Ft34KeiCM#uwfW@T2&!(XzZTtC_JZDB;AU$T>d4Vqop(%mWeLn(l}Fud=zy8r9x z@+cIC5v|9w-FQj3iOuejjP8*qm^u(k5Wki`IIBoNtQ(s#qgGY#2QRBmI-Mb7cEkUW z2n0)<5n;dM6HWkfVA>RB=^_zG3pR({e!BHSoyLC)1Eg5c?)^U`O+r<A-2G*0=lXb! zsRt2ynk^H#)x2$A9~31deiZa2N&%B1f)xfvzK!~r$I)a%w{#7DWLD~w7BFBI1{lsY zRF5oiF4{merj_oZX=uNl8ctPDz`YJ?sOft+(pW_j$9|kJ^$}DQ(k?0pCVoW?I#c<# zaL$&4$aw%3t9vfg)=`Vg16-zE<=IE0eGULzgS0Dvbrgbhp8$lP-I;wqbQf@LzU{(+ zE)s_SkmOrTL7nM-i-5>MyOO{povTyv1emO++n2y}U;G515b2X)KmL#$Y8Cz=seK1J zyEbcqEBt&0OO)B;+vshXm~+ck{?XYOq&Z~j4@#{G>E&UR-O*!n$z#T6q5Gzq6njht z&gS}3M~RED+z@3ZG^|mNkOHHC?%D!1KaDR>FDklMuPq;((>)|4g(SV|z5%(_bq@=m zkxo8ZG@<gfwT3jnU~(Q~xNyo~o)q58!`2q3^RT7!yP9Av(*6BC*7M@2*%a5)qvzXf z6e1cA;rA~-L4+X|0Mx6c#b6d0vDf@#+v?H^j;%&+s$U2b01VidopT5yNv_Xi-2v*Q zsHMzrp!4(1%Eh(~irlxGN##0f3;<1gRj`OAvmv#l2s;y9cYALD^fQEY!)s&Tju@VU zJB~5iR{~2qWoCKm#2S7&)J6kPtk>0;3gT;Ubzl}zcf;rpNu9OLg@EiA7wF*&IB-q} zL67Xg1rXLZqOb@eoyGffbqfm4t0b>KJIEtDP*|_I?+9Q%ry}-q;nGR>o;OE`a5{u4 zU|{21e&8T-%0h}odSRG40x6A4*>(w&i&$QYBU0mb9jf!Q&hI|sg^tL7qg(4ZtTDvw zos{HBq+minrpslat6wM!-n33vMLY$J0um=?Yw(_d2xFX%(X7}iqf55fyI{W@xX7<3 z%r5VtpOwOY&+@_!116zAx<I*#m@J+~aL=#pEdC?7H=O38tm^=X-Z|@Y_)~yYnFRW> zczs&7+D<O>8`-6TXO!>iP>kfsKGxber~%F&j=gJ&=$`Pk5`CP9q`cDF5mcJ=BrSte zgYmcun#^<Ps>1Mx1Ri=9AdrA7ApXEPcN+se!-7V^$`XWZr;D$^rXCr?V}O&-Jrj09 zk^_{8J9W;*p~KVwtpy0x){~~~MsPx$l0JqmLE)qgZR%_0(dZ1Erz;8{>j%$&R=s8V zQ94bv+$ATJ01*W!WY-94vwMxk=QKU$S~6{d_I!>xbe)<WJzcPdw&)WiM-JFbY+XHF z9x#M=ptlx0zxg_h2mhKo#-{BL$;30H#)neEL%g7UfLDnNvP%f-F0I@X6`Cb^bLT9C z`&jKH9H*O-ph5w7^i0s_Pf9eI7N)CQAE-!w6El?x6**IU*4&cyxUIQW{amzXqW$Ct zm@LeA1y)D+rHf5)FM5~oEc;%=#m}2W2jtS8veL;P5;6e1(f6i@?3E(_lh**5Y$uFW zotlS+Aj(zN$FI{YdL(rlE`L$B>(MwKK6`@HzayFR17?RCd29waSd`<d?qYdtc#f}v z&hCKI{y);*GpeaBS{FtU5dkUETcn8!h)PokL`9^DfYL)zks1RcEkGa&(uD{JD7=73 zuaVwCdXpj`y(Kj12_<YGiFd#E$Nla(-?-=8G42@r2qS^)z1G@u%{Av!DB8)!R4hfQ zl=DoiMVHjbU%D{{zw3n=sGWA(3rj<s5GD;f-`wId?P}gL1zdFON@i)Ood@+qaxqc5 zP2gvbJ9p(y!p#qm>sl7inZ`G4^<2Dp>T=TE?J%dUEUiRi%>Q}4?iXxx@#Mkm%ml>{ zF!Qi~d3b1KHS-yn@b;F{b3#QR3nEFD#0!%CqrXPV2{P{S*h^$pHJXSGK6nc13(SH} zw=mGPv(=fnV>Zm8Y^@N8#NBT1>!mdWDlUU^c<3e-Ko&p9swIzk<x;J2zu}JHFkk1| z{KgWN;#UE4&Kp(&JaRUfvYW~|wS#kbos9Nd6gSe@MMD>Vq=|<vYur8d`tdpdTGfvR zl~pHKQ^?YzP=dDh<rvr@!{A@Kl19gt`CYd<18S5zxVjWyW6u4hTl(b&hE4tg%$>sT z)PIWcH2^<8d|OP%?q;uUT`2$FlA81=qOEd=8MW79qdMMTv~Z=!D;j3umAt24gN$Re z-G;RPc4Mb#Vml$H(e7S$&y|u2Ejq`l$=Jii*l;bX{E?YIQH<{r=n<+|)j3ugJ$Ul- z)_lHV*vUilX>&9S$*Cg3?jrPQ50>Cv`yo;NsH6{n&>)XiBPOK?z2U2v*1CUJ)%<>q z_yO($H5K$RY())hJitDPv#9(c@MrzjqcZRY-qLTtljhEo<U+p!`GnagtB=?U|BNIA zwJfPyMR6Q8y;cK#OwW=2!JMmLAW}s5ReW_GA-xm`_a6<WwmjuFfimS&)Tn7_|LpZ~ zC65Y%e_lxbi`YUj*5(_K*^)hcK`21~Eq_Uv#gRr8=%B_w4m`hxIUs?<n91sCE3%S2 zy|5FxR7Ef-z2!(v6ov0!&iVguz%^{|G`|A<B$u)IsGI0GZg2zMbvz!OFPlG32e+(= zHZ{$YyYLR=A}shjyuGwdq?z;Er5}cp!IAl-GX47oSlbJtBOUdRV*6y6yxZ@;TpejX zUDYH82zE8yp|$bG0S@hJK5Kq)@WDH;aIQ}Z(I((N7!JT`TZ6mV)Lhu&B7Sn8#G)`i zB~8<EdygUC02^zWq9uz2+=s0ON$0Hlo^4?7BX!ezjK@ESG3E7CN4V;1_kPfSf=Mo7 zDXc}R-Ly`z0yF*H_eJZ9#Xrimo(6vNK-XV7$w54fiZ-Am)?ufVY1+Awn2jLJpHZA5 z&;}g}><Q#ykK=*M-nw&+wi=gv^v?F~pBwks!YVfWy&#Ty=D&EWhTgIbH@yL_Y&M@( zzdF_GV=>+I4OGF<K>np$$33AYH!p>w;Ivv$k~4Fu#EuLFgQ*3WDL)70o%YXd%>2Qn zOM>^>7e;H50;8zFFY0&9(&x2iGJiE_F(Qe3lV#76#qrTE@@NqslkG;tbu~eWX<41J zVpr1PrC^qjc-Q_d1yuP#j~gNF^8TdLp$+n9q!LQj6P1%I$5gsxO3UqNr)wY~PPCsS zE#4Lg%aKN?&Og*gyAHM3Fq!AnJaut6Jf3V?5$R|%=OFr*jwc`XviXP`YWA1Tj<t&x z6^RXM-nCMf!;JrKrv1jf!Lb71-AFN!zzP;6+8%8evkQp<9nCi@%wLUuGf=BA6O4o0 z`4V-p`X3^z8%2|-j757;L**oi{Sm`E!v_-8X>TTNX0koiMM;${z{fN$VrK+0Z{zz^ zK#qT5?a!N*?H#Dz%$oyR^iws~66;}L2S{bzJR3g*mv$KF`EdMQ<Uo0IL4O?EBt36! zw^dwtq`#T5^5ZX^dV(XkE_S`=&VoA)IMT<g9sUU@SFmO!g~`TDG|V4!eQK^aJf06r zC*No@YepEQ2Tfrs`@ub=JE#N=PFcM77;ICRkrpCsT1y0bLS!#uRTOJ?Wi73DWHso; zE$%U{PK;%DB@jy(WOPxnNgz4itv=!Y+2h7j?u5_0<t@|Ltb6Du-PY`qe#C&1r?n9= z;s(_3u%(ab$A9U9|I#_&kirblQ9Ert;D1=3;wtCkIi_bzKI<*g1px)Gcq1F!h)Eh1 zBWVAxQyc1BRVI}J2~qZOu)2()14>8$gPj-a!6#ntk}~)}l#Hv&typmXT57rp7|<>n zg!wgnjHp}7+(Y_yUbZniSR~=Dg0<#l(s+y81(eI3loLCXIstBc_uR)$WiaWmmB1|i z&N$J37+c+zs{Bk}_TY2e1K}I>_pv!lI4j^Ci?YZWl92K>0mhLM`rx(YD#Yqvx(kC~ zSIZ`2mGk~R1u%-#T*pwoHq<YGV;3-t*@R>N(&-ci16qISE=OU&)T;mKQNMNA=CT`W z*N;IKEq6{m{+K5wqc;ZAMb~UHZ7veuHT^odi++-fkEo3%gfM13`v)WXh?=bj2deR2 z%O&bF$=%w(QV{8-33lq56mhH;EUtzt<(aSX22By^55LCa4j|EQFhV5<vUbMlT`F8F zdTeLrEW2LuGDv#2$5+$TT$|tF9{*Bg#t5MezW*-jPSXA5`6>BgY)8jbC{+{!9C!qR zIEeT<qAm5EB+X3WUzh5*T%r%Hbr|!<`(WGizv-PDSsgV!NOzoEMXD;Vx^7Q)xsbM` z@q<yD>N4wTDzu>?kqyIYo?-ar=SzmAaw0&uX*0M?Pb21(>%me-InJ|B&-xlk?&+YJ zqob{rd*r^X_=(mgf?7&8s9a4i+n&S%yo%lpW(3|~8MF>*qxGVwI<m2F*2M_-F!Cx_ zOZ~=WExb)*k@HwxXS{E&3kMVOI>E_agQDAZCa`j4j+dAe)4=@=^Bm=4JcO&rV`jeN zb!GYDkN5EvU_&$>R5N03V1xvDZr!z-*U5L8`n0l6JJy_X_;}(ils-_ibBc0@H2AiE zB>~^e?iAb>H={tLmW}D;hKo#?nrv-=e~xA-0_59mE;lrc7U8xO3&$E?l$Plh=|OV+ z_Wje9yW=-cpj){Pl&!&6goZAB?mMU^UXBNqZd~6u>?(V3GFbIER_5KeJ02l}kgmBB z^i#k?Ir2bF+<M5%U=z#fETdo9r?nz}b-hGQh31usp9mBaoWMrNHON#sAC4PT{?j8x z*gj2rSX=xQe;8STi}1rmL0Jo&IY8sg_6T1@fu{JCYjg~{0kBj({9ss`*s%Jw8C36% z#mE7ZTv1~077HtrA<N6pKO``H>IasvF!d|M+z(y>j`+FaY%TjjomFe+x~#`9Ebc6` zpktbg^>QgNk}-^1wgHJLbUO5bJwM^@Xz<>>pW%@nFY}kK*zdQmK?ItfU{1RR5dbs{ zhclD?MIAkm`C8(l^g_}9kh$g|D8_c$RT3n)(rt@X;0{{tO6}3NPfW||7SG>4=DkUp zD@HpKFV~Wo+o}XKi?>r>#Oe!=4r`aRcV~q13fJx!qOFNi5rLw>V_^=Qg1_Y66W^E2 z;+%bHX)|N<;ht`M^G#uSYoJVxbHUoKu6;<HSyfH+D2vF4a~<|Q3s?>mwzKX+?V@!5 zHC1cYIfS0t&6ldnuh0X7YcX$49~XjWs()3?GCL5s9`~>Fa6Q@1&$-ghoSJWcHgEO( zYCcca-JOp}J4<4VqUhrr?++a6R8<eTjgc7=UOIjX3S*67oGrBFX<*DpowOW#CEH9* zY?vy$&vjifb!zB1<GC?c*L+?s;>mykpyxO&SueFD@bZboGykIxI*Jf%1yaL?I9g>X zd%SiWp3H==@ti66)muiV_1c?IgW*F-ciN~8FZ_a<fKk$^$@9%D#-XTK0sq)L2w(y= zlC3%HG#~KM(J_9{HH$)@AtGbq3AO?VZ@LuzN~WTH%0KTTY;Pg|J$8Q`N079Bl%iI3 z$|F@L6}Fxl)WGWnC&p!23WpX)a+j_C(nX@B76<wNq)(`j3p1RLjZaL;NTsWm&O<^8 zhM?TCqsYM!s_lnBU@fr|bJh}4I!R5tEjumP&@2;_ZewgFZnuC9PZBv-M{KGjsGT!c zN;^isnV#&C7zn);?CW57d!Jjax^0l7jp*FKOr}c2yN-QZef4?br-6YD0tYx|tT*uy zQ$r&P_3cz9?tave{r=kg)Q9h`f9Z5Lq<`)}8H${mR7cT93;r8d(oOCv3d0P|cJ1AV zH9eQ%IM@9;t+$G*f9W7Ci)=!+le4xK51x-~7TG;#sPb!quQ+V1!9iF6S`0kci{xjx zMqjSE`z-FRwhq^_!3xYW8`3s?lNd&0cYOUzkp9((T~WL1El_}XFs+CpN%WyyYGN4K z*NVI2`hsPzkMD;s-%=Xp{3;AjPhtl;=ahKs3=)y*9pr#A*IgRuBfV&Q8Wm;@`U`=o zkdt$3H?_Voow=b~#`6(&7*0!Am;Q(40Cy8;UeNdNJoJN*y|%wNBeHEI*L~MFH#at7 zZd%gr5Cc|YXu|U-j8)q3-0q^YMX|{Tr{0!N_}VS2zzibjh`|^RW%9sd*?}+(J=<~# zjvhy(xXz77+<W|k)z2-PE&<N|1X!^59P{W7@<n}l=(*zUXQo#kUE|iHAGAx(%tMJ2 zAmLE%0Q?RIfW6P&k08G$SG|$%i3yqf?B~s$Ef);cooBk(@?z&98yT`W^5#L!ZqOMP z#=~aa-$cm!N?8bg7kFxw){Af|W=+<25|Wob&Gc;csL1WT4J)W6E`#(GY}C77Puwc+ z{#Eh1kDSBOQ961BM9SdWAgo|>?9gv1O@_oVCRX>4+P7tF9Ow=I`0F!2GwYJ;d7fl} zi{L@{;fOb17ZzYs?4?{G4pib<nJOAztQyo)my*t|&=GX9V<#umea2EqQLQSuG3cxA zU(I!L+K_L!dSr)dU)n$WQ8J(F7xhDc@dGI2Er{eK>^*2yG7LxNNMDO%)Cc>1*^U%` zB2Vptu)N{$4z6OOPqnbt4ccuors-oM{FiPPbfOml5^{mZFt(gxeC=WkTUl40z7Xv- z)^$kNQx@x2rq2Fnix?w!T3-R{8jPx=zi@d5{<EvZVA;?bz!3CTLod8jul`!}M1$<? z^&r%?qQd^Qxz?dZ?2a||9rWt+1swCFlb@km+4R+;=^gF%<<BSaW(|7ZCQ(uMnuZk> z<Q#o3YKjF12haFN?!lN*FoHo)1+X7LZ%tgu&AhieEo?bwpDaP!*&blE0@4@UE&_`` zH~_y5<KZ*A+GR7dvJK(troHd=`;U_+NVcH|R3Cg1O=xew#_f7>bk@l8pDs0>#$JPC z`OeK3EO+qd0l^M=xE_o522!}=>!s+LD}Wn;kz1opL>S1#H!96*SB*nuF}ap`F@jOk z7X6(qL+mA7q#ZbhQ(Xjyg~~m*&vRi#6j`WP-OHQKf!4lV3K`T`OU}+Vr&vTh0ad*% zi0?n<wKSY?ZK?WiUdT@_B+>r}6eCH+G|1yDY@J_seAOLp<LbL?FI%lzI<ig91~P~{ zrX;yYG>jm}YHPmc*YxR)tG$-p6&jvCsL}5@dA}I8g|Uk|(ds@ih50TyIs}yWo8!0u zqlG>}SX2{~#2O>ebG^SfPwM@b*2aN(fQP}S`67kGadDni`1-c9Y;KH6O=TT+=iasb z=SRsa2lK4x2PCP`Wg@M(2o*RryaE&3J|5<OwA=X*a_)73_F+lr-VXsg%FUD(r4K~s zEhpp?jlElkECG*wOJJ>mj6g&VV1ZT)AgD2Tenut_UwvK{r$Z^Lp^NKf+;{?*;pf8} zV8oci7CrwgUHc$^&synAr!LPni;u6A#N#2MiWmmqA!rGh-4XJWN4t+@tQVi+Q7+ul z)L2-9Qww`YTEP|~STpDU@YW%>re|A3zLrZQp45H4`cYH)M>Ff<umYA-gCHG#pf}Gk zD03XI#UFE-Ew+>~hl#R5-#T{|2w6}y9Y#x*{ILuTD(ak)b>K%&oVxSFX;2(zYdJwW zd=E7NYgJ)pHo^^~6?Q&;ZCkt?(>+2?g<^H@t$$*|@)dsr7xhQ?-B>1^{pu%sBtLP$ zACl|e+CN~96Kv-G(L-EqpW`Q`730u%ephtM9yso~?$17vx^eWS$Lr=U8(12j`NN}r zsdfZ+iB#Mf>s_t=VprkBCr0u9xo3LyJl*QQSLe8ij97JumU|8$4<Fj`Je!aeG;a}V zdyD1ZROW`YZ4}sZwq>W>ZW?k`WW8D`4NURpn%i87WqWB=IygFvvTL)s^h;ep1K$kO zP28RuwbWFS;3z}3$f&HY8Bw^24!H}Eb2;zwtu3rOSg;aLrVFpC#%Mo7RE#NXSlj6| zjQs1~ljN>&D}yHaJP2mF=f(`^b=jQ%1^eEhTHs_hWy}!rPu-_C5exTqrtZH6diINP zVK(#_`aj8ELib$)FOB9P3hSpo8aaGEVc9Z@|523wKJd&qh1I>Ncx(HMk8^>oPJq;> zGU?14e`*Qw1jly`8sMN`M7bH3Hx46<_XQ6c-`QL6FJH=NvwL^wGTx30tF}=d+4t{0 zkQhcAWb3R>%}wWfn(nu(3elS>2x1~$tTT)surWnxPxwYVI;-kk5pHrkpG9ST`LD^K z=y;$6;NQWcTxWdqPewbqA30dh`fyOMf+t}#6Am@D)3(xis9#Y%?8XWB_KC}PH$VO@ z*MT{`PLm&@sCnetPMIU76bUx%!_rWOu2){`3=XJOaEptA+GYKz_L-`RMi5eY{?ct# zJ(-&BmVJBlc#Op&qBqzC%<pzOY2cM7jvvgP7o1h0sdjH|Zb`5UHx>P~0u8voEXew_ zAJVwSJ)@}VgY5!B#g{HhS2m=ScB+u6E`u>pIdEWj(Xe_V^<X<#xPN!ECYjH{*pTnW z1e4u#qj?2Us4l&=gJ>2dFbsDp!k5J$)P4{o4RN7=e&i{p*nt-rq2d#I@oxFpK2PKo z%?g#QkA37%AFk8CI?3)DE1sYzg9rs5yyj|fgFIAn=Tb6%iQB!S4|ygtAv+_H<;0QJ z<HKNe$i1(Mok<=ZFN><m-s1V>%Y~^Y<O16>6vje|I&pbB8WUjW#ZunmAv7c%%F?1G z+LYjrmkOnr;2Y%)gF9_5sm!)l3ogWaC?|eiOI)4jo^9F+b5OSXFdp69*31WqVqU~; zvC>(~R!;`@mmx#E7jc&3!0!b$9|BK=bJnEIT9xT91L2XLYpQo*H7?woPTtvvZMl_U z+7CBjE`xBj6R<vVdZj|TopuYj+}F{})xgLLbN)H##|soKwz1E3#0&!5{))2=%8BLh zna;9%xA<lSGq3Vp8czZYT5N6*xuZL=cv%h2#-R_zvRQrwy=Bv`cdpjn0<A5oiG4q$ zTA#Wc=j39jxdho4Zt7&>Lvh=enw#HhVaya25-zB+(H<>c{3j~I#SH1QY&)$Z@iB4# zd@sy$3<y|Y^=X}hl6dNU3MO3G5wEc7qE1;)zV6eDH~RT+Pk7sT-|qKy3~FE`Skn`f z!=d^fzM1_ZRirO?%};#4F*ODU#kNrpHnwQH5jllf&5B}-ZpvU;qwyTq@s0fjf%tpX zK;reU))+(L=ZfesuzMU|QTA?n<#mC<(3n&t^c2B7P)a!(&5`d6THIKI#&FiUcUaz> z`XH367PkDT4Dcs}2VR)~hWFqja;}M8n?5(FUkG<^c`PrakEP_J?~p{o7O8q2wrrJ1 z75W17_;Fxf%(GY!k$L_No9)jLNg!a685d#68|@_wzn}b<&Y;TQp)zvL{M%GZSFhep zn*3N}U_*5$?bP^o(`Dy0MPf`w&b<Jn)2o&0QI4rQ>~Wajv;)TW=2NKL&RD>)f7H`F zd)PJZXhP!(=g-EsJ*~7m#d1+iEaT{ag{+|$bt5uU4m#H*y}aA5c28~{WRt4jH|P*- zL$~nn+%sDwJL;xq3?g*jW@}%8T{z$bG&+pXuwM##)=wW*jqaOPo=CQ8iECYJO}QzS z=1VSUk|Y{LQarB5J1;UfUKrObtB)a@d;U&Xs`VV;m3tf2vlee0D4Wi0Nzo_D%n6U% zsH)a?7ds9cF8;jxbN6Rk-FrUugiWtyunF0~R03>Oe3o$okNf&6yQ-t|(&goOf80Co z6wY&@Ir7l=0iVke{$9?``CmBg6EF3%d#O_v<Kc76!5yzH>wwk`tuzx8^O#hj!l5_j z^+NGmrcn1R>y0_?QH5Eh!%g1uue+}9=~si#GD1RLgHpihF%$&8i+C8W$aZ1MxmuE8 zx#PWu!axE3dnDz$`;JX&&ZI`JGr7vNuxf5fGE{Njgb(tykeiTx9?Ea$Nb>1Q6D@7C zkesZnJVT7XZB{!CK14rC4hfhb8HztXGkdmQvVznLI>i}L|47<=fXQ3U)#GvDX%fVl zCdltfEZelDRo9aByrss~H1qB@`~_|u@TfG0qJM-5l}BCvmBy-8%vzuw=wO4#<_{`% z0R~_Rk3(UeSuPaUp!KyRp0(UkQ%32D4lL1(j?>~U)y4KaMU})GM&p<RuDW?fJo;|n znk4y>PGY)x$&d1T7%fih#4R+Rn*=b%HQ#H4dib9wPg=>ldfU|~k5~F|uS~7Jt(1mA zdKMuJHj`89%CDpRPxMCZ7<xZEFKZ}dx!{}kf_S041X$H0DaR->^TWz+y;7j63HEBK zz4Qq*-`|?5+X)vD4C|O<8B@60o7Y(F^lOj^Gj?nFj^J%cXDjw}3o!yzfTAA7qK|Xh zU#N>csar?s!zsk4Kf>^<L1M#FY0@cUUsh|<WJ0{5ERJbhSBg^o!8ETKXvslMjqPb0 zj}+SsNc-|UYCx{MY4@S7y7;sYp4y<vkgy>K{>-zt=GfR~19Hx-aPoYP=NB#Ql!v(N zPe2DHp<7L^zv|r{9d_vae+-rX6UW0N?GABkJbZscy8=|<79kI>xn|UbN`5M2ux~M4 z2of3%yg>XED6Cv<rhKSUQX1G&a==`~7*Bt`fcF%;x6y{R+JF4d#tKx(;}KW4>oPLP zt!+7pTQhn>&lCpyOV?ef|9;Ypnczn6Vp$zt;w7xyF_jkW=6lBb(0lA-`=fWt&x$@U zY3!wGdL@e_IA(w*K@MNex7Z{2BCm82^9o1*o8p_MyNxW-HM<B1QPdajFq`66`Zj>t z`Wk6)lV1Kbb8uzZtfr^Bz|baI`5WBX(&|;>5X<SU+S!OcRgp~{iS(zIpZ@DFFlCIU zz~mx4#qE&!`q?uwBr8py^U@V=f}uhpY`VD%JB(nFb8gPXFQ(9^7~vDiiP*?~Aj&Ap z!A=*I_F8q^>_5(i$vMwx6;{iDCxX(RqmG&}@C?2^VJ%JBagpDF{}RchBS~(-Ub2qu zR|}j)t~CwyRPuOqA<sPV4d?&NZY5ltxGtSR91F9<H*!wv4lll}di#tQIk5TIV&d?H zj>K^?NCx}g>1hAu>xM%(sVQIi0}d^>u%*;{V)VU|*DT&<M!`t4e*2+PA?Mau-42Tj zuS#|3e*MXYQfYl%Rg5z-<xa@ty(=EUvHzH6bD5<8Si;$SFp~(Ui4cEpV;v={YQ?h~ ze=0{e-N-By#m<*f5X0bQ?9B^N%!!9V4MsUmmaR4^^$Q<FxHN=B)1TeqY!f;W*uS=i zi4=kThBEnNsXFr{O$BE93P;{<a9TEXT}GF|#BE~#9Z7LVMq$JNMT&I#FP$-vSq#V- z4;Rb2D)edAId7Fr*$2#7(6b6GMlkrvav7QIu=ZMNk2!NCi9YT~=oM98I(?TS9Ra`> zr_%*yfyA*rz0g)9Cos{R@W#P{kCW-lw_^}^1%Azc`gsFmLu0Z~yTXt4`LD;my3ShB z?1XiIk9t^p{m)NY#i34gFyXtXD_UOEqQrS;xn<ght9<n22G(W637nD=|4ti8gY#=o z*3ASQvICr1+!Xp>=Al1n&R7K3k%bFk_<1Z6>hmn=_;Er(ORh?(USZARgEz$$@51cH zr^+jv1=r(Iy@#!|3nQ;^m4eJhUcQQ3ZJJ#0rX@R<((AK`5@KhDM<L2hueqrlAy{AN zw30Yk{@MByXV~pK{2ea;>yAuq!?!C1g)bvg#lZ6$>QlXzhwA<8yArzvGc@jZL~Lgl zfiVbqKrZFEY$1W|;XL{b*6rR|r{42+ggfhh>pVR5xFfbV-*xg5C&TM`7Bt3VQ5ezT zXTP1q8q)dBTV~10^--U+eaod!R%~&Nr)ycoyQUuJlITr{0d>}_PxasH%R^Bgf~&XF z0ltzZaA34r)M3NW=Y<=`u8B!{?%!qt(iR7>P7Zx6xGKYAGixj5_MHen<+jfXYn2mj zFJnMIc-D&NRa-*wacY|0-*w|#<Jwy?y;yQb1>*k0(w83e`hOoa-{x@IC6_b^fW_~y z+WaBEfg|En;4^Kg>BaLZWqi~VNN1y1<Q1G6kVLWtQ4tpoSXIWYV~%y?jLWEritYkI zXIJ}J0xRb;3%|a+1X>clIfqjPx)!NV@ncw#QW30U-dc|F+hEi$UH<YIC5{+1&?WER zN4Q~C4+zfdA-Niyaq&|tx*!ucQ>}D}yfU43idA6GCR&rr#J}xLVw_^KreyciQu{aI z2DNk_Vdn{fJOFvMvpP_+vSAqiJ>@}@lH9V@m&Au>g6>^uN|^s&3*rCrg)y(b%Cz=a zY?lmPCtBi7WPi-5XBQZoSkcSG-PMkHVttcnPtMwuP+iJ7%~3Pn;UXjV-S_THvPb91 z23!b{E7iX}ks$xmG+nJ@>7s#$yRUo}56w35=5D@3X*@RD4rK-!*QayrKra%C)d%K{ zV@7S@Gv?j>EWZx%q4z)|0Zb6uH-7`h3Dv@@nLRGAPSOs&gFbPdY)>Igyo;%5S==%m zUldLXQWRF{*7AKh{>%EF{LOR93+#7SmlXRbpvO<#9x;<vZ$JsrBIUM=T&V)$7u3Wb zSC_(lccMFL5J?bcPr4UYQr%~1lQ{dKrP1Z#45S~kUciIZpE1LxaW{K9$Lyb=x?G07 zHN7I4g|fBVhRmswo_tMQKi;2n&cy=cidlhE+kIefZ2o?u?SfAv1}_KLXSzJ8MPx;7 zj!S$9JWw~K0I+Cx+e$4;aKlBg{R_Z~eJ~d(2&wn7`{6P&nlxOIjbz9tHmM{LGEK_$ z2gXug`YEZhI%0nV!oF6gP=_S+)$Qo}VqUM;zkR)!>B*g54D1=!ke1Teh&Jg6-vW5+ zb-5DU<(Ji!Pk(6}>fP*Kj0~OcI&O+sOjT}EzcccxIK_nV1ZFg{>=0@uY-j)ae6{!< z_gdxZoEm9=3KCw?%!2ZHEP#vfVt*OK8{Zen7iJ;h_L%h{*td+{5AfHhCNYG*Q%}ja zVOB~qh<ipXefUh<{R6skHPOefGIvXBv1>?SqLO(e8~#pc{4^K6eY3>E_;b8Lc#|mT z1oR0ixQOKGZQUhI%uE^B--)}!<rtivK`DIN5vbl2)nz)zN=!^g1{7C7TxyfIO|@lT z93a2O83?giV%yT7zr}&jIc8FHNNP#GZ1vP;$*a_4!B6}%H)evA(z{0?#P5n2cA(j0 z2+EXeK9GEGcc)VJp{cp4)ncFKy+o)80?}#-o^~ZkNE+xi#d_=N^NN^V!Blm#m$4R; z+M+)$1yzFcS6)%tLV!ha4y=c#UHV*K`hyOdFh@}%DK!!j(~cJ(l~xYvl}%a6l<{Bx z7%*wV|B(G;9HI1=?kc6Y$>GAx{@|<eM3g*1y|x&w{hK15zoudzJ@8q%o3J)9@DKV| zP_UYo<;)n=2nVNVjx;FenmZ?PSi{v8d-rNkV)qO5=xUZzPUqPGhbCiCk31Co$FW!H z&nZj#Jlpy1wKLcK9%kH=na>3+1;Ygr(y<vtOtj~Qp6tV2amA43PetUzOI}ttSc+Q? za<vv`b=f|=Mu{ChuGn>znIfy!<i41GxOqCuixA(Lrv4i$M`CQP<C;SLLsp^o-Q(I& zWfD7Y$l3P+BWy;(wIkuJ^BkTAY{Hzf52wv^1ZJl7BX%=0SVO1?pC8~rh94l!;1wjT zun|qAKt1?1D<;b5>!ZFHCI)}M-{9Le*D8qy@4eXAZ90eBoH7r!U%zyCR**>&s}1)8 z-*%r^Q%RkR$k4O*RjcbqA{6@F-MC5$>$mY$p*_a}m5cKbeUOZ&N9+po#1{ZbMrXD0 zzR;SCaId(B`wOFPpbeJRc!es4-P{Re2PG_&J9{2oW@F}ZI1|R#)n@@hCpZtLArVPw z?6xc&`PQ;Y)5xX{Z?2jFI*&_+6-nt_m5>X7*k3wRQerS!-$GG7*K%!acV}<rTiNr* zU0-q@#b^<%tN^@^zmGLIX0EY*>sQh6qNYNl71OrgZ}VZ=xQ8fOq+^tYCtU5?kW2DP z^^IVID$e&0*ODAIgT?oX0<^lC#E94k1zA`ZkAN9Duv~8PdGm;U!1w+?8&YoWdSH`b zY9*FrI@mJwM=5Cs<8bIbtmSQYTf~vA_BHHxayFzL!~G|n9h?MU`tHaU(ku6-rPaiY z!e{pwL73&iF<xB^bwE)pa60C}=KiH~L1E3_RE^~r$Z{}RNW2od@|RAaodm<84Hm@h z{1=h(Iw|*Rz93f`hO<6Z7AimVbnm6I+5laovnP03Y%YQ)ktaDO)x$%$kX~LQ<)51j zug{4yKbb@ocA5ps>Z{l?T~EmwM95T)EBlB&bkwimJXd|LWp+o07~EM7)Hdib%q2PJ z_GhijIe-|4k9ECmg>M+ML2|A-iTA?+(gAkb+!;1$X|?hjcW_5y+WpG9xUsOx8-yO1 zIbvNY_E`wSuH3fg1Zy#T(RR`5r_YIo+TE{j8847aJiuciC&hkokf|ph<laqL>I?Tx z%UiEYXeH1s(S1=vAn@3BS$L=A^;)4R#m3wSPyb+qyTc*F3ppCVqIF+IB%zBoC?ZPo zZm6SW$Tp>@MR(S#TKCBQ3^IS*9oqd-l;LjY9qvELIk-jX^o#2PZegB{msJICFT#+c z*`Jucj7wbmM&9XnM5_Vs@`1AH_A!GjI2?$-SF031of5yKee~>HK-ODtk<OaI$;Ec{ z>*GnbqmtDlj-@r@j)+>x+K+lnlkAh6XD;ROb&1t8+X~KikuuQ2dCp3wvcDs0b}~LC z?Y7*0a{k0`6a;#2Z8gWpLWS}A>hp%<+3#nqbiA&{Flz@`<w?YM(U0ZLqW;oZfzEoK z(c)dn-f4+`4QZM=**V=Sib*GN(z_}#&Y-<)ND&G_P!GY^RDeK=%7l;8b=G`K42%zF zZdxR#w_|w#ct;&KHX5pyGwrO>-(3;3(z})I^v}n$ly@5wW~D|}xDM=*WE$A)`!2gf z3-<#HjSf6t)ajjyU85uxX1N}!YCzN<v5a5*@6v$d`}E@Xqi>ibIn8h_(a)c4s3#<~ zBi(+`Bz}Pq-?EBH&qf<}H`dMZ>p{HTj6Y8ql%Ptm1i6Sx113QA<i*@T@AkT=K+mh; zvZJy)CdN^8ONp-3LKqms8i{GC-=?gcKhC3YW=Wgmx`2ukJI8Ik@A!ugLAp8*YQ9s1 ze&p*I+9K=Ep`XY>%-Vi__8ziY=xlrNg<JkFiqKC0tnb2xFulpht4%LianqX6DP`wL z$gQjPuWts`Yr3GHkpgoU447t6L7klg<gszbRG|?CS09zU>9<-WGqbO@sb=>^yw2X^ zudj-E^LEwsfE7Ddn;vB&J&NX7*l1>VCYvUGoZOP{fEEj~4-_aZKrGvb8+-`GW`@M} z{DsvjBCT-ws5)*&8Z0c-h$%>fEEXDD8ekhV7uDbv*dNJ(@zjLu0VEi4pC;;8bH;pA zyf>12xmukEbx6CYXZ=KQ`eH7^Qh&tK*3xZ`qecAMY}eWE+Z1ckDX457DprB@0<)lT z@`8nx)uZcaS9%7C3}@aYPgVk7vYJ~_6kpG{d%1kj&ZwZ1!y|vjCYrQBpAGPi0AtcA z(#iyU3`R<}lAVf6wjG=)IaWa(W^^B2!Zs5?(7mkz2oNsBQdvOO=*W{%&vX_Sfl#a) z!rdK7-(N*|D)8L6^v-#Yk!)Yw=43u9-H3Q0R*mA#D`32`^3-qqy6el2Gun@zI;gBR zzL`Jo2Gu}<@iq#954bi)!ymNOZf`e)FH)Cik?l0@KejAQqAtffQC@@RfpYEY5wFIZ zJa%M@N3q(`G526b2E?uyIh^`Ugvf=_ij;HLWfe$%ZnD{qw^%w)|C0yX9of&pMSD>( zopt2kg+AFETHp8<L7>V~JVN)VRZMDV&)POfQ6KSi#I+eOIg&AQAc)AVzDi%NbuI6V zcF0@F#~9r|1=3jMZcO>6JcFw8()E8KK6{{1>Fs)wawHUyIk#r&ZKlHg^L0bwFb^+F z=e_uku+{VpEA?Q4oZvb{h+=|tw$E(*9sNORWsGoa#9~CjCAeR(hzMLT%R=iCE9aw; zqC*bw+ZFti5}<AINNS1TOAWp!{>{z0g@i!?7anz`5hynp5e5P*2}5(x>bSCdZl~ii zL(Y_T|B;4+P2R}M<BGEK9hS)VVsm^sLAxzWPC0W{w<rtjZBCSpf)varn(4eeqpP1| z6`~KyPl8yDHA%S8I7atVZ*{Id5?pfk+;n`b?$mNGEwk7aOx(wdX=0#T_(+jLUwBDz z8fn>g2Ff97BKg+pP5(P%IkbPlhRB^!sO&<3%D@Uz_SC4{&XQ*kubQ~w*F?9GVgcoL zR^7p_Apq7{=arq9>C2Jay4!2&@BdMygzv2B!tqEZX*-*-^EQ;jKiAS%nFr}FJoB^^ z2~x+NsE~9P4InOQyg)GC`aDu;z+X6U`D>(C>ibxRD@^vCu$V$%oS;;UcMGqR3X6&0 z$wU@rMY|$%+K-HeLR)E-^$W6?cE75^;we;S+uFAjm}GIn^)ob=+vw%4GeM1whz!!@ zN_%|&*%PzhLS6Qb9Eqm%QuISUia(reu7T^{mQ9PmDtLeB>-XBHirJ~lqv=k`Fudfa zS5I6pY!s~;@Tj*j>(e^*5}7~2FJ3$1x^(4NcU0ULdfX$E`QSjMCK8zN##`4_mQ@64 zIgRm2I(pjQ7A<2yptL$I-9A*zK3;5#i?Hk^z~xt>3trlUeW2uuC$CaeLGd4iia|Io z{?V^EwOa&#^OUVO+^P864g&+c!IAC6+;#&&)Od?`-F!%cY<94?cG2~n?lbvay{A|A zN>Ubfu<$OLU`<19*~!^V$2a68@9F9@vF<}O#i?0^4WziGmQZ=fWrf&YX{Fl?Z*PkL zihD_Ied)ZI)@>l{a!Rh#oAp<syhc{Gx}}<3y&UZl)l1To6nGI3*Nf!oYdh9Yo!vUQ zovimI^-|UOuW`EhQg?o=S&?HGw;V<Y(bYj{`19w&zqc~#%j-s#JOtm>Bs`-8?<(ql z1x}vU0WEoe_>+;MMV=~%D?G*bOWCcrr_Vv=GtEicg_#udA+)4V&ZLfWkxZF}2iI03 zH&^->?M_q)9Nc;+Nw^Tm!5C)g3IKw^QBejYwjhQ6Tg(s28pevh2+fpL>`FvFa6OIA zkGpkGaf1elH%l^LB?uw}{kOWV+N<h`s0x)`rAq5Y5`}$Q+X&w8NYdu!lu1{}rht;~ zk<4B%L`QPo+HrH5kPhgo^El@?^sl6;x2gM4{sH@dP3~5QThU<Hi-VjnwSb_Z9-9!7 zUT5Dzz-i|8a>T}T9|-i94c_E@bo4`Z;<Zb5PT^v`EJmw(+_RB0K<U^t(z#;tvYg9< zS3kbH2W6GW@0d``7N@5%LY64i*5rVu44fWQT}|BjQz4#@$F+t!QZbChMs*}wE#8f1 zO+X8)u%#w*;0uk?*VB*viI6*#FkA8x8qYUlB0;+5iBY!B0!j(bybL(jcVAVM??Ef+ zykaNzjf}lmF<r^5D>27o>G-~A6*7(aYI3i|`;SK@?8*Z-{KlD!XIyyFD^1#ymC}+9 zn~B)B9~)Y^H%6;iJ&(28-7bPmdCx&6U{PaabD&VLF`+-YC055!hlOoqs;a?bak^Np z!_PJZs{C9egP^+a9R8*E9`YRR&bignHIs@Rk@aKSc4@hDz*uW5bF}V7#gOfE@rox2 zC%+QhKaSQVwX;4oCjDN0Phrlrw6R|6h8Q+AC&bOoq=laj`Z=HE*Nkt(bVx4-gBc>X zx${+_L{3}y?Aorj#;Z7mE4_=sCqKuTPgM1UM8ttoneDs?0#j7I5FLGw^-kOTMa0}y z=baLTK0)g<^|INmeWGz|jI#+wpPsWd`fx8zNws6xXVGRg#K+m0&WZ8U9b_!jTKfTs z=)pI+Ge2BSffJ%ZU7DD%3};gT<m7L3YYrmpVT8D$#RLP?<DGHkAjCyk1RCE$V;L!S z^HO!v>^PWR>X6+s-sdy4_`Kxaq2abjwS7PuNWrHIf&Iz;f?#TT-r8=thICA6Sq%d` z_9!yRoJ7vfM%xZigxzy3D${U6WgR|3{Y{DwJoc{g4Llu-Cm3M8Y|o;i+Ps@5tIRCD z%Q3={I;&-U{4Y*P*a@%0B4F$X1`I%bo2Aq6rBRuK+Nn9n<tI`sN*CTE*J+i-3(cG$ z$daU#oeLzj>3y5-a1$c`ynbeRx1IfG^L5l8X-vm4wK}9hK5xTkeG6&FtlOIk7p5yY zJKcd{--b%t6U-H4&msgrf2)O`%l)$bUM_gtb$H^^*k8K#c@fQpZiNj5f?rY1&G<9i z+`JRdf?GG=H;V0lxdCP@?Q(49)9WfZDfq%DhzehcSVbB}>83>F7ltI(=++Dpq&?M9 z1ITs8bKrpkaes$#@0@`JnfGk+q4Skm$K`Xm6+l$Jvj`tay>xMl!}EF8qe3C}pO@vO zuYEcNu;{#Ux3CPuQao}{chJuR@LNJo8JsJ6Ty^nV?muSv;_BtQi|6^!2Bp6mAm0!w zCPm4qV|66W9E<#OBhb%XBY8!Qm@b+WQEdPVi}9Ql`g3^5>?}F<MJ8*iyG<PB-o3ED zU#R~7o=E@aQu2SQEOVKKQoy5Hd?=9rm(F#*x2n>Od*gVuQx!`Os^tiaO&fgYt@a6> zF^~zV!gDG2GVU<KESEh~r0dzH>gI$sjMI(NPZ+RMmt$^E;~qUM0JWt4MZwV?gKLNC z3(mry8YdDPCG{{AvuT5&o+l*z&v2R!hSMp`($zq)Gv4C?fZ3caSe25*y-GtBFU~_F zIA5|3+~v=g4h04aXPndM>#Ik?1#$}3vMn4NMudZpk_U&IL{P!H!^NJnFv8hFhUkj> z=Q6BSeumt=!FbawC2(-g@ok_qfWyx&W#he1?Bl<;ygGIK>C(R*)fv<R*pl!<`UzVL z6;T5eE)+|3fdXj>c{V-vd0JO%OKU<(C0rY|OBi*=p+3aDt|ka^^@E}whQn!UCTDKy zq;Gd6n);XS=7t{eUEtuq=<!gzc5N&nfvxD}KbV^!dOX+)RgU*6#wiaLpT$lvM!|*~ zR~on=Wr5>A$Gaddzr3eP*Y>Fbjq44{U_9UTZc_P|F#tJcZ4?1Pq48BjW$HVy9yH`C z&1_IQdL84EE&zuks#Ro1kI_#wq3ms<38(Mvp1St^FWrGz)-?KtBZxgB^gFgs<rL<x zIg##4hMr5ZW8@Q4u%hl+nQi8#I8i*Fd!Ju7+_>)e^vH4VY~yy*y<ZLT1UGI>>s%S} zfZ|QOT&aL_EnVJuX<-%K7>^xj3IS9XKSO;Nru`30LTU75|LNB^mwFquMjCw-7v_bG z8n{VPt+pJphqAb2h1o|qR7wV={OJ5v6W^lsScA^u<+iRotAHp2*#4TU?rF6&gPY9) z1dQX2A+!cijeMgu)mb9p=5@;;_%Sfo>;y~_lbMZDK5s82YOL|0B53+gHf(o&rr4Up zQvTB2Ps7GE@0vGVz)aj<JZjPEa67t<4N2EaU$*%dB#ZS#inj-HH~eb2kC%~)gvZxh z-Qyqcn=&A|O=JB?!oJ`{%Ij8*ijHTJAnz}Ix#SPeBM+Vzp)>tU2h$yjG!7%zS(Kpk zwzva3yPA7%!5-oQaV!Q$s%x-KTgX5`;Mn<fDAVha%E}7MnmsAz^ed?~ZbRdC1YD>< zSmeG%1*na+YSA!~eQl6;Vsk|Dv6l2X#np7~{aTO~`~l<_7Hu8y7m3A;Y#Q2L6EEwo zwZgYp{evB-2bEgTS87R?6H?(6$D;Xr_HU|<M5`)4go&(ij;j)yk5q9CAj65%b{X6c zPH4K=miZIrW?Gn=&9V(E;o}f(yooJwQN(Hr8rzDQVt%a+(oiaEPfT^VFlQ=1#TUg* z7X+Yx!@30)F;3<VRRH}0>iX_=yZVt~gTs!Bx3q6fSdbm|kA@&voy@o(1O%Z2EBgZb zER}Ep3(`Ol6rShQ@0PC{KXng*ybO7PZtoL>{G~JTXKR}e`-oD7lg<_?!e@0);GS`7 z+nfpvqqW`VzOpqTLaA8TQW9AHo&X>F(<(5>`Tv~?ok@NOvZck_=gBw0$@`Os&}x~J zASt&SZ~|YQr-p_qtVQ-G9(=Uyk{P+RD${xQN8stwzjTgHFROuglB-};QeCpzLvG($ z6U+Moi*Y=;)Y#@F9g;HjgEH*+x&Ry;wL-`Vo${U{V^DC*i6yY+it^phOM`fxo-sOs zXIcSnt%=@Wt1{H9*{kWt?buc{4M=9R$KrUmlWJIR5;^rRoi%ZX)_FyGYBlZ3=`YLL zZ8r?9-}b1{4f-Y4f`FG@J*Yj{c!keX*$=t{d*^pG&@dWxkoHN(eEvLa3Ey-LGhMw4 zl9iyq0Um^y)A-jDU*~LW*q>OJTwweBHhuJ^85?m2WE~d*7nrQH6`U^Q7y8e1KDt4_ z4M#V>%@4eGHH`cLuy=nA`;}@RDZeHKBUFwD{)+2hYq90xFRlElDYE(UF3fV*Ao636 z8<7$Jz{kSEl-wpxn^5!f+0p{jMfvu0^44Fv?3-p@3${m`Xf^PPH!xJ5$`0CyEqKL7 zv?a)~k+7F7n}%|m8|#_d9$C}RPL8B)xKCuArWz05;t1bKt{It%P1)BBoEeHMJ_khX zU6gr+p_;4-U_y!mxt!CKNx?3>Qyp7Nm&tz~mwt_1ywG-v>r~vzcceYZElQou7DzE6 z-KdH=)T^x(2#Ee5b}0>xXYS^278?JIijc%iRJT2p*@O=dW9rEfU~(<JE}6!hP9L%P z#d1nt6|L#Vee<Oq5qFy!*Sr+928O!>caWN%ypI*Zbc1!86Gkh{pPUjwGPsQ5`0>pr zAg^us3xb)927kwrf@y8(Cr|vKQXmD(ebM&hv<9Vk4GN;lqyh-I6JC(&dcUfWCI#60 z_!3gJI?^wopByWdtNQx5BRS#yVqO<iAwR|jTjT^b)UQ^I?f)yQq;aA4n~k7qZZOp< zEKO?(@oOPX`g0=Omq&X#Q}m2LT!Z|AG9_XDLo=BZtOE~~T%EswSz4i8#*A0uXzzsm zqkS<TV$gf;7KytmKNC^zlqNGGYND5d`5ZpcG_-LrYmv@^wkFiuhMUpoNz+qvwi?dl zKE#RF^s3g!JCJC9VU%(gmm33GhnUo^7tn`TiB^6pJ$LyJMuv93-YxX@xEGES)$^US z&I@@lGDuZ{$Gycm#{YEdtVy5zsQ_W8$xd6vl1mFC1ZN+`FN`!P<EGS=(3gWo9adCp zB|jcN6cNM38`q6fQpv$P_!aOTax)ikltj7UbTT_A)MZ41|NEpk4zC`W)tV*HM%f2p zEfDsoK;5GYi@zWI(f5Y1N=CYcsq@60hGu3@C6Gm)j3);6)9Ddl5r>I?=}3$2C3oJE z#nHJ(99F4`8D7Ns4qJ98TMi|DeK+fvy-VjhpH|COHCShCawZ>MCCU+aBNY5$iu+q| zZFs7zkYm6UYh-#FM)y#d_nrtJV41AGFl@OtP=1?sN0%qInO6oQun2oOcqCTmNJWDS zq|F#+KX{-HuK&_d%$m)jjUd>Pdn`!ErPgDv&5$rrmD9~pes1s3%06em)b-#>a4+9J zn)YoKOH(xyEikur1~p#Z5=JZiqb*HGT+Q{NHy`#w>tpDmjZM?QbD2~?2^i-Znvb~@ znmI5_tAYHWJW}yEEh-Kh1@7)Pfn1nz=f89xv#8&im%RVwrrELB9^VomudPJRT}~tz zM=Gvw|2PFC$JIh2n=Zw-sh|1n#e4&9`0_+8S<bZP<0cjo0ZH%(<Oh%hS;qUNBMKm+ z!o@UkjI_nx@!Y95H^0THr^9!(^>!A3ByCs|k+UOKaKz21Lf_Q;ZXZworAuRGYps); z7NqG&z{nSa|I*!yYh)xOz2A2e{Bz@v<?lYr9tHg7a`f9+2NMbI!LR+kNn{*WoeM~5 z8xxTjdjZ0(y%6o+V|>NMR(M_0ZQGO6Tkb7Ti_xCdQ0TF-0bAWE*DKWGUnOW|yq>Bd z+%O#;4u7{%8n!3aNNC{g7$h4^t+wpV2Fb1t+wciiQ4G2^j>j9#LZv9F`{`skEQon> zq&>cfHyc|$I^Q|A>E=i+T#jS~MO@NWwIL3*kyo-L7?$tGntQ9&n|+-@Ur#Y4IfURg znxua#>NN`3-kN+_T^-@O&Xy#wQnNET8Qt8Di!$|b<Sj1rodFB@{8BAcjOAh75#vMR zU_=8*@MZSvYa1s`|41GkZmjD{YK*miBSwA<Q#s~c*ok>YS`9|-{5BN?*d}+7Kf2<t z9Y7u*%#4Qw{z@DM5O5-{9e%D)Cu>%=ae;B?E^YoZ1yKz6$bj0@xNwU7MW$D;>mGi& z^k=ARPj_)L3kGbxft|a!`IoMOvEzy>SJW4gtA@v&I$e8QgHz@TG#S7efe1z)4>?ia zqROe)FyT^=N~t!t<J~$?U%<oYL>JTDLaYZjB+R}-4s8gsYa9q>LeD`Gud3gnZWqZb zCaD1MFdV5|F&S}P+?A3!x$W_8&@N88wQ@_m%l3??c!86;sI^b4x8#FlFA54}CyPx8 zs};VvpWh_rVq}H(1hh)@KkxT#ylQE#zz#t$bCLmUHvIn~0WrlOYL?>{wtAux^t$<J zUtk1jhxr!2^azR|YXc4X+f^apVb7_ES4D4~zA(~-dkl?#p;!}Zh>19&qgKUe$))e# z8{%f=CJied54UQ3d^is#5`MN(G%g!dpN@cI1R7a1Hxa>O1ervNtA=TO3ilgVBk8-J zXrN{2zrwN01|SuC9IXmI#gXR^&;OU$A`rsxEkUn+UHIFJb1XI8hy2|*^<V1TEudtY z(RdN`DM51dfRlA5ntcCq*P~!JY#+B=6phy$1iFQ_S6Oxze?#c7eLNIE7c{*J{BTZ@ zJE=85rK=;cNwR9Z;jSV|miBY6&qJv5<zG6tpAV@wbqLMx$pZ5qFnFo&W0k3Frl|Mw zdO1JE_l#MdEeV*@E;<hZC0*^WH)!GljYSYgi>x}G!`w{Yyx+<Zf&6eFtV6)N*`J{1 ztx8q=Qq+)MekR!a7Tt}1_IHxgyKFDWG}!S(Nv`DQTdpTRNJCa-x^%~%z1;)5u6iLT z4;aDg=SES4oxdVfwo6~jmS}c2B>c*;3%a3gcyln@k0H9i!r~s1!%paCk&D%GI6eL4 znt!uSm@WH8qGk4AgyOWbjKkiRXtmOu6<am`sf-sGPQP(mXRbu@FHM<UtGY{16*4qx zg?Nx(S<;^|_%`Jd-*i18d5TEYlC&ZoSJN?bw<><)7QXrJEKIj~Q7)7n)her^=Fwh9 zDSUoy=DzsJwHGErciM$9x{U+~y|4?b<Tg~JSR>!rb@yK0{h_S(vW2kIH{RP-{W3JC zsD#ltqaf_4VEE_(_3@7z<;p=^k@G&L#t~eui^T>6Oc+^ZJiM5qX%`TXi3&Z}5F7Ba z?~6EXDRRAc<A9qdjJVP}*uhNDw|hETx#fNPr{Rok#dGB70Y{fW0WNTMqoxE#U~8Kd z>|ArcoaI{V#jG@o2(Xt+fJ#vl3uq9c?DiK7L;p@RR6jpUf-8vNY3z1L{wfP3hv@;1 zZn>zHosL*kly$smgJ$GH4;dNvZL9U8C?B8E2$xGbt867iXbM#Zj&14sSokmak;8Of zjC}nSuGTl|cBAqAdW$=u$p#<1q-9OEar=#~KVPtF7^L(jXl1B%*$&`PwykECiaS%d zhNrj<PUJPtU1JWmfbginMmtb7=W$X2DuJSz<>FTzR$2Q{s&;tg9GKdaMBZbCtBVk` z$Kr)Y3<#+hqq;PhjJ}u5OAXraCH*glq6OG@fx=TLIpg0rPpX|+9rB5thnMj5U87|w zRhsr_a8EMc2fzr*WdBR1mIkGx*V&yw_-r+QaXV)YXTi<jC3M04!emB|@A7pK8j z?v;5#h`~5b5M%e_MSXg^9BWhZDg5lDxvpA5;F|yjpJY(Q`0F2U0h6Gu%JO%YK48i+ zA;bTJwD*i^vWxcxQ4mx>dM`mhkgiB?5s@Y$MIm%hL`n=u4>cgtn}~pd^xmb0-iv^M z)Ig{S2+|X3gphZh_s(7C&Y8LA+z+!>KEPTD<=K1x_rLr~b7lZ$56G;e6Qhpf4Ge!Z z%*JU-j7G;*Y%AShm`Q25wN!#b^)B#m^?AZ$NTh$rEbufne{EqM4nLhQe@vK|P+?3+ zw*&7_wK-Hcqr0Yok(v2-<B!X8PZ)Z#mQ+U#I|&-a%gcYx!%=|pi)3*@b1HgUuP-Gm zNH9L_xO|z9U=OPz6hFmZTZw9zJCTrKaGD7EEN;FNVy8IX?#qg=m)qhR72GeolKPa= zgX(z*rNQ@#P7Z=As=tG`X;P}Vr7;GQpe|bwdMAEjW+o*{;r3^rDu^M$PPP|H6+_go zgtj<Tl#BbwU%kGTlvbQ>AFoG}1$b1L{rI);`eb8y)0XfI*M`p8wBamr(ufIyj=*~M zwDbMO*+7=i^d#d=b$2CE`HKrfR-(QsB7${qEfw!VNVe5?$h}a*pBlfH+P`*>7i_WB zW{-gh4{%bPtF^mr&g;E@sNnE&;`1qgGY=OgXdsPSZi2AWKVGcS=QFT<?@>ZXll~kL zngh^_tl0+BpZX}Rdysw;=Y&H~^{D?L^RsMt<D_=Aeeyu!cPkzl<9!!4C-ctADhD#? zd^5+9xFu^4(TI*rkRY0oZlhk#ROa1#Xb*%6_iw)+)e9#W*!UI0$1&{y<5{C{hwXf$ z&P^>vD${|dG(?c@a6NwFzM`m7`d*G!46}C9ZwEu_4(a7hGMe<wK+n}oseyYI2q&&s z=z@sKg5Hj<O7q^zjK%l;VD|3vZBzMRDb$G@ec^}qmI0Q95eh7WTCZbdmxCJuum-&g zQc-fLr~Vz~WtQgMqGR7J*k5o^K73^(r#c=8(PaJVldf#uh%6cM&}Q3BCA~YpLZA2# z8F!T>FwLi}Y~w1kwQ){AMc(Vota8OP%k3uX_}45jCJ`83$Vz?iq3T1XA4JNILVMHB zisdz)r96HPGL9>Nm=q9Pg5<TE>uedIX>3g2E?YLtey4-at|X3t&iY>w)d+6RtE!?0 z&wib>J5)+?6wbf110?Xt*o^tPaZ2j}#so3UX!Qr#QOJv$*^}6>4d(j&>%Ll7KMf5n z9rhJ?tI`_b4tfH>w1k)gqhBYN9>ZhX>r10WgQ9*k026qVcfLfJpy9|CBg+HT#Itth z^E|Ot+Mn%N)#k3=nMx?CZv)}5z1`=e!m>Z;)bF?Q9;cZe{Y=&tpjl0QE$s{LH&Ic> zWsUa+^S4fWsUoau>sp%SJ)LWYvosXXtK9d}Q{BRUjjTP!KZob{30UX^kJVjq4h5b0 zTxPRZg4yBJ26)~|`-(eD`)O5krDn2RY$nOh+i}-LM|L%zPm#DR=$O#($Ue@F!s_i) zyI4s3;iQ;HK!JN+NYIvw9&U2V7Vnyg6**aQSumWc74HMRnZM<av0>dgNJk_F1LKI< zP5q1)vnOBJo_%$Ntu@>ettg)$IekecVDkt`xSrm@bJHY;if#Y*jhVt<grai%Jns1h zHW5Rr2sAgl@M#g+F<zx!^9?Yqo-ue9*N3{pI%%an(f)~6e^W?^8mM;_CU)^a2PGR_ z|J#(oa*3V&@y~hj!dK6~Wv$1I{r3sNpBXJ{(;nt&Udtw<x0E}1mRA{&!Io3M6#+!$ zHB75MS8q#EjiZYM#I`e)bl1RaZ$9x;_WNuA!wghxPw+)wX^X0o#TJHz8=H~IBk9ZP z6BDhRn+>4wiJe-sa4b=`5_%p~@m^=wH83jo4G+!xyVIR(mMipaOof14he6)X)yK%? zT5Ul=vA&&Ol^$szDhXMsTZ>NUvlyaDndMVvklIB!TAkgxX>XD9Kt;X)@zQA)?Xj}7 zqV4)#VZG(>ES#JyFe)cRwH#0z56i(1gh|GixLAZ|Wy?`)y?I4xc-`)X*Q<LEw_;i` z`qU(bQGQxkS>>GzxPV!%{44Q+7_yr*PG47VHCHJc6SVCD_57*`o>sGMiU@yCFPW_u zn)grc4r_X$eLr9#9|9y<n8EYe)sFbQCYYAt@02uWvb%;kN53FExq&R-C+p{BstHe2 z4Adfi{E^vcyTMrQ^Y;a47D-gbt>{byvIu`DZ0VRj7GcO|J*(tEbHs8pYpOnjf;0$P z>9S>8vsqGjonO=REq<+rWyJ*Ya2mF(5R^J@tt&N{Y$740(8VHUHjBMh6FvbFPyVF- z`1xPdb6*(CQpN1qbzY8-1KR<m?EGy&J9vefANS_vBp?;WP*kq0`RcH5Lc4WtaMTiK z+Z$_p9okY=Uc8gu-*;XxfIU^tzoNVTH({;zjzFp^t#&a{202A^^Tjr`X;uxDFFoe_ z@&nd}RF4xex_-<f(wI$iy8-`=B$C)i;#2yGi}iDO>7+4m|8Va@?S9wRmNBw-Cl+S= zyyI7!b+xmG@wdfA%K?dvSifyUT_zUd79Y+xg2=OK?K5_`{l{!uOu)tW>;Y@mo6m0@ z9l1Bt`!6%wq&zWFR4%MXm!%St4I))<?OUvCD{Igt)&a`)f<a=_l9+&4XMq^3rK5Mx zD82E}KKa!LCzMTzH-Nt!Hy9<WYHxtQ)p}>P_-^{K!RZ_GIY*8@zJ%gj9v2BWOi<xL zJRpWqw1ZxbEwz4J1N2xNe}uj<A)|@VI%Zkv2BlopZeMW;Z5}hbNZzqZiweBuEyYYn z59s~Q%D|rQmOBmn>ci`D*4<m;j_UeocBF>^U!8{sSazT!rK%f({7)!6R%~kb84{vm z%F4?3Vs>78$H@6AXi_Bqx#ou)7@Ru!hb&@c4#!@#3FuI`6@|ckeM}h>9c;g4t6Oh` z7Fs$f@kFH9wZh)6>Ii^#O9qdt9Bl{zjtHzhR#o8nw2XvzK7*d;D|<1eg!hlV9bChZ zE-JFP(?Kmf_cDKHXXk92hIlY!!R@OjC&EL<#6+E7f{3!E@jBpua{7Fi<<Zlbeal=R z4<PH_6(bEiUr3SYx6Y6)YPsH617^L_ElG#QmQVOQb}PC94ws^5QEKc9&<>F)6?I>% zgpaD8K81yhtphcy|0??}&jaiJHW+P-){(AqS%^dOm2aWbt5=eDMWibB4t9&{+rot! zzS4L+UK8Ecy3XHrI*x&E`M*uqiUbBG3|r~UUx8j#IL4k{)l|_!`VW|Mhsc8o66-#v z;nWIyE3un5G~i*LXllQhK0X^rTj-LdJP~N_0q|W!Mfl@rV0KH?h}P7>+2no_<z$;t zHQdv5IxMJIqe=eWl{oM-t~vT*T;*th0Sxk_sa9{HTuSj~{cMl)DsPTo%*Z+9{%T_6 zceq$@ty7CodnNUQrvA+@Jh_7FDQbq7p4vbw*vIBt(=_Pm%!%cfgAHgjw)I|$vjOC< z!1L^ZR*@HN&vMa1d?6!oiSFNGj`o-^R-97N-aP)jfLW2Xff3)*kCoT_Z@qrV5r{RW zK&O6qu-}HS29+}-tIB0r7uT2O!+7mgBv|CfnXG;=!<<x<*C-qw+ZSp1Jw9J=NYXy# zi}XhiAjxaqdrnxxz#^lG2F_TqAWM@8?-Kq)+S$yzT3*L00W*Fi2Is?_7SsA=0sQ@$ z;~BAQ(`oKM7f*hq%Gr=o-1@R<U_^B+Oy0U3&)b%UhCVR=3oPFi)ps;h-~<;y@QK$P zzMwT#aiaQ&BsQvM(uC|pI_RdV6Rjk{PYSWN;W&6&S1kc*fxp$@U;7LRew(F(HXI=; z+@xH28!U@<QhKe#8(!>eS}D-&;KoxA6L5&h3+GU4y4nonnY1d9AP3KY>K&h&c>|uM z_V(Nmtz;pe&QT^tzkO)g)ZXug+8B<i&9)RaS``d=XY*WH=SP;!U;zU7C02^rj1Xyz zmx>xIwNI?mV_FdYOwLMng{rhXSe{_-wx-WWE7oUo2enxjo%)Drx5OHy@P?nxe*#Yz z+KH^sRGS0_rkp7BuB7HtM=p~F_YR+_EhbKc-IFM54350N1n?uOv4Fb>YF`F*B*EWe z_9{Y{MEa3$g={X*x`$)U#_C%PnkDR?Jwb`9>&Q~GQS)icu;06#mfX#=ot2G4|AJ>t z^{MgAoJb%bbrcru2dPPx$x8z9%;X2wzdf?)1F7-|+db4l4nn$>**_aw8i6~K>co^- z{y+<N?KIn)e2K8uZxP=n@%cUUvmt=X3(Ytx0MqOZCep<YMm3D@g|W>ak>cxyNgFG| z#XEWc=hCNx4{wu!<*GzjM*KsjFE}5iHd@Pl(&c0ctmb$hD3Vh<K5Jn65W2u)+P8r+ zssZwHfn9fFIJ7&>Uo9ssZCL`(S~c;Wk*oQm=8wUjCHd~>Gaxpi#AKT~mKlF7g;bgg z9nLaupWI-mkNvayp0hp>yn4}ocl^$HY@kM|)eu88?}pQ9FKKds$@%4WcUkrS|1#`X z`FOCD3#V&7uG%o3Q~CGoOV;#2cceU%UY|N0iV9bi(ap;n)|16JS+8u&sm$dag*=<1 z``XErOqkV<CV}R5Z1|CQmiUv?cq}{rq2@`l<m*HLxLGb%J^jK0)SDp&W|oSUjW;kx zHO#Hu*KiM>2uD7j*5-C8YrpW#$AWv~l?R!&kjXYHTj^El{grMNujj@6wjY>t7I!c3 zn0O7z8ZZ%x06pDrR^6TwSVeQHcX8p${y@i#CGb8HuU47wVv!wna?s#Rw=rLD>tMv4 zEosTCEttZxIInT1y}(`1Q(`)*>A_Rx2iec-ul&6^4mA3lu?RX_Cv@1)R8;iu)<+9g zp5ID$;r}KgHs>?nEZm}1tg*DVnsMb^B0sMSp*<*S1z)ZlvHSuU_AP92$JdWD-%Mw~ zb)dc<cH!(aS0j-u;e|x`j#{Trw!DOn?MZQ1gkDLv!tNN8J8|3kIVPnecP+q;C7S{I z-DP%yozJObwD#`UZi(p!{1I<Q!yHseGpixrYRkW#e}8!60rwB08z@3-yx!o0?cBXs zRknc+@!H83pHiJYxvpQPq)R`n%J1)>oM<!0c>VI8+h}fx6G?dU@oUnwoq{LPhIA62 zM^tE=dL8;2kBW5@UmZ+ylbsF>onPd81B(BbKJ1eY;1j(L7!0bRrs#;wq&IvQaz7rR zZsL%(fm6f)9Cm5|sq_|IgskXl@hbOpV<`<aaj;1|dfW#DU@@Kb_vpKYS(a&<WTSTt z$AX^y$`_uyV)}pTp#3L4(|^4A^@QMriU&>p)q()db%67V>gix;zjzZ}EaNK%O5sj6 z5F8LBZM)gm2Z`1EOC|d6UTd-|5jISyHg%!8a_4x@0LgI~*}gmx9~#L&y)cDy$m^WD zWHeXw{&ygTp*-C@_&SHyHJwx09|Ubob$Fma!09N{GpBu1u&AO?mTsKx<@EBP(>cWc zfA{(SL_o5FM3C4BdcFQ-+e)TihJ1Ms?)+~0^pbMFmAr<U0D=A=f589y4el%Sf!fuC zU~3k@f@a>ku&sr`>dRbWUGW)Eh1w?k`(#8bFHfqzB@G3*bKejzy~?IQE6_M&w6EK5 zkyo~|VzD*EorYxS`ZWCUwr9wsGR%Z`{hKKw?nFXc8`qJG$lIzebGfJ8!lkJojVuKB zSj3-}W7?H2AX5wa)51|Ivk4xrT(J#*fX83WJ4+ITm+Juv-2}luXhCGlXUdHm{foIQ zRA0|JeZP@*kE;f;kl5Ea?cPj{KDK*<62B`%qCRKFKcLU?-&<TsF~nIH$E^YK-%Fl0 z`UZNfQ*m`&5_uogJpyZUZ^r*@lJ-8XBK@y*J_IVo{5~~a!qDp8EeZWMld^+fMkrE$ z(7e>XS*2KQRhA~-n3`tVc*e${>F%?kAn@i&fn8yg(PBsibfnYCmWdG7t#m89f`BkK z3*7nhcKL?HtY)wHheiX{aR1+)w)EbamJe~68~K<^UVTU7Sf_;12WcZ@&nR`fHe+Ug zN$ywItEwFs)yc^xcYV@#8BL~6p~zJmjOo;586@fhWizIoe{vI$&dIQC{)DmrbUpeS zeOT%mj%9kuTEoFnVrD&>f<E_?IZw!of2|kaXHrZoc60wyYBRp;<^ID?OPyt-^9G53 zdsz|>ik7jZchc7Bm^5b>I-J)Q<~Zxxv&sHX+kqu?ZJa?91EO+i*`4@XZhz&o_BS`x zt0cjg^)|9VXbGa{LA8tjy03*z@oU#=ansqmvx{vm6BKsxSq6%-Tc3?gWc8pK<?=DZ z=XxCDx|6aVoncqS#=wr*Y&*O%xP(#!mIIT%zwjb`)JEZh{i}l4?^Ned1?DSg8$Dm1 z!an2nf{w@Aadc@yzZMK~d!;r_OUjg%3*GYmpw0`|V2yR5`*+l0V$1+Bu_N2}E6fLh z-lb4Z)8>Mrq%t#c55Jpz`&tL%n7^o!WlizZNo|S)n1BeiDA^N`;dMZwg2;`3(^>_e z8a$V54NR+Xg1B2Q=<u0EQw-m@joA584f!_$G<C+JBg*sO)TXmusv5h#7J+o{u7uw) zzdskT1qo)~Ve>!hU7_1XCyOmFn`_GyLY%~VRmF+{Lh{f*WKM}pJImK`9y`mt)239G zQG4hc5|fXWkq)(fJYqAiUQOIq)uH^)&;0+U#UlDv7@#DsNeRio`<VHLi?5QbihNNY zjjk)Yg0EQnuZJeZSllgZ2|ua&>V%R%W3XHhxl)kyzC<uY@l4R9OtdOD2wG$zJ9^n? zdOG~jS<tTR2H&lqAr{NNG^BrUXvwm3sziy+Lf4^&QzWG$`E4*~{wj~H2}(uSz63xg z!33Uvxt}_E^aa;<t1T{sPOahB1h6w~)YlB6dGF#-iN^*sv>?qaeTP%D-f8ngqgD>Y z60i#UZPr-DK;cyhZJU{w;Z@?WxN2s}Co-8=fkvNT=wx#u8HjTmgp1ojXEpQ8rj^cf zm5;DA#K<D0IP2BfX*ZL{^!*+F1L(!FZp%c}$AWGWAL3*)BTA})dhSa@7Fy5iFO!#D zcyMPQ6y;L62Y{9=B^L3ITpj2i@ziuYx^Yugw;Pzd=c;H|5tO?b;bFb!pB6?bYWnN~ zyi;B;&K>-y)|t8kjaQm=RwE_}Ag4p1$^-tX`S}D}LqOacH6zO|utb~pjl*&>8zZ50 zVS-!E3@YE+E81r2<ArJ~-j{c`I5x5>?i&rT#BD~zpGA0y$d3F&rpUBgv#I>dV~!ht z3C(M0dNY;R+?Kdo^@{OHT-RSm4!&#`OX`uJM+3`;!>_Yuv9hTmhQF=ZU*A*v0Lg?? zVR_4|1GVsU;SH5^7x(K4qy4R^f+MWBkgUZ`6-d#)3-DjRUO*rWX!MA?GDU=-v@-87 zrEWD3!Mhw@j7^E(j7sZ+sPRs4{>FT-uR(?vytZ9S`mMEoeoOQpGJt!_w&MZc?6ajK zn)vYyRKL95+%UZw{^~(bx1Y#x1lQmWP(8nwJ&3Zoi&AmVHHU{8Bwnx?$t7*G`8+wI zSmI-Ud^2)CK_A4>rm+U-OhLNY<SiDe$^(4e>`Ncny?-oN&gOkvVG9im1mik@<Ul6< zRwAZ9>;hri#_Ci1O!^~DiK9S={LKv#|Bj6a!Gtog+6JDwX*+qRP0w0ud4Kl$a0HF- zfW4+b@v{Jv&RCK#UMe!sZ#6)I%FGPry;BDjWMi!v;(VFUF-|uIG~WjZ8D)ecOv6}G z^%A_&yOJM!uB@CvIfV_of&_hz%L)PP0j6gRVmo*&7hF~x>sx168TxJ;zf7^dI+8_L znrzoIs=;d(zn7Az-+Spz$FO$EdkA$}BTMBmd<o~MRwR^{!&@=I$%XI_@TwilM){hB z<@sd`%Yj-kO2y~gE|B8N=a>1<P1Ga_-fpn+psdLQ%Mfk)aNP(KFKWqvHQy)uL@z+d zb3B4`ASX*W%Np_wnY!iLF?cmvuJrazm>6M(2ZW_T`*!I8)pDz=YkySw!yMs^+psb! ztfmRz__$WhM0hf8-GVPThg}k{ZZFTy_K?G_w)|!Z%k^1JIPRnibT5Zbbt&Q6zBmU9 zO*o{YxAu%U^m2YU++u(E9U<CFaP|d=Bhet*Jy`(0bt}nTV1)P8<XX~~@{iKGU0ZVy z?F%(RuNmGkqCtnKgC8k#h8&uWsJJleBDq%~rAC0y=>f@rsS9y>-R-xp1-PNVVJA?k zwOL<d<h$-mI;Y!IKVK0UFSRGz*}6Dw>RuLg3sqw|WX%K{V~3+F*20GWYJ0DfWPd?f zkr02cU(RRa#Y@sy<<IegcY}Ps^P!T1$AiW2Y|##Qmg+cfbD>!;Xg*XmJBh}rBk?dt zaTx56#w8S2SQEzkla~lFSU2iFpJE*tyUA8W2V3lZM%|)MGRwZz;Koceu4%(F5@I%c z(E?U&a;&LxxcazQqK8V!Vzzp}H4YT(J=Erg1xGH6bTGM`-iyu9H(h3qE((9Y`nmgI z@4HJlHWR1a&v_7a0^&A@q9f4&`ASy1wlR4qLFguR+{b*5)#obLuwZ&Ud|m%C^GpK- zkd=|1<f#1l{c!?y1#BoD0)_*iiiml5@}NA3L*@BurIbZo7Pa!-D!Zm>m|?y0hu3&| z{mrvXLMec52eAdJ5rUlE%Ew`4@K(d=<(^?r&H`7CgrS>KjS6Q)fjaH@>|Uu`7KF?; z6Sa2c2mQRc4&G22_u&fnFT;Ey<Ff!Xk4YQL<K-lUQMJ90de%fMyENI&UF+v?B~J9m z^&#QOrg9LV(bx;-mg%H)NuN&NNGqRfpO#+iX7+rzEhzX#)=+!@QhDm2%?Jx(4>Xx> z6Tn#OIHBLfUx#U3^69?u<0^3O6s78{sj?kFTkogfk1%l-5zPS=2Y$n<>xSjpgB4EA z|B&rKCS;FR`bxYPve6pdoIxEOvsgW7=^h8nF!s@_kMgu1*FOx(g7==gc|&m->Jg{7 z<t3pyS6)p1jSY~bjZgKHRy?eOAFkXB$r7!{H?-mBYGu+rw(buy2`E)B-^pk?uv}qm z(=XS+Ig*$p$PI&}cg-~XYbuO>#BcaHIxiRJxD>7#MEN5lNMwJOMI(nZ%-U;fg>;$L z&F{qPDH<&#_rG;U%g3_R>l-}9&kQs;i%+Pods<pvcMQ4Qh%2zG-n2>7^kdt*jWwW$ zKj@x-c5uxsPa1jhv_7<pd2F|k5bPkxE0W!yu}vQ+IOAA5P2149kIiCW7jp1pac@Oh z?5OcLr_U6J!{X1PI00vl+OXa3-L*K&;9Z0#*M;|S5yDY(m5v&o-AAc=0yA3}Lil;A zkuTO8@sx*#lwDoDGTDTnLdL5&<F>(!e@M!op%D7Er1^d*?9{A)=eC`_1Yx7SmWTAj zFB?JbJKKg@+t0^Vl6OOZUlw-q045Q^i6y5n78`g*9oY3zyTN)&<)Nz@gEm&zdto%& z?!qgr;{~q^##b6PUsuB;_GO0Xj-|U2$W{lOJ=a@>STQ_fznh>4=b(7V_orHv@2(Kb zp8=P~3Vmgulw=`Wd~sSI!$U{8h~bspgl-ReGA$5(%%!k1vAWF?$9p!wsk*RbQJGS4 zG@PXMNjQV?zDP8AU@`e}i&VsUYBkUx{D2lJ_Ab+dmMvTU{bb!uV?Kse+Yzw|n{0Lq z>k!AY#dpxI>?oyH{Mw!veOKy9!9YV{_z?Y~y4s}&_Y8^G8|<W(@QxQYo06#NeIhOK zdDO=Q|Na>x_}R4}DjR?+%nHroBh)Ta;406Zjpoonb;h0a6}4nOScP5(^}nc3;1pxL zV^p9vuCp%-Aitm-P=Qiqi?NFFzuTNu^Rp5-fuk_}0?gnIGywo&XkvuS5mq@W@Ilou zY$Vpw<CosIYc$Uny{pQxiG3rW$TJdGU7P0T?X*W6JlT}&>Q@TYnns2DT1Q<_R=D=a z$cEMov385&hqwy*AMYuyZ6t3#@?hh+K!NeLeKx{4V4<msozVM#8b<ORrLEDAcRo(U z|1~Vmyu4D87~KNknz*dCI4@B#D2qu+sr<U;?=ZEy_qg2u>J0s%4OsF6?Wx0pgnRT| z1EBwq@lW1eJIXl>^J~sh@kBRv&^f1%7Jq01dn2%H9aFz2VQm=?9GM?+_k9T58R}X~ z@1OOmj*<($Ipf`0&9P|da+-RybmyC?&!}rI`MpPhwWA-Y6wBC1Dkxcl`AIPM7HVZ4 zU1rI_uF34i)iV4_MZs12fwgOPsmnRCyZwPBXF;QXefneHLj#)onFs3!0?<+`CL<yR zUa}Z_5Poh`SM{`RWl^Pj-K^&-tEo}fS`Gk)d;vuAh~PUhW2=@{JU;7!h2*<xR;sNt zw(}9Ro-d|OM)iprqCK)ZVZN>~d$;-@#?od((~hd;e=NjCN%xt`kdc8PdJfb<BwEWo zL&sfkCE*^J^9UF~I+Ex?i5+bC7@l;Ws%znR@({Qc$<hF0`xxL60667O4fteI&pX5) z2#aG+3kiuQA0SE9#P*$WUh9a4&l;M|Ymn>lmx{je6zw!thCKJf@<6%})UrJG1M(uJ zD_a9@%i(4nlQjKy7%k@SB7bM4!ev%?;MqN<{(Go+;VHL+RW{Sp#zuNBCl=J*3La`C zg>R+7`(ULuz=X6!yGnzZb3fVV6jI8zDBjKyln74owHV8%Oe(P1hQ!y-j!`vzZD(Mv zxxD5F?#<|ABR-kn>O<KGHseTNy~VTbYNz&A#RW{onwQPyz9peE)~>f{yWtG5EY&dw zmWIv9qqWA?dxAoiK~XREo&m?H^X4CtLNh@=*A^ZyVC3xHT`1Ui8eOE-wf8jKj~jUi zsD^I#m3o6h_tsQ>?x9%U{X|{8A1a`w!_HIJ|C-=NVx@}d0D)MgVzQr2OXhsqAJK2D z`>?=I^I2;#d_l!C-I=iPn@Eeq$65@a>nAV6VFNx~SqN^sH%Kh5GjRi8TA-^`eEn{< z{c=0xt8KiH){XnntEJ0Rm%ave)|D!{%seihWpgbRnCGgAdu7idb-vL~KFB#x>FZ~Y z>7-cUf(11icq+sw^4B3r$1z=pD?RzyJ*`2aXzb*$f}2!P=hxul!#n}`)flQRz=fqe zk#Q@FYFajtYFolNsQ9rfFOwU0xs3fa5>AjlCreZ+GW}?0<p!)xJpfCcEe$oz!k&$M z;PQF+ID{<YU7>*?G_wIe(0~EIuO*=ReLc1zXYPWHsUCyew<+SILg(_!YEy|&?PtG& z`L@+qkTalxx&<hb6^j9+JLqb)el|0Fw3oKeY97^C9S7MGb}+X}E7g^qmG;w<?{tMS zga9;zGpl=Oc%@XB(nj5y+XsK2;?ivc)^e{mrmgSUySW@3*o|)<^QI)@<omMt@W^oD z6YqHI+0${8)M2hB7#8x_MB~iovuY5n2cV|Yris_Uf_eiM_T()m_uTlJ(kZ^6$z^_) z6-X*P-a%1zgw`Ad_fw$}sK3w+M0*0l;?S0nP;5F)lCFL)-mtPut?>5Rls>b2{h7yo z_Jjxg-?;(jNYgmk@tX_qgoFN;we1$wZ;v+6+h(s4Uc}Sa=YDX>IbKBx-~f;j09vfq z!powfB?G}l*1E!T;`JAB>gzKx`@X4i!h$}PBA@{a13;iszkFv(t+YUO`qX#J`RdnI z9r7Hf)0CYgtAj9agXk=299yLKg{rN7xL^_|oWGIRds6)3^@#lNH}YRTm11-ZJ1g{R z{Dd^^UngI^RH=K%8mIJNG#&<?isH9uV!H0$4KS&WAc@cB6VkBYtMEL$ELWu(OIv;C zVXAN{IWp2@P2eX>_NoLhK4B4_^^RBWlUJgPgjFpM_lPMw+2}Tg3+ZxdB8<BF!I-l+ z;0B;~BFX(av3{tI1=B17JaLPzkZ1Y9sJX6^@l+@nQ@D~y5)72DpB2D=Q_}296!(kO zOVD~%^>9d-y!fRxX!l}`*1kWBb4CC!Feq7CXgg#tjxRA1TJ#LH$?$gPsjNUUeb;%V zAyBiM^Ew^B5@~^q2^KM1hDQf#dSdn%s%*HZ^|;^`TACz9-WRS0IoNst{4{9p#tS7~ z#XIytEQ+$}n*pjw++$ZhyC(54zI)4JSvXWwTTn&dBYbDLxa^Kl;uH7>dDN`a>u56{ zogPZCMKxaA8h;Sd!LZfRKG3EeCD43vXZ}Kkj=4MiQI*;=g{!UE@f`}SID<&>&YIj9 z81zM}p4gqw4&+Evx8f6kWvY1)M`9=Vp!)W(r6+%Kv+kZyi<O(%Cz#mB4H#W{7Tf?` z1IL~$T_bXpz->(r_q;O*FpC?oHTXQYqmO%=`yZ$nmXwR9#_XrD#Y_#*yO_FL6?i&# z&bxOr0AvfO_)4Ybh0%D)zls;sdd{Wn^%r}_^TA{MJnw#TcOnb@^XK3h`Z%8&X3oLW z@hBSUhPWxqelo_lf0@fL?ycO}7Dv@F5F1&7_v$oW6h07S3U$u2%+Sl=@{TaEf6w-c z(sry4;XG2QwbpCH*jzuY-;rJ7Vw$rM725mJ+UnomV2X6W(t^5xVS0y1OVf1a%k+Ka z!n#lev!UzHohjT=l`jM3@h3k!ufT{<th3sbCpX)Jv5A~VB&$i$5GwNUtEB{1DNe#> zPvi2Pc6`u4tWZv+YGz9KH(KT!-y{J-7Dx6Gizmi0&KtpI2~X~A`Q2j<&(LUw>h4!e zxbqEB^OwI@Mu={xF>QB%2`Q`4*i(F*(u;{@UD$?ZVc$VG_1w2x4U>UXc$@ahY-Xnp zu`K0wy@#E0FmFx@CYtYKR2Q9<{_QMBD+ASk6|%##4**r&C);2bYUq|4Bh+)j_AhIa zHYk(oGuP-({94vb11{j{EKKDN=As<f_U)(HlF6|3`3!|T`VB#WO`B&_+$hfyb=lF+ z-xsWP9mOPB;WOqR&qKPx2r&SK`@Py-ykrgbfca1G{n@M_1I>&PdTlov_YvNAf*8-O zm8Qzet4CJT!6G}e?$9%7I6_zFLy`)8AWGWd=gS^fbSZKrt08PvA^=cwk!;9({tTGi zNzqs=aVZPdA;UMC&{w1%3|DU}Tm||&{VgYveWMy(yy6{tJ7Lh%QSkEwmgx1wCNFYV zZPivI9Dq<gt;ACep7S=Ba$Ud};jbEe-YYE7ydF{}8((4`r-P^U-3vratK1H%&@FLh zaDIfRn8gc}e+oO`ukuen*~W{FGZJR$64<inCcR_zGR$Sh8y|Udz38I>nuNy3D=hHN z0R&wjD{e>Lr=>FnKql-0axE+g0$idnpU20_O=tQ4^Ne`>*JtEUuo!6>a1f^_fQ>o5 zd_4=&<g=c7)LOD<c9^`=(t8Vve}_V!MF(==J$sgUJ5j|bnIOMAw#Vgg`&16Lru+Q( zsRjdVA}f@{2XLRLF<k4D`M|YmT3Etv3Nd_V!eAM9sCZVTfn82S6a?xLo*_wm)3Tq_ zEV-`j8j2*+QE6~W1aaAdiSDuHX=_xy8OlL#yRXeG)>@V{YF#`iQE$!eMCF#R)c05J zrFB`B$f~M0h!r-6sE$0YVY^%<v8+BPBB=T#=(;=z8T$BohCAVTRtU$z0<D_b5NYcB zZ?>!{8?f<~#su~bsVS*!y=ll3rDz6iu3WpXcOQo~jXI9tnM{CLuA?%7b5R^((OnlG zE%L#cSDjt()?%2cm-T}IHndP=m9v_1#*2VRWcmgxvXOP_v3cN3Ttz?{xyojPe*?<~ zxL&BWlJFdJxe}$KS~le1?t(8)Ti4`QJ2TnzPhM$wL74I_)5Qs$88>vw)yZXZEnT5^ zQ_x|Sz6e^g=%lFMvp{vJftosI(T8I}LemRqF0(b()xP2bDTzVu*{YPBL5wmCYSY%7 z4ViuOVZ__}?)6D=mnQ=;3Yy$_n*iMYQU3}(k&$$}7T-JP;_>yd4{KxN-nH_pkF@!m zMzWT6=Dpk+;&}%zo>ngqqev6T;;;3tgKO!{|8;B6NRuTKtH(B@qFgrj_~EDRSu^IW z{*NUj@87ny;gfXXy}HR~{t;;bs_oOXy;>I|b|mi%j4bEDo&h%KRoCBCPS<a##y{1z zzI@<PC(`|X9z33XXhgb)nDYe0j|}uKUH~Re!rj@Yps>H3W0xgw_ww*ky`xZ5Z5ZR^ zWnPDa@Vd6sn87ODZ|mJ`YBkVy%Uch<;>+58yy$~%2%}ce^`Bp=wAXNheL%&T<HZSd zAO83p2crP~$TKgui(8h!_sve1`AaYHZarTMZ@)^kjn5pn<CP+{LxU$f?o1PvG5WW? zGPYzUN?hD6tZW~@!#&nuR40msUKSG{VD_jm{hw2r#)We499vp!8mIdv$#q!X+5}r{ zgPqRI09VW+XC1SA)S9Cwz*hy-Rcu1>*(6;l;LBY$fO3_?d6=o8+cev0AFBtYkW!k{ zct`L3lDm81n6lj-<67qsghTeG$9WD&OzDTe_UO7k%m<;kpob2V$a+vMkbWs9t?;+9 z85hwK3BiZe>A-)v{^ZX;WdAiurx=sS?xc1%^<0(8IO1g2cBF}6bKPz54?=XgI$OmT zVBJKof-flK4_m9kPV0fvL!ty=-HdjU;#juRsfZ!<E9a-ctWBLI7_djn2n3}3)MPZV zJC@GEQ*G)Ff)9Gx@K!miz*7ZR0%&TLJMP6q(V(m5S7s!4i!NRa687JiO5gv7EVQ{w z<J7Q49oOV69ee<|Q8*%7LYtgc{N94b>H>xGtuIU43@Xe((!KgqpN7pNmmbiEIe|lo zC6}4|dwWE8yzzkFC*{t)c?X7?Zjp{>01t?+Fu@I-h86ty<CE4b>zvpg_to~<{|^z^ z^s-VsWP&JCZq;|V)e>AnJ7@D_Zu7WmOe!Lq&U=(s`9s}>&sU{rRsd(9%S31My5A#9 zvh~y18X_|Anq0155&Vs+*qB~`UK&#Vnfw)wB(wWu!cR|S<AVwTNryf2)c|W|oXkbU zSN)&K-|bljjd%5}2<GmfNQ6^%6k4kYOC4|XxV3&|@LThn9ui}4iYIo2{9h`Dp_VrK z1}HqB5bl`xMf>78QPG$0_V;GPpr4)-7j^)jTYduAGm372^ZD<pw9_<TX+YS-^G!NZ zV#0SdKEzO=)Mdz9#An$FC%W9uZd(d7c-GybsS^ohgPOy2keG5$t2UCqZE8@BE_t>8 zG_ry~1(_CTY@g1nOV&((F8KUl++gG{q!k`J5DWs`Hj1~-my2l&m;Uy*c{pxvg2rS1 zi1i}gy8RW@1%wU(!VFs_0$t*`8r-^frv^BrTQ=dVrS{p~EzI9r+T31VF@63~JGH^S z&mul6F~>zIp@`bd!g5GuRr1i@<WAE;mn;Uv*un11%Y>WFUvrD}Z{G;>hOwa^SuDO; zcHc@I+_ITp)qiqejx!A}-M$}nASM2?=_^^+tsghm@Rh31hF6TIsw&*<8PSV<zlP%{ zk|M4X;{%&<`(k)saCiCfC$qN=`JOTbFD<(1G7<^Qq2PnE0|Yck3A=+CjlXQudNFyz zUR7j5+ThS7&OyptYy_rYZMVTu`qQw&*ymn#<cGDeAK-X6xCh30@a*!liqWQ4_rdPL zexA*5PTG9n2+01ity?a)3%*J4?wG$C8{m^*{F>aJ>TQ@+<Sr0r1j&KeRdtqqE&&ZV zeF`j>SP=r%KS+v`-8I43a2xD`(B*x3MD{h5*K~jgS3x+1<>z4SL*Tf%cylfSQq7e~ zbY<I|wNH|6<+7OTk+{l>FAG%UmiY-U5da&7^jRz4b!3|T@7rJwV)=NocJ>;iH<1~h zzCB&J*B>X>VzKt|bnWNo>bjrSYVTV>^JnHQcw*zS@H7iP-#O_|O{(IN<c%eFfGSJ1 zql*W`1^yQaTJHj27!N5<bpFr%1`uxVUlxJaBMJGWW?&|hzgAA~f>dJL{p(ydCz>%L zMcc2U9`VqjkphwpM`%xaXNMrwgz&ejgG#rNoUosttgKyXKbZS;2wWGuet(KZ@6mJN zU48x%!OMhI62#3Wa<$T8z;^yX-`$sTuKo%+3HNS?auR&s1mR%t_x3s4r5Dhzoj3qS zskLmxC|*8*)qgoiiit=*)wNR*z``xBzCaa=cYM_W%uL%YpW=hVO9=@V4{N4hrkU1o zG$F0_pDb5%*W*qz@B&zaXjvW?4oR6x=BoJDj949mZ)(tppKsfTV}=MQoNsSFrmDs} zXKqob(4L_sKI_zP=*9?*^7pOuebO~TF^LhtPAbXeiXF5jfa|Qj*`GyslOpj|QmazL zl<K(b|G@%$)KsY&fXNQ)5L{Y@o?D^(ZICR}jgz)!KkU8Jh41#KHLoqiL9$}A8Q?3Y zP<&=Wz6UyUBPIBkh7YCw^g9(-gHDd>cLd9ddD}n<+(te(KGtjMr8)QatI|;{-D-WD zN7eJeZ0&7;sF4#27ST}AmRhW8Vxt8<zXv$`YE5p=60cxYrGL7%v`%eC+}_^fAPa_9 zQJq?&Dym5=TP;tX#+Giq(UF9G!K|s-)9ajbZmB6rBYWuB$kh3J9=de)to-FWr@9P< z0Opmb&w&b4uCm#4|Byjy>NNy+)ATuSRW|AqF2xE6To|`&fF?s@BKXtMa{tX<cyx)? zZC$n*)~7c|FY^MKUgi*Q*V<m66SwgBT2_=R!|>o<x9OwBY-6#dHpQx~Wr2yk27Uf* z<qXANN-g&kPJv<Lr(jeCXm#haoq9*uISP!8=Ra5-kMYXpHea&Yw$MK;td8P*BduJs zCI9#MtU7nMYPF*-Vt?#KI@*g-o1Z(vSo(VLD5n8azi4Fqbh*enJ)93U9L&|&HUSjL zjDhUxijC9W0CdN8-|XIs{3d4^NeHmuE}nQZtwy_4l+CO8VZ!RO%|z7;QoK!M4m|8x z6HYUs_4EtsnVjysDW=1+4-}hQHWC+V&Sz3Mw}F<}M<%k-2a*!`s!!OzgRNq=zz&&@ zMo7$6DGV)9vK7e{-QQ?G43Cblx+LyqX~2C4Xo~p=5x^C>mNap}ix`sZ1hz8(nLelR z-Z$A;mc!YGsojA>T71fx5HM$5)~&sjk@P$6?TW`c=(e5SR2#mdU}53|5~>OHc26ex zR4g{EMQ8n!R4PA$H){qJJkoNK^6xp2*VRq(Ruvz*Hd@E6;`sB`4UmTQc;AL8Kz992 z!6*~kmT0ip?g_3lAbtc&SKyKt={ych*#OZH6?4Eqn<UDgE>_^P3ma!>^LNS(Gn$FI zAODa^4sdMK2DnD!j(X6yD&0%Al>EY;r;}5Up`-!4*21R!mJR4a4i4#soSW7FB{9Ro zaEIWO+i%A1)1h407o(45YfZ9ya#_^4m2iO7Yk*m}*3jJAh^R+?JA8n#<X9e@MhRaC zA%<9{z&luA2&l!G3ph}h;tww49su5Gr*w>F9i^Bh(;j|`G}GFyf>ZHu?W1bZ%g>S@ z10^}1X17kuw9fDC=eTmpFI!R_Rjk}7K_OfaOgpSpKfh0Tt=Fc$JbT*5ho)Oah-P4< zh~Gf{Zk5PGnc%sVLmi;WY6zq*QYM{HJw6%4O&8RCl@{0RGIAfbS~<l_vAS4Haqp6+ zb^=D6v{dvgPxB*?V?ORheZ6lLxhDXl{S2ao!9EJ!+d19hOc=f=W^mdF#C<6QfK37f zG0xd5z-YS<IJS`AAF&E2v06T=on9xi!IL&Z(?ki}0Cevrrn0K2Ic9OO*et15k8b3o zitaQFHy-Jg9roPD+}3Kv_6Y#mu4+)M;#`w#e#h}c#s4PqLW=>^>lXRxhdZ}_VX`vs zO0&x;g7;|EfMJakiUgmFl=l%C3KpT+H6>HK`O;P+&OQ@4+x@QVZ-Z0*{6j|Otq0Rv zJ&SmaOfj>xkf?7WQN_XdNGAP(R}A(HqHP%g(C?A6Z(7eX+UC7+MPJf+u($kf0C2wn zBXd#@(7yh|Fi9Hk{Ew{NF{@qs5k4Wb+T}bot-!^|+IFkLben~S#!+Egi%x(WqHe27 zbOGd8q6y{z8;vwwwQ&07|C!CSR7cnz>Jvo(S%nOPOU9H*$apq;6;-cW>@tWD%KZ!t zJBAf+t1F&SfzmFIY%+138ckC~296oZQCo<!EEmz6Y5eFO;KBU9{2#I_Rn(`zOeos% zgKQ`5au{o6;dY%wpTsnvWPHx~ArvcxUZ$>8`TLQ8(7CtNq$2kHBhYXE(OD?f-C6=u zQw%h1Y);|N!tS$0o2|Bl3Az7`@rjptPC{9<YVhmi_hLMX!Tl@&mGD=Hp%ox8dPN|4 z+n(0fl569NDm|G-inh*k<X;8|*k@0+Ds*rLs-k4z`;6mz=-1nV=C=yn1)r+=CA0h_ zK5hRRe3!u0eWTRciNw|1=##cPB_na)a5%}0d+oQ4>JHT)r(|MYU@*ZMmhXDY;mcUH zui(DIn(}<q0YpXCoee<Zx^%K=mwgZQZoNDDExs!yBr&m?BACVP^gR&w!oT8z<Z0I| z##GyWh%G^TNb=JC_-YJy?Y$QlR%^mLEVh@Go$K+o2-Gy_oW%>wf>{3m{fF$7((RH} zEUgY$Elu#LL?<a$HW#;iq}_O#)h4H+^Kqzf(Nfb<dRRJ65I~AuypCBV-G$!{rrk0k z)M1vZOUxL&nLV660N1ZgAg9BRV{Epn-~gZGa{sG+)%Lx)6&G%Gnh(Dd4L19|Qr2x7 z+=xj$P*TeR;?H_<p!MeI+v(0-CLral->D?1^XuZuyEo)$D3e^8dGqd2ov=)9`zAS` zd(ZqH2+V+IId%=9^M%^D27qv;qD&Pb73hltsL(CA%V{5N!x%lW_urr7%Eu*ip~?aU zXR84V<CTXq-tMtG<#vbM_U=PmHT#s%s{a;PDfW4m#6y5sPTLwz%fKzp)f@GqtXKW0 zF0`auJ2|H(ROIvj_-i=(t7W>`+jT|6EcuWpz1QVVKA5emw<ROkYD`=FL#8u%yT0ws z;^e>>H7MAR=uG0rNkz2jdLfnelWC8K)lI*CS>p{;sHDX0CkcJ<a^Ah2t;bi|_>IFb zZZmVf%JB(7dsS8FL~=Lq!7C&K@=M%B!Oi8I`}_@U>Z@+F@JQoW!`b>TQd0bbY2tD7 zPyOxidRRJgxLcpmf_9a&;mV!b58-d#+$P&fa6U(csi;;t-TQ;?NTXfOxIwA#THJ@> z&;0m~36>Cq(P@*FkDSt|<9s~nS8KWV!;yqn^&GUwb;f0MrKZ1~rH9)au-4IAo9nR( z6#vu(SGw$|-N5Z5b2Rd{Tdd?QUJKvvy>0*fJYr1S)}oxPH}QsM9>RVw&r;}X+Yi|E zcgU-IdY(tYvgMdg8YdEG=<2VEPh*q=_FAtxLj*$!rnD<P)f7wmGN0hVGmj5C%<>!) zM7U=1O>ZJZ|LlA5hz8MJaO}RczRMS9(Wg>>Q|T^s9G%PfL>m)kiSAi*&7@3I#hxVP zofu)e3b2wbEkUd|i@hm5i0aAv0rSpT8S}p#ZPQuoxQH-}pIhNCuerBb=LXWNgV~v# zpi<(Fe^YB>_%d}<=Y<yuRR8Hf@#ss9+qi6gHC(tii?6=1arU@L3byxAQ1|{T2JL4j zh=;#q#_7-*LA=uzU4Dl%bBSGy?z-4`pOIcA?(@d74duHxZ&=an(QG%LU+n>Ie6voV z!vF`I?|foatBMPpeD%tfmmfZ^xnW|a!PxXeFjZVTr`n|Ixh26DW9?=Xq+vJ#uvaMO zC2#wNu7md2hxdt4`(89<3T9Nr?2koILwL@ewkG<!f@f+)-(?RX)Tr^4wcarM-dPA_ zFMjg7K(O+6Dk?mS&tO*;+tf+QjMwF@;mJ#r7kaK)wq$lRl2lvP5*|J)w}>LJ3b}I1 z_?s?IJy5q-{M0sOCtX-gTT(vH`kvyg&`%2mBVN!X6xUETWk`i}((N8x`^n2P^)qDu z>cdGP#NsOm;10(|;Oe!xPmk!)E3jOt=U`|}HGO(YQ@~l$N!!N5Q0t_kYR@$9xVy*r z<)`1y`?i@*K$yE%?H&X0f&2yAdJTrw-`3hW4t%7B462?^@`b|MZcOWS^n9!)zX-(G zKXY|ocpF-8$V{em#f(=H2Z;={OWnfii&EoVb)%X^hq50Pa2ERE7P`;UVOiOpIrHuD zU-*|-C<OiPB#^1<3RP`)P~%Q3^Sc33+go2HFVOaC(qhS`S{q5$ViR)^UgZ_#)f&$$ zBJ(Hscb)QQ+g_QqRS<RNm1FIR$`##L6)>whKCxdR2B2`wf<Q%FR#K^YiMbO#sPW3h z*P^5ir_M#mK{t%mcz-peRHE!2V|Tqrse_W$Xob#0hCVKdn`9n87XxmdC~XGnuXf%d zWN8K=o`e~S-phOY5lk~vP0*@G>~hp=)g<UknuwlGGH!RB{*5lPVFZFjAn%lX#Bpo@ z)#sOJ)&4Jz3L}hAU&GqQ>9@so9TAFqj#@Eh1so9Ld+IEM8o2y!dKpa>Ro96=UqMD) zfu3Tt+^g(D-<wxM$gs^T^aRvH+(sqzWwndkx#wcnQNP4=IrCfk5QrzkQQ(r;R|3?H zx8Yxe$>uKUg+*?{WcOFOI`jZ|7Ubv}90JL+(qNgUqxn;-!Jp#g{;><E&H^NlJta7$ z9|draUjvmJ*Kc@|xt*^+8=q`7Vtxg>%m3GG0m*G&bl(cNyVJV-eezFt45+utJu|zr zq%j7yHGIKWtDS*{j*3{ZGs={eQ-<}_*LEj2`l|^E*d{at<%hVAf5-^h$8!}d-83~1 zU@Dur3YF&rcyRc!0kfqhWoOaCa)Ew_06%d8S@wM$RQLjS7D|-IENn^D$BVMN6<Ak# z>`o4A7oFXyA)qt_0Viti7+yIFdOr%z!W^erPReArB4^eSsJ(09tLPiIwLF)<VlJtl z;`U<a|1`RzE$S=pC#bBpa@SO>(8GaketSA^TDDS%dgMpV?-2pH=e%E3j0s^~%UpP7 zpNXCH7xF`Ib8nk}je4kLpT0P?yZXH@W_ChOogN+gX%6(<yh9k*7>$kf3hUzxg#0Rc zQc&2K*u|+&-P0lz=6t6rxwzjA%D)R&fAdIH?vv(AXT*)R8-=#AzX8Ap;B1O@kfi!` zA9!eu^#<3SlmI>N%tGgnmUGXpe_DK<PriK%%JhVwyDB02yGp!Gs`!Q_p+G}YEp&(+ zSE(=G)xkA+Tzb5utQRxe<3aPWZ@+Ag=o~1&il8OD@kx6)nfu*m>_G54m0G?+85B3( zJ%W8uO?!3x;>Ax%6(Z>5>lo3IW4yuHxr6>!{W!zQ&a9Hxy=_!48ymTDR)aSeSJ0DT zsNNiL#18^3()mFYW9#j>j$4V?w^-Adw5$DEmm2G<_-{HG6$maQ#Qd~?n#TIRy%pH_ zh8!Hq5}!|0z@^4a@(4VB|KmrYRoB>83cF)jp+w+f??FrEq0XNr(iX1CZKMjlGrKq% zHR&YSt}a}Rw6?}G-d0^;YjP_3bX$z+lbHaS-$_-r&Xl+pOpS|2bdpP1K}#Tl`DU4F zNR{aU2J+suC|y?t?2_lZB5w3xkU4&PqWl^-#e0_32OadyG*u37iSEf2h!MOQMP*0z zq{hlN3b14m?z4!s-6jFJfRnM!ukw%ggLEG~Aj~A;&U)PcNaPhoI`e+A{RwrNE^D>t zc*|XLK2r|peg;pe2eB^bCrF6=g}(N=iLglP<z@Os6r=b^2zVCLBXY}}U)UM^2ul8( zpt-7QU=*;^Ni)xtrs$LC^)j)^7zomDvh%mlKA+Pa;^P}SvZ9P&`ElYe4UCY5?tml= zX3e@`2v-^M@!QAN9>mI(Mp8<16|hN_e#aN4mgie6nxpUPNc<4vw)488ezn5IhVfT} zDy0OQ;Z$DJ<l4Z3-wo0GQ|;!s)6hbKN0-^3)M!ViTaR^gjgE(~rSRkdPC&DWM+s%q z@xI$F^*Qqyqqw_++$ZY$?BIJ<kgg%B7(hgtu)z-5<)4?yl=NtN&{t)ni&&C;SB!4I zGh=<T>6%VAWm6j9SL>VfwN259-|>i(Z0xqg_A4sKE$jGtdbH)B8;sdqgY$#VnqgVa zJ2LVdmVsU%Qn<T}mK2BAPkC9oOL4p&uLY$YS8~w-X_da^@2TS`3DYyMvzhrXz2xMN zw0f9o3b<!4qf8cPGUxl7|FMN}V`BMLmbN&m2-!WuZHuC0?v`kEj%Hn6k(&t%AHyto zIdEg~m;hagV;-gD0S?g5kB>WL;<tZ#m|a4d`oPqIOjrrc>J!AR`BDE(&z~82zG?-z z97LC6HF8{gXXN^?y<<xqudkq=pU`(iYvt~zc8>(hy7k(yOsL$a*32=}wrBFznQtUL zo-ts9Q}>XhULzQt8q+2R<SMFe{>cBO^l_z9A7elX_w8{OCHU$#)Hpw6)aCrW0$R5J zgiy)_0A3w*c+G<a@1?7g+edL@@>-j`6$MNXaTPjDrLua{M1@R%B}{sC!|C=lisH*W zMR0V!7BCz4QdQa*)S1NA)i<%H-pzdfowx;@@akLeS6Js`9#LwJH$XBn;rM^i_TEuV zeeJp^3P=a((p6BDF1-g-nuzq?RBDK!m(WF|H$efV_a18KO}g~nLJz$sNC^=5o%Nkt zzP-oY_v|~y8TY>o$jVrA&b8Kj*YiGQ>*}vLy=%%!S3BvxPt+b@{Z3}7D&Frx)<Ok9 zZuY%~Uh5`TjA5s7RN&0{tEZXJ4>tWL@X7aFXR@xEt=3?G*vp&0SExIA3WFXG5{cxt zZE?<KH~_v-jB6{je<~_=wHyeQ=`<3E)>2xD!VpF7#-c%1bSc)6`iBKWMZeDo#9et4 ztFbcZ+Yz)`$C|n9AIeoOipO?0y-xz)EMf$|v`C>$iyS=;dB}FNfSiwsq)YkF%o=VT z@@%tw{AIN<0=x^RAL^bJ*uHOv%U^f2aZJfdHc=e?qPu$e%>enb`#GDCTm0oTR07!F zMVIa!E7go0tWO+awigchs;vrK-HgvUNLq*r=gp8NSSw8<0R`h%#jdNYK}lR^7x1W2 zLM$MtfMi*Kokw$v388s>`l`FZfZt@XF-`&<6C3k15oq4`6#iM*2r>Q#59Sj0bDJ9@ zmb;covJ=1<^Ic(by(%V@RC&1mgq!|*v7ZpyG1tq@%`IEuNuyL|zgL7U=&(cxaH-hg z9CL4Q*F5m`eE>cE-Asre+stBfzPnDJng!$N3SbZ2VxxK!+AH(pxp3zY{&O7I{a*!s zS5tKTl|Ujz`eNhXCo!plnPwRdP_j;D%HUGqYL5q^!u^Zt_KS6;zHNhsw(3h`rvjK@ z5;{{FH@87x7nrGc%FCXb%bC!s)pja~iFsXm$!@&4(L%Hmd32BAS*bi5dL(|Wh?$MD zpAYr^&TCuVzN)7M81@>-+TlF_9GsGfQh#Ow_7pI+-w(2IL$w;JV3XnYZOmika51Pn zS<xB)8`M3T9y*tk_#{?G&-EP&pB^`W3i=ty!rlYi)bu7E`QD^b4821S7>+g3f0Qpk z$cnACa&$59gR{VOGYkg{^B>+i%9r_kKPwBQ!HJ;*BWhn1?KcsoFYVv~NqR<<zdC^X z5#kiKOpBQ2KV#v)*E?~(^iqi*5umL=sc^@cx42x#DJ+04)yUsOgPpcms=smhdUU<1 zN$%yqtWI^x$n7$3s@jjdZv#Q`Q|Aw7X>HJ6Yd7hujlrEw-rv}Mt1`bHy^el!o7fD{ zLxCH$_x>xY2t<(>!PoB`zrGpDIqL-*SK(fu^$cdTl-3rA*K0g|T_g45Q<-Ff0HRGX z97GQj>1yMv3#Fpo6`#d)-Bt_}x%xkNA2(99iq%|I_l4y|b%~Qc4t&A-e3@l7z$>5@ zY1;kmWxTRbc($HhWtk-d_LTz0Bh6r$Yx3dL!-)FcYHND=?)wmFC*bLjtQxHTT@e8l zzbDAnK3qvVwJw_pw`fM&g&m7NI5mZfOS$K5LeuApZXD`yyvJmLAIsx!;u+6BCMeZi z%#YUXdDMUQ6NKiN*`s&P*WWada@BquW`Rnv((1dfga%MeI>E~iPgUQZ_lX~hCcJ$l zU&Iz}+1Yp;WkGJq4naN%w%^nlaBoaC`u3SKT-<~XZ}V5fIsKkTFe;E3Xglgz-Up9c zJ|^cG7!JbX>l(u#DwX556Z{99w?n_)sD0XK5{~~O)QyQ8MkjZzkYbfLkNl)^7UmYE zA0YMlh76^8jWW(A78TisTfV)E;u3ytsLVu83~VQfSoKw#M=D{^mTwE)gd0NJvja;t zr{&AfCLSb7ChCad@dSOw+adh_5Tf}Xbu9E0O9;lKW5THyqh!&tuFq_oibNM!c+KVK z6hA--5xf(UR>Zkz`j7wC=>1!lSz;2KSm>a^;=sU=4CPo9>8z%|vUV}F|6k$@z~MX@ z+4*x0_EE)i$fXk2qJ|J_QvYh6fyX(73U`A(6Dd4D{a*-efPd-fcF_+B((NR?UJX@Y zB4F=kj?$bwK+MSkV)W$+)@^HQ0<#-JlmG5C{ymU?e>0UUf_Y0>-%`irT~6e4eEc-_ zABc{}jL*vR`?NE_z<G&n==GihnG4*-h1!;KelNxj+63$axG)^yZ(~ZtYq>lP@e*dV zl{TgMti(=PgcOq=l4`lBE5XF_(}3QoA@oB*#e7-jD{wUR#?zbO5#AZ67X1%)>vAGp zf~{vP*e8uzt<<!QR{##Y^DL*$4hzRn^)Q2CfIOz=-LPOpj0ykay&2hnTP5?qc4$=F z_qq(3R9IoX3m2d;{4iF`bgzYXy)}*5tGgoP!jtUWH|o$wtkIgwJ4=nq<Ra;jBG)RZ z>JpdMpN`}y)^W}<NaMV|zgiE^x8L_+`FS7dXx<Sj${Ng`yLRyO$stO#r%uYKv>-ho zJC_aEItrd5LT0LA_KLtdfm7=*ns-rq26%8j@QLK|i1Cu)sVJ7rC!mg3`#<N<K(fSS zE8VUXtczUfVC$(Ve*=2B{teO(^zKt5%G;>>_=hIcAGKv}xqY89tO4Xz^IWR4!onq2 z-y?x=O4SFftEc$|Dm-eL{L_`ro@uDew~<C0Ofl1aC25npcgTf_MW^C99x)jO2M4F= zM&MabDDOTFRVHuC+Dg|@F&yco0RHhVCzUng@s@;vrIy>fl9U`X&BCRQ56*QL6=dNy zHcOk01iaLX_>sS{&;nSL3K}7vAvB#kU278`W!5Xnqd6d~FuG|j^Cu$afDu@8rou_{ zX-0v8+^IC(Qv8m9=am@GR1g1rM~IQ*CW6vO)k>02F2=EjXWa!~bniFXGV+tGdBKt; z*feE^r4fpsk?>%IjLOQmjd8q1*J@qx{_?)bhF25YB>o56;^0pr`*H7NX5Xu7sXe@- z8e5(nAEY}L=^<vWE<{dZkvoyD<n44w<yB%2q7nnq*!#?67cS57J(gU3zA1mXu45#e zhF-31Mn@gi%M*;(LNyKAryOf#Bn9%Wwcjcaef}1t?<`dzgpLii!}$DzhvK{C1al=& zD4iaPzulP2xl5nR-Y8X(74KORefpqKTS;7sMrp{g>|fKVM5pUT9u)swb>cC-!TSfN z1ZRa4PUZ`)5<WV!={Q(Tbu-oq#T&sO(OOlNWW*{lN^4bA+D>5O-9`h`Q8TKk{c8Pv zCGtS9JgcfEWA8{Qa+w%u%;gwaBCLkvrFz*uf%9K&mbpL(gHxhkDw40K*+sAKT7a)P z%?3f8*Si7*-lTgqF%#mdcQ}tN=JJFHSb+v~$f*<E9Col<qG_g)?I_Is_ndLb`vvl= z^~u<?Sv5YF^&yY9Y2<0TJ4IUt_URv?v5H+*l4AY17ZZNEx%MIp*jdvk<0+H1bnX~u z2H|^*S;v_p2tOHADx0tIEMgyT^VE9==>>9cH1DP=eDn7>+KXLavc+XJDwATLj3Lt_ zkp4%L{r-z5zZS2G6tRXCGG+G0b3Czm6JH+OC4QU~`Mg@Xw>dr0a4JownEVbApcl;} zr*!twnUwARE8Du?&fz6HxswwKY0BB0*Yg3cdHU5R_H;XpA&R@Z)RMN;Y<`zUrC?6w zdz2#=)#JG1gkQtH0g3jaOHW6J2CPl(bp&5v`D+#WaU~PL-Rt_?zJd@#ktc0<sJ|L6 zx^XSa=qVwh$?RMWN_Od|-#6)t{3Hr66PXDXGXB9c27l#gxO}ahZ0qC*GWpk&#u2-| zp2+}c)mo=<FZ{Voh(eE`{7&%M{Gn=F<<UyQ`!|psD5rM)^l7S`a!+?sy>lK$qNI|5 z<IimP?WCu(vHBXto8h;N7tD+I)kUpC-M1qzQa-tIMg5#N_E#LH9EddjLn{6KO&ROm zJbF=tE{*DzZdKxJcE>Q#N!y2=t{{VZQ*1s9?V`a#)uzQV_Y>=7NiVG9EoB~vQ&Lj= z-^UZbCw>_Ge?4JzT(m6bP4<$6O_qDuddhMsV+JZKm~OsrCTS95f2#BTsoJ0HO^uMe zE4jY_O!a^D!2eHw1kilsp12Oua-q)!!gHAL+|af1^x^C%kROh?)+F+?z<7OidZ^r_ zc?uWb(_eaCFQ+F_0FW{~mdVCN({)i^Q7s01{8os`f@{K3zBhL=WNW+orZ4K2mZt}C z)DwIG&yf%d5ln5KN!jFzniCl6*=B7}S)@aMA1wvSH%1S{;o|~Rf1mShcQMbTIYAG& zo~+k7vp6gGJU>~94E(M7xEfo9`8Y66V32f?v`_a;s7OTOO<Wg)c$4O#d8sk@TRuGV zocMcxgl86X+%0mnWsKi3(1GlbeFD-dFtGpXuPw8C!Q!8uP*;Q2z_sHq2YwU<d&~ie zTroB-J{RE$FKpvnvv`aWOcQS);Wv3=H|p=kMcJrcH$h}teYMn|Hbk$jN1yd=@dUE? zJwd}WgKC*X*#zWd3@U4VqcmPFUV4%7JhyqOIBK#Xa9Dt?xfUy^@w)%L``mLv){C?u zK7&!J?|QHO7krc)R<}HQ4y&G#ePKgj0-t(rN7#yhtps$x6q0ilIi(w=z@AXi28_(6 zjE27t)1LbD(HFd$A>=n$D;c$U_Hq2yw#ZK(t(?9Fny))r`UD>-wQ~A2>WTMP_B`oH zeAn4_idXn86Bc5OecW`jSv!<6CC_0xcWl#~qM~Bz!hI)`P35g&mLJiyfJfk03#OL# zUt5j7ALBUFl8^_%pwIMkKsZ@aZDDItAyp;--T25IG~yKRwfW!tXnB<7U_qH_)I6D! zs)LxZIpO}ekULkE*yBSKi>SZ@P#fq?@%rEmk7-y<>@u=TE1opVAU>*uwqK@dveqT= zZr<cmYz&66E9G?r;K8*t2n7$mZ0=>nTZ*x~Nm+}Pb3%EfJY%SYB)nqv*VhvL%&&qT z7+6ui$;Sm2g3<Y{(c%ofl8?<E+e%Wssd546Y~BEp`2OClZDq@=H91=Co03nb*ZYJG zh{kb19<a0+`d!#<rY#h}<R%ZG2M6m$aQM1Wj?zv^E?$8C$I2ED6tUm))f-E*2E6>l z<^jg*;kd*=hKB)SYqXFIf)*?ZD8#Wv)B38mC)Z5%9WHfC-m4IIT0VPjiqXVz1(Nae z7dp@SsQX7M-VWT1;=C>mEDx#w!Q%vGg6f*8@HXa4_D!}^_9PCnI^SYQF?CC*%e??N zT)wvJ<rKa%1=tfx9|SOi<q1-a8-QuqkC9d3FRE>*uS8aDJ39}hYd5>oclmKwR%78P z5Cb-@XJ)^6!DNMnO?qIPim*j}<fVK6dPS?|-HI;DxD@f=?4;nXHqKgGs4VTKqV&;a zE?Z5|Wy(bfT1M0|l7j`OUI+{G=nL}`Ev1uolQ^>Zna0HGb$n%*1zw>L)u8IV3JjN( zvH|B4!?(U{k=f&Fe~K@K;YWX=+O{x87k2unM9KPN92P9UKuV3yy21&Es(M}jp6S1* zS~syIKK;}32=li$fOb4Z^_0FU@?1t|Gf9dn@jH+-!Q3$ksE#e^a0ZyfzHZ3A@hA7x z%*tIK|5d^Jq$3qiM}Dn(9vcF7BHuLu@UMG?8Jxk^=vzV9RZs_q(m0;1xs$YVj!xa` zXQM$~1|Vu#klVT@yGak+!6#<u3s<wHFt5GdDwjPBAMT^_#gEozwI0K~%gf4agBx_A zsJ=_^Ae@(~J9_quA0y@{9U$-c1cX1WlAft88iW!^sJwXST4J4g6M01juo{BgGYP;^ z_cCevJqII>%@vZY(lT?lb7Fb(r}&^AEYG2WhwBZsiJtv*rHw{D_aWQBAtwHX!EJ)D z=1z%koaWqD2B{uAM?V%aN?0Zd0+gGM33pQ76=P(2mU$T%s*vDG|1Z-?Pw+<BO;A>Q z*9(rv4x6{cy9^+@L$L}bEOLV10DPQRkEr|Cu#EJclZL}sGbi9M?a|MH_G+?>1!|9B zPDYc%XSETo{m^IRrnWx#n{wQpgQ}t{NDzuX<g1#K4PkoQpT`eg5A^!zSQsI9Eo%$H z?xi{=jV;<In7xe`nD!>qOp-s#^v*I_yq#i1%H_@am?zGJZ4HU;YBa`2k#E3(N~vpw za1P6&F(rD#qsBadIy<K3`Z&zKsi0TIRnL1h%W<utUfh8`dM=9b{KRm@Swf~8CY~vd z!Icz#E^A|irJ9U;1m2Yki7hUC@uTC@7p7mN!gTS{8SVMDdlf(*m+|~_JG!8PD{d{5 zYMv~tnp|I?@G<BtxPjei_t^Y5)^u&3igCwhE2zL|H^G=GVU2%{xTY6f{XVFVAlSlm z6+|+(4|*WaZLcAAm=r~}0E8UOnTfSP`(836qb3RgE*k}wZ0)SB*ae*9z&P>baPDIQ znWB)bMi<g7fIc3hsfX4K<#RW8TGN~HL>^^&KY$%jCy&-Ys^`mGVWn)VZN<oRo7loJ z?HcIOD8bv&H5sx;-m>J~DjqWAMc=62PMi8$b|I<ys7Qf3zCMNHAl=+#RtHf-Ug@|K zYxrOkly5TDB9gbqfk=*Zms(BWe+YISJXbf3;9uu^O_0FJt2r)8CKv{^z?TzqVIM3; z)uvCAGf-nv*2`_S#G@@A+rlcyFlnRffpK;6BvaOIYpwF#E9NG=_v>}2Pa@<(m9(+z z*>iqElkTI;SoRry_VbCWXO0hR+07)hDnFHGt)4uWmqwauV7S-JmorAK<Vyo|AkD5c zwq_j&+vZY^5EIH6w+ags1Y67d+BCeDQQ}G7%OS4iOR25K!1*w3anPNODaQwY>L!+k z{5#!lcq6ce#W1SwWscUF+h-Q@4(t!7%B>gcn==o_-Sy()zWMW9bPcv2wtoSlh||?F zb!*3xj<1D%)2dFog&+K+-Hn^63!w26MX$ullVg3>yOU-m>V-R=8C$pfyacs6lL{PA z4V2xEsNB+M1|^#W)SZ|wEG%g{WT$<x(ki<bP*5DuZ^1aejV8=!=a1GX?emg`_g~Ke zbe|ou7}_=cy2f%U221;<&?<lDlc9PYzVD``?lB5nSsWqO0V5Ru;E_mlKn=P~Qy>d6 zrn`rn%iB-sRhLw@H1uy0aQr!oI1pmCpfcjj{-`k8jQyQ3(Mf4L3G@-*+F%)u^#2MW zjAl5$HKUGxY@>Br0Iur6h^&W2mbIuB>?@*?WeiC7n4cyeovm$-V4(b0>-#L4As}iT zQwhxAMIqQ{c;!4GxA3=k*TW|Y&gpkHZuM4}?2|+SrZU*7j5g}(rbHtOniy)-?f|xh zfrE4pw~DcoolOAmGdh#v2**LTyRyJoZDR2{p*gSkXP->O;iHP&9e^DLkV-ecVpDII z0#8eL7O*yj3l8n~fFLk`j$csmcn3BTPR>DH3yo_jphb>M?~CScpIFN<2bm}E+Pcn1 z3%)x$P4`>FR47ceaAMRu+xVNR>;3QEt{*g|2`e*$UR3){NZS#C(9Fm3ykG`)9!y~{ zPWHS~-TAM0w$}?SbH25`U#H$ojDO1^J;WKj*v$giJr7vR^E@!>2tsVs$JVvJVTfNs zUO{iT9vk)n4UoQN!K=PT2;T+uo$Q7$Q{K)?FFUHsgM<GR%kwE&w=>_;t<1fyY|C{$ zmMv-ke?F;mECxYXc#T8_DfZ$`a~w3`rVFV*9=NghzgxUAY&8rHm=&*7S{>%l4Sm6$ zBWC~5G!dl`^5ltP`FCS9G%ToK+Rq>CU1Yvzz-+#tao#`FyS_=8o54sZLwUBvL1DSp z+q@cBk9#%6FW90{^2=h+w{=uh%9EH=@@Dy-w4u|rti$Z>6Rb+fJj5#@xhBP5PS9q5 z;}R0qf4UgRg9_lD!wF3UFfI#zJ$5gaRVyr0UcMbraC}?(_)G6=obRj>Mz_~w!A}6| z^})*fNgW*3jR=J_#Ih2_%3-g55kma5upd?du>nW8_2elTwHLVX&-fBTVYG#+#j+ey zg=GZzSb?3ObE>#Y-2iFuc|AbPmwh|y;vKr&30}Vp@8V%)?zl<A3FaCBz3TIN@CQ1R z{OP3maz>dn2JXy(2CDg*-vR8Hz%H3O%#*bGPB|TGYL;T1M<H=Jym!pG4;HA-9Rb;W z=PqBuu8Dl{rg0Ci<6QK_T@YK&FLcrbo5XntHl}c{x6-J?$!W9WLFZF_syAC@VwNPY zfT0-#GV!DQl_3+N{k4+O-}p0(9=_e+E)TS*J?5YS)H7YT4E0rG0!lLp)=9pGDwH`= zTy~^oBm*&XM93zS(qbbM2Tz^(J@K(c<bV)*C_6E%K@4SC9ZlkmUhl4}XM&lUH->-F zTsp}v3!LBXxT4sOXz_6KC{*IQvS=H$Jur2bF^^n7t?)Oe($H|#u=$jII}Pi8x>IiX z{`S5vDLOE+sXVdJ&lLfpfp27X@)rgbM&t@Fs5l!rdcE5&!j(?RKd{fBuVgML2IOsO zqHwi!E4E+vxZDZfy_l3LAJnR<o%)oIXs?e&&FC+1>6CAN*io#=yd?ymXHa5WQOCr~ z3Nh}PyC%@7(k5L;pCYHX)R)W$vJ_chpV1ycdTfTA{5=1G<Gpln-IF_onknAxE6WRB zzJ~nhjLtz+eK?R@2x2rXFN8w;KDqDnrpYp31f@tOxntYTWJ%j8+T?eTlwm(*rBE`; zwv!$5dbH)ozlc7q2G}OAnddP(9dckuJ3G1RtG|q_SW}Zf-n5c?F31OUuRzYe3f8Ds zw|5j(6L_kc?9dWYILQ3J^=1@*li#8bXerlDAvr_P<1-mVRjj_GHTi=CIqZ$Y@IQDR zfh53I$ju*8kjZM2^V<)u=i>g9tUL5w<FM-r#h~9uED3*Ilfk+{*a#x>@D}^a@Wo)J z<<9`UOgx-=!OjYyhsL|T5ng|l*CI+qA!cfveF@ER<&?ZCt1B@_V*lXb1CE%ehbmK| zYPQTj+<LRTCHV(V*U3So#d$Ch&1&qO@;&L$WZS0L?1Ci+_|IhV&G?N7#>w{&^+8`V zDP$$q<AUYc8!%65hYyD;-!K>pK9$!zHoF_ujDG^Jn3vIRo|32Iu^5@WiM@i@{~A$M zL<Ie-d_CL0mUKEOsBM0Uev@zhivG{(pRG0*tRO(i+UK|*@XTb-N00G7_^K#&o-Omj z!6MM-bR`_A8I*^Si!EMXxRIbn{^T$7AYrtkxfCYg-jZuFBtg6WeOre;LoKm%N|5^T zUAbEHIFZ~8X#CXs!4Xj!NP74X*mi){xd8+9lhz*$p4Sh<KQQt#?W%cOLGlA;npl~k zO{TA0a@1UeUpMP-@XH%b$1wxU{`r4pR#lph-bOW)1xBzlO$fGwSMC`v8|T#_6BE0Z zl#k|qgl~%-Um2u>^LEFKz++_$-vs`wo2{u7iaFNcUX?8Dm@s6QET@?oD_qcUoa@m9 zCc>z~WHna(U#*^J=fZ-!J*oGaPBgv!8!a!qbZu^=ix(~pjt}Bd!DW8Z{>)xWZaIS+ zHy=M$bKDRI&;?9$oKT`QZ^Bk@5djmk)kce0d4CJCU$_VL(H`Mz1f@4CeDX4OAh;7w zVp5)c&*D*BcRS_wB+4D(>l+2R&q*NlGJpLykMfG5S>YEbJm5J_7t=Z$X=VQE&6uN7 zXlCJvghIPW=(p_E@0+)Xl(QBPS%3sgUXUW#CJXy3V`l$dbSCF8!LxY7s-Xyr8w;wE zb{wB25@<?wrnDr0Lj6G20_=ZY=ryH<|ARL}x$50s*y{BHCpabwY|tkE;Dw3qv++Rg z{diY5PC(1q{pSvTEXlo=<w3<t4CA5F`Y=deEe|2B-~0g8kZ^zHNkiAC$KTb*_yRa? zC!5&g*Q|Z{d5tDElD5XpBOSG$6J^4BblWhDVSXBzzHZNz`+^^s8NTK$cXsY11?BIY z(Dzx?I<56q<pYb)R)Gk-XI6?;(ViS04`sa+|C`nSOvajOrVz`UZ;UgHGR9=az?1ca zm;0esV2|rR&<|RL#9`4Jw~2e~#OSA)tH<{t7baZVCc9TD3yFyE4<8diLN7Ru9f{Bt zgjjV9nFd<ov#fGG4e}p6uq8GD#{cl=nyb!33r*G8R^Rrn%rK;3FhBV>6~f+9`R#@_ zY63o^jgmW^DjAWI<um^YLi(>UriyzvxqM=RRQtD#fD9$<5zU^b?#&mY_U)4XZ@GWD z0>t*&@zEz(r;ZfI7)}zKP>xfe9L`9n;^zzy7z$)Q;RsIo%0cperiF8zmOuK%id;{~ z_3tf~pFf|i{g%aCO&^mOF9HBwcbiP?#MVj|(k5(<kGmnf*D>vg@S6~k(=kV8z7@>Z zvK|O|YVPamVYnDG-mg)TOYb%q74DDe!+#I@J9%2le6QsD?c}UU_qj=8V$4xw(#)|J zn9Fn#VaFQDVpJ1$o|mehm~So$tcjJxQ^xu2d)JLU{)854*Ge!;{h3pK76bH6jrpDl z{gnm0`es+lf0G?Y>J)v;vvZaFMU2;ylK<?y)!*TK3|xg&-_DE84{)j9?2x_T&BZ=n zGsdx?CsoIteqUSLPb`ve5P9;ctfd+Lz&%Gh=I7!5<rmL$h;9oGxaui6|7)l5E&BTD z@j!Y37NlKyljXrdrO3WQwrtjevRiNQ?!1v*za%|s2S;e(IA##1##}8e)O^&B8SQvw zKf#K&X82OiJzz7+f8Tv}U*kwxXd6F&>kaF5GXUB4fAf1Zc3`BMYyf_&Nf)jiA6@RO zSfMm6#$x`o({%9CuhjnY^0m5Enmd!&T6=Xs?!ELimL(P~TI8Ot!}n2E+TVYMLO8eM z^>7j>GLE}`pD-KCqV+AI{_pHpG@2L^G`3z!e4zc9=7}rW?i@U9=V)>B^0o`KVlSm{ zM3^?)hWCfC*Jh%RyX$~mj}r^Df-oB8+4v4kr51Dj^m*S&#((|k{q0L_c+25%ryUG> zu*WE#JR^RUp4en^Q!<Sb7E)CS%zxzppNm8KtQZTc-TX+As*|u#zx-&HArhI{cY(p` zo_`<1sg?D)ut$i;LIb8*1s|8C<^ko`RDj1kP6=D;w8lpDYU<$B{FOnNUh067>N10N z^cVePDY;NWA1%P!t`?;sq636`wTSUe#7N7jn(tMUfsLu(Urs!I`2N_LXw9O9J9^=A zt=*$O;P{iB*k7v8VuPB5IB$%^e9{Ki(0C|k4f^B+^#ix+e&Oi9pN++o&hN2HV8LSF z)m<1;fwvmZ@s|gWqWt(CU;yPEii2a9*|W;d2L7tK3mFriC^+0aNb*gd-08EzdIn@v zmM9PG#lhZNgFf#$#0jTB3bJLjL=7fJy4SSsOYH>W>*6FbIKEmu#aM))LK+Ygf)z36 zsYM9BF;)1C@Bk&NOGoi1R4R(Q&z!gWoS~j<E&c9zZsdu5ida*6ePAiM6h3FB!-WHy z?3chTou3`%UVAb4Vpg6WL&Mv;S@u*LDs-^w&K4+rx<Z9}132W{*`Gp6n}56pbEO_I zQui<y_46HkrW$EkI1g+M3E=co|4UFsp{p+;Zmar>02B5z$!yZ^QL!oLPzeQ9@>{92 z1jm~!EIvr%s*dC2q2wtKF5(DYp=+`BQ?Y`zv0@1SwAM{!)q7jTT!_#?v(|6y3LVZ` zxx0~!afo5%LA8W)h+39?Uiv{n2(hzX2$)(?&c`s`?-54F@9Bi29}DIl^5UI%y|7$9 zwl={?z{)Cv^!Yz{Pg?`J`k2|_*%o`A3Ck4H_wO{M4A|@cy&2vk^Elw`0F;1Ksu<Ak zVW-zqhanl2e_MuS#}X50h>kLMXa9=r{DW6>9P4<tLfMytjg<+nJp>8;dJ^-wDaJ?j zL9GA&ETp5|evm@F>k8oO;{w<IylzVW0f3iDf|q;M*3WSL95Ft9pK-EnENI)*T-8qF z4`DZt{=wVMD^pipiK^k~Z3$c5$|mYG600D_b`M&SdyTq$2tZ4PZapQHbf%I80$w@| zyyPXZ7{S<eL}NYr{MUzbGLoamFH#F-f~?8!EL`_(?;7jw$NS0N<luBmu(8N<IbO4x zAgE(@y|-Rd+56~c@}W^njx5JW)2@Jr;y&r+KiqBWXqSxD?+gAKkzzmNg)lhZPPsW$ zBT5TmI1X$#I<I9{SG*)EvLK0=i^zZQ)~KV@ni~)q{?fjqHOuPcg3s%tdpA^H2KTOJ z-9UQ%KG*<MA;9qpdfdgLB#mH>)F@guS`c+naU|xmk;DhV!Pp#`mCzM7Ct2vzbZ_4^ zxWka?vO1Xh2eN@!LWr&16C`~aM~QofZVx}ULW~_%RB*jl7v7!aiT^B;<QaYEayG^9 z`83oDyN|hh^oq|DnfL9<4>(y!+GihDgV{ssti9?bEU2f6{%ccAU+8h$q*xiJAlK_$ zanSL~zWLKIOkk(U)VGDX(PFvNpA-(FgGmV@J9E)Nm$OtD2ASi#IHxMi?&Q%if~AzB z%2E!YtXwY_D<{bT_t6ZM=Ym0c7^{%>j1u(;LR<}#K(y=c(V>GNm2C?<phYx$%N*8| z5+n>yJkJEubPj0=lC&NYD)v6ZyeotPP?h>xx&o6%Oj0U;+65UcU98o1%-40M3jYdf z3_NBuI6w+~E1fX2x317qEzWqd&^y6maBzUfZAWIj!sG$?ZW!$bP@%PwwbYI|Gp=qv zxDb}9XQ;=|W@JpYvlZ5bp(Hv_>y1;`IJAV9exiWnCdXjHaP}{)amKTv3r>`3MZ>Oy zY2)#%K}JVhtay0C-b4p~zM1)PW_C$`PFlV)Xrxi(dmGCcATl~r<j0EfZ|`iS3B2d0 zSl>Ev^y$bN0;#C(=aYC*HKLW1c>)>7fl=ua##n6>q*<^w+>uWJ`u^|1W<)`J_WNw@ zsTV}MMk_T(aGL@@hKY~u@rRijF+IpZ7JO=OS~TX^$g(=X3hPk<mLTD8y==>{q8qOk z?|przB<x@k#R8@3I02YV>idGUDqfP;vPrJ#`Ask0=iTYiyUD;=767JwvjJ?g2V$x% zhUdE$FwV*(V@HzXM2kRX<V}+Hp&t{9jroe{u$Ez3z*b0;N#}l^dge&c?NHm(O7!g4 z%ub&@OXK~d*_vPc%LBRym;QhKv^sjluvQaE+h=%Wqt34*13TCjYEb*hLrKZAR1N9^ z#RNQ=u7wGJ)>tvDU>*nR&QZ3O-zN#s-3$i~rU7|A+-tN)McDg{?XIgQvkS+yBD7q5 zzl*7}Ilp({Zi+CD`B08Sl{L6h%Sxp&*cG{GM*K6+H4{Yo?)eIP#fQL%74o5v#*A;K zQhX=kMTqYs2t?i+x}lE4ch`=YU{;E8YE7*gpUM{+VrhhigU-$XOn>%Uz~t<hL?_%% zDQ-Afx7CQ542H6^BXgma<AtmOFBYP}UX)W-gHU-h2}QNgydL=Y;Q{LxAS#mNT5NA7 z$#7W^(en4OaH_V^k)Hv^MqcDE%)3LnE-wUo3!4N4K)E^iuH)WyE$g)0&#y4pS?X)? z^1`wmqMj5i$ESw+u(!2m4Cm`$kimBs(3`m4Ith6S>}DZ$Pu;XM=I+U#Im<yO7FDQe zO(kA>8o!;N&2$bHZk3M(b-XlJ<Zg-e-9HQIW~dVI7ErP9@zsw*l9GsW(D_MXL_G~f zcA4oXqjDWXhO{&J@UJ)qs^me~>e1e1vN6jpPoLJs`w*>nf77L{<LuRl47B$xmF6rI z1MTRib1%QWX^#Kgs{{)>ggk6S+kP)V_K9BP>V<Cf(0w}K)ce7JYSlFX%z)a6rppl5 z-_EZR(`KTc5xj4r9|f5JC2Vl}eZH1EYcftm*ejrDR-P7}O^}>F*o+sr-z@n|`<>6M zCZ-PcFDoki+FyRW6xWDmsvk4eN__EUk(R^*ELp$=)1um$?U$cmiM-d2Nx@Bd^)9>U zo+mBRe%btybbM^*A%}Aluyy4rkK^D>N{@Dmg+bpUtU1&=W$Y2<8zpv3oR*fM(t1S% zVAJ3B02}shY*H`PpkZ=D*IIObuybxhY90~bG3Q6r5NjDC&sNWp<g5Pri~anYYDv~F zymqLVklteSO82?=3(;9aW@xvIa;tf?H6CDBxAJ*eX6*2m70fKRSf6wi`s<U<krZD+ zw~^a)9rSqLc%>S;XyVj$qtmBFV`ARpFSnp1`u6LqYEWjz)JhO@Ol^C&WuycnyY&kP z=J2LE@5dgrui;XB!g4%->tbt3z*vTKyBm+OL;OOYom5EY+YT*f7xSlu>v8w?>zXpY zV@P|Sao4mod^TM+R$czcTdDR~CNM%_ci0L?#hm#?o(3DH-7ry0R1<lG`l~T%?&5Op z5>4)tQM;2#>gVQ!A?kdw?>UoTyk!`&>b0n!Tmg!4N0#S8@{Q$|aGfmf*CUFOxYF)G z8<qyRtOOif4-sp{T@CjPIS<ovirPvxZWa4IoQ2BLuOD;lEI*FDLSAdnWNZ!br&ULN zwezE&D`*R?kil@oit<|0H~^(cZJzUPj$~e4%HH@!eG_@3^Sg;gT{EZO!|cloD9h+t z5Sj7fJXRPbnJ}fs(#KkZM<)8A*<*XT71_da9$h)r0;<4T_T936RWF{`JSX`Gy!w<r zeHk|tkDV>Uk|_cvm6jb>7T-p<MhT2FEH8IOXeL0YgFZ|J7uHD@MBJi*YNhHSa{=dB zTCyBUXxkfS#haGd{9u(_57wFQ0kXkkn+zik_#GL$qzQ9X=r_hiAs#Z00J-*o>pd0u z=}h@X#;#GMV2^Y~_+f?BMD3s?!^|FwSE71JFL7t^j(zLQS{nfQNTBfTijli2%8(Co z(?6>2UZ$<bAM4ar*-;&;h?nxdX|f-`?R9)BSTjO#;TCyyuchWZ1|5(Muqg3(?Bg$y z1?ld|W3Q$E=n3)2UEVyKk{8+;T?6M;g<e@w%RaFh4@oQ7c&9>a=ma+cp5PqbtC^v7 zDFG#I=D3sAsd2!&RQwZO`{%nYC)*v!#QH;$B708<faiVraJC}3+%Jj09+OIh$wgUy z^>}tGxv&5R$8h&n^0(z4R8}KaB4UWPAaen{W?gpZ*>0CMz0pE5)0g32lRP876y0qE zyb}znC*{e&FD(C@j~4Wz4sBwB!Vx3Nu!}OMdA8fZRo)x%Jt_EcXs+lMQ|_|`(q4Qw zixm$S`g}w^BRS23AI((<c>Q9lAbhb>Ucm?s8g}%kV@hvXf)OI=<XIYHYJrk6a=79P z$i4#b&=LtfgnEz}<xU(EmVJMQC$M4u`TABL6zuT=bSMUgFfy2ggv1u+_7Ub<n6xO{ z4Y86>iTv->Y}_$osUp{JVKVv@ykMk%%n+mDUB>6MKhoZ(0S*=n6|@T2?Nus9iyo=5 zkF_ZzjyWM4)JbZ0Hw16o>5;H&RDNctETa`l1Ek(M4Hq~fAP!<*`us4xTiTA*$IT+h z%H_P7*Ef?#wPkJ^*LaUfSmcYGlD9-3$9?cc@LTkEHHk#;qL*R@s$4da)0#hjC$gF1 zQT4VujG$ynjU4$G+=X-ggt6&GM_$IM&%pg2U90Yyl&93|!XPHmH{~c9wKuOg-DWxd zjt83T1cK!(Mvbb_em+*i?q~<Jh3cb_xjsr3z@j_{_8mo;oWH!Y@+o2)@He6Oop8y& zksz5){z3n@?&pQfihS>anEaiqxV~XBLo5`$u`7Q5m(65v=3eA{zYe|hoiyNOvwcn3 zG6Y2DXDh2jK66DB?nro(kyj<s8Q0h!@n?kU81%;c)etrt^S!evG>WhvFkrth>o4jj z<I){^^DX{pe=MN(n10pbS?tAHeV^$li&~+D1rTgh!*G#+d~G9MewSj1$Z08Vq!sX5 zp}~ouAUkkTmehrL%VKlsHEPg`rvf8JY^#lG>QM6#glbi}$m#qCPcsyWT+4Z%FhGD; zB$?X-T>m&R#t<<)8*y=IznOYQGTI-pI^1_idPTI=TwKtF>xL0xtsi^OEy-aK44U<( z3KQ^_+?tS!(QS*GH78bkc>&<Ud@gW=(tEN6VM2wU_g*Lw%*Oih&4hIriv^NkXJ)Qe z)UP3nMh?XguF5yjbng=hwu3DCvtj#+GY5{x?z`p4-f1tn?mFF9OdJQvip}T>5-bbQ ze(A9w!HmR|&5JT##o)@mtCJYN=6D`4Re5kJHh()RFVdX+)`<lBedKmx(rf{_^kBti zk@xrezG9An*7E-zO5)}1@k$BJTx)%EtW<sNnNLoBe!lW|`uAEO^BR=H5OWcJ8gWK} zuQe_!llNB853Z#Dw6PJN`g3F-@vjk0-N@6c{~DqCH#@4j#n8J5e9JOberhUM@1XU2 z)Cnle<;*A<G35;7XMr5BIMqz8F)<3-uBO+W7XwrJI*`<FFCGw=IY*>zoJm$_{`<H7 z>+zf{S#~cAP1#Q4<O*OPZznE~Z0drIJV@-n(S~F`sWzhg?NOnKK97fF*&8rxd^to^ z2R#gDZ_tju(Xa<-qW^&$YzL{_a|0)+<SdyYEyeE+%Rbdt%y>7Zthuf)%d}PsBH6hQ zHlW~&jGj;vO>3!su{g54k+S%&^ZWmQl>gm4|JQT#pO0!Bw(4VlFzz8b>0$1riD-At zG94768hyu``|mlfu05u<UuKVdF1DmI_%8O<SKs0!p>7`<hof|VNU>3ecj2Ov8(26j z(mqXCI%74mN?%Ol&7fLU!e5=HFB228PAPW8Q6o}Mv&U+Oc`a)seAsirMJ8d-Z0dff zHiv1)n~46;34f~a(As+9KTkjX2sR2hKlIXsDFk2+d~jZO?UU^=ipzKBQN#lXk7fLV zJ-4jW9?FyM!(JNAQ*;dC=ta(cAij=u<`7s%`d~L;cce6dJkK-RPjUCjOW;$ppCx@F zutX=|ma_b>G3KTit%hv=`tmx`_-7g(5m(CKSc`Vn{$Det?0x2dZ2pFO`nBoS&oh2? zz=3a<I5efl##=qvD)k~v&kGCyFFvlAN{M?t<38-uZDC)3UVk1Ec{wu?LCab62UYQ( zNAn*qtpDTle>c8=FT(%ZVwUbPCSCdenDwgRVi+sm<#Owc(=}RV$5a4nc;_*D>803g z;poKrA204^GDiE!h&SIvF;v+i%Tet%Gy#7(ky#j`SipmAVa=utB3^fq?-k{&-d{ge z@<qvfOjaWY8}`=!)$1vEMcMiv???U%Lc)q{iszy$RM^s&7`j<)dlPs*E~$Z*kLKQs zZOPFMaEfLWPOi+MdN;+Q%Fd(cb;$Cv)Ey5kXEhEJYjzRz;#K0(SD&Sz7KCyFidKk% zrnrMY<FkG{B`i!0!~Y{Wg#yQTUN!Im`~f=Hf~Pu);(<a8Cr{<1O>aJ)knu`ZwSgCT z;(DuOK^Xkbrt`cM&-k(qx$ENi_dGiXxd{sId0znzo@2Nd1Umay`S8dA&)%ngqG98P z#W<eOAmEtghg0lbsx#0dL2dGwdrYj)_MCs~CAG-_5reI#W7uE~p*gF=cXnEjMm6Sl z4IW_}gSbO=yEzRI=F}a$-kb-~F+Dz+F8Z=^>j1L`7K$_4xtfOe>}m=rxF!f+g}f)> zcryWT^$~#-#{A2zMGHoz409DS>n^AG#h^E(Yne<i-|k7xdts%f=8M1YB+);yR@~FB zRKW2xV1w2;`8VvkeN0-vEjd>>mwaTuEX3;eSv<g4|5aRDa+tWaSKg(0?Dg!d<ItSn z3LDoAn5;uN8)wgCAjH<ta63OnCnYuwJ@iTp01T@)@{2-0&g`8$YCP=KQDSd?fPbZT z0;}&r@9$^#m(CZI&GR};;BDh`$K~6aW1BlumLtl$*xT)AJjZV`PPUc<9{#<f{Wn%* zHeNq~94yTcv1;neK?dPAo}@7*U1GxDjOb@#bup+7jIf{_Ki;mMl2x>!pKk2_LlVe! zC8hNe$d@jL6~3Glg?T`3Oh(wmoyom49-b^x$A|73AuD<~2*BD4trro9KRw+ajXDQd zt24sLQjqN!<*-7mx5q-O&V<~fG1X*c?WztY7EQm|C+JjE()aaNp6QgMkrk7)p?~n^ z2L)_YXI^H-pLPH;enaf{)tkpxTZ3A&2kT9>DA<o=`}SodC5U;V5#tqh*di&mTN_24 zTYY5OF6CEuPSki_uDJ&4(ctJ~7OQF9Ol+%qp7E-XFKduhjgycou;ETo8!LF3&XNOG zYJ@(H03puURLhbLzP#UeI=$NjI3dB>70`nUDMzIcJHE@49M7SIz@}iXTfJj)Y`r4p z<&Zmt!3?(3h3EB(tldq%Y+Sd#7iJ~Is=cK;xtsZup@GAw3tcj4sF?1TcMc$OKLvC} zq*Gq?nAo7qexA-S-CM8sUK@tmN-)r&Tkh^Y8s%^E3B_EpsCd5#pOTR~dNvF8L{?^X zG%UsDAhb&rkupJ2&K>{t&50;v@Wru(8k(^?fPNMyR$+v#(5aEGYcH4WMS8pNtzO#l zQ5CJzpQgKx<6feFq*P7Pb~F1r+&O1)dA8C#N$&;_k;8BxH~O~PQlzn_;G$Y4*dfy# z!ycCfjw;$WNrcCIxB67`hfZ8sfxV!n1+>0G2Du8Vn(!z!uBd8082-7zImL^oVcG=T zK;Vj3Ic9q^@eY$hMu*G_TpyJc@ORb9VO?EFiVcIN831y35fE3A4N|w8sE5#6Vl0B! z_M>28!zL4*rg3NLvO!*dW1rPy3_@H`++)x)Q#FsTFOR{jLFst=-=sZ`jeXj?D~Rkb z{{D+6RUNsvh_WVVPw;0gdKAdK`(f(S)}*0U<Q`F#J#Njp8lUN{o#)Zdi}H7%$hLb) zM(dii0J*g#ke^H7wN0x;eEnH@+tJqY$c$-f<NB9nF@cjmYx;B^Tp4&39M~ERcPDd2 zmmsb2ZqsJ%aQBQ(AH(kr8LO;MR%hk)tCqO<fAEO^!JCr@ZJK1>mjzH3&aQgtf>IY! zx|pH+A|c>K@~@UU4#{1b?BD>=u`;fDAaLDK+(pwDOpqE)IUs?5$`yISF`wKk&yKF> z9Lz<reH_&MD+V3_S|EKJakaj^!KfHo%kfNu@mgNrVL5!Kl&60*a=ECdsLkv;H3U1) zO)jFGS_DzzGqzKXNvIPM$#14r0t)N1+!gsw`<B!#PqJ5rt%~>Ssw@;lL|+Mv2eu>F z+GE_MmGgn*`br08^C3e6-SVA+@J%zH$VPoJNU15mIBH!h%@mo#A*?euCv7LT-A>Gh z;|8!T0?Tx&9+G1F@g+6Ui+V<49qvc2`3?B>+i$UMm_S90ZGQ25>sbt<ODADc^K1Y0 zV9~T*1RmfHp+ADNMsLV-VslsLPi3xyQF8Kov@Qge!lp<^0h_=h_O4m6J^3e?!Z1G( z7mBvVQd8vOkO(W0ASabpB$*YuRGtYV5QFlS5;&z$Cfj-Zt^1f7#C!H|3n2#NFUb!; zn&%V9><!%$q}Ei5%bciSvt1Tk4fdjJj(u9cl;122JP6W^>Xm0pHNWkNGOB?Zx>#06 zfV|@mwP3-00ZiyaboGo_s;Tcpb5FyQjfFjZ#m5MM7$V2fU3c%V;uN&vFbFw{AByxR z-lLky8pD}pL1t$ee8k~)-X4w;>U6?)|H$=-kM^>&x6GO<)z0v3PA7Xp4HUQhT44np z>mZ8JV)Ho__#DgNYp}p05xjApG@AJxLLh7^+&z<KUd=mer6Ul+TELLRu-N>YAo}(( z!Zu0rvA3;9EEnOgpR0J%36N+_-~txmd)18$AiMl%-u>Eia;SH7roQDBDu${HprAsU z^5N06tSVfi2#K+&E6V14?3d9)AO2Iuy7|6eWR6Uw(lKXssW$ver~QP8SAv|U+G&RJ z?e|+ABdt>+0lZ86MMKQ?U*#UBmk#Bn7?loYJ<nr*6jb<y%Y!7L>M*{-?9Q#GR{8S< z?W!*)ohU%`Ii^N8E@a~&NBsC#iG#R_#@G6${6z*&7xI4D6N1<52Qd1-g`Jl4Fio>I zY!qW;Ed=lO;j{(uddm9(-%oVWg4-6`6<A=cn42T}jHVBv0>32k8=vIyPCin23I}%1 zEADW_t`kD;9r9}Cv4Pqnzk`R?p=?UrVL1J4SR|wf!EZ2et8PY;M1ud|Z<^hS=rDKB zE&Gg^vHP%~QBBj-<Cn)yte=~TB)Q_?-sXL{^v%MX&n%ZIJ2)$hn<9EU_7p^=USver z;N6a}^Zv~6CO#p%l_?cJ<y4MWyJi}(BZwIMSzfknj?tiXG-S`3ZsOgjh^8oB+)D=0 zBQBX%$Hf{>_f_MTgkCyZUr>mvtXt~YHzn3p<rzB|2)4}}5i~@!YX6|VV#Z`5Id4?} z<cZ^)L-U4(&}Tawr<RMg?H8y$R9@~Sa^h#U?L9x$o=PcR%Vfs7b<gT9*qf9wdI>%A z{-8CmL*-g_Cm+KR<0rM&{1aXaw?NM9Y5%C_YAKU@`HcTcKaL!m`x+yM_`buO568Kr zS9=SPyxQq1!a;1S{M1qDR9*L#1lmhX=E@2`eYERR^{4mA>@0@)_AN7F7z&V{F=eKU zD<zEL*T(;|L}ESx-GTU6hTTf}8Me)ek(rWdoeyrAsor-NJFuX|RD{WzZv#9JiP8m! zd*t3x)KYJ+z5wUP9o-_gR-6@VJ`INoa1->A(M(9Pbqc%#k=CxYQ}5h9t&&K&mkSMa zgjZ!SF4eaF>vk#vN`84}^d@S4U%CfgyCASxPtcO*bD#wr6&Qvy&w`aqoVCc6m|8}; z)H(4bSaGphb7WTt-^6bi1(5S4d@D+>C)cb5%Cs;)!z^sfmIj#tqTN1lhL~%qe&1x) z>xGHQu#4+HEA^xJr6!)B1daFh^3v$GcK>sJTJy@brtJ%@HxJMvI{oV$ls)B7V+5*f zn@Zc0>hdv<9Dm+TMS+0j=<<4D3NdM|g-_)^cU1E>^7*P|dRofPf_WE)f`IMD#MDi( zC>iS$%O_O1l)0D!`vCqivHkrhITnMOmZo}^{79xd*6gTMyLBom3kW<1xzFIbH`pv* z`tYy3MT?fK<=Qx0EjQh^+aW&Gu1@$fP~~&^>MgTk#G_C~<<?_jywI02VA)~|qQ#QA z5fMWV^EZR4l_}SHz#G>Hb(30wb9nAz%C@^^_%hARnT$W^?abk3YXd<S884?QUjIS^ z`Aqx2E;yL&kU0dI2>(iOXpo`M9GAtWc4c4?fuZV5*(yu1NQRpZ7d7xD^#FmBOp@e8 z`I?aROfs{6e^%++G>abD!7Mxd6T|7h(R%0X{9}SG(pP7774}GJ$0gVVG#n}^o06UF zr-V*wE>ilCzhC#=;!Sf-ctXsxGxOh$I9`awtY|wG_|U)Ha$yenoYW@0vs}|*_}}%b zxdn3XL~MD?HG%MK?l)@yUEF#*X<wkXjbOOwTzT1a2I{#0J-I_6LE5D33!u1fd)}5X zs4&ZSTpq73s{LXqXeHiU$p#x{IpHVq-pON08QD22Nu&8tK{IPq*EoX%a~x88qcFEC zJzX|Cw{&hh<Vw9q|M_XTC9FoVa+d!TvSczrp|ctiIln@=af+v}iUY4jO;0}xHmga# zmb=p;q~838+?nLVWJ(8?BM0mI5}iL?@%8LtmQQ0NL9Xi!$EU9XhH+WAeJgWp)EYmL zR#Kn-Ec9V>h?n~PC&)*83yKTanY7#IWAIagnN8p%RGmqeA{4{73m&)_A(H_oY65Vb z=d57>_rwfY$P%@2a58(Afab1gAo{y~;2c>wn@P9*<}0$9U$2cu<S~-vylZwnaH`&Y zu9qhxD_RLh_J@2!nQaLKn`RXafX<Y%7DLvV!k*0^S_(&Y_!3j_F$rM42$K;K(dRNo zo|5><d;B>|#m|kc&+xf?mF7DCd#hn3B$ELFVkwI!8<g>Xsot22s1XjhQl(9FZCeK= zs;rT5kZNLl&1c=6Xll>vy&Y)Q-_hPP()O!L^Ed!WAGWBYTFJUd$RNmkcwCxicXj(P z&~LX<;YQO_g|_^wQLQd2%>ajZ$>Iwu<ducXjje@kYGn4dJ*b~9m^kuSl4ijwf*+=M zC~HZ7Pbpnn32&puFcjaU=0MIFlN-2{=zj4LnYY!>Xj{l!>+CZ7wUc<XemHyt)ftD* zkd^sig54Mt#H!GtD=*P~olq*n#82+yE(NBVzTS_Fy6ThU?cB~PM6l|p3X=Wg73z-| z1NeK6ZsyVsR=2lwqtGw$A-Mfrr8^3Mf69;<P%Fojmp=XFf?|`Fdnx|x{P5W_@nK{; zii6(Xg4N#8d>YC}zOskASZLnWb+C9iA==910aekiMNAs&hjdR6yrg=k3Af(KypQ9C z@2M36Rb*NH1bH96t%S?%pZ6kI{X^ZJrhAE{3t*olI2c;ASe+++BF{F+ibu#Djx%5T z2aiG&Qn7dL<NeJ>_ELPq09oll_)d}O9-yH852)4u^D~U7>j{YJRtA>bNuDDoXkvND zizkggq8xafjWu*aU&dCUs2E@~O5jHsx&^y)$B<7(G;O1TKLbfOLDmO*8ML#q8h(CD zmU`1qAQ5pocsh)`{Y9>_64xdjc7^!#_2Hu5<)$3u4dP#a1<hXk55mqn9FF(z_fkm& z(YsY6i55Lk6QV^#5WOYQi56|cvR{PNYY+s{qi*!x%M!hAtg?1DiO#ONSerB7-#^cJ z&biKcT>fCp#h96U=Dt6l_xts>Eh{5aL5H1)Jpi?H{x8M2s|@;7amSQA@cS>tWI=gg zNowhqYC|k)bKc8lk>;w-Z~fc8Lmsp=L0YhS8tJ|o8}&j9gd5FVpS6;~H)C4kSF5yn zzNWe4NekMxa-ehwpz`0g76Hj(+~*rRe<>s`1wr#HJj2L$z)pi?k?(c0zKhGCf%MDj z*Glr~wXUVoGF@ESN=OUEuX#oR6qX5YSB1}vDlyRxZ{b4`@1KaAg2p>yPSon!2;$jQ zLu|HY8Zwe;N=z9ZKyRq?x=25n$2rTf;rub=1sOTBBawcC*EwQTgjYRbp>i))E<H=W ze<G61{C#?@b#lkTUBh?LtI{E<t&!p_rB$xJk0pr3s6Rw}mUJ%|vv+Ol7~qI}EBX^u z^X?xFlDde9u`2WC^w_z91;VEYy#;Utoig2=oCQQ{9}cH7C?pWKHY~E1;Zc6*I5G`E zJQbtorW-k{+*l~Pm(-T;X`kF`KWoF@(A0KOrQ{|4HRcUZ>LpvrEAEP77cPFWiow#y z4fyWw(PHxlnrUmV*l7DE*0#Dy6)PgW5Ct?oDP&GXfIP{Go%Eg6Wm_zI*DE%ze5#rQ z(9@;X)q7S%Yc9#U(HQfZYnjBSea=5Vg&JuMx^Y_T<B)xdVro>o?ss(4QrJ!J_c3p= z<g!g2GS7?GTdS-L>i%TDW9i)Q3~6{>baxf>85u*Oo?V-QI*fT5);?^lPdIZP-rg)q zoUbHN&8gOPGMX*G!yxMA#rQ1UifrFT=UrXJ%kK~FDS6K{IDv!Ik)%iGQbe3Cf#%b( zCa9iMd+oK^;~%A`yVVC6GOT!oJb|(bPzbJ!Rf%nV-Y?ZZ_@UZ!)h)Bj;r#m=pP0mC zuu9-Ym&13;?g?7Ed0?*cOsIkfM96~`HP08|p|GPI4|Y$%ppjTk@F>HJ$1Czb);XIR zKAdbHA+}F(W`uo&&$s(!+bZK<OnuJ9{!zIO_Td4*um)mpNOAz#Gn1J8m%`>4eRkD% zBJ@49_X$BC>)7_qQFp|WP`b#vb?g2#P2oN$O^e_x0Si$f$<52G^0mzUPStO_tBTZW zmF4Wrb=uICZD+M@7(w{mGUA<7zm|OE*4j#9l$;zYVCNnli_;Gi`QTB|tTXD$I(mtd zowT)b7tV44SN#=l1)ztwL8Hi0A}<|L?eNkp)CsU@tvA4hFOmSmXoO3-my~Qp;>G3r zC-?E7IDqL&B{48@6HI2T?cM0AljVPOs;_<uU6)<jdJJSK9VeICh2&t`e9D#rIm@0T zTvOTXv?KF3Z=I0Q7Zp42WcmJ}oU_cE>!VvmE15Dbw0_;UMg0JMCkpElxRdw&f<+7? zbzP8=hCYZt*G!3Bs;EwJ2-}xiH>&TX9_;HMRe%~0q-Y!VzZ5kwz;SAf+2Cy0&tJ!p z<fc`(<pEYHfah-;T;ZN131QsbfZV=m(Mnlm>1S<n`xd=5uRjS3JG1|~x!QTvHE#iZ zqf!*vW5YLRNYoRW8*8<c2@uK&ee~f|E|5rDPrhkp4VK4TZ*d~rT(OqW4a2?*&JX2Z znA5_qwW#LUlPn2B=@od8LH)FnWVL!BwI#H6S>Kb(YcN(Yh|N)toKqo!?N}bn$M<1q z!v#mh{Pw;h0=3L35<r^^a4X`lyXPCc<p4`#vY;FR=o4@`KPZ=5rMRyj3f<Qt0S?vI zfV?uz@S<Q45Vlp2JCJ~sLCBpXNC6SW`(IbZ>I21x0+aTxWA&NsHKNNmJ>}x|lpG5` z@u@KF8{B&53Qw356IDdbEXoI5+$+laZXU+5=7pZp{U{>R{iP5JzzJV`toloFC=%0+ z?~0aH4Qow|dI!8#chuIjJ7<4)Sic`vm9&JO0ME!-WHb2s*5g)uPTUFuI9tPO%=7o! z6;a(=Jeq8|BKZaF^2bjRB;HN|#KkRn)wBB?s`jr{F*gX}l6gdJ59pzl>@MG9!GELz zk)hy{U?>JTsOK|q01iB`#*-`Dne=3{_R=T$LuY1qk%c62f<y$w+^yV|Ob=<88%jAf zf2Li#eUn<^UHQ$Ot!@?edqgN<vA^@S1N}xI5DMdBc4?C5z4Tv-V7lHmC~VX(@iw>) zh}+e<wVxyZ0uf~Swma?k1Eh~=dhcA==@mY=1?z_Uvw2ohCSvtGFzIqq*9$%MWK0)o zo?7`KTUGm$qRibwgZ=s#K|XR<>xG^f5dcUFYY{}q?Nz|PB9jYDLQ*^N6Bn@)fSu9G zSlLKt<|q#}u;b_UP{KVjOmM$6O2J;9@_I)h00+&){DkvORoOK}Zepr)@6O(b-7oi| z)Nd6T?s9Y2#3C_s@e%crvOuhK)g1>Q4WZ`r8{BBNUAn{?tN^9GNEezO%Wu$r+*{z@ zjhJpXUA3;vyA5^RQGYyZ)qFizg)(GOtzB!qvTwf>NSPYjBvGV~%PnH{R17fZ;6wwj zel1$4<f$P<kWh?{>|_MDJ)0fQu)=@ZM-|B5(e&pBRof3$mkx&T{3~QQcAq<hz|t3W zJe3iIAx(RLwkq6rL8sesk>}gI>w9j_63ptG8RZZickq(@!%!yg>S1ty%AID=DRTu< z`|9f${N4iO7U{_<bf{0+54j?W-%0EjA<A?p8qGsqHYPs-xBBwy^9zZtSC9UPP32Q| zgAwn&cO-5Q?xl}odxUg9SWK_p_4V{BN?7X(Y{09NbyWxH&d5z<AA=IWH-UETI+l<i zM=*>1*YaDR`w}p-F~zU(`jjq1*UPq+9$!vx(T@QlIjD(rCbLzcZd0tO&fyjMd<$$K z{2k^$v1`!YLKQ0LC2&ij0(8N`^Uh*s%&%c`8#&O&C}fz-mvz#8V#720J}WZ9YyLOq zx418fL%)nvofA(%<lE4n!K#Pvm;-Q{*;r0GZldmB>z%|q9d3n1Q)6#fr6fK#uY@B( zHfarbG-8F3uohL?`aLWN#JGsc{;=aIuprgX#h^?@lQ`a@zmWc<dNV|Ups^2|6K^nS z5)UkTCUrZ+Zoi0NM@JhnYr~YScQJ{q%;o%LlY$FjJIAZuKZ(J6!W1D|=bGRxgW2xP z!&kZ@%pp%jQf}A|k^Qz!TbXmv(Z0(bk9*I0@8!pptroStr@O#Q+9={%r%`*y;lv`3 zD$M6X%WWy%ciw*~HjBR3H_fQJMPp|$y5MSGRk>I3YOr?+&?n{~YKV?6kZc+v=*CEd zS|BBW=!NYE9Z3<LV>gxl;X4p~?h8uu4Y@qyH=-Y(D@>px37jRQVwUyw8Ds(?c?U5{ zU6}aAZ_B5%pxPMm3QR}PK*rkme1r8f1ErmjcgBW{8^f|&FW2S#73P~NyV*S&?(!vg z|2$RGD+<D@pPK%#r3v8&aQHm+)9xY5?zhg$Vqea!!bILM0g#Y`+0cPtCrq%2-juJ1 zq8RO6+|1Oa*pWxK=oF)OU-;w&&cQEF4ii6|Yuj$vZ%>gdSy8XKBf6DB0k2TV+cxNR zJ_21o5R{$SE!W64SxE=lAKlIAVy9gKM8Z}9+atV4KUHpU!KwOYhDC*ChO(g$JC!Oh zkia!Cn5wJ9O}!HGy4$=y&Ax<=ch{|8A}H-&TRiziBG&Zcg9Y&ZY<5vn2Ob;2n7nh= zyuTD`&E>hOGw&LpD0nZ6MR6soe~R<_y-09hJ_1FjZZr0k=<^Iu%9wUxdASff%wk>` zp?2r@<F651v=r5>$1wbO4Oah}IUKe#@Ov&YpXOkJC*y8tZQeI*9Ym6#-e)5L%<hVa zsal<r054uX)6MPMQ=^k&bK1c(#-Ao8F<Q}Gt~n4_^)Xl<D)1r_NNp0Js>PvGPmwjQ zSv0xDRqLoqOvFm6V2b7UzZ50O_3!8!IS=7XQ-|*I78e!m?kw;(Zo#(#t=pqABt>JY zYL}d@*L5no99vv(18AFPHrXQUNK|_U(jvG~b(&3w{pZ&t#a!hrBiwsp>|iTxCMc3b zj}=k&)ay*xMPb*rhiW1yd6_dinvcuTj14XTERn?d#=F#JGu^^J7rF7q^>*F(isuB( zfy@2HMfqQfgnR;Jj0zu^(P|0;s@|C12xxB4J=tETX_N8*30CFGhxn#i_V}G!D+Rn9 zkfOQz!2I@u@!)l0xSe}x$aEg9xD1iMDScDq<CnpFNH={=-gw8K_B$7UDVhLq`?)2J z_J_u-JLw)`{2s9)*M$C37@XeBIIe|ltK66-Y1u<^Y@f~Mr=a{WpS}=ILtm+=h;ks} z$uzM;47x#MPd+Afsa4OPf~tb<Bx3aF)aQg}WrF4AdtJWj23R`J3*IeC-v4$*RT99z zWJ%cS5w&n`#6kPUxxG?@O%tlb!}7ek$TlFUNjWHy__X~=rS+z%kG@~<yT<LhnuouJ zrBY7==MpbDE1+R23=o5wx%!bDdHocTt$2kS3pdQNSaH9FCru5`m7TM!PrAo0D~>5l z+qXnIe3rQn>2^%=F#~)c`aK<*{O^-DS?_lCy@f_s<khmMVqRE&xpmPB{Uee;O>+6F zh1I9m!nkvq&F^JxXco)mU9NxY@PtimUm@<Fw84<ker^dYmk532)p^GSK%lliYFE0h zdVl&NsRl5+zF%5(+L-~u3XMtf|K9dk_&F=^ty<$ZGKc)}$qqB&is7ucXzMef_}pE{ zr(sG@B;`Tj@ju>}y(n86l2&P1;>%RS^IN0sA0}%azdXb1uW7~Yd~Lm`Bylp&N{-P_ z2`SpY>=W4GsYl1Bv$R47&>xZM4>UY|yvy39>Rnj_ufxJm|Gla)`*2huSzAB4YX_Jy zJu9frUOgeDBvJysl{>%&4Y3bv+nv`#c=4*g-sE=tXa^mCjMTpYZtAtAuS|}rX=Vw) zKx3{Sk$#5o18q8Hr4Ugf45Q4jJnybBpcUm2HOT2X@{V$DM4oiL1;q6bsp_&vxo+AL zEH^l?*H5`y|MOGi1trkKX|RqH!<PqJYh`?Mk$+%iG2SlYVQ)M{0*>iVh{Ps?D;i(e z@Tl|RPpOj^KyTbP15hLA3pn&w{1Ws(6Y^SfDB=s~XbhUB_dl)BGj_x<i;Do=w;Jqk z=ZWRid#0#p%Eh?moj3|rILf=V-nhbp|C3W_PIu@g;@kB6<fdfmZXhxZO!*W^X0mZp z&}$40t|mHeZoowyW`4oO!o4U4Hv~$*{xU{i2b)^Wsob*#pAY!!mON-+0S2fbL%YlJ z5}bYObY8h64JUC0Vnwj2C<0rPo)m#YQ;fl$0{`^l>O9Y~^0cQQ)~tx=cH1)Io5Gph z`X0MjOQM71gS+n+V;Cn7K{+DMWMTcpX>d2#$RJqYTz>nC`&h~T!Z?Zj%pd-)S{K2( za%aZ#(5;JRL!x3q<VR~nrI8j_#Lf7)wxO$$J6RanF*<Vsx_^Rd>pj?iOKql}o#%sx z#IM+iFQj5S<9Kue&7C#?Yyy_Y0=X=4B-Ua?)z3}B)mdM3y{Hr=+v!wx0(!g+ev6pe zuh4J|tSPRqY_Po1ajAy$IZnK$zoGi0SpwFoA6*ZPwUH#y7GvBsx#g{$+cVBJ@+Gfw z+h4Xjb8HBa1&dhD0c=_#ya&rJyK~cU#8cYc949Q~b4vDW!tAkt>x|l)!p^(pTU{Bh z9xS=uX2Ttc)Tcv#v?NCJ&=bV-2olc;Ks@F<?CfqqlUxQWXp~=C>t_WIFu%FE-7byw zq<1~p;0E@9`^G-!K4CRYs-c|ZXVBlUQjM&)Wk5kf2y`*K?UGQI<gx{X3uAV+;gIp$ zYne}ra3{gF&d5Vs1}pL;2PkF-*ym1s$<L11p(d96FM0B}${he3p5p4cX+1I-9NXK9 zgsF%(B|;=ip{|SQg^NU^?+F?S9&*^HOOJ(5oF(%t%5XH4{eaY42eaP5eSJ$E-<a`U z!s*<%hJE*o@8jgQRllt*t$sb$epJRFh;r-9GZJ21KX&Wc9lz!VqdNrBrQe`xky*cr zk)cD@bfi{idrP`<mwhzG{C4tEd(4-BKF~X4I)o0NP*+TP(1Ev&1?(I`Evz>WPVqYI zI+_pUw8wJwU90dINDyGl<6&vTe`+OXy9s2AsrBv(F2#-h^m|YBi`+0zQn$TLOvSvY zDn($*Qq5*x2l>?{>{9O6O=T{mc^{5xtTxMz31F_3#D2h3J$6m^zdW>9d5jo!|GZT7 zXJ_%~(Q##7I1eLIChsF_2m|u4rG9HL;g6(XN*}*`c3Wxs&W!RVC^S9fK7Q?El@ceG zj@oKrz;kU7m9^YIg<1G{`|Ivr%nzcfJFW|c;>u-8?TI{n+md4D$J`ln*WB_;lhK9i zUXSN>FiZ{48UvBQ(%jd*=f@da#@{AAASfyn|I#bL%6C_lqXy3p@P)K`(}AwM5}$wU z+Zkx7(9*5MmW6JEF4cjU*zPm^=);M)Tv3A9$;TtM`Z0GtZS9tNF_r;}3<LS5cXJhV zv~FE=Dgxj{iz(mOc+b8SK5rjynxbT}f%?@NA>#%0%T_1FiG4P_gsuT)&H*0Y>0eX6 zdN<|d<T4lvCzPs49`v8@JjB77tpH^_s9pqIN2bqtyk4qLo?r+rK>F{t9iO%=o}C+# z)TRJR1LQ3}va1yAc($fHNt%+0^>!`M!<CEtpj(UCY<DRmuFMRsa5m!SGdz7Tr%O<m z7sTb;%M&3F*W!@DHc!qq*K-93(D1yz6>j{|+;*aj(Zx5b#ev%>pE#w^u4mg2;ou5$ z@SSnRiCdfA=%0%N9_~u#CLex$GaTx*{){7Lx_!LJsn=%&c&|tf;V6h~(7OY)uD^Kt zAC&edsc${h_dGF&vOBT^5J&tr&t0Mu+y!~<cC3HyBT#{ootNhfz_?vl)9jcbb1k?k zi~_BkigN1-feUOXGauy!hma8g`SGYq6&sm>+q;PpFO;(66jRqfV3AK3AB|hG4-C3F zMvN{b!mxE47J{g2yP=rR)#;mOxR)s)1?#Wahtu*<qv7KUC|A1#e8nw<h9L3r@MzWp zqWXSXIpec{lmOF4-iaF>b|nu7kIH48=7sg>zY!`aX5NU=dvS%2s+R8S`P^<GWPjOw zK;}4gVQ4GWQ&Md`_=ctfDH<r=6hV}+AXcK=i)kg<0)42cJi$h(0BrY|+5TEcfKjeS zpwjVQ3VbT~?J>e+rn;WESM{qg>jvtMS9P(zWF1_6%SP{i9A49;SCg_6Q6Q=YZt3%f zE?J`kf(cW*CeJ_ly<@d`H1Iw|0MNhmVKmkvExUJ0mt~7yD%EY$Q~bV}m#j6@p^rtw zfY@3xJ<()vdg`!?k?1ZKcf&`}UU7h<tWR@Pa!|vX09X&;Y+yRGNn!l8fryK_)W_4E zg_LRSagg={>%^WdF?}uKhk^}`l}zP`oru=%Ey3i6?-k497Za=W32u*D30i&eL7FqY z*=-fUHP;_r3%zw6dULIlWi#aN41~SZMFA0Z#OX9$DbRSU$z<#p7O(bC;V9dxpKRK> z!nzGVUO&8nMxb8>)Yh1{W4Q8k#M_g9h>e#@ZpdpXp!?)o2%|Gu2#<~<1(&;qFwfdG zB0V*JH!fyt@?KBcd3^_yn0bh+0^O+hWLO8$EBTbWuCR7B))JVPd=`g~V@)NmNu~a| z_9^ewWl>qgv9I4os%fft2BN;|u5UD}`hjE2)7$MhsCXD<m3b*K&O0U?llKvD=l!Kv zU0#m(;$KJnbc*!0+#S^w@qK>gZK-+{VqO78bPs<chOH<DYbs{C7n#j|6QY$)JeY1% zHrx#26wX5RuDwjtx@}qSx^pNc1>dsKKUV-l`$OoaWUYn!LqIKcL1Qo6e&y}3><^X? zvr+6MHNJ<{l!LDOcCipIpPNrgC`ot+lrC?={dkI*N1t5vU}CxdBJdKz;zVIp7)dfM zAm&-d?Dd`{)D$R{-O2MQ9riFc{qb^WX#XCj&u7ovmXgF*?qVZMfJPt1GEL`MH*3OP z=rE7o&HNohYRi6v?J#WDJx<5(?EL!oVW%kBM4%}t=FX`|xN*>o_@kN=I1%Y<2`Dps zUQAWO&ScYCElYwT*oIG(-F~!RDFAYlZc51J+*y3wiG)b|`6AP$Huly3^fXi0`6kay zzQ4a0t|U_Jn#Tlh55~3$&9GU-0wJ9YH*92fcTMAtNLvy{Q$W9jE<Ot#;|rnz`V&<i zsJlhl)rAol-&gF4ZIJqu4IZf$;_m|RkCR?^?l=WIb6xK0{HxU;GihI7GtZaH9j8by z@<2s|fAA#*XIjUeKd&!l>;10FAxa<a*dVQh2NSQzCz2TDGCZZ8K$$9hfLWP2D{}J& zb1W1K<*^3aSSx_8pa-xz?xT17Tbj=KA6c<qiIxvxs}9G|g#jtV*J`JpSBU*cPseJk z?>AY6gyXA0T12NHyYt7cfh&Wy)MN4HtO9R3@7w(fOq4PqX>jcIDJ~`^9tR$kKfoU? zc`tAB(l=D|K8m70dZn5Z0AkzrQ?|wYsVj2MvOkOXlkYLVUNg*ab;4gtfp9oxPZX!| z(FVF{1uI~;mmI}8|J2HDDc2luI?9WDX!E~#5nK*hK&sETi{X#aY6RL;<%qfZ6rGlm z$frq)>8H;<Ryqha$=|GW-JN8<Tj+n_7dN4LMhSgwod%T>L8x5c;1R~hqoW0o5Q*Tc z7M*26hdyF+6_wA>=>8T`XgNSt$I)Gayd<O@=U|+Whh4YFGYlrKExr64CF<Y!m*QmN zw`nKOy2`!jkO$xj>-lz-w{`P4nEf%*YlQ20`6Zf^>Og;H&6#I}jL=STaE0--(gQN@ zw9@0LA8?vqUTjwWfQsD6$oWhnwtz^GkCRosB@-At|5?-<SoD_MxkhX0tro}=eozoB zGC+yz=aJN>+H@~Mlw>n>xzrx$z7M#xhT}S$gU4i1Mq!9G7&;DOkXEWW?0KYRP^?+8 z_7Wwnlzh-5QiUx7b<+Qkq+DPPR_%Kk{|x)SsWHP)Fp`N3`uq@NC^AF&Y#$!=fEa5* z@QfVj`q&_nL#@*(e{!oyF0?d_@kHp#^M|*5#zkhYRvkm-hm+(+Ppv!vw~S*a6nH4W zNDi321P(+@eb@EPE05=rE(#XlqWx_@!p!ItK@dh{epOd&plNiwJ~r<P8pwW~wV|Oj zwA>0ik&80B9^Y8)xV4XbQ@NEZ`W?CL>8>OJh31brYK&DHEmFt2^!?&ue{gEM+u&ot z8hI2C#XVP%@0=2vtbA90T%Vwr5nnC7+(a`j;7CES(oqhgUROBj12Gem>&I@cS>Zct zypMlId`!NvWB=#}Q!>))4D_rnA8cz)&>Hv#@y6yTp7T#UZ<Iqhd`u}ysc~N{3jP>z zj)*%mtwzSWbutsQ!b9%a5+`~rtOA!4;J5X(^v>1#c)b&I*qe7qTdnwsXeIRuTlX%! z`);x$Q+n3sKFhn~OSe-=6%j<A0%C>^u>~gveTAPpYRs&b33(dt?K=1%ydvTgIrHoK zijZnOFX0V-j5wuQ2b6$DBe6*Tz`eykYo1#>FC}0kOZ*<zG)fkIYaNOQ!s=|jy}jL; zd(~wa9TFaU6sDdY!(ZS_8Y(x*ZkuF|<|+OwCs60s1XC#SCSzhh@)J?(2?5rtY-I9% zN=acw5MR7A+|qb1JFTT$rrK*vNS@h;Kc8vX2|0P*)!cy(-pSOsOzqid*?y3^)69=s z-Wpe-1z#p3G1p61(Olq=Aa9W$zbf&=e<;^q7JhkvfS4e<EukDls2UFsAu`&VxvG%4 zwo{&EFRD%8W73zz*KYG$2vwI3S~obAOY5JM6`PhqTXmsio67OcY^V~bw}Z1Ab(3h< zt6-DFrXy6(t0zo4{6v~oCEXYSeC><9XS5x7#6XCkyR=#hQc0rHD!7sFji6ePIqmxh zLBAyx*mUK(4J#62KyU?dflFVIhw5g;;u|yH2$l&}TKaE*-tdJGa4Kn;W$R>dJZx~x zb3lPEa<QMoq{*GhP|(z%7vFmSR?c##g^q6`yA|pEl#)XbMlNBHTe7k^0r@h_RP8xT z*!%g#?wowIuP38Euu^(T@GFgg@A}5e^=#*)VCQVqAm~ivVy+Op-$2k)`&JRD+8TCV zoWM_{ByI%G;DX<fw_%w{_%>y8CCIrJ!Kia7z6Uk_c<3z*UwvgTP_Bsp8px$j0y~~R zt(}6WoMBH4z)$0t!ha761Z*Xg6cb86w(Da4QpAYh&{uzIRB&c{yMNn=m+IZW+kGo; z$tm>I)B!WWNK7=I6^K0Okw+PqlIok=IzH~4-Dj{otY+*(X+>9tC=p`^kUUJYraH6R zxca!*Y_;`QPpKa;`d%z-WUUY}tMR7&$0!~+<^!MYZD;wnyK{~Y%|95v$|F+A2B{OE zah~>J)WBHJNH=1*y5CuNDO&kil8z_fuN5UK_S50?t{_xyhH;Kr>Z)Izm(u1xe=Z!r znF#%yIM@oM1()`tstzBl5IIhsH7V&S&m9U1PrXV(7kk@j67F8)TMp#m<2ETZ6rji8 z)E$<#CO>r3*f<&q1bef@W8IB#tRH1B6#L|n3O2Am(M6WA#!{Z#1~xCDN~U!Q|6tqm z5H^hS^}speuuW_iac+$pe)q0{Ms?I|#jH(A+B<n;TSOjvClL#ZnJ9Knb!Kg)jC|W_ zS+NzbrVZKf50AoWFJI^jql$?=z=^)S1yrrMkE1bdZ6koxi8J$;&Q6j-Dtj+w+6%1= zH1lSvE32f-<sBKf(`qWp?YsCJu*T<MDynF>F!2&5KBzB*bG{zLMD*W8DQl90;PSwX zM&tKTRNISTYUqufS1Q~aWO<^VX8>jZ-`^=XsnIv)6y)H;_5QBMc!FCefs4$GRN>h2 z-zU0aX-v-MgC15EwuNb4!rkZoQu}pl=1!doEov*5foNX3!O;YhK)#%@^LmpI<aAKG zjlRc#>v}IDaqNSih*A<;ZM&fEN6DN)rmaW3>ew-9RDK4bH9yx9j<i-;^04SD8&G_- z8xM2dHeq@A?(Fog0Lx&{xWaKclo}|(b3x?X-TF2#H)OMQj&4YZ9kK1bjbM9VaByYf z&DlJn2Xu>=*k?+XY$VVo3bncdF(k>>1Kv!@%$~2wuSpt4MCv!#y(=za7(LtG)Oz~m z;rp8g%LBie-tlBkxQ4_Q5etyG`5GL1yHHtmYH&$aj0Ec4XjJz=I<NlBiBkuVUoqYW zWB{Y!u}aFtopps<Ue~(n!=CD3(gL+Ze~LKGEX`VU!5a3Wx^62yDtF_MITMZ~sorai z5g8V6i*4C2a<Fr}S?IjCMbyFqHGvFJ{q<<<h%GgGqR6FD!hT<D;G2`!pEpw$FTKyl zi5rFxn<<D^HTa+#c_t5&kPxk>#`$?mEm`t@VgxS!ClE&2+nTkX+Z16Em=}rc$x>pK z%V4xKIDc}rx5ehXc{Nuv&@|sPgA_6&i)H{*8{yF~U(PDEpx;r^^I(B^xn~JaRxow@ z$IKP@siPba=1+F1YcA*P*Ust6H~;ht197;u-zZ1;t^CPS4G0L$w30rCvx`BinrL%I z)evl`yZ*<r!qhCSt1H^)^oq@b)k!~y){<D)6F3;{Z)~``oNNuF?=psV{{y{w02mEm zn(g((VA{G$ZTqg-X<1E=3iq3*UZty-NSk~8XiC>T+ypInueXt~vYBPr&@d4DLqJ|` zr}=gz_?CQ^t;Gm2!w#DlqhQ?>>8_+0{MChFJjIo@^;6O=RjHz#_OD=s@|Zah4P<zq zKgCx~guAo++3U-gvKnw4XB~ZtxT5;RERR)`6hIKc;5J?oxepg|v5)-6%DTrQNU$v% zWP!f&V4BB?i98GAyGvEO9CCiV0g`nRzg#c=Z!OUOzQqAtPGh*$7Z}HJt=|MypCq-Y zC+=UA6Wy(3DpUw8C{SHd?-~-hJJUeN&W<%TGt}*GP1vN`RHVAS0Da-%{r~PJ`@c*| zaFJGkK}veU4d~W&mpN2vbiBxZ0~JHa0Fyz@H#dfEwpf?<`)}A3MAh&YxiT|RP^@11 zKiqxe$oj6GU^!jspdfp}LC3n(ktDjuKOdIKSl>rHo!&XzxxXw{S%tJW;O#c}Pcld) zocT$)HQ3W2{Bd*4qDjhiOPAvD+0>eclrg{RJ?V(qrUaVw8eG$KA$jc9yqv<DfVgLU z*G-)U&1ji|Qf(sshdM2jv6w$+TRh{-@aLbOK!w_)J@0LBMQEFlXlcB%v|x}o)vjm8 z=)}@#frjZXR_abAGI8SK6y51+tFI-D4bWAA|I_a`{p@;1*DvN8Y^u>d>l*~6Sy>v% zZnjVl6yy3!QEu>0{&(-TtixDNZBfzH`uaEx&#P`s-f#_LHi{5t<^TQK{=dK0^QmDE zOYa7<bgI?+LR6=ZCRov6S4C^h8S}a(R%!JBs^@%*akpQD5UU4caH-hqpOpeUF`U_Y zYK!L0@xMRnQPB^@u%*-9!2Oc_Id4*d6$9yX&1^S_X`)cO7o;|`B8be`dLe<iLW9Xf z4{(eI(KwE1cg(tfo!twSn;$2Bc)S&AF{f)j2VjAva4+XP3L9!e19W6yHw#jq&K+I^ zJck)f?PA+&J~MJnaaFutB^SW|yT0uWv915iGeV{YTA{-m|67|sK~PFZrqZjXAfeK= z>!Xr6U9{8e&R}M_OGaQ&f&TS;27&mk7H!lh6{5rUlY!Mlf|9Mv>X_J(vf;?ftX|n= z(c>DCs6j7zhtNGs4wh2SD(BXaGDovTn?-~V3nsi~_5qMSe#B%F(pKrR0-F9a>zCbJ zx&3DFwD_U%Fhxj7(bSQmnA7v7S(%E@yOq_f5F^d^)yf)LRhza896{E>G5Z9gJuT;$ zamwl&Tqd6XwA&UF(S5^}>ydVj`!bJ5vpMg7z_$K7phOZ0(0&?;UWJkzhf0ghyRtW? zQ7hPo>QDFOHOAe(1D?QY6&&Ks0iN&<A{^lIZE-WB2enZ2@q^+0%evQTW_~MI{JYct z`B_^^U`eEm;+_06>z-<wD=q3Df%rV67)s=r`_HZ-BK<1-K%L2jdHi4B+7r<*!IXfT z?1`@b`SI7zwy?o*w~7`MPVlF;p=Bmo0B0`|9YWpFp$ja$H&U$?-OZ+7n`O-q0-_Jm zH(lNW_=A)uoIjE@xU}t4T+A?b8r)`cP%3aOh+(2^F<$!BjQHWn(_9)gK`l<?`{aht z^ofBR|8>;W^3RB{Vl;7<XsE0FY{Z=9&(@FD=vQnPPfTPN46K3yemRZw3qo}sCg|K+ z6Kya{O>GL+N)ulxdf>TX9pM0m^;>8~R`ItW8#vvlgp!`7yuheS?pV|tXgIib@=qOR zU#N^2&bn7s@1aK;Vzm06uf(X*TQpc2b~en2ic5H|C9F&@->TE&>n#8@;wJcGz(0}r zTu)2ABl2u`*f^bKNYD>tG5z09GlHNWRgb>8p1RrEPuBSKa7is)w14$}=xi#gu3ZSn zrleKw%JE@ZHduUr@L_R^m?l%)r&KS)HuJ9Lx!Ea=*F;4BJehG?Xm+m>UM-5zOmS+6 zQ%(Q+UR%%@PQ8_$D}=v@tSQNm3rN24_JGyRU8SJmzfReIKa~I4UVf4~?Cv61vpDj8 zs3@vnvEw2VdmYMgAOcNLVb6Qs*&H@wk&gZ06lN({hkkhf(Oae@R<vwWB}s4Ua7?vt z|CF^UFtY8kzFi4wkmmz)lAL!E1;xIPAsC7kN+`zq<5x;cHZ6GCet#gK(3Rj!WjpY4 zS}V`d9XPJW1*_OWr-$EdskF5a^pvbi;A8M)e`%w`<Oq;A5FEDgRT2&}0<BHCKkPjH z+ydAVoCUen#r3;>o6AEPMYH<@vVgF>V9S1v_zYI)!UkK+a#!oV_NKh|bUOgTnmcUG z*wMvqRm4(vC^${=FT4BI1=?+2_}2h^+yk!5ZvFLLF=r9TfnewhjyoMbC1w^H91A^; zB@RiA&l9L`(Ru?BbGQAd4!cm<y{4&8d=wD*!{=>gHZEp)^|!8CY}b3nq8!k%RZ5Cw z>se%2P*7g2T$#(S*tkF+Jz{h@(FBc9VT29XfI9MCrVw6Fdp4FuJ32o1X%ASO<w=_% zq6f1AKJwR`zY8#x519GDl5Uc`mlbgMQX5odG70hU12L3Dd?N;#PaRP<1$`Ua?6pf~ z`u0xg{evOVht<6?`v5y)bA>4un-^Jiba9zTj8U7~2>AV~pKexXZ^^`Sz&7d(22=9J z=uzu_pIz{P%UgY}3g`U%30e^=oI2*uBh(h&&vPkzhs-<&&+p{Xb&(pZ8Am92o_-JK z<z8%Foo5Xfd)Ijj!rQ3NV0|@aNTx}Q$5u-F^k;aNl}UV8zxg$C#`RK+1cOWC*_RDZ zPahvHp(|Zac+GF<_nQXWK(P`r3jPr|PW@Xe&Zx!BfG)z;?*W$KzZA=Mycgb<JaU9M z6}sudSwC(G!{&O&r~VCQ%Z2{0%Zqixbc7pSI)w?H0A2So(g-=dIj@^;mS0OH*qm;% z!BNgY9U>bYOfW=hW=#?+`cTKAc7D7Gii<xn4=Q-V)Vbn}2vrh15Ve_hhGR;Tn%Sbp zjx={nOQZIRw1Csi_p1rHX--(Wcy}f0!p^GljkEZ{93G{G9R@jihp@OvKc#eL-9c3b z89)SSG19LP5m_pi>Yv=4zVdK!g!a<Q?q-B-V4@x|ufVlaZ01l*4sF;h->c4ivXCj3 z{g#zi(ayVjTcoX;VGFDGC6~8j3Zh)Nxx(97!{-qn*3Tc>)ja*5o3s+Fiv=k8c4erA zMc3PI901r-XL`4QehFTBb?4F9oF^6O`F8?Pl%N5<m^%7geYm02Hc>yo^!Cc$d2f(^ zb%&qs^*Qu2%VtYMZH+$5>pZXHzEBFxD48liJQ=_P5E+y>{P;L($&>m<>@Z#3*hFSh z%ke~meO|1^Gh(dar2Q1>$p!okTe_}UW&5!MFMZPwrz3!Bimgt=LK&C9{?^iFQw`tj z4kD_{Jop3j4I*XNjSrAJl-L`LSWsV(LGh+Xde%_h@9@}klf=scxq;+{Ee3Gs_(*SS zUNrpB-SkDwVst@s1GP6V8%4y`UyvoAEwiRP=E}qDoJSB{4EnaSN!G_+Di3%eY=kzD zazTKJq~S`eLmcxkA!Xd<jla(ZY$B=M+`Jhyr)1(DQ{<d-Yq_fM6Uhh+IXB~MC9h2P zwHaSaLxQ}q-Q;a6&~#0g^B^5wwSQYdw%s0zo~_(avK9{Oa!RDzY@82ZWkh^MMa5{f z*g^R&*PY$Mwt_x}h_n%eBYaDMfCUr9{L&uLCZw0Bx3wbg($JGN;oPvcR*?~aF5ZLF z=Kw={<VCt((Cb#XKBJ{e|BARxvVTWr9t{}@j33OPiy~2$<sB~H+=&SqM3A64L6K#D zDR@V^&ai(e&ThatE<Ww%*Alt8mzQFh+vQoMw0EYA^@aDDI{>q||8hOM>^bx%F@3FX zs7m-a&P$CsIdF)+n63`~aK}0^mSkB3)_trn*yQ!5{zv&Wpid?L)R^1s%v1tOFr?vU zlTgydB+{>EJs&NXsLqeZB?hSTCTQA|Gy<91r<QuSCKYs;Vz|v|)vpZk&bj-T)J)b_ z<mj3->$-{fp+x}}fmbZSpkykc!DV#<X#a&O_4p?}roJQHVdtWrMiPNt<Ttpv1DzP# z%Ew$5%dW>rowU<lDHte0(%P|!P@yyFxr3W;SH{Mx>Zd=sJ?jAgp)Vz#_sefsuf?|O z7X!zhXO0w4Um4_bAf)sk8gma<tJucMSwOOUh_QWV#}RM7DIl)x92!uC%RjlZz*dU0 zW{roq6oKWYQP#$5AF7LPqfnMl9dd!PL2H!4yfjHGWyWB7#}7a;CO%IzY)u%ajy9x> z)8Xrd-Mc4pYRXBtLVl5oX}b7e4P9@knDYBe!MV7;a<_JpRcFqRMs1f-32?hTprXCu zK7G$1_fPA<FIq_}P;96022hI>2gbI=i|;2E;ZfTwRE5rKZy$Hxd9swy0LSjJs$*<v z{!+MaS~wQXJBO~_j>_CYoWE|K5C(~FIyT|lCHgv<^#b}OmtDM6nB8}8voB0My%|x9 zn2`<tA1;;)APB~aXRO9^(AXN)&x-q&Wg2@_ra!vPa^5l$J~3Ud<c1xAQmq@hv9^X3 z`q?pfrtKKB^><dX&(|JxMRPbNuj;C@j+ActtT#Q-^6sR<Nie9$Wf<Z>VBayLnNCq> zj>v`r7nCnY&d{8hXh5v1My;gU`7IblBc;YzpwNd+$n&rRVB*uRh}rS6Nqq5naoOr; zCBIB^U_qv!;V%FkUkI+#n{DR?MHjh<`VK~v`nTJP6&MS0_cf_obtDcjmb<JOO(}t} z@wz&^pV}g+UOiJb;4$_GMd(&ROr{Q@S6w<qn`e$(WGsJ~vzQgeXFXV!55s|~^h-$k zQ?j-!8)q!po@G{?7`~YE?a}nH8tNqOn&wr1W(s1VQ_we8xfRaIhK>-iN23A2bI$v7 z8se4VZrkEdlf6hK_k3_-uRGuuCYb8RTbHD~`QG#0Av}CCbiPG^5ZS*DhpS^I=yfp- zzcwr0g(+Q$$56xW<r1r72UKtS=Fx%GB$#C6vmztcQ!Yw|4SFk*n36_IuYRu%upv$r zZz$L+e8r<<cIz|Z9o*LIr)&7-)pXO~>XWiT%0ZfSbH2lnEs^H_8WqVj*|*2L)SNoi za3O8?e09N;NB>R}b>PYk#0sALQk9AVqEUZqNlfNniWf~`ytS9+3N@1y>3Umf<Ok1e zYF5!i9be|=xk|Zo5!Z4-w)1Y7NSI;_P9FiKmXBPW+phAfm`&xwM$U+NTyY<*%85Rm zYr8P&-62$H*Uv&!gXm&^HzmLGEH;+>oMtZ=2H$A=HlbWmMnJ^Z!ztCBF20I;NO;=s zyNgz051g8z8n!>`WZ=;(KEwiaU+a8oxwAsYtfQ`3!?i?*L4}Xt<xrJ5nzaGt`y&Gx zDqL;T4YPA^!gu)DDoF?To!FnyzlA;v?*%3!^&Or7at|MG<HE5LT|N}4%|9pBo+_1q zOEt4mB4z{?lFaZ3SmoiEg|6LkbTuyWCu`efVJiM%_Dd~0(`~^)gLvmw@ieGUk(-oW z*{E36Hh+_m&mU(0zI(4Jse<MJd754vSqxAVR26NW@xcAq(^1M#_!k~>`zv{@=DGfE z|3DBw(E{2tiFD>0S@r3N9Y$*e&36g^t1oVAq)1)ySuD07wqZfk5)m>Z=qMiMxwUB^ zA%Zeq`fAbbE1`FJaViBJ)B`sB(<I@1D_7L=57bY~#LTE+;o5K9I)~MAC)ipS)Vsjy zI*cmgMytST_QKbwsM$jodVBFge04_uiq!YXc3~jmgg0`{aQdm5k5~et|Eay|=t%Nm zwXP9yqQt`4%Z(+MgJ4b06jXI~%MN}Rh0`}2eO$fQYr{7~GQ}*4xoIX1+xce~iayZ1 zah3jO7*$oE$XeG&)qNijW7iVsjKeTwGK4o-g^wiPz+qFe;Zhk*Hhb9O;Ed;gv<7s0 z7cf-@ez7j_7s=4#AGRaTdl<7~ufp)2M>gO`N9DPS1ox(JnR^YvYKWJuH6I-v>*Bcv zrQ?!D+YK=KELvD7jd)ARMqpHZn$n1G#t*uOKw{<%DiEIkK0Jc-;SH8r&k%36$>Eot zEt<4sg{De*F!kl(HS5;Ec_H|K*%8g7BWu>)T%kFcR}*J`?ey1@XsbA6LVt!ZPdj%? z&B*TEfJZ4QG;wrfU-{T*Y_7va-|*uft$bPA9+gKk?M@hB<RP`?MpfF1Z0MAssr@E} zSmJy}cdp_L#7U*@dY&89O(pfcyGLPLyg~Y7ZC-cB33Y4Pk@^QZ{F(<+W&AROe|UY_ zc^%tV7IFHpJHaMP=5BU|Go^9|W@34nkG%9X)cUym#++>+Mw3-a5?{CIn73=UVyfPh z_S{bS^ET)z<;F_Ubf>_=1U42*yJhjB?Ca)<L8jQ-Sr+9C3O_1B+vVW$l@8piX_B^# zh!~~Cye!|lrstw|vG(3|Qt=alQI~{h6uUc>XO!&ZirrkU?W7l%4Dq+scEkzRNFHAe zQ$Bd*XB%x1-1RRcExyFHm0b5OznX6br`LE2pa%ikGJMU(Gv8I(wX4BCKwiOpH$&q1 z#`Tp0M{-Aq)|<0q_}8rg2Vw=V#-%P;dkWJ)3eQy5H##+hO|lnd7AG>SCV#x?jqGqB zS<ebI5;yRJWM}clN_pBh3D;9>axRPO$Rbgs*E6gGED8W=862ybLVm(rHD2uS3n6{x zBm;Rr*M6^LJ-rHG*wCR}Efii<r#@z?e80L1tu)!lbKO#M$6iSHWI1$<e-lpLb+iON z%t*r?LLO1EOY<SAxYAYvcY16&*vV>Y7jB}}l(O^2Iq&W6o7P91l-w0{1?>pzoeGR4 zl#BQR#0(BO27IFf;X0kD5~0jY$#DYO^JSnhC>}~L(SEN2Z2N3_+wY1Hxy++ZkLl9K z@33pwL}lw{5V>_*R?m>zsYkvJO>{HKMfp9@DW32s`0#``c=;znrC|&rH?>WsCrPwt z+xpfvn*Z)<*08(VMElsRXY&_Dq4Jm|4EvAd22wtkfgqNf`AzTEZ5v%C&P!=&FPj<C zAM4T<bZ|6FutM}_AR<_6)u*%dId66wDCrm4={2Xu`$PYE9^S(3W;?JV4(sjYBrnd^ zkLgrST^Z-2mtIUf?(xojp<+Ed<~fM6g+cCT?M2zOPOn1lFD~&)*X2erQ#&M<xB-#g z*dmUn4{X30eLMnFGMSmLY^~K95j?w*Pq^ZSi7_)k53Ju>qK89<qqEfIo7IMqRQa;G z=zCtV6Q2yqykciCav+^dKUp*{;d`OEIVgx0L6u8J2b)P(Icz~0WX1%#(?cXO^Z{p` z$Lj<fgnrOQ5aKRgJg9=-$SN&`m;o3yx2H4p>#~Z;<=@TrSY~7G-$op>(_VT<8=H0b z40EI(HUEH^j_W%U&n(*l!1vc%VESgqmTO;AbhwRm&SpCqi7+6#_EqP!$_TX7tx@NX zUI|*WOb)##&Q?L^<(dHtx%<;?MWh42lN()qr_?UoH&yFqCGUyw7}*#lSN68G)x|x4 zYSxC)t8rlPIF5_u3b1@pEF&(+0PhoXaG)NeY5Fl<v712k+#|Zl=hqO`6|YSZxdUu& zngezukJfs_V$=0|&vEiClaLQ-(s5s-YE+A#V4$%UHch~^o2UtwiT8XuXRj_u@0z}% zld0uB4A+9^L0!e(YyZZle`(|hSLbQ+R2<^FnEiF-qtSB9hD{Y~%nqyC97!Eo;EJ*e zgwP27rFhryDifz6>i-Xd*Jq{WLKnMSlIY?B#R83)RIO=oYdg!WX1<>ht)8#aa-jEr z0%}z;#U8QOsD^|>v8uz0tMVqpoP+l7FfXilR?^)5|4Yvdg2}#^?rKJ~#8=86EmOsr z(nvS0WYU%ZCZRc(>msjRv255S0Gxj2<-=SVw1iVG>$*hxPzDH`&w{o%{ELtQ*RiHu z=MODygkIB|fnF&1!%hER)t~>`4mi9l0f__-ea_}osjTffMV_N^!>s#G3FSs5qtpYf z`4Yqm`Q+$)$QpjFh)|LPoTP!zi*EP;QFYA{j58N4&dhz~QTXTC)D+359GpD>;CApY zV5Q2P8Q#a19nZ)c1?D9-a^(e*4-rOIux`qZL_`-`?#Ao$K=k0~_g^I!NN#D9F1zow z5Xr7KM+qOF^3j7wn`5;K(2qd4)~*tu`gyGlP3s6s1AF!*o<5q0&O6!xR2^Tn^a!@3 z9CR39Ub!K$-%@<>6-Kh^3P&HatDZ@%B%*}LS`!~tj~^iZQWU<f&cI28HozII!BA^_ z+D-=`{<&wP>-}DuD-=(qn&w0l#+p<J$5%n_5vcn{3W;IP%T?n1UihU;!#AOHM$;XE zF@O#uPIccpgb9lL@RuTGijYXw&Fh7p5%W&Pf+D<C*&qxnDtP7bSel`R7AZmevpzn1 z^}*m)WS#{{o8T1Qz%B8NSohWPBIb{MQ>=Nt*Hoq=iw(Lsr~{1LQO;k|!%#~wZD=`G zVA|3;q5)O=l01|bdb1ui3t~{xUj<iwm;ov>^viJxpxqw!6S`(VMaYP)kU`fw^@#+9 zg^b3E)+7wRfOeZ&o@)*;bzOtJ6rw2aO;9O##owNd{W85ox=hp;>k$*Nbvae(Y7PYA zZvj2MQ?%+1ppAa^wpt%|LdvGi`AcC1v?hNw?40SfOKk+csvY1QzIAs>^5rvz&w@M) zR}%-}R??MHGP*6jDTT90SO@}~ib=@#;}i2!flH6BRmcr(v;xn9hU1uY*yXLKcJC>h za>CEV#G6$yS1*d{mtWFknZ}C67a_hkTfI*GO93JKAx0`}ox7Mw(gcM~NAdtcc^l<z zvZ~>hl*D*M{U?NZ8vyo&&MWC*(ab8(1LUC#=~_(-JJD)db<Z4BBfN6~-(zYc0euk) z0Ei~t*MW%8oQZJ#YS`Vs6w@()y>$XbO@3zEvv*Ddx?sN+fMzB+yjg|Qs`~_&HkOJl z_gYvih)c^<P1+Ms?cv7-c>_KWse0(`pU#c`Xw=Kw=^2I-cY{*`?iRGFqEyM6T@k>2 z1<ZN#5k_QW*S_Yi>eeycA2+vS;ATvr!AhL{o1~(tW%ZXL9{OvF7qGMj_Wh-J64}9u zkszgXQ9^%m02afi#eTk~QQ-Uf>~1#vfH(;vO$RHUX>fzrS#%aEZT_KtKUHy8L*UkX zw^+iJt(8l}i?2YNpRi$qcO%xeC_qwV)Faf)nz=4!h^8|ZrKE82zZ6@sfJNyJFsMDJ z`2kaeQ&0}i?@@2tj^A}sN0*4?hHUo=@X0C~CNR^kS71(r^~}5dx@a7$5%fxpQ^<ou z$14FCxLCtq3LXe^?%c`x$w}{~bR6YKx2bC0mQ67sm#vhjhdugoxuSRpm?3_!6IFdF zB7Gc?Ynd2EW=>iCJy55qx@^vFdU&}Ry~yCC4+~ThYD7&`s&oB<28<*DH`<A8Q?&a) zYeCfI?HdVlI5s%-MPZfLAyI{W!Mwl5(sHYD>S^qhffog-#sb~&ZKB6r3-xCSxFerf zHSKUA>GB~D8b9Xiz%fJF{Bp0Oo1jg1TDziG=m;l??E*geHi<VEwM3(N(;w~LFf3KZ zReKu7_+ETd0d1g)a$RaC-<Q^n3Ve|!=M@L7<iBzIroj}DR8+<_H69Anp$``benNo^ zhuC#=e7`7Ay5e1IE_SqUwnXK=(0F-U@TJb-+F=#^AB*iKi#0%u#nhin+@#Jy*4kY_ zlo_4Qsk;%)a2NO;AT?L=P8%NUc1|-=ww?lYwroA(3?Zx1LT^qa_8X84YKcK_sIF7v zW#f%sc`^LNji?Obu8^;o196l$TsrTQ1nNIS^Hsjt3)DSK;ezG`9(u;%2UL4KSu0nW zt;I2j^AYwpXQ8&LM6Am$)DC(}$0w!NIh9NSzYkw$>FC2Xk&^Wp0snU>`E4_Z6L45& zEkb{S^#4*!B_XRIDov4|uug^py99NXZ0B`tN;fLgt04_D$cgXH(Ay#OE3OA%i{6R; zT-LVMltYxqJ)avM%}1;L6VJwpGq@mqwve&E6e!d!eW3Om%*A@!`*V~~POt**0R9ys zP1Dg7dH78<tg6yKS@22VRVoSuCT3q1l`@EYPGt0PdUN@S8_hr~f+2y)bHgUFJRI~7 z&pwk;kV}bD<Nmd)MPXOM8gO}aF9{InO<>q#xL|!%_DDtsWbLSsSX;C4fCG4@Cvfkd z5Gsgfu;!nEad<GzG~%sQ(fxzF-UpX{#_S%_C=Q-=^#&_y)ra>&7Xq@l{HN;lz1w~S zd3{Z;tEPDk-s(km-nvMYRi)buxV^Nr5HXq*ULV<E%Kc%_daiq78*^8gbO(Bvka;c( zoI84a*TwsczZ6<J#(*jLw4{kBfMsc1&Ew-r_~H22?K{zh$&2&|U+;D6X{&Yh)Xr}) zFuFU8FBM0VRyGjPS@^JtvLJkoZe1k*B5fzXmB<ZrH5hcSrdo*%u1bBE;%P7%1YB4C zAlj~NPM};>P%R>Yl?KR;a{${$$MQ~Vtkwsyl*8s&Z&u#Cj4w!a9Ow!dJ+N{QA5v8| zjA=8*U*G{llSY>R2Udtf#-HcV5rv|>{eWrc&ra1GMJ%AoFzr3q%n&#%MA+{8<<Ua7 zLI3`l(&|1eWjwToWb_pr@N6p8l)#hUX=$IXfBzx9ag+8$L)0pLH~bL+w-rxV#CQ|9 zEUb(^)V*Vo8s=3B5U<#=SWy6;x|Kv9;01jSzhG9DKL%d4|BJRa4~Mdi|Av)H*(M4h zl(noWOW7u5OOkBaW)iZS$~G7#WX&!VG0B!R<Hj&{X{;gHX6(#R)?vmvF{bCb-}iW* z-}^hB{g3BA$6=W3y3X_bUf<=jWEhAYy($EvFy!6ggH(+r(r)oz762iJyYM!2hxv;5 z1#vr8IQ2L@ML3I#b%l7WeP?S*b)Lyp0K8LOw9SD+ilVrXdekn5++7=C3VnjT)Q~OE z{n>@w9Qp#CP+6MC04o6%5IeX={AUQN&A1F)!&`bj^WVTfj754V{ke){Yg<=A?zr-8 z1e)88_|_(i@0+zHnRo_sw9AUFevJZ4Ks6aMG^e>pt&<Bd_F3kk9d!)f`53i5-9Poj zdbhs}2!EJp@<xJEH1et3jQB)fAEz2^`a7HA!1WL`J;QrcN66qJm>Z#Rk(Ea=#~T|K zVhVt*)lqT|^l~>})ISbuyd2NMxVBQ4<@EP%0}n-8;0S5X=rlOgK=!QAV9c(o!1dK` z08UOdON=+jB(XhUjz5`6kV$<qdim%RL&EceZduXP@()6q<F88(4Z800HX<+3g}a!F zH1p_P-}~lVla+CsF~kG;k(!>S1^Kq?E=)VZclhjI7CYMShL3b5-KzTf;V6SoUh4bO zC%A)sll6*j1ZWW@s2;OoscpP%wfr+MtqSBd2VR#WBs+9MdtfFmX;-+Y$)cX%dIN=U z|C4En`lAVmvs3{z`KOism0Z+)M*cpKnXE(1kJx8($d!!uM&IW4{g7GedqrJ3VoS`} z3!X?H*dIxgzbwvIkUIjHngyfCUGN3ZNrS;SSWz`mC9EpUV=Fc7pLOJA$Ng9xX>UTo z^${%vni4*t%q#d6I(fGy;qtqq7O=)%s2m>bf%+q+a~4R3@M3_acg`N*bdx?s5<5y# zMlSbwPgi8oi%6=p?#MuM5SBcH8Dqa|sCT`w{^kKX<W7VZEfpW;%>hcZ=W5xA5>$w- zac%$FJ)>CA9A?{A#P*;^_u+M}5F?5bDM58E?i_U7&&m8w=AqsU@zWGwSLIK)K}3kB zl9O}rQ>SlVgGPSw`dsufyIa(5PaR;K3k@E9Fg2sul0=H}M`w2RFN?hENLyeW5{nS- zu~(Vr;4SVfpI3sp!LyJ0K%?wHmEV2N-2YIR{>1cs_PIMK>d6pm<n7uGF_E^#L^z7s z4BF=VN}priBTO;B9w3=Xu`S-D-R2tzZE8;5#TOT_Q$~8XH6Q8KOYC9_nkDuugBogS zEtH`dq#919Ae<ZAk!v1*Vk%-3DBw$K$sy}*i7+@#36LNurYECL0)(ovMB?JeZYQ(1 z#fK{PQ4CmG1W{nY>EQvMESgMn1+-JgQB$Cz7$(ot=)PI)cdsaaY-`}khD`u~5+c## z9j2WtlJ|TVT;Kw@<O&M{yP|#(IDV~}K*q*cnLA&9^s!X{Wz`^75|#{yQ4IDY#Qt5m zlc6%5K!dk{lj`=n{L5rs-;+DXM_CZR{f=*UqeGM^0>R|9!D!rw_ar2_Y@#{)S7Gdi z$&!Ba^M0?^EEx*$J(7K-{i7Hk<c=v3dT0TJWKNpQQ4@0Ip0)bxw#6wJuqExq4(`kT z>pT5N&D8vm#S92=vn5A4;Kf)tj5&+kDYf6V|BvbSf7Cz!2@?@Zoes}{R)s)4rViUQ zFW=Zqc@FWUrhd%@e8w@VSuHIiiWF7T6{X^>Y=eNOA_7`gbG$ktkhKVDpnN4cS*xIU zSC*gfn)1`jQV&zW=l&47<HUh#eyRw09zyr9za;f>M8SPdhQV(1jcHhaBu3g#Vq7Mt zo^_<FKN=D+BKQp~rmd=NHK#R5=0~1ptMs==aYcx&iE`3%5_UE7Z3ZoBiKV6qZ#!Jx zIR(FesROx}l~n}zvcMt(2OdJ>8Zn6hW`;1VPJV^H^d+Q~$Kan%Cu%o-lXnHoSBY>( zR;<`od#QPQ2C_ReYu?`aWB#sf2^G2<x)nAD^x5yyODgEN_Jiz{@(TTnwl<URAGQvE z;KY2>2ImXmUN&2V)7*_|pXWRZch>Zu*8P&gm-D)%79K6F*yza6K~6N-YlOn*afoO3 z-oeT7rWhGJj=K{{Y2%c)hgM)-EjBV#0PrFl6>l0sXX>^%EN5lgT(7^<p<ee8*KAq@ zZ(OtbSsQ-t!7zIB3#ovk$sr~ky=2Gf9;NfxD90`va+(;3j1RR<WVnTt`VBwH&=l6z zcKleAbfX4*iy<drrXzzr`nchX#FdPyaO4RzW^{*Kb-iij)N)J)^*nb^cB@T<ey*cH zoE}Y@<FTJzIcrd8A~A&*@3~i4wNKljJY<+rxpCxVBS7aa8R_g^>EW;P;Xa0H(j<7{ z;vQxbkGC^ZWlNA6`89e*D*4s@^kd^J>m9j2XdB5D-uBj?>0uVJcnfS(%Em1~;}BMJ z%aA2HI(LC#I*;O`|8|ld=@JMP!Mt`07Fqvir9!Uv#maj{=rMuJ5$P72&%m4#m+LlD z_wm!7zaFi>@@L@*H6;5MY9jMn8a?c5HKc3s>X?jYVTO6LZ=|@=hzt!=M25Wt5+o&N zZ`;UbTTLKEbl!1%HpKa>_E=otO}<F-;7RykcOybWJ+W4SAFqF1KF7O660Oi<nf4BG zLQr(Kj0PojKyFYK3ZhG<rSqlp<t^<@aB_mlcRwFpL*89tSk8mv0fBC9W;7Yf<8j5E zhoYAK@NDNr_5S|ZnV3hkIeZ%ry^<83`pSOa7`J6}K4V_~6%W4}MJy)ND7J9a7aOmz zn_3NE4~+7hrr2MyfYooI?`{o<eT7`2+SFDI&O6K~>?Gg!50uU?mw%~yb=4(cJ)8?d zReGtoGsnLQQKXqM?Bf8#v9nikdTI9Gz){yiD02rROf`l!AYqhD@=#g!lc;UMHJFg{ z+ch=SmyvgK$nN+x7$4$B=C?^?miMC3h3cn2#&fk!u28xcoWx$K+-$x<%9k_5`3_Au z6a&d|^X)%x4>L3AM2-)1P=|eR=Ml84X4X@QzsxVYdg^13AP=G{OQ$|1$DS${U)g$X zr9d@t-{jHGntM&+M7G(Wu;4A1qjeKV8N`;R`BmrgzsEqe;t^y;jp`u)^}?A98+r;W zXNZZ?_9~#~n@^V055MvAk3c5Jy$J%QAuyH8xl-xjsoHA=|2|Mr_~ExWGn!)ChpFC+ zy;`2mo-*0}Ez?czZO%ZW<~)P70=|Ynxcd4*?Fd7^#7SZChIozM#W27p57Z3>X@x9o zo&x$80Ogreak#ip{)_A6-Gdq(<lU8sOLT{h0tGr!Jx*t+XsR#xbmDIxW9y*mv<DF) zD{PUqB1WW(t?UHMmr)E#<dwQwVJgq(n5SGDfD!dy7JPx)PsX)IQS@hz*va9q6XS#K zoTb)}n_PnBp9Q6SwaNJgz$kO@5f?K0x-^#dW<U4|62dnQA4JAX&!6i7=X=4)eUQ-r zxz|cuj^mS#(}pyyecj%q>+{!7GA|eGvf-1@Sy1O<d;)xpSJvy4CC}EreI{t-qR`X; z^d(a915mPI4y@GP$+Ipy?Osjsh<vha{fUb%N&Zfv`OXU$ny>gMVX&t8W=|g3Ecp~V z`r>b-G_}6Bm6{ie1(M^~R>9R)?)ovGd$!jc<<+zM#CwImD;I=u?o|LuY;1%$pn<nd z53?Q9Qs+ZYM;MH)pY4C@x?#<IUip9!_nOH+;jP2*bH_|$%U5SjcME#2g+=ol?dAFR zyUVh1i3pj6LBVCzxW-;Zq340sq0OGJ+EshcpBJ+p{AH1K7u{Vxkk0Y`xV&fo6eX7B z?#bTH8!DT`-c3)Kr+~X5=bL`+>h+!<cg@n-xvz0^pRb3GyhE=joM<n_G?1L`{y51~ zGDbmnPqL>zz#Ic7tCNFYB1{&fsNXT=B@!O{%5z$&tmV0GdnZU<`<-*Ayjyjs4?UEf zJhOdoNapZ1HaWjp^w~QYEl{Qh&8pGEJqx{w77kwgv9~TY)trc5)P4C?U8j~ip^RaR zOOZ1(a-hEXd1(@6_Ga@L^B3#Kr=|1~>LR^$^DaRp+;~M)au^y|GM}We&{)0Cr})~J zc5@ogi7z3Y#~KPRVzKp}PDV91ADBIbmwhd`Jk}})$eh-;4lhI-8zstx@SFX>ToCC9 z{{3!YF3!FSO%pbxA!9bbs7xJRVKgLtU!q(+BCyuoth|ri9{2+F-fA7fh7>@8Ha3&? z00(Web4Idp$?cqFX}SQgB2P=${lg>ggO)sO9dUnK-&x`!s;XN;9*I(&L|9PeA-9Ho z$SHefnpPtl{2N_+s(t#hJ2!V${@8-as5A8Ku27jh?v~HX_7Pb+V=Z}Ri8i?bY*JR> z@9(->yb!u{UpF!|R&M@C$NHbBnJ4@hLy}m|2sqZeU{ni4JJ%t~-b&pE1XBx712TX& z!yIl2E_Um!_iJmi=Qz-V$=a6lqoOC&C-u%p3EMPI$z0{pD+X=4$u(1@^U9ZJ1^*e| z4X(*By&_(hObKTB9xouN9wGOk^7^ofd4dpsj&zPoIsC=mj39F$5T2P(^w8wk%N`$h zLh(->-W4@4`){gEp%(7hj6gPdk>!h<Oa9tQ68iv^7|Xl@w=|138L4gKSPgah96z6D zQJe4nsN3MOFk5P96V2f(Q=B&VvXHvAYX3NYMzXQVL*$t33$;r!V!&_~UpM(mNM5aR zygFn-7qFG1Bo*FXo<1PHg@=)dNsMD5;cR${i$Tuq#<xG}ggPFgYBGr~hR7dsjVOE$ zQ=A%9^btP$`}_J_k<sOmc@JLIOOF+QKQWfLrP>8I{|4o47Afs4^3>Rj-Bl2u`-RJV zSohvs2pN2O9GnkBm;$P>3!u1%bRX!-w^fRT-^OChScI+Z_e(M(4dr5ZjYEX24*#Ly zyFI+~(Yw9WS)VNgN(qT!GP7JrGO?;+C+V_%_=Eh;{GMvgDpQ{?>c{)LpK1TW#C1$c z<;3rBP{b_t_JY$d6tm3F?~9TFxS%d|umj9Ve*p$9A9TlUe4*I(Vq2PHEwq3%^YoPl z8;Lc0(Q|Y-lM5iMBp1#Y_?OQKWUp@RTr`zSx^WhZI>`|J0%!X+w5*X#Km~hpXr=f0 zVKAm@A#90#G|)?ic{#&&sM($C_iM4ed)KGh{raxXrbs$g?RMk?>Ng#makdcomZ3n3 zu%(buqDp2XM{<Fy56H@Sg@9#ff;#lWcxY1lG1&t;2P=Cu?<5&cU!gq&0mdajLFvL& z*SCF>t%0)f*1<ZnStzm86X88?es-;mw;4<h)0~mMvZH$`_Kc0*FdLI5HVnuJ%`3nF z+v-?`HOb*fXUck*hrCre)PG$9*)ZsD$5f<;lV=<p0k8x1$iX1Gv(XC1`C+Q3E>pri z$rXnryhAgzXeqU16bC)eg0N#3XeMeRwq7;a97OkdhHgONLPvnF(Dt|g_bY4x3@(SS zgNadmCj#@cCz-jaJ@AlTG7siw=u+J<amY{0K^xL`O9dC)1l@idzbZp)z{GWnvgLHQ zayuz?Sn7Iz>Xe;!n0d4zE@)fCGJQbMX(9oHc}ePYtJqj=Drm~yv3t>J&R+j&!J{5P ziI2}jbhn7C#L~u)&8C{i6iiM|P?){HXZ)Ug3Q^eFeS*vfpi*4$=sR>zP%Ps})}hJU z!t?xinqe>Q#6N4O5?6#K6%^krLH!1ZR#$oLnFP4xt=m!!Nk!>f`qy+`?P2mrK?#*~ zWc%JE@^v7R5^gQ>ZX>wnmkB9YT}HID(R&VilmY$c57cWC(FWuqK{G)4U<5QK;vn+W z{f>P9PTx-+{vs}~<4?SJ8GVUSM%}b!%D~w=bQAzmXstKLjPxwm@imIgiiYuk#MA5g z3$r?7EB5YFt({_fl@qN*2J-1l4RvO~zLJl?5OnzxF&r9Hb_Tqx5ek8R@Z&5@)J><m zGg%>(WMAICj?j~PspW-XnmtJmS)M%$OMMPOexSRP#bOb+!~poL3x3}wsA6#vGOK^3 z0O*syI`3G)vx|963XYU#oFsLRd?+yO%S*5)Z*1ts78tIYJ!7)c{TEQj@&@Ga5toM8 z;-u<5Nr!G<GR@Cw|MR6{ihzsYr*qg*-Q%0hLPE;zpp)LV=+I6V*Q`g`;QPDF`#P|6 znTfrSsrv(erV1uHLsIeP#{p3ih&)ZFJUFa)+F@-U<&!UN$9m_*5=Q|zwZ)NMM*R)r zTMadA`ml<c0Ny;0^1QQC`wcC}976*cYex8g7<bgG#CV}_JD-tF49fdfhI!}oNk;Mu zJb)KV($ZX@AR$zn$|4Sh7rLrrb!D7M7F{7`C`$r{E<@UDBDKXI%q1uWhKcBDJBvG{ z`S#y0xh?qMx~BCN=0$qZw*uv{T~u6XU6x2TS|&fRbT$1}g6q;7<t+_nts)A@iaH-K ztm<gBOmxxA^ikZpEkA9lmp$f3#Jw5-5^4QQM~VtcaG`%fc$2vF@1}UJ$K(&xm0V1E z#rZ<bf7}Wp14x7HR*C?5*#Pom0`}(kX-32CcW<2sakY;0hI#GaZr)|_u6?tbIMZg+ z&Dn|?t=Bsg3xpe0DLz7+ZqLO7Q^~vXDt%Bs#`T4hzN->WwU#U*+@-!*xT+CUSZwdr zh{$;7?3zWvNCdL76&+W$djXf|fJo3V(HQvm?Yk*N{ovf;!FzVxe;mYa)Eu~c;L8M} z(l=}GLn9BG{o0nJhdN=n?|JFf?~`}ZAKy?qd=UWq){@bTBfCceo&tYa&cR_1YFdVU z(L2JsEs<_^g1;^m;$0&5y<mw2CkV~%rSQ<-UCi(J4k1<YY)AhWD!)ie7&}GlTH}Ey z1pv(4n{>r>CWuW88K-}qf4*JA8#)FR^Jt81A(i`J9d<`{c~s8fpRF`lf6Q`aNtvf~ zJ{P@4wM}XcD{21-|Gck@9YQSsYGe-B*?WF_PdQ0Fw>A*kDBhJAe~pC&<ZL4EsbY5V zv#9!s>jk=}n!WdYsJ;b}&VX35-|!T4Zh-4m(u;`hi%C^X1ksab^tB4UWKxr;IiW(a zG_QAP5*{Zia8~?W7%BS&jB@_hX<j*vjZ~YH5OJY0dgqVLH;%w~`v&1x5zu=~K}^^K z0G?`o7A|{;pOv6Vzq*`DTqjX{7Tq&NIBKr#tjjvV03GXH^XLcgvvZ!OAD;HLU-Nli zY`~rdZh3>*{+jDo1_-m`O~+<`n8<%foK&x!W|h6<m^MSlL^Zd9j(fKX&?0KkaMAty z{JD6*j5+8dhUY1h;gf$Ovz-qd!(jcSl<H0^OH!g#1{Q%P(2uc6=$2wgXM;@UV2dZh zg{liQDxwrs;7?O#sm7U8_vT5Gmc*1$SF4Dt^bq&Y4C%~vo6d(9)`w>&O-=<hKlX8< zN7~PEYh5n@QSYaJJY}0fxM(U)6}8bUhIJ;W_5k~cjeMDw-0Y(ifRdjKf4zR_I`iu& z^l464>j@fn6HN}!lmYh6lhixBrypmzDqKQt@*K&H+TIjggSgO;Uvu}9H+I15Yctn} ziFcb#N4Li&CWyp~PtZV~pjbrXATe?k(Sh!s<!5Z*rFGm-Y#{I03Vt^X@-e{l$OYI* zClAOK8h6YEXThWi`<^>rlDJ*v!<*R0>5<gczbsvCT-YP-)dRwa?Z{%HhvH)!<+$X# zDIo1LU)s*oL1eZh1_%h4IUV-wf*oOIC2w9S8*y#lP{%m~lIbKE&ng%o>yr2!k}u0- zbg!Sge<w!Ghh5Of@yKiNB}1wl0Cj_MzU40NSvnYa_zZjBCcS%f*7VfofD1yL3QIzq zaq<2zvue*b7w21Gm|PSKt-bbCA*IkrX0|rs0v*;FA=X5cq`AkZRPl|HC<5|`H%lp@ zfvl{<O{@RQHr9W9;LDMc(Fiv3`B9D=%yTcnKBV9HeDCF3^4$$+_J2QBsX@>Yo>^_| z`s_}Fl!?XFn!MV#zhm(+fxA<$HF)lHyP?&Smg9h)`G=I#7A}dZ?1@FkZeL)r0thqz zV<y?ZzXH1X@eyKBuLEXDFx%@uGfmUcJ&pk#!j<lKb=Oex#r*eTmiVSt09k;iC|?(6 zc3n?jq0aNh*Lco9K1R3B{f|5N?{(_r-qN~bVF<lkpWOQm&p$%P?~imo=RBkKBIy;M z-)X!MG8!Sr7OSw)257}|98MtC`VK#G;y_893oKVIuyAJ$|L3dc(>EX5p{V`dB7f_e zoh5JSD|A$KvEEy15-t6I&D#F2-pqgZRx3Zv>XtonoOSAvsKX_frVmm-CuRO&p9f?D zZAMxpT1!rr#1QfWo&RZ8m*kh7XkS=?M8Xxhuu;7qO_SRs?v}g}dv+S|<l)c?`3%gA znKy<4UprhWq3-qvkxljJZ>rMH#r|c%1g@w6kHVIV7S}1%7R3+_Ba2AOomr@6cZ*%t zf%<<=E-^o}9;Q1y40p#18J5Y)znGoCzvyW>-+1a$L|{4ar|%GMG(zn>->{NA8oO2@ zyte$sPI^{SuRY<hZnxLY<bQj2a!K@<g+AnofsaPdOXr|SFDH&WhqBSXP)I7~N8**z zCfTcsUqP1lKjyA~DsE!YHgkcGbST4Z0ofUxHg?})qWibXHO?l^g~ZHn8jBH9)F1g@ z@V?q#g8xa#7VHu^w(bo9db+ubpLvTUxle|KAs)Sl&%=$FJR+8d&pMY*M~uO6Pj55@ zF>IX|D$h^BHQNDsWYr73i9as=zJ!-wjIm~$iRXJgPl0yj<hB+d^xcaUGsDaBKJ1xZ z$(VKQy5sjK?Zw5NZhfa;|Mdv){nnAD{lEb^M`D2>wVyB<*cn^D<&zbh@Wfi=(6-Fd zZtQt|WM(A9lZNZon8Q<K`)o#l=hbv;W1+^QjQiq^Q@2iBL~@1t`lHS^TZ5vSWx_Di zcGHkf-<oSvsc$zPw-IVpxJ*>@LFS_ivEBjAxRiN=>y!Y_!hi5pf)zU!j>wKp5eGV( zF}AI71Xg>pzQMsQWk~n2u@)1R95~fA&>fky-6@;)_3R6-kWC=NO;pp-8B;}T%$c=} zV0P+`8*fx)pGYsz2v~u{{in0dmq~7ULB#6_1LVe|Ik&2q(q}FA*>oL)qY%0aPEP@l zSZqnziV5lH$r$FjkK_&eXrX53@%*x&aJivnz#B1&K4GkqQ)@anuYRQ;75|Xy+1v@O zz%T%2$hj(1Q058q1Z3+K(u~i@>WN?6X3{G4Y;EMvM_J7u3I*~(Et;e6|I^UilxE}$ z6E>4Tk*oy)>cm%sBpqFbFbcoRVakElSj9WT{fy<UYofb{TTTULp%?krE7V5*ssA25 zb;(7%dGo92ErM!geCt(eU5#&9`Orh@bCYqR&d3KH#FBqwf#YUspn|CZwY22(GP$SE z874JSGF)YQ$MDIi;nP~y<}r{fd0h~eVb#NWaa?^%@<dU5Mn&xeoKb-WsF?#1H|cZs z^e|EhF`zG8V`KbYnwI)8{D#jKJIZS(ehT3=`#~u1ziyWQvmb2p86H`iJNa_og8B`* z6O<nI?(OpTZBJi2Ff7}y)S$U~QWy48f7ZU`a~{?*Ia~dno5xl70WkYd5jp^HAoEI$ ztjZ+R-nr<1rE1Ygb~wIs7My9<OvO%$<`s`adR;(M=;He9pxebYlyp7r@U_Ag8hS8> zDIms6CkzAj9<$eFYU_Gzazd=FW-<pw!oB%{aWy%mi1apaDv&yT!<?nzwQ*R;yTt2@ z5@x?S!KB2M2!8nNNH>!w+76q5UYvHW$GK#luNXr<Kng9_w%jKg3~dH#>zOMK5Azq; z?pO<|{x0C8iKS|V6(xt6Xo$uXJKhLS6z=m>e42i&YhO<M*w39Wpv1}2+RqU`APUHH z4)*QkQ`4{A`3swIJb(~8G5BWr{YsjQ0o|cw^?(l-6Px2)ga>EdFqhxDlXi9ey!-LS zdgfKTviA7q@L->Z>bP0otm=DBj257Q-YUmxO@ns$N_>s(QvU}Yj^;hzm}l~+#O~p# zZbseq>Dgn0_iXjagNeCM6R30dX;%DOGa?o){QS{z*(Rs-A};<e_sRjE-vKuC^qOdJ z%<L9NP`$5$&r@vysS{BU2Wsbwx!Uua{`0UCKj!87F!nu0h04ZAbf`e8mU+d*>VaPZ z=~&tHnl0CFbG}hOfKWGUdj;<?$cpi<93fDA$WD5X+!|Sz;1bG(I^Rus{t!>nnmQvS zsOm9LD0R0kKN#k>s_5L1+;`F?dA@?1zGlBCMA;?c-!k+9MU?GLm63a>>bA5h-`N)h zPuC+i9s3YQqs{8nM6nC>uF0R%Ge*Kwc6ME~3|GNBQtukNLjx)MopN9<Q*<NU&t&1{ zv`$LhHXA!|H?!_a^e10TXxt0-bWLzFLtf#DcbJ`Dab0uL_hU)Cw2Uv!G(w#gh|J{z zprg0~@`J`#_U!Z5b)4;<gj}|)PkMY)yT$uG-DTk@xEsu&q-9v;nH`$M+aJk!pPGJw z?Qnj77ZU~y@pyH_;T5ETws@^uq<rO)zJzzbg0_#>DRb(-KQasJ42fAvLg=CycgLC~ zNNU6DIYzidho(Nd=!^dOv!4=I#<xr`ufOG%ww;W{DW%xnf9bhZWm=&Ukof3?Go$~8 z@`nGQ*J86Uc~g*ar#jD$IzNOpJMn#JqV@=zb7T7CO+~$)NW%y$j(LrS$)X;13e}aJ ziqEZ!43zY%IMHg>FL%*T@Wp%-Vz7+wRP+K^bS)S5Dlkk5^hm!5s{N@o?fdY(hkC5N zLfkxTt!8#33>ev5kX`{9X%;-naVcJ|KFaphI}oV9VKyx;SH>!`W<<(K#q7?Qci6Kf zpebK=DeO+TQ`5LidH3SiO=&leyv4rh+@Pg)XnG$(ze(H~QMn)km;X@+liZrgVoKB* zoNjwpMn{sLmXVcWA(x2q6rXj~0hS*)LS{vuphsE*M^rIuifm;Z!;*HRONSL09FUs8 z91eMJCm0n8GC^q-*Gad(Lh^et74x_hS9<ikhiYD)TWu3>OEaxBXcMwlFfQJdAo3(R ze_Zy8WaiIf5Ob24AiRcrrEN@0G9Xz7pXR9A^5q}~n{&=7YxU6P4sb<iF&6lyB_WU! z{4L@V;C92XEJ-GPnBLp&dY*8eSGay*wgJGhBks_M@wMjs%af4Th107-A~dYJ(v9|0 ztT%fdYcjWjin;)KJr|NWCtclgR6d}#VQeYt$JP(;5FW~}$EIfygMPac413yW#Bu6$ zaIY6EkfWS1{A2WDNHtE^u`CJUwt$M8G{|lvXZ;N1k}6G+TMOd|d6GS@9`H0hdV5`# z*pV8qu^+2tJAbGxK4;QaMY}kAPaJw(-Fz3Zc>)7^w_*oT2XMV07OzmJzbpw9ty})2 zzCJ7#34oI{f5g{?NKrLK$Dn&9qk&B#0(!Wrusb80wWe^_nfjg|XC8xm-`f^JAaJ}H zHK-);xo`2R5CchDIhk>{O2?Sx+7k!uP+Pu*IUzccG*FQ91)jDnl%1|UY(Hb<;w#T< zP_H~)QtY#{^JQ}~$AYjP;KV-LNjYcUI;KF%3|f%5DfLpj?zs~#Q57Z#4<_wZq9LZF zKdK5kxBL+G=-=0x?>2NRo`wzQ7t)zvx)pz`8nNh6+C=zgkNHLSo9qn?IbnQmTL<bK z{pnnX&~xf+zR0vrcqz&srqVx@{$}n{`ZMEhU3=gxGXlXKpfj^hkJ`C&Fn0ZWIch|f z{<QwqdfB@uG|)ZO3Z`+8#a=xf-O*Iym@pIRn-XXW`JPdDU+>Cb#P3G)s9B9MEhr50 zh@SDC!whE7td=8pOzOgR&tSdkii+)E1~AqC1)ThU0ihq0J(z@OD`>1h)VZfBnesY* zl&&XJUCL7;azlvYTK5_Q+ZdAOMXI=ok6S0B?qYN-_V+WuvU6iZ3tu(Zx;r-IFN<LO zOxK_&a*|#5$a{c!ihk%sTNJ`Ju7?I@{m6gj`?LxdNx0+JQFCjbGFc0V@QU$x0qe|- z3e-sn(B{jy<yTafp&lZr{-!rA63ZufNRWAja3c@KfBeg0MNJ=8L2>IoBka|z@((+j z1=&_m?9PfapJKJnEVNkK5q3AvtPu#I$i$u6S<y>_zFO`V(seIa^(@ThQ(t!rwY}cd za&Z5m?|lA1`UBz0UOdUQ-MK#2WyJz6(Jl15i00DK%1Kxlar9Ihx{p&!*LteACj2-y zXkkBVWo+RYLZ6n2Frxu1ZEU`nRnrK?r9L*m9c%v9FydMN5^FzY<)Igf7m)BBJiXFe z>9Lo(pkQekuJ--=DYwXRogwM__kS4a>}>MUr#k0Al0&<o3nBs*KVg10gjF-0$w!jd zpc7H*#_h!DWjKb|6&!ITWzz&p&1#AC&Pj8eff{a#G|Dbsl;g~RuQ>uD(J&rQB)?Dd zIdaE{VjEU|a^uI|H-Wf~4JjwVxoXka90#C4_{=awwYQ##!c)|)CDe-OF*G~<xUVH9 z>M9NTr+%+b6~bfMX`7@BdhWhib0&gmI$_^@Vc~sj`cV^c$a)?s90=kyqFIvma-5~} zM6g7(_NUDL%f+|ZHmi0Q_yi~h0Kk*i134A@a}_+57J_o&6hF*#5pGyXsm0NhI+5oP zg2m?KTRzQl(#c-EOOu_FTm3w574_4i%Xct<YE{y%whRf$kcM33m*%TYq_&4~Gz4V& zvB<7PsfUdMC*<5m1V4bbIr`kIlIvSLfzyBK`p%LaRJ!z8EoY857FFz3DHFSi-YCX- z=V^MISd(K7ojN72r*-NM-XB{TwS9|#(^^}o`*>yVMh(xLvmq;fRHr+?swWn&*YE6n zZo|$NRjfeS13h=j>Qc@C>`|xf-|OjP*HHNZbKKntaWTI4|C!VTRq5|ZVeM?0cB#8D zy?ZNWRAO9rjCnl56ys<R_yzi@zO`Uh{8QDpw~rPcntXi_THu{QMJ4K7q7%P~QQyEr z7@FR&Yi}l2aQuKR0?)hK85ZKC6ixPBU!kzq`Qlw+<A~P{myB|iHf}wzL$am=dX~U8 zN&Py@7mmaORn1IG)2D{m-|F&wDe6&QG#Aj`<K8$Tl-q@NW;CGFQyzHfPey!a>UH8m zzK7&hv$Z%+Aa1t}wE_kc-#iyQ(Bkem)A;rE1&=9Eazf72KPd*bRc-X5PxPlEK{E(- z&XKQ*PliQjpFT-yI6V>)4Wd8E7$N%(#z%nW=zaL-_ER$})B&lnl2w(@mAw3}C-0)} z1NkZy9Iu)xz)&3yoN_6f@CyFtPmEi_V$6NA^2_<XU5q~|HFbCHB168JCe&GKw|dR= z`Uz#tZ+9MxZAQ-#8a6=;V|oI)GER+oiMkXU(3PVo?VdH&&pzIv%<aFcy2<xDLY79T zkm-;^o}jBu_U=M!jxbvrhYEaHNKY}ppON5(Y(e<~iWe@?DI^k?9GewZw8ndsD{{X} z26t^>Mf^q^+xUo%6n(8z=PWHJPGwQ(^3ZNmYK_$N-qvrn?@4NsEW4P>ZV142J6Ylx z43T&-=hKif5+L{TLK60^%&QAPOZI%=5e!cV^=TFJRWr?78}|{%HAT+#XBc+r%VAg^ zbR5a$)8l}8maf?;3L4JVK4-z4dq3rWzOK{pLbuZfOMk)cy9J~O<2LnF86coiFoFjt zoy|?AM$EzO=H=J!8Bo?L3S<gmbZE}?03k)>${A<2|LWe$1Tf|5M+o>t3Rq)`uB8Rw zs!nIW3=AGh$vn#P-Fxm;{Ri+G$rSG6)d;oGDf+^=hoi<8k)_SKCpnBu8=Ta<O_Gw& zhouNIezKm`R<?~xt=xr0wNc+MKbUC0Zf6SL+czGr+`zFtuqt1T%O(EL*YY!%74bZr z#`<-^ew2cyV7U6ze4;g<)$b0XpUqXHCcE+G=aBC4X2iYS?wsF?(uhx?3%RfN{6-PB zU-T<imDJu4EZ0VA>4BL8bHBRN#U5(}R(`lrsYxG_n_JPaeMNcuI+Yhvl1W)r$XTj) z-bprJf&`L#Mo8Thu|n@_viM?n#$~sg7sY$jKF9#_ZK^wFa3o&r&&|1nw%zYjf7mAh zfmt$22!LN?x1P^47*U~cQ@+@nu7xPN)n|pimyhSWxv$y=Bct_i(}R(f^sQMAhZe1Y zrINRoCC^;8x^f|No0e3t8%YB24(17r8!$50O*-s;%7&QEh<O7p_o+wEcUYQny`;+r zG%&Jh)k^Jd6)o5>HLM!-*$^7u8%nwNu+jo`cU=iHUsYWIjBZ4ld9c-*0oE27NZGBy zQ}m`TB#(S40dZ5s_nhu^Y>+R~SE_&i*nN()>Pr?V^rNQH-6K<ydB+tkJD7`Tk@Lyj zQlE6f)inD!+he_2n@4gfbe+E}X9wF;LC9|+0<jsBH{GrTo{<ibI$F<v!_xK+vp_<1 zEHg}~b(@{JWA!!6AKTe9iN&W<oOh3O`I3v^m1LRtW&x$w*tY?~4$>*6ueGm}1tqgR za&FFDNn;sEy*mUTd%8=M+LsxDQccc(SzgGGRhxAgZ*8agEDaYYA`^2&#h7Ef@TY{` z58F9+Grqfb_oXFYd4rgXm3w_uQhTNrIx%N53KKs&J*%D7k)A{nT#z@KH{n~+(Wa@D zmq=%o&@JRQnhg+rza|~;^hYVC%K19i+7cR%uEK`DD_59$EBw|8s!J$JrE>No?H6^F z;n5vB=cs{%CQ`l1Vd0Zjx6YPPzhLRx-?N;P0?Qeo%2gdndZ1^eDl<DrARBNKG_jfJ zxb}Qot~^t+ob$}IhV88)gz>0+#QACXQs;`Rf*oge9pPEC`6Wf`>vmJw3)^Ln<`@>E zh#TBZeyzf>p7VeJA_#Uv+0gNoXLEZTL)jK_i^dJTfKY6tf#Vi%*p}K9sLmus$U4QC z=zqE0a%HgP5#5R00_{d}`UK9`@rRa7yg8}d^sPzC^{^?DvS!zIMhjL+Kg8!Uwz`2Z zs3w$@t$h6sg=g~ouQ#n>2Sf!D7{K<PZFZU0Y=PpLLc@@)NzbAXQQPq;mdg(>nbvHt zo(#)R$}n;B+vli$nrw<uj_sD<Te9Cz3Y;2DSZdcf&m5@Do$aO&ZE-a0*W+JL7>^NU z3PONVOaOAl6b+f{;wXKKZmz3qsZJ)RxL(Tc3G(6lD&n0&MI~zi@N+Z0!}jjG!_Dfj zTezt02X$cyn2FGT3<B8OAYMd<WUE>=bt$QItY}E!A(ie~lr87kIv991dSG5q{S<{z z)vQfp?Pf|*Bcdx;bVNpYe~^tkr;~3OuNMS$D;qW+?5bjBRcLGpi106PSi4-A{p51H z&7nnG%x_WufMg!0aF8S*+s@7KFJFyNCNf0G72b~mDOYWtE4+2)>fpk0v-0Zx$w>_z zpe`i?f~c$(1UIV7@<BvonWM1rMkQsjKCHpYHI475?2B8A+m?W!3O|}0&f0layCoR_ z32AD!2lIgBIc<acn=72_RNde*T_~RB@OcMcAhbvD*JRkH`v+~O-L1QJo*R75Nv2&) z)QP^0SI-fuEe^^pMZx!MEjsh_Mp@HQ=uoNu%{CI>0x?vdp-Zo-n3k^m>{$m9j8QoZ z*;%m`!AJ@J{*~US*r_^zh@d;kAprLO2mp^9^TSr|)Gv%G7Ns9gx%iSNq#GO)iu<N? zK2;E*ITV=vn0QW)cR_3$0A?KNGS&uljsvN?1HBi3eBVR@rgNDV^oLtBPVh34dE!Pu zSn}<6{a2<aio!biH9(j~okf^^X6PN|%-M`ywg`9sR2&>({H@+_5(<Fs`F2_(!+ZhP zi?#7$Xtjyw#qWO>oNwzgD!Re0Z-S|)_{y(S?qOd{rP@YVRc8>v)w#e3hAr_!?a7iu z!L(zeuP&!9mln}aB7Hw0#HckuXo?+Bm=np@u@QUwSqw{Lq|Kd2Hn1_@7}=OJ@~Qx6 zyDcE-A&1|c3c(<sv~Vq)cpZkielJMZU-mD{b-91ps4SE4qV~E%h6_0lEoV`6+vU*J zKvZ4#FU!4_wU_iiq(h|>bQlR66!HA$j<y}5D{a&5VS583w>3HOPOfT(8g~k-9BZ2H zvH?7p68IbWO^g(I%tC!{N0=jEFh^QWXLiAou1mAO+H6{GQtqL1)d~;-eF>GOya3N% zjs6oZw`^ZnxneW9k$^0LDy}*7K+doo%3t&T4QBBY$bkrf*(%=xq!isRwfWy@KMKxd zSfctt=pa<>uL@9HsA`9Y89D{cnR#VBPXzg?(rXk(@x?mi>v^7Ae?En!NJltDzA*m< zy@?R5EtuLfqeb5Z9hkKi%G+%e+=d>#Ayz~T-UGG6IQVXLRv?#s9hKIb05mqM6)-#4 zM;$15hwa@1*bQ=}NMdI<Gf8#bdT~~j?pX>n83ll%y7sUI)XDGaVD9hwr+4zSoj^)Q zIA9)&RS4^}-;8Enp-XhUFbKzZ5P0z-i>$E86X`l^#K=EHhr?@g4zmb>pDs9`+E3Yn zwuhC!tC%0_m;hF<SBw^X6urm<E+G<N%@`vjfSPf+ZAXYUII)D!fK0=QW~dIK+01f# zufZjU@gM0+pJw$hZz$7kKj~6i`}CoFUb((|6`#CAyHHZt4CuXT0nKYId|{E0kV6%C zNZ?@X1FWbFjq6n%@p`91ZPu{3;l!X`9LC>i;4jO|fHqc!Dm^NoVG|=cial(4ouDMe zdjp)od>J|l$V;0u(tw@@K)kxzwu8tTi0E$HGOcV|R{}F5MMC!z(N9~cT~(d{rBzIT z-`_y&u>Tckl$gWpt?rs*^C3Z`aE<jT55m;8km-CmA3(SWB1F8t7H{BIRBVYWN*6t8 zcBq5wHTu^=*Lm=$Tw94^2}lj0P9eu5K#N{w6lWd><cT>m$+SmPUVTf`MubbZmv&Sq z*5=rKn$3z^VynoN=jS}PeO-iSI;^XDv<w_!T}?N4HpLLU)zQ+LzNWo;p%hC$wyg?q z?Ozr~X1*{J54_C|6z#!YOcfBoTf_rc`wuMvC{cz>IUS4-ee|>7f-0BggOql~r)Fy` zk4+E}d`sY3fjC7hDwe-ymY!)pR?HlZxjTc^(^}8WFBc*j9NN-8z%`j&!pNhOYi)Gk zbuS5+$?S2|0~8*vkW+2$+Dq$DkL(Hg><4%8V>W>@JA9NjPK<aX{W&QF{o{%6^(h#M zH*srjB1gb}zoW%w4*a-<FoB+`VcELKyeA7C-)EWt45y=*CE!0wlpLXui$#pbe_8%n zVh(DDDdq#pUzv`I`QhFHgu!3;E@e4(0NP|eqM)jZtnJ0Nt&nE`Ye5p=Q5HF|Q9OaG zbFlc!QkjQ5x*#{E0{U~zvu&3m#*C6ZLadR)?<>6mi&O?ypw~Xov%i~^bc0uTl28DH z$PJQAGUu9`KuEUM)H|+C)}jYy=2}KqJKG+zkpMWsdY-&5HRuN)*&(bV{uf&fOy&=d zT`0>T5GKfSuN_rv>@^HDLvQiSTg}x(vUaxd<!Ggz1$Z@uy+)D9#Z@M-@5gljil>1t z<QGI3KpFkfgo+@?ML|cWW^0h1dEu>^bm!pbf!bM#(B>CTdQ<mK7Kov=+YZL2;W_in ze6p{~Bkx%$n%QnCO(sWS(bW|>r7-{qHL9ZZ7x=U06~wGE4XY1XAu~?;LR!OHx9=!k zP`Y1_aj_ak86SPtV&lv$DEd_6nZxxPdKZIVte^L_W?H+?kGvL}WFwcvtaMU3%Kgu3 z-*W&0)Ky+I!VaK{yrNt0HZb)7cP{k>TSgA(6?Av^IY4?`0sDad$OwUt;uHYmQpeh1 z<}h%$^%=l}cO(I<MH+#v1N29w1Xx3^)UDV?v*Ue6qs$X@TQi#I-1-zn!o2qJ{pp%+ zp$}|T(*_~9*D3%2oMZR{fuTvZ+l6sD^jGy2uWG$9)aGf!^X*)m{E_b~_1-pzK&Y90 z?10z$o_cl1T1N6n_6XpuBm+yH0A7~@F{5_Thc?Jw5D~dnf@7xM-GQ?GW$7vTh$JS7 z9VmG16-i;$1g=Bg@Ry%cDd{r&ssqS^&F3!Roh-kG0ymNn!AJkRI^1=o;0W75Q*Hhv z@O*-fJXj+}2*OjK0&tK4(a-sjOiOe>ocQ6f@l8gB3v?J=JHrjIWLupGxU^<o(B7lR z#Qq4DQ6<G@l?V`2nK>M7=dBsDkgs)4vJCuI%zj5{@<*2)lgp9A>SzW%%3BZVIRia< zYg^$VP&Wd&#Iz(D97<-V_g5CEoj)P=z15d)%F%bI&9G{-7ANf1p7A{*_EbWT3f_uE z&GO6ozqSF+%w#=uBA97>s{AjD(<XSwp0L0E4tOZGK(McToqBY^d%U8(nLpX>(2hQ# z*lN=<ypTP;=XRV0na(Ijdf)Lr0)4YL`!HATv}O^W&xRogGRAG~4h`U*%_h{Qhy0}0 zsWN2QRMuMKHIt(o5O-}XO0-$-6ZDPzBqTwk<)4*&lc+v5?N;Lv8X6f@Af8Fq-h5Tk z@Fy+?OHdCHfn9v-GT4?SjAO7@M*I}pvWnnFjynVUMl%!)gw{VY8tVVwKH3QU4aRo= z8<YXoK9HRt0>jJ*C_M5Qmg05u)u1zJ*^lqc*C%zW&mC>DyfN^y`I60qT0nt(*b%Z~ zs}6R>o^3x4QlN>Ra4pF9w_*Z(rrz8c<hU>pcYiKnHupjwM{vL&mH$uxu=)C4zuH_j z|40JyAG!@3aO~g&h<OJDIEzLs0OwTSXdT#D;(&kMx-$^!h8_^ByFYtwmbd2S5YXj@ zQAV}A<ylrcPu}&2?gll7ZW<%w!ThRWuf}%G)cWw(N>MPKeA%Mfjv~Z#wYtH0X+ve| z97hQ(&bBcZp4nlKCS);lE{4X8zPMz8Pdl!3bBS7MLpLC&FDS)@DpvOkkv;SrU6`Sj z-~Y0F0_TSSkpBN);aY`3$j3b*?1K0hw`c~xqbsJ(#0MAa4ns<eWDkj}pzY4*0BlUB zVWDlJvP;=p`A%TC(5}x01k`jb(fBQH8}JU-5d?Zr)P--`4(~fA-RkDPN%8$^t5H;} z-Ao8Yw??#wp=%s)Pme9$V!X92V_4Ln9?-qXd8P(R{yOiTU-Z(*aPeVZY<nua7B(1l zz!^lzuI0r8X;>hG03Nl4(!flUve(FUo?xIq3~5N6C}SEUV*tYYo4Es>yR^YLwc%Oj z_qManFVBh3Irh?J^_F%{wQ$TY#e5_(`IZH2W)*1i*Lpp~y~DhFI-X~JuV!(<7%l8a z$|E?aFq5jEG5w8B1$8-@^8F&Mu5LRQk;&n5&LOZ*cDf<%vSz*-@>Rxhm)|5s$#o(B z-DDEONFqb*P}La<2%JgLlS}ESj>h-7rOD(g3)nHmN6x;|f>Sla%8VMQeo@5-*GuJs zCtjTXRJlGsDvwc6T;QD=6gCi7H?+ARu~nJfEEw|1BNUd<$`w)#q;uxwujQ^D-;)2` zXC^~B8_e+jiS!DW>!V*H93Uj^$IX52Dp5PylvdIqH6I{T<|MSn-c^D1411&Nt?=;& zXOXg0rHNI6OyH%^A-w2lKRZ3!($@F~d=yG)b8|sOPO{ZZ|7BUZla+o506%+Jy8tzV zY2@-%lS5HtuVNbzWC39G!HK{P>tAhWb%a+$)oF5Gp*FR_Mf3`@JIR=J6z7Mi2RDI- zPrNms4DC8MM_(dsCTx(#ROLiei)%-Dg5GKMPz&Q2r>zGkr1#E5@aVb=gRpi^0~c3j zF4S!<djDhs{gYl58tf<v=r94iKIKCo+3p4XOSR4esMfs@Un=sp_guo<xt+u0FuUPO zTPx2odG|-nJJ(IO(;h5+VyqDYK(Y2g3FM}>b4H)N1rEjr3b7%TWkx4&?&uy3LG%xm z=&(b}_S~#WhNK2FGu-V{Pv)fEw4_&??0njTL#Fkb5EwtB)Lz#rKl%k0DAzP&&z7<3 zuwtXv&)1`Mg-QDYnz+F<#sH!3{~;WYfhPQq%u|u;&Zq<1`l0`XlK3B1W7fWgBNT$A zL&)~jpVz5sY~yPiAg|wy%kxf}--2y<S8^t6UcZBc6g4zmFV1M2eF370*^km}BH7}1 zx~m!++i<wF>pk*ITS<wA?3vR~8U{}zl!h2$zEZfjT`oVuSfBDs2yb3|yAKbc6kz)K z%HZuO8|YG~7kT4AS79zMu*L6!d(H{}(XlJ7e4ce_(+-}wn+e!M!I>GfLM?Aq6yv=s zFIZz`2g&ZyXcWs9=YypS81i5ZCvsji;$~+G8hU?t12dTzqavfyx~x+b<SPMs?D=Zi zCa;7+R!l0?hZy{E#YRIq2Ug~3Gc-BjfEgzzIa^tG9g95SDzpuzTk42nTkD&E@f#9P zp5MsjlCTJaPah_Zk1>S-dxe<PxJ{U9Lcr3K?akH@$$FpYoZwz?fb}3<&!>$9yb52r zQw}Qk+;ae`Y4_l!7CKK0J%0F>0`$IL?m$6w2$cIaP9RkN^H83{gw`1Qgp{Gteed@p zty~_tM!iMe1#%-kx(a*3PEQ`qFC7)Mp@R-`Vt3G%cy!@v(8tYt9@)}~!R}H<_o{9U ziumV}v4hdMhS{%A<pU;bljBMpZrnApw~KxP2SsQc;1eecbpG_*JLs59sQYL9r#@e= zfvv^Mr3Rni3V<jlnz;bxp7LnDl(9t~K4o{k#@AEO@R&<V7-2AO=k1QRG{<Q_zl|ra zP8v1k^gsLXm}^XBvgD0Mv3&rJr(`ir`+HaSiLMyyyk!nR49uUpX%6_0C+J+I4ZJZ~ zbX*6hqYssD#vhX}8n6Bw%^V2TsVcQw({SrTeRk;fcY78i6|0-|I8121m~QZ~^{vXg zKqyaN;Y+qXmsQwacyuvxZi14#K^|722UryAyK{y<j$0>B*q)Z?Qd=0|`?@T4N=voy zhE&$?wmsfX=GQ<Io9T0NPk2yWSi~(V-hetA8T@gXm|I(i@~_8w2Shxax%>XPy(lYH zEpI+dtjZ%tfc(`@&R2{1<g$!p;_6!BXoSf4G(GAsi+vSAl_I;xC<5|c_t_B7t5&Cr zi;iDs;VYTnWLwcWi)%EyD&vXyb;HTY@w;0tknuHdgy#OnFuCc$hmfU*L$JU>(6r<G zA1dB^bta(3q{PuidSJ;69I~L>Fsj->Q8ZEKHTz^DUvpeJHfT_E3_ZWeF$p)lYo>X> zp*8!vlvSeUyXL{GMs5p{j({;89~|jOJ4XDNXEm&v?Nkl%RDU{Y0-lvX2Z-`h2XL{Z zxBAEmXrH3`z^6Hr7fYh+&%o@zcEw)lh~+>U2`Uu>Fx{5MTlE^+hYs@H)7)||%vs05 zF@9M7R)Q#D^I3ha!-`byZM^sK4U_hZPf|JQqTP6iV5Z)%(yp<O@f5#bu-3&4M4d#^ z?>qoR{#C;~QURk7AP9>o{^5Gf9Q?L$&_?tXxp9)@rz7YoVcRl_P1b+(a|4za{&RSv z`3(?|njb{nurJ`F-cKeuX>3dxq<FYBJ=qsXy_!LG2Y3CLkleP?QlKu}rT(Z51LW=- zag&uL+Ze{w$2HCEzT>x6JrVxYH51yGy)Exx`#dRZh1NB^fA!5pi<e(r(B57UzLCIG zPLo3K3dM5gOZYt8H06ix^tBh--fxDOXIC`t8l9|bBhRhVyGE;+6IqWfmieA{FWAp2 z(1VNVMfM}RPIuR=9MIZ~K6CNquFFX43u|9XXl?ibnXWpUpwL}HnL;gw@Mxi7TyXTP zqz|`4<^W(Cc-&J|k&3nFZzcw-(KNnizN@+x_(M3jQo2Sdf^Rt#6;t{%uwua5rZ&Ui zjTtgx+w9z@uUEP^_9?S98?Eeg_XoqtDYYS$UaO~-2ax3^@@WgzqS0HJxX#w&Lkv68 zBdkbBr6QXAT=xD*#F3*rR~s?YYK~O<YE~3w&_rOE1iL?DzvmaIp0%iV?Lj63e0PkB ziVoQ1TyC4-_lG#HM1ij=R7!1IoICu$Gu+U_<n<ubS&n<=R>rGPWPLlaYfie^$C^H| zMBN74uc-`jdNzV%bM%HJ!mqcV{~VsR*XX*K)-5ALsMg}4Zr`Qapn_dKIC(v{cRVG1 zOHut*5Q~6gif{@Ru21@%NiuV{7~N??n_&Xaa1tZJd()r3Fqt;g*z(j7W8C`LeA2(d zyilPh{I0I#M^E(y!AnXw=_UcE?}o-bT?Qdj42hqE38&hQN-B{)ueLggQ&SOh_w(i4 zyCY7FX!({Jl&#@}qV1$P^trmTt9gFn%F!^c<%B{zjz_Rsj{29@mLa#Y(vBsu+N%2A z9Wky78!&W>nh@kG_Ip`#Qmle~8<~(Bl)qpuOt-`v-o&_#V7jW{p?}VP_-ZJ&GZYVq zBkXGY&o{4wC@0k~dH&EL9_t~=>)7MgP+y=gKhn0JKPXAO^_g**y1SpKxO*6ecE8uw ze5;Z9qctq>{lPy_TE(OQUYkvqc5jlIF&Wdcvs~4$Gx{Ur^GlY;6EbD!pxtldj2pu~ z&367|({Oz|q0aB0&6I(*)uW;d50yuL@%@B1eLFCEjkQy$JZo1nlb1GSa;btlsrbcd zjDtSivdoj$;ZMXR8nB)hwkXmBw=G+dQ)5$|PPG5R+IvSe_4R$CC@LyVK)Qem*l3~z zqy|KqlpqSBBO*cwMS7?a>0LlTL3%HtCiEhNq97nGflxzHItfxDggkS8b7!shzBA8# zXRVpL7JrfCaM;;rf7_?@W34#)_)uvTezFC26=r4HZeE)y=gL`~<0kLW*eN~&c96-X z98<pDPcIv{gZK0$iSMm4<twruQtWdn)zHSt9RNrH!MXHJ?e5Q{xZM~0%n2CYU-Y^J zVwN*%ngE@|Lm?tvK`MoNdJk#iZ`wIE>3DB7Lxd3YTIB920psfH%{3ne;oc6?F{Yo6 z<rc-HEGdwDI6=ALbL9r#!9gXv-&aU!Yd!cVTG>AXM+S#%Dd`hG?Mu8md6DszNjEmW z8hkxb`rYqy#u8e@hSXBTQ&wgxn@!dN4L<D3X+@ew-=tmK2icg<9Rh1(2#GccPn9C~ zLYHVe9mxcW$<52>Y~Rxn?#1OW%2a%>9BwY(B+RuJ#>$uw;&(H-$fGgu<b+V3Li|(# zm*t$R2#?|J`F(iW^M3L4(n2*iCmTt##Pc0CA6fkI^?0G>-ADo?A=knsI7n@)i}?`Y z%H(M3_2_KXM)sBQ1LUPSM1X19AH$kvo}{Wb3pcvX1<v=-8@Dkp27oVowXK;1wSIei zu^`c~1C}f*ko3rydfuz?@WX-`1n$wgm@ONPpEP|L^M^=^)uDZ(^}BfX4CQa{4Syk| z_}v2k{XOop;EYEWPZ8GrgWBW6*k-0@`fAm$+Fg#hK*xFQ|0X6|9b`4+*(qo3v(1_h zN65cQ@~A3&`JNdlx2X4&`IJHEQjiUsdj6Fc>$Mwt*QfkTj^3ZVX|)hw(5?N+{RCYb zA#wNBea4q6`e82<`$1U8|G$HBIyo`~jl4Q%HoqV-)KFrdQ*Sf<!#4Yhf4D8-AJPH~ zI+m49qiWvD$-J-n^40g7&zt_l(H%_P=S1GynxoHy(v|UC$1#Mo-7ccsR@E1NqQgG) z+D|p9QTCU-(s-c2;;C@gW;rt#cbpTnI_UnJk>S(yQ7v0DniM6V2vK4Iga(7n=Rj!a zNy~9)-s_R-|4|@-xY{8{@hd{$28KthTP9W-FoeNtzKZk;@6W}D40`xgRX`d}1U{P3 z0{{HA6MVhfJhK63?6+pEA!mQ|+O`f@t#uWNARxtczg?HBekucIFol^jwLG-6v03*} zl?WaQ0%ufk&9yQ#h^3DOU#7tI8v{UX_>wV;x3nLb&pr^UcADZ|wE$-ELOP_z$k#ue znI{P91zLyjGQINhnb<R1zSr>bxq&<+T-c8^C@^%G(&aumGbw8E77`StiR7Cgm0+!I zcV|fSrRUl>9j1ALKVw|$p0&S7>eXF@03PEZKg#kfH+0>^<Hcr%JUe84=(ze6$S=^< z;R=F@ON?1i?KWIx$GGQVb0unbUeQcs*kiQXyctf~RIjHbdM}%5^dAoW2)3ZVWhZpU z=<zAtu9bBG>~Qlgs_pMKwYNW$e#`ra0pl5bg(R6pRIG^h8r(MP{ZXwnIy?8-NXKSZ zo`I5xaza$7hW7Z|P0d-^0Iu@9uem(`YHA3d*V&P_JbF*#b)+#yXe)sODrN}sZ)CR- z<`O^dTflaE`Q)(5w>8NUxOO{aCG*p*vX-Qs!AsryEYd@o!8|asl@t4V#_wnubZ55i zXJY-t<-XURX)iB6qKf5_M#A=On1C#f<7xeq@r2z6@~oeKrJeMCKj}Fd@~EYXjG~-N zYQ{k}S73w}GqEsSOQ<-#ui=?<?}9M|gqzxUAgI7%-CVTLC+$9y2<$i+B9imm-22xN zk|9v>wA!=Gv9aZM<c_3)10U$bLL_odQ^Q5*tSPcvDj-j#05#|mkb~9-oeV1FR*e<S z+&<@1LV<U23G$N0*UU8z%a~)CYu_wOF^DFnO)blVxI<Kg9BCIZ&FE2)c3CLXh-iDy z{Hydw=bHs5L)}O=*kkXBKaPAkQTsf_E_)U*|H2QCAtx9@KM{2w;f@yjRM<W)z~rG7 z@Nib<-IuH%D=B~R+{IMBQFNt7!REZgc;$-~GxJUMLSfS8F>WN5c5SUg>?cYl$lOH- zJ!shaQnwhJx@P$$4gB1M`fM@&Vb44}gcbhK#&YVe(bk*OtxN;WU;UswBA9iC;-DF+ zSKHK<fxE(f!&~apXerNS*4&ClzO1Z<0+_ARTDmV>Se;j?Nzbi+{B5;7sUfQbk+^)T zd71x?9Xv>7R3^&x#R}w+XpuW@O-$&wb!w1<OR4FIL(n;2uKK(L(?ZJ%;872?Mgq3G ziJFP}F87$BJ%(#xoC?nVDHml0%T5<NrmKGIjP9Qb>qP2~OWbT2Cqg8ytL>E^L(dcj za*~E)J!LZNaqVs};m`b#*cWMH9>_U8AsmJ(O~PxFFdan~LjB68)q}T1qS7tJzSyS- zuPVLhI7<mAq;SdK_~{C|iuMIW#o_Vf^y_D*`Y}GneVaC{l^`j$S$G2g2QPAhvK2o6 zUNZOhm9YW0#|JH;r_GDI=V2-w$;Uz9Z8`3vAA%c)dv-E^KHQg+->*WNQZ$GsLq5yq z<2#sm#^=qymaGK-qT>1&u9=im!Q=nP&2@|xO@h{m9e-UNnkHVS!8l+>;WLjcIllH< zlC(lAm3WJ*vI;F1Fk$e9JCY86xRjC&X7@MEtfeScK;6Otci%LU%`4t?JR5uZU>)`A z>y|dKet1$z*mj%TuQu~EK+*8d<*^Oup5+%-)qZ*s=g4NxB_%Lm>>T9L_uF(7WRZAq z#HX=oA=9~Q2Wqrm9MlD~&ck%d;6|v0<C%)sqm0E9hQP(3d#nry20c<lq)JlWywlsM zZ!8n=_`aJ4I*+w3q<rmU1-R*!*5C6-N?qDM3@Lfe@^Y>y+wg2!h5vu{D*iJq>VJBh zXNMR`D^kfq0-Y^9=7M2pJon@c!zx3yx`mHy+96kx`Ly~quAimaOYx7(@2t`N?`+37 zwJgV+y@&2C>rbKzT56m4?IR509_FmSXp<mXF?Of9!HGi;W*{Lm0a4I&m6biXE5Pdc zUw*25dxI~Me#hE3r1bdfH{>2JM#X)l<{qrUUHiu7yT`;V?%2I2a9+ChtkhUTfbML` z|9Xl4{2MX)-fR}2CX0R5nAnqH)sdUFf_`jCEj;LBc3RH}%1*UqPRMj&Mtxzddt|Fx z9{Tf)N$G#S!oRu8fB%N2-6->tSg&a>wZ&7uh36KrwF2Z+@=9<24;9<p&9PR#JNcy> zEvSSPfz}PVOJ`>-wcu=S%W0Z~80GIE|Cj<mGDtzsXSZ}#gwfqypi-kV!HnPO&XLF@ zn0IdDP>^TBwN37I`f;24oB6q6dJMQ*&b;Ud7_H}AG3&Rl(76cD^pa=mEQ0^j$g;k> z#43bXcuHx{rwFh{tSDsFHtQC^?oWXOx@;6_pJ^CE;0v+~J|vjWiErgSFNPnHbmiPl z+0Rji?q9aQkC<04qBwdQ{1ZNxI|+)mO*-$O$J``#0&6Nf`W~Qop72<@@l?_N<Le`L z@@-}uMbbc&+d62xo5&cZ>=r!JtRO7+@}n0w=vha|)vwFtS}^emc_q_UmRg*+++6{* zvtMc|V}nY}rRsa91qXA!-GTz+-qkFdz9tWKOV!_y#NCxNOtpK6AHI+`t@|xUdK3XX z3oM(xt(6p<#Z^>Uyl@MU7)zu3^4fv^HVVGRv0%C8A9&neN7#5^Q84>8zDetbp_$q~ z11LB~ES{26P64!goL5P*iEb6v?E{6QdQ*(N8^NSqE6pOLTQLmJO$aMHUxaoMA8Y=q z@hsWNLN}^v8(_P<B@M*hyuVWj^uMISvLBJ<q5_{S#WVIE8)L$MeSGD`^|$Z)!*@Ej zm6(3DKmCtY0k)1<CM9<129cG1Q(-Osb-*2_sK|FCqguZ-JQi5c3s<eWh)96#p1pI( z{CIF%A^c;v^pyvFD4wW$Oy_UoGXTC_xqs1@MjYgv9Nt87VQ+rw7I}ZZ68!X!&~#%j zU?APbUonq}Ij!Ewo&1H-F=Jy*tL;<mey5nRKO|>dJ5kh;(6=O?-M2`XJrCYkz06Z~ zbSB(7zdlf>VrETHXu=ylEU|@}Cz9974S<WXz6Wz)7P#RpxbS5Gg%Jas__JHusL^pR z7yOOS%`3s)o6s6eZ)K8}yF~qi52CUB>9eodtRW<u9zGm^n2c&Ms4a(-SvWS<T1=zY z`C7^z(kI6>pX9d(|FbAW+JiYK1sgza#B}sP7p3yYpwaJVcWsS_;(agId%N8zqd(>V z_F@R~{L@H)xBa!cZ>r}%C155;H8_EJ3%a<u3Zc~{R*mp9Z>ee4{j|83_9$DHxm6_M zv1dQZe@o=khwLH^mH)K-|NY@@T8KWbj`hmAHEcugczBH2oGsVCI`pnKyJVN;V5;iv zLtI+Sy|nuBX~zcUfO1PwOnIHK_UReG36(5zxmCjm=WQXu)m81S8`gj^c>)v474Lcx zED~Z!$q3TKV~@l8qMg$HzZfdcShTvBiO|2(e?~fg*j$Eq+P&GE5$NxO-k1-n^Loq^ zGP``89^dXI1DwmySjuic?I8)EE3hJ7oguC-;})DBDx<sd`D_22kphSNcF2;MM?yOU zoHBmp9R_61@EfgY7C%}^&yQo*J|DGfxr;@~^>V*O*z}~&-)?OWHLN=^$g{s6_k^jo zLi6V3&@(y*zuIO0V>QUtF~{@&C~kC|X&eU)_SWJK)ZDxs*DuB0TI=IpnN=b0Qt)+? z0=mX^<0AD5v|o<|58Yi{dH#rmv0n{X<ojboP&5O4;}>-T)ri}#cDi@wO_$m7pO9<b z^l5v6)(Mu?vY%n%C6c59=>t(UP|mVqyEPWe7mttF0>}W+1o4@f=C44$rn&i|gM`cS zTw;8*g@N5*_H>QBDYuXEzf+~VWL>lrbQ^o&cb9^mLKW&){%N*rCacNGAayf8W;K6o zZ1edg=k<$ei>?EGk5`-buZ<QtakVsL!jUBdx6m!o4iT!4ylhj2N!79x<Z|LwCnN_| zmx#Oylf@ZMKXG*tiIqphWnM{1W+9HaMzkCK$LjpMQ$Dx7Ic8uupdw<1i4C0)bd@P* z)%qc+&&6}8D#dpx-lj*PBc)`}Q^bTXIQ?F?a5Mz!QrL<Nx2E_lSvj#r1p^4eC4HUU z5_BWC318aJdL?o0h_7AlZJt~3Y!Wj*K?w>R(rYHP2g$<=+7lT#v9ii!zwS4xbl^Ke zUY-V&oS>zJ^9Y--Mx9aB+|Z1}d4T2#7weT(o1Lw0+_bXkXXW0=;HSU=Y+r_=3%tiS ze^{(U73j$7l{ygoliHxl<j2bv6kWRlO7dV&Mjy)VaBAC|QU9s&$ER^TY3gWaC7;8J z9A59N01bd6bWujYV`*%`vO{*f=b1<>UC$Z1Q^+qk|I!Slo>;NgajSuxR#rYUSlSQw zwDU=-)T`tnajFWit{a>dZ0(AW)3G1<+P6%OGA5)epKYCGVC7*i8BE5yA5<Gn$SC{F z07l!c@k@-;2cH>sq;}it$jR7~(yNOO7{8pp+xTE^M+ImUI)`)9KSY;;+Ht|~8kzpq zWP+U09Pf9EJWQ-_P3f~?dFCB3h1vy`+L;zionsNaFA7N)jac5a!Y5XGLs+O{xE*Jz zex*(+3^#7o>w7o$#~Wi2F<Uw@iitt`@<}`Qp)Z=8fV$o`!PTR!OYLxuJAs0uuL6n( zjZuKE-wZR{lw8&7hH^4l_jx~>tQZiq!TUlZ?mq7>u7WB@jzBH5o<*efo3{i&*c^=p zVeZ}z;gW{e9tnj|D};%9f)bQOQU~^VCmB~_r>OJ56&)esLs&UGln|Uc8ay0)8yBcf z%zB0I@zp&17oGM*Q7yaxXV~<s{Y}i@KmEu(L^eGztW!sdwfsCqRk{ihQzzFZcE)h> zwwiUui31)syV5hAiFVeBivkxmb;cL7mu)67PqGQhHS=f<+rL_K(|j~cXXUhRDXg9_ zvtVhed%b(sVtYPv!u4Em>I%5Nud~X@mv(!MYFlYNj|kOnxv$HVc`o3As`q7vw{Un@ zqc2`ik{nUtUA^H!fopytV6XPdqLYeUFLl3vT>JGnz(fekiy4V&(O-xGA+Ky48{|m* zNHT>TTUK055LLEnNCsR8J&8xrpwf=(lyo9K8l>Y^CE?OL8Bu~UdK3PhG{qyS)HQ-p zT$F9Ege&AEI(ugs{h}#LnFJ_0e4<->*R;Jal=_f(SdT(>9|F2V)tK19Z7GBL_qvE3 zANI;k-rM&Wj^YD25fTvv%lsn=f)XU3^ri1F>oGMkzwTB`7!jAmYdO%&1(lH~$g&h0 zKs)Tmo`RodzOaJy@>P}NWPQg=i2@WK8(ZocrGPt%#zQe$=;d>WIfw`DAu8=~#_%=5 z)y^(7oc<{A7@A9o!5WiaSPN#V<Er+vZW+sQdzjZ%jtO6v4i`ryKtR~(jSPHPhw|Dy zdyuE$q?f)OB;Z|32)hnbl!($J`p{JxdNbbFlDym7ZqrRL0K_^FNVRzVEu5<O5r@zs ziyA>;f4|DJuZ8y~O_?ekjnRK@#ICf(eA=J!z27c`rV+$#qeRsn+jZ@Pv0gA`_B9H# zGM^n{ie9~dKAn9RwU<R+0NEXu)~7%y`niO`0OhSDxa@|j<XeE=<|`$EW?ePucnAxY z0!o%$sznLnk8#>gSAnO~&z`iMqDko*sdm>u13X5S!q*`==FONTWn`toIJqageG4L< z`ts|F=Ziqk<t(`BY1Y0C+w_2tX=`omAIZ;h&M-TpJv%Zu3%(XC(AuoeVNU8y^mZ|y zfbh>TW)@~JenQ64aj!b<ABzD5W7r(roYeUKC0<FnavpXB_ZH~**1$7$-!qv<=&A3v zvA_UTcvAA^grv(-T<^6sa`^Nkn4xVnf2XjOFLvm{E`)?>)mdUT+Mk<#Y{zZ=jH|O% zXrnv-_-N#*4*Hvl5JjxVzc?*rVdE}bVt?EcDEEpI9%$|{C`()WF7mrT`+-(iAEuc4 zcrr1jIJ(GjsVUxNyLg-bF?ZOy_4Y+u_Dd|5XHs^p?M_s4*w#DFwcwRRE9R!HVPADc z+|S)1BiU|*taw-O*+gyMrd;p1m0~&(-&`Y?Z233(cf_+lnk=&pZ|{yZcd{d@Z7493 z(clZ5l*0rSTKd=hdJDni?#lTZPF13+Qh*6AZxP99fp}#x=q3QKL*(DloB5nCTYZOD zY-NkUq4cV*Qpq=H89aURjBJdVJ+`j4g}IBwJJMZ1e8`St9Y8G4x41=cD@4Z7SRJAM z2_-%m@pHhxOT1w(q8RY18T>x@I$p_^q-!|g9rT8@p#%D=+tgk8?&etrJ%1cGwv%GI za3z?7;AE2hP&Qqy=!G%H>d(hOy1n0tU!kMk%Y>sS43d-jI{j;lWQj^r@p{^;KhIh* z^dqSWbF~HcZ)oi@xS1C$2R%2VK$ak^PC_#+5f#Mvr)y@`7EX}gI%kwcv=)!a+j^9| zQusVKC6D-$COUbY)X@0W<<}GG;H6iHGcnh03-5tOsg{&H2JDb7mdm5illk$A#6&X3 zCyA~zh0B}A#yQb@PWnr%m)0``>yfs8W%FA}F4MB786bz$nt@<v7tSA4>q!6=2spA6 zx6>l4=Pj_6^Zbfosq8OaGCk!#=e<IEQx`1J8LPtA5xWF;<8{iYWZ#e`%udY}!a2k) zD4jQCP`6QoCeg-m97Ci`i&p)o8;l6y#2@Im+v&1z5_j2)nhrr2Qh-`>4XG-$RJVGg zvBq-Uq}REMNt4HuFDJ!`e)~HpvI+t1<x*k5VPb)iGThFlv7xC|%}xB(<mCu2h?Ijc z-Q{oX<b=k`;2&hfu!KQ?gp-)VhxQs(0h}G%x9j9Sc>TDfH?!Sh+UIiJa;vVgj(CAh zE7cc@IxDX7--J=>CrX=y^yrSOFoo=9FTC%#QrGI+GdJvCDg>OdwAn(rNGxE%>|HK? z%3rFhEyJ@#AFrP@`JD-sT7S`LKX>os**FMg4!Pnq`q%v6TgEisLxJ(Fxb&1e1_l9a zHcv*aUC3_%Uz`m=9+J~uM(<iv+wa6WizS__z)aFdYT1&tPtN8{pbIG{LD(gY`|tSf zx8I3CHn&%uw}}n@2Ptm;{~*P|08%`$yJZre7<>cKsW(YAD{~x!`Hnc)7EKwX?TqGK zAMm(@T(^p-uG~N}t8h5Altj5%n6{6{bvzk6_#{*GlJy<9?cGvcpb#L&LrL#y;KS7} zTlp-QPoT!O&liaJ9G*-(D2?TL`EUVcL*ZU_(d{*tt*~3VA#}JCjle-6Jl%r{2@H$K zd%FkQ2Fx7l6CjHprx|_ox}V+gPIv8&FYkdPWNFtaDZ~-VQ()t;I}x0@_q3hSr?;ND zet1$j_`ORKv1vf|$waLq&(UrW5TVbSC)zr}TfR`eqWP)5a1ZE$w>`q5J6mLe#<&J; zaf?6D2jz`%S-=BK3$#CmePi+2wWZ*8u{qIlo>Y1yFeJ6Ko>m8c(&Qd-oC>E>$^|*c zl+2c@BQ}>ZJ9(TATec7C=gqquzopfX^c?L7zAOyE2Wr8xHd-VWe6QyGUC{atxIW2! zPligR?0+2=t4#!YQc=YuO2DoFC6>l68|kTgj@<8ht6z;r&w0dY2??_e20H|az#SAy z18(>x{@q^90>IrHJ8dw)l=`p?P6S_cN||=5`BVksUz1I;XMOoKG#yE_ao(>w(nG@; zdA18%TiRY<8}d-|IZmYuPVJ?-MA|^kI`O54gDhH^pF^T%?|tPA8)&P!5wbl(d_m)< zyqB<B>`|cQp%xl8wKDd|)8}fG?2hu@=F(jjoE#S7h6i7u@X(~l=eKbMsD*qTm-F*u zNxVFNb;B7)FG}pA+Qqu8?{tz-?WYR~n5jU0rL)UkZakO-6U(qYpO?8xuj<<_EeC1! zBQG4pYi|5<QM4MvAzVe!XCRq;uIJ9OS|*4=7hTKBDA+|@x?iP}uSBVp-@uWhvHjmS zFXj7l&(?LE+2mV@4ZOP)g~@ue2SXkBxm<7IH!&SGR%U4TuwmTkxJlKZI3Ru9mLEEJ zGEe+`(miQzmi0`V`Sugb?Cy@ZIy0l;b4`lHrW5kR9#g;C-1-D>HFZ*Egu+0qY!Ko$ zpM;WSA8xFY-P)kX_DTFWy%I|kXc{KlNV`}^md!(LrngkZx?OB-l=EQ75J`}I@LrX7 zP1@28%a6Pgs6+Zq6$P;H(I6LD#=j!6=D{g<8nthl*sm<6D|w^LfU#d*Ac&m5VSbo@ z<nL)^1v^?DEkdwg`NkjT&Ae`je@6ravTP#fdGIN{OR_L_C^}*C#q3Q;B)cv?cS}rN zW6~QL4Q3C7mdtGW5+IR*^4IJ4_K(;GJ>|t2Wx_b#*@4`Mozb8m@KR%R8-10N(Z+|V z8PU_!)jp+#J7ELzbZ50b$sbnkMsl}|^p0$IUa>?(8jpEtSIv(Y)Q{Vn8cbde?005| z+$^NHFU5OWj8Tz9l-rAD7bsSamEFnko=Cmc$xxi;<=;n0lp*CgLu{}xRjOuUm+D<M zH9V%5iMkOj(9ld*Z<kZ#WmBIMeUNj7;$Vs)3yijRj)Cqvo39;wl$5VF`adhl90TRZ zn)NWUP>&F6pnfnR4rj>NDxmgJyzcP~BJi!L+qDy@GSOmz4{pP*<VS?Fa_hP{6r-*6 zdnd~+^+F;wPV#dpou13Abb&%+yFgd@Ry%E>vF$|W=u&Mm(QNf)&x7MvtvLxa(1emO zaa(0Ub*~RoX)PLG@$Erv+Q#qo{@<4Uy*zDNr2g(S+8sb#zS60FdiF_U10hrx>&buZ z+8v?R-($s;nI#toT>v7*{em=)@pRy-Emfn(hB;=)ovHH>Q(S&weV=q8Rw#CVm){AR zczyy7O8w!EYAtYo7jxkrm=N#kDkF8tO1;cl9qw0dq3HsBsjB^k-RryUUudODWaWAX z3r-w8<bPs_yA@&Q;9L6XNaL>F?O6>T28JTPoZd}0wm=1v0wVn>5U>17&Ggv^1@@yw zI3gZh&sB@bJ2BwT9AT!Y91A?&Vbnb}m}Ji9oGMEF0@h38T=%ENmpXQ`9yHi+Y(nMI zehvk2&Y~`+KJC*s5N2#lg!DCcMsz5)MIQP#lGCG#12(_8>=dUC(`y^~adPiJdq!0r zRnk~SG7u1nJ%UoWtzB=Khu90B@2Q_};n-ttHQ2fD2a@WBaBR$rK(11Bd+<Z2?Rl1& z&<@O5xr_&<;-9t<Rq(|@MC%d+dlK8O)pwkg(i<ev1UG%fo@y9oPu_tS0G?}VRW?IQ zr}RB7u};3$LKE@%)(XTT%O-&A)PXcVI0g(l<8Aib!HnPqfcl&|5&VCb8_YRzZTs1a zv(4%|zqY)TdtD&_z?=5c7~p_)$|JHvq>^p5jr9gWud`X}V(s9WM+@%?vH^y8_B9vC z3rfk-twgJdOzbf@{Y>K<h{Vn(zl7$Qtn$iG-d)Sz*mx~dO5?5i>RC9UIEA<-Nf?I! zPvVvO^OyCKRW2!O37Iz&S+8uGv-Sq;M$&Fh{F>Nyl~9>3UKk8{WWBcHtt9A9NM9Uo zt(>Q7QQ`}nT2Qz=hr(GbXEi}~M^*3hNv{88he+=%C;VajM4Pk<CLo}ozu**gqv@hg zvtyqJ-2rF|L-cJaiPh>KT)4D0FPg@GcfY#fLR+J52)#pj=?rx}`vJbqf;7_=TRc(; z^e!lgX1I>Q66@KUv>h&E>{Y=paRC!KS6`8ZutJwDC<S_C>)P@W2Y2@Q87HPh<{!>) z-{uDI<^VALtL9D}cgE1%q+iwUMdp@z>D<0oTsZjcI6hP~o1O)HQTej-DuJZnc9@r` z_nhvFQOru3yvqUaITXhoVk(KXgwvtN`X;W;iktvB>&RC~P{}MJ#I_skO|Ysw_F0m7 zbME%SwPjqhO>D4`3*(Yjx9w?d<%X^#`aXy;NAZmy%a_Z?3LOEIg_3!Fax8Huf73rq z$In|jc5tr?ef|0m<ZWaiE^=GCWT-gsTr;|P!u5bxxcMD_W_z|B?N7(gg8d>&bRMGq zDFx}h6a?-!FNB(K!93EEuvbl1AIDYwR2K6!C0{71pp9%UHA$6>V~j_KXeX9*_G~HN zULuCx=r6as>79Odp_<q6qujQh)n;fg{DM7p6YeyxCk6q0e2bqlK%vxm1r(&Y`=c>q z^GCB*W2!H`%$xh2w|S2^x2{6df=64jQN-Oyxs1cm3TxO=Ln3==SaBcg&9Ye@A@dS) z&Ae6Mxz-5|qvpmBuu+{yagvhsVNCqO9RaTzIxeo^WmV`&r++rhQ)i*(`W0FZ@`(eD z7epWFm$C-0;N~-PfmV~j<iVrD)=6)_{D+oSR`+35Pj3)%?$EJxy<owtA{hk%p()7w z)ya`WjJA^g-PCy0m-TD14&rQjkL0Z*Z=(Xz;squYl;iy4VkP#}_(pE-!_L0z|1)Iy z?<X$*qkT6*=8Qb7jyzC)Bs=a4muPa+UxOawQ-TMM%HX6u8<quRfzvT)g*0dW9owhN z^<5~MS^@r=7x?T%7Xg60ZU1-$DfD{nqRR$!WI1j?8dz7K2an|J8L8X{fB^tM$_b)- zVtfsz!UXhYs6yW+g$Rj|hD1}+?I?@|1hZ!DO^$tL)cWzswvf%q3f|6zC>17WQfoQ0 zp3Rm#ul6x1@QZAad=-58kb5bytLv)}0f-=ZGh?)=Yk`jdvecG5@Hg^T3r`DI6YxC? zjBb*q8gQ3tEs=V`DEdARr0`$kL;|#Dj6f0ARZuDYX==4mYi=`dHuy)2%|yI4y;$R| z4LUe=k@+EUHHUh0SxX_QEiAGz%RVa~`}((N?O3Y~!N7DI5ZP?lTkSDvAnbeSO0T_B za=5(*PW83nmXdH&VMBCnOWw%3@cAv{6XI7z)*`>cV@`Y&VBvHkCLqseQC*{@aC6V* zb?Y~3NVN_Hx|DV6gs2i(&cEpeC;=@cY-oKr!`ROk$rJ#9baLML)XlC5u~SX$98sW? zndog_CJw&8sMbFpXvRN-zki`}j)OOsfS$f4;JK6bFS-fJ5v`B+Uvx$OTJHmch`W5V zP9G3HfG%{_^_alE=g9^aM+|+k;pNrYZT=fzXQ8v~Sen`s<hrpJ7*j^S*ievtBntrC zd8%KK{)jp9!HjtL9h-%AF8{2~3YN063Y4a_+b=6i;w(OaW}tQ1bFA!^<xAj^RcgHd zNMze}f(_7ErD&QP;*F*TIRWn2LbkD;Fimm`9(kI&YlJ7RbO>|+H#@lx|4wYdq(sK0 zNhAYiFeb>5$CQG@bTT;F3;S#B*gIx@0rvc3vh%ISInF`@6@i!VGD95w;H%D{fD;S; zbi8PWOmnK;Z05>}Lm~ul<^y$LCXld&C^`S29yybG*kSLj_o{1C31_-Eca4c1tN_6Z zL&pCP6T}T6!ia%XE(LCpf#3EIPA?Oi*NFRd>nnIrDBjD*nunqsRNN0tu_*c|5vy+X z)ic!1k7Vj$N}vxg{tRzZ_db-ms8#g0#+>)ZeM|kcGd6eu@Z}#|9lUj?WlEgfVNkt< zDbv|#T<^!yl!2To#ieQr3k~0eM9U@Yp9UkgBANz$?Zvm)L{>k&gG|tj!9DGd0qV(N z80Dq7>vom-tuNX)Kg#PRP^j<)c(;nkY;Or|Jcm_EN>p1yBfgvW^&`WldeS*PM!`7z zeJiT;=xW1f(WuS0w#zTEQL9xIhky@Qvd~iE@o!dIVnU6|b>#P=>eF}5$dAT99nFiQ zO9Ht_PpoexT#^~mG8o?yaHW$@5n+s<-tP6w>B+eOTVMiJv%qtht9Hb_#ZEQFo)>8; zDnT9Rr`N};ui+a2zi`$_CE<#7f7kXvmnw{K6hqn%1wcnYEn`y*3sk^Te?>xR-B*C; zakBd4c^NX~_;B=#ax=iEAmd#Y1&pwUr0f`RU<i7#=3Q!xY7cYh7+OicyepUD`+Ra| z*-xU<rLZ~m%2_iu-7DZT)~sYWaW~X!<iZ?cw<~>NDkF?7HWL_n{dRs{yOtYp0&SpN zIQ$pgGm>VgU*%o>r%Qdju4i~uY*isb=2LB$h(jD4UT7xqOEck#Yh2;WP#X!VLd}FN zS^0O@Nz+O?fFw^U8x&*V>y^Hlcj%{-_yeCyn><#Y&m;Z9(FTMc!nn!v-$GB`-M>xx zR;@Ov1k1NTaJg~BuJP;2_BpPwsCYncXq{*ki}eF4-~K1Mr>Si^oV~5F@tOn28+Tf_ z5N|sNK@-&TWMm|&gT;}}3hwVx+3-{5xyX?Yzc7PqGiZc1SV9xOP`0i7n-*)naGC;M ziCND%AOrlr0%o8=tCGguor95Vlq{duD2duX;ClY;ZJl<u$%-JA&utsDO3D7yEyy@7 z!r^peo?+Rh^F4;s#AtgR*jiJ;KWTh!>{Q8#v01qpXS&WtF?`_5oYjm!+uRy$lwMM6 z5ADXpVqZbIDb}Hc1!&v%Bs%0EiRKIS5k&#ZPk>2(rM-pDc>d2^k<+8+9S&60&^?*m z#NR?!g8>4<6wny`hg;^%qH+yD$Q@p51lU_1_-6bk+W0xv5Zav)h@{Y|kO1UDfp2l} zh%6!DgIYU=H0$wIby&b9gn`uS=N5qqWG)S4$u!69>~E|0r1J$~^*u|iF1e~q7}pf| z4SUAqU`d$%t!FniA1wUSl$&d&rA{H_`UC~s-uZj!qt=rK1;Zq)<z16ZpVqkCeeb^l zFre#7s2@%lX)OS(e(k6-@gKSwGm?fq0v}8ARh-=0;PO$qMwZR-^<?5Mu=(<rU7LQd zwsg5u7?4!IofrtNq;x(f_2nR5<78GP+_}?K`L#{DcHgU36}P!*{gknZ2E<6sD&dDF zE!nBX+8LlQkN5!;&%#6Gf-3`1$Ug))_9av?7gr?fnu#o5YUQn8cVFsP`glOeyj3NK z!DLgi16JVHl9}9sxu*DzC*I#Zr{^X9HVNnz_0If98wihA;$CEpi7nlbyB}+1GWN^D zBDPe74Z_&Hs)8I;!heAo!slg9Gumv6+9wDVrZ#QnLEpazl-@ur9AAUhQ^m*zDM6$h z^-1P~7IOli<Lxc{jV^pSUOhs&M#CLkf4&f}znsX)lcA`LH1XS3XW~)?c)}h+1MQHd z3n{X#i*8q7CWVZ#GnW<<!Sk=L2N$=E9Ky*y$(=0Dfy$-x7E_z%>N;-jFpnj9?xVP` z#E#A)uLWLjMFFkF-8c(KTVu27Rw4BMx2mhh*Nmv*z`4Yl3v3%s<i1(87{#h^b`$uj zBrA%i@{%_+TK0Z=zcG^wIW|e}lDJKbjOq}AAqnO-kqf4cQR@DZY0^@k+I2>h05Fmx z`0{!usZ_!>kkR3dxXjQKCuYufg3swHs}`gLKUV`r4GC1xk^tAj^BSCZV6>q$v`NEp z#M?dlVztaEN;0>VBK4b~m!dAQbzblRuc_yJtrCnl9n1>PkV_0yz{{D#?-4c!MZ#B_ zpz?nbJCK&ppXMe7@CsN%OGMTKh=V8J;MH=(YvJpY>4qD|U+sm@@%^=UJhqE=;{)b@ z`}dp2K>AO`_EXS4LYtyOQBM*#GY+H(0gqd7G`0n;5>0DedAnBW(v7k&<b4osO;CFD z4JF87Nv<<QW)iI<`mw3!^>tCmiF&cvKro$SBX)5i7T}}K%i&+Qv@}E=+!=MT`SGio z_5;Aki3hW+r==5yb6}nhB1?`tlI#yYr_SUl--m%;PqRZ<5Y5XkM;kg7?;hUy*jY;) z>7Lm=VI29#CEEJ8weQjp_g4T4a&WTCLWvpRkB91Me-o!!4kR;w&0}~}ElGM4S<1K& zBgC>FWU_4h^Ts%n4@7a7>(93@8aX|{w58&Iw;g<~!4u9H)`(zfS-CX)W956>mc2Kd zp07xE_1e;gZ1$cgNdZjeV&L4^gQg*bACpoe`=kUNbFO%uf~s71<99M|6<)n0?CaCb zMFk66&k+-u5c~!clKkC=d=l+{!}^6yxBi@!t0Itcrcbc6iwO%Br2d5cq3e|FZkk44 zZbgT7O)jUz4EP7MY5f?eYJwPS+%B4}bFHGXTvf33b<$@VXrO`rDwhi2j;aJ>0>NeL zT@9J7W-eHNx5u5hw#-9lyRJ=SGR5cQlpi_@sGM!!3<MvTHfU2Jt7f$Gj7y0GiyoTj zIBRCXI!>%4sK~%br{?qJpc>@8Oyb><Z3Z%Q(~VlT&>%!jRs(bkE+P+|LJ#Z4kJbeF za7CCC>#U*;UC|ZO;aAS|)LIH&%bu7RiYGYx9v-`e5ymuTMN|xhhMRW@COj@2#I`Fp z`<cv7Tk=_A3NVhrxP?7UH{|99>*?iMB<za@>EvtU1NU=$?F9hpZcgwy?r2+RDKiU9 zG@kq&ejv&Y`f*?1)8W3vRhKV&9c`?AO+pFB5bO|`$TWtq-H$$yXS#3+x2W%VlbhG2 zCr!x&zs>Um$rLPPsnc_1!$)8EUvyr664sr|{3nXLbd;p6s_mUCuts^uLKcRd%(1r6 zuY3~y|75{EW0l-LTC;Jx1A3>wEXsIT$2sQ%FOV-}`I17_-7p%w<1QMgsigOx%)uWc z_SY?|w@w)0f{K*rW&W4QI*{V-tzm=ldk^jV*Z+>u`f~sg2_Vn-?<x|Che7g`L~<w% zi#$;}Sfg=~k0RTiRXZKaCL-QU$dugm<c+Jk?~`13Ku5MR4*Wwd`x!h6W{iFb6elM} zt%-z}AtZ1w?|R)o5z8CQWGaVsyOb)=po8xE7hS_$D~Z6r<N+wfkF1DAvbo%VN!ULx z*<kCR#5evutbPtK86brSLB=3MWY5^ikM;>3Bxg?#I`R*I^&JK@4;=Ue!>cHYMmGiE zx)VhYRQuE7Q|~WN{ds1#MRwRW0a@McIYvgJJL^W20!uQw)#{c1MTZj_$fMX+!U#hB z;218#&~|$q9xAO%*OX+(erFajQY(}N#+rwxm7SPvG@9Gbwa+#GJp1><QvnY?si#K+ zBp?A#=|G-v_x~yFgeyPl2qmIi;Wn7{W9!0dKdy(LGU@(BCmswMokrL#9vo&0oOWaq zff=>$CDxA&f2!P;CWl(6CM3BC5FA@Vk+tykd&U0A_VdL3Cmz!MjC}z(?pX1_ySC&_ zB3k82tX?dK?qO=pJ->c_;DIVCu~A#BCdBp_!Rt^(=~3bz2$nx)o@G5jN(Se~WG)w% z*dobtL_X7b!mJJ#Cf&3MdXMRYcW=M}0@81`R12gg8GAb#5tEX?nZ@J7tY2;Zog5+5 zZOm^jW>M4Xdu5RDcdqfFOuJS8n5}*YLejnt0kvPR$02ghv4qz9Pa^WBI#3=bgAzXU zC(RAFB{h6H{5fNJiS7=UPGDO{falQL99|{Xf<XE4N~#%YW6$NbY4Xk;VtwP6HfTuV z+>77ff%fWNFq@JxQ9@UHyiLRJ&|({MR)npd&f|h<Lg;NyJU%ISvUBf=clGh68<49d z=a6A~IrXmjS6*k`noXoeT5)%wO!{_-IbpdCZH;M&{mj>hF;&y6(Z+QO2b{Q##^~a8 z-}JFE$L&17ENI!~q9~zMgjNrjj>2z5(*K>P^zf~Wm70q=ZT_$iDPgYP+MO!!eL0Tr z032qXT~bMvA?@T<?I^_e<||cU&!6&~B!yD&Hvc947OGs05XK5#Z?VX7QyrJudGS(L zxuxE2GY*$poK$SOj+}1r56bGuL6=Ow3OA7`c`q9hCsgDB>$pTJP7e_H^_iH(GQ6W= z1P{1a;C=j{^k!BCLJ_ObJKZ`-RV;AgenR)Ar8Wk7J)kZHirTljx1d8CY#eufH7@({ zgike=h4ontlO3tjMGna6_bVpb#@nO|W~}ZG3<~65c)r~)6mBsY$WM%aMVi~735-_n zM9~d-+g+_vJ+i-*ZbU*xU~KAvJ_02`tNldj6;JTE{k4u4cKKDSj|97m+DRRue)+{o zz6G$cb?L>TOpDvepVl$bA$ow9j$q`I6wO%magL`SR=2sP&*=p{UFI~wf3;@EjIY*) zVioR94|EkqZaw?xp}>BztHKxH5T4G*3MP8y!|GtqKG@aEeqYHGn$vq3%xOWpVsi<A z2Wh>W=NaYelY1cAYTEOy(*Hw|dq#U6#q-I}a|Mq_(Q^-hJ!y8R_#zUCcjT>X-Hq&E z>Fk7WE-<c*&(+S3eSZ`F={Q>+)w(ULKOr+-vapWxHQ}M(8dt66Vo<Az3r>AJ*ag_3 zHMBI;l6Df|ZeFdDH{TD4n5B<?wfPhTBglnO74v2>ebKov1#he*E^T=Dk!hk{>4l<E zCHaCiqj{YISVM!9-|ft|FXL{1nlIr*Sytw-P`P?)fu)=t5y_II2NJN!Io)nSzR8=I z#OEYhlAl23t2<o32IQY;E8N>*pr0~s=TIHp=P8U;A48wY%ClIBZzo^rp9rT1F~ljU zI}jl(b8v+;qP^4ep?mVi4#p$ImZn>i=-udf$)8K3pWWKz^JbASOY5zh@{*}fvFz;f zV$GjB-nW}KZwGV<@{rGu&2IW%_>A-@IBT{&nJHxX27_*w?boSI7}2e7tVhS$-e`=| zjNPY?`8L_cMhvofP8*$60vB1^kWWrxUnC_cf2$Dg?hxcd`{({dCzWZ%rz7nWhb@_y zR36-av}pkv(pr?dsNo^`ic}RMFwj80xBfGdd4py4SIedRgeC461Wvoqh}ZJ<ePy)^ z&6$u$6{h+&Zl4aW(O1pSQ<I#>ub;S^TMLsK!k3K01Jw#mH*T`)Az|S*u0anCbr-8I ze`l^VqQEth71g3Rw_e#^1a^kl9t~)es__1#>Rff-Jl06aPx_ME9P*kF6n)K@m7>~q z<IvP4vzx$S@l_{5t|mJ5(uS&7uUAYS-DNt%`{(Tukyr(x=$kPTNS(R~yRe;jS6lY; zD%0h@f)_}sKV(U>6g%|{vDed=2W>f`@S`4Wm$P@fRruS+QQ}fc$^|2Ku$=lCU3(5K z7XK}yCY$cul&?S!4JQUulE`gGKS953$hq|7b{S*i*`ma*4xUK8OoK>lhKzsU4?f-3 zwNX!2yhP6~W<;u!q{6-U7aAPr1;@6kS}x@^7`yL3`c?&BLWaI3<7x{`=U{2;#ip~O zvn?MJm<q*Scd;jEZh1fiC)YvIl@wiU#@xW{rnS%*i2t2zwB*+E=Xd+(LqN)%k!ZM; zp#Ckq&Ny*w<(%>tleG^u${z3R_DkE8i7pJ-S2kPBd{~1&!G9Y<>?97Zdz$+is{6W$ zw*PoG$Q1KzIZ0jY?&5n^L-=P5#eK0=7u|v(RYh}lU#pC@=ebTZ#zAi^0RvuZA(BtE zo!ydd?JLQ}WXCFzb9qxQIG1mOW#M2Vrn05DzKSxiH>PU_^1LSd>__Ws-A8>_YPKxX zoP)&L?aylqUq9d+EWuV^&<Z;2Ayq{+DmMDPA5i*@FY-1XHbwAvx47neGlQ`i`t9qA zZEGktQz1k5UN+zb!!D&O6r0Bh{O``y7U!^6ep+uj|C?N4E*0LUoI4~!5DYJZ)hlc} z)T0x)Y}cNKSb%b>95bxj9S-%~4A2u2^*Q%`i6*HXba6tk^Bh3uDdI<bu47B^m$9J3 zh7iNXi4Y6Dybz`{M)x&L#?Uj$!jSh^-G&(4@cHR$(vp*EYv<*3$F^i*--PO+-{USM z6-jr8sQJj-9o(wN*j%94nYPLKcSd@_Px9#=TAB8WeNdj(DVk^#BBG#Mz{I9QaCA3# zgeO7>J*_2`%ClC{Y`{>1(q-hgk{uA!S0FIznnp}5zL(~^zHiKPwrn%|+9-(3eYg`} zyzxr>FVY#K)8J4gM;{|&!@TBy<&&eoY-VwECyw!-!|-HAb!6G>7#X5;yLeuCK8M&Y zIKSS-EaDTz!b&vf14qi}v-9SUqFv-5F>VKCFsCH(oZa*E;CRC^Dg#mZ*7}au0`uBo zeNz_##byA$m&|$|VLsotG`xT{7cohH^iVa8?c$1X@hW3zqJN4ODKY|W(TM@}@aX=@ z7neUS;sw#<^;APA;l*kuq^p1fjqOzG#I*C1D{Ua#^<Q+mu6>@nQ1Ld!f~ietMtgQ9 zoTUsw*VLl@HTl_2z~s>5?s22Kv~eR$V=MaOEA88H+6l_M25Ob<!d*1p(W>zIMB<zf zqy-Shg4<t(B<huiLP70}+W1^;fYpIDig?&8+}5a*3Mpk`VYZ*4FmxUM7=jb6&R(#; zGsKm3Ik}{i2s`!-p#qDe;ah^RQ?GB0TfNm-6C<a-HPFmyV?^;?oO`;bJEY!y4C<YT z^h$2e;PTuskf*{6>d_4~=orGlJb!>=x|7D`a~gv0Sm>&JPJnP*y-PSg>OPh^a`u&} zGs}CUQj!2Kiny~)G|kgU5TUzw{VV;?Ge%IkDhhXZ%fSKxQ_TwVZM6E8F>N+7u?&&{ z=pR2aEd8Cc1x6PP;v0)9%rsw_99-0VXb{^i$RGJMQ!f&GtmN<fLr_<vF7EO6#&g$8 z)O$g!*bKptUqF51NO1jR-~aiaco?kU00hJ#2yj;ix<~C3fzk!DbIpT;68R6M4{l$> ztHWS!4sZcfA)C4j-?nyvYH7jGGnNxM%x#>a)6IY&#~Tk1%V{nA9!dfLkqF?<(L;ZF zWs+T6Z*ZHq53W|{195BJpqbPW;$7HPH0S7VNqBv&*Fm(<g$cQn$FH?`uP-(qX3kk} zv6f+<kV!B5D`9x<hEb5V;RQH<U$Ej&!11RDyCjCGi=gVR&gvXp%{5Xx-l+uB-3HV) zr6vPCMJtmmM%)B5i)3oId@x2<h1cWW?Mw@Hw{ta{1q&b^z?TDnqf@IzqU{^*Su&*h z=?2@`>o5LsS%S)Q0~?>El<-A`e~jBu+-CdisNBxMu);(c5KH=8V-WBs&wVb>zUsd5 z`>cmLwe$W63h)5e!uku0Hjf5^3t@OspU=Q14zFELrNhm69{-E(eVg<We~5e48lU~? zSE~+}-a5tQad%!6Gl$05z8JX9vBkSM$K}gklb@CF9LqCi{<|T8V%1is73QSF^Z@U9 z7%KJ4slh`Ni|*iSF4tiCxv<;1%xz|wkAB=}_px&gA{(s*^Zi8A-}s5PdZ_>4ortVY zEw*zL%`^_caDy0nV)-_Yl_T<nPjX-(uf_I7+#x>$74s?n+_8_xD!tZbSJQCk<K*!4 z8D&eX=PB?WD5FYi?s`ku1`rb@CZ|~Sk}|TCB#4xKpE0|i`$c23tCh6xLdlRay_Y%N z1$89f2xo~ZRAr!I0byoNaxf~lE}F}J|1I|~A#<O2BA8{(SHeBtk<TFO?I5P8zCM9V zc>LZORLgJ7?m2{A54Wx->YtSvh`Z#_XyP2?o-sL&9%O#d<?J=XZ=nl1C(+&}cI~BL z=N&o|jhv7`Q9D1*x%6<f7`!wy&{MsnCn0`=M^deVZzQZu9yN;^#t=`1pEc1tChrW( ze_~ZN<uKWju@ciCw}6cA&xl#jf0<D`tHm~A^N~)zQup8I6Tr2o@>Q0o;l^ATUwn7f zsKneCPk{LT(%^0*jg^GUbA!8;A_BBp-cKsEB7WD!XoLq{;ry#rQ&vP84!;$78h0$4 zb(-`qI+e%M=afCW&m?qA3M7WLDcTlV!c5EsKVQgvE3I7V^G!JYbhVG4T%KlqmXsQv z+FMi-;pMnp_4ZbjS$~5ei>h<tC;CljPWLgrql2b`WQNRp&%+x|@2~xqpSqxMVk|?F z3R@mW*5k1XQd7Qva~x!)KOG?hU_3)sqe>5R9a%*(1fz@A6R%@2S%q)Y1j9;sD^H;S zwkpg!NUa(JW`=P?<2=T7o#K834Ff0C8y8{yoTmyvBJ?E#29erIy!^@M&??MMaH^co zEtCo>LVX*fDi=&Mev0Eb%@}ypHZ}6XrTjrhe~e5b1HwV0mD?W-L@mbL%h4$3SJ7XU z>&lr;|M|o^U--e{=VAh3-bVK1bAFuI(;!nE%9C4=j^zADN4Y<&O<8=ncV0(k%Is5i zVRGAK>%v8ZD{Xje>;!wPJXDlB<Hm%0*78`HO}m@MsS-&XVpaWvtO0_M-XHg0K?##L z77{)aE;y1+8W|#}@}-+{j=OGljF6ipMs(kM{cvT~>)@*g@%%cZm5MS)A7A$kzSPCI zsPsYkm@B4C^|C7OpePg8s6YW?C%aw>oWPY;su#*A+S}54W<B|#IiE^OiDLsCRxo8g zWnT6zf*=~N()7%%<@b9ksM<z!2a~&=e&i@y*~m3041D084gino?`Ujyq1T4byv^qi zwdYM%?(~J*2@6g(Th7kYlfv-&-g4nymn6*^(bXl7Epv>X{swi*Jez$?hVXsA8lx^2 z7r{_^9sdwU`rVc0`+f)CO%R9P^Qe=^crD~AX3?W^ZM03tIqjI1?of*5cYV?v_2~J= z!?7}O2=%ULYWtTC-qF{X1`#adRL^%_WuNy=ycI3Gkup}nLlWNY_xflA6(hw@oZUeW zfEI{+;F-n!T3u<P%SA$gt7%5}EyJL<P?Xmdbx!mp<`!{x&Aew<Y+ta@(HTo!K_Ios zocV-Jf=h9ME2`bDIZFG?0dF}wg}>X=Y=)pujAya12>km@$Cg9HZxhY=wXB$w81ZW? ze_WJwn0PCbkvn0uvfzG!f7r}B<mIaQbEN1x3w5H)IYI?DFqU$_)<|#6_$-4Ysza5e zVRoMO0HczRU-ye2Nz0DCUsA!<u*t2jVqNeIDIq>ModAv4&(!TXsaJQ3+1!7$)VvT) zV@~Ne?~AwdF19HCZ1*<ZW5ejtgAb^bb5G^@YriW6KnrmyjYK5t=2*XEbKbi7$J+SP zBS2~Jh5y;FOGV>>-~yO`Adc@%QpxnxP|kz-`Dx+!z55>Jbn@4X0pTWfY==OG4qAZK zV7%yqi*G}t>2ze?b(4wO!dkRPsn<*OyS(T8`BtIC#`i{BmL*~P(vRes#0xh6LQU!D z&!+v?T%7;;)w>tZy&St)eg}w6Yv&dI=U4w>^Axv;E&E4wefw7OU(#UzVZ}bT;!=w= z#L9PF-S~Grp#S&PGh#}cH0b;<{~y_ZO^aybA3P{OPKg0NuFZ38alfee(v@ZnZ%Ku? zKal*GyVW;~<!X2z@ha;p#QfbPCPdnkJ=Mv#qo|KxyF9~`3D-59ORI~Kx;tveTb(=o zo~f43C^W-dtP3T+I0klVg)@VKhh87^>%C08A-Ch|Ze1U=RKW=5UC-tX+AUq^k{AeI zi^>|oA4AnNIRAiq-J*i;j8dHgb&3}BlmrT$Mq%70waZ6)_jWVEk(~QkX!7h#uX1bj z%_Q{#mT>KFAfk=H*5Y`FXrNSUjZOWm4SW<ectd#TthPVC?Z46X-a$=v;o2_>f{KWA z=|~Z!DqX75ixfe6mrf|sLyds+4g#<AUZg}y=)EISq(wqa5RjfwLWB^{^X`4lH)qeB z*?Z>u=FH?Dh9r|`J!`G!UiW?7zpLTy9bO`R)m_eL)q6cf+i|RRmQ&wq_H>@UjV6j5 z7UX(Rl>VOY4yvWMDeI2Wi^FpL<jPE&ph&ByS28JFqwI8UKmIX8xS}3%ai=lG6oy-& zk{h4c+YHXX;i?6-FByhv3_syWjMw<Thp=H-A1<~pXRcYWNVt6@nD71O4;f3OmF^Yy zinbp*`GtpLx+%rkUn0@Gf|Bk6U^a|%s<x+P8qen$RF%ZP?AswL7ZiD+|N4(dU1VhQ z4(+AA{wT+Hk9xVc+lA`4ZBt)Wl*RtJ{cVVag$0$TPW(7sQiE3HnZr4m*q*C&kN-0_ z78bw)?&mKJhUXoPmytPsZx^Uhq4G!M<Wa5NU<)OFp<}_ZM<&S|EJkF5?xI6x3Q@() zK>rY1U5!AZ+4l2({jfLbq!7N{HRacyHtkZ3Qj_vIM^)|qhHPc1d=oZujCM>y^K#80 zzmM5qfMAi&tP*3t?E%Q|voUilW2F&U1m3_FbttiSrMa^Bb#=m-<t%mNy-6_BB)TUF zl?#|TMPHb~xw>bL{$VB;f6Z)LXc6SK)_GGgLWAh8vY+3*#JdF_4XVHFnSQX*JZJl~ z$3Fpa4(>L1g$u04WhgDeDCDvIwp61xbe~>KGo|-`+KE1|TmNY7-j05pRO1>1Bb548 zFZKKJBI4gk*pqy`TN6GR81vDWSs?-bmx#&<!>qxb>MC66(&+Sf_`!p^hv(yyp(F{g zw@yXF((z9l#?poC{QhG&pOoab+22ddQB8aBrHN>?h__BYBj{*3t#dZ3>v(fGKXZMM zoytPJq5Ci?u@R`%fpb|^EOA`?ljw|rbj{)XS}yJa!22=O?^aUYg|WAQ5n6S2oa<kM z1YM*_5FH_V^Z3@%dUtWg>-l%ox1CrvWu4eHPj#1=woM5P>l%KdW5$Mg9%+p)@3049 zhaY|5_{H=~R=5;gF*;)PsCyAMcI+!tK{_yLK>E`O&XyNY-=Sfb!e;lye#0JBsG=s) zq`Xh#=6#=;vA<pynVf;jXMR<%KGFfuVoKomc4a{y8d9HilZ6ocN|EcdKlc$+-IXR} z!lhF!bM05<-;Ov!rHu<i?AkB@ekp~-0_SOB(tK5et1X{XGmR6N+F4Mf9Ow>QwNsqx zf9v=7(}TVTuV|a!Xs0cTuN-{oDMMwd+uWAb|DnQR;}bcX^?953^VYE??y7ye@ZWuH zfkEh7>A!OxdTZuvUm?DiN}k6Imv6Q`t)4C?F(8{~?!^&E3kmr&1zJ9<c~!A1;qPd` zxvZELn9}e5g;aOT=o7Gd)3j8;!m;j;W_w+sB(ExYmx?+Y+H=5jQEB+jWOb<7qO5@} zfC+m!^LXXra^m$P!_jY?iJhXsUYGEHH=2M^b{1Td7DoICicHw$oRO9EaRG&TbPG9T zh)9HfcoMU3tpr4qJ<zhHJqaOhSZ5S(T({u|4uWcz8aB5n;+yqtS0h)O-nPY!2-8w- z(Mnn4t~t9jZi|s`6MOfa{om?Oy?isDV`#HM$5CBg@=v;&NPc2{_x<~zfgX1A(F(#m zo7kMdjTqfXji~fhjh`Ru+Bb|lx#R!*?Em`y{r~#Bo)Xb35~lxWgUN`GAbf+rZAf3l zJ~<L}c<Ae47zLg_C=_S}Qr!clRw^l01!5~2eN>}X>;G-)`ahpOhM|fh@HdTFvxGI7 z1XE+TG|kS;m}1f%2#&520hU2sBy@2F-V~pOl)JR**Y9e#?-h4HQ~L#~M_a{}?G@5= zS)v+jL97+|l0OAa-|5}MY}G%OhjzCdVe73olGE%kI&)^2!lXLR1;>I*tzaz>?35E0 zrI=b36Fz>;Hy!;J%)W_VBWrMyf4JDZ8SH8MNSL+h!*T@i58W)h0paE=y6oYU1bU-b z&gRyxR+HjaQLjFCybXKU0Goxl9-2+OjuLbO<ZsFaueD&r9tn9yq1)jgpDR6UXKaS$ zuD`Jvd+xKja*1tK0nv0AP#&iYVX)h9m(-g(tL6srC&0Uu(-OpjGjHe*rLREuEz}Ml zLH7XGXVLE<o;lOieME$*_>dDNi&MSAa|7HmQaH*DPf;~qwClBtfJN1;n7PvLOthK4 z(RwNZ;HDl0xJwQfF4c+WwtXz%ZE8u|Y%?56M7K{VtQ+DdJ-~LuEm%m?a8?5{;R#@W zP^={-cvw1eh2^9Q-%l$nssMYArh;>^{#`&jCW&-%sU6L-E(s=b+p>DdTDXQj<y2e= z1&t6pzC)O7_1|~!@H1x)b`1VX_IandK_HnODmw=#xu*xsru*sO$Ab0ti^b^6wb5X~ zm04-&<v6K(xIO82-NYO6)jl<NPW0p!ep-BDnKqE+R}0*p5l>V<Xg2ExtCKr`NrhY) zU;Q|Cm`2?eKRrGuM^X^$qkS)j*Yar*nH5dKX)^SyY{QB5{4=tC<zO-bjpv~*oAs{# zid>#Qc9H30tl`b(L`%H_jn(A*ngkr(<Ij>qp0PbFv)o#RcfyX$K{{r1YtJ@F4_twA zBmAD%K7^+B$4gkGMf$_dy)WTqH(V8>jf^g>4}~|cWptwi4{X1-JnyGQ(md}AGE7MM zBQv3UMI?DD9))7R^E)Ty(7>s3-9&J>d@32PKXUX->~lr|>`bE2iL}tp)5(cx*xi$9 zm|9rH@FDR@4PDeG^nnsmmu&BHtM8UT-I`wSnp;Q>u7MZ>y`5`;=Gp1f!1Mc|f_WF} z1({Ha0l(ItpLQ$kl>7HKuE#@=TsTt~cbVwUS@Q#ZO04k_WV81hz|wV2`NK{C5X_+p zXKr+qhvcF63pcGvCsA!4m1w@t^2;o)W?b^m8B^~UIsJj#q31Nv+=$6hK$KzOf_ecI zX@|R`7gA&*qwV*SmW%3{k#bSl!$7}L>rj|btECQN5%+U<(O3#Bh_dpgsnBH&-2>Bw zG2uggG_&4oW@E*$)`+@n6!P7H2TVRZ%%l7c?=}u!D#7dF)=`!+Lo)TUGRSh1;<?Yg zJ_17<W1GE@*=}MToJ)ywnB*M(6>@@K`-zID7{fDjwXNFzmIEmk`v(x|lj$gV8lW*~ z^Ekl>fv2%F8?9$~DddnWnqBy%h6utmi&LvmK~km^h@uM;XVr@85{(-W*#Zq?A+?2g z@Z$Z?DB-(+T)Z{0UY^U^Y{IT=<r?7k9Nz$cF!BqO@SP@Z4eCYr4&^{%2#;}duhEAS zt6(8kaTv%sBOsf+NPCwptn#D|P(Cp=;Np;1g-qa+MM03kyoWs%58_XnxnkuFE+xR% zWmcAEBUkuVZ!BEHWMfWv+dS4i^#RAwE0Zv8$1a+U-V}hXh-aQVdnF#X2&+>ycYf6I zB91uIfP4MGc*dF%PhN)OdTk<x%hGDG&<)xnX=3?x%^*kXWhqo_2dY}qa)EfV4%gPS zsFz!Q8=Q%>R>0q#JCtR`1P`xKb%itSDgYVdYGdDum2<tde}D!;I9OPD)=w9x*kDY) z!jk87au4Wh8=jDYPvA7{#%s#~!N$U9HT4EurAr-ndSo%pwMjRWr@I^mT$I^BvHDx3 zzF&k)&_Hqs@s*;+Mz@Ft&0x?-foEN<R+g5_%XiD7Gwe@y<>}2{RS*E7?t@wZPOac4 z0*BaF4+b6^iO!~<jKDRo>%^qQmVH~IH<i;-_Hq6-V`d=@7qwTDHy3xXMLj<bA9n&p zh-L)|+e%IM?};W(JRmrM4JS0(hwvz_+|^fKG-iN;<GARZFZgbj$MLjVF9I}igsY_v zWsDbq$ZoP}{lThdmiMChPixASq3kUOK>mhUOsK(89SHbozeubgw}0?`>`iJ}9ANdt zFKGzDne;Z_0yLlEf!vULxUew`xzu;nelMv064kQyokDbjj>rbqDNVq=N^mg>k<r)b zW8bsyc-~eikc`S8xi7`dbh3T}r!#7b>&M6_x<K8UO{~_h?++mBHa(;tH22bH0^PQr zeb$t9Fs%e_8oi!0VUI!DRI@vgA|7nBo9Nn<_@K&&kmq(K`;fa8O)YTWtFggRo5Y^b zc8Yd;0&c_aybh?can6Z*CS7_)hnPaJkUKw3$;USwIc2JUIw*e#a{RKqM_`)?lL8wP z=(=Y964~$VEp}v<|KkuDpzPf?5_rwG7=_H|)w?e1@+qDsNpm6AineYvThZ`je8<6^ z#%LB6S7aKZa9wd$$2@o!8>9m*>$;#1pLl$J`b;%+lkQ9oY@N6bVaA6xpmj>Q3MqE6 zk1zLrm_&7?rhL*k5aCN1WxYR$jLxk9!~3ue&KE7&Ka{*~Rh=L^q9PqE$;i?)FpIMY z&p3s<M`zez#&h$N49n%z43TY$Qt?$2Jl~8jC_m_e#(KEgjB`b$s=Zy1liv36#W?UJ zAbgjOYrs)HE`2|u(vo##cSKXTYoR;Pt<@Ly7=3-zic!Q)=wV39eI9Rh16Xgzgp#t5 zkjP!*9yUO?=#HnyC6w*GzRa)x*a}(7SlLR+dXzfUSNJ*%)`ZSLRz~B!&`yJJHtv@8 z?)I!ZiW5A)M#r!BKfDRB2{UxUdMlvQL+*9VowueRt*z|^8{Ydx!xUvBdM>Vo)kOEC zD0~n&|Ks+~-Abl?!9#a#l=zSFt6Jy6yLGV1_u$4Wm3i@m{g^C=jx_t6Rr4~}8$3jK zelF~LPn<>%xoZp4%AC~_VqMpT?c&9=FRFVABCgPbY@|E=4)VI9Tl}MLjhdhAyNwgC zRE11SoR-V|+$%-A>f8aBiGWRO>&Zr<Ee&5xxu|xsa9kmatf2!+MbeBidcme;uFP#< zjwX^z*r)%RkDc8F5%Lt5vN35e(2yjfwFp!{n$B6}Z?rJp;3NL{o09jW0ym-Dkc%xt zAI6XJz*>sSw8dv&IqLVOuLvf^Wa7Fb1$47LEFtzd&wve_wGQEDclzuJcjhY3>yZ~L zx-Jx<>?(oAhiZUF0`Jf|7Kmrc-x#eA3d%1V;+`YT`G4alT$&T~erqtYndO{#E=~7a zvCSXJ+R72K@15*k9;BIzW_`B}3V@dF?@%TMk!B*<<E`j0?hBcnzZovr9p;hg&wl(# z%GgeulX?NT(7*#R=IUQD#!0g5$Q@XOdCX@Rd3$`st`p_k>C&;W-h3acC(0P>Q9;o@ z(VAhTHkU4gkBQ=l)Db&7XB(@Y1NciXi?0l2G?T~YO<iKdaOoPtT7_bWzH}mbkDema zmxWD51M`lb2M0%25C(Xn&Y80Vw^RmSlVvvfX<V5sne`WgJ>SN!(&&e}uC1&T4gQ1G z^xv87-s@t<w!<QXNu4kAp2wb3)x5g70;MK-`jn5tH)lH1O_oBUW^-R_Qt?>->+BK2 zvqi^IlKqJv3%c#;&j9E%91wQg7hfm7?nSW`yM&_L-+sF=SUn0Xp7{ETar6lNe6|y^ zv}x3f5gw2;nlSJB)SWlCyBjQQ%{yTsuUoPC$Cw5qKZ=abK=)umc!SF|P}*|uBrdS} z#NH03wDcmpKr6g(e1XW~GBRMWlbm^65avnGQzmLT^nOFu>v(j2jNcp;Ge}A1tZ*Bz z^tiCdB%xDVUN!l!gfw&`6m{)mnbOz$hl>F0j9)__-*Pc?y0Bi{8<b;b!gmQQjV}9l zRYtvyMaqL6WGK@haykaqsdc+#L8!K6@_qZtMuRNDurF+~fEay|Kww;LjT6}Fq1wyf zh+Wl8yC)DzWpZ~{!SN@g$*(ZBhe5+WTl2@cF5lEsbN?a7R4Uvd?exc%)ZN}@;URbV z5%Gu-@?eP2?GY-Gsvu)=+b=jxcHqjIaO0jdd!klp724H9_Tg?P{WqN+$@yHKL&3P< zlHCG!G^{&0+*_zQgS!dQA>~Ik&Lw4Nqx06IPkv!`!BTTz&Y&@C`b|sp_TrnEXoq{X za{W;1>rXaX(=lv3u(pW-#Nl^k>agQX3OmBIJmrk1toCM2Zk_Z~-q~}kx#YX$V#I+l zdwKBQ?;uxDI*8wa5?eF!NK(c7iVPk3(>M}uxZqnSvzb|p%k<<XP`S%e$Z9iYA!H&3 zeL4c<)V8dO(Syq9x(^HDy2KV{8s)CK%nuL7o^uuPc_n|I^f!x2sxNgAEWhpwpl_^S z;>---r&Oc}`AdZ6*KI}z3?DOqRZmDjWq^OmoJYCkY_89OQjkr`7~FQlomguz>?s&J zgxST8d)mDh+t+S*LLnV8H%TC1mpc*do*%LF)^uHJsC6n_$Eu$U$b8eT($oUE(Ha*x zrt?|W@1lCc5a*7$P@VCW?MF^iAw(q#?wl0m2ZW5tI1!(U_1-<?n1cWU@mM2zDxU67 z^!`^Iv9=8SjJq0vcA)aG#SRuG_YQL<uM!O}5#>(9UxM-`i~ncGqLf2Hz)BM6MxiXV zq_^{gRIipNdRGr}*bJo|kM0|J63B771gaNqf?_z-0zL7TYiUC9Gb?TpzbQ}_&cl3@ zp-;mdHrvY7Ebmul?0GTttv%V|5<hrSh9g5+N~+@czqke%d71A?KgtnQ=0j<)$!4yE zzV|XyAjNxnL2=AO*g~qC^2H@u&*n=D#EHlIJ&Y?K+Tskgx%zWLv->Cl-pq@2iqHE| zNbDQB4Yjulq;RYE<leYhjpxR>AbVLt7}4jWaf0=p9u5(DjpKpOPar`Xw3a{FGu^|+ z5lKLELa{#9zwjVn&RluQTaluS5)Xz$t(OKN4&rqPh6qExy@&N`6>8$ADg6*)u%`(w z5~Bz=m@R6H)Ll^a9|KDKo%*L&@Cv-@YzPH!+<~7i+xl)>@_fI$U6p$0!|d_YM+(mm zXWMimvvV9;N1^n;*QnYIkWO>ySbnhXk-pnNSrJ~_9B1r8ntP>&SN!@lPVk_psdb4& z>2|xxw5HYsvn4+kHnTD3K8s*ZqSlH_=RrUpxtxsDg5d<63FPs0#1Z7oa@Y>9j-E;j zz0$#nOr1>fw9MDmv+YUx50$CCfI?=Q_qBO-A_jG$Y?{OU)tGkf%Dt%ZD@3sxtt-yJ zD2&cfh;L+Vsep#5C<9;97xDt-Nxa8S2BTmeV&nRnVhB$Uo;U=0YdSk}g?ATp*1xqv z>{Do2?T~Z7=X&<@>8*M9X&iu$|5iemVypfVr3OSm4iw1FOR-tq=_5P+r+a9N>5bto zyIQr|Jl02lY%$9(u0arF&u8?7KIUE+4=zBykfywJdBxl${NbZ-bi!;m^d&CuZpqTP zgD|?N!la`v1ExJDqeyQ7v1@s+j$427#G)uk3Wd+h;B`oxIi|B819oE;BpdpUZ8h_? z|HJ0|NIAYc*<SNv4;^X<G)TWA%rFpW7k;JTMUhvJ-eX_Im(TxFBYX`Yp1hXZZ%;vn zg#*uMML7ONrOB>=iCBqWODxA{w#P4Tv%FUq-^Q9z#KiWx3bVOfe$nPBo~`>iN;i}m z{YP+w*_JlPD%=hY^ljwNoTZR+ExDMDWOKJl#2*-V$EnL+jqv4P#CFM`Jd@?QT5#dP zw`ZDp=&|$wi<v@LEwx_y9I%8GPvTd@9fp?TM7FF4q>~Fg5})mix8{>-yjtc6gDLb| z@=c?<%%&6Z?rt5$Sy(L)vlets33N9~N*QRIJA>+>)xyR85|M!;tvh~j#=~{z7gy@a zl*nn*{)7W^;o$cQQDET#>sT|-@U9yu@wP1Zl_ucblF{!%GD@DFcJm}iwR?Y+z=D^b z?P7GckB|})H@%P>M#nySH_D@TpIY|p&9Hy-|5&$pqXL#ZWVEdYL#zSx4*tdMY=g$a z1M1<wL~=&2qu4)lVW1{x_L%I!uzPd9E)TT?p8X{%Q^22P#<?(K{Oxe?R6NT(2TqF= zhGc*E+08cj&yj%e8ridzp?<adH+E7Mp<vCaol$l+9?Xh=wgiD~PC&ljR&GdD)OY8- zK==n42pE42IL;%kdj~y}*5uiqwDv?yTjo4HIO1#x%zEu1#eCy0Q9)t3$&C2hLTo|D zB5&h-ZLO#8+m_bgP7Thrtx~C9dWhjX1sFG?wvKPNRPBnf{aMenl;r9Z|8Kq%T?GHY zWqoV0Gom%-Fy~l*20DB0o_(wtdHm#J!yv>7W2`pcMOAHv^YVnk_V<ljBDIret>w7= z_)n91h3@R^TC(@+-ksi9kIqp|2qRnOQq9_M;*e>0r*IF|1^8J;`U&!)wqeL|W6!8F z=8Hu^<JMehw~tOsl3{NTCHpUvVh)L`a6z}RIIELwVHyS2%_)Z69riI}zpK}pF&hL} zWyv_t)<&F7+=I>+rki%dY7!0h>rFKyjgmRO#Fe-4Evwj+M!Sg-(VT`WiPw?H`!VkZ zlslR<sKI55iHQzA5fni})m4aH3F<ZLi7j(w(hGz+%VyCyl;S$${Gr(K?X};C4+U`j z+_webjRI0t`={)(@s-Hl2PQb0O{bK{nDXvlqI*87m+mvo>7F7~owsvoH(R%i<>{^6 zao3x<of9%w56?~NCQDYA#Z+HEIj{Xo6cfe+1D<>AqnF0<?tZtK4HwL?BkFbB|L7!6 zsY($4jPFHX=}}y1;70Y@n|m5s=MU;;;fF?0s<a42nQK1gI*%csE&g&mUH72u$7Dmt ziS-2aFHGKBf<kY~Kw)!13`*NkCiYCD*$0HJLI%>=ukw;P%a@+kPoso~%^|mc2eDN; zmFzJ!OP8(b^Qod66YZ&M+s6-{@y|wqkB6buE;-q8vf{{U$4@Rl_7sl|Q_VHU63C{~ zo)eP=e^9u4j+Av=pQgB~>%0iIdjb6?<VL+2Sa@?fuIGCz??A_t0|U8>a5in_4sm6t z&#@)tXp+^m9^h4>QJVvp6RcXvbhgAZ*xoZo+Kd7YaKaC80Eul5mLMbO%DToj@0M5{ z=Dud~Ivi~ma+8eZ)GBa8j!UZzhZQf3X%Y5Bewwoszk>=dY02{Ez55}2S_#Kgi0ne+ zIWdy)X9~1}!xd?vA)d{vD#eZwDjp44dha)rDYTqu*Qw;CcddB8!rH9w{iaW1G0sr_ zQ8$0sd2M1l#t7giI*mVAj0d1gHv#kWYc1WLb~H3L&GJ~#RwThC#)-IS{|~$Z2SFJ} z%PPsJm0DV^lyGTquiLaGKUq-KaIz-~^V?o;x<25?Fr%#h;fZz4scvr)Q6A$>lpSi^ z&P7saE&&2$VH#Kd?dyoE*YS&M8$(E*Pl1ejUWUG`FY#=+@=Y$34D&F0Css)1u%-M~ z=LCyq`#+`bWbFHLGRAeg@{eb_LMvP)%wA_VnQ0TNa34E}JyD7%<5!Qrvp?IFfTWDi zKuTozY^=vhz&pHP?P-U?!?o%C0Nn!pM)!~SK9)^t=G^`6g+X%`+GXYg#n7UGBDC<x zQ_mb~YekMW?h8_jBaniE9#^^voX6yEyKH}~O-)ts{Y#|N`x&ZsT^QmMP>=JMV;J&U zQGvSr`8Y1%1|TqIUk>>kTXkAdT&bG4TCv0N!kfUULy>3xpz?~O0Wxiv@kni39S>TR zB|~nZ*CWMNnN+DK?kVh20^20dJ2O?h<v#@RUkYU6x8<q(>%eLwkIf(2^#mu7Uxa^` zeE#gs;D^A?^O`m4rgqHeXk17DYxyLg1D&A!YNG2!mALw1g`C6Y{`#7Ng66kEiv;A( zAp<Jkc*q~#uxqxJM-K9%==@f`U`Jy6>P*aP|NVN{>>4xXM$`PEZ)vIc*MhxoCgCAd zUSk*4<|a)s*wS3X%yLUHAnLS}e9W-4LweOd97=2fP3bZQtR)i7v{#4APIu?lLJLkz zYy-8s93?pwY1t%ik?mWFZjuY%$K|3FB0a+%BAzZ3&Fj0Xo{TJ&#>>2aW%sm?@fxH% zOtprW!0iWax`^#htW$uD-mRUOs{<a)eXrU-99}j2ftP^;PytbRwP4nY7{Aa!uA8RW zI_+;0Z{#&K+fYt*%^`JaK<uN|u?*gfb}b9s;R5B(76QMBXMn=4a}t?h)^R^UaHf`L z-a}S06#Kc(mNAf%hq2)=Q5fJFv@50nFpCz;qSr=3HIB>rKyNB6n$rqZhwLe*+90tF z>tKe>(3BLN!hq1CRg>%ZKZhkE;_U}syM5Q7*^uWLu0g9O-N|z=+q=8c!g)pt-=|fO zhB?{aRggXfs76M;=y`d8`8%0z&}N*w`;PNJ+>PNxeD|NL#rw&4;#{ro?Gb%*b8B95 z+i5fTr_6_4){Xb!Wbh$4CCSYrgc&oTi<!@AHD<cCmG-qaYfT~*(duM#Lq^JM3O7-s zf-xJ_LPH`xc0}j~vRuIT$zuiIS)5oTcb#F&affov3RFD|<sIK=eqV-X9gNbnwI=vJ z6nJ??cMvqyUa<`J)>Z|j3T!9F{<=Hr#j!y|3K~;zRF2q0vJe>ONm?#uVPolc-r0LG zV+z7xN*g-~07vn622K=3(S4Nd<K)9-ZW)@TVcVXR>>UNPTV`0LZ0gePc1#bX&{!^o z)+%|~`hds^odmSSlE`n}O)idA&>Xog^aBZsZnR|3;Zxi$-8_UAO@2O1cnvh42Mt_j zoU#wr8ECX=xF1iRoj$BcN^23}pm?j`SomPsIgB!+za!n+6r3Z|KDzX)>C>U$kAzzs z_xUOhE>PE^{cCKU=%ZfSFDj_sR?X9X){l)7?{!1IoZ=SY2aPG9jp+x!;WN|jRV~#% z&m+L!QlmI62!3i<2aI@3bQd>)2CjcOZPC)5H|~Me&o52Z`uD4?qc6L^gv}I4_xkXe zx~46UI=zS*c-^n}-plAPjlhTpVT9^x`n`ZvuoJtf0XWpsgAcdKK4o~mKGnlby}>x4 zcq8jVWJoUL*?$Q2tcO<r^ZAkEE%l^3ECrN1hiVCa{J^4eRiJPc1a`m)t*k}VhVn4i zr$0D-FCE-@Fgaca=V(Vg)?rjOxArOSpO;ZZk8*Ez7BYmW=~99x2AS>!X)o-79Q;>@ z-ls*oQ9_}!-K1TS*n*z$9y*Y;K$u%c{$AgV`6!KylzD92uDLZC9w?O#bkhMG25F;Q zPr8lt#|AXF`+iX!BHDD9phnG&J($q)okDl{^12Bx=cc~j4obUe)-R12F_8myBZc?R zLs=g%XC+L+b{>9yp$ktLX-ipx`N=uGlox>aT{#SQNjpHRT3eYlE}L`XF5iZUH?*TY zM+Fr|_03i-oEfrI2MFe1gp%uO{s)o+BuHjcsE%P6#46lRxJ$ivNA8!;x^=A(2Q1EK z+*|r|4pAF6qo+}XD@BgRl{U5)s?XHtSu*<yy-WOK!#+bWjKct3zFA=sXsZYUbJN1n zMx<FpK;G^gcd(+mbYqIyrO?0$`IS_C9sBnP!<9r*5&j_skm;@INU?m0#TS*`Ol6Xf zpOiY;GL;pz((UEU8x@G7<?9?OS7KV{Yqy(CUvk}=sSmt_r{Gy};SL*=cb35lql@rM ziRy~3w2^5ifw=ckOZ|%RK8qcYq*jJ7VH|7i1k%KFwftvD1uXrkeUiOCPE~L91~9yZ zbhtTHjBuaKG$q(Tdx57jMK}7XAaZW&j+<Vw&2h7^$4JH~lSC;rgazkQhx1r7UsW5} z2XQZk-}csja*-Gm5z!&c8lpYZ<$xX?lJ<|zDMP?U3OREhRZLmYk3O231j3oY4Y?t2 z{8RK{+e#C{jGIRFn_(Jocg+FbgOIpxG=aCFA+DmMZO(%$UVQJsj^hRnUVtaXti^bu zH`RX}ZFRNIi%q=C_8NDP;2bQdYx0DcO<iYrpytBZ_p+ovq|YAl?;atZme_N$rs46} z3jFPP_c{V6{!Lrk>7xX_d6k8xahj?e9+z?3wB0u$k_(3h*pHZntIq&?GI>qr#djfU z$Gee{@w?&*EMQ4X*!)>xtkLsVa`{_BH`h+Ssh(0<Mrcqi<2A{2K<pdfc{~+5dq_HI zB(q8`&p3b~$0KJyA*CtN#%}%`s*E$(%!S0tQ>B=<G^bCCbO{spplZ7V@t}$YKW0n5 z@uTDI2g{Xf-gic~thlb8tPZ;%yFuEWrgg_ViylID(axV4OP>!<i)$fCJ6$%Q>|lVW zfuRjpgd>uhFC=W;wmw;K$!ydQi=T-HuE*lNip_8thUlH7I<6RPs$rgHxKRpE_l(0t zgn#C@oXs#&XDoJ|8t+hzGn?9;?$4$g$|_M`liK=+$h4GV87hB%w6L+>>=0d!yoL-A z6wtpoEp@&@zG^Yx&rL;W!|YQ=x}EyWDDj*G%GtAMhy<AP`^jITX^nrf(*6=LI4UFs z@(u<f0k>68y5C_>%oDUZFLCQG9SMq)B=M_u0!7GC7N)GJr#+k@ezRS=wxIVtj5C5v zQqae7rRLSk0heC~Q$+w?+Mn~W9=5O_VNVxA)ZByFGV4wIT3Yp%yS`W&JyWG+S5i4@ zrMNg01mbySIUTsBw5a)=quTOVhVMHpDM6XA1SyE?3z(^y;hbs;R@B=zwBWsGXP)tl z_*P-FXXH601MY@_a>~?#*nU}0#G^&U;_x@e)4Qt0m>5+Exi(Lt<SbCm<7Z10*plS* zmQw5tbsasp*tnV|!HYM~og1DU?_?fTq!0p|Y;NI+=ytN@@6XruI%_K_HR;JdhmMnW zhjjb=YH;sO{Hc%x;9R(>)i5J#%UZ8p<i*3?&)FTKGAr<}ofSl_1~F#a%nH#xfF7_S zR2qe#RpxGLeogn1Zj3P90n7S~HrI$JsI`PjNHTx~-0rDVc#Dp9+l7rCW36vk@3y{~ z^b8Satb8`fsQT0B8FLQyswTEhu)M9!CUvNMHN}Qh19}6;SZ8V)qK-?whz|B$6t_<w zE^AFw-soBt;geW&51|6whzkudd6FPdmDw;`HdxU9^UE6noCjp<C)If7>NtQvTL&^} zYn&Gl@RMVc5@b4AK#9uRY&aJG9|di)F11UA2)lknm5Vt*CGoK7XnWAEo>#U>f~v&9 zz&T{23Pj)z?9-`8y4o2nKU!gq#71?7N09xZ`nl0{IsyFijZSuImrKi|I+uX=9Ll$` z2RBHL9?eN@&gGnuGpE3o%vb*Ct89-zx5l20r{z)Y@sIaN;Uaarn4CW5Xmr&~DpGxE ze8nYT^d)43q-yUcQJDC?Q2^Dd*`Sxla&acTveaIgz47-TD;Nk#iBQvD@LlN09W<MF zIt-vfXzDXE7Xa19f`m)B(v`*@HfT5{a&wLiR2gX;aq{Y((1_Ig^%tmanjxUGy<6x) z^~zpXAx2!vgCu+0lRItbx82?Pn|Y)w*P;BAV(!9f^I`JNX1#+TU0#jW)_?ZkMqkB@ zrZiKlXYTD>0$HKEBKW7c(#_|nCyuQ%vP$oT56*ew3TQ*8UhAm7hXh{g@3A=zQzjPB z&5M}`>Bh)Pc5G{_s+)2aynFjGCBP~Y$a+I>Vw3}VDSD*WzzA*WlZ!#Kg@0PRvSzuS z!rnjdu#pKn2=m*uVg}IDg*4VGE=4PAYu~Olcj33=2v?0ny>U=+bXcV;#N{s$-JU`> zJ;P;)#3G!6h9pam<JPNTHX&dEAgj8bRuMmKXqelEwY8b#m3gO0-PU=Y6R(w!5~aY@ zrBSy}FWHE*8&Yo!?Ld%bx^J=O3HLyx&kM=Ho3Ajw>BGeu0Rhy-!lEYAv}!Gq9Zw#2 z`5+ye<?oKy;B-e?S{E;^m#t8PhFYdP5pQiuNve2d?_#ydN6qfH+64qxYWpur)U+S* zH0C@U11g^#6zfr7-M)2FX96EuH`&+SalEK^-gC=7$3*iR$Dh|a<uOj<_0!luO#VuT z9awj$AOM?{v%R+Xd*n(8X+=ybr%o_D^!=ZcNv2l(UGqRzi(=0>NHBXD_Qb}iwFQ_P z^<?BYIJxs>Z%UV1nQoOcQ*<11mD4tO%ayNMd~)nzB8ia{kj)LsGp_vcKPaK-GEtqA zO1kK^@_>@1&`$km(%@jvKYJVRdz0R`q}1T9hJutYqr<D53s`3#GxQjhe95p_36Jel zvHSRXhqrn-DD+>s?tk+#&e|h9#zdD&K#_-{gACa0X&=F6rok#L<qvrRe+1L}{E6#= zC}WxvEQuAr&bl$Umw&oL^74Ej(P<B)`v2DX#`DWq#u((jPM4$KTbup!mEHv@^5x!% ze}o8xsd{6Y0)QXCjMV(<!u{4UU88JkD=m53|AKpQ3;1#WzhC5kbN&C_zuuTzDEZx; zbQkkcUS*TGSNU5->p#Zw?ei5S?vp{5hOQrWA+CLy(_CCFuC9O(nh!R7UEXxi))B!w z;y=z|a5;DAQFoLIYsS1Ttxg)e@yA%WK13DW5?8HJ=_=h=_scD9Ebd-<>}SGnf0ajf zE{6T)|JUy^Qiu!DD#JNW9|moW!&-iQ4yp8ec+PiUfvLT8&p&ADvwPKUM)`2&w>zAf z($WQ}dP8jkz1G=-vd(TN6RxXaE|=SQTAH_bVU#7;uo=i27k0_NFP=K&kRr80#O-rV z2h|(&Avxqz67!bTZhTpLNA*nV_rF(B+|m}kCoF<+-cI5ExAi``l(XW?$r_^HhoTw& zOwCIoq^;m3BL?m)o73=Lr<O4f3eZx~qlZ^oI;N^P+oDJ^)L5urzcZNW&8ll=4>2|= zdvLqFB!2sBni&_Y51)#0sj6NWV5BG=<o0a#lX9S&1tx=;`M$cxCM;`@q&?Mv(}l?Y z@_t1vT)YamJb3BY4l3Pa`p`1(;b_7UtzKp={`14lJe%|L`u|YFCkN6$EKr*o($~4c z%MOTaSTM<vD6RcvIR-uR+)jbe5@Ep~CDX5?Z+6^$Qc}H#$gIz><JmgxFdx16{Ga1x z7$S-i<Q--*nfE3C4XsURerIx;G+4C_12oXU4gN2$D);(F9SPrCa$b~<Gnd*7a#f90 z|L5DHJZytwS~cukW^Q7lnLn|8jL-S^qfnnvkZZq(hfP%M7_~ZW8g8!c=&-&uGzZ1l za(=QRp}@B-tBqk8SbNx+1vgzFF$NUi&YKY$iJCzSCkri+$MO5L5jOxa>wg{g|F1ud z=RG;+4z@bls2`SCPHqj&O2}ot;ytMk9<WkCuP1D!D^RR=|0T-4SQT`9Yw+9j6Cj#O zXJ`6t08adU$II`!o^;b~QM7tF&tv?xI{>1Ty7+QAJ*05oMY=2J?S;?Ep4XE=K{xlu zo$1f_P(1FvNtWp8#AbF{QwxjV0sFpLlP%yyNz-?ps)--^2($$Zn5;-t@TB6Lat|n> zPA=1<1k4>*BA9oRRjnBRMUH)xjeP;HBoSp7%!}=M9yn{J4HCOwohqVKbxvo2S4HQz z!gCy^8tBRo%Txn5JCn6S(;_35(q4{k8sphflguMb_8l=XQ28Y%mdP8RRL97xNW$AF z-x%O>hs=zl&RXWhm&XncG9wt-c?E)=5OZgkO7jj0Q|?R8GpRJg(XKutv%|Nx^S#{c zRrdPEK2YHndg;K^uh31)Ds|Se^&UDLEy)sDE-6=3MFJ4M>SDYS`UqABu|wzv)7NY@ zuRC<i9SQz=BAq9F7s@`&PD(fbI_E%QREMus%a0{h%%S5Zx1NUlf?LQd^eCQ_p712Y zFq-wgx3aM)|KpQ~^*7Vfy>IWnaW13^5wF>&a*?<QpubEU-&XPrbrP@n-c!Y6xQa8% zj_)!p0qd;Y@moG`IbENKewM_YAz8v1@jWc!3l20I#*SgDl+UfSQqRfb@6nQ}2^6d_ zJYV9h9@fi6RYn{h3kw{<#txx^q>d5WjJ9cz4WXjKfpWl$2znPhg+)ydB8u9&K6rq+ zqty%9ilh_ab|!3mn6N11+g7G6T!eYn63LSkfhKlk<y$Emd<Eec;=!D?uf7RdOSTJ& zfrWP6u&l**J;e@&+@Vh|)@0CYpHa7)1=S4bgFeN7kMp{hR&&d8DDLh@4$7cOT{f`7 zaF9?pML{VKq0p_+u{(Y0PT|d$s<b8P;A#FG-G~+|`Z+u~MQ^xgdCw1{z`N5=c@lQE z_e%d5z$oJjsJ?b|g`blr6n@17h?jqYQ<+2HYDssYJ7$+DNwNx+U~j>&O+BL@<;+<} zw+jFhqx26O#xJTvT+pQXo+PKZ=%-wnO2i~0+Rbc-4LX4Q+<g6^vrz#p8#ll#RdvP> zwIwp#@9FafrQ;+qiqoUgJlTj9l{yQ?UlKq1Ih0k>B9eZ&^E$KcI~m~ek?zt2!W5`; z+-dG--OiHl{^vzNhtx98NPJp%N7f6ufKJ1RxW1Vz`Jmnwr{%=@mDK0Z0@{BZFJUD< zQ^$0U?{@W(O#;zUKZtFVm|=bheD80ZkLN}PhJ4tVz}VBBJ;Y!yU+(V1(hz9+;-Q+# zsDjy^tj1;`B`!cOMt9zm74|ec#K>qy!%HSbFAeZqAjfSE5*~N7H_r+uST94MO$7`Q zU_!$fU9V<&07j-CD_u8|TLtnmT{o}z!`Tt9u5SINTNQFQWx$%Y>k(?z(UM<jp=%%4 z@A+7rJMN$RWu9+x4y&N#*Y#)1>^Q?yS3xHa_`cu0cN-)3;>+?j;6-3fZJGh=`^~wF z5z9I-5P!huqSld%=TL5raq(a5O{4JuSP5)xHrJ)`ysdZfe96%{=Z=M@J=Nhvcydpf z@vPsd3ZQCf#6@V|mAQ&u*t}Yd7}yx=eY3T2Oof|JK~FB!^|Z=;r?!+zrf%`kY<%(i z%h*SH`FvMv8gQo)dN`3G=<o!gCPNa%_;7-s9cj|HqB~<0mV#j(G^>ZPrLnFK*H=DS zrK`KnTTIuKd#hQ~iLNmwNX+;iQ!o9NynuRsS^cWzT-N&OPRf;Vs|$WtR(CUn5@)u3 z+wW>gAn|}JZf)^h@@UchFUAT<zOX59%}57X6nCrj1FP=THZK-^@#fmZ(W134#_~&5 zzQBRq=`BVS9IUf&cy#Wo8W4T2O|RQ~!~J;Q^fG2x_x4XqtCyEi!_z;(ojJ4LK(Teb z`=ujM#;5fabEb1pu{SjcD<%1V-iapsv+PYv%+n~JIa-*=Ms8x$o}u3!Kj65;deGtb z-Tz>%0HjKDUJuuwKk%KDa97gn1d_$Hr`!c<H|Rn&ppS6nKo+>;VqltTuzb8)n{^>E z?$(dlBcs)+=R?tQy>$TB|K?w!Unw{>LO+nO;`@Qi*yLv?1{<9k_IPb`yJNxa-y3fX z#8;wwM~$qWqX`B3@3|LxhVNa(W}T?U9+dje4w5*@-GMS)=gEd5p=2S#UD}Yh@#N79 zylFNnBHt!j<o!7wcW(}?iOz%=7LC_}!>$fno~N^nG9T-csy|UZAkdBDIh)WHOcx3D zvdp0YKA~RTjeA}z0<pGfi65Wb|DtAezPs2e&K?)`5FnrnFdZFjZ;zpN-D-t|qI$2k z#cW_doS7zLV#N|H4b<8gBpCR6o+@Uph$e1)04Y}Q!6mR}zNc1qa#oG+KZ@H5@kQ#< zD|~>;;-q`X(Cgvnj3JC)bbX4I{EvOSye&RuyWV_Zc-Yz+REHi!VLzh|)!s$~cD1_e zXt_&>w`7aFq>^ZAxlNKDlxAAUAj<<n9miSGgg)}r=`LUG=b6VuaI`iXi8v%b?^W=n zG&@tE!tK98V=L)Dhx&+h<W+Ci<>xnNi@Fj1s4v7?2el)0>6{4yO>J#6NA{luw<Jyl zQZ<N2IasQV4LMGC&2o}{nT6)H8sAi+)oSl*%TXO|tl}mZPJ^{Z3Cx&~Mm1#TMehmW zs=W4Fd?>ld2g*%-rA^Dbo>ciagoJuweJk!cBYrYINlQ<YdJmo0&aF*xK+h|$afW8W zQE<Kv4<%1sQW@M^Rn9`Wt`$>5pvCw{p(X+=X2fqFeWYl#M~ri8{~qgmhF4Jmx_z0Q z**F%Uz{&P}UB6N9f_`>ci+qUkbsU|G0N%665|;<|=N~sVdooLITIU!S57j4sLJ}r! z^1uHGH@krQW9idZ*R%m|&FVm&w1_WH0Ed>r!h|)72Rsw544}#;cXRAqy-KxwflG?# zzIhKfrXn0U$;YZ|((`P$iAeuQ%05Sc#U?xPfoOr8>v4?up~6s*_u4MCu3+v5eN(}* zk5XJ5_2(8TUPe$Db1*+?_vf-;KSn_k-RE3Odeo2`7T*9AaLsQ65I@A*x60f;+uEk> zXXXCZqE$JjvX9BHi)I@2uq@f|-n|Fo5;MUq!!i)2Bi~S+3Deoba|$7pOfLUNO4=&# z+KOz$d3WD@dC;oj8;V*kp<guNdHw)$_a3-)F#DqLfel7r%?0ik_(0jc+)F_4(_0?n zInM4TE6idz^4e4^_bMT49`Q)T%xp>9=TQnbaqN$7zR@VWQ!%(=c5hR$=Sm%B$AbBz z(>OHPqzc@!Ds(Rpl+moY(&zA;T3EUq)cDc#b8Az%Z9LeMquhG)n;?ZIKv9g%{LD)V zFl541`Ygz_$nSM{I;&b0R20Z_WOOwHQa@sdsCkbBuKnM7>f=b{59vS=vB_$UEt!7| z?PTZ_lQlwor!~*=dEc}wH2)T^Wi5l{2dHi_-eFfIif>g3NyGRr>&=&T<6xCC^g!L_ z(5<%<t8Q+SfhknT57k8;nyp*TG+!HyZ6mNG1)_urBDGT}%XNvuF9_}x0F*cbAYWgN zzu;<yJ9wiwTSL7s#)7j?HsZKk96onbJ)rmOGlWopHx+^K$E#wu2@uD7KFBc#)jX{$ zQ|7(Vz$wgFb^e!#9UQE<K%>>wnPvGV<NFm|W>>aB)cI5D2I76A5Z+BevSEm`B{g1K zu3=fOE3Mf;5we`rXN!yf4a&zDC!VpB%Qc%V;NrJ`p~#&#T^#@UOVq%0bM)j(2N@7a zf^v4S;$;`9dljP3U|kIbOW*F7-Jt@F$ugqcnFo4V<)5zZUw)MEl3D)ZIqq^_nlCW} zXIzitLJ3FV-37nPGtWm&4!3=8kQJt>+Rc-qlZ?d&0LzWiRnG+xwF3R}y5OCu+48v0 z3v0`?ng@LAAMrpa*s|zy#*Fmlfbcng6Z2LCcz?b&jJorN6rL!`=rc=;T}g%}3)kWR zSbkD%t9R8oKXuFcD4k?9Fkx_wf|_#Fdm4@nH#}@}5bA8yeW{H0hG*gcz@t&NhM_+* z?et@J8!u4?qFZKw@cf6Y!4B))ZBSWMd}pqy-OIj>q^Tk&M2p7}_3WZ~oN~0(r%pFj z|2{_KTWZ~}^-e$sV#ssA2-jTjCIPe@8%G`0l&|b`U15I%LSrzoX?cHr=()3xwtq)+ zq4)ZMD1K1(tIRXw>snMP93P52B!8<dbaG_sr>ZM@U}SV+slzZ|ra44eXNs-_?gSlq zT8VY-93s!cyvvhzrVv~D{$Utr?*I1obZayPFA754@dX_k3Y_0AamnGYD*NbW1?~Qz z-<xEHjsX_Y!&d<cF~W;jX48;3`?n63xTza9qHvh=K4LK+c`f9wX4)A)`;F>!;!z*n z)UE=xta!C6*38~ueK0t<u!(0e*T;jmZ=BEmrF8IOVSJZmF;4#pyX8Ff&lQQWcXwws z_=7l~2&{joJ>)`3#`tLmt*b<vUxgZNnHINn&(#a&ye#ETc~12EiEdoM1IeJMTEx6j zEB#%zZJDvM7U%GDYCb~dyTQ@5hdt;FZ~=uCRWZK^bGu=wMPzg0GcqXb?X3J`u=(2s zL9yRZ5BH<vz-F!Gr-v#)x~#%cS#Lec4OcmIDf#his~dh?+8myznj7wzHmzdFC=ixe z2n=j28!Ox|vJ7E4eg6y1Bz-_jI^x^-^+qFKx_qY9F)ASPz|TBMQg0E})YGbcqT)xJ zn%Ywult`ds|Jd^stTf#5y~8M`CJ>H^SbLqSLGz4NeXUe{*@z)N#JB{kk9c~%f7Yy# zI}vqT=%n>OPc%)<kk~b*1;47Z*rOvszZa^%0gC^2bNZXT5<|=NDANVJJMxgmviZlk z`>Q%}@<#ewId|x|<)>Sn_TQcz#}?4QbB$YOVG4&-whtw(-$k2#FdF-#`E>O!(Tz!m z5c0XMM-^bB6G|di1_mIzXfYx1XXP=XGdt62IoK$x1|vCua4Zk76Fi(8p3KIFCh$K! zifX;~eO`JC57NLp6{XyR45+Z;3RMs$tLCbwPl&4@-QZ%^+&(6Vfp1ReL?7us7#5&T zrs&ewG``;WqDhddFIgYHq?nFo7&5v{)OY?aNuFuMRWEHP7g`gCQ^B|nj-ba`C;su= z>B<*$UtH5YC;vtt;y$$=v@7lzyT&|w9^5U2+CBkYJ*)Ggs3`REwk5eq{?CsOH93%E zS;;D#Endmt%b-N^XNvdn>rc=4lllmBV<DV4nC&LmQpjQuBKK<-<k4~hsj|{*+Vt?h zn#CznlIUU}7V~GI<wcD9F!a(g|GWMGHHRH@gtYMco^B8nqmU%Veoq(VUbF7j-7yw1 zd%GZT>o1YN)Zlac7X=F3@!%Tge8rsaKHO4=Zk;D{p)2dO>fbYGmAG&$fo2xgIxBAZ zPKNwUn_#)(t$g<~+TkvQ*icp+W8L4w15ZvWb46(@N9aH0NEgHrcKsOZx8qMJ5xLrp z*&ExvRpU+`7mNEI4HjZH;}0dD6G!h!0sdln&VYrI0`gFMqopBPTL=NFF8N5BmIykP z_>m<G&&EH*c*Y1H%X9RjOuOdl_f9xsmo-r)=1;0Lp%p5jPl)u0>ZNy3)=};uiU?Zx z1+fYH$?p~h%10MOs^0RM<tWHQ=N<+?`RAeQ<(BbGInDiX8ad5}&NTIDn1Ut7F%Ef6 zEof}sOD~~+NR=DAY8l6Pmy0Xx80%H&`fU!-idtP6waig$O=g}?<AVpQOm&?d{}TC3 zs!-qz4?RZ^q>;5IyJp?{%U0{^UzhopwOWkrJ`hJO=K*)5a|A*5k%}9``m05+S0kww z$`&fgmsU8^L2L7yQRi*qzZ``BF8f2bVMY1|eTt2QhlmYM%ywxOBIuQHMsLz500)II z#ZK$!p}ot>_%4sl@5uxom&(6H@bVr#s)OV1UMh>qgJiR-zMzp-@R~<?)!v+j*Ymw0 zK1dvXPp0%b;mXQX&Eb=_r>dYonW_V|yMpz~-RzARd=?~;{ruV!zg?>RFNbsia$seB zeU~p{dlqqlZFfEvM7AaQK0w+7`;gS}ITSQ|R>S&aja42Y1A$F>INpB7rbwq1s&0s{ znIg!7t*zhyavG>oKJkFDlE2Y9YyR}1>F{vU039<-Avz>4^z}!VDRO_B68D95WKm}5 zTLXXePr@dmA&jB$5Q-2+v6Y8~OyrB}e}gNWOv$Et{V{H~bjAjlEkxId&;;ADG$?MI znMxe9<4^=cR3Uk7ou`7cb=+})`@L!MK06VPckQgbeBW`c9v#+zEHoNHpHiNXOKvBQ zm-bd~sLfz-lx<~I1v#M#GBzQMtKfH=I_Sh4_wBT5o}X<QZ(7|r_DCte*7j1nGJRZ! zy$j9IaDQjXug>n+LNiJ~IViBv%YHK3D&9>w!UU)TrpdsWvLct-Jvmm)<7|XG<O6Hp zyn}LL28anF%cE+9A~fW;#90AX9LIHi*W;NF(V^4^LJEl~&5#dJUnm*6v;}%)jDtbL zyvlatSifLj4p8gvL8Pq_ZTZ5l(E+h_A{_;VwIg4p&iJO(2uide)~(T}*bg{6PrrLU zefwS=FK8ct;Du^)2MRDxH}`iDdwVO~(@dM-M2YXod7k1(1rp)yIRyvzpv%byFLydT zpgp>+UdR3+D7w8egzLxQ+4?Q5D#X;|v?J2un|H?3!nt2ew<1kD6rx~%iAV{P1=6!! zYOaDNp(W<dUFW%O0@bUb{XlU%(47K)a9U=*GSaB@I12V7`V}dcML=IGFV?1OeAlH4 z!dqX8H3vB2jL6=rz`sPZaju@^xTCqZ?r*xtklJd7bA+Ww1(%Z1x1I7fgCC{!d#s?k zF0jBmGr};lQGMohFK++~_y;`jN(eH3550cf^_OV(H7p9fOwe&cd0q!ELw-}uLx_0X ztx?9qa#m*yUD~frN6c%z_`lsu84G(mo#=GMun8YHG#mZZ*_)$vXN(}#%DF+H&iM@a zbzDdQCdYM72Fgu?@{kuj<(zuQF&@d<nM&7ypA0UiL#@Mh@M$%Lm)DVha)9`i1TvOg z1o<fsm?Wvx1u7hb0*zABZ-LNyVU&;%-~FwNa<fD-0x&?<Lh<x$wVbNvSGyn6_$p*U z_zt0c7_|{r`6cyGnL&wOkBl}+pNIy^0l7n5{AL;C5Q5m{=#nY<ac0NUSP*}}!26eo zlc^Bf8s|=6HQA^Clk#TH?+H&!e%P7&wC>!=mvsim|BJf!jB2WF*F{l5RGNbH5|ySz zK&2@yBGN<zRC;>>krE*yEkGdBI}s325D@87A|-?#>C!}Mq>}`sLqZJ@;+fxGdyTQz zclKE8$N6=B!eAuKIiLC5_jBD>QL^J{Vd>Xq#d7H#MjM!)R6rIUkq1xWP3Mke+ztfD zxT$l_gxVCK^{#{LT4QDqIwNKBkTYum<LQntXz@yb!QAh~$XnS@9Dx(=Yw%C{sa1hL zS!9$Bb_BsKlLx(<p;IRieoj(CoAKR}`dowyLUKeVm>(gI|4dD|FtL&}-FHRfdd>l- zR7Gp`93;oBpV~?UmpjjEf2|E>8!eNU#Dsj#-h_H@lQ{S_7i0LF!5qZ0VLO0{cRTm- zf(7(!rwne=SO`KhMmtdPoSI~>PS1|m%EHX+CTAEJYH<Gr(I`090#X;bDP|{uXnOpk zX{tVO^U<wy`)2`**`XV@p2s4{9vK|)Fn~33#OOUZK@_W{#!!4G885Ypd~3Yu&F{Yg zv<(1CQbBtG{8=iF9^q-8!Bap)h57~11aOfRm>kv_JN;k<6(RX(p~M%Uw`;NcIZ+v1 zfEV;5K$p;#c{W9YBp|i%dn(3Bw30C!od2asZeQ~+LlRd9a{m^97A_aNB45A`IT64v z>c}=okBbCWg=D8`iwv2!v)Q>zS@A9X+7KrCS|Snr@`NU08S<T`2FQFi=>SsQo~?ix zQvh+a?PC*^Yja`pf#Q0K;evk|=5L2k&HQYc=AA$s5EnJS_Q$Ht;Es}$+!v4tC;pqb zBi;othWhFW`YQluZL0p*T2jnFo&;Deo)Y<aJVoK|4gRr+ZelKj`X&5XwM;CRPv;UT zdr(Bp`I*-M`HjOYzW23wIKJzE|Hu2KvBb#U$@h{L5OBALXaId54YoVsWs{5s-j^o1 zzYGpLz*U-YGYu4Awl>}j0r8`r0?Sw1dieff_ncd^#TTrYDjPQ`2i5oj1BXx3{TKgH z4VOwgdRKaAmO#h*RcnzC9)C;d)hu33vg+44xHUlgj<y~3h6?7ePA{Wjd?Wc7=reY8 zV}6@DT4_7Zxle-9y-q5oB8?FpPW9hnP-Iqc35|b;YJ!YXm%|yp-C4e0V=GbB0GOD0 zFsZs{XixA1(!#L642dJbT-2(aHV_NKnb3#Mv?60V($WA%gqnc!jkD@iDTjDZQu8T< z?D5^zqnkSL>Y;v*IY6twakwysi%R=76FjJ_)!YviyW?VI!}sE%gTlw->$hQ{0os8E zuOZuDGc-Pu-Z!^ngj~1JZs<b^xXzKkDcC^TZ9zD^!ZG|>m{G=Pr_k%K=`KUr+Qy$6 zDb|Lq{uScX9g6hk`at}!cw=*A(u>L9(rzHCvK(;{*eC}9M|52IUxrVkuDET#N%TqF zze>KAKEVHz^arN*|D2`2L<u8%#u4{`B^-pO$7VNo#ggbZp(Ajw?-{8x(b6T4zYKR? zeu3#IdI6_BL0*{8tE4=j-L^ZM6J_=izYemOJwdyE+Gq`KX&MDpMb@iOpBa-23t0ow z!rlzYyN_O#1SS0___uSrDXPnWx$`1?q+MNsoDd#R(;)w*UE<RKChG+wj~xP#>U&W{ zA5zj|oonicVe)o7liwYahxb+W7GH3l+LRmAu<l-OyfOBYGTZDQISNyVO4Lz%Q2YZ_ zQV5?(L>)h)N)fv+)s{HyAKdqTt=bPl8}<S!Oc24JK6&zmes$GsslR^2<Yu`S;DJu+ zVFslJYK^0ueag+<s;?^5-tN0B!=aVp0U)1=vWvF&$SL$E97Oc-IFMp9;-D3_-;&Z} zq`JZEoxKD(u{XCn?^Et(7&FI(0fRX7%WZ@W*Qe+cm(?HYZbumAEJLJL5!|1tUq(of z7*&g)TwzJQ(VF>k7Mo5v`DM}8Hqgtj$SQ3g4yHBrD@`z^=c9WTmc(ac(I${l{5Kht zEA*>dL)nemZTh({AFJEXg#qfVUjv9J@=|wt0CQ^`kTPxaNLpyMKq1I<;<Y;=#luwe zWG81Q<M>Q_+L2RXg#FpjcZKi2p(oNn^@~YKD7PW>nd-szxk*##n@2A6Tj4*#zBMrK zE<p~)eCem3p{WO*>fn@2c+N4Gp=6EGr~dYd0^lp52`A}J%4M@Ec=WBwgg@UXKbDG3 z_|NRg4+>Te0hCZAleIZfaqOn;>@s^I^T)8gl|z%9sJ{%`-bhZ|S}$N{q}8rR1Rbhu zu>v6=|Jqc!J2gpAtH8O*?$&R%8kfmgoTd}k&hmp?_Ry{)yK!uatNX;R@#_-JKFNf4 zj)77Uj3*4-t+YULVmWc}oJCO-qIT4Kii$b+`Q6*<5AAG4J7tFKi09Q~P5SvRz(jLk zDT?+$oYNwxz)w@G=*EXBis(p2A9*UlYrlpfXGh;T=GE6-fB%=EPc^zq=Y)m?JcW#h z*0=W5z(#c_CCgW6>Bg`F{jMSGpE77?lY%qU|JZ^$Z8N0_NiVp+^5=?skyG84MNSP< znWbHPi;&Bt>4)UsGppNnhK_>K<9}dx)NvnaYjz~<R1!*r>f1H=gbe*XH({sa&(yc- zyYa2qW8#22ivq;C86hW~+jxGt7Ck>^|8Q`7;%3jqJKr*8SUkI!7cFP+4K+Ct2Zi7u z3oQ9lhQ$!NBV|w`mofZ%e`e$u?7nL$@HPX)@O@c;9Bvp>DF&&@X}|a7zIX;W+;{W7 zY4?u8W-5UbvX9&FerGE@<Z^U7dBRZ3mn8+LG;D^)RviF8g}uxt4$)n_((s;h>Ip7D zaj6J+ejJIjrbVQju(PXt3$aT^61tyWT<n@{Zoq4el<g^vO5dE1+|)IlSV-{wqagNm z-m}%wmj75`R<8(gh0?hIS(C;<S5j8LJ=EF$3TVq;mY{(xhmF%lu1#+B%jT+UL6a3# zR8HOV#~Y4UCUa-0X13(?He9UY(PHSze!8)pjfGX&ifmc}%K{=t<Iv3J_?}g#Ct0%n zwY7GYrkET!k2UhFD>(fmnT%srP*~4M0Fa9xo?}}REOgxk(B3g*hZ`_tC-xp&;ZwfT z`9^&r^~)O~b`4o?tFC_iz$O~nAr&%Q51RP!t%@2eB6n7yWH9MdG*uOu^JwVg9d03E z3OES?uUkKWBm(7Y4qi&{1lqP=<s~^R!Wh`3AW`dN2Ub^kX~JrWdaVaY<<nByk43KM z2+{70uSfRnjRp62_#{iXY!~5iOHZk#^e0QLIs0cafhP1uj)?t3Dux_NxOhJ2Ieelq zb&i>uabOAV#koNauc}M@Wx(2<NX0h5!f@MqG+|(`&a^wZj9JR5I-re$j`^I?Z_wvX z^4!J9<JAPa=mvyS!LUpk%XbdhGe~t3rJ~w88^n*$A-7~guMOs}yym!QedkkYBce8M zXBH@E6^5OgK9I@k)+48JgVeN4@de}kJ49IKE+`dBA4^NpCkNB_TCB3viRb6v`RLsF zN}(#e$>EhP922GT7hCTr%oaGS=4>e?cke0uqT_Mf+MAHIeU3lSiJLgmPmZHMxZc8l zqelGuk4<L#AISYj&FK+)Y$Bxf2AV*=Y1*45p}y`N27Eac`Kb0+jS8Dor|;y%_jlTm z3F8o2X&(YaKyo2&kNRZFvaeiRYY}LvhxWOoZCuG1`oLhcMTk06U`y5s#blzQkD^ej z4r$|);c3L5y=}9G@>ZRzgF_#V12Q^L?do>{VYDF^w1t28CZ-&0dqXTvdLHXy?Tkl1 zGp#|gz`N#1f$(mV5$~m%hLN;ht?H&hAkd9uB0Zb|j94rYJ}F(E%bx0)Cpr74KvPD# z{y@+N9TTYV##RYv9SVVatkps;2eLN5Z%c2)W7Ty&#ecqGdL_PODTA~JVWpzFK^JK^ z%GLtp1=zC)E4Bnp8}W_<_Nmu-&KEuxue!-zf{S+0g{kR2Bs+#~r=XL9i*d#yG6ma+ zexv}z5eV*C!#feO9J`bwe$%JP1=$HMm(w7VU;b#Ty=CD8m3wA0kmq8(?P6QN6rS9? zhiL+9TJg4`@~3n>XEEw`;2b6t;mt6>^2QLx5hH)Esn63hN5)BvGvP3}ux6LduN#jw z(kg|^v>U{|=CT%caykr5)r!yQA7}2!IYSMHA3vtxLk#jWnwuoXS9@1_#rv%(*)zyg zA9aE8Cg);1?S`fBvR&w{^GSahFlmc}g=4zitI&7kxk!YuGiAz_;xmrobPXsd^L6Bn z9^^CTo7F+?1zpF}<cNVdlz>v)Mh!euf23@-W3%c0_L)D3d7uNd7;cViLU+uvkJsR0 zFHx7;Zd=XvdAaYa={(7>6YCA*^A3I+&)$-%-w}M7BHMwy?D7<zX@CU+5%LZ9aaEbA zb=jN7Bku`jlzeI!0d?7Jj;HAcQCdzf)&`=<353i=?|AGA;{<jG+(<?OTxy9K9xx{q zY@%ro<tm!<iPGthZiO(esf$p({O12M@VHjS1%}*BcJVN2&(CA>#OEsLe77|0fJJ6_ zQ3FOEe50txv6j86Ff+E&yLA4i(4Fjs-3oN~zWQ~FWZTR$ePylp0WG;K_w8ek5wF9h z8>N;2%MBF+3OkCNjMuCmzPMVO_Mpens%A>EFX6b+)U0)mX)OTMmWe(`jU5MDWT-@U zP@aghiq8zz%9*sVEN9;)qa!z(M2Tz{2E6N3_uQXIYv?)ozC3g|pItsZj%>?fCMvaW zNEu#e&2?28zwvroqg1ch-!lSc9-6M;H^1~2nEbL)B|Bz$@$;ebqt5kdDnFdq&!s6m zd4_#Fn!~t@6NJmQj|cOOtE#;mSJZaEQdX~gRFb=UTCIN7bNu5xnjK!PM{OpexaM5m zl}FZ8YUjd?voC&TO`0om!*YbvfMl5HjIC(Z8}{s#1<(b3e+T@v^A4YQR7SDA8aI*3 zH)$X=;KJmQNgU*z(kQfW8A=_gSuWzLf47&cBNQys22{H?IbsBLpMG0FRq~M{=%4P% z5v282_ih2uumP*96k!FZ{%SU^-H<=w7+^IZiar){%w4hJO@I&}z`HruuG5ACj%?wu z*Yr`YS2GFIdxtGs2F+_YwB*TWAUe!Y5Do+>e|CM>o2)O?wQ7Zlzwzvo`<jhH^- zmDinVJhHUJ!m86Fjkw2WfVnS?;}cfFbCJ)qt6wK8MtOc&Yj}9=-j-9tv9*#*tEN;u z_rJ_ZD$N8bQ4gvqyzPb;&D}V~j80Pja6xoGo?V1}kNt6yqYCl*f>0PK8lBZsFwo=K zBrF{NzFsOozx4G&RJSe5*a(p)m4rU01640_KVJiklMJuhJO~0Yf>{rQBb?xKZFDJW zu223-!+r{T2%%Iz$<MbOj^&!+{&6n%u5r(rS+F8i#daKnJWq{kGoCX1y38wm3saZk z&|mgU6ha1#e*-{yU`X^YLf7lTT$iI)X#wxeaLxirAAd{L-GkkfrI^*4_o<E>>-oX< zp^?^2D(&m)nNeq(aQl(uqG(kBdWYzeH{Rd*0CQ;eFQ~hOdVd$FpeVD?n8r1_a6=XT zCfk?U2m3oyhozD~R-e=Qx*tG$RhjZ>+EmvfNL0Bzn1gHiTW?qIq7QdX(#21N_8Xgq zk5&Kx#Lk8qLe4W9+A3eK*?38Mk<`iEnsMs~A+-9vo#CTJg&9GjSzHU>EZoWn2r(&q z<SzPlTJf{kPA|8p!!?5XmY12T0eQ-tV%R3jw!$hp+@wd?4O_2p;uLK%W<2iur3hht zo<XIi5(gRGT0o;sH-J=&8B2MN03V|t3kT+7=Rq+Qg9M3>CClmzL%Ts9L(&!NSFF6M z?60JNI?k1XE+bSRaq6J84B^Z#*0WaYG5N=hA*^!L*d=xT9+Eq#%~V+%Lx8&cOm|2d zQVmGHUH9UY+1p!TE}KxuK9Y=!rm+yfC!*FP4xEA?Vb|cmev)?XbfEW|37wk??NsNZ zL?vQu^tGbf0pIqDOTxt4kLAO!9vx=62J^t3J4FP6;CeMHlOdv&>?NCS<r=@}E`~zQ zA6xWl4Aj*U)d7HwDTX*Qrls1C-#c;7M|VuzI;)_aVXi=j{FmYT(LqSdrJ3a;lYu;H znuc_T$K2{uzh!0bd6TUWby2*k;k;N2MZ0S>`47}LiTk<krOHq2YB~g)t`fB|OiG{q zOPB}qOw_=o&A$vGB24};pl2cgZg7&1Mr+Cg4I<?mM<rS;2n}Wz_%AYvqRC?%;VlA` zqV^3<vmrChs+J*HADt!x-PO}~qNg<a1NFHgL{c|WzZ(RS5<r~-b1Atx6)srL{MyIq zly))EKCKs0C)l%Ufn%}}wrpeGC{Dn>gnlJ)7H@<v(%~`P_K!JzUCrvuO|KN&kGA0B z$MBaywta0!ktol7n_#x5VEubuiB6=$x6pAKq`=C>QaCczq0#--ysju{z4$xbWU+;V zjEiaETU8!NkMfT8nPaoF#w^z8`@S=9>1Vj^M{W-p26B{IEeE<gf;79cZ|g(dALx5J zJK4h|Go*=o&ddEl%?2;r=)9Do$d+5Hv(n_Wbf>c4tNWBrPng1QtjolM_=UaWmJ?TT zGA?0>I`jpOHyW-P$6`ke-q-H?)!#_D`qReDQ^e`ff7@z!+VM7VfI2vsrd|HPs;8qY zHVWwralcOPUHgWHwMf`d?RP^6<?6zg=E40(xufaptB>Y;F9NM>B)EWTG5=eYdA?El z0zcv)&O5~*-aq+vk3#1Pl2x*rx>rp7EadX+p{!`UUTgD}E<HOZ=T}D=3UiUXyhvf7 z2j;%-yFAEg7!dMy&Wq!ckRKh?+sF}@VOvr`J!3XhqyMnJ5f@V4br|mUk$%m<>Axvz z&p`~T3guLl@9&mHu2jdKFV9aJH!tG6nK_-)*33z_n6FCH*LU<%u6Qa;P|A6n&EyZ5 z5wKCwtp_bv3>>w>tyYgRXAdiF^ZYfMb)K1&A?}e-ObA_yZ4qIEXV7|B;V^AstHsJW z<nYIW(4N}Yt+%R@fE0r`7}KOtHt}1}wY>Y{ok?rZ^n2@|@ju1ggd8EjNVF&hGsn8Z zV>zCRzMQO;Mz*Svkz2!;lqy3anjB%2<|fClD-B+gHm-e6*CuA2dln4=ll>Kg%=TGn zSmH(MFPBT1j3Wc6l>Oy{JxS!+a5=)5TofZt%_Kks;Feu;&w`|GNdKuyUbz3L&i-9@ zVj@y%h_cw-F_myeE4@uoIViDgCkH!Kv!W~pC$X>A)0hIxf8ImOQvPHS%bmMyh12HR z$<r>DY9!lKrR4<ATMsJL&&}TeJoZO4d-j9qc3ZwneS-+^0k}jGfkVgzC!he~TWMfw zSjk9sudh;$^>}&3sXE?=zZ@MqD@?JAZ8Dy3)-?D<xVS73YWGO2S?i9M;APN3&!2{J zkF~Da*()P^!eH&#<HyPUoqk0M+u9TZ+|{w@$!SmX0NDu443xMla+kuMbvBMWA*2dZ zZ55(gl_s6;3&bD@QH)$#xPf%~LEg0kTfPzLJv7JKv!L>F(?$0`n9LRyM8UnIF%$=& zt{V@&j!vN2vo*(5)hcHAX0pzD#tSXZP(uCH)SzRf-3YCD6c^QxXoF8coDohv*nj^( zTIX>?de6>nn#&353;-|Mq(}Oo_*QuxkG<N`0u(+!H3z_nxQ~4M3^)G?#&jc8$UvF^ zGM0Xm!d{fG#gkJ}6X-iDT60xR2icZFzl6FBLWOln>cky`*Z-rlu-p4UPi5;4SGAkZ ziJrtq(=ItXm%9d#{ILz*_|ubG>0*mQ@qUo30Hp{84$jrHW)zVy=R9qOZBm@k@w1ez za3f}ttvzAxJbZ)@Twf{~Cf^6R+&db5nl5;s9y$p%Rm0wD<z5Ef9pY4$%u$e8yP~gG z#Oc{#HQmR<BFC8yUr|5nP+`FgWAb(p8R_Awj)e~>kGE46t-&z>EGgP)L*>qc_qAE7 zz>%FiN&1D~*I!knE!rfj|7fRy$JPKe(6#*h9)!u<&UKg%)2w2Ib-#;dDoED4pSSi7 zd0`iJcG(#2*w$bh=P?B&2qol0wug=yPb}g<T}@kBKr2NTf#d8N$Xy>{<#42B=7zf) z77SA;n;}~*-WVJ&g9o-YY*tgW5HQj?_jQBR%9@dy-!FIK|5=jRis$NCS+fYhMbKOc z=y+vp974Qc0;;Io+~jF(HQ*~fsc4jUPc3*0XQ_vfCHd3kU9uHM<;xYyH+Dyyq?@xg zAHDeDm2NVv^U+jQkAS{BP4gL6wRg(XlF2NbP)i#Jg897u_tD@N{#&m2<tjonzes8y zbq`@6q^va;el_w>pw;&S(-gyn@{Y4gPaD5!`&|}YvDS%2s1X4vrWm<;_2{xPPkNr6 zOzuq}F{tmhZFH`3u!3X)jg6=RivC62`tI(m{+Y~TwV}My@A^7B_gI8^0bD}<gC)5? zpo@(ot~%vSkPfPVd<MV_;nZ`~VFsxQLKx)!jqt=b*{erg9KopQZk(20<u&+ny9ssd zJd6#Nr?MY+DJmOmMQ!HQP|n7A%dF?8tDOHKZg{c{k;>G>w}@Knv9%P<XWbbMWyCsL zJmcS!iW5|thbj?qA(&>(jw9Z91g~@zHB9fUDANdcB9ZG;t|&0)n<dX;NpZ)^j^nDr zj`^0SjwceoRp(GIh#~v&z!>P<U@R|birV2q&bt0PC=3KOIPt=PhSR(0{1okS3aqW= z+DJ`w{>Uyw{<czd!Y$9lsDi+AE4KC|G}Gz|h2;?iA1;c?c~%=fX=^?x`CcYh9TmzQ z8JO5s)dV9Txe-PU!`?H2dQtbuV+B7N8%>+6Vm4zJ7>zz%U)U=NmVujfWM8EWhWbeJ zK8l3Oa@Y!{%lcM+)VTfW`bI+5+DL`W)`%|e#gznUijhH4_E(KfrCq=SkBtDj2-nmc z+co4|F=7ckUfEJzt}xY_T#oyOwj(HfoJX-!j|t9G-ZmWC)f7nNLRMjo#EHA}TP1QW zS)*dD156Bp5ytBseZE+<m)cDYx(b)^(jC4uy~@paP`dWpgd^P2EL!y{xouEuv?knL z^NF_kFgPEqzQPZT0yu2<GLIo}O<OW79JVXVX`#uR=_B1X!1n#!t=D-X-LZLOmG)T$ zGFuew+EHYbvuA<yXmWyy0)x8tZk(%H^VghqBs=0h)l;G}*ENGZtJGD=Y}jUMmCNn) zDUtcJ!iv?|p|$F4RFw{OP8`J@z%*WsPuAv26K$q`-i`#YpWUx^j0iOnEb7Rg+_@j& z<W*2Gnp{zw@z%N&IU=3Ezh5v!yGNWdOteHNNc?i(;hlW*`&`5}?_<7165txKrejPF zZY1Qy;AdsY5oH3YwdivInvnnL!7)BRdMR;6Z9vnHAPbzRiR@wJ)URD^f?B_<2cZtw z)BesmSEAnFuAe!Bazl04@>A6C-3fx7`x&ZFR|0%eCjObd*7R{l{k00RY}s{=2OxOa zU8HWc2BakvXi4WpZLy6e>v<=Ata7}2hJG3vNEAhAxa+qY%zM}9%PIOith=4ewK$*h z^L9@CPv|e`K(O+1z+Z;grc1?eulA!?&oJ8^2L0G;SNZi!j(i}#HNisd=;iEF--h?3 zxj7H?tAMPOL<*nv`}@tvsG@*H^$T!VXD~-I<up{_=CwJq(b<E6*ge5swpHbf{YPz- z@hDfKAv07!{qveIW~RDpSV{Ni9T5HWeMp4=(t6Kl>tz56mBvUv(v;pWuI#Bt>0a`E zkn@)AQ$$f}RR$(0aZL~s<bpyyzUH+96dH9s-AM6GW|ZcR(vk(}qC5v5?MZd@FCSqM z5W9=EPsWjRlYUG-%MabQ*Xo661e7dOTCqGUnBKbf3K-1IcKf))<lMDc5+NGqz!^e~ z!b^m_6(9DH7Y6CQ9}xN?SHhoFdmIipbL<Ck>X&#o`i@Gg_q@3bZWH5V5=AvBkFEX} z@zK8{Y_Yu*g9LgWVL*Ejh|D~jE6<vCAPQ-CbJs%+oKD^X@(jI*g6@9ZmT6gjJ`NSN zrWxKGLKmx9<)i#>{?ri}n;rV^Xe9vY#Q(+Yd5Ukv%VC58+Vwz$N6An{i&1vJ^g~k{ z@w`puse9d^M|<L@?lXA)he+-}X)4?~XjjFf*^lB8r0IgDaM-cx7RyBrgI<l+tpW3q zGI#GjzMD12@bdC28bU@Lxh9vr87@@*>wj^A7k2$+Fed-WbIzMR0VZN+^#hY~X6^|o z{cF?rYiqeuPhqQVB$ewwX>6!8vjWoUm=n)gL<(p&r8$eD+_qf)U-#(W?qFVp<+SZ` zLqvH(E2c4fRyQ|G@2sTLRXfxJjS5i>GAah90C3tUf69yOWYYX5Emz3OqWTG6Tv?L! zLq@O)%m0%Q%hvuYT&2shdA6v~&Gu@Q$mQmSWNmZ%ce8v#3sYN?ZWVWb@S`8qhJvB+ zd8}3<-{`e#@k~ay7)t)f|NK8L<W;;0e`wm3*USOLCM60x-jXt#N4VjgrT=8C%w21` z^o_mKZ(ql=O0RN0nZdMPlZe7Kc9+&^{DJvyiVdmjvYw0;4nPs+*m1H>%8H6N^E3w- z_%#rY)g#-FrE>+C%@WB}S1vF}q3Z0Nv&>>X-IjA-V!_NN07JY0j(YM7w#OJ{I{L=l zy|?mC@RfgpC9tJ(9m?Z5gmRuO({T@`+8npW#rGvD+V_Q6ll4S*^2tAOh48$G083b< z08mVwy8YvG{5+8EcqJ74^uK89z*!V*?7HgJLQTKmY6J0(6)4pGbYvRQ`L6jdKLy?} znz4GL-`5E@0fq6TpdwZ1O}QSS%&>|@sUNxuBSTtmW+9XSxa7l3v&LcAmi(Fzn`&)2 zk0T%rVP7@09jheFSPJ_AYQpkY74PgOJN*P8vnEMr7?5Wy<&7->$rDd1L5;`V&aROs z!&}@`?~&YmCBy5_DT5dT!UpUKg(t!N>oWe@nqmFZp~u|muNf2LPpzt5$1AWT$URA3 zoieB&wK@A(aZ5mvq32%G`(O-;Jk?dJ4k330{7Hp*!Cq~vYRH_9?9C3~1eg44k=7xF z5D#j}FG~t6-2$}p!~{}%Ej4`3N9QIroMwqU0oMV4R3WlO6mCX!7$~*zPHN{dZGNfP z$1-*dDSu5iWY;||!ub7Pm|>=DgK@iH7>^azEl7jQsxEqfyVA5zw!$;98|OCrzupfp zb0=Nq7Y*dZG#8`5Sc%OrX7%_nP>*_bT>|?bK{UYUnzhs?cKw8Y49|Z4$fBukQv3U^ z31iM@?(P*FHv&|$I#{rBl-k+#C5po%BdEvc2qhak{{QI-{^zw=E2dI-CU=PE$v(3Q zB`Zhh34`BqA1qjr&yz~)ztjck6NOt+NCSY2Sz1bQyU$l19_+p7PKlu&LLWy5u%Ojt zDZWwj$Jb?Odd1=iO~cWSzS{2nf%X~-4f(eiMQ*r!`KGYN>k<qa+ijLJ!|6k3o*GIG zOPH!dU$DMlW!GIx#NeLqWjz_u8m`!req_&-TIMc4d{Nirj2PuP;wmu#)FmM0)*{km z)yV4*dcQ3H*6O)`&M9F2%Vr7~`x{<%o#i0YCTq)v{m=CY=x}Z(TksK#nSB*>+H7yu zk7E+_^+$IF2L$$euRGuHy!pmI=IZNwzTb(J7$0wA>w^S@E<*B);n%)`Svw0W?cr&K z(ub_Nd18bKFRDq-Ie6$)r@Fuhrjc(kcJk<wyz8w~-_`3RYX5D+`@j5HEGw2KXz>CY zQXy_4?!bDvewUF9?k!VSvanlG&gw)(A~gMiiU6B%g#rvVv*z<cP2789>iBpmMg8Y6 zzTIfT6>phXPh@$~P%|Pup~?7S)?(({*F5}W!7uu?L;7t)7I>U?{ja@`xk@~JVm<O^ z=ae^+;Df@qCyT~Zol10wfhSxK$j!6m3h|z5o!yfTq2fDdO*FicJvW{q?onon5<ZWn zserQ}Mk6w8<%?NAl{!e%uLA^nVKJ~0IO^#TP586T+V)EM;;ePq3R9Ee$@h%|lyGST z)yK!r|M)4jAxPg)*=Ncn305nY--sm5QPY~KWDagZ1_0i3&eH5DY!SG~J!q*F%iS*m zF7;TQh!|F<H%=4D9DHh0MIGQBAP$Aj*<ht#+GW6Q^UbomMF+AXTv|RtmsY0Y4ajpb zs?uLwo~=GC|AglhivzRI$v#RaDn;)afV=3NH55?9!1_UYk9(mTqc)M>;+-?&rZuOE zZ$((Qts;gT=jt0dyktCv(QAqWgWu#9*pDW6Fd4792{U&dW#MD5{@NR4onGNGbQd3$ z3;KGG^g7}UD_Zlo)h3Jkk1d!Y5@Sz!)-DiSPw<i{@g3yJ{CY|7Fu3^u7!cc5s>{H) ztcO$s=V!R|hJDUjWe(o%_j;J)VZyhaawl*HCtTVvUV&DCG4}1_&KdZ5`LY`3&FFKe z=ClxEH%Mv*UXzRgeyyPJTN0St$ttQfg_lxp4y*fqR{w+UB$dCJJ=Q~6kxe#pTuZEV zUZsOx#oFDNEBa8{i~nr)37$iI3jmG@yIZV)!sCHevo5jMB!fE<)`0~jxKnpJx8a&P zVaAy{4J|PXi4yw$j_g$`QePQ5JjAeWs4fxJDsmc-yjErbFt%Onbg$HoNVoN=4rfQ# z-Gx{ml&M(}eYPS^$Je@AxLSs4N)|2&F4V`aTy-4jKi`WAhH4T)9ahLQ6(2qQ3ub1` z-M9*B{1k_^@B8(fVMIM@rhvP`zGtvDjLoL|1Quyxf5L@N8T4O%-Qk>KF?)}i!W`Zt zY)=eKkl0?+uTQ+e*S0Jmd+YS)NKv)Gr>;0o!f2CS{&MXkJ4U$Tv)JubGvBUr=J`(K zkos34wjs6v4UvU^Pxhi)fMJ+7OS%8<`1Y2JR);THNAlndb{6)z)b=7Z#+?Y>Fw=8a z+%lwyWHc5HZ+<+3&DCLs-XP@!01=@vIpkDo-t%Ac<deOEpXrk60eCL0Xw(x12P<+# zmzv*W<R$%F@o62?#AzF~+F*Nr70qCuP=wR#7F9bI;2bf-p8>)MCdped3hu*1eK(sc z&GU#=IlQZMei7dB!g23qQ{T|J-jslEPtU1*2f=-c;7Y{gwP5+owubQ#<Y%Zp$E0ZN z%2-Fq>IHm0e$Wnti6c>X2_1TQwuinMb!pPW51B}jaV((0tvO-n*e1fp6Bubd#qXin zR~0#&|1!up5z}0??=wBRZL7CefwZ9J`V-Pd#3@nXTQv#lM?ST@4y!lDB|Spggkr}i z*p73+G)tJ-05|Nhh%#@~zbixX{w*9W6zVmbMbRNLB00QM$7FZo`UX@2x^}F3_$CK_ z*?$n|J;@V-eBa`Nyu?P+-xN66QVW5x5vaN_ti&~qYkFED%#G){6wmaBi_D1Zw@GU@ zysbboh1(H6+#9(OBtaK)9p5_1Q>Ez2@^#&r2lFhUMVtM0%|0MBs=~UE7k5GDX1XMX z%cU2`75I9Nr}=X2j#oYb)Ovc~!H7$G_6;hsxTj%FtI7ZBLG&k);5tY`U}4E$hAVxz zBO*Y3IgjQ&NrSoX;zF*`kBo)OYYyZdEm4i1=+PoPbSQ?;bJ{uKY2B@s@9Dz2lb&zz zuk!~l?7h?cbVSKmYw{%7fLpUcD3h`Hvg$jXFxY8Wn!n(eYX=GgP$cIbgv~;$1deWP zh|J7OGfCT2DXw4@Og!bS`R<+wX1P|$$j+kG$63n2{myyOBzDabenx>jVo=}{a!Z6y z>6+5%*{%scm2AV$41N-I(e!K7NYVrPR5h8s@JKIi&@646Z^?y{HEX<7^a_9JSi|kt z>Lf?ojNA1EbB{f!Rn23kwkqZ`YhgBqF)g?I2!YWO6y`968Hi?@F~@%R0I1jSE12sD z??tlXbya64PdCg~f?2dCi$w*qO<@gRRZ^@Ib16^O+E<EZsO@c*kuiC*z2C}#sH0mE znME0Ky}_7Y)PrtIzc7bN{SOtgKGF{iC3@S&{PbVX&d%<oc#>xP9^-}`@HB2eduZ{j z)(h+nBrEZT*gvIpvUhtbbcoEfEXj7*(Kc|ZAM!H$45cfkKcNI+qr5jbw@jNerl%`w zGsMk}gkBo-E8<@$U)aeJMm#ZOhUYyRg2}TSPMN&dZ~`RPH{aAgzo>s}DwI_2L7nSF z5kMDe>;3Yltu-!yr#o3Ix1#RyExhga?B-^ULHIin>@H}OQ4@z(f4ctG;>pf*%GNW~ z{dJ?&aj#4bMg*|x((4#mZYq%U<o%|%YNp$VyEV-7yG-;OX3=ppLYtcIJdb9Zgl-j0 zy9KDV-j{I~d(1|Xdae5tYS-NYhMj}^y1N<3{5kqLquPhM_RusT=yk`-%Duk~F-EQs z_E$|V4O$yN)76^H?p#v_^vP4$E7`#ZZYA~<(>ddDgqo`>VZ&?Pvfc#nSM*|QsMfY- zu-YQ4m=&0PvZU!YkE0bHl93S=dyQ&}ewd7%4P&dkew@D}>zg^tWqCB;Z)+;I>a*hf z2Aj7r`5$F;2F{sEX*#xOc?H;Ys0CUM^O^#ieu$6YfRskd`IpU+=U*Cb-2^7Ema3YR zmv}8|U?IHAfRpYnwJq;^juI8;|DBO*zzR@Jw3onfdPD9t!fq-y_jMgcD>mXUR_gW< z&b*nvQ0huiCfPKM0<)$I<j&1z$D$v<`rtB-*n|aPQ|W2kik0nUYSd>csx@6iJk$^K zt%hSCQ*VRv_;II~G+CcRwK9VduoP7h*0FqYRhZ;d6ZK)?rE%l)_ok@hTd~2{%w2*R zqdND~%mfN!Dfxx^zFODg?=!RNc$r&nb@r93JczQ!ke@XBe5pC_B|YWu$*9f$!#Y_9 zFvDe8OA8h!??qM@Rtu{94zJwgyQ>ymYFU^IEpWvv9fkKWW!1Rf9IpTV@QfHfYbA%% zC&*Dtc|2r3;pwr~l@CSG4-RSGppGQ26st*D)GJl3d4E-XLZ3h8Tpn8s{!ORUo$cPK z#8V(k5*G;*fe&}Ud*j&Pq1#+Zihal#tGB<!7ni}$j45Y<PPAE2ceLqNA5pMa{Fvt} zqPF9DMK|+3VGfZ!9BEM4oT_f4_+xT<Rk@`|Hr26ca$`qaw50DMw@$gUIYJwbu(2oL zxLuSid2)-dLM2^?;m)F8nQap`Vk38mpG<?58_4;y!sB9N*J_nK%j**Dl+`=z>x!H1 zQLHvv?#8vXTm_Emgp((KM5WP_HewcUcfq>~VE`m0LJjRB@kV$HD`}4k{64<~_0G8L zu6gj}?0E#!)ALKh;08R+-VX@&mER&v9b(j;&Rez@=2yb>E~wB38~@?c{0UVuq`sq2 z$Gh9;lD|B>4RnkW@~eHbBxBv1wHKG6X#g1jh0t)K#I-fBXXd%Fy<*(KG#Fe^%snnT z!`O1VgmEV^wSWTaY_LTU*dWg+xX_}Ok^bVY^N%@CvK`n@3D*B>n}Tt#*j^y-9{p^* zoj82$GLzuP-@7Kl18*#II?C;|hj6ufxHGG@0a9;=`>{qn^4A089<n1Xml66TsEuSR zh@5I}*;ncstXnVrY8lrcszP^wNG;0JWoA&UQ_v%wP=%=z8GU=7n+x513Aa-c^<D*D z*lgk;#&Ph&9r|pB{Z5is^i1B_zYo=5rf@fEAr8n<^e2u)zheOU*L-A%I_jiQ<H$s@ zAsC|3z*?VY<=SaVyH*5h>0m1nvq2Xeh54x5lN_zFDi?XZs2cb2TG9tr`)a{k-6RX3 z;2}%^Ko}O~Jf1(ixyPb!-!gA?=WK#XEnhtS^4wW?g&{ZmiJEWUqwMQNsQ%hmi#+M; zM<rL00!0Knkky*ylgh8ND?6^1w&^#A41B!gUxjzP1`IGl!Ui!8|J|y#;RW(_oQP=V zEM)sdgW^-EikWFQOuC=DcQc^MHOU7+uH07ZAbR;IsP{?|(aPUKvs$+0^>wO0sSl9X zK*xt%@xHvu3KP}!iN4y0U0$L2M*?de{G^cC>-~WGu=t!H%09)`#)*<PyY2qwCqRw3 zS~s?v8Ro8#T2S{XjWK@f!E;uWWwSrU(Xf`h6bVZ=XsR1ieGpRSUHs^ymD-yp3}?oR zzER`J)Q0x<V5wgoHPV_!55}L20BD8IbM|JzDQ=`4CE_F}HdA9rRmrc+rrRYwMK}GD zrjX0}>gRMdy?9D2tR2u7Pf{C>%|^t()erBLOK1qsyk9i02;g=iL>S?y$>J2Jxk#Gi z7n`-CtZ0z??f!Qfu=N+g<r}d(Cl@y9$NOc8?pFHlGHb_-VIKJNO8l$*$U*L1VK|ib zfFhJ5gq9C9WM4Jo8CTYTOtcXhlYpR$!-bEE-gnn#OK8@(Kx874WlLmuG5_N9J#2(# zuby3F?5Z7cJ;N_nz8s*JagEjJ`rHfW!TND(FaLbPaMe&)C!mrt*pVR{Spx>tY;g0n z4CSA74x*kyO{7JyBfLIoi{An+XIP!~XO_6Vd9-+Qy=>#{j$~@X^`8t!8My`UK650O z>!f-!K|f0zJ+2)|+DI}KG4|tD@n`0q8nShw2zCTWq>_;5E#auPKl_1w3$-H(r$s$k z%YMj(`pKLZZZtLQ1_=Trt8rDy0#{3)&8ZE`DFmg-O~&Z%%xR}87Ee6)^z_`En+Qi^ z;MTe6KGph&n!uRPj#8i4&2Qhwp$OJ<VKr-@FyPu{e0n&qJErNcy~p;6c`Td~`e#pw zLFyqjs$2(JIJYWt9)}r57lv}zDSd0~5`PU4(e9l|vQ4%1BB5h?=C>}pT1x*3L8`b_ zMc=G&OcPHu?F~KuQt-94Px+i6wUQ=EFvZL4X2wNd)e8KOo2EuyIwSOsZ}TqkGes74 zvk6SlRmizCX=5><a_-B>$gAp}8!G}#cW(w`qRMIdqcjC4KrVtiyDH$3XkltqxA~>+ zmd9PDA@=(V0b^UybDZlmZbG9$(C%@9p-$a(rh)vJkS3=m=lKVq07=`Oz`;IHu2(QU zXE9au(Q`pJb_iX;7eB6!qe!ty5(d%}cy*iWhnKLie;(@GC+BDSE^rOb0%B%$si{@v z!KiX+RkezsI5Vk|;sFnPtf@=iTb3X?v)k_1o#VOaa-~>wlN!N*ea#j(^8FZ^-@~Z5 zu=`+ZtodyT4NPHYbM8=@6#{Zhnn4|DN&a1JD@oxcC(AQ>tWr6VEfTf$q(I=jBO4{V zff0tV`8s6_SLSx{*;lnEjf^)+;^ludY4U_0cqUl7unk*z)#ow0!hU}9f$&@ZhL88P z$9$f#1`MK8y5+q(E<cRWR5|_TthuSdQs><=nvV}buSum$@2l1;50aIqP>Xj^bi1c9 z+>3~vLU{5<AT$XBI_*bU{n}P`H4VDer<To@p(EfW++?6hvy#ZADuZh~>lCQbV~LmX z;_Yue1rUdWc<wa_In~Az?recqm}8$?0j8)sHFx@0(NfpaR33Y@W4)|f>M2kDGPDc0 z7nTxH%x=ma394~|GeKYZZG~r8x{9vVs$ZpPhqba44Ehz!*#7Us<+cQ4Lh>obW1mtS zXOoNS`OkgjHY<K+4c;n<rI25jr(1Pcwfz;cDB33qkdWD{qt}=m8-`wFX{?^nszWOO zpgIHQynh)cj@ysk3;1+>cCVSc)qdv6U4F5}=wgWT9Pb)klpLHcfiAFpoO1HTY%G3= z@5A9>I7=N)SlJhC^FM*z*S|C=?OXkk1tEX8t2w$=t}gADWeZ<$S07(h<7UE6efGa* z{#`KitMc(d#o$wFATh|VyM>n`fh%`uthr~ArozJSa3{})v8mkfmnw`X%MVZKP|UuF z8J6~L7FnL?3k<G$G}7B7TpaQG?j{hf!?gdK7DS1DLhdV;-VMySER`VPp?um9V{ww` z3yQ#2o%xtQ_R`fbXiBsQi0FAj>cZ_aMjcw=>&+r*cL5pSC+bH4!Wf?e1X*(csjg>+ zDog*K{Feco;kUskM*+_toJ6AN@u4aEF#xxHhrn?Xe;d#j{RWp(+vf$hczeFM1&fUF zKBln8fd^dWDi%~~H`xv^w3D4X3@`tN|LJR;<Mht73ew)=FWXwrylw5i5D(B!Rn4l5 zZ9$YMx<0xMb+iT9wp0f`w#SQV_?N+s>o0>i`gH|_hzp&k9E5qu->WdlPh7bvcPcCS z#*e$SwSE$15EU#ix8iHZx$z2PaN&;+#=zlM)^c~Q=U;|#VelNd8|ON68aNn!Pl8U` znwgMyiAVgGw=V*MK=gg&1sgeQEH#ISWbAPbEBtN27EEE*s(;nZ>O5oq1UY}LN?nR` zt_ImIRtI!Euaj$#dm}k?jL%<&8i%eqCd9L)prO;C?g1d$ZXxHgr4IEB`D2CLpUfEu z<bbd?^1tZj*<t|Q9CmUewjP3-+kU0&cj7q$$cOOt%RkEVRyyBve$&?IHhgDNnm|0y zs(Hs<B^X1Ps~i_3_|Ost+E+(vy6fGOMik<UHbQdaV5DDD8zNZ}-Sj@4xDRlS{g@#I zT69egmsKW9EyU-g^*=c@zr6}&`u0vc9YW6O%<OTpQR?s;p8Sa#X3;s6{>yL|-%kTi zw(!gDw^S3+Jdhj3wwYkLsrB)R_)F`<{^e9WKR~}dRIw9A{ubdlIXjEG3_Oo%suKPC zo4*Vjoq?%v=M5&{!N~sSifBZ~wcN8iO${C=f<YTB$H)0qHMP<hTkVyUl}>-qhI;l* z5bK6rNA)u7)aXB_1<#3_a?~0Uo#~+shLaGwHZB6Pe+!Uz=5{~(KiTfk{ZQaOu@PmD zb^)!6wvIIbZXp+jt^htD0YLfJh-~I1$kLK=%*fvYgMS$w7WjCZMN`j0_@I-hXjMQ* zwsD$8?ag{V2v(D328FZeT<TTc`%{PJt7s(ekfI`K_C%|!JGwrO`{15eSK)aVPUqg_ z!>Wc+%|<MXXkjt{3p@^3;1W%m`z|BWn7N5fcd6Z+YFmJ!dE+mG6BY8aT7#NIex}h8 z2k7%!$JM$V>#$LfAHnhn+p&2HM`8=}s*&@t%+aoOcb(5oGB@)s+ML>7iEV@N#<Xnh z+qBXizChu*Q;${jzzA+~W!)dc>TjUU7$Mn}SQ75l({{pae1&ecyTc_<)aKzEvxYBS z_7_4BP5+!4;U*w!QfqhsPwm>8n5&_}!84)>XSpw%7Hzl!T1zWqU~y+6Px!!TCwalY zyzL@-Sia=q!qYyyyw%F(iu5pCv&rcIou*E82lM4T7*`l%({Yu{ORpV~G-G<At@NaQ zw?hAEZE_zFPso&*do{`3n@i}92<l4W>+VB5&c?FUUqF2Hc7M#ZM_*UZnQ8wkw2dLm z_B<ug=8^0q=(|C#m8MrooM6c5$GZ1*-+937$1yFZpedGXbV+hitf>MeUdg~q?Z;XW z|1v2t?o-gY1GGE(=1D%{=Bzl?*<boIWK!9f{;L*@zkcUC^1IiesYnXZhgtw5Z}#wA z_7?bAmRE^Y;Wn%`Jd!p!`K*uaM227L15Q3sCNKA8#KO3NQ8Ry<BGrIMQJSIm)j^`; zla7cj2uh<auzIi&lZZ{OE(pVR#K~>jMGBs-n-dFJ`~H{VwlzlrpgJ9J$E|Y|0nh#i z6yGAuFvp=PWqw*a-Ay|Pky?@1biN5hIYTI*mj;nHp~BAX2YwuY)$jPjSgT^qL%)sT zZ!LGIi>m&|N?Fc^*gzmxTP3iLL*h<R((W;4*D$h!g)no|(s8|QTox>>xXyP1?m@bh z>fUT&wzZmk@UB&OpzgWGTlIil_vb%w95Ujypq1Mz9^|A^NU~=v1vl}PgBQ|P%0-yb zY#-l;xa8dMca*P+n)~^vKa3VTNR5~`F#Mjw*m6zJtGLx)qB4+aD$eDx9*?ul_tS>O z6-(^_O7WPSNCDd{XbIIq-fBhw?ES20T0V~DJFj39&6#=lTkuut6BuJ~uO&LFLY9d% z@fCFUhLNT%7>H;do18}WV0!>@DNrqjm7UiC@tK%r+uUBS-HEWc$w_g14;j({0l>&Y zK)*Y)GomnokT*{!3`V3)pSn0)?&~<xYe~U{+~o!FJBC3V3?6whkI4OH*efkKN%;k7 zRa3A&`^?j``=mxe6PQMC`-0eU>w>_B`=tUbNxV2ZxBrz~6YzZ8$ToqW{sUhrpXAJ| zQfK;XWVT`OGEIfz9EZ>%*cjU2<>l$EEml7|6LaL9=r0`3yJjATR&mjv92p+-cJCA+ zo&hB<hH67!9Nf<9w%hi}VMnfm{`EaY6<8v30@{0!kBV%|79QC^D-1kVZPPEbXKQ*S zDC4`6&E~&^a>R>Lx5$ljPH@5<;<KBx7M0lKD|fe=r_@TV{_DpT(tiWjp_>PYK;J`- zSVkajLJCXmKY+C8&b=SBxsjun&5qqYEL5%z=o{vD-c#=m>09q7PQb0S%fr}pr;@{o z?=?;5>023dc!ia}46KLLGhdLuS&_?m=C~?9T9S<{y>S}3+-}?c?<d%ylh3$?0-6Z$ z%|iep_s*<-%>4<#j~uCZ1#`4;_i%7=ir;-<9|{q*Q=rLFq_^7VSm0}|a$JhoFVpXb z&4l_r_{7Wsbg2qUyU?%|f5ZiUw(rzD^y<8)D^tzWAIxI@KWuPZIX|0a312#J?1-DS z^XDQ{q17VUPw^@ApLcDL#2VkjV@~LubI7d{<k48}@fBo`a2y?1M28v&|IFD|Mpywa zWUSo@zjR;%9JYQ4)D;kk`6LRmpTCzxqV8Qfehz;se9a0Rm_L-W9=Xi}*XZnmKPcL( zz;;5|X%;|sBHZj5-e-Uf@(q@@ecQ2UfFJphFVylSeZJIpRtZnjBQ+y6$q9uYnQ9}S zvh<xiR5?t}`u*@BcsU?rv4vflh(J)^HRPua&qkNix@+U}UmTy-+uhPx|Ip<w*JZ}b zth5ci<Nuez8X2Q-4_GuUcE`McAkghVnLNjV1e9xlHNnEalxr)&Qb3{XKmaw?cj@qH z@F>#nJ81t_tIh_nr-;Qs*2OvKp?edEf5<{~#o^tN0ypFYAn*s+X&#>MsyOV1>mh82 z2b9DRl8s~=j!VAr&QT`cx{v;u<9fSai8Ia0_*!E?1NaaS;vE7=MHk;+hTT_}aW!VN z#JO|8t7#8ZD{W2NMeD&1)CDW*6u=V-@w*WsGxnhWtnZy~PIr$&Y&9ff=~rl1YbsIQ zfJfg}MAGnYH`B)OA@)uHqi3IiE?-};5Vg3t$ak8f5-t1xmkn8T-&k54m5|>sIF)IY zGB{WPIq^nlibLG&q7q)|)<JKWTKl26kb5iYQlwTpK?I0&cUs4(WJwn%ncd8BNZ;_x zR%~vnq5$TVG2*@>W)@I}?6eE2pT8q9F@r?#1nqPWn!42)e1jG3k(i+nwnVqk+<Bx^ znTk5uu?_{+fF7_PQt94XvB+&t2n%kyo^G<KK)_*mXQ)WPU4WH)j%G>0VBaDH)hoT+ zV0=HmX?d`#c6)@aw4$X>a?`t{$sR{A&c4sx9xt#v?(2m2b?OfDFz0SNx0L;OpbK&) zAJE%sAxGkC=#yfgLPf$;=rg$8LaEHoxovkWupXs3P9(XX0S6jdrg+iGTM6KWhdrhD z<!o!JD*a`EL5`kD2bBNkl>fg>%m2?`nl<T1VcuKlUse(~Ocxvac*$zC*hwt#g;_RD zmKyk#%D!YGX;(cetpLV0*P)ITay><TCTG1E)IX2TU7`!1E<*!g(cU(;?i?Krucz1+ zJY!5!a#DYhbtGzNa{2Jy@e>J(WbCW0^7oha18r_;Hcr?3D)gEoZc#X*RG*cvim+2& zS-$*OI-OY>r{}#_cjKy9ayYixjiyHR44fb2riPiIIz)}btWurp6aVyadD#5EruDiR zXbt<6duymx<y5;4<*bADEw0Y|m818C&;<3>4r^`H8mRxaDGhL9HXmvcv!S-ZE_WjR z1Knz|#(jkm({b2M?stsGVU=iOw9II*;F{@Q2F^VY5A|8cJ6BXm+q+o}PsjbYzHd+2 zWd+^vfkX)`ZgmXEbs@>gD{Fy8lbC!X#pJ~c!iUpZ-^J+UqvwAaE(MFYWy?|^Q5ZPp zSYPZ{MevyG8P@?tyX(QeJL#g=l}{PNj|o4q#1mM1Lwt+q$VOs>H#V)f;aSTICc}P% zZqe&tvyNb1ib!tBaz^b(B3NJ8%rF${k2UAN(xAusA~e#vg7u#ziLWd4GoxsPR}mH6 zrQBS8vYExw=?Han87JSji}b3W`H-{;{y6js^ZX<az4VR3^s^wZIkP9|)r)>#R9n9J zPq{AWB(xvlL|(I^NG5p8UgEg4vR~y=B{!*g@_v(j{l&eVuFb5<X9yjte=)p@)UI5f zhULj3vavtAX$EoHx%S5Moe>t~H;RW6*4&?tJl4ewXiIA!i`9^)qAwpa_0WAXNptM8 zaFiY<On>Z2Y7o?qdqGM4{)e*<;Ma8-h4A1C8ic|eSK-}3$!;zhEHJk&_+33xCc;sp z?7hRk7<_LTJhEDtKmODeTN*s1@GfC|$^Y<y`(aq{*{1e=H}ZQCe)9SH2s`DPKO3xJ z919}XnCD=S1Ru~P+Ie@9N|3tA|HImwN3;2b|Drn5nu?lBT9npUYA7P9s;R29O3Z2= zQdCVrNKq6ux3m;BQ&SBQL(m%As+q)4LlQL)i7|+L&-?w|-#P32*1G4Md)K{d`6J8X z&3@l^?`QAlc|HR+%W!;mvb#TlCdp4g<;^F4f<cLPF|(qS><R(zw^)6rBe9p#X_hMi za$W~kkM0Hr*_~MdTynyMEfJ*eU)>%L_>tVDeWwfsmVP>&l@tD;Gyu<KMcNQ^nQYx` zZ&Idadha~^P+ywNS;fcm{pYfV<lx&j{xxAqYM?tos-4rk)AM3iB{<k*(??jD>`E$W z4WtXzk3CmxtVF~6tbXPj$IGD0t;&oU_@8VIk}TgZ2B6rL?3mZ4stV=}JqCJ4P2T;n zUcv8sf<;WmhYIrSitNbH&Ye6&k_kn&sSHTu3^nh2`#Erk$-i~DGb(W=d^VR7L!f~; zu+o_i@gV1P_18J79h*{#Of*d;Xcy}A6aqu|+Z#o6s(Yg=Fx94TO`hbsEN{aYt%v|? z5c*Yg>jzUDz0#MBUVLW3vlbxLaei~LN4W`tU1pqrJZ=@CyT6Xi!1`<=FCup$-}K&r zJ}|T*%%V$?Pey5OZ6aUeh#idRh_Mx~zQ4+Jek>)uE9Mh>QLtxFQWrEvtv#M*^x0#D zD5ZXRXj6OqlT5K<Z<ulR#*(a#vES)Rnl3fOpVWTA()}o>^0HcMcE^m>oRt;du#?@9 ziw)p4PM4;d5R(KEuE%oSIjWrRKDs2WA32CUtG?IyLgp}TmYPQ1-06i}8I{@GdsmP5 zn~rL3Xm4n^5f3Df#m<8}8|FDuR2yOvKlO1viW@=jI-^%hUowd0k{ZqH_k*aAU0R8A zXY~ow)tB5G)_nL97ZJN9*U6gacn1&FLPknnRe81X_06}!%_0`@>-vtY-RO@|!yI>? zd@p>_`&alqZ#Ytrh+;>)SZ+>=7iq4I?wYjZlRm4UxlI6t?W7hI*--TfLMGqC_|qQZ z(39wv^hWonu9i0KYj-sp(<X9z&|uF(xBxB|lAFJ}e*~KnK{#g`+*aRk?)@2i>E^*= z*1XJlpkM~M0_aV9uWvo8jlGJ2hbUt@ZhZU0l9YA`lcyvR(14+9wwjRAUZ0^_$4xUo z&}5Ih)+?RB!}3J-B2V{b-ndGz+(`yBR<W;a<a)U5!ib&E-8_ANF52%<K$q<|RfS-i zM`(|+td4Y|oI}rMg?NJvL{=909o=DPm-?RtA6?9~Cc_ed?_upDY`AtGJ<oKa9Kv{S zxj)P>k?={A*OnN&h@*IS8j9MI12R5$itU3YAtvs4<4=9hDQ~6D%+@0H=b=1^mIw4M z3N#Mjw$<p{f!&*ZB0|uN>K2(W=FzX!+9UPHo>GQrzzNyD9vy2Rt+ZTPz+mQ@2$m|Q z4tBzV#cSW<FlWAeQn<C;`A2|Q4?2g`9I7CUKBtAcL$VnzaLufU=%+Ah=HBw6c^JLP zWm7`&C9wmkW<$7N&<MrWQ1Qp;!}hL;_jm1{Np5uk`ph1)5OSOwOkm@ErmAk!d%wlx zma-o=SUR5#;)*Fooj<Vl^L$`cqSbh&+iAXPnX9)h`|+_{u0uig40OoVUFv*!_05#M zqW%gkVV`0ApwH&R*C@3XiaMbmlaTeO6*DHQm<`}b6#9%Y{BDDJLfzsCc?h~x<D(jq zI&-}FfVI_%l;AIo3)1)Kr%S0xgxTr}<bz?Xb=$Q%Oxgq8#Mz0Jiuv->OaVL5!8sji zy}%2QL+X+M^E5T(Chr2fm3Xw>`gxbE+~%czW7xFN+OQ`NK_;I!wO5g#a}al1pf2#5 zz5`=};hmpc6|ZV9Veg3f^lI5^AKyV}84dYm`<jnxDo?fLNm<+$*3MLC(*2vc(I$ov z>FrfhRL=12cMpUs{F$7+>vJ7jJ{;v6CPoIugKdgX4v5_D0MtZbb&lf9o$ne`k=Ygf zQc)`tW^;*j;gz-<R0L9jLzyQ<4DK<^awradP8xj+llKA8nrgkTWwB5qR5(7~;`1eT z34;Xv$1}028X8{)%E^NkV{~q<d3UVtvj%q-vpIJGlP&q4r=P#)M!vg3e?LW)(;HKi zIo)S4=Dp#aKESs@NM$yAwXS_p<&5Y8Wy5NGF&G*N$R)4Tx?95H>l;Q7RHLmbZ_bAJ zJ3KnY#V|4G1KVYfIug$yPuZOxaK_d&vf;V(e8g(ye<Jr)d;gl}Tp_b3V&&|G-{(`e zafTwG^mA<^_iH<{-`z@frBs4qq3meyD+uwqPE43sgwn6p@#&T6Sr?P!yB3$P($?z8 zdpUXbMY{0vSxZ|3f!7u?8<sN<!e3p?KrPw27Sg2fSfMhz_RcwO?Gkt1RQ}vYt+mJZ z?$b*HPfIl?bp{H=M9KNt@vdrF@V*)D7qO}Y0HL?OH1*<@x~X=Ar39>mQ|6;cQn_P( zm(OWC_j~To>^7r0S>l!<*AP-Bl%!X4oiEphx?D|pVW|^AN!MU37r!*0TL>ANy@Z=4 z)Q~^ocFBer`+-ycFx2Iq=)V7ZGN`^qYV+AJqw^vj?R*#JtRIr~*HaP<xodWTbLiVQ z9%(J)Mvf8MPi^tNYn9tUrftck%wL<zapr@Ro7Eb_NG=kTZCUj05Z1<_`JutzX=|I6 zXsdFk^;4W*lr{7!jaZQyNgZM5n*i)W^j7-KszB@kW+*FCs<Bhmcx90Ekg7lLsY^JB zAr6Bq&|`kf@y(uJZ$02od}P)C3?<o*qhDET&h5&U=&=KiV8gcVKKkd-O(QmG@EDN% z@m(>(V38Z(#O2i{A1d(#@BkeF8x#rQniH@g4M!2Lw{LHm(Ny!Pv$OP@NKN9jRG&G0 zmuJed%lW9rH|d+1E={V{4QUEd5xzD`AM$ML-M3rEO#el-E}g6&tZY1@pgLO}?Wp1T z)O@*1=2LA+jh0qzAGS{mR&7gI)A>q(?JEdHgmNznUnkS+gx^=VUn7~NPdrQ&^*`&n zb~p~=rYYk6E44bCPpV@{Xo^c}HGkXjrR`#!!SgbI{CiDsd1G`QYK$pGA_lBoO8up} z7s@|Vu%r0Z{@IL9SBeoSbCjAu-Uq_Ft>h5c;Pcw!m0(<Ir9gc{hxvleD$^i-=L?FX zO@JEN+s1_+LZi6N3-v|%r70_n$f~AZVFZKkDEAN*^R2U|jl)y08<RW;*-MvdVfOX1 zPxkXS3tXa9$asGjR>JQx4k-Z`l!gpRrYcz(zfPg?4#)Rmzf65s&v_!UzBwEaIuR;& zv5^l(Gw0T$iW*eT>Tc{*LjXJ9EvB_#iB2l^HcwN@4;(O7r|6Y>9D^<fq!9E6)28i$ z01?`X2u3jiF|R*U1oTq7C8upQU7n>gB2y=K1i`r;b5t8bwr+<od&7uQsDq8erg(sg zf@_}YMFstDRq1<PPW2z3UyozXFVy{yM5RWOUtf4SD#$eo!ULZbrfgOdOR=W*N{bb! zkvvbK2#(|zjg7$3%Z3W*JHaTZ*j-i|u(qp1rqGY(x~Te|4_m*uTCsnB{9=0r%Uf{| z70MJZ_wn=%fY2I-6q&-_3@o7LbSmn;)JA;cS=NB}`g>n+KU&%VIala>aT-zF&D{AE zb{NkDz2Zba-D+h$QnA-Bykjs%<g&2o88+ajUsqacmWx2T5@yc23Gl{O!1QC0E%5l( zTYdh|vtNmr>hzXzk0RB`kFw{D*jS|u-CgBG4Sjr7f2aMLu}S)CtrFRGnVRuEZDx|{ z*wZoCx$|hWs4&yRP|Rtctq0R~1qp5=o3#^}Db>2AR&W)=Ah56b`Uh2@`%qy4$n$Xw zZuSyvPC9;*8!>)~4keDw>8DyaPw@*+R^K7B0~5MKSd4PM@*jo^tO?6_uQq%j`@W-& zmh*t9H+bH8(AeVu*cf9t5Whm@p45(&jDR(ZnnKj6#;Vr)&KlYl<i&VWNC@D4z!(o` zJ2@T?S-HbGGFH0>pr@>N=UDbO<a&d9-vH{|rMso*bWYo8YxDRNY@po-$1>U~{&kq3 zhphl*v4(h`A~Kh4!Qn+}`g&SN@{Z*4Dlh%;OCXea4<JSz<+RVsaf&A^>Fmfoukt)g zZdtk>BMRvEsAU;ZU8}5+It`TfgYj2e#?pUV3|?tAXIh~TOrD>^wLZf30>fwX4@ruZ zBFQl$B7|g*3^ZMRxw~_xIPZhV*8y!FT_Py@XtR!F#D++<<C?fW8y#hDQdq;u!{_i1 zL%UFDjal1GBzPPgsGN`xJkY@^yCUakx4!s3$8;raNv?0>Xbi<2CbS0S0Bf)%1QCTG zzsAM%XYxm8vI~uMbX@0sM{_IPsPO=#W?WFa4MUO1&Z#NZ7malowfd25bMKwo@2>r| z%)+))<9oS$Za^%4i!N8ME67M4=rgK=BhqzN*DZCW5!?f-%4!&zV$Mh3Liho%B{F>k zQc_a!y4NY5XW~15@1TUn?PT~=`EU9)nmP{bNR&DA1Q6ti?)jy`M)7`5p#OH)fAN$s zJ;2ZZc<5pl5e8@l^kmw`by~*t+5j>~+q2tJCV#g;yT6-uh5G&5`08=bcSmwW#;=ZT zF{kg?qmR|1=$kYBrnDf!A<dA`R6i}FU*FQMCiun+ckO1JUXjJ+4Y4!7*!Fq>kGq3d zu)FK|_aqR9`-q#nq=BM9Kn_{o7n96C3!A21+}$&Nb&lZ%-{}udvADYyOtx1z?~wAU zMF4AyYbDESkD4mnKWBN`8NaXim?Y9K^jdVgKVXg%%;8AN77#ROTC8tDfAo63b@fi_ ztm$$`Q#&Vuy*o#Cq`d}gL~MbsKY<Mjczt@7v!OYFb9vvfyDsJ33!qx(E+fGZt~XiC zdZ|iiw`gRVu(HoekJN`oswYXvv4a=rM}m^HyDNs67}JV+3QIS;KIP<$yP5(m<5kqf zJhI}f=vOPnXesadgqsH+NRr0S2EYGeLp|6)@)mjs@Ps=Tt*Y!}`dnE8$Uo1O-whCn z5)4n-M(kIv?nF~V%iMBg#*v!y2_ADsp2o3q&*dsDiL(}}C-c)H+~EB(tOWVU2HJgK zD@_qEKdB*Ju;-!ZB?sM_>OT1~Dsz~&wq^<9L2~gX0XWP&EbyQF*P|V7|84#hNds1b z9VeBu6GnAbiF6PV)O1S!s%m}c%)m4ke!3ofhR_JUHoqZpui@F6Gebh*8DYmg7n;6! zlN=QmJVgD1^a5*@oP3@RO<HfC^v3-9haqI}cyeoWDjVpZ#sv4YQ_g5p?%Q6iL5G4~ z)MG;B7tX5KEIewW$=kkb`Zj2}gNg$@fsKT1R-|(P{5U{0E5t@X*GaeeVa1C(u%yrB zVGuI+U?PoKHj*gx<V=8*MLxE^-py1fm`hM^aupTd>YE8*iMP0^)g4^RVN#TdCLNCT zTkdZnZ)o<>Cc|>Z>qw~RQED&YZ*GjgjSbKKPg45q(bPm2_wa+V8#XN<%RW3rfZEax zxr80Unvl>fi7!6NyFb2q-TIbHWZF=$*=FT@YoIYT5CCUo!H+z2_H*simyTtA%0Hj( zIHW17FPumYhSP+CJ|n~scBW$h#6nfZu+Wh8Bj&~HOMzUXk>B?#P*J(;H0}92S4RMV z<PA(Kd9UTiuw^z_tWaL!ydk}0q#nYDkbse+HrthJhz8l7{><UhQp#I@!du329_boA z*ed-$qX+&6Kdan)VroK%GBK^?DcGXd$9a~eYoVss*UatTYhZVtQmq`nz?&2PE}|>j zvP&Pz%GO6UF~e^^H|@N^FL{sUE&j8Jv>V4|$s6C!ygCQ@AD8`Ke5g9p1!bx9pFtUq z$tukRPfb65YSpiXThR4Z9=i}3H50)I#{0T^vSwG9;cCRpC|48j4B4CB{l@Tg?D7Ay ztoUz<5q6v8eL*hHarDhNT0?xX!xsz_K*lAdMlq?sBWnrdey8)+kSkv|>>K%l>wdU2 zH8-dI&LnE}9C$5amjCPHs&sXPJGd$b41IG=?z@?Addqh_OGtmOT=Cx#STnu}<F{OE zrstJf!<+Ze4f&;*O#jLsiL;)iT#U>uXW4?P0I6(2b@R$f2fa$7<`tjM9bdv<G5n{O z-2V+{=f8gY|NIA%Z3RK+v+aF@0<R`c%_?W=LOZ@F7%fP>qUuwu9#IpI-tnaKTKbPi zcaZ-io0q#XCKUyrn{QMeVHS^-Ri-6KrW=QTyNb`DNmCZfh`C(UL2aDO^ZblXy!>>m z3^Vab&)r9Y^d@}a@V|Ga(gV8eL1!j=ZoTpQP$7}{<7T?x=flu}FUs$s8!!Wcr~Y0p zi@U(5(we>ySJpm}-6zX@;fJ`Q%Z~wQSVpfU{uN9QTiY;NRpDKoU*nX8NMSyIJ)BXf zeDpu&(tn*1Rkw+}NisAp<yfJftkBStGCvuv^)Kw{0C1wCMeRm@=6Y#i3xkHCS{%GK zKXsj9Pbq-}Xz&y4m{-;Q?2pdqx`I9oeN$M!ohWI<w3b56=u``+W3At>ne7lacjfbA ztf>qJ9wj`r^ugQYJKTRaC=NcPZ~};W-`{AXllRlLW7D>o4+9(16q}ettcmCR*7;S) z)iFnLsXLJ$B3bHExu1dpuA0e3qEQ029!EhG)|}*K!~Gnu$VusZgCJjijwT1qAHJhP ztby<TofrS{1N%VD>Q$SIp-UoMJ8xUL<9P%~KWj~Aug5+O+_23ybT#cEo_};MsHA7^ z${LEjzFfxY5%9d$ms%40^FQ5r@tbeqk`GO31w8<CYMw$alCw8kd|Z7(xEp?VdO;kU z0K|gj*pQMK&QAkslE_~<vOTLFez^}lq!8W7*5y(?tPQ|YxUl}-^Fksc^fkk_F&^Sy z&vbR|bKzHaj>44i-hwK^=Wh>Q{-VX8`9o=`otb`Pf_nTESHBjjeDJ7cWa5HobB{Tv z4q|1rC|Kw}@9O`$H#4KSy*@h@s`q1@_d#fS56{Pry*onZd;l6TV}gHH68ow^dTx<K z%wD`%Q}@^8eh(H8N{mB5_T+B0Zhl<Z7iN<4)e+lqIq0iD1qxx;^prZ0mnh>~fK^AS zM{ssgYvKOX+Xl_6Vr5Kkd<TzvS})j`e|>VnBy!z-%rsPIn^mo2aeGr!2#xhrOhiRJ zb;|t#J4H?-He^$T_HM{X%hs=zvqlk`uGW|hu!A1#^5e`f$yT)$(~mkxlI+jJ-^T5< zGa#1Cacv^hl8&kVhMW>@y$?nnSAwEWw76{F|NH)Y+cd_|GQ1s`>E#9SqB2p~j7J#{ zx@|c4-w5hmrI<pv5&7Qyh%<Wl&H1=l;=YPYqR4|PyfbOLsv+)1wGx#?3WXE4qBCqp zWp>wE>=o{k|1h#Q)%}nREguo}q?8B0av%F2bLIct2irhOKCFGjulmBYJg=}=tAWJy zn3de%i_R5++yU%bcS=cT(iHR_?wM(f9!2cluNQZ;lRfVm(eJ>QGs$zW+PBTx6i^e7 z*iSAJ(X^W+c3uSC&}FA%)GgR6%|7J%Tc}q<D$!!{bn0M(Hk0Z>RrEm*2Et3V2GGz} zdK-Jph#xt)>1&oYe@#sSjKKbT6;^@(*Iz9u+8*zT?|jh@KD{V&ZDY~pMqhG*%7<J3 zDO5xXF#=I_SY1ZMF=;;0#F@m0PpVB%G->dB+@87(uWswu-UV=rfu3cM-SAT<d?w;{ zR~VSGnW(fOwj9ip@}htLhPO;%Q|5g}!9Nvm7_~;eLZm!0ab?G<2sF*m6MnwL`=!h$ z%joStx<D1f<`1z*t-ULom*ACAzHBzjBVZGq#6o}A53c*kdAH>2<4+e?Nz@{j-18!o zy_p)l*}0$wv!4oE+xute)CyKuH;SV^=`=gv?03R`z21{m&+88Fo%IAk+ta^A5sVu0 zHtg{bN%u^N&QSGkW2-(tf9<#CmTbZnV*D4VzL`Z|tZ62rwA;QFL9@IeKV+r|_2`-p zyVmbGF9dmaa`%OenY0duW4Y8{Rm(QPuL-~IzD7qc+kz>OYS;3WW{KD5bA2nVRX&1Y zk6Vgb+k>nNSPQ^xO;zniR_MA|{|ol%%k0_nZ+l)J-;~x}vgYjpjxkB!X1POAowzCg znbwxlrszc#Y3@XohzfO5C42&o!P~JpQZ9`7b-POg_@}9`U-Wz3n4n)lS+$I<zA_Zh z6Y^Zg4WuJU5U%Cxf5qF=*;TMdKiT<Gy33N#3LZ0exq_x7+ptDxl1M!B;z(`!_mvyg z@3?|KwG-lMB)ZfS;PdNr74lbfY~_Y?bL!Og?HlKB8T34;-RZTQAVc3MCGpafM*OE8 zOC~)6zaB<8$1X%YBFev--`}h9B_t*7&0V2MV<`gN#TKi#3>41Ft9RUg2HJ|8!!>QO z)AXpZ#OfGj`c(ks?bnkbEAIM!`uD|&E_pWJJ*6$~Mcy2F%6SY$%8Z=!dfK4YMtJt7 z*OuITP~YuW_wuDm9Dj;8%U$%yr11#+X;ZaPJ5}<lTef0&<mNMun4Md{dz%I|%2UbS z@mN<1=Pys!&PbhMMJ_2_7ySN+_27%k^G(bm=lG9C=BS-L&9Kg`%N|po1VlWh&W)us zS8yJx+^X<tbnc6|umkz@RDk_0Eu_l5jbnTrt6|TUfZWeN(vs4b*JolEbGvh2_)y8! zh|(Slb|qE<TrJmqo5ZyIzI_Wc^Rn%Hzsid@Ri9V_D?!n=kQTf@l*3I}9Me#TufG}a zNATtB!<w8_+0DD8y$Tc)b+89|X`^}%#gxGHaOhd~e4SbpHmxrJMopZ&EJAnr*VrdE zGxtp!KO)k)4qf*ZuXsjn&hk;Uv~&Kw1=)+qY<Ir2fha~@0QQ94h{7JdPLuKSa&+CU z63d>tSJ4-B=2UQ?cyo2ctZEvOJ^VAy%QGFf{$PKn=i_v1NL9$QxJ@ztIOV`+rJqxc z?w$*RzD5G##&7cfVR%YT8Bxq-(|m#3uUq9Au{I2Vm2X&F0>)I2JVk0XvcRL~E>I(I zqehfR=_=8YzSD#JJz~ayFK|-u5>1A})oUv<4z?<A50;JbEp-d*8Tx}AJj=&Iy8d#& z=;u@tAM!pWDGGdhe#XeSW(2nc%VAdUQ>|Rk#k>!f*4)u(!Mjr6y^pEPoj!Bd%UZ`| zORNmkjeQn>&76A)Op}bnFpxWsB@nP+nq!LTnRluy*Jb|3Sv{K>&eUNa{910u3Aws9 z%SW+`T;GicIE1}jzCpKQkw0dj<2zW+Mu=+>pwifjx&%H|wh~B}s3-p&jFFQa0bnn6 zv@JD}$%Tw>>mjD7sf@?Cbw8Vnv)vn9Ms4FVgtP#X=$-4YG#Y$t6M}+BtSaB9-j8=T zq?N)c|1k6x^5{!;9bRSl9{YT6#Tu4`gp=%Il!I++h+3aLEbkxa!~KO4>c8sq%=f-b zPpKOnscZMJ(Y2}>_LB<Xtv7@mKgC2FPQQISpU$v9*&Q%@V;t*Dn2VWeLkG#lER5At z|2AzCF&{c8l1o<_ueCo2h#^sdjKbKGI&GWapyj+@RuGx;X<l-PT;a{;0raGiMuaTX zCHLOWV86f@hx?hK{n*jlIyxrE2<`8pLg(N#6$-%Fx&)R8@^?I|X4~X?d&+v+`iz2> z!qI%0WElDf4NRHql6w=zk!3Qpj+Jv(43v9ryRjtsAWD^~K;t-b1p**|o>D^FnjDD+ zH)NDrdB{`N6=&Z$4vIqNfm5g*!~hV)&R{=@FrvpP6&zc#J`UrvWitFQ^6=|n3x+@5 zo3Hn|U$r)wiK4KA`-g#?0(py@bBX`Kb3wB4P<L)tk5-O?*=W~Kw%6p0sMB0T0|mhV zxW?@!<6gB2Rgkn1*qiJzvR1Q#gQ@v{M`!lTGFou7aQ<GJ!+7AxgKv-k|8lNNEp+Ti zb!gX2?{9PBl-|sO)2xa3z4Jp))3(fWI4BwM5Rv#3lMY?I5v1z5POGWGQY(EQrAgar zwA0=A!^|PFMB<*Is}&wAQEg?hLYErBBM^}q^^{Kz+GnGCMU#R9JLIl-(B-fc&zu_8 z*CxxEk>&+cqETt*qKW)TMSxJ+6?kS+cM>P{wpEg$PvNw-+MlWWl#k36o)P@hNwcsL zSi*M-dygSSrOTG3VZ<-=$(9j1k;p%sGYqlkKkU5yiTyUFNdF5`|KAd?Xo+}h!4&i@ z+R$)!TIvRWI^(nB`yW-+Rj(Y6Vqqk2UL-h8cMSZ@&qi0XwaLn=O!3(LS?cfvC)125 zqb++LvBi#mhMKS5Dn8m_wtue5R@2u%R1h1mT%P=*LO~xOj%UIWu-Zj5i(0Z#JlDf! z`cNIbMSYsd7Sz)C-p@7cN3ej6cdsR&F(80CPvvB0ub=1;AM<A>Z*e!?>5#m6wq0WY zDoF&x*;*KT+oKJL@EPT8!<|DpXAiPt;!6SD{Vh9fSUA#i46G08Hj0_Dd7b$@VAQsL zKi}w9bP5Bgtr!3HsU4bk|1(uT4^Ze9)B->(UYd)cZ*RqK8ou>fDpteIb+vQT49PAj z&^Lc;$rYJO<r2B@%V~YLbe=V_-D4{mX@<TDyFIp>8wE_OkBArMAIxx4o#)nN|Be_o zGL%;_&1^jZ*2twtv1Chp&%u7V*ob=r-erdERI2mC8<4D=(kVOS1A(xVFW4NxHcWHs zOx5#^%ImN=e*VDA$-lI?88y^lC68_GDWsmGgU&gY?yBXLVr$K%qL%OeT<LwT$-hXW zBVXvF!HLyH$eZIOBRNxd#7r?wfrDAKx=%a8{6~@M!s5c*Xthqabx1e+MEbC^-JuH< z$15>iqykt?2y;WO0quGpZd^@RKJh375trY4(cUpZU*eSJYEYFyN7xN&B*~5m)$y3H zMBb>xc9^&p|FP=3-KgVyTK|50^qqC7@p|`7S-*JxE&FZRg>YfF_Qt=O&NMdd7rBC1 z7!i5~VY&xMY5|E&!2V|bqTq)=U(N2!Ui=CW)~fBR=4_CvNnH|;N4X2@01TV^vD6_m z&&<-zMXw*idoj+G(*S_%U$d4AB?<ZUu{krcqIGo%1<xVM;x<`}s@%2!Ad{F_K=|N4 z?N9!5+lZklUN0o*W1PZ*sNo_Dln`fN6pMjeqe4+6Io58tcVJ1UVuo2p>BtwXo<%aZ zWGHZKjrm5uiUZq`@%nhr#9ZgH+0I4obcs}M^*23dBByapgV7Ku9_dT2-RXk!d~_}S zF8$+D*VYA&SEx32l;si@N)aVW#I;?Srbc$=@Q(^uH-5~4dEb(9yws&SIEKf<K2pnj zEh};_RnoZTr{NOgVT1cEeJ$(tX2T&O$replTpPaxmm~sh=cLPS0m8}xrkhC>2K#RQ z>U=qWI#mka4A4N152+cX>dREE9@{IU$!;;axJ}6K4BzR#4<N}~6Uk?A&Fw;nEkiQT z`=S{{LSJa@qPpQw6@!Dq$g`YF4&}7R_`P;^i<MexX#J$DceVZ3xY<ocl!Cq>KTB2P zDJ`zusz4$LNNE8M6axCdeAiI-ILz1c_mgSv7mh-Kjb{`>aIOioK+2hK0y!BdBEUnl zroP<XkO3V-2X^vha`cgGz332609g-K(j;eCE8969GiHFM9=6ct_9!HmJG3?Lc``+X zCSrMNd`?HrXx|hw+5M$&=^utK551-JR#wc966+`ma~%RnZ$5(6-DE^E|N2c<iYq8S z-n`?wbC>1rZnv#4q<y^YB9QC@M!l|Qe>%&Mre{PSv^W0|(tJ|#MHp`PzkidZG*(LY zK^Oa(1h`29rlC<qL9>=+ql1KppgY5Uq2M4^u;EG0H5I#Qys%wX^2hDGwL}lO$(F|y z+Zwj^QtXt8g;Dh*JOO8<g31uSANpzq*Y+wOyG6QRjVfHR<!W${1?vZ=8(~Tt>~aV( zBTCThAbh;2Q4FX)EUMyLIa>-*FY4X=i}<TkuX1TG@WV>L;fn>eKneq(ad;{31u3{L zB`^*NCmL~DQlEJ8J{+xAZ>VvXt6XSGCz`IlsJ;4>^app+9*1T<Lztnrlll-cUb{Og zIqA<{CyPZHe|9h$>;YaCV~i3i79v6JZ-1jmBDAWhHzJP>A&ax_9}7fpwrPsYrzA#T z=$zDTs4z7+q)A4g_i<e#++bQqRsKP%PN>w^ww8#VUm-0`X9LJOBR@8VO?C7EF@CTh zaf_dJzc$N)JU?7-c=p%uB>DufG5&Mzj_kc3;W}Yxhb<HQo?I04(r1cu>)YUj*Sxro zwYuiTnjS*djAA?OyH)D*$22YId9Vgh?DVr0FmNNh%NrB>xR7yB8(@5z?$VMJjp8Z* z^wOu>dEjQm!DICStFEM!5AWoq_Rg9qClK4;<cN^1+hj-VhdiHWs>(|5_PudRwaB+7 zA@lE^QPz;srSl5EYiBH=jHPeHocyRW`>Db&+Bcw4m-`^~CSB4RfjWMwPsp;uMGn|V z8r;kU$=*}Uf4mdMS0%TfJ|;enat)PujD4f!i`a*8>fC<q`nCoXE(R;49&}9=zsoes zAl$EOrf~1bWw`rrDKIsIE78&8c9v_qMePPRdMafqFdq)5ro<DW-)_sFz>}%nMD|Nm zqwjdjt?2pD&8WD;44#9>O@BU~ku;5#$CZ#F?WNQ-!gw(je`INGYju)$-OBaS_uk)C z#Sc>pZ%MpZv0hA|h#J>WO?*hXyhX`qCk4xCiw+9-Rnt?z8__ChAlnf|0Tlm!t8Fw> zz4%LBS$7v|V1IY>zvL+1IS(Rt+mM&KRFU@N=Cv+5C~<aVAE$~uhS$5BsfybCjyY#k z0@-sU1jg;5glO_L_=pLM)eINo%RO5c*WagYZZcvjU1(yIwsz7M8+@lv7>Ixq9t!4N zKe_64-AvM-9B!>yV_wrGX!n4w{^lNvoeI|v>2ohmSO~Ine9jQ17cM(ESjxQ_prC*K zeaj!&pP5RsjXi=_-omosv+{Uvh(zvLs>!i34jux+*x1hXj507YaEQXJbAlF|<(O;` zd9vsb6rXISL&Nse)c!A(IMw6`t80^AVGRCN>K$Q<6uYh<CFU(gA*l!C8SLULbN{`` zP4O1z)$iOxk|#msKtG;3)z_J$kY$#1-^QSmP@HI9S$wQ9c8^`<mD3+VjAaiQhzcN} zlX=9}UPujmXrLY|%KK8WU$i!8`bxLJ&e|BR1u@zse4VmiLufx+l?{g%oU_`{q4RzS z>K{?m_TL4kO;rL=|ACS+YOftRFs`!F9$#N%(bZu8TIG`RpF1r2jElA!Ybt<A7e%*= zRo5cpds4y5(fRBbo}$g|m{h{%-^ZzUVRy@ZET#1u0h;-inAlzR%Xjzpm4$DT*SF67 zxexv-Z!@Q`T^T(w{(e4J0I5Sc2=_z-QJrczpl_?)KRuu+Iq}W-4$aUn_bf6fkTl3L zYwdwcnexaCB~9As@&tGrvjJ;#`Q87+DiSQoW`&)?NbIS8k=a&OJc)3*Ji4(oTJ$ua z@tt>8y3TUTWxNvQnBZ4QUOg}|;zY!oHjlKAkdlm>6YpQV^O8Y(=?a~Db&d)91nf-S z(#BatS{pJMyhRO~9@_0O?f~ZN%mB9Dn<R1a8VH0#Rg#9f1cN?*e`0PFM5<|cQ|Ywp ztpe}*#^*-?gAjBFQj?-wPGR1+3$-$i(%#F-PnkIsy+{yrN6`?lk)v}P^>l&JYKN4t zpVte0rIr$+PBCr+7SgGY=Q_ef+Ru1qZ`Mes|HJT*1@BLp{RIaakiwD?V>}t_E_WH9 zT#AO~XC}>apETr=Q5}PBgmghg3^Ks)&^*kcG;GvvTMPM^z5oK$TP&d4UcK~gyOa8A zcD(0e(@ET}%3DsEP2^Ac$#cKUX+Nr+Mrmi<iAm?DVkk**UiFna-KUZ^QZ6HA7*7-q zs?Ly>V%D)-g!bs+$-`c)p*`mv0j<{e2IrTyJ&u%ba=PL4Ce-e*RIq6>=5Z6|(D;u) zs6<7dJ$HX@dg!^#D8%|h#c@c25rMJWt(YQPBwqBHTJ%_AO#Bow3;hGI9w=u2yIY;- z5#3&71#iAie~)ab^uC4=1Fe7kUj2b~s?^p7;YJf~b37?JUyBQ5?o~sG>pw!>f}p3u z@aYv0p=CTro^pd)y~4wS+UNfC{MPcv?dXPKFaHaLMm4=&qxByT1J3<~zDE+s!MG6b zNtGVf8_*Tyqt`XA%|WM7`zE%P#~Qbw=djXGmw15geIEKnd+io2nbm~eGK*S9S8h$- zrt4J!w`Io*I=TfoC8QzngyN4R_RH35vjX_dUFc<t6i<!*v?U3*YfiT69D6jW^da;X zH@uCVS}>o)@soSMsleQTB`}$_-Hr1;6=ch}WaGWw8R{KGw$n_Usm0}+JKJrxXZ9Y& zO;gtZsspNfZl68v(1gwi@FA{|lTIRm3d9h+7wVeJrXK=G>?ory!Gj+axtBw;y&ctb za|(i3Vj6n^upwi|u?#EH^ou)Ysw%H?O#tX^>xU}*uwL)jHQhW1sE7^|{^BA0_l6L; zUCNw*iSXqH9851(&{gB2a8rMv3jNdwjh&1qUKm+wYfO7Gy16MUhJB~^n{IG)YR!b+ z58c+H$pKW3VgMb#4O2P>s4+if+W>ydzn)oV{nutC(V54c0^LQ`G^Djf|7Fyc!X>DQ zt=+MBpCD4GE((!8yGm5mT%Z0)zi(#y3NmwSgNP&IS-H~_Qy$GG-bZk&{1*z#ZadnD z7J=jkj2)@alrOpH*V>*mu298PO-Ijixm+KRdH9*!A-rof@@6eXIdxy4Hx6qOTGEex z>mA5p)_ax0?b9x>P8!9Ak{|qH`LKbOyMAE}ZP*C<RYAuCtfEJL-p6bJgJ!wO?WCMK z1O}iGj;!qf%VY!@LP;!{2XKKaj`tAH#*_^2sh@57s8Vq%{5pjS`$QkJz0y1q#%DPg zLNtV%r5!)umI@eV+NpgMPzbl--LUHkpWiy>^8_d+yjA}&kaTIOc6_J_S<*iYca;_d zPCgyv)&LfxPPG=AQtYM{W4S}H2AV=++!~=bY7wIvTi@r|{`!GbAIinr20q8RXN5e8 zIIwcTc>O-}!}su38Om|)@H%h@`@Ffp6%#Y|fv!?&65y!UnR^W0TW=01FIhEw(d@rh zIcf!ce=EY&7oY<Be?>rgs$heuz+3wZFhHNB0d%bdKM=Zvmg1>PZ~J$&&#IpeK^M*e zFBo5sI$|o{+o_J-yVG`w7SM{T!c;{Pt!|2ET=|EgP)8vw_vAewEDlydIg?Y51_-{@ z9yp9jVAz34InRk6D9RUbW`ACT`96II7VEiLCHhXdADg?N?Yw+u0|*pvs$^aaTez)U z-dJAH4L1oJILppMGqVPiCMD=G*M$LsY+5-r2^i$D-3j+OfHdnJ3Gg;Hkp9505YS!0 z;Qo_h&wc6^A!??3Y~So=80Duwv*#@yL>O`(V4lK!h<1@jfwA?&_SJ}tZWUZsSB^C% zB_-t_hUaT4-LqmiH2Ygi*sJ=`Cx!xj>#QOE{w!`g20u?-YJAqJMr=wjc@QePUrN5B z;1Qgd-(L*WtwSYS*i%X2Xc%A~7x_pU<pzpN=PlvIa2EZ(yC?7ENGp7Rrnu4{aS>p+ zrNfH{lH|DryKQR-2MQ0Erj8b#e1$H2as%Gk6%4R^Ug8aofmHD)J4N@zH|8G(-ClFh zCFsIP2K}2d^q0VjBC`z0gvvz#*vBELIshpF84p)~Ie5k6m2j^Q_u{PdFxHeT_aM@W zycO#@j+OUT=#@<?-G0oss{@?VVMD%fHUIi_A6q*s%fX;<Z<ZZNaLMq~Pied5dxZ7| z6<R6)Z2AvE9S*Z$0R$bW4dBd}K6j)cHH-udF-87$kF>o7M8NW?x9LL@)<1)dEejux zWbg|z9M(}`5deVS-{{mbhJKw2BbJvN@a2c>k1TcJwm;kSx&k}oTD1+;nW&1inb+X8 zX^MK5v(GM1vJDTvO4_bW0Q|G?e(EQZhk=%}_sDwCN&84UdFmNsY%_V7s)6i1e!%Kn zvB{h0M}C<4iT*4UKGY6Z=Xa$ly^t|E2*4OWAcS1Kj@q}kt^8~|ZA7S4+rP=Xo@%M9 z(1w^WzJ!uI#1N$A<kk-;Pfni3Tj9p8V-D;@T2cGK&%&4y=4Asiz?#?cAfTM*4zCK7 zoCE^lYZz`dSL+JU0dLdWWTCtE)ehC?$(BkP8?Gd$=0nQ^gG4Le$#+br=(^iQCzTx4 zyU+{n%8_A3ftA|(e!?y0t~>TNt{dEhVjvyZ(6fp@_R6N`dcmrezf0`)2YuQfK?akn z^1_Vk+=Ime_B)IH#hIli_76pkdeHQXh&ZD+2W_0`ON+uhqvkUU{@9oHNf7!|uQ{@0 z>+xOG&&O0%AO-@{WN2ggq#9TVpO)wT`#fsGf1r<ofXMt9h|Iu~AEu0Ns92&{Y3E1L zr9>``n3%lArxK^)rpvm0EKRGLh`A9NZQ^(&tX$tGq{#ZuN$QZ+Stc;13&D{Z?B8$l zFXc)c{_i^TGy)z|PD}gbN;p-9;81c0?R~;po_><lzK|?;f*J%C_$br~dUy$}35@PI z>4cjVRI5UZ{nsI`CK`x!+FG`K!eu3G#YY}?mJLM$7lg+i6q}k1$GKh&8K0u8wO#|* zbmrrmT(EJ)X*rgT%uwu+-<L!@XTr|QA2YlTnTu^ur0n}PA=_0z8=J!eV+lL5_F3h9 z{3BeK?Jg6R1o&`R5qRTt-?j-YH}~Cw$L3w|Njh9@m!f~B`vdv<|D3Q&_B4@eg&eKM zz%cSsH*Y3ewU1&vG<AAo@%@$ZExS_aAa^$+sq1Jd@gD}4cE0Y4ZjSL?_;_6t0<zw5 zQ^a9zaJw2ob@t)LcP26Sd--y?r%$7p-oeu8zZ;wJZP!;D4v)`mHuQVVd|*so+P1gN zrRWTVY7wgAJY_Do{yuW<@+n=_Pxva8dh)@$atp$|EI-{~IcC68euCctXrhm8Pyoj6 zP&`KlSee>$^w{7<s7vnQH9Amgsxm<>A4&m?jA?_AV@aB3G{eLAP+y7pGUnVNfnB-C z9G-YPD(th36#~=swe$LCpkY-l%FzRp{BbI=36wN@wuUVCy;Z#T9<RbmK=739!@64m zhbb9DK6Its%Ba6>dCuqlekxO{U#{&Ixf1<EfvKARKc-m{z|6BFqt?fxLS@n945D%t z5yiRs(j!ylO+n)5(<b|<`VX#NgL=K&{h@4$RpH4Ig-#qlMDp9~B8_Vs>s#I$c!NDJ zznS4Tf0p#C&64cAn3uQGCQema>^muf6iZhC0_1gBGK#scHRmYRnkQwu)pGNZRx9Kb zxV=WrjrLAXT6?i}@IZKoCp5Z#ZKBYwR^R=~uS1gkT}@i~w|3W3TO(j!xa6JU0}t^H z-lwlE09@#`hLiV+VT^9VgTNkC#A&9xUI6GDvIB(AiB6w?7(N$CtOo%huNiQ~>(~Ky ze-1#zBb|1a>Rkxb#w*KKEXQY)h?Pp5$}P1>g@_Axftg%wy%Yh^9*j_=+?Y0rmYAnw z6@Iu>ys`F_(~f9IG>Ci+26f7sxK7nR_vtxg*f~(qx5Uq3x;>>@iwbPfVx!&d`%Eps z;*<mIVMqUsw;jMhe|evPt_NYhpPZ@=lRz4cZYpiKK4`UhT=KLg+hJ$ur`&+1R!+fA zwZ#yG-+f9VZj)vxTvlPX22+k6UTn+0a+x&Dc%U7`zTQq~-!MAwVb)GgUOO_}OD_;H za(8`^@`Y9&p{ccX2&(}09d^I=^HbEiCpE2ORa^dU!UkpDMHbArU{}cn$30)6PJ@Rc z&8{a%Yk&*=6zV*<2LZ|+HPNUQThf0=fBYYEF;ldl5yryMb7|0fQ5HM_a;$FDD9<9t zg!^q>n6Wk}w(}T}bq-ogTwMQ^`rsdipdZk#P`F9A<ym3TQQ@A|Rr>7g-M*`JxxW-{ z@<|%`#4Q1q2kpA#(E9XQ(3nz-6->J46ykxG=((@DmRX%3*7{slIHtMbV`zDN%gR|y zm?v(p(LTqTW6<PjKGn2%O3TNy7~Up6y6zenP~R~2poe+eCs~iSRx(VxnZF{;CoEJu zI&Z_LGc4$0^J{f3Bp`T6Lbb|>&MllEoH_MWp!!YTFq5R;#Gd%2=Ncx*-$UzcX5)*@ zmoshJvWu*A;m%$yj&br)k70c0&vGQge*>+jht%MaBjT3km=f^3<0G5h6ce;JNWPm= zjxb<$dCc-aK&@EZ_0jD3!M4MNR6;GA&79cDFbqn#Pz&UE>U54=%xe2&j$Im{&jrP9 zH$30QIBq(kf%5m6VI-6ggj7BK$7Z><T*uSfY3Hew(|dj))hgddRHb}(ka$8BqS~<L zEM~&fKh`lacR!epo?f*T96=kgHN=!n#kb1mn`hpf`Se~$p=$~3KLC##g|N8`SV{{7 zzCqf-pJ8R*sr@cHopiT=26ya%vMJi}YL-l|ae0VObvkOYz^-%K=$y&<TQggM82lD& z^p>XXnNN){=!@6mcly<jE_CKQm#DgB1p$pX4()!BzSh*z6nBYRc+*b4Bm9-h(@~Ff z<JA=Rkv}>asdo>g1g~%jaGQC5mTk`t8tiO^8sPvpwUS=t#}X;Nbq~?mdR@e;XKRxj zetls-R$4yl`RH1)k|7XQ<}K9!zT<K_|9R8!b$CP?fhX?h*@*KvQdc&b0W_IZ);_t< z1|0KHt_|>(c)d}=uucl=C;62KP+h#U_0=T4>7<9SGoO)sWZdiD=`a8<Ibpzid}{o< z)eEE0H##VRVe(QZD{p7;x!L#vTMyh+=m2rJa`@1|U(%=B4Z;3x$~$~LtUKS@F8)+w zW&O_Ko7bOGrOK<M9#aDyeTmE`9=+!H`ts@R1mBa~pudGh#v-Y2nSL;sWkg~@h17eq zD~g5L#Vzmp{r!D!ro&_CJ58(b%oeITVQwQN+d#V&4~F`@^u04&JvAu?SyhmFvPQsV z_!B}B&Mz6`mg<|t{^%>`iPipQ>fxUThnQg^v2yMNnVX6mYKuo!H{L(FvFWk{E)vQ} zJm)(rK{X|u_;xYc#(A3P;Vc4v1{Ka^xdTT(L?U_!Vb!TTD;RChO0PsoH_j;+gkJCa z6jJkzCY3Q3c8MBh6TD_VQmxc_et&s!e)(YIc^&A*oywnJ_GfhN<{`^t^AM}n4x+nv zVY>Sn)(Yk(iL*X&Knptr#ENh+WY%jRzg8pq+@k3Z`KA8$MB?pC@6LZ17*-%>8ye9= z&TTwts>$EMbcYxX^I)#HHF#7b)wwXi_Tb5g604(DQ=8|3mO=CO6IVLr9#g*u0`^@^ zCCYED#gj)hFMT8ak1e>^AokNg41(%TY5m4zOlN{rr`q^tS+VWvoJU*6K+BF-e8twF zG}BU95oNHmQlh7B`e)^g$Mf`&3UVjwzz<T2&Y4q*=*lt#%n%2b7muo{XfApk$>ufZ zi&15K@%_hMm5DA@t8nG!6`m=;Tmw}{5`5Bo>|z?O``NS?lmG`9ptEVj1h~<-zf|R8 zulj=>8E||7U)0G{$LiA=JwO0Z%oUilm|VkKermwASU4swJ##g_oAOoF%SZ_tkGxQb zXz3Vsv)r-yGu^c&`N*Z~JN}O6EH?9ZD;1Wv8pe~Q35c6kTH^G19xI(3_bWasU?>2! z%wd8Do2gQSY^?{%YU7Ko<)v49mFPucwOWZkg4usH1GH;qU5aaz!;t?Xwiy%KRi<uu zyyx>t892`ynxLX_T!`RMo-HfN^_lE%H|3kgW??Bz-|rcbPo!WSVXULr+d#F!$)Z2V zx0s1m*nrLGzi+hpO83E%C{@3}a?;4Y*rV<0Xnh%mXSCA)y!rXf&!;aioWLta!Scn+ zbO9UY`w6>!XP=bq!=_f!Qnjvp%C-DK*6r+<`feFIlNjz_*6sd+@54glEXM?c4Pf`7 zHcViT$ux>m%GNa**+eThjfvg1IXn>8{`gbEhi~m?Ar(blx<}?7sD!-6T-&>OHZ`_z z?yb|Swm+HcHi0+!MMe3!m%PbIS`aY-Ah}9!J*nmD<F)hlJPuX!tIQRmay_Ipd<4w2 z{&=uDeUM>M5w`rHdvCTFjaA7Pk8+Z+ZyS>(o-#FDSTwtP{uZnCI9ke3q<c$=Kb_gh z$qX<w_<cF7LaLuG?miWm0QM#rvGNg{G9I-EbQ9JV?nR#BLyhWOMSX*ht^IFj@N>lN z@69Ta8(t#ApOf`{uca>%gIMYS)wbC{aGLdEIXR{iKYODEzp;tVR-ls?*N)W=H*mhI z-%&l)ZgwoYfV}!`_>qAJ&%tPZ@2z7KwFh4qPDMK9<e;bV%#P$i{aT9iV64m@s}r18 zvP`jO>%`%$y<V@;JD4VMi+M#@cGzhItLc&v;HBj$7Ez(5kn%&M$&;P%D7#SK`!6-J z8^bf?*jJxrk@3^oPY~wK9oP$E^)ur0Xt1nYm`X^jbSb*lI$HIRvs9z@_R|8Y0b#;F z0Sb!?eFo>TkC;Or|5R*=z7X(yu?jIrNRK48+Rnk6;3rTEjG$xtsFxx3Td<Q^2<_UC z*qGwX1ClX*Q^^LLc5e45?dPq*W5di{Q$7Z#%)j8!c~(#_^D}=lY{X)RmQ3aNr=FV* zj>~heDq4LBkl1Rs{VA8aQaB#>Re$LeB!3gwb!Wx)R^e7%bjGg~m1xHybo|B>ID@>b ztTL7s0q!~TiQ_366g_2@N4No2@<&xb5-!8p)Ap+@cm+)p74A++x=;fP^yeGM=-)^0 zdr}&%Cx|tx6U^V-;D}~A<Mu@XDLqmxUZ=KLUJVb}Pn90F@=$4eZq=(J$?zu({Tt~` z_Qxb59~1i2nL~!FER3$y+UBR6Yb`@Ixqx{N!;DqeYzM7TNo^o^h#F7>Kip%iJF7BD zXq3;hADX||@&#awj?*Ok2^$Vp{r5T+9CVtpkTGXDc0w+(nvqq)*J*;MqC21BwyrUW zBx>9{EY^D$aGwApbC1kTX@xp#RQ}qEKuk&4nc7E44aRiHNF0kE3!w+Ol;bgdYQ7$Z z3m^VrSjsh=1`aRuEJt|J3Q(oLr0ebKEzr&K_^sp(K8B~h{~z|{l|Wp;RMgx3z#&~9 zxEkQ*p#7^kC4xx_$i2v=yKcL<k<a5uZMHX>CdIvFw<7IVb7z@1GB=+43CZ@}wc#A; z;j1rt^G)W}p)yAV^a`H!|Nnj2u1EO%FwMl@H3W%Kp2|)S>qoiDM<X;>xnn$v3TSF0 z(qL_#mLUH!xB&LX6XwcCq=8#!@Xx-P(#q@n*rKdY7e0$L7d}tU$(YYRrI^4WW}uYv z_q5KR=?@D#hUCD=-6Y1UQbluH`7+zq-S1gY^?f^Sp(s~sJ7M!ZG20v19n>ogf!%@A zGBjtY?@~KR;jRDt6Y3mc@jb~(N?jv(%_MaS5101&v(B>0#Hq|E^RKZXWO_Z|vDM+u z;NQ1FX>Cj1WfgKl2uNp7@Z(W*&{lePW2&G#tw!$ZtJ&5YLo^}#A~%KQexFcO(N6~S zvBoalqrxg+U3j9(P9NARDwSu}aXYrT`ktM~3Z6Pz9xcs8`M4GE_4!bVj#;5J&95pZ z?raI5$*LlSFXdj+j5U9Jtrx?|j-8fV3Kq6N_rYG;Zk_Szd(ZD0``7qsaFdQ)R=?bf zZWsaE@X+!pi{EsY@#dd8drx$^<-#GtD-cG7;waxT8Ema$wYSm$b#j8iif^s^$w=Gf z<zVO=S$`Xm9n0Ed!@;S=T1-1)!zoR*Pp8%6Z*^xS+aOT`pJ2}mnpTlNe9rRmEizA^ zdG}1Ke{e#{bVYH)&Jt#aSNJ)54gQbtct2I^TXW#+&8q98a%fjx1?-NlZ-BG@brg01 zM1-Krh?S=SIgTVpe}9y>_f_X)i^0GAm)~+rG<N&WGE<!ksIvT5$tRoD-fn+COrr^I zfZL&GN&98DIhNgQ!7hyDUIP8Al2mQ+s&0$41oP0HUL}62eMz@}sX;M3M{Hz-9wh4; zJ!mY&pE6+a>MDs`71Igf8b;nG%&i+r_H#W_$NpG=xMo^y@k(rQ%_;rrC8z12YjZju z0{o>CcM~s}63bPVudFk7&vKqR!n+e%84by}1n(lZ^pq*{Z?{rPR`tQDp@#1GtQndR zd27FQpeTQKEeF)tr25GXzwta3<j>DtkGx<HbX{6EUmqo6WYC*o!;1JV>FtP?2N};l zaZKeBs?VAOXnmtRciyQ&WohN^thd-J=@2W&w+myoXQ`nDR1w_b=>62)N$cC-^aHM- zIO}<yg%C5=_U|b66}(CRXOA$^A%~BcpPoglshSs{n|L@Vy8b(%XQ;{{_28kO{7<3v z!51T^Uk2VzHCnQ^%_75fMrwGHsu7q+H6|&}@QMe?NuAYeRuDO=Z$7p9Uj6W%J6e2H z=H5oQY!(|V@8wJL6GJPCZiM0>7eXJbQPCgj`>e>IChMTqQ&lkQ3NGd~4eCwE77$YC zA#TIX@9IU3wK?j1es%*A0c`650aFP@uXploW-1a`{u^cQ9oEG6?u#Ntlqywv7gPkK zD=h*7B4Ci-QK=z>fb=fCR|OOVq}PCyfI<N2z4wHU^p;RV{oeWQv-dt{Kj++i?)`5< zp2;j`*1YRo@B1m%hs&ZZoLX(DjW)DL<_ah_eIwQ}Ck}CZ`Erc=w{DW$Qff-~<&W~f zOdtJ|%(@&a`OIUQIg_FA=O2<jR^-16rUXg@SC8dc<Rxp1B`s-`bMNVGRc&i>&G;0Z z1z*}WW(uf{AII^ti)hwHW58i@wLzqPWm{&qldy*EGC~7mkTjE%ru=won1Yaw5uz6; zyFU#ynZ|avoAb6!0aB@y>t!~Sm$k_}=FSx^shSC2a5{MM<^9h~Mt>s|e@*C&&gVnD zE2O*3K9O5-OwJmzBK#D7PN39WDlh;tJf*};H3`h0?YS1E|IEBkk<I_{MhJ=_AOA*U z>ll#LoU>ef>RX2CjU69)@n>#h?Dw_R^8JVdNeqyuHcUwfz1hf!a`RoU6X*1EF)0J+ z<3Nco^y8&!n%;C#_~qK~tkt*4#`#(WukSl9JA;WBTw6J)eqwFY8$6O+1Ey#yW`6w6 z9xysomvtRS*m$)pdq!MoA-WN-(BT<~A7moO{e|@zL{+?3f|hMrbamLpbex09RG!=q zL5&j2-jB}mL~PW53_%rseAt`3mAfbXteI9XC!IjkbCCN8M}Q926gxGa79#ZI3gitm z3lXpD19zM%L>8bSyX;3n$Hj8&OYGupENmC55#A;3R$Q`gE2NpCo<F$D#sVh1QW*1N zaPj4jQOKz~RF=REJ6jtjp7>cIJpK#M<Ns2{_@BiNh9SVpmxB%GST_c!@6=6j%+b(% z<^00YL<yTgo6eZ1Ky4_TO_g$Zqb13T^L`NM9sl<~t<UbNUNtRI7AI{`7r))L1WRR> zc{&tWpo6Usa}yymZmNus=!Yqg!uGi>%q~CoA{zczs?>iR|6XLk^R{ORrJ}(!TT<u{ zOfZi)(P7AR4x*7&!<YOO!Z9bF++L5*MfHDp(`EfvTGIc{#VV&}^pb7A5sF>_(Ly{f zf=!c0@46m-o@SCPD}<c-=!Z(lz-p!HoP~Rq!w5^MUyzvm@4xZ??Juj%+#0LTY)3)M zcj~LYv22q6Lx8*|N?pG*p1un(s0OAb8!5>Ir6&px!{+A<v~kIYJ(#!9H~%kRI8ZY; z*K>xQ+{TuB96~>Uj%~6-g|hx3K!Do7<v_J?9Vg+eR{mA7!H7y5<Y&+XOag}GW<H!} zoZE053uiFTRP9uV9#UHA?^cV1)fviaVB^|w$Gj3?641}%S(iNu%9XZ+3n<j-KhiJt zb@1;7JO@BofH>lt3Ad&Xmb4D&Q1Pus5upPo6C<?k;fy*<7G0j(E_4L=SN{EBRnp_; zZ;EpK+^`SAGt0JtOfUai1%kuFK7%Nhddp(kxFNp&eUSs&Aj4g%fBx;?_$fK--!Fw1 zU(g3WJ`6;AYEN7}Uyc(u9zpu6fl;4zf=4^(QsNTJL)QYyPD?iwxO-QOPy${zcf!#y zH~K@`rB9(wtPP3c_3~N{_LRkS5%1iQVUo&(tOcLeh#OUxnr8<sbE8+A`88G_N@OTw zZx*`zU(6MMHBY2h8FIm|G-z4rB1daunlyA${-qUD_-$B4pIK5qZosh4+1#{l(>Bgp zIlfd?#XGQ#n%=8j7YC1V<78E|uYqWhcR#3JcHv*SzxYXTviLu5!M_fETShJL2Hx=^ zHJyI{5(48AVyRc==GHyo`CS>o!7;gp1Vl}RufS#V{hsfHCCN=QQtkO59}HM|ne@=$ z0v~^ReR-W$cUFOV?|lSNL+ICl#OhGzksY?oMwm?kjSAu&X_oaI*FaaQ8p(!1=UG?` zn-OP8rPe4gpKQ&wB(_2kMe~v=U8M6V`bL$@zYH=Nl2+!Os44Mwx>HWS!@K4;Y;I0R z6G0p)YuUsKT=)!A+#A4>l%pF?Rb$6u_A==u-9w*ipAd^~Zzo}dO;CQiC{M~f-4~lP zis!dc5lbFrCG%bYxYIVR#38Nzv_b#)sR?<BW*m#HW9$vlVWrK#?!qr{T%0Qei!qz1 zy}ZP*_OlwMKN7MP&1|2Zs<`5v5IzBiE3mXoIB~2Wu5>+rkTPUE6R%#;01&U3uZxkC z;Px9rmW7Bi2O0luvrg&@xiyBAn(qm1P4TpvufRIF+5a<e{YSVn^X%yLv$_2lu#3aY z3>UMe(2-XYM*bcGu^GPm7vI?AVfio(G(9jvqH97Da+UFxN2QT?Ei<^7z$aM{c<pe2 z_5|Kl6Q*pC-HW8<GyVC-c;@jZ(h{Duj<}Mdh?CnRw09-n6J_XqU#9qa?&)h=j3>EL z5eVHi?Q$_ysYqP3*Z4?A{dF~mw@}7V@n7Tf3hV$ec@4L>&;v<QhLDw(FU%dwp(UH~ zzJ)E|X#HAn1i1U*2d#k=Col&HZ(~apvgcz4!y4b?<h&nq?a_bmF3Wosrj}%0xd$B= zO>^}ggsa-f-@k2xRZ}0luNDo{%D*ry8vV~(0T_;j|3jb)taBYL5tg$)&3P0oUFF=U zx})B(5jkGgKst*_W1p_ZBKv6;N0!i)NA9diP{&`r-gg8z3%rZ=q<u^51E~t9j<rm+ z#}D46KWwf0p8M0bwWm^l%-Y+n>^a|uA#9#FM}7)(IUt$)|1TaH3gDzH89SF#;RK2h zg_`xE-j901!z-5^6vqdqE4#DyEsj$h4=EULVB?R@=^WO2PMIXq`HP?k`%{ywthGH6 zZjDHz;Ja$fq@**`8CME8wV3^Y$M}qP3&G$K6I12We(4~W$aGDv;Q&yI5Ar`|#ed$M z|8ihB0p}S%zRc(ksblp@w^NAD6F4`FzT&HC#uwz8<10I5x~kYb4RzG)-oFo&EH}W3 z5Jk>7Iib>#*dyafiGwJh5$sa2?U@b`o7;}Ss4OKXV$J&x$0%r3al^=WSJFs8xX@1n zcV8JuIL1w@$K3|CF>MB5nPpwKPbA+C4S(dVOvoGr%Lyz|HuFqUmBaUrFK2U_Gi-X= zty2Wh4V4L5!V?k@Inm{LmTNc6@I8wdZ;_U0^u0dz?v_Ebv`!%<&hS(jP~?@sO8>QT zUsF8mB`ZR|l5v}#LjCc8^PD@=jwy)M=|o<7MW7uyDmkbN)^a#U>>H2=TiFb7(XiUc zUKoJ7V6ujIdkIU1%`73@158~317ff+$A7*3@l&g~Pq(flL3<AhYZs*Ou$%1SZuWH~ zJ^!;pbQL@9)7IwINu|MroQOYXFx<`jzWKyz)7KC3O8aXCSz@nxsi%KjLwlMfKv#nP z_cf+bLMsScm=Y^KHw%4Wki6x@%N<1(+dY0#0szZ}Bnxr%?eODk)n^Bi#W|v#Qj?Jf zv7}(N4TL8r&9U7`Gwsf>RryZge%loEm(!y5=OL<lNomA3{$=;y;N}m2MzL)ph|yx; zEIoZj@UF1B6<_%!ebq&hu9x(m`T%aML1rmX^5J+ObDHOnrsV=JQ76NEBY0Ord+#gr zF))+E0Fezj<E22x&1SylOyn>%Sg1TLwYrv8z22j{&+WOgap3J^dEFK1wlcwM*RFua z(VofnM-VR_0V-z=*xX`NMZ_s&8tHG^F0&Tj<S(4#n(vT2D>P8_Wcybabmn1YwwxzG zgo#=LT@p(lHX=CD7%ggS+m807&32@15J|O0B&*0|T9c3TC%I?o{29bsWl-rZU;Ac_ z%c)G>bH(#pTc+rt@9Bl#<TK{XP460VxR>uyMD3U7(^!aKKHoO^4CN3U@zXDJFudU& z6OOg1fb%7>@cyw;a(>QPjA$XT1=D%;cepzEG<x~I&P2e3)+hK=#YVZ0{-OsyO0$WK zRW;KZFZ$_>3SSwnWLg=;%a)b!*8Ke0l0GHql@`?DC@pQFWsLVP+fL=ALxHi2=941s zg0B!N>)GBCMSFz&<X<57NqGY;9Xxk0OSVnoD{-{_x)TQnOXJ9h+PX{g_Sd6bEQ+7N zV|jR2-{RIwMX$y7Lx+Zxsn73ih%l|5Zby-`V?3{fPC%Ky=6=_O3HKKLym1MkwTlef zr!0Cbe!7L{l>J@C9|Yci$t)7%0EF3OvLgeS{N%>nm?XC<PBJYGd`<lg_6Cww$g5=M z>Tv{WNL_rs6+Up;6i$Oz>q?K?FR_vX*$3|!Li16o&tylct_3IM)CvYy$-&f%iU`0^ zQ&HLVV_ljSoUd<_?2-HK-IGd%amhz0(Mv`9EY{JJ%RLRnDT#BNWc2=dC9&9#l<L@l zSN{+gUTs?yZ)ejqi$a?@{}nmq#Fr<?B|PZ9@-=)vh1}0<@;WWIWWfhu+7~%)nA&Yz zOTcWEvNXQFLPO7Xtv{%lTs&^}#3$t<H}*u9`lTn4MtP{3--!~2{8Axjt}Zm}GWwP1 z(*8@?WrYy?dTD761Ef=~Z;4zl>)FS{!G%Jgy5euxZb3HTXIua{plOwC?a>GEHxb^x zt)e5BuWxZug9Ga}q3{68=&ly>`X;+H(AIQ5Kh;o#io^2B_b|D5hlB(<<4XIM8jC2z zR=qg8!78}w=s>h-^@vyJ@cN_A<y0E5C(Vay<n1Wj!4+0{2vzW;?hH=x|1t#%ZgCId zzJBW76r9?uq`NK^ac3w0lelBTQC6}wy|ORpKUEKBN#P!T{7n9F_nx`q0X9OnL8Gxa z6iikt+B~yHDMtO>@I7{?9a?}lnEz}rRbg`2$BDl{iJfyca&8AL``iR)1{QWN!3m*f z3M_TWfI_<Qf%MRzM7?+@pG54(A%KCe)*hq585uxq8Uy0k(O5O+@<{2be9Y?IB=_l$ zx4*36$Vm9BB(t?o1lhV4?=O|NE_$&f`&G-CraI#%?2>+mLc$iJe9CFWR7Gqz^bnv! zE39y<D2ng*gvpE%>o?X*B`fLgD6zXWE!XcbW{WW=^YCSOtGt5u!GVaJX>qN=pyciz zC`B&XXz4i@Nh`ys<&}7IMB8Dn-AW5>Hl3Q2IUJ++rEGvynFcOm>-*uSL^jg`e&h5b zP%V_7oXn~!LYt*#4cP^uHuLzT`!Pif(|!Wd91rp0%jfPf*Gd{?8L+XrZg)Oc(S^AK z9hP4QpDqfERuY1IQWomV99$R5r@5WN#>@L?ZZSE#8ZA<|1u|W|#LL@wEyzp?RZOlM zrI<oIjH%?dygk?qM^9GJ3sogvm{s@1V3@ncy!gw}^03Jrqk;FS>#BD{7oHQHg%stK z2Hx9f!mCw!!Hvg|{suek)6>B~p9kEG@-5Jwi-_&%C|Q~SF#;P1AbxtiKGcGn#<ZcE zdTUW(?$48-tyvu=)vl?5aw=k0)jEl=XL{Jde9<R~W<wlTDNjBiDd>NmZ5)>^(ye6Z z;M78n5rTRXd%{TaJia|U|0j=5pXs3@?!4%yjizq;2qYWU6SX27SI=rjkn<nf<PGp> zvoMr5Ln6})S!+JJBMzwGs#Ip#l?01O^f8zbpS*|Bi3aLC+RaDrQ<y}%{t(=-T=1Y` zPIJZsMzINIO_w%*l@^}W5P#f@HXCF*pKgKyC8rgD^gANS4Fq49Yd(gvX5NCCJHgFi zk;jc;z^kbBAm2;C7&UPPMI_Lwz+Bwvd&~Q21wRc%Cpi(p700R%<kU-dTB_#)1T%D- zky9&3k4vrcgS)~t62|YEd<@|Q%qQ7FCi*99H$Oz;BiJ$K${%sBZ4RZKo`lj38eV6d zK(FD;R7u4SXKDBAt9upBi$3npeEZXT1z>1WgtRu=!L*q2Bh$3$3epU6nEUmdJf+=D zzYKTtm}H!Rxuub@ko)XNTUyxr?7PeZNoR7?qi%pt=KE%36X4$jz_-70)lR@w_Kvi; zUS3Mp@y)nipUnskHj6`9;9<?8UZC!DiyS*STIm@i4P2(j!>yO-IvkW(S&$O)Ne@7} zumE}Ge^DN&@smc(dNr<qV<i^Zywcu|JMA8zF`DBaCi1HidUam7&-6D9dff0%R5mkQ zaZOh4pWHo(>8BHzEkY&s@}7VGaBtUJRym=s=8AR6wB;UN@C{HXTuGqK^nHueDEw7F zksk&d`1DjS>W(JGg?_>(1(8WP<$@g_waE4REJGoFr{Z(B666S9I0oEq0u-ccO-Li$ zwJeqx!`sjrX+$M=3aTy)ll%lmPpBgU7{H8PEv8ek>0grNkty*xLgkF3Wz`gSW~{N^ zlAu@#A#nR5@eQ}JgHOtS!Tp23HR-2I!w>5pe%0w72`{gtz|(G+<Hd8gMZH=&PNfC& z^G8%5K3u_KbX<-q%$#wMD`|X0vB>V0NQ`@gbVFF^eP(ZJak1xm^CwFz9oWuDoJhM% z<xZCT#0Q+#NzMGrk?r+6dtd+N-qCNf+J1Zsmu&!^-5%~B;KfI;Z*INqdC{&Bayj6( z36eR`U3RPd@!_mfLEy9H)3wTR!>p$dy6q=}NroK_?_a97`@$||w+t>&S++%VvubXa z^>j~TBc5NZH;OQB)8hNh6IvJUPdYj7@A@^y8EV%y+AmCrk8#n*jY+qVpR6>ozW$k@ zRTV$=$f@w<jqJAt2=(OmWM~wAIe)u;fpDTyPP%y8fTc53$c4yw4i)gu@>^o*cc~Zh zP=V!$NVjX<B}bqAyujiw8tQx#cE0B(*2!GTdmk}rvL6X}iz@<-I#{~f;h%~+(!=KW zHX=_*R8?AjCojK;7=6(OAWCEbxee?h%gDX6(7mE2oL!V!lt8_4`nCIWB{e}|XKo6* zcLIfioXZ<ANNV=0`_lzePEN3sK`t}XLHYbaqHh5Gw)t=OIRg?)wSClSNqii2GN^R1 zvcFbAoW`>@W)(F@o%zb?lY#W^k!P`2cAJG@{j{XN&SpD83rfGfuPEVCnsdvV)YE4z zfCh5&6rX@?xKa1>EH}|&|BHQL1<(A-lXArW-2eOW&Y(ZH6>GZ<oF38qGEP53{uL8H zO18V1I~p7}iidZ~oGe5vR~6kwbVzI2rs>wWHtX}oH|;cxKQa7c0*XS`Pq|Z?D#tJG z)nVt&oBEZix;iJ>dzY)sJlp&^web<ldVn3pNt1nVi8?RF*l3#;-3nuA<oXjA4krC< zdjE!F5+#rA?;4rkY3SI4oHou2Zz1newsq7k<<@=*e&IZ4D30Aw#=+y7S-dPwGrG{Z zbAsi$^QQgk`oeeKi^n!5m->#^4!SFF`Dx+Y>*`lz0Sp0}xUCD_htY<DYSmMzc^j&$ zTHoCEodiO<1z$rIzJ4WvSRJ7SY{5>;ij4p#u#H}p75UL`vO((sDRF>4ddN!P>2#!@ z?n=zO%)mlZU1lN1A<mXNN-6O#x6a_O?xw>*+rd2tnT5|d@^+cR8t;G`j?AfX-RQsh zV;z2jp*@-Z5O`ip!b5yGN^q>p`YAWRS3wLavb_@CwI~|8h-VM#_Te4V%9j#5=w`%n z=ErV}<}~f!W0LBQsq4C_?q*h!J1lX3O#-rAy`4SU;dGiCfbz&c1dnl+p{bsW^tBo- z4EQ3WDc<<)?N__IPej&{(F+fjTv#awr#~Aiu<oQ+B;X7?IH}#6UT^5vhtFATouvs| zxG<A{@jRG5E~h3{Sz(8-q;-f;n0mDsSB>pja6UONT(Q=j<@-`MbYi)x|1Xun5EkoE zuQVf>d4NE%a4NW^n8{x7&dly}Y=A!IW@JHZLQZJ8NqAWKm#LP9ag)ZweM~_^HUPuz z`!yV`3W~U4sKarF`ay~pwo}F1Pa}nq9t|2DRv}H~oMW{&GEhS-HG#to=Oj`~_R><j zK3tKcKN9_jfcH_K9e}no*T(PVLODpVhhFV3aoJI8Ep-iX7Oahburl>bhm-n&uPxE3 z^A*ROqzf^a&8Y+Zx>!v9uUH$S1ER~7CI>Ku`K*_$(bzEzs_U<`&8*V2pW`;(OC0-E zhqahsX*&7Jwgyh%^$;4sii`i{j$vM=5=MFpll&1NmecG6ue}WzPg2NPP9WX}IX1-s zCYO3pueFXB)#7lX%T=V0XC&&GL|}x^t}|5TxVn}2tjcV-xW`t_2t)Adj;z;~S$4Z6 ztHl-|y`a?+<Nj@Z0*=_*FR;t(m#C<xeM}fgLVpl`Lyy8m1V52eUKytG3f3~!OW1qt zc=8BlRc8R=isOCPBziuI^|hEdnZ2@Hs-$<gFD-q+Fd773aithnG7he?>6Qa}*H>iY z$b`sjYT*h1uEy+DU?O`Co8GO@<wuu>+MK4z`}+bQb=mC(R9cn<cE7%4xRjkpSL&zP zoG64@Y&AJ>{u(-4T$yzv8Q9x#^#p)i{X^hj2)@+bYO%+wRajhCA9BOljDw$hbPC(X z`t2;#-B96OBo^;%vLsF-GwObi!4hWoD=8AY8zkXLGGzNm@|P_&sc2(?I6fv3;z7Cu z=RQRS0MSeYN6LaCvxKk!nG|8DJt?sz*RR@uN}75_?Hme_H11wOi?GPr^rB8qdP|kk z?G2^T0gsql6a4npja}#QV>4~HRWM_}E5oWSt}M*$IvUmyWf%z0$)4M_OxLM~-b?Kw zU#6ZXbCbh&9nh8G3St&sq<WKZcP;+Y{=Ia+vyW+6oO)vJ^3+=zSn%74e0(NOL>)CL zNseKc0v0Wu{k08ILhBxq=HNW+{Cdv&OHGFWPAx;-Y&9)<vjXJg-_NDL?YmSDT_&dM zrh^s~nip$T4#M5wbla&ceitD0t5jt--VdspP;M@km=(%@2qFU*@sEW#Fdfo{=!!-J z6HHQYi=x`}Pv18I`BqMZ;s1RbccoQih6e~+0zW4Y+<foyY4jJ>{(9Pnt<_W_wa6Cd z4@g-@hvx`{G)v-THL+)rlH}I{CdMC7HH{P2P5SRgTRlD$;r0wq_AK>r!(Etc;+gH~ z27`z^6Y{dNsxO_A?LW=<aXp+Uc6mzIMMjh)WO+Ceco0)vJ9^*jrn=UeTGIbg$g#_H zJ*&)vZdAsbXqa8u;sO7%lV_{VzcV5$UV9UJTZvw<j9nMHE$91@G}M?jVp`cJIGdZk z_6r6a$<_PVbu5x@8(2~~p|q?3v)k?xAfKCnoQ|@w5xhQk$(<UiEM0_V*OcOuO?Mj2 zjoozpH)e;hoDwg+&%v6f<+CWuN~3`O)EmCqU+Jr6mlTdpeCLZo50!4N*v7Buav=c% zBegKyHj8Id6_U>^7JLgo8>L%{lW0~A-gUb5*R9eq7nOGU^%rWanb{I5^QNG9>+E!x zR_#H-L=uHWG?h}819jZ!pzkHf+yZ&>SEn$OBH8;R?5N+{n|f!eUg3^Cd65@s``J#( zc0HwUK3X(<eY2P1c@%hm1dD7c++=K~8ATc&+ZUlGtmBGOO}}Y=Hh)#@ao{>VhJr4O z&s@F2md$N*NKaYe@)zLW*i33u*JtachJ{Jqk==@)JieVke44Hj*R;FfKk-zJttN0- zjqDb@<H+#en-Bk`1pgl$iQHo76p`M@3A<d~s3+_}^MTg3;l*@Zz+n1bLImo*>oSPO z+;l5_D$ZSO81Bl`<srJjW_|cvlDd5Z%os2dz>mwyKC)-@P<|7B1ZqrwLFX~PHz=@s z7HGdn+x(=s;S;h8*}%oe`RqvGuMc40*WdWQ$V-7pj>rCF=7F{FEixk4=$O-#`k+cV z>Q(9*{*qkC{rqjhr`0)OSqlEt%I0Bl{}8lZ&cM)fc(!j?TAtLLUirF{!H?Osl=HQg z^a?clSxf^gWwk-yDWff@YFm(NYxP%x^DLlR<#qNC3)<4LyR#w#^2OKrB0@P+3QP`% zn%T2;4ZE&d&z`Hi7_AHBf`A~Lbm+w^`SF606R(Qn=k8tz;5qCBaot-=RnpFOQb_3z z7?tLvHeK#SaolAgGFS5@PaWrttyT-?6c+$xdT`dd@0FW$w_U$qS1vS#MoH9@dGZw7 zV?c?Z6b}&nm0Au!B=s}p&n$;b+dB$;l5gsh`6k8rnd_v23Zojx6wvF@pb)?1T3it8 z^t0nnmDd_|&2gtEC&dl77p$4d{>%{FnUXhS)Cu>d9}D%eiDNK+&EYeBAFD8A<o5_i z-FcDD$_l5M2YWgRD}d(%u;CzG?yEAZ)3>O)gr&}8<bYyMmMfRAf+FhVxYV+GaDXc7 zIZ%_x_xJE-P^S1IPwB(ieh`ViAHVNzFTv~DqM4{BlF9gIwui+3m*nj9Ah1V1p1Lka zG5Cn=v5c{c=B2{rJyaLB%;@k5Lk)rGuEWV@%J~lA4@Ux7x1&5`e=Sg{A$_t#D|ZjB zKt)Y)lTCd>sCTtuqy&3x)&@;}d$_6-&WIKUiAt7D#_+Y1ubi6c1c6g#jvZzJL^tP^ z79%Kbj&Im05Lwhmtq_dX)0^jfy6d2ofo@!-)OCg=hLhS$cmrU@Hq?(xB3QO<vKH1= zVt1`j&wBrUbP$Q~!bR-eT>&#ge)Rq@MpH_W|8!+LT$YA`GHtKeaBrfPsX6`Lj9+P$ zm~6QYBh+2)Ho8Z?3j6z)uDfW%pqT|K<B@my#%q7S?~oZ*aeN7{>0ym>VdM0iY7VL- z!p7%WgP@!&>ZkoKYz=y%IY*=etuQ=;>uJfD6F+u8s8ZSP6yr~)ZJJRmnmNj5cTPQ2 zFL7<Rw04upFb7-ux|(RMCT5Z!GL!R{1&~iLgNXY1V)rvv?doG%agaEn{QIT`<9nP> z`|T1GhmqO<BDpQ%G##rl9G3k$LBo{%>jLy%(jV(tkozD03Ow8piFe0cc4>PR>W}ZD z6l3}Ye-F)MkS1kis&j@3bXd~ar`H22GoCEAl|}OyjKq$_h#7Cbb$nP*r$3zqIZo#W z^AfN%<k(KnA4NlY?Oa&RUSq6u3>15>)Yc!@?-?Q>KK1RCj4*NSn#QP;uf`mAQznD+ ze=JR#UcOp10sT3+N8b>Xy7CN_%*XWkZ1j53WaG*|&<0@J<k2hb&o$bozAdJuNF@{| zakJpSSw!SsF=4H?4`2$J@+sk&ZpM>&p(rxyZ+qR6>n(IZgA+~xNK;KVGn!#AURgVD zqaW0aR}kfoN_o<L`Yy6H=nIN(ez3_wI#nAdZU&89pBUmv;+=~WyZ^-ZqyJ8QCFymQ z6Rf+f2ce0J37_D8&;0&ZT(t+H1#SE41Qg`6+u&E?$^`YCzf1L00Q`FAhSe+W<rLti z)SACNbw7>9NXaIgc``rY@7p7;=NA4@yH1k^FW+{ViYh)W2@l5Vc?kz+Bc4>Q0R5#v zW(iPuS{6A9XBXjgj1h972V1!m&V_mx4wJnNY?s^*xRs`p-O57Iu=&2U*NWU6&IEt@ zV?Nt&Y67R`N|87a!>98|Rkw!=t5})V%no5mDM}Ezp`UxXm$QX#+tGS-;1J?x?;o3` zc(pUq;sB?%fCf@6HI8#bV-WnOva2j74~cHycwY$?PTV}g>rfMEtUPqj5C}sIB)#Of zl>A=t(pNllc9mfxn^KOuWV5A)G|~}hSF*$x*m!?Tq={f%ZlkUwxRK1k0wOS>yEpV+ zfp40o9fgoU$A=V|tZ%G*;1o461=<}9gut<M1{yKNJof92!W=K8)=1ny)iwi^*g$Zd zaUL{s<ChSVv$1003B&HmQfn?&dQZG`I~{YKrjC2?DSqnk10%OgWOZ0$VA;X;V@@>T z_INkCGE9zP8S}OBAb*1Ka1--13AU`QS3@&?z}eT>l8^<^oI=Z%11h0psi-<|o$1oj zc~a~@1W%%m7Vp>_wlD_J<3F2Dtq=hcWVtof!|)oBzS(2Q8Pf7Py=X#C%Rx@9T%}G+ zs!xaz^Q`~Q4TR}(!~W_~OD*MEZ6Lh@t#{hJqNLKs-i8-alvwwI>x%uomSs!((d%3q z?kS-)BCnyr<g0dc)7XN21-J3LB%7!%{gL21r#yg3Qbt34#8Q1^PP+Y=aWXec4T0G? z?zm`Xdn|i)&j!1O)+jac`Un!)-Dl5BfrW$EqK~La=C1(CUKl&~Z-1(d&NLJMp096c zq36QJmOBC_zn869B6e+D>}+42(af4L#*3#Cn*r>g$D3EoIJ&lEKk9L}_385aItecs zZAbc=J-_~hq3IB2*J<$Gy_-7_1^+pkb1^e!&u6US;z{ZK*NOXx;b8Y27dZ=8Xd3O4 z_pPvIGr38C4bj1(8kUbwcsY5(D$A~qQk3d9jSBs!u*^bG>Ma-RVo?O7*O6$B##Mw> zn}O=arJ<$)q`o`!T{%Nt_J==)=I$<(<<ycBRqbRHH9f6*)E}YUS8Q1v_y}MXLU$FX zzd?|c6{ZxK&P5hs*p%I>AAiRVUHg{=Joh4M3&fTq^B@KGCR$g{%!u{)1y&DRaE84j z6)K?%aWkwSTaCNlZvI%X|I(#ort=gsrvBwQ4VEoIN!0A%kCxJ4^OGwRjOVS(H$^m| zcW)g%9Y1VFA`z|F@fAIpGOuqE{r;+LE6_)OQ<u4aMf83AEtK`$vu7Q3)^@>Pzj82J z)9E9Rs+S3UYWZw53)~_{BO|uD6JmkD4zJt~$1H~@xciqIo5+X78k{9*JyZ)f8rA=j zvw?60HeL!D9$2r&PS2<EwHADnEZehuO#EDC5m%ZKhm~(}Q}H)kSc}HIwpN?w>hyW0 zV~U;^*IM43yO*nbbShZMmN37!fzX_tbctlsL0IuCq2BY^Ad;S4Xc4|~MT^=9FS)Yi zhOlTm<c9FE?rj(X%-i`Mc?jT1ey}^f#2>roPM9zAB3{*wN%io8<tQ+;K^LEQsypc> zFV`)V^YHiGd+#$Z&x)^{1vQq2YOq7Ae|%s?Q9@UuRux8Sr_i1gqj%Bfn=Z-Le<v#w zEZD1Y)UB7M2Lz_GU`UZArJ~h1ucffQcF&rU`<1+4Gj_VOk{B54{nd_it#59WeD~8_ z+WG8$aYt5=pH@wj!viQfg)-;p9!$>Bz0mJIpvy9-4&dIDY9SW@lt{oNyU>S(CJrul z#o!+T&+XN>H?9O1QSyi_pzkJxl;>HO&5#YHijR<2Q{MD1Q*AaJl_1~aT(ND!W-Tn< zJQ_5)VK>WOj_(cdrn@0Q@>~f5r4|T?asi*ctbbkijc(8#_SiiCm6)aNM}iAF6Bg=@ z1G1J+LXxv58B9OoCn-jm(+1QDDY|Pac5%_mH-vzEZ^+VFv~b0q1?%uV`N4^&Ph0Qc z-h&hzsAucD7Z^ux=(p0}R8|<xI7lTACAYdhR3j<yVB<t+Tnai!xp?_@-G&x_0CXmI zk7#(q9*5}yLJWW^K!2kL-X+jUAa*X$VQ5{b-I;`U&jM%RveH;dh%f7qNeDw(!3&X- z!K%3HIu%u$q>q}gL{-_P>9i|(?8=-&HoYI~GV8hU71xD#_$b;^>|w><gxnTC&kF;< zdh-7^aZtG7C^s$3WxJSt34|pW6(q4!O!3o9@JC|Xj9EzRkuj)7a)9>gKK8Gu7HdEK z#{-pjuWxSNAlDb}MYMBJ;agYz1y(3iztNi%ECXPC<TESLTF3nvsw=8I9K&7!0|!xK zW5d6M)1I9{Irw1@mCWBZY5JG72at$__z5=v{t`UKn;z)3xSd+p?VlaQqxT5+ycHr6 zlr6?#u1mGpt|q|vUQVuV%LzB9Rm7BXYsQ&5uLAV{Js<T|XnH59Mg4ZXA9mkk%yj>F zp&$_9HM~1pF@yJP^;Dq4F-$gpL)cI2J~=%TE4Q;^U+x0)etvr;+Z_wC2jpCawRHJ| zAodb7!mWMahj$y_Uu`MSTAFYs0CLer=B6vlhz_H~fFq)Mgvefut5XX(4^q7QG^ALm zO|0F8)q3yEby0as?Ue`+4r#W2c9t63Uj)yY^Syk{LI<ot;GqV2kTL#wV3CR^s~7*X zzsxiPsU=*e54~^yu0%UQHH;NF{_ur!-~LVhrH7T5{W{Fzx*QPp#Y?)CxY9r>xI{m# zZrr*w0PQ_;A@`HUs^+o9Jcw&9gYtb=JNlF>wO$KII94*M6#H?v{Kk6Jz`beB+S&i2 z-Tx$Z(`}R}xnv2(;%7naaJ;Uk!2%fz`NBU0dDZ?=ypTz`&fdhz0T2uNI;Vmg9u{z` zC0-@D52IV-ZIiG;mdjYFgR_jTrPKwSBp!?-2gSCzi-y9M8q{vZY6T@i`)^nvme`b= z-fV2b)|iTLo)BWh=w%4^%{cE5g-jCn7GghGjtaKsHF8o?R$k#qt)9{Ir}+T47Ypdi zK8510AoUWP(!ZQd?#X$JA?uRL7C!VDH!Jcz96SP6GrL`XPbUTDZBgc2TK*E*>f6lv zvz+{Cr{0ZqpI6j6e|&Bml&V=*L$)q7TVF*VTax;zj$E0pz+9Eb;)XF25s#iH%a_i4 z$S*nQsTgX8<44ONMW-QnxX5YPxA-y5Hw!*1bnAil3p_!!1t%GP_on|e0MZJt;yHQG zLe9RXiyvN0>thQq#txRJ!;{Ch@1og-C;4c4Sgr1SdAHJl#!@HbZv1JM$4+;|iOmhs zXG)#Y{6io_^l0`vklUgJXuytbX5FdzIq_ysX_;l^M)UBDHu*67ax2a|aCg}svV@Sf zz=ETM_jV=yWwn#F>uDo9us_XSecOI^ts)${wVI7KM``4?pe3}3-dvJfh=}%zlb&mz zb*BeDE?5H7+TT#)H*jLqbPkLcmYAYwsAoeWPfv^JQZ@qAF0-FjdNY}JcHw`GI(6OD zU=tTyvxbdgk;f0bm?oY~pZ-cVXskC1k65$r5p4lXwhTcInfxnos!f(-sX$o$s3ghn zh7jg?ny$das~uN>TuEiQHEQ0qa5w(>?U$|(N?*xGb0}7TSIrvSK#YEO3-KjmoW$p1 zjhzDhj<#g2o~Ns8{}4Pcw`8)!%LhpNNoKd{*pEVRS~7FsqH@UXT~D{R^l@`l%<|cu z5MtYc`-{ou0&le<%vXTMJDRsg2+uj7t03uBq&TI(bM+V|Xgpr2Gj2>Ni<!%hVG^O% zq4d8O`|pHt3p(84KD*$`a2rBbI|+7-7v7+qd*vLJErO6e{W0wpXSsx2-SR1j+isfU zHd$EaBaYa}IjtyKNzJhn_@m{Z(h!uFp>7?Q(#4Ky4*u<{rPLG9Yb(|GN!Bai)eA9- zw8P>469jem!jmx+=u!ditKH&NP!oJdX#dZ<wg<`ZC#f9Y)0ct4dbXk^<1<z`!_%bd zvYz<<O6{WLaEI4A$rD4b0UKK=PFxAAT9&)j%mZ0%n7CQ(=GYuh%&*!NgZ{2$zb>nQ zO)o8!IUT9i^a}lc)&FTQ%J4@?0Dmt>!KKu8;JZ}W?-1=Ha#Bu_RPd&t-BNb6ggh7s zIAOIIc7ryU>Y{qRI*d0{vsg#cppPgiSn$`Bh@lo>Q231;QBM8*Z7Zzw4d^viBnk~~ z8)opLy6l`vlYxbo!s6zn8SBaE_Y~$zWr+GecWbUU*)3CCAcxz*R9Y*X659#(2+_2I ztVRvrl-7#2|EvZ5pAO3B4Hd^EJ=G@N%E+g|4bxIvk1Pw99OgVyN73X)dn=~ejdCe3 z=-`D5UrXyQI6lL~wBQ9Z?P4D**&75!MuOfnjJh@U#!madz8rB>YY>Wac0^Z^WFng? zXAyhL(Tl|1uYwFoD+!Bdyx_{?6<R~td62p^fg6)nC<|!)wga?@RRi^P(6h+cOjDJ- z|KH9RcJmk8>Ay6{w2@8?mN?=vKsSA{c9t)hW_gq8T67(}3a&}*E}H!tW&*nW8>^lE z=6kv;WUB}*6hguJo-DHG7!#{!fWDmo{V-+F@FtrwgT3p{UXqo-v^`Ua-IyCDPWDp4 zUt!3U`ux;OKldMk=2x9+*J1ho>9T>lWz;oY>aUuIGW4>3G5skicf+uQysN6~kc(%i zuPNdue@g2uSVs;-nlYZaTb~yKhrMA|5YR!cxZ(aDY=7ygxgz~YR#i{Xmz&#V%6SlH zl_$=Sskhw^F+BNXIo&w~u5W6_+;*5X>rDJJQNOzIIeLK4v_=ucC*bQeWswmYjqC_F zj-`3bY}qJ9Dlj+M*AKknMK|v*Tog`AZWx57k_zYVgbiidJ&p2E<qI<Xa6u7Iq5&w9 z8<8?frJlCN8!0nsUb`6Ih)o-|E3h|C{zay53&O%yLK#06OsW$QeJ9Fp`xRrZ1d6f{ z9CebwK=YR4Xs!I5DqvYO?ryh?Lf`-4<2U-e6J(KR+)xpc@35axx@B;`BHO(JHm1{} z^=A@e&y5V@u8)59UNJ0={&CPQi7slSHfCq@01ix|n4T_LZ`kNx%RHJSU4?J&&T?_P z2$S7+Q3J2deEenxP0Ks6H?bA$5}9((o>K^Y=DN|(f5CgZ8sR7YV|Ky6V*KUUQp3)M z3WTNQ`uMg(S6M!!0VT+YD4JbVjrdqFK>m<);`Z%iEmqAGZgn?|z^mIl20^c4eMHy- z=&yBOkDowYZkJg>eeXP{nQN;S4v4)|9Qe~Mu%;b;o$~&#a`t0TP2tSZ^=K@0Tdf`m z!L3f+Nr@(qe%SlTCqg10bbmb<5aa@`K$>oi=J+hrQ3LT1d!kYO^mJ26<VVkvuWtTm zZ7*y&SWBjNDMCRHMwpTy?-BdX4xJ}M6>nuUl=AMaxBjKfy8x!5!h}LKm=MaxJss13 zQ!N>!)G}dpJ9k`8K6gu80&S60WUSdvaXQt@O0%y=w${vzf3wk*UXfxI2)E$~v2tPG znUfxti!Zv?q40|ijH)r;d)qW7f!RX!&npbAm|6La2!8jmj!qU*7-CgJ29GVs+74|d zKfSk6Nfe!+F(xt3FQp|2uBlett{Zvs?%E^BkX?VI?2}&XJ?LX<3VX)0;QhsyW6O;e zpSvL}zb>9KBYaj-HmiHmZ7iK(SxAx<jD^yE+EdfsXA9*&)R6SwGbas~CsWp@@(^B? zhBe7UXU1+CzK}FpQ}jzwmX<u)feznkPh<7vCQ3=_`og$E#Hs6PkVCNM#eNsmpav$v z&eM0Q(J%D4ZDIe7g%@I!J)!Z|XQfROrLtUz!7a{%Ag8bJN(Q0Sl%g3~b({AP$K9tU zO!{{@LW2w)nyynSavV>mr$**5EerA1R7F@xs<gbVbWIpXN|Es_um4(I&<E0Oda@>M zV-tX^(G9a9HaNw_mC(PU(eojAmS0^{R~6c62dAfD6gJ=^lcq~{mi?@4zKJ&f+XZcs z>09~m)WV47>kZ#q*SxJX3rlqE&LdPUP0=^Py2;%<-k?1L#E<YP`f&8a<tQ&b6*AHh zG5~6<Rn>wy-4TQ$vOR~QEIBo!pSWRIfsW4m>bkmrix|@W&X1e2g7RkOG+b;7Ag9x` z!F;K#ZmREm{sw(EaCF-dBv|PhLeGE}?sb$j?gZ)YO0aXjNi~+Ze%v-@95^M%*vlMP zLSXwnog+E1mki<|NdI*qc%HCM#@Z^~6nG12(gthC%YUR@;$D<4ex(ml9#buJ=PsB5 zGE9zoOFOW{KLmep*;CoK(~2+-_wS!hNmW^z5%B+dm16ycD(EXkc2~I>rrn)f#g)SK z<($~7oG;gkrFH2F-)uxO?23#r{ju<966NzCT}vYq%iMw!L{nQyUsN8|tt*FepW6w{ z4<s_>)tMf^60HODHYMbF(AMdT8b71;o*Qbo8IaBdX)ogK6eolgMgwypp1K<f)~890 z0oJy)D{(w=R&h!^p9ldjq4J$d%1zI-MOfpgTkipA165a5n|(IQj4%-t*Tde#mGx9R z0Fm6E=X&aQo%*W_#@hw{yjsa)g2ob;Qgt!cW<rEtz`3i0NpAk4FpF7<9d4(;;xD<h zV|{5wqm#R}s(vmwIwBCB*9ZI$v=+_C%KVoHskIv}^>5+|=jQ$)7&b<{T|DBIEQ~G= z(kA%v?v}Bbmu36m0_$%H`A7Rl+0PNYBH3qE>A(F8A!h?|{#MYBJx>em^?Nu%c%s}8 z3V@}EO%>ADen^Ku>b1y-6=8mLb?wjCZW|~`t@Yn>(NN+GoY{1opGy&5>OjNXmNlii z=}2#`oxG372J@*e8a&vTP+;qI8@*$U6E0hoSM7s>>Xg~zGfCPUQ)TrY#5~(IpQ)24 zsC-fW%}+X~Kk)S2&0O@LCc9R$lv#YIks0AI6rnW6Jz=RG@%m@{^*QuQy`rGMDKjWj z<dh@j8~D^F-i9ghI#a>rpj%=`o>!|XW3YO>d~dBwx|1-cdxEUV7+n#T?=T}%k@DV8 z4P1-K&%U@P=>Sa4wppQF*m7Nv!mjfV70wrrvr3k)Sq+n{C*3j?E>tcNu8zq`$4@9V z(FR#l>b6si;e!ghw;5(yRJtBb$=HO2h#SqCV8s1bDPDiOSkiSj7X(k{+}loNOsgVF zOnX}XDS(0!^k%%gw%_G;rX37I@DD+%2kr^<{Fb&u1IOob*v-_~F1*fv5g1ZqKt@nW zVD&NX-IL~a`zH|^fe-wu{vo*4^(b)@ZAPQP#^V0PrBAA-gs|9U^99>@`EjO9m#$E1 zwjEqpwE3YvmBJ5w^x&i$JFlUezv1hjO>V&Oosv^7oNiaN!YP{?T8Txw2`S519+Hv% zAS_Y-v32ita%+K+%44>&f`&)B+jkfq>?aj2YOPyroqE!)vaSc2t&a2QO{IF&X?shh zVp|#2XK6{yvft~${?E%<=l|h!9dI5bji%%C*3?HnUdQ)KI`@2p)i}fCj}h|6NAFG< z<34yvtuu&b<Ecc|VfkBisgyR*qS;pKc1mLB(k``zpy=@N_6y0B{JJ_H)l8DwmH;M1 z63xvI3YKrRi06QV6qH=~!#r$2a4oxZm4Vh?M$RL~A^lBOU8(02o>@Yo?fXn6<+V); zt+Tt1Fj!{z-S7uWYDI))mU!2f6HZ}6IeA;thP?UX=)7N7uLdo%rta>=p+;05{ALnu zApCXQX;42}+y7Q%)@|pZ--KxI+Mlu}u>Lc)1c!fxr|Pd7Kol|Udqz!97Iz+`0V$X< znm0E$o<X;|x?%SDqZtgp#_zxA=R}y7_qtJXr~wMcU^}biLC4U~=Xy2v7uMKz`V05( zRZ60?a%2XgH$A)wZTVH>j*imT;X`Ol;KJbt0Au#2H0$x?P{?wVh5=B*&v?iJ=Mib* zAN@{twB;VD@NmaRvM>hjwZJ^SudCgJ`i1n;f$*+B)RqZelosj+bmfdMDxwM;mTw~p zjTVV7TOjr79@o-D(MUTe+{Q8W)LDi2&eN)nAU%JA()9R<{B1*;IR_c@xH%j)8SIoS z=6{!zf$zc~TfWas%L@9S&C0rxEX~ZVm6xYt$}IhM9A6kleLP+1qcI{eIq>l~7fpz< zK{NA+<AK67Bp2dr?tYY88)tcQK_m&)8#}%>S?rl~gu&kp`89qu&>tQRVqo1&*G0EG zUf9H#wq`%(bqeDhHqT??3{x-Os*_2noJFz<LK~ex?ttO=jp`3D_2wx0K`w;F2c6TW zB$UXLZPP_!ufo#F(#;a4LO?=9Kvr1-oLEpldm<|c?GeuwUU`t@x)aV+Y^gkE!Ia}K z+?gBtK|*R%pY&%p{rYHa9n#cp+%c}2wx1?Q>e2p-E|RC4GN3QKH@)Kn?~>_udq077 zWAzfZSYRk|72rK)bES9{MfhoT?$)3pz$sE5cTyNFvPZ-6{~<UUBiD;-c`9z!(gC_V zhacA;1Gpc%c_WTayiLC0=Nm~AfbP0tLJ}A!1#K!dL>pxL?L0UME9fu&1IaPu@}Y=M z9tYRd1m)BsgYOt6_tL-DyCKX0&^sdPi`OZIvqlG(i?%^l^CxH$3tq{@=KI)-1#;xb zagH0+%eJwn0Dc4@op%2B?3n-cTLz1j(<$_;)nC7ZAMstr@C9l3-`X(%n(iMoSikd@ zD0~{<1X}Nf-c{k4b^Zg**nj(&|AC(N4T&T>8+$C``1!vWO4Bwf{XdB&M&c{PV(*+5 z{rA*SfVyb0e>yd6hu(i5;@x&04|pO-e)ymJH^*eYK>x|Wg=YmiOoUV_Kza1-$G^9> z?bQsKRf&Cd|0^Bu-%oo?-q;A`qjYznAnPXRSylwaY34sAW((0!p>LJ2sf(hoFN7Qe z!_s9jnyjlShAaKsr?;BwZ-;0m6RHLQE5yPYV&)G7xzfN@3^=+aw*On?!T-4Iw<jfJ z_ft~tx!XP?%niO6^PDA_paq@jyZ~=0Et*Iyyq<qyGbDBQ_U^@p+zBL1Rzn~5=4Na_ zTG>Uci+bFpWN-i7uX@uM@0HZs%(T3O`9AA0zGc4Oud}=gx-Es;tqu!YeW7w0T))HB zx;*lN1790e3Kgd0Mz07Yy6Zc?${jmI?>?{1deq@$<;oh4ZZCee>EJUI0ywvd1oXm7 zXEZ#=do@DsfK8y{pvf;(T^*O1nKF$$(J#vlaIlvXogXb<$@s%R(fsKT>HNm{AlrX$ zX$L}#_U2D9uqN^KN<5%M;4jshW4fm_G+PKb2l0Q?Zn^v|H@OWJ%T4`27?iB#w}*|< z9J%2KjF6`Mz^4%Rm_67OdH9T7umnx5Ivq`yeAy=X^_%uL+UT%7L}^yIx4!s!x_{Fi zqVq>X@H#UrayUJnS#&3<Q--|EH`F%RD_?*6Z7X5&!XbJs8Z)OXNcBpM@~W&2alFGW za*9NTXw}r!hSl;X=F<?9L^*z^F7SyjTlJUL!Y!mNLtbB3pDviDxpL`;(G~8VS$+2x zELJssYtAJ0w1+oQMIrj!b7dpu3jBVh8&{W5vQQazZ0;b$p}{1~q~>hJT41Z~{IN6d zio{>q%9HZs`+bAtyIfh4snYDsMgT%OA>jfRSJ^QfX85nD>FHY8x$!26;P8Wy=&!R% zFF>HEx*l>M5PgU4KwU8G?Fs*nad()ko&ikkW(;RoQvc1G=#W1Xz}w1L^O(OrMUV0R z@r^PNJ^!p@Jdatxl%KkGx{&+N@;Gk?gzBA;?9DgDHG;ieC{cn_>fd=1N+e%nbViXg zeD(EB<4C4_CBFFQIyN@)A8$QpSOwJ_%t{Qi`I*1{YhrA=b4$-TsVirrd#tG)Jn`g& zH4p@DtZ#^TcEpwV>i0#omfG8@@%Oab(sffwcB~sIR-`y99kf}iHz61z;o7z;$mhrm z9*M3jaky~$Lci@3m-!Xmcp5b&cP&k$e_*JF<A{;_hzKuxx9utDn9k4Txh>cSvgS<) zNlINJ2he_BD{bphb-y0~?C&q}!1GJ!%TLt{Bk${rl&N96^;XdzBD)*BeV6mHgiGK! z2aaHYKXCdXw!umq;^8m)*1@DMv!JxDC=g=Hn)B<M73tQm$r#f}ryuHwf_Qr~8w)9l zqD>X4g?;qjlwdC#F6&U|#lB=g48-Oz?^oE`#$V%Gpp++uspGFlm0jq1WJ-VWy@hzg zJlN1+`W0!>-*N4*_Y-VxlDySjVc)~F#nhK>={=F0=hgn&{=Rg^{52?;HPquOsI1=b z9{R<&SwGv;AN}gQB)|hL*}7Q&Tq3F^t5?<NGNI_4%sDby3>PY*diN__J4C3e-D)RV z2rg8C2<t?4=)Q1`;&twG*?&w4G6I-J)(LMW9Dz>BK{;J{SildC$DQ*7jLvdrx@yD^ z#l~K>>iMe|*UrE0)(!11vcOoVQjuf&stE#evl;fv8?PF_a=z<_C9>yDO!zpJ6m2UG zW%@%sc%Qivm+_Augmjt}SJ*{Q-A`XJT8X-CJRe-l@plp?ZaD7#VncJ{$pNANDqO6$ zeka($)zh&ik^*=4*YyIf@vzjSX@U;zz<6&vadzRH*gIHd@zy(~X6hEXDd~1f&bI)u zlq9}pg%n4*(z8}+9z%O~`J=i3LsK!7#WsUS4VcUZ$?9hY-cw?WFSJZj*O_u@`=3CV zyV$=HI5h1eii|K1I`?xRFsG|0HJZhUW4@)ylyrg6*VT_AE0&h9Y8BA0SkicjVV12k z>2zprC;Qyg=<P&0u`ZYOTbod)Bh#_+2Q-!r9#Ui3OX+UP=X8cIi$5F@Ri?%64>JK! zs+(K5=8RQ&h3zx2n^9h4I$C~=(8g#;?vFgBE;b;p)C51?VNx(1{idXF;ipuC7p&i2 z{N(Ccr~BDiT^-||{N4cLNTo4<B2PlcxZ9pmzs{$@A`8>`&hdd@eV6lSpLq;woj!~I ztDR^BNz3E#euHti6JLGxgpja6!a+BE-)@UGm5O;TD&sWK6d}D_hghK$)Sr~NR_%Om zG+6LANnlXULE|yji@&~^67#Bs+D-n=f%ZhD(+T+<VS(h+Lv?J|(>Eg>VLND4%O9D5 zFr2IoJ_!_kGbrDIjscS9{-3=t!eF{yTQ&~Y?gD?>7$m(9g}&WH`P)AEz3QJ!A&-MW zCdt12&<~8hkstW1Nu67UQccUeU?%J8xf;%mvE_e+<z4lU2Q9TGi828c4C?M#9IBsx zvEpvY;M&jZ9_f2g4c@+8yVsBSn~>pP;s1xU_YP{Zjn=(UL{LDQ^j-v|s#Iwal_ny+ zg(gKQAs_<MiGcJD3IYNmU7A2b4Io`aqz4E!p_f1+EkMY7o_FtWzVGaredf$}&J4rk zk4z?cp66coy4Ska?}B`Cg6$#San%{>`$H+e8F=6H2%>&{?aRWP6c!C9(3TqST=Pbj z?@`;BL53lE-}9vQ5fTz^OM88Cn~6&gpSzQ_B-GXXbuxFs1K(!U29+4AyV=Dq=GWnn zUmXt?iB4ujC{}5$b*$Ep8*;~P0jyJ;DK=nsWtD4=2&g7RVBMf&hLlqahi^-BZeS>? z5GLN^24&HgO#0UhrN+NIXFUyQ0ykP@%%X>&<&W19QGW&-6IbZUB2O(og$?>=w!*rh zkAjC{rM}qOg&=E~v<LZp?6%zey#n2v*s_=mJXa(nJvnubu2}FdUvQfu2xYMdz1o|3 zCi?9!puYII%u$yeqIdkZpOn+H@n7@?Mhy)zCse&VeEX$XS#xMv^fqfI+I2myRrNoD zWM*O8OFcKvbw>K)z!*xmqxBa4C}p-vpcc+x0I4SC8!*qy4=FFSv56PciR$s?!MN%$ zDLh+Yg42kLf0zBZXXfayaXNiLo9{-u0X6I^lInu?v3Ar2Jz)a*>^a9OfpVW#g@30= zj{p9}AkO$=z1_!fQW8D~0~xh7!GVx2ma5fqmZ9ea100gpXKd#dG%tv^Zh-E(yS>yg zL{^nYR^I!;dXpWM(eYFI3jmXBO}`9#%62wZ`qzA$Qri2wj-t!N&0%fhx(Pw%Z3|#W z;G>*>T9@)WC;iXf;_-qDkYHdu)1P2IT+n>|zmB<TF4AqqfI@r5!tA?Z%fM`3cVPD6 z+~=vbgilf*xZ{dq`7XVsC2cmgHnm)t8@buMv)1epW_l{3lZs4aq8N01O=ZFLG0wRA zc+Pb@1Zb~wLI3+8^Ql<3$V%wN<}&Nc2UmjP(>p@(#mb7k{Biay)CuYX{`4Qxwleu$ zXTnDKZkgY6DK&Ud>lvXB>S@*dSTelJhPQr{S~UN(;-leBK5v|bqztqc*L!Sn*QR@c zkCU>3q$$<DfEbjxg8%h!kOtHFQN*Hgd}vMEn|5gAXZ>ZEIKGy7s}bylb67U`ZZ$U- zT4d0gZbIh}GVpirfrmv!KuSM4EC##J5D*qx?OzEWQ0a~}RvOCmI0hmU<IfB&KCv4y zg(j(PhZet=cuBh0@}qW>-Z1vbedwV*tu5LLsA{PcTikE7GhX(i^kq8OhHSP|n>J0$ z>CqeaHGvl&X7s~mU(k^KupoqJ-b+TjXCZH1>(WroT>l9z2Xp<qFx$n?HxPR#vV9QB zVIRrYy^)f8|4L%q8*{7Na!O$h^4t=?{mxZ)L_tFCwvWgo`b`H2+O}ZJpumh@OfXqJ zhfue2>$qLd7cK7((>W<?*TwrZ0f9|1z5MTg1vc>XyJq~x?)e4PTU@!H4spiagaNY% zj0h-I6lwCq{4Ll3r@s;$d|PUF7dwU#QYvEl>TI1c5r0CjVm5IEl08>GL+uYK!GvCB zxSe!i3(D=$ZYXl-#Z-HhaLWC_M>6YfD8<a_;~lk+y^4%Yx`MB_VN6Eu%B2M*{k0YL zV5`E-X%@*BWM@<B!xYA?zkRJerggB)C%+81gPDH*>rQgH4>&E|{QB-&&czRsYIEhB zKs%y2G}Wd{Vns=pl7GDFe|L%j&QXv3p@92I=E>^;Rc88Ho_J2nAV$c>ene|%!8@{S zKtoqO`cZ)^zt@D=ZQ4`&`Gu{>Gp^kbhLWwEre1sY0OSl<lC1&u%Br>dO9q4NQ2y#q zodxo+4}U{r-piGC6&pfRyax^;WlkpRI4K%kGp8}V!}P^t+2_mze)}sPgcBBv@_o;^ z$tN(8v{lEWdGm|<(^`#!+hjknACLg3x(vyt2@$O%ko<RE#Jk*#Qub}}s3gt<27!Vl zxC5YAWeUeMEk<X!4Z#Xs5F<Bia$M3jz9;qDoSln3TUDW6^|I6FkoEiY!7|}U-V&mO zLHqa7qPw#;w(T>qpJRu_E6k2hVc>&Ww3h`kK^wmjBPs2S;1ifk{}t$@<iPe&Ak?4X zSChH`Ne<szaKleeg`TZ@+*;*<C_JCW>{h&~@vp7{HArN{F9U!`%C)e~R6QLFg|7Xr z;h+@Or3LUeII4jaFqxh3$!m7xc?W(0es?D;tu)PxwG|NPPgtG`UdRGXZuO50k)!~> zf>|^fu-uOFqjxf}m?)0kdJ=7ojEZ^fxt0$?WnlLs<(96KhZWJj=5L3+ouD3E-W>BU z4;*j&Ly;nPVS$;B^6H>es8CPxKz}9rdG=vAKRs=ni}XC3b~#tK8;0Q_-6!nQc8@)N zS{`-(`~}ivor3^9yJ|~BW}Oo>)U}r_di_?~HQpNxtjn<am}ogE?Jh;-yyKLzd3S}@ z-fr4#snH=uv&0&1PL2`x{Sfmd23(kc{7GC1qJ282UnOAI8KL+_ldGX|Ey?T?%X*Ln z6JDxHgxEmf*B}2ni`lv&JMi*W+mm?f+P%+oVP^iv?h&_<j|o~dMNgvSw}dSxLkb`3 zP!torAzn`B2Bb%g^$|)^D-*bg0WK<|Ps{T11EjpQvWs`zr#by7q|BFj^3+>!=%1vr zAt&!5waM>lt@m~BxZU5S*|FD{L2Ed<(U*L<*9EywgZ-BY1pvw@zp$$LbTT5J<g?(- z8)}s3P?@`9GAFC5LS)H@BuKx=BuNbPV^EdTN8#J__$-S^($__w0D~Nx0ts@^wC=e? zz?Yo@I){lGUG`SV0>@OQG3BzY0gNfkHRY6_%m|wa1s!^@^5du^w(R8bZ`*3NEV#-d zJycf$>AX+lcz)ll8Ct4^J+^h}u}+~N#@IF!*u!ttTbIJm<$tq{(dZasB2@#ZRsCvY zmP4z{dS#f21AQGL@ED^!dCHeBdB?9Aqggj-xXX-AO|$Mj#-AT2jqdu=kOzwca;7?_ zoEU}}v;7?(wx>`Y$nX0tgXxj{OkwK8;(+*j{w2hh=8M1jom!a$mE5lLU0a?m8(5a& zn&{8*kA+vN=qqE<*S>s|sz!lS)#usJ)WTjnc8~Ef-Dt764k412Elj^@l9~SXr*VwG zc;3NrHA58Iwl*5%3T$AmT#~R?V}MXksMXr^Ja%JnkpE<iw8H=>#7E^j6FMGDA-$>k zPA6(Q8{j{mXUp%tep0oq!&DR{#(SY}PYkV)iBT6LE_yLo+V?HD$PG*h>UxwkzBk}1 z#fMJ?9e_a%1u<12CKyNoC$V&#-r9O<uS80I6(W<xl^1^V?(%EMM2PJ2Im30EfOx2= z5)>+b$J`GQA;|T}Tp)%bDAi!aUMWP7nBsteMII~jSeO&G(KRI^d>%us5=yJxrwzfu z7UPRo@pcKz?RO*(t#!r-=R4_<!+C8D-+53+3vl+vaqER19=whM^3Cm+4x1Xa1s&J7 zj>9O4!`P9lLvGhYzl3%^`}{>_4d&xt%CHHk!>ebNx-T(>*kTVHT)%^dFS1|lT#tCB zIwBpMAt>w*-0rYHXuquFL!3|l;+=-ZNrd(JsbJ#5lUtU8hQ(Up4dEkO#sQ%$KRV&L z0Zy8HT2Zxb{pY)Sz246X{~Ep>`2bV4kAC~z3b2=AlEMkZ(+2ET9|Nnz?AMcEql#Jd zY}m9qpPov<3thQ8BHmn7^J`^;XUo_B00gU2_X32}VwSh3<M-xK<RAu-w#>q_vT-jJ zG8;m_jFSPtz_{or&gfrQ++OdKRV^#Cr?pK(XVXmQ&t~1TU<}oO&jii|iHIO`B4{mT zTOlt8U#>KIo2pV*lcWia4PO@mJh`Q0Z6<hz=<DZhRT1xfa9(y8P>b8LYP!SU%a7JG z8a-M&e;$QtV^USP?{hQbd&<Vk{oa_`FSSowh{1(`;NGHer`5B-scgY*<PNL>{WWk) zM4t~O@b(X&cfE$8XRs$u5I{PURfFSS1Fp|@NpxLXX)U}N;(}<vM`tZF#57LWX=B=U zPPqt9i+|O=XWR6>Kh3>x;D7gRiNh0qsdO`^tVfFNY_2y*f7Oc-KI#eexyt<}-NDeJ z#5Lpz>hQw)_}zqD3Y+BLfMA_Ec6%p1H&1ix7*48{Bx@z=2?RU)+q;0RXMV*py#jf$ zn*g4$VA?W4KhnU^#w2O4?B4M;pmS}l#c8Z0-3PjmO}WpxOz($&su7YjUrH~EuY-Qs zTBN@yKU86$o4XYiT~ahC)dv@5YG6?O4Ev!ON@YinMHq0A$54E1Q$Gqc#wF<q4Gy2y zKPA&96X!wVDaT3Uk|C@BHD4Z&$ZO25a%&pv2crZTb42Msyl(yp_`OWp^8xFCA=dty zSR5UF`SulERchxx-AI0=v*|+1kh}QKm^D<*Ax`ay;&FsZLg0{%NMh6{osjO{CQykt zsDWy8oJ=ts)*}IxnkOF3jU3ikFK1RPpYLB^awjV`G*2OLcI)OX`L=9WyvHV!t)oL? z5ElZ!O<PL5M-bDQlH6N*Ha<=`EWpvey7I^|wdi)n#2IR%OC~0tl>q8WVX%SZ$Ride zQ3t{X0-~CH9+7Km6$K5NaIXCybL}8-1n;9iv~#iM+#hd5nMzzbtt$;1wBs9FC;GTm z>z7z|)MRCRvx8rMMJe$50#Yc3@hfe>a@4Fepb#oUWtr!%a!$qtJyq+SlD<=y_$)QZ zv9<1Zg*q8beF5x544Niu1d_Q+7CXSj9+i=Mt``|V*MB}l34tmdud+8!-t)EY4}bQ> z**hQMgwd~Jvxj^2Rzj47A{JGGL;vkFyfi#y<&Q3m8~}U)kl+vvI{!>QZq3HJhR@VV zJfG!q890~8e*AsGDh4qHEUNTae)=xH&+;lGySPWRW=ti$&b4Md&M*xl;>P0%FJMfw zfOghqwineDBsXr;e|79$-+)vy!X68Xmh-w2;z+a&#OTrZ4$9M>Ae!|Y>O`LPKj7Dv zKeT0Cvq$igQVUpMbG77;n$`fAdQQrEc_d2G&ss0IO&6YEh&SNy^<Jysq^|x~C5JI! za5o|TvA$r@Z^<06%T#%lGsV$eIeKS+qxS30hCy<WXdaML#sLb?Axm)Hee0BZ_gDwI zGJjo~qkfq9UdOGiV>?O0z<cC_TP28Jm3el5%@glgyEZ==IkD3kz}S?<2}brU!JlVi zcptHP-EeJ%&8hdKEa(E%cDoqvm^IyVtt~e7>tpZ~F2H+m?iosMZgWKn!WgU1a`l&z zjk9rxwVpO{1RsBfqFG7*yROUk@QZAsW)mn+{~T;JClei_7$k*Z*RPp-GO<f_?D1g* zWMhG}h$I69YFIaQv2ARsExjX6@0`|}ar#M3fj!<XW?4tRfY&v3UbN1kWT6c?&HT*M z`o#<9`}f4Cs5k7q@$oQ91N^4$3av!7iOp2vg#AKCoS&a?X4<=p?cRmD(W9E8WxDBl z67SUEKNRfpQy;58H=u9z{pEOy21G#zhm@i%2Jr^?4f4&YquMB`FX_RSm~*L%j_lh# zRq?dB;e5(2?XDy%f@p<5z7|uOz`Of>fmrQ<X=^cwxji<}d2s*wZkR-XSPxjHYl%rT zx6ti-uD-H?sD?+rW2*AL@B<*?hQt19lY{{iAmTq1AH@cEm45;D7WQ%ZXDIGSsDmn= zlTk5CsDH*`Q`3?Br-N^7m&_I5V~!Z#b(q|ftdpOAeLM4^<;4c2SjlVt28Iaa1FU@v zdlnZt&8>WxuTojC#a`BRme(t67&W#PCPvKt0?y>J%dNbEh)RCq4mNy9x*29#a2@)h z9vD@+Wo^}UlZ`Mphf5Z@UL+p#rRL3${irHG;c@>xlEt{cL4_SWlPhVepx_$f4-+*t z55v<F`<S;}e0i7vA$&2xph#D;i48{^op?>eMZ9_Unouh^`WUr%jMfYO>6pK$5fg7p zSEbffOLvihld2(e6LZGbIo9BzLF)=}@5C*B#Uuuq!*=&Ep;z~N^VRY<v?kWFo=>mp zDMEZj=Oq+IV;YsV?9SP;9Bz~;6tU*D+W$%5X%f1(uAKa?$(SlYrjPg0L=QhV&Tom= zjm4h$Y^xjn%ZDPLTQ`pCQ!VCby<G+q5=P%jo<bq1)r!#WQk>24lUJUkUE<%yUuR|r z!g=Dpv^S<N?s05HXdqV79!oGhq7S*iTNpIp`TM=t0u-!uOmLLAGv~ESFp2Zr_PapJ zSMbg^Nd-(y!;Y|3M|~ae0v($rM%=pcsU_dOA}tm;GrcLG#6i^s1G4(n0n}Nsa^hAw zx5Vwe)Tf!FwMq{clz|F#OEd$(5`%ljIeh7tl7q3Jo6uE`mmCkW-ipx9T&U@TFnRw5 ztLa|7V4Z)1l|*P=f4JG3G`>lI%G+p<7>P;$v&g}$e_fYHE8PEq+uyL}%MA$74Y!;! zoSuKly!EFlX*rqu0Z`|FD+5ZWzn!^`?I{CP^zh~d!48F54)x7#!F5azm@>_bD{+6x zh_0~7Frkjo4&ENG5*sxHsxl~3)Kp14vC8_?iBJ=1Ow`BR31N~Bznb8{Rb7`X@iF|# zkbuoK#TAu?Kad!rRvC8W$AiOt#`^h1tykZZw_os%MMR|g%zN^G)WGxiWumFOc-@1C zZoil$DI8ea_LeiPrv)Y|wn#N>i=TACxNP;7_u1W+7)t^XG7NgM_7`Ogtvqa`W}&hP z(k)0Sd8BpsEIP}%^&>gUzha)Dp=?kx4H*ww=A;M}&*}pGm#t{+zidU{_IDHf0Bz2- zM3bL3;B6KSCbiTn0%0DInf={rKkhqF8636+k^NSeuAI|`ub1m|V>#u0h++jvgIEHo za0S0yXpgQEM#Mu*{i6Iwx>vnN!^}3xzzEWN=B55d#YL%1)P@<`t3`CT9t@!{ex4Bf z(W+rTewlpJ){+6O(s$g!n}mbw9+vM#HO($Am>a&h5<6?bYv6eVfS3P&-{Vq3Eh#Un zXX%^@5Yue7#Sal90c_vOaUR~R<WH8<t;V94K2q~uo>fgZgmbe->>}Dv^uNP_;L$Kq zU5J23y&a&t&BPc)p=_4(o1oP|9fN#OvBMsC*K)4CCw%_47%PU%H60=iTrO#n8kY0O z0H@}7r)<*JH+Z1$_gZ!e6O7jBFEF90O%TZ<Uqj-LwuDZeeC}tBX815Gd^D_oZVLOU z(gix^k31VYe@a`a*GawI6y(=mfw87-$})w=DMp?=l4W?P3q-;g#eXPnAWg73h<(7u z`$id6ajKq|7fq87cYVR4=+)OIk^44fJsi+5L6Qw&uNJE#JSjXT9i3O&^`>woobo3} zl&bSCe|9k;3enlqnY?(dpr=mT=_OVxSmIoXBAJupepF~=;=0kPMW;phd@+m><|d{6 zcsdKG%pSe_1V1zQ+xU4mC@-s%nXe<FU3vpUj#srRgq+zXWflaMs#f)*XAOVXvS`Co zsh_PQD-A~FI+?;I$;u7Wl11$ZF59+K;|RmNOwz=J#zYA3xe@WrK+oHXvKe>qvs!N` zO|Qof{Xd{(p@yPqxGiL5Bi@DZ*<{gj)9qMIdCEf+nXIt6XT<b9bfnrXfNh<YA;teM z(YTvD*R7nN|FVU?OdoRDM&Qq*R%xZfBYCmiqcU*7*|ZH|Ivyu538Y3_Qp?t#dMlvU zqXZchyr&Oq&G1bT@Flu{6x&I7><dJsnO^Ae_eXVKRl{CcI-Sq`1I+dhVZ3^CL6?aP zz2@DPH>yLi4_3mRjh(`+oJ{1J$yBvp)%l6Sn)t9!pazGgoWIN2p7IQLu4LVq&qx~! zz3FZ1_dmDm{}-?ASk85~lrsy;i5C6&97Y#SPH!b60O6O0%=LRmKS>Z&2rGt&l*jPO zK6$(@Rdx9R&(X&b>5YX?btK4O7%Kn?r_pM{q%h66SC@n$_TU%KQT^7RijyLelGY?x z!&KtimvO?T1h4*~T0Z-&tQ@<PmoJa$l~sQJHhE@XaXZlH0JLS<s$K}gAFLQ8l})Lt z)!4hC57S26)N`GuDbhYirqphk`|A3!Uli4-YKLN$7%kl_avq^IB~c6l2lr!cIL)&Z z?hvt&YP~QxyhBh~9VzFv3)qTQ_y(6gmi9rb=O68xtrfr--phlSiLj@g_`^q`_D|aN zHeYPMqWngA8fIn<pvo9mQAp0vGGcHKSvaeg{kYmA(|F5A^Vr`{{8_s4`%6AMwgz4M z*9MmhVuGH>y#6(9D6G0$Ch&9Da^(Q<oVCaI{7}wJBE;B!&*lxeQ(~uH{USHaK;3ty z8MHf)Ml|u=zXU)W;A$6DM#@Cvy#SJ?;Ot*GVZ+^J^67cqu0+#CQBiXT(WuG|>=#`a z3JVfu>~nDwS^b!!@L=YK67M#0I;!K6{JRN6Mu@L$DXrJ;Tmfk0T;aFJY#S#T_>o@6 zZ*_rLRzSFU5p@xDl&-8#zgC>e2-bE;T6TVMT=NfwS!cqty7X<VN`+9$w>j%UZ^1JW z_usHfb`s~(h{Z?@q@Bfj?5G`N*gW~FCCSsbEp}zbjN*5c!VQf*@q*|h+7XHnN5cHs zMhs$T2GKGOkr-AV+@lnbdatxK8D{2#N#6#hxOk9|itV7QO@Lz-lg6=?SpA!9GfsLT zPmNQQ|GOiVeLx+`Nb+~6BzpBKzJ_q++FRMU9ZM-IH$1={T}V9s;bNF_97TAGfPLA? zWK%Br%w(;r7WrYmf>GdSZffYn(%Ga1y9umEXO5Wax+tJ5?j|}qpTu^+_eytb&4up> zl+rPW=|l@ZA=sR0RfK+RO!vrv&{}*R5Or1(3@bXQX~4?#@>=%<-H54hRcD?&GM{|) zcX0t5u=XzKew4^PT*1@BG&>D~wuN$2yz0H;Jh5KD-Z>~1aElWh+bd2y6@cqp*Yb}P zl}${RK!q$rktE#)Ph8uLT_=z~=LjNXVYw}LpN8a1xKZSUSz=L)lK<iyXrb9^#8bBZ zr-v_S)py^zlUrJJTGa`#x6vJ!-)RdKGuInx5gyx%O;#IIBps|S^GS4|klxZ6wKErG z+NhWKqlGk|z^mD+NmsfEjh5YBh8B|+*D$=yQhF;t2-?wddessS6AS`s%5sKrY=7U1 z?P+b7O%%BMzY}aG>SAFxw_5+?R)AvsxEn&9%E4eg-?%n`eyqG>S()dQ%d_z#e*O^X z1j#`<JG7J-{0M#*Ex#+u=~)7ueUbFjzMz7)a!#Uae-}|34P!s5WwCZ`O>V%{G73Nn zb~h6zte-NN@Rt#%ivnO+s{A%tsr(e|?Lt#GKJ12G=Iv=prPY@y^^tZkybR79#HcQ$ z7h1fdkOomMLwgjrPIwCHviO$W%BHZR*)bx5t)nhVRCQ}QGHSGombTKsU4EijuhZa> zgUjikLnj8mop~MCc6-J1iMO_mB5V!1$pQtqIKR?4_&WMoo#3R;Jo)2xj!dj1z`|KV zi)K}!XNPE?j4#cq)&H!yp4#@^!2ao9`>348YJ76{4nY0FlMy~nR6~O=zqz5jyy;?R zRB@{o)icCadc8;OlQ%MI!E@ad*VMCb=h&ny$6m($O9SS@-{czjvEb6fCpw0Zx=)70 ziMljT6vuV__`7Os>eUahF*+$!HEV`2n}_`DZd}8SB@Uk)kS*Wyl>nyw&3#{<i_psH z%5IpOni#;D<iAdw=(!GR-1Y2BwLjgwh0#)P;ZF)0i9mwbqmja;uCXC~h<Dn;`SmSp z^XCn0prk;V?plBzk0RZ}s?eLkYa8291r_L-A)lLR-;L^!C62WN-WEvSV)uM0;;i4w z(8c`&y|LY@j;=E8K+br#xa~Ctadnpq3DNa!Kn86OXOEK~TA&6`%0b_bb6^Ud!`<+k zb%~7X(Fv8+j}DF#0Ki||I(|A9C--5TYpOWwdEoVy`vsr0+q{fSIQN7vN=gW{u4nkM z&ib&v<C3wxY`T^a*R$Yh<n)~tV3N?D=*}y;H=^4<iQ~g-hGf3Qsn&Hn!9I(hDLn=3 z-YwAq2UzyV+7R}y?)U61x9|9ryZ_y)pZ)r%m^sneOnPx?#X{ArWXJ9@am;(AT~@0d z<*RQ#Y3<H9BbKWwLUr2h4*)@{gQ#P|1g&;X(&lD1^Mws(>DBtPMedbxuH~|B*wcwN zHxQ>*+Kmr%re91PMZdSQ(JQtUQXl)Ho3cjowzlUd$y6;3Vqh#p#}OR5EXFHrTynr_ zv_75s;@}Lm7fH~Xut=v7#*ZX8w1tVp+loJ7EI6LWXm8lSdZDsld{)0c2zxc7Xc5BY z+z4~*j2KiMOnv(z@7$s=z-0iHFFeVN?$IL9J@skD?&}8#J-YhZiZC*cT<Na2={wgY zmf2+Kps?dIyMl-a++kZ(Qt@S`h^O8s2BKNL={EZ3dI4TG3A(7&aY^_rRJ2uJ8dGG& zkoQCI!Ff-b9nS9FN)op*zOz46aR42b?O(Cw&-SXvDE^PE<mf*XZy!cx^3bh}H;^TD zeF&cP65Smf6Gvtf`8a8L`sdsI)~<y~K0gl3^gwD9I6Xq6L|lgeNikGK8zo)st8ySe zpV{hhAmY8weD~LT#p^*9HSXwPq&jc#%GIxgVNRMfw*%y?z{)*wcKbfaFVL%@YdA8S z9wrp_Z0hj5g>PAx7geAN3}lVXUf!Ta)svYaK?U7;0LVmL8h_j*sW2^l9F$z(c*6KQ zX~c|&>(GmBr_7pYh2?}EhI(>(?(Ru0BeD!KM*IUl-T6DoMw@}EBVSomkHo|D>Zjni zSLlQ1NxgX8Qk!e{$J^)=8f2y$A?(LCbsZDx{M%rK+LG;7zk?-xCF`L(4pf|smpMP& zn9@G>?dZVoN3G)RstX~FL9GkJ<g{aUg>7yQADO4scz&C9yi9Z{zOfF&&(zq&yIP~) z9_PCLhsH}TwX+&R{+$y_PQyqAKSsfa4W4&o88<f@`MC%QYYlQmhzLmde&cV5uJpmk z(1G3`Ein)y=(QIAy11D<Ps50NM<TBmU@m?ick+@TRST|XB(7K0JWOaC-C|qu2WEyo zpU8H31oQE3pwckXuMe}&c;49#EIvnzbnKsn4T#nB`R2REi4pZ9hIr_{x<tqm{Fe#% z&^e55)8wKROFl#CdA~k2W|mKT%$MiAn2U{*wm$xdUu@&cs2(hubxTJN`|)MH*{tVR zNoFZPKDhZ0MKZs8J24Hv7tAXLZfhFzW6M8=Kozj2N!MZ{I1QuE%Sztb-6i~~{YsqZ zZdK34R1O0k4xg^=KWaW#l1kQ65?6O><FWWMogOxBtY01?i;|<4c{a6wBr)~AH!~<? zqHIXj^UZdNHpR)X2kG`y`UHR-@CtUQLeIM?`!X&(R?m8q?rBQ#-Z(oWjl@|ad>oLo zqlqNgHdYrwQ2G@+%nRV`!`u&#xqWZ_g4z$T?#mB`nB%_z_M2S&v1ZREx}RMEuq%}Z zf}|fc?8naalb)nI{~n6kQ=060SU>PMv7wf~hPlXfD2^dyXi2XoLPE>7nu7APykB|9 zb5yO|A7(glrg`A-<Bytz3br>3#I`(+l)xl`%xoX*jjtF^?p3{PjOUnEWso;*I2gS# z1sYh8HTn*)JNH@Kz-H?uFTdET*z~w?rfVjCBBY$JqGSdD;4@+Wz1+P*qF$eh6e7TL zeyB9Hk5z=4=2{pzq9eSnE&1$^#3ysVWX<_2qeyA>^5whgy%tGfQ*6_%1MlUAWpu`m z^tA}`w>`5xc3)+i%UfN#m8L_THUI{C;@n=G0g5JdiMAS7iy%@JiVF1)ciNw>7KdAR zmIU&5d$GEMZXo4>=B5*{Pt)cpYXfCTZuXXF4Cib#>NzQAOI^0Bg1E6<Q+p$-blcGG znUljypG(PstRm*ZE|@b5e(VzSJh5RpX(>hyL`}?=>FA?xNrJB@E6rYKrd}J*TLIDT z044<>0MN=XV+ZphT1i>X+RU{h69MJ%q(pfB!!vASh|9_}p`ZsEtUG~}z!p!{REZ?c z4VEg$&Zo43+xWxREyFlm*%ZyQ8vWmzS6mrgKo3$%Ft|{HqC7(MCOrKBlVOnw58(sp zJ@_dm3WVH!f9Z6(AcTPc-U9Scc`Rn5A-XPsrE{M)7K;B2rEWx_i}O1^K0dYqzEl7( zMvqvKu$<WIJDhe@$y4_I{nClk*koPRcSjemzb7}sPkM@+^v&}epEH}JnkvrN^1m&T z$f>*iITX{UjVG@M+b5IdQJ(P7FnU?@WEz~b$hh=Jo^Rz3e#2y*6Kjfzi~ZYkW@98j z%&;NSBI8GzLY%iZ)x3}v6a1x7_%ElUD*j02S53<XQDGwO%DhVjw^mPD-zKh}4zk@8 zaaoGr1KdRykfF;nM{yn<Jxcj{ZZ8&^CCY5V{HEMn--BOfEZE!{>d!MrqxE7yPm-)s zmL>XOFArPC0Ba~W@Sl&BTPICm_(_@+Dpys<@eT)d;KOzxQ%~t`o9m<u*ckx7LKH%3 z{M2msaGp>PJ6Ah}S6zz|OFI!$B<MvNw%SCGz?N2#$1%WdZ8x`-VbddOv7vRZ@(lyx z4gXc7>hV7m%p`lPl!R8xSjfH5n?_*kkxNbYo6%s+*mq_@$NP4(|J&0elIhC;26k-= zEUCX9nogyiK@QRh^askS_ne5+83C8MQ{Lx`5uWE(ZM9|){f*ibQOZ#z#Z5Z7^>m)X z=Hfwbapu0mGDd`x{smA!^HvtxD+Vs{n7+ua+aYt?d?Ax&KI-%=4c#E^Sxce<;PDwY z?W2CxkF}<ug2|kRJ6Z)d5;(djH(gs>CuKmcoeac$FZzJw30-}`YOt>FMrvioozwTh zjYq8a^06Q^*q*U5rIw!iTx{3g-Ii}Fb?7tDgKrNW4lKY?Emw|k6KUq$IFw70x)<jJ zK|7op+(4D$X>BM$%MB?ZK11~B)$U`q{$MM&rAX=A=ba&_pL=OPXN<_QJXdg;q*6bQ zpo6*U;C$XtI!iQpTu{`iBk_FYop7n&Y=Z*$((j`X3nF(~$-DG&17tHONv5~+vb#Ts zNA6Uvyx^Rr7cas!bmf;v)Yv@BOsiJH>2wvz@GU<>$YU=$c7K)yO9LpKdE@x=-F<HH zr1ERqLDRSJqJ%@Bwqu)FT?SE@&hhmWi_pKnteg39#=|x{ti8d?zP`G8FJ(D+LBe7j zp|5aq{s{6eEAxIgCx^fl*>dW#r^kA2QE)`2zm=7+@o(XzV#j;4rpyN40q(JkzjtxS zBVvqq#pa>_q7ikZq4uHPja`FR@#!0btiKnSX<l~_Vv)$cauV;C=ky5W$E#x57$;e? zE4jGhIhy@k8Fuu|;F@~LKNR$wRm9Bmo*Z&P>2}alYwJO^gzq=#R8>Tm3${m0jOG{Y ziL}QN1ksk@FFWAqq#E>N9@#Bak~%Njy$I^jF+aa@yRfk^euC;E7lF4lJ?AkPp1w6A zXd!BHKyw1!7Pn`&)d%5NF#L=?#XI%DxJ4q~X1*rP*UUEk#l6_mwHO0%F1Fro%bqKQ zc13R7PXZ@|LPG+F^BRUkJa&W<zW~nj1toq3jOv2hLHrR_ehZY{==>t7sUNXu1Ij*0 ziILwwFL^HJ?TmW3KoV|?X0nB^CfR<4A>Su{RL3IAR;0h8tI!tFU&rN#l9cryamu?@ zAGT#Xp3AxXzRf8tc*1i-)~?b`c>&z#&HS@MoZ2iCD7XuQ?tiB;C>Iv$@NCFG?}5Q> z_hS$38HhP6Jz%(|m$N?GrpKEWkvoYj2j#eV)CrE(8x-e(yu%k$v~!Z=_N^yaDMh>W zRET1uDm1im6j09b43}(!Z~bybPxXff(_ygz@WJ1W^%W@&=|bV%srHE13OTCk!bHLs zVn)}Q)OudYOqZ;?;@_F}9NUIFW@Z*<(m~GHGW=S}M)y)&hjdHFMD3ocES59s(4x^i z<&9Lyd~b0aha?Ea=Z((X13D#GgMJ439k#Pqz)`s1M&<J+Mbz-6*3X~c#V#u-@tj*U zPe&0e^-xGE!q=67pjS!3Rhv20<&Beq-whN3bZ8IW?}6Tez=!<wB#j0F)uDN#vP|r# z;$r@WemX}HV4c3ik3t>*3AE;aCeXUm!sA|tL@0Exczlmp;kDouW|L&ozpjL5SuA1W z`E1jI<9>s3x%BD~>jdB(T=H*3DK4|*TfPzJZkC5dgE$dOO!O?qQ%HI2P4gUEWlGh| z@f1_uhJrusCfyw}jf5xl18&7TZ}H;JBQVEfLMOB+>>4O4ki94F$ROebJP>_UO>NbQ zCpAHR94fYsOP3uYlIp2eeSyQtdd!MMsNJu>$7*7Bjff`0xjp!-5%BEScrUk+FC%@H z{UesALReM|7>H$$CaXlIWL8tv7T$kni=kbsZ@bNDK3J1*9Ew5=gY+}H!$imZN)(tm zJmfijhho3xGfhZtD){n3(Esg(%YPk5sYhBURC;0BpV~86m;9+ol?8XNQU%`oA(ASQ zP}f9YPYls4SqjK~LjE!Co2@><`Z-HiwMkK_yXDRg)4{V0yNv(hm-FA070oT;*QcN) z#R@&lj&IA<_*ICd&AVDrr7P)F-ftDiLWGo9c-uaUYrzcH^9(VxV?+9uSmyc$hs7<W z>)9Y<$hhl&kL>)<!5QE`vdwBzUC_O@a+5J2)I%^IYw0i@HqG}F$ARDBxRn@g@ccpT zlQG{RD7Q}igrx9aoFqm^$UxI5ob(O%U%s#T+jh6m;L^dXAIo7bwu-cG1g)OlAeyhp zQ%A|s^3%D#Jv0Br|1(Aep477X_Ez@%iKDK_e~d`6egv8j)-d{QV`9*Pw4ZNy4vJks zVlerVNVtt{QfDmE2`eRi-isDHzM4@yc>JkqwN-bmrKO*B@cHFZgUOu3od0@H{@<VW zfBE8TV>2Kz&iS7u#{cn&<xb7fx@*x7oC3f06Q{x@^0l-*CMN-vq8TLNT+e0J+wY1& zA};-5*-;sK!FoXu;)c!EHsOw@{99vhLrlUzS&TEDPx`&I{y8h0#>{z(N%mrNH~taJ ze*Dh=_rz7fn2A}s_~8Qd(NG2iI(Yx|`S!hSQ=Tw+AMMHAqrCfbMiXLs2@)TeHN}1X z)cS0`<&+kBmCWk;2mSf3eG;!V&P2Q|T0yk$ZPkv4qdM^yhZZP^VC)c|cQb{~#<qlA zVf6Ynv}v^KYCx`YxFvJaruXQ-zv3~}n|{*nC46j{PiKMqDkra&roP!)J0fD8+pXqB zGS=hNTlJmnO3i5C|2!-9?;WVo>jktzQkaAms9&C;ruX%0qRC1kpL)v*VN%wv>cpBl z9RVgiP1fP9d`0|mNp0SZ2_uur_xHKAqji>Cw_pE~DE=BR4sSxGE(}1VCa?Jj{CYA@ zfji{Yx2k~{5t?EShu=(VPs(3{me2qGu0fZk(*dcYpi=7E*|C)Z9z|B3zmoS<Q}SYq zKVN>X9`T*@V1<{uH*2~vNcu~Y;#<q}CwA6Fn)%suRKCEwO#n}BThV^Kp$*@rl>Phv zdA+_7U3$R=@p5(Lo9tuuR_w05bsO9<M#GT*MuTcNXY<&PJsT?Lqn)m()fKI6lxFfD zZ)3ea-+jX1nchF~g=&RP@wVDER{4Lwp56KxYARxWzKfPARV4L}FrmzPVb0d`T)tNp z`XBOYv)=)^SeYo~J%6d1hHo@Af*K-Y16MLQJ{-!dRYIwkSW$PbT)y+aThRYLqqXIW znq{*?ey>IDJ!#7wiYxXA7LPDkvpIQ>gkd__heX1-JA?nBklAkq|1K{ZZMY2p97WXS zM@tEuqs-Wya~t~p*(w*4CZ&b+Pjh6H_rBRtL2MY$xL=@L#ok8CB-ZdRcm}QSFXA-S z`*aS*1^C)=x~ku<Z*CdgM{P;vdJw8S>w6cII4^~h?x@PFNKyBm<V2Omg-o-9gT)t~ z;B{G^SSwvoPI-K48U#vK1yvHGq1XG54R8UD2gUFllq;`^fOCw|ws;G$VC1H1<%aSc zCG_TW5)TIac{0z1si_)-!c+QdiJ-n5#YDM5KL!T7(E2|Qawu;nrLr4dqkPTxwTz$` z3$LZ!f|f&?(q?BRuH09DZh2^URadm$*C5u8ALUmrm*7^rJh_on5>Gp<jGg(JFcqFg zAxx+Y6DQ<HVq6*%z@1Ds^Pe@KJW$CA{$t^XmSi)N$AF8#0t8GRfaf1eSq!;#4EdGK zTmLllQ}SiC1I4S;Nt9>H&p?wun|Wq#KM-&o^1Y(-B|Y@p4A8GkAwH2J8HrZXDf6tx z*1R&;U%h8TB`mVaH2!r=U5E&=KnaaQ_x7ZYI5U1nFP{B@SY(G9KCNuSSIe*lG(5rQ zA(?lYcAy)bS#%Cux}siBG^svaP?_PUlSv?~+VfDw=g2g9C5w<ufAhcA&nkE7HBI6R z75faR<`(U&79eSJc3`?;s^9l}gn&||tp+GcZ@Dwh?j|7**H;jO(C`kVn8)kVrKzhu z^y94Q|E_9=y`b%`@RT1STxpW3r!nHQdZiv4OUwVmOpOvt9V6fVVv8-SzUSNf1NDJm zh*VWy=%ZiXbk0onk^Y!=*<L1BaB`{S(H+)oW-O<$`SrFqW>%Vqd`CI?s(4uZp=}Vi znwH*$`mFkJ@U71*>Q~++-q92x<XgxUP<bGw%7|>-u**w&p<k>1vgRA>v5yQ-Y5y&A z=Vw(FcJK=XX3E(?4%j`2-klnuMqu+#;bOJ_gE->n0uZG5Rq#dsm+GRYic<4Ts$;mL zTbF*+_!tu>mg$ujuWb<MjJ3t1uhKZ@x~k1N=5;3dHg((`tyaCQs&hi<NE|zj^X8D| z4Slx?r2SslsDfl)JsCuE0=QZBC$uQyVQhjh757i{^HCMlpE80<H`?#w;`6kB`bb%w z^+^5Jv}|?DKNQgP`_vm?=75!+N{lepd9o;1lOoNVIrERo3%U(-i+$wMO%Eib5G=oQ z8Z@~c$c4HsBFN+n{h|O2BB_kw*O$7)u<Y@*B-zklnONzcp-<844;=s2zqy;7kQ|1X z49FNz=g03A-Y6(vRB<<vCRSB{Nyqy06$+cnb+8i#025t5AGczAwoc&M*t@98Tp?UI zrAmZ-e7cYIkKFaMPEs^PVH-M{^#5x5-AqmGC<;m>v+}?1xD)WWuk|+oX0HsKCPXYg zOVwq$%d4|kBtK_l$9`_R)d<2@u1|vhEYza5Ir_R1Iazfdbk#n@e*osm006CGHC1Dt zJIZ`tR>Lc4&&f_lBOUS+<dSle2s6faAj$&LoxEYyJN3WE<d~a3{1l$cqT~(LsV&|~ zPQcnny(C=8x#@pGUpa76O%>IZ7FIM=xhPD?Ou*z;T8DZDe-df+=DFpu{?XZI%q)#Y zGE{l8LzM6~29v-ceKfZQPkwvt`u%&E=AiDn@aBRqRTunN#b|`ByPA+nTY~L#qgDy) z^9R);AA-t1TKHqkYf1l#7;iO<dhOdSnYF#h9Mko>&BA|d?>TWg9#AmA$B#$+X52Zc zx8j`9W@)eL<4t+UYgz;2+Jby0SS0x}T-WvN5NHn;e2rBqhPYXArf9UA)`T_~ZrQ2h z|5RXK;g9nw=N7g%6Zh#jUl#_g{g_)qH2}57e5UWM$nYcDgo5t`fBBLR(@fT|Y3-!z zwHvnjr440vu0<AbWOV4=UKjRzjjOk>>N$r>q<}b7*}ixAh?e-Uz8|hv0bmH9aI@{I zs6??H+nSP!nXMcT0Ko50-=279T~{^vvN(`oJ|^g4wPXDDqw<Ag^fHWdR4O@{X^Tqc ztJ^+1#nA=Bz&m8Be<%j|@hKOPD`c}Gf>^(~`c-`OdS%GUZ=Jbaf)6k*8^vmXfhAWV zoiG<_sAb*C(0I;$CaKjVrdcgqNi@x$AQn6MbESau9=jVv`+yvB#Z7klZw5j?;$MEu z@(9^|s2@BKg>?BstklS`#9y4uc{qtYNLE}drb{(Unk7kO5H($vo8|Y}Z2}a|_SVm^ zYcD5PnynanggI#pc}<h6cP6Sm-9gNxdkz(gmhuY=!^3HP<Fl4FwzRO5->zMducPw0 z42*7Ut)(fir9GrALX4v%nq4@%C{R%*Q#H_C_|`g-MZUF$=P}DK;#T(;NuW;~i1!O& zz;se>-zUnN=5IWT#x1U6S6l8#PhNRbIp^hhWQ~dG!^!rclPj(q1bU)BXQDkIP-*9P zLQoeE#%m%+LJjKD0Z*s<mY9*EXO9;1g7w-W^eR@aXn46+IS=tTg@tYMAvVK=38+X6 z?zz<cvvoJW2PVVTDk^T$uVyd)rd2X_9QkzTi;t14T)e#t=Lhdw|AMYt38YgeKYU<Z z^G#!893jvB6Mp`{v*t?l?JS=_Z@HwDmxj8e%6xoQ3P}-r>YUQ!zYklxIMK8Ec=L?y zB?W(faZG>f%|&75%Qm(!NO<#{eB$=o4eojqZW#KH+IB|+fuRRrm5P2;n?F(h{FG16 znp?MKH8H3;&f06mf^-LqqwUK)(EsAjv_Qk{Jcvlw$sJ33=Rk~4=pieNs%li)Z3Wrx zbd)$3?n#w2X0pffWiyM9TM?HYwh@%@yB6s+aHC?j2JkQot6edhAq~mB?*DuXN9@<& zcBO8$A#;?Z3XT8j2~(LGO{PO)K<r2^0lmyg>1l&k=q6m5O@eW#>IB~sswqTwMW3=K z$5c7LF2rHt6-CMX>p?k7r7jr`0T<PvsihkbG%WUTt$kc1-&&EPxZYZq=CziF?RE<v zw%XoZ;n<u$SXSqF`#zW^-%-2%iwOC0%Lif>#$vP-Wlmn*GHe`_?&$KaGngK#YS&va zcqg|LAXd<OPnYK#2Zvxf^vek}{w-O4e)B9Zv!P^eo6EM>U%`Tg?~dV`mA-UkIeJSu zWV-eJS8hu!+n-{TN;rFE5(mL6MrL1KpbKk-oT%CUD-b*P6l-aHyZmWwsb=u2_LXYN zp0j#4#S?a^3iu;uIHEph{V|^oHB(WLSqd$2<Pkx?WU4<Z^f=AE|G~=Nyq9q?uae$5 zoEl+ZKvE`#oRpH&TW@Zim^I%Pi_pmtn*AX-8N~mqXpH2Ixv=k*bv0M4he3MS^KKQR z8Xj(EQ;I037}>da174beZh%<xD*07Y2$bNX|F7e%K6TGm-@ndoxyBj4{O^A2e=8ov zlTO^q|G1_6ya-z9HfnFFq6<;pOZs)6Sv~O*t7rVFFc#NXSfL$EfINRIRRT#v&%*q7 zQyaU)R@7n2X9YcIL`Pep+gWwmFk<(bs>?+tMaqWVgYzdaKmm@AB=>9qT+$b{W(11_ zUxVwKo@Z<OsV6dPUCdhJL$X0a0+LJbzLB{I{ZT;vv!Xxos@3+<qM%&kw7H43PV93^ z$0v5OMmuD6{BhJb(X2p!$<`vV>|+UuK<P5tZR1;x)Tk<=K|h!wo;=!mi<lGa)EFEn z>{|N%ABraKcRd8w(P<TIE$5~>Td*sllE6AV*vmH7KR$f#9|}h~s+2V|UxrvazG?Z9 zU5M_!;MB8M4v;`6wT2J8I?O`TsR6RRXvL^7<q(s$=_48stbdc~Qu;WLuNkKpzSb76 z-D^)vL|cCXBzLsA3EtU`0d`_W6H2ee0WZz{9x~tLmk9)Ii@j;KYHvNFDSiD-N1L#@ zfLZ4?V#5;xv}$5gv3vC)*>voK>uMA*PrCWzenI&+uBBdn`pwpsaZj07%~Ox|Au8Nf zo@++i=C`1o$>Lu0#F57YXYhxhTa)R-j+f_q<l(8Rx55SP|E%1E4F5yn9B3{RDIvUZ zE%^2GOJabtP!!4OYe3l_W!B%*y0onR3ibWr;a%K$4@VFl3-h;1s+ySN=)CW|ok_&K zlkF}SDR8hEi3U<xr#`OtjbJL$bQ2TvEm{}l*pc&RKQEI-%d+}gc{^hrN7r+3es1b( zoii?{(Sa}CzNkI7>eH?zp7)^H%5!Yj=Igf;^Ic}Ds#jY-%T(xmjO7P6U<`m8A<i!R zq|>Slq14<Iuz05sgwtBSOVU*QKaEbbDg4A&)4j}_)97zj+e}X;<SdMIX=d8(gDFa2 zTnG#Uu!inN?7?o>SMMs+pECa}|J6qLeEEk<t^3$CqFSZr%m$s@;Llp}L3ktc@jHpU z@i379i1E}e{AXEb^zjMkm0q>N`n*ASy6Mk%z9-cn)_}Ih_+mr#w(?tb&Ct|d*5Y*Y z!zYGTotLc8+Pz*kwsVd;66l(a&#HelJcb6B*;vbkYw7YiUK%w7RQLkG#JUxtyxLRp zrrK}+G+mD|%54#|3-P{~6y&{7j3_~s3n~1_+*$EWrB(~I8^;R<d-saskZ1VDif>@I zF}wM>g~bEctVR=bLfStR&wj@ic3z()7{ncVUE3N8u3gf0qf|;#ygV$NAOG#X<%I;O z=U)!5O3e<nF1#(D*HkP=avypN@iF7P%h^mMRJ?tucb|G@yNS!Qu)5DB)H8QAe*2D~ zV5rs+CrKQ1EyNff1Ncq(Rx_9%)UHq=vjx&cUnr-wYe5>TWNs2`pWsX2COgwxt{IA1 z*BNcs{+|Pl3owwygp~ibW3<JzFc02-lQafinjLl%DVlont*!HVLnU#p2QAv>R<w<d z1iQ04OVY|Qi|d3Ic#fbdww9Pw#cCC5p(XAxv{3h5&yGI228!ymzaLE6$doz1i0own zkDuYISNSL=rDYB~8(T814x055{xah2jmOne7Fe$+`0&%ce(Sm1gj^ZoIh(o30<G8C zrjr&e5tTt4(ct3%B(U)+1oZ@XU29{~x*@gkqsv<AABUGnu6U}<Jo@>3!FbDCJlp}r zA8OCLOh1ymZ8bX+4!H~HWMZq2IEu$Ud9sUFY1{br2c286;1jS@F-e$om8`o<BZ11` zxoTv=Hv0!j;#^+G(Ks-Gg;XrrJ_)kz8(y70b^v3!_0_Sf-85I&?-gCL0OY+q0bWM< z9%A&6Su~XQJ{N|y!(`KfJDenuO4KB{_w?giZCawq!Gq(d1?cKO6o$w`m;QO&NeTWv zA58(4+)}YQ-BgX8ORzs|Q~6Z#UgTlF;uT*zOlZ)wJr>60s?L#*nzQJb4fac;DrQnW z7$Wa_M?0OG0#0R1F-Xk{{nD-Jn%2(}9eNU#fl?br{~kIG-R+r3VkHo-V)xeGx9pp_ zq_*bOSk@!DUpL8DzXd?Bosl7WwY=OqQ@uHHSBi}_M63xH<J+>f!>p_P2!-62GF`(k zqx3%u`_-rg$7a{A^t+yp)bx|DArOqx7)cQi>p|ysL7jMVY~j-;nl$vn9MkL2BFVs7 z8R9+c(hd8?5RJ&*hQKo0sZ|Z8#*e+<8;uM<+CPgw1IT-qZ2U%gJFlaOQSdvpdsn}M z*2X-f`5y04B(8=^==GBCj)h1&kmvKUv!XBJgwXmzY+{%Eh0+S#!`iUJEInr;;F_i| zNskh=up(1y8}t2}T3Q!NyDREbA4^Gk`1a#!XeswluEb6O@g&BuK7VwWypa>njju#6 zCBf;bE$hY+!PAZH9cd1Y7L8dRH3JmXv`r6AN(lZ*a0VJ7U98HWM`2h7x0RjhnWvdB zD9QJB*XaGv6`VJ>|1Goqum2=|AnA%Q8#wA3qFYQ>Nx(-CTrvh<Rdg%sABsn$sJET; zaZ^VItN{xH*}SCn34?zqYV|_C2+uABhY7V9%<>>k-W?@*5|9geMpLEfSf{C2Q-E}S zI_a-{&VG!nPae9RvzQ3py^;7!1Rd7d%qr8xa0)oIae#KtmQIJYa)E>)^c#Q_Kz5$p zG@}|WLG0t+j4fLCcynzEb`NsAxZ%CDV>ey0Wv*<5R1Sr|{f7ebdHy%!3)T1HnP;h$ zrxtmn0DMO~fM*Xj!NUy~+?CnBW^K9Mx#Ti8ms5sei05*N4Y7473TWt=&gUnXsw7qU z$9;6Pps%|aKsb_QKy&tR`(CxDq|+>A_mYn_u(i*D0xN%OU0cU?_Yjrz=FXzW{SO?Y zx;E>fiy%TDsj^R<-3q)IHrmMo02Mg%+28d$KkR#>5@wc7@LcfiOaQuRa4CL0b_KS6 z2+?;n&B;ns`gfqGaw2M^Pfe_!EZd6j>(9e*%FPW68|&41ixzp#XiU=aJ6MH@Ov+#D zbniVEO-J{(ny0D{dx#}V<wjd|g@M*eJRw2+i9io2A^!$JJmBSFZm1kmF<p(s%pTSL zVf9F!;XO6!Wm9s>g$6LkGz#5P)n?W>w++xQyhL{<QfdR^<Oc%eCA%#<28=e;{<xL^ zu_LYMPB5#O?S{V>DVQYtb|So$?Xs8mnZPgo0L*;S3-3*{&ncwn+r&;U`VHJAeE;G$ z$3{46#rMr^f$3WHl(HF^`{E3`k7{bFSvOz4pTGgl=2iM1q`hZQQ*Xa6j17<?BGLs^ zno5(dv<OHO0R`#pkBF2|L_h)rq9DCQL_k47K$?_DZ-EGeF1<u*NP_f|P(pwtp7oq( z&%EzGv-jB_&J4o`ShHrWd)@c1Uf1<o0Cz+%I}a8`^v@g|WIx5vNF9l4C0$Il12G)1 z2bfX}3TD^ZSTY~ieKrxDW7j#$l_q-HFd)~jqb3l>3Z}EuvNeJVAt@7fKTht~kA`fh z{I<1dK8bRQC+^M&BBoai8=8`z#h9>y3)mvr^cw+rR<q6akhHP!M|3ksgUtp&h(xgy zMh1l63olJ9@RH_>N@fZm935FHWyQ2=UCn(zwu{4eyUDtuk@HPmAv>GEl@c^UA?xb~ zyVqyv^97ZAWQV^D@A+}4698U4_6f|2YoLA}Mq`f;fwIVmXbGL+!3+wGNC<6Rm4jq` ztVwFH!CQYgC-RP3n#(s#mg_-8&(y*Df?-M-T&YxlU%hs!xH3S8?8Aa+!2UQ<mPG%4 zFEV3>`#gH}(ja$-dhk^#*Q2b%2U1-q@bHnSHR#}kX-|2L&it1lRqozjh9BW5dZOJf z?Dq-XD5n%qaV>+>c)7#UAtF8Z{mxR2h?!{P@ByFYWOeh|1&LLdG~II6`3)YPq!wQN z?l?HcCt_amh40F_ry_5|W=Y&VhJP7m{xZ~!X+whb3Rb&~-88v>%bL;eD}%QDF3nQa zs-|T2gbM&zim{IxZFM#$xA>1`o9r*&HW?`I$0UAViL||oSyd+vu-<fB?g?K7YTsdU zTNwwdzc}3KBT4Uk0b6YXH&funHXad7QwJ5Y-3yq<WBb{tssT0^jnCacmb(a?+%pr( zgX%b8xL*<FmZScZzY_d~GV?{#he_wJ4TYmvMkr=Q4paq-F+!Upz+E#g+LUoG@-b*z z%+fK+y$z-{`H2*TwzeDonQZAz6)d&!Faw{_)|{JK`_nC~5Ib;5G1N+=%k~?J;zM-R z`P5rI#h%~@tIfXyqZBxGkt)Sv7grJp@!YN^Dv!Q1GMw^^`2QC*jLE>4dM|}X93MK< z_|lt*nRFxPDAXo9Ajy_*jwFyZfPXszlO|n&J+jZdmRo~1@*#2Iw`!S1BQ;%KU0qe! z8>gQEKDr~N54cJSMq|NODajajiJaX&peV!G9l=`s&21S}uUB_GFW$Y<3p$12-U4wb zC$l;d)6)Stb`^FBlWrx;*{X(1{RU6ZYgilULEJY19@KToIAB<Z3s5f{eKbbz#qNqx zvgzG|xinsOU{9DOR6rdU<q|`OlLCECQS}PI7xjeDR)Z%Ljk+^$C}H&UdFm}vZmb3v z{M}1SBzntFAjn5&!GrwZy$>_MG5P6whFH0cWc}H%B^)slx)bv;B-A?I;zXwx#?r4~ z3)`3LwFVP^e{p^SRI}znQn5omKtOT4-_U<r^UGlaUg`rab-)?IVKcQOI5<%!WalX> zp=lFsMgn~?2!vI^zymintK%zHyDERK{>nEg-Z*(<0R{bKNGqTKZ|!7-I+hhMyZEou z0&%BztpF#k@)m2hF&I1ZrvTXygI6BWjedXo=M@5Ksuf{8RvuUY2|V%GqGRqheZ2ZJ zgxON&;F|R=LXcLu^E?r^{mDh}L+s<p>kS{_+b-EhZ=707R;N_8_?t$Z7UYYKyrzn- zK=Tz^{Ew_-BZf0f2=M8i$3%MmQQSa)3zx_upS1-=afJx@s0&c{h}=^vBX2yACT>9h z?_!PxGOLta4aiuWV*1M<R78~|xvjj_;-L(8W;&}h;K1=RGF<dfr6F^+a5u@lN}$7j zn&M3MpWL@eA-NZPoJS#lAI<LdmBBb<@|tNmfr()srwpHs)HmPmy^01ak{><Ap50F( zXDz~(tPsu!c3LKC8Gu6k?$iv*6jmBX;r{VzhQ%O3uu3qQsK=P6T$*qPXDK^cppjH? zHyGcT8@cCTOj^O)&rfIbe=`mabG_bIOS1-MkvQ5>uKi^Y&m}O?VD`Xxg_3dD(oUW8 z3Gct$enJL;Zn`^8|H)1r6jlR1OgSY0$mvfIG;YnXWbPiS4W@{=@<v&z<)Xd$C%wXi z8-3t-(_RwgGo8ELz!e`&dD_Mfx==ZY_^s99eBv~IcQ%q19#R5wV}BV;EGod6Jmfo& zVf>TtF<YWz3KC5<{y!4;3X!BNj)beE;ut6xC&+x@8R+pR#^i1`Sgn^?x{ab-NL<0| z#}ni(4|@iDTkvR;se9ccUbqQK>+cmiGv}TY*#w_{W$}HG&>FhOUa|n@xRMeY{rDZo z;vuO;NQ7KWwCqX|^)c_-+J3#d81fP1l$#zl2?2HN(dth0sJat~;ZFfY-)-$y=(auY zFMw{56Dx#=Htc>(KG*T{cFnlqAe<;MPXK~w=YC`WPLldrq|5mbU}&Wlp%a<5!X@8- z4Vk&Hra1&V?)cGmX~S+Jm#a<E%SuZ))2>-9ce;UAeFGYo`iCVK1d!t<C{o%az2a`z zB}ny&j+$v&sb{+#PfNmc&k=*Dw_1ZhJoPMTU6^$WstsB2EiGNIu0t1>UHlF!Mf~F^ zJcfBP8DwMO^M}f*r|2HT$u#|!AusEQ12+tp-RFqnX@>GNf3Ukd`M~SAqIz+*Q(~^% z;A91~qD*FrmDwLKVd-E$cg^Ici*t=MC}2QTRCuz$iOD@T7FAn5we(?>>T*7n$t93u zZ3wpWeT#aw*qOAG0JWA>A%VyeIc6StcR$6}82@GXiV-}K?GLg=1|ytY>I4T}2&u!5 zzAG@Td*-OR7SJc?ER9uYpYJxUts_ELI24&S#&^p=9Df;>R_Wp}Oge&|7?Xwu?FKLK z|7EE9mqC?Ei0z)LKSb5Rqy9lg-o&YiRaD<+Q_vdSa2hXO;}P(g-0Dg$e`FH6A>Mhl zn{3H){+K~3igJh(vhT{dSYvkK$fsnjf#k)heeIOHe2k#kicQWHN~wDpB-3yNXlP~+ zb5Pzs5UW0UupMJ$Y9Zf%Hz-!l#5D-4Y<c3Jqi8E+*^Jcbn}FtX2<J2S2|zyn5@uRZ zFpXUgwaW7s_N|?EvJYn3&P*=w8??bBLcE5i_Q*A)#+LdRnB0Rm<G=3Bnhy9c)POu# zZE8{c&^x2G74qU$z}SPfoNiUlieC%Q!eNR>Q>gA_sUBfX;#P9bmqkn!s=6&@mo;-@ zYu4q_e9bn1h1H}3C%$(0t<2YP(^9gK{I+Yg?fa{4E-DT@gd~psI%GfrWS}eO4pFPd z4|i9orocH~GRH*c{P{PZRN22TydJlvo6-Pp;Y_d1<$7ue^902N+<$GXWX-%a_qqbU z44#+j5QA;OX4bAE)$>R9UB#<&5;l1y0WTwvOKynwp$pk;@EpM(j|bflum2LU?=x&R zzWZH72w7p)17c(cgq696zCKL7(|awsH7uwyvDkLquf)!_oqg_IMNOZ;)-Nw3%b$eE zZlod^j7&47XcH29VN>>Am~qL;f8u~@*k6X{gBDKXbOEtu_qXnodh-+G#*hZ0{&Ohd z-IDO{vNm>NWh+iD8g|*|VBp;NmTZ1ob9IC5n6r!kZ|{*-)NW-9`DH@_VbLsRu@Q(2 z4WC=<^RuyyS<9V><03A2fv1%Pfx5*zLK(K2mzvrO+91Q0rNVScUFqZogyb8le8~n| zrhO3WY7XDikV(ti0tV;eEYB3a1l7p9xREYvJZA%2<cb0#;UIq*w9*SsuEF{QfhZFJ z9JP<%>4JcPY$I9I5`mgyp1p+@kGdDORu!FivW)eADq7tzOw>yQil7O8TbKVbOl#ex zxK&KEXKs9_eTv%<dpP>X3;`P|Bw16x3`c=BnN;a>7Frq|@gy+rT*p-|trAjAuv8ld zNqM{0Iz3_nwyOg*`ODyoI=18v#4^E_(kSZmb`{j|P4F<tZRe;2M7}-j^v8+wM1RHz zSK;1);tZq=07MIE-q*rTjP&pxg5&ch4J`!<92c%KrI%|owkUkH(e1AFt0NzSl~%x& zIpikJt;6cvqxJ{Nv!!HIjC%_<-OyOoRnRRAtxV>6<|2)@0c}tVM{~7bT~BedBoMv+ zXvsR8d^aE}K5AM9w>}sO0WJ86!`H!iGz4rZc@Boz6#0dzwuSY47C9J%rJMW@2qp+( zOCI;>AWV*RT|l#EI*6idSRwsq=x!!_`4qyQNKg04^LQm-nXpw?^X6(2th(ULk#z<I z)Ipb^xRz|FI0=ni!$6h8Ut%&wWoERM3vM&yVLLA{J!oBop98Cka2{|7L%L)t>dwn_ zeMyf-=6EzDPUaTKlMj^RMPi`-i#rK95*VoBH(Ris71G>@$G+Wnq;VMGR8-+X=OHDd zy2+%JvZA$N&!A$N4~gy}xsvIi?(g=6%0PRima-w4L>R$`tDb;1PlM{ezT5lqmx1O* z_F6&$f*0paTIq@5IC~E{+?yr)S$<zA{4W1J^Kxx|i(%!S^$32FNQ%}qiiPdezK4>K zdgoYcM@+ME{I*a%PJf77`|-qt({-XjJXM_}yV2ctDy9GA<iRzbf+9!brK68@rHGz4 ze;F{91D$F;NkObtv?iRfrohNeX;_`!ucR;rp4%Whg2pKv>hdaz8)}W0(bbQaR-Q`a zL+X2+P9d~<L7x$Y%kb*+OlYUeISV3}JOV;8@B}S~enWA=U7CsKs=y8$;rlhwis%@V z&9f-csMbHQdw466AM~l5BVLP%#7rW8A|Os@8!3lDOe!YR$3GZ<Y$9kj15>!xp~}E0 zwMT8qLBr>5SEv5r5(ScZnSorB@2T(!%rzW}jgmi1sBgt@R0xZW9T?kecFS?*+|HLr z0?H-p$Bz*J(B=>(tmMZ#>p@b<EVgZppNG6zV)}LTbBkV67{(sr9FG*L@Pu6!B@MrQ z+R&P@Ji8g1@<pl5D4p^4D(w`X5I}y91KL&2ar7G_-$*Lie)*69!`v;Ho2rz*=3GJX z%?<>?h{V(>d}Fdr24aD>d!BZ=IU+`ky_v+hJin?Qp}dwg+5J^XB1}kWZec(eTNAP& zJZ1p8OGwyrj*K`z1=S=j@3hmU$6a|2Py36F%$3C&>9Y_JI$rSCwYhOvcBK{KK~b~| zKAeXiK<ifm?8xg}pYOP7_N_TO!#AOi@n+G@MHzvKHx9yecwTpMlPNf+rdO83e@uw4 zvhhM9IPuEZfN$3(eWat`cQ<&}n`H_fzA8sVwXsg^gQ8WPI7!^)Ry9h&obmY25BQ8* za=o9IL3u|tTyf6qvk(Kc0C(2fi;(r1&vudT`!@%7(OjDLP31tcp~ivsi=BCr!yTnF z=2vcxTZ*zud$dbnS*SWE>$TH9%m56m1%`|v<q+*>JxhiIq=Vn}U*VMY`dsY$sZ{Iy zT7(MGIkucCUk(W!EcZ_8@*_-WEBHQtaW*Vqf>5E@?sSFpJdG6AB`n!Cdd;5Q^J%iq zLV?D$d;Fp((@9^E^OUG|XHI48MTmKakn00XZ^mv{<^4-tccg<${XRt6&;xBLAZL;p zdS10FN3K5VVfAQ%RI%r%sbs*l4Y8CvRLy8>pup<h#Y)<uK2?I4e(=_6hu0O+o3QXT zV<1*zqZC+C8gR~>o-_B&JQ__ERZAMf<&jy1~(z&e0L?mQ|69vuPXYRn5bT8YGT zi(u2nUid<G7zXBKcA`xIqjOY<1(dLR<JZ!~GVUf%G=TZci|@=%H4n26AZ#GAGprTt z*5=g>3G*^t>$kJLUfW09Rtv6_Tx5!YK3?>>K+wYk#@!EC7ziRa`i@4%Sn^2$_7?H9 zQk8Ha+8r+!lXLaQgqUI8iPSHNh*Smke(W3W)Dta8#L9gNxY(=|`Q9t*z07=P-{FtP zR?1Y-C)^w<NZztyw2V}b)5VmjaMKws&k$FQoJY-XkF}Vs__x(r`bns0swGKh!)QEc zOG4;Or&Z?l?JYZ!uVk~-J5HS!1!+^2R3GB2)(S5=7m4F-L4B^}h^(Cp*k7XSlTDF6 zY!Ou90#xLI2GPI3T)14F(fw)ZgBys5A!Sj;AC@m(F4#EZ5#Ci9A?5k+x3QZTwkAk$ z?C)^Z3+y4VEq0vQMF>!Kk4VMM-f+9U&=tC8{6bXZhCkpxg%R4|U<_3~$gR>wP!Acs zwbHO>WtKWodX$;+7V`nZYD7sUj+??b>^!W5B}ZM-lhgaxr97`+yW1IKF_)7*2Gl*; zT1aPb`gsLd`)SXa!R|iM1gR(`m(<R4?l;<U()+>9s%Qi+R31sJ&%@C~AAXoIIMwKL z&uHbtEq%0JNBF{WB_tbHUxm+o>m)eFXHW=9>s(`+cIX!~faIS)%>3#d!B?tGB1v`S zFi%23r4WmURZY#c9>V+Ud8vKdRo^dxxEymkOcX6fpr;B}kLUC49e>}eUwPJ{Edh$- zw9>jkc?IKvf-p+zs`s0a4bxmkhry@$+)3O+P{p+F8PMDEz+`a8)aV!4E}4ADftc%y z-qQ#M7sk=KDcB}JKZ9{ncss0*^_z;&VyX%Y_lbZ(k-m7Ayf#%vl_Fvipz;I`A+P3) zM9x^JmJ^5T>gcB*J(+b6_SD9x(!}8e4OP;a?$G+O0(8C8^_G+%j~&jWQx9WPu{3wD zsj)hdxMr(ViCh>C9R7S;VNGa#J@xy8CUxVOQ>X`UKn3^B!Oj_|Xv^q+S+)U5I?_IF z9yRf8XC!d#XBqZ1)SwcQ`_m{KpPXDO{%dOM`mK_8qONzYgaZ7RWb?2xuw+KZuZ1~| z7LF{@`M(UOHCT4BK*-dwAWAe%FZHw|XR~<*mzY3nIs+>&D_mtUaK?QXIS*APn8nV- zAo43?-NN&o*5Qz>)QPihob^#3$r+L?no_e;ud@z&1V9POC`lc-!>F&gk@qJ#LX4q7 zMnbRUi7#8|;df^iq~P~8VKI_(JXKq$wK5N3nj&4Xw0G(3qtJRrn-z&x1*A3kBk|X9 zYi9HTyD(w1nJVzjD&ytKm4Ti;222GYQ&2xrtImF_>($Kk&v*KuX#l)jHUJd?_^D9& ziJ)w`3u_lQ+63B~zylr`TUWD2KQcVp!Nr~_bRrr=)@8%vj$`2(Pcx=w-e%y3`a2fP zl<d3Kheto2gl6?lQsoF{>`<3Uq&-eXcEGl3a*L3FUjSG6j#fwW_iY@8ACDR1V1mP> zg8QV(yh6_kKfj{vn?9R6FD)c=KQ~w6HTu*4ub~FMO%5UqiW6pS9Q}oLZ@N%3YeMVe z%{zXn=i-EgK5QX&uAS+$gR0g3pnW>fEtQ*|NN@je6^LZntc{5^?LQzK?XT=ED;(|c ztVv|^?TNX*2Pclv`OMr&8;?o%?u-=0IT`S!MTKf7y>IIunm$khqu69+>FR6rTd%i9 zbHs8E&YWsn7QTLGhYCu6CBm!JYT-y^L=<>r#0Lb!&e$jKF;6N|?`IACUz}Qr76Sxq zPYix@4M32%U*@tm5-qPX6|+@s0!4?4Q)}AYq%$(QmxCO>sdxBkeFAnDC^AQo<Q%mF zy_eOU$lNe_pxV0kv{ipMDm102%!U%sBg_J*5Ve|h&dB66eFN{w^kJd(!)NwVd+)A? zSz;L=W?i9@UAbJ4DBGGJ@5k*^uDaDWf|_nLo>UAzhIeY+AqIDuae>?T$E52jq?~Sw zCCV%|csRIY5EfQI=^E0FC4@nGEXM;^YMaM1`t@p%!)g7w1WTE*Y}Ht#9rnsK($^7D zmGi~fB9dF9JL{%Es8(o4DZrUsGA5~ZL?{vKlG}=opP1VZx{3F`PJhvP4K8#Az*i9l z;PDLtjEQn@y#r5#Y*#>j4W46xhNNzx$p8w=e%0pyCuhQ-dY9dB5>j0T6^m;esSWFH zz2!G5fd41@DU|c4c>o1d6q~krLPafX4QJ+1*0P8uq8-9_MkAEGBIL&dS%b!v#byJZ z1zn!|b#K6(Z(Y&enH#B&M{z?6+CyWq^E$4LD4%WnU=*70Y+2<7XeVtj$Zj5!?1R)U zURSe9<|cm<|CF#}3SLUaXGiFkan?2Be*k*N;ATwMs)j#aNR6FGO7M&u_<6(W5I1Ri z*-g|9hP(K$qfjY4AV(yJ*+$A2*>3;{+oBVDyNdqVL9i;6=jcJeL7A{H(YK|X`q){J z(jgee<>u|9w57t2B=FrGXd#^44GqPVS*K7E+l3{GJLndK0EJOqYG>=lTf3A`L2_x! zu9VReVW2+e)FQ{WAuK;3+e2Q7mfi>7`&LDt<W-R0WU%>31E)}eaq!DPhlHDIix)C8 zOppONdXTq}1|B-0K=>IgNfi~o0TN+KGKKS!t$+VJwm@yj({2gEnIWil5N92NlX87% z*lz5gd(SU$t@2!LqO4K>UA}FY+P)u)m$3K*8v?J%IIN#^>Q4_(9=TW&%lwt28`;^} zc8OHnK?|@lWAw~$x=QTMyW3=ZQ|?^tRC$=MOQh5&aC*8L)ExJZ5i#DID=g<)zlFa0 z^iA_nrOQ&}i@yjX_0)F{6sxivGo<HXH2%{c$^J%bE+)D`LJLt!pOpEw_7#A_NdPi8 zlQ+Mo9cB7k#KKc!Db{5eIDOoXYdwPHN89)}d2r~fJl`3ACst#zgf|A5t90(w1@@7A zVo!8nE6;pG#b;JQL)f2!gW%);Er76)2*grU4N?Ru2$!sYwF6`vRA*);eXSP2wk?Yd z{T8_uHpIiIpm}$E0tMTBarSq%l&fd4=a0b^zV;zUET3fB_*C@)j1`bxaOMm0<DnQE zS5J8dg+cI*4OyG^wcdI9FGFeAh}!oQ=k7hK$EXIl#M2IJKf6}cZy%;U_o46IifmaU zT%jCr+D<o{C>!4(9RvCaj;bcrVKNnvgx!^YX9jr)7o7(;-8wHSXi8<0)+t$c0uxcp zy6nHm4R5w9By#)g<Jf!)ga1j|zF{!d2w+ab&;Wh`YJ_v2+`kbhBd6cysADU9Aer&B zl~X5>>SZQK5k$WNapsY*uV;qBwHJ9BW`f26d00(dvIa-5wFPd_uX`q%YE(|q88E2n z*?Hz;>nlP(T`IDt+yjAi=1BdZ5D<`#@C(<9y<VlxoVA~j&A#s%B0?T6^rd<dg$|Rv z1GBLl^9G)HcAizoX(QQJT<;#_o-9RJs>C9o`i<`e!_C^&+)B@$_Z_M(Qe3y>QStjZ z<<|u}0}hRi-<RW~$lAM+7~iw$vldASp(XF?7);QET5+v@J-mk_J>?L!9>dx*hc!Yj z?jYi2pc(Y3(u~fTds(ihffP52Q+xd5gi&iM`*<Y+R450hD&mvv@z`jnUa=>qQSoYo z$5TH}fqw`>91qBxW5~`PC)UYvJWo0S!E6B5D)u>Fi>%5qyWyx4E^=0i?NBJ%4T9~U z-=gFNeOqfLr(Jl1D>F_FepLZ!;F{;|WzM_vxNpOp>Oe%qYv>Yk&#v3arn5~s2_scy zowi&RB3<u1o)uKb6gxO#i{8mz8yB$0f6X@2d=fS1x8~$R6ztHtN{opuTg?$4`^s~8 zIKB`v>QJ6oH_Gecgz5k*whIf94m*bHSDS^C-SIH?K6MihljE6T20xt7Vw58$&KiA; z?W}m&y>Y)L)(X{-Gp24MNA1#sOzSE|TVsBF7h$eNT!iT2qH_{UJ(*`>J||Uuvo^E} zA5#pX3%72lk|T&Qt&3P@?5dMkb&Q<Kx_xw(;G3)e;Pf@&+y;xmu}JWuAO}V7fc?S{ z;emarxWIQW259mc&sbQPB`Ah|h4O}oH*wV&2hx43F<->DmWBz5iL<9Qf3m6hxNDyC zh6)mc<DlX&{A~Eksp*P3A02yiOT%YZc6$5TlQw2bST~kqe-D?q#nQiGY+Net_*j{t z$?7jdk-gE@mT>_kpsPOjN}aQS$yc<rT<xD9oUBW-ALWI5=(MSnf<;<zCx{DybjGpT zC`<V`aq<)t8{LUML>O@n3pIyj#q4xA0qHbah{>L0nIxc+__Zl#s>}E6?y#2jg+CFG z7@348MdFZ(_%H-qKs9ko2~s$=zad%Oj?@cLT!t<J4SU;>@iu9SE4u9(2^)DJBlsY} z9>lRASSt2@O;qt&_X{TK*{MUcJ|%J{Gba1znn%WS@Adc>u40k{?UJ8eK>?pJUolzK zppgT>I737q0aE4rzl*_t;<7*a-q%rhU$(y<vE@O%8|yr(amEGUSKboe&U9n1H5S6( zZo2U%6qw~;de9HOOvENoMZ)lBr<82;+7P9!JK5apsviU=f|NJYqX`uk#?d(!rj)|9 zr_{kM?#bVLQ$IfgQO~}HvFr^`r`>BBrC+i4vilHYzxCKPEkO9)_04F|De8t9-Y+r; z=%DaIVBHay!2t-5Mf4Qr!eiO5-hWgt#4h^{Rcl@K5SFKWad-c^uBM@NWh7}sd4Cv^ z$z{m<F7@qVxQP=5v*>8;IEqx2i<<fkbmUr7)@K%;&m{3)iHQ6Gq!3|%U=obM_}iR^ znpWD)th@K!%@x&s4w)}U1Z^IRWty+O+A6UNf4_9Y`mLcDi-8Cvs0<)w0ra8&?gwDc zWed^_I<t~<;9+ET9S?q)ZGBka(u=uJYdIX2g%Y`fR+-sJsgqILUhi`Bu25PPzH{w4 zpXY^L+s`SQWv%}`p5)(9lifZf&<S-I{6@)k8sFBC_RV>f!0fzbEguq%zSN>}Iv_<W zef`1d*9`cK{{&8v0y&NO9JDGJv-UI@hcIKwAqzZLg|k0IMPak5fFZ<d8Mkdc$s~Kb zdy#kY;&r~?SY_aT`ma0mlT4E71-L=|VT0Ba#ylmqj6+dS^UFKFfXN3$MxfdOctM}w z9=nV$!9h<e>#ec^Ij&r+VN;3?ksdM-o?ICHZ`bPIYshWjP}kTx8pLWZ7zGa2M5gMh zy=OD+*Fg!tjdIYB!iii0WM_Qy2!r;fZI04AwRPi*f%=((_s4j}GS3wIf=506hb2RH zJ|PAt)rGa1J)A)5KGV1v79^JRqw^Z__T9dQ1=C3f|96T`={{$zrbz9+iC5%H?(6Zf z0P{f2|EDMak3BHWdh60_o*stJ&oJk3u(+3i>=5UHGb46&(51waoER(?x%4oJBlGob zChEROdhotA1K<M->nX*>6wybcS%QhHV$Ct@>Z#ZHFu&TRUTbUFQa4bQ&S?7G5vqKp zN3$uyUo5y8-DZ+6?e^xb<x<M$AC<r>S328~hGO$6HAcjF8an>_x~s})Tp!ctmtnz` z`PCYhh~E(FPE7Mu<#q;7g0Oj<?Q5}9Zw{`1TEud#<=iIH>g)0!jQt+|QaDj|`U10P zRmJyzZ?OOPUFqBdu!4yZ*`7)x#=*hiK|<;2-<~n%1mCedOVp}`sH4@25FusL8(Dl~ zvbBfFFEX7yjG`(RE$ijR3juXLhgdX%XO1G;*`PMF2AbhfDG?_4^u}YPFaL8fV5&hw zzD%MOS0QPWqIk)RC)Kgs`{fhEH?L`6(*!Bj?zUTFRDRsr!IxLo3H>~l;=BQudKgZb zQ;gAeumq~6XNAX@Qike-hu#CVM8m5ob5Q_jF|%I4J5wMi!P%H^?x`m=hhb@j@kay? zWPu}2m=o?;4@@t<D-L;Ue#dn;_pu`&`Jl)B6RJyzl8aP!<Y8^)uk=1JuB}d3R)5FR z5?X}aaHIj3yby>*-wedY9~(sZ)jl_v<S~-j9{Xea;CfS^!)cDbV+`!S*xfG=Bkqor zBZJ&<=PSho=I10J1)T2-@3{_y;@JN~w=h6hgVYwgXri`oh_>is<N9?q>6=@h>#*0_ zhsaZxYk_Awx7Ax)n}I9HdMuDJ&BFVNY<VTkK?P27?L0=sNsLPS9F!`n2PDRUYTVeF zPN>kjDgu^w76LM<&GHa$X=!Ut>F*y?IAf;%`Bo%E#7;v9FJxhjoZLJZWb*`Af8CA7 zh+46B%!^yIylZ34|DUOl8s106y&NVfQKZaAorX>}VLrC+mmWlec2b?*0PBH4-&Jys zn~{u`t9=eAXEniU9D82yxrAmoJc|gzV&n<Kf~yf{$18TAdK&NAH9DC4^&K)a$d#Y| z%{CpN<o2kE#3&E)8clACr5xI1_SNbo{gAwcOdZeQp0J8QmDza+h;NsbG#RVk$?~*0 zjlRLJVHNxa>hcXj&^B?_&M=Y@(2tAfaxIg4q!+04pG>jC3LI(gwus=+DurFCd44}q z5E47Al=PycZTTxPH?A((!ggYR5Y|aB%o*d8)HiN_nI;{h-Okc@wHv0kUXtI05TPV& zbmR!NO#L&?nCIipHT(kQ!Ksj+M0yus1?9w_C0W0%ZGCk^ctL&jY=^{MshsJG{{M7t z{wrg2ixtzDGG$dAFVV>Iz(6dT8=m(M(EHw%5g{nkYrc8ydTOyuAe4nvwvCOh#sqo1 zF)e?7m7|lps+9Uzo`co%SU=@BGd^hJ&W`I3+qa%)y|WYht}!vZR12_Dg2!3EqpV{) zoMcDy$LgdSA5K}!&WGo-zEdj^zZ|njN@yvi<f6^+*));PHi0^%@eP8foS*U;AAVT{ z&U^8FN>Bw7o-!B|2L7UAB4;%wYf|y2%ut-Av(bOz1?*N|9VHEz%Y(Kn`m|_rn%#W% zVOn3)gzrw<AVcO!{M(n<LjT+g#i(5JH&S48*Jl;$mHUamV)%cpqDVWV{gtp=hkGL= zC)PY5Pf^7RLM=S~aC<MC!#~_k)~pjtb~zh^{ql{+2b->lXP@lK+%myQB^vV|u%?gv znf77L=LM|^&Ao9{Ms>;fnUNOKa69}E?b;`kvjf$QDKuGKP=U{tSJZV3+L@;~7U_-? zl(Fc16}(pJb>7nj>dt8IdF6ZNZ`V5~oq1dK&KHrs8ZyE8YxSXFURldEcVqg0J-p6d zdwOU{dxp`#%aH>eAqL~t&8NUSGwO{r%QNMjrm@*^eLAo67?rM43A>d;343z9kY-I$ zd~9@WxJ9Q*Ft0#bpKxwz2rfsM@h`)Np7eD!ft5A|2nrqQj)t8DjCT&!y|GnM?%1w} zJoc4C`uK+2LaU&8uET`Jl@4e2-+kX5&s@&(nVji6T`J}_C-<wd{i+<)TG4mL{U`SA zql(e@B<UgMIG0L^)V*k`+0v~gCmB+51^I(AirG%v6&4^=V+8)rzf>nT(tM;Vx(XgC z8=$(9)E^Uv;Yzt|gSg&j^eLbE;N%kT<P`rH+UN{Ss}4nC?aGRM8yIF!QHoRM$@180 z8<Jx)9qVm>Y;hxaDc3ihDH$57ajkIe>0buZunL&P2YcJKjF&qK{jk}8zTP;vUIo=9 z38IBBL}DM2a-%D@YOPaUGj>cT*vIXGw2IBMXRMO?kOG&C^w|gRkKre3D@^g~9^0bG z-D%tQt6RTcHu7)S0mM<a;6*vMVT42)Po9h44^x!a?lbeD@3&QMgTkh2w5~!88;O~( zH#Mx3Y<9e5ug5RJx7zG`mKmOKyo=ee07RODSOLK6>aiWg+Prowh*M%vpBUFC#hG?m z3rXM~4CM|12A((?qqDZliXptZ4HH}YebB^Yo!$Le?d6n`Y}c2+%d|Ktv9e8N>kGmY zO0i>5%VNFdZ2n@7EB*elM)&@N2z@Vp6Ct*)b%T^qhnq%%7<2s#+6JnRV?TzhKEChz zf@<KkSwK=rmrQgcjyXh?>v_vAunCJw@(<%dYMnseq{SL^(I9$Ux6a$1R&QKYaz%{M z<aPQk{b;j^3T6StAD8FcokEH;Mg3`+-0$UCq-8%!>RxX*RR4B9<%&5)5${_7BdkFI z(W(nV9M&G}gKe{QjYbyh4DB07)}_`%0EB@j59knr*j-JoD82AHsW58RCO2?!h-^k^ z)oobkNK7dWGkU2FA#k1S2Mx!qTC824iuxE_I$kT76?-j1jYx_P#9*=;HVG=@=l0EM zC}Ysyvot)fVj9&}Bu0oDnJR`OVL<Da6B1z7IQo7aV~;fEt2EzX7pyw-VR~Clz&Wu^ ztA!Gj$L?0^aUi5&n0l8t$D&NtROJdi2mt%}DJ}-be}-`*4ffKd1g%Is#W=s|n)?&A ziOwn>`>c9<Z{KJQ+3`()+7uln+mr2qv%!@I^Ip?ubt$q}QXLGH49j<Q{*=jY9=dB1 z%FewUp;#B&1z@3T&DiF;CC2t!Y?Z;3;rZYfE^jz!2T~EI8&T6a>(1;OZ8DUQh(CZF zN)~>C>=EA%pajeaPCMUWy$U<@Mie~~+y!#m(w{Y;FbAn0X|xy{RTifY6Z1dkj#y2i z&~P4Sh#{rSglLJJk<!6%qGvwYmtH@!^Olp7^1K-vr*-!S(KN~j7Jl|nRrO_IYvG48 z3T9G)dWV&MXpxK1$2b$2AjD;g8egsDEIIbaMBAwH4@v%K@?Tx{l~<1)Y4v4AGuYn` zYwR4*HG0?gpSiq)-5Mel$M0jAATM|9rV8b!XH#A!)yOa2N?F42^CnS){J+9{?IFUy zY(7Hw>vOH-=M{X09vq2llLue?We}-zDTf5$tZFmHIO@GJGM_SNyR@F!r1?9_CACRG z(%LHk7-k&uymE1@on?Y?*TmDT`;zoeMX)cyA{RCMiXf65D|QnaeS}vwTe#TF##blb zQFco~i1@6Xw_D}Pasm)@8IWE}`nC6X%%hY08PUxlWq%N>;IEW7q|?J4W<@r$(*xf( zLd$a;V{(1h*|1wY8n;d+S%>*3D1+89{T7_2rnEBaZ|Nj*XxW3QWos5zDV?T`-xx{K z8M<j2u7MWf2*6v*S}+=JrS=qH!o{kZv_N?`hZf!<d?`_T_LrcbU`r^*yXoh!-JV=r zE|(vb8}BG$oZC6-VDB{+C*zm>Xg4k59y)43U5j{7u_H{W1ll6PoN9Afj;+&iax*er z(>nZdkE*@^>B;Y{M-Ws`=^~bOdR_S1_?%bp`wFCh&*!#)0mVSQr@Wx_r<5o>M}o%9 z!pb^)E|V@#LQBL5Ss-&pqW&yFI!1|2E2aYakn&kWXz@huvdvm5SU|ZC?p-y1^iVgc zlp(KIxq-yhrP{_xtQ%_eDeNk-o9S8}N)B{!bM{NEIkpmsYZG(ubY}I223&~CRCzhm z8Km6e6ykTO_X)#=4#AzUCx91e)dfU*R5Iw7CIE@0mkB|FnKqNG_Z`le8V7Flgzoq6 z2}$9FTkv76mPmeFi#<)zv?)w6IHZJ@yLCxIm3cycE?@$q>q)Tph!El6hNMiH2=Ecy z8yi0CKx`d~7NW#bk1?PE2&TK44(F*UfZQ5CQF*o}LqJYKv*Xihd^m4A9CJN_<l?)! zV~IV+fa<$w2Ux0BKZCJ#cj;}@PmvefG${iUN>qt6q{m>aCpt*VMDp<^?+Juq()%j@ z+oBso@}DP#MDV6Hcwk0~20QL!kj(Y&=dT^-v9ynl3J0901fPXvO#wjbdBCMGwvm*| zWZnw+r^+pUhLX2GSLZrS4k6Gxmr!q=yXxs|R>ak$Irih%_C>ERxb1du?j-G3Ah@YU zi4Q2A9Lf7Wnn8}@1x7Z?J@3}b+nEII#pK($lYy@&Ect`@OH1?z1qP6NX`lSWvwTeX z=3Q?IUgHf}1&;y&vY;6^#nlv}wAe92zILmO_GeT3@GPg*L96-j{V~}C%?FR!)4x5p zeFo~tNA4Jq4ioEWoI!(U+8+&m>y0rEY?(l-s<P4+BUR3jl&f&VagQKnKWiw7ov-vm zWE#rJ*5*eXf?o%&T~%TCuSW?Y>g3Mo;$?W-)e7gFK{Kom$}Y21MCzvQ(HX3OdQ2j| zhBBH*0Y4^Aew;vT6@@ukN?tNdz17=gC?Bc#XMYe()h5kF@U)EuX0x7G_Pe-VeYvJ8 zMO*mZ`u2+YqtK}!6k5~ZA*m=6hvHv-v=*@b9qZCki&VYcPvB4bbFnPoI3aQm?^_5a zUD{|Lz!~`-h}E7vlbE6_h(9Fc-oEPmYeJ2qi~R{zw~m;Zq#+$BHLyBkfAi9julc>N z@6TIaA=x-{YPjLSX2}a2BenD5-x@5NnhdpOM0wGj*OPnB-f-X=0*^rT@Zn&iF(rej z&gVOJ6We---&Vw1I?yID>9H+Q2K}($@-SFjb8;*^5XC}i(2jc8G<iKldfUgZZJew6 zz~bXbltTmBj31IUP6&?Lmr*tHl$rGPHRq_0>muFmE%0w=;XS*THA8737$Kz=PlSNP z`9jr%&%<7^`mnA5VB|#i(`(H^+`oZ{B`15)?1B;C>RrFOTz-UB*fR{hj*%*->~#w; zzMa`_S}YMA%hwi1ziR%Pu{^I{r7KX{^HsSC?<~~gN?b#_=Ghs1Un}z?=U3c)lN5oK z3fOY!!U7fT%Y!&pze^rYr*iflzMpVJzF&XTeIL>{6D5sJ4+e2)*m@FR%)h~8W|D4T zu{_9T+NSI#RWC5mdKktGTUyqVgf)Wpl}i3Hc*yA5h+K*g=+3(1u{e2Xmlhbc<tr=< z`b`Z7&mmPqzAyaN$Xb4%W!d{OpSzit-|6=3Ywk}Z5p+Y_MPk=fgZnpjbE*3ZW*3`w zZ65`>?AAx5GrdOIh7dRybrG{`^*>lk24?Tc8E<#%3n8n1EQJab;GE;+N+~cKOx+hX zb}7B_Z&{$)is{@zPI>E~Q@m0=cE3ic;rK1seaC=%#3zcL3fJDx%O1$H4+0XdkgLhB zsV2S@-JW-p;dXch#cO=1G3n!<nwHF7kEO?Zq89~4(shXgJ@29Sh`Jjy5g9T?d(Wa} ziW+;x!yV*Mg(B=4P`V<LB=l{@XuML%c--v<@9BTGS<gh(!d|r)$9($d-RyOZJX4@m ze17vh!=m+vH4)xAcB>t<fDb(KK(N)_utf!auA*P#;m>zQ>5<V_LM;cd30U_L<c$%J z>N!d#+Cu>Iz&6sGP6`%{7H%w40ctM?LW<p4&M{Q?Jl(?K?`7dJ+hfGJPN}5liXU_; zhS#MmoJewU*GLXolCe;A#;;FnQ?|haWji%`!sJvPf5G>#S6&UBh&ZM$yY7~JFFSir zyXEAo#@YUNJ~3<ZJDf_TSn{`tV!hgKPiWj-3_q{zSv#C@OkUsFBoo{Ge_Tv*Y)kL- zuon0-yk#r6QO`qGEzrK&<@eJ4p?k^G#GRS8C<K$A0Hq!VKWui)dHdX${YvzB_9Mf| z24lgHt{?g#XSjL004^jf1;*wZoz%c<%-+drBWCi8a+3G)4F#hcMzVGo(XjsJ*``1Q zdmO(idm-b4uy|ygWN6B`Sdf4s4Rnzps+~kHJ4B51!MvDhVtlcs$Dg~mbd<c+g9iPe z`lNCv_S$hBTceV7yDww5wzl0kjcLJ2I78TExEwm?1{{6-DjhGvHe)yIEFCQ;U3cb1 zYPIZEIh&z=IJhAn*@Kr$wCG$=BqnE+;#$=AC+g1D{%BK-lBrFxG~Sd4L`X--<si6| z6lUKsxV_m4{*-P)uJVRXHZl7?Fywd_e)+xBsMDciGqHTn5#ohCG1-lJ`2I-fim;Za z3PJdHrTe|=@d!4kG^%By|8k6xoNvbTiwdPA2E+EP!^`0}xw`4{39}}sHlka;C#J@} z`@UL%k!Ev0PPaKk<4w+MOp*0R>U~N!Y!Pv3_1J+foPeLT`k)Pl&cuGm-enXMww*qV zt?+{!b_LTf65|17>aFcx+7Y9^vi%o-=|m@Os`owb@rvrAYnm}qoQ5BfF60m_km){) z<KBPva%{8nr7kv6%Xt6CAP|gqN8=WEn5H55Jr5IYMk^nNxuxv%KfU5+c<zFB1u8D* zW-AdMT^Y3DBP*jbH6^DK2rgi~bplP!9s5DmBV8vvpxC<-J_g=zs>zrVEUlQ?8-Qf! zd}Vlb5gRsBFs>!OE|5`yt8E}=6!N5&eXuB*Ywj+wyS{kqrG2rJI<O3%2S_Zy^aPSs z@mGkXF5EKH_?jF-wvs;RcR7}Fin%L0rK6CDKpO>da63}0(E{3|R3kQ!N5UCUHuo>s zg3)RCfN)#7L8tSjAV*ica3PMLs_N$&R$P)1oM|o@=q{q++JAHmf3Wq8q>{#)c#Swd zf2!QX+jopj*p-QYco7(5JwbIWvxATaI<1byD~4yjhM{W1k;UmO+~(VDwsZ*w2C(q| zo1bzjb=HcQus;6UObkcbIc*pol!zy|zW8c(gXw%jgN0LtWV~`B$N3Grp;p|^kG^92 zz84uI3o`9r9<v6q$d5IdU4|Ny<lZWUh5L1BU5J@A2)T4O3uCdj+%P}?4*iwRSQjBd z)yr<b=*b&pU}9i0Q7KxN@~mZd-mzWu#-pWwLMH*#t3nHrH^v>4W|a8oN5gMP=eiJu zo9>o;f_x&a8&BvGSlKe79GZ7M`rK5!_)pV~W|`kKun4ZZA}o(SEWlG(Y{RY-<|8+> z`!N5u&eFkmY)x()(x`$WVw7z)KG;>hylgd@Lozm84!NLF{wy>I@$|ncME&PV6;hQ9 zv{x($*b_eYavv{@MI)`;S9HAY{@C`n(ahc)W0yO(7<yR@4=dLXaT$m*$arVlbqvxf zGtHx#|5}2KvdaaIM~3ev{n#KaXu1|jByN$owUAw~IwOOt<}&lZSU9L1+*!yo5Iz`$ zG9>KEi9nyG*iJ1U`Q<aZ2>;y4PQf}@=Kfynj^J@RMQ`+~32AGoH=x}zI}b3F<{%jQ z&v$<rq(TpG5wWo%y8*deppB{7zYO<M(z;-~!A?Nx|3eJbznn>q1o&cU#4viN`(Flq zZKIR>e;IlYiLvx<fEd2-t&9OWpchG1W8&in@k($`&lC&~@692t?M=98`XI!hJ4XRP zH^`{A=W;%+M*5hlstA1fIJ@k9_T2_0l!crn)k(h%JWvqjF+lEFp&J`?gN|fjz%y>( zVM}$}+<nwX#N^l%sJK>i>6~))(E8JK|MYh+zn#ILxc_ib;CPM>sV}l1e#dD@Vh4uz zyeE0dyy0Tny88Z3PWrx3h{%>At~3Z9>-T+asi^d8zcQat=xY>ge}z~A2$0@ryGhAx z$Glon`SR^I`%@Bcy8X1O-WAvr^vZ5ID&Zga3<#I)u(H{G_r6n(JBa4B3G%2BpmLMU zvJW3JgGA)zk1?s#$CnI<XK=S0`}^ersec);u?SNd5N|BSK+@>*sQsc_OLP#d@5dVU zpvR1E?6j5->*f6yAsK+>?{ixDsvcbm0d1&!LD>;^ey^Ot1s#hV43s?-|H}~eEO5|W zlH5MhHaM&6R~s6bEpj3wiRO1DGW85|KuUk>7J`XiROqG&mGX7j0F{ecmNYrD)9EBh zgmrB+e9*33za+DZx-Mu0X`tqb6o$EX)X}GqB)LR~NaaKVcWDo`d3O26FqJvhkHYQW z1`u1)>PQ&co5g=IaaaEh?uY$vaKCkvbxg#F^R79a1NIw$o2>Rq)lm8f+3+(SDhg{; z{`2dh>3EwN14T~0SKH`tseWKaq96yr$-G^ci5A#OUl)47F=w~7aF4y(H0hbEBkvZ# z;}W&*09cqn8Ek}5CQ`RUO>Kc6)1r>DW@ukgOHq(SdMj|zXetIoa6VEp1Z_I~04{Yw z=urUXju@gHOJ=MA{(sZaQF;0?>)liL`XrFXIC453&ShLd!RV1>+R`}UWC!#vH`~q0 z*T1cO@%a<eoxVyrJa<tQah$*rjRaS0$b0!aqkiwWr}WyNyZ62Ls^Y7=RH?NJGrD$W z_+N&X07LLRf`gXjU0!E4y$xo6^2Q}Vd`@v`t3#D3H?Mr4RSqxN?!#hV!E0GV;(hDQ zNUmuyll8bx7Cnx50=1cXO5#Y4VBGL8llT-4sp%H^-hw=*O_Q36P~^+RsV4sV=|dlA z6oF^lqxsvyYVv>Oo<mAEoZ%q95~Yocrqkpd{I(JV>D<dnL+5K8pL6-cw~t<0x7=S7 z^BR3O`r|BT?{y@I{3-b<=t4ofPCg});k&w3?3RZj(b@voVu>&spHw=nAVW8wDl2t6 zk{cBZ?Rr`DrL;En2;)!ii&+o{7?s7NLBj$+$rcJN%(X%K{hw3r*Y$YSyBg6-k*7R^ zuf4w!$mQoJ3gh~2idxxlzBh0=fI<9z5F6iV#ooJ2>+BGYZn-TpiU*t_nPE2B@b{dw z#Nu<M-gi8p7_jxCRZVanB^&K@mSitQNs-EIvma|zd+Rs+3CP0)$m@H~GrS$eUCwL= z%v%%LCmj15-a!km-!tK|mZ+lmH>AgHB6gX!=RSjG)fx%3K*|1i7=N&q=4A_zhtL4Y zb@2q)3&I6YTmYs<6!$8YKgpPw-L?D=5Q@6Zar6vajc7#VLVd-Ze`7oF1oc5QEc4S% z=W*_BXCc&5JSCTo1eH`Wb^m49eO`|xGmQgB@|p4mz=a3S?-z<ay&a%+ii7hJ%(=Lo zBq)DaDOlwE!GLkH0{MAM`1LJaQTdHOsJ{#j)-ojb?lG!1Ei0uuqkGJ9!ZmXDVnA)_ z3h@tkb%))^PcBxeR60%t;mLL1z$BUx^bnxMOv#IZ&hESyXHE?Ad(Ctbw3_wqQ=5>Z zOeJ)$@D5xkI7CvU0@AZNSx8Aa#94mM;!W_`KXLKDqq0+2-en(rn3zyOQpGLN87bm~ zLxHk&3opzI$DxR!AJKmq40Ze?!@;%0;%KUICG_^_mJ2Dp+0(jN<94~OzK)gTYuUM@ zoR}&tamam$AlY^bs@9MkTA%RtVc(B;hY2*$qUAJTqa+BDv;@HL8?J+<5p=`YXw=3B z)Un!wij&9Z;Xi?1Y=}_XkTVUdrGarJPUic?YVoKn@ug&fYlL&mG09Yx_C`uS`RIhp z%i^Qr+9%*JO^!$O<?iYQ4j)q*fx{b9Lj~9+k}kvzdV7QO@hyCH#P#+PvlA<bxw?>c z;KnB<cYAQ`YtyfIf~e>97EKr~rU9=R(Ak{Pir;TilUZNTzGC;ZvnlFk`*kz2-ap0E zFZ;P<Irxexr5Ly`7qNvloBPKg1+}!Hbp@cHY60I?&&*K{%^~15rKLsOiKNO4Wv$QD zzI4!>$7iN6KauafH;|#u{vtxNW=fi_4wVyFuDDPvYOK|r@XP)!fwnyC*I!2s0&Z># zOb~591RgrnZwn4sqy*5(d0l{0*s4hW+Oa^@2+O6A9AAP|_vxPyHl)4#IcG_N4vY7c zX5SyJHS~L9q9`|?i&SM4uLP=O#()l?Q#~75`+pf?V7vDM%}!3iX_tX%Bmisby;LE9 zxa{hoCn;|#{pYl{LS%-O{=m6?=Y(B^#(ysCi*6X0{oot9;c<EWo~VJC&*+Dwi{NFE zQ;?Vw+*BrEIJTs#E>Y@h7N0L$(Vs{IfcjNHmuSgNv12A;H%Ci6nxESV3WnLlZ(BZx z2f*z1VKEh4(7VK{hO6kn7RQhKyBWw_vVS{<F4fu=fu8x5V@5lW`^#Wg3wkCT!2#UQ zdG9ZSatX@a>_|vU23YVeIeJn?Yc~)ML4h}clK_#c+!OQAK1w1Zpl4)@Gu#Y1H(vQ{ z^oviW@F}&Z#H8eJ37ddvh!McX9SmPsw>wN6TUu=>3pwlWnRsEDt@vy_X!`P?Y8PFM z1n9z<<WZgzOvh@m9KH2>^K-MxziJ-L#&8FhFkDt1qF#wv=YZ#4a-EQko*(P-6?RJ; zVDBlE+{}RCEeY5Bfub(KHf>A90hZzgl&{m;03z{U2C~<o8WGC@19;rI^sXhq<y5Ri z+ya6WG!%HDS1U*65fjb<KSjv5+l@|Kfxlme(>opkE>X@A)rB}cOW83Q-^w&kdpKEM zd}5hA0j*X$iLmVQh>#;;BB}m)6jwZR)ueY&2pf-GVae}V3a*E+=0pHE@>^VhPh9B` zIpG6tJNm<%KI*)y4iyEcr7?0eet;t%fVzmhTTE%_P(9{B+)NnT7mIkBnjXHG$G_9a zLQ2+sLWw1scZ~UX?T(}A95MGBJXMZ@Z(mzGAZ$46>RlhWWW?Wp`>cqolmCeh<q4$> zmy;*doCb5DfAL9a8M$<is_2mW7Wzo*mTKpQ`Nq|n*b{f_E3nG9M~~$QvMW9L3GQ2G znj)m3BAzh9gjbSg)X}@At%3yk_y{ft@)sj^v*iut=otrwdv7NhU3MZ!ad2=CX@u|Y ziAx<nZ5<#qP*Xv`J7QuFxPMZx^oLWk^q<EtdQwa)Ak|AvL$Shs-@^Q5xL*-yi4&=g zbE_gXJFIMV+NTW<SAuAPP+g$J?&Tc&bXEfAU8vw%3ju;2gfS@|hGV0&E)EMx_PGNN zds;2(RBn1rE!~z{7DuYhd}WuBM#{Og#Y-MFc}-A*9e=oU;06HA+RA3yt{4F*FiSj~ zw|l{@e5^9FxDRt%`*0dI?P)uVa|i`Cff1m7Mxh7pB*1q4L9D3xCb}gc8G)+fou>fg z8&@{&d8jL?of5uSTKBO+Z@w>GW-&gS#jz$byixfN&_6PPCyG+kVW7B!R<-{{+Ixqy z`Nn<2RF&4Ic8Q|2wK|N}3R+ZERh8J<s+oq`G1F3emZIf{+A~rkW`vqmt7dExYLCPW zB7LvleLTnWy!ZV+?{UB5KSv~SIj{5jp5O5qUUw{yYg5zx;xzXd^aOO&f=Ugi?k0pI z*jhHFfLoqx1MtnJ5~z<Hqrh80GXD5=3C0=-!qdPXdi@)a^l&#(2LT(d$^tQQ&h3on zKyI_)|D+mn2Uq&vqH137R`$!}S56HsJ$dml&Ec#F$AEm-!V)ZGuwdD&w}oEYfuWhw znzHy|pFG8UneTJUb=ZcFtKV)JL7RCqHG^zM22T`o9OKr(jhgE>ap8dq1ep5C{evAr z8z@H?>jeEro}V*z%Qu-o0}T_{%X4e$5`YfRMRNPIAsMuDf9KdgKHvNJ2gS=CvCf^9 z8Mn@}^8Uz@97jW0Tn^XOtj8^jWmBv(aXxHcab@YhKo={#5F9Q7s1F#3AO1%%_^Y>5 zZRJec;5zq-ciEgU*<LngaSdapYEW#mu4K9a^O5})8I=fItAx1C2+{ki`Bfl^zcwiv z%_PTgjG=eV+<eC;>#o$wfvPYXy1jjX8)~hKFBn_tU;%gb69Q63-@^LKr4AqcI(GDV z;Gc}yGgS>BuG{jGlOK-d;~c7$<q69Jd|RK|dUlh{vM|NPfo{aPozAJQuwrX+yqWk= zh3WQ~Sas|Nk((Z#xD@UJ0+_+Y0!@u7nFQ<?o{sHL6nq@yu2Ozlby-?iagk~sA6~Ww zV*4X}8%+X79rU1^pZ}5w?-TS2k$Tt8tR?HwjZ^3(`#!is9h!=7__jVW?_4;gJxYB! z)DE68qdn}}^yv(U^TWkp1!u^~T>`q1Z%CI9_ts>0962qzeq}U!j^~p@f%fW4FD5*4 zun5{HA8r{y7BTI)H()0z6y}W;s%#ml84WcZTOQlq)wk+pcIVpUrlB!m6C%GPmpuv@ zmU+DRq`s~(ew(Sx+w{$+i`@*N;|)k%d{+)ZuwMaVPw+zrskh->bF1P9RGgMlg4Ys5 z^x0gchHr+Q9sZN<nj^E-*)oCr)H!|kTyc)aj}|(cfKwIt^Z9lV+hRJOFvD0ObgL@p zAgX0dEZ}4JGPIEVVIdCOmC92&3(QIb>~A$xV{2hm(?7vc2A+-G?J^HKIi{xIxK3Z? z+T`;wH>$#iRZKF|ioX2P6Pu2nB_}TkDRl>P2?$L$=ez%`n(n6&%<(>dj^XzwD{L7t z+ZacY@y-E|GX4Vv=YP<MGQKuKx3jd~kQr$x1Mr@&z)_Toj(BU`4&xX;9tCGHw8pkr zt6|aOZB;cp??PvH3tQVW?4wqbFCCRa-)JuIMvtJBZNvB0)I~-QZ0X4%L2Rc6l<B4i zE@|wl+4Cm%CW6CJaLHE1EP-(aA=h2%3Is5C{NRr8piyCX_|S#}(N;t*SkRY?wBZ*} zqwHFi4kYIf#a5*Z8n&iq5Ew!>18o-on#wP2WKCtR)@sA<WA+yxwqi|j5&LC93|b@m zWmjXM*E#3FM=xm4q@st_uUI*^aLQ5Ms6LRd!;$iN*)v`+k}CSHZ{Lgc)F~p)5l#sv zX|XN%tLakH_tNJWwM#FXJ*DJq2Olpt^I$f*TUb^|h$wlOg(3T(gO^`t|7WAAt~RCP zr+R9BMy8km;vx77S!Z5v{NO%z8g>tmTVwqAHc3|Fs=seVKnH?h2V?#%Q>7EDH0CW~ z&hsc!Cieq-!V9B4P#^%8m5aEsn9bsRC{T!W=P7t~t3K2y<W_7I>#6_013UJ4cu~8D zv-%BES7mYdCvj#Od=#xswkYbLBD71G0idgg0;N3WfvBeRYn7;^A*IK3=kBd4`xH&X zFTNpr%Y~wYo?6bTP8NKAE-l5?E%41`?T6~6vV}of0D<uP%}@p96{6TV#$nuNi0M&| z)8*I;tlt`5D!&;+eZ<m(*i`SF+#8b|ZJ&{+di7SjF624!t7kQD*mX5>uSC|E?@z0} zww6_ioV$@9&Hd>s-^=%wMdQgol<B*}y#!%5gC5QQfC@ZteZs`?(Bu*?6RyCsg_|l^ z*8#o0e|qL>X`mo(p2~>)lmS2Q=(p1Hcz7gG4rxYqJQbsIMmb6ev<vmsx~Dy4s)_Y_ z4PP4P{TO^16%oi(LVgIXQ&Lvg<kB+vrk!;6di$+c<H^s-o~ZQ`K_~ygc$8~R6uYkS zwU0*qci8ZNT$7dQQFO4d6F|5Q%Z_k}wzSlz<*!PeJk)a;iWL*{5iw=0BThp|vf09E zgh75A7lB(h9qPgdRD9~EJm?w^7rZ+C72*n-!#?w*zRTzNE!uhI(XC<tv$;wCjN};M zHP5}u>#ttNkZI>p?>)fy<EO}>$WaBGHrb63cWzt_tV2#H=`477uJinfH)dD#FOAou zc5s0eX|Vl1#VY-hH92WlVd#&3<d+|UO?@q0-E_NU*&Gx)aDu9ga76J&vgLFpAT{aQ zkn(v+*guHg92ZD$Pp~~F86Ifher?~WtagoETl5aG;@g{Z^mePkv?Pa&D~d^!$74k! zuW275Ue@i^#&<cIg5#y^2ukf+ce_mwVcu$E;RUa$u*|c(&GZY0>RDrk+C)SQ()Fb> zs>48wIxc!KOn%zwN$60vvqUZ+8~hcW5NTl>V;CtJvhoC???hj9=jJVu&@4j>Lr~yd zTW)e4V96-Z-<4AAY{%Z?cB#_UbB}8@021Jo)D7jd`X%x81w*pyY<ENJnt@Vk`_}y| z5t$YorTqvYyOS{zn!dX;x!6`KAn~Cbs_Z3ff^8_)_jD;Low^`OPl*D@`DC-J@)p7u z9|-s$m%Ho|4c$EHV5xIPL%$CddN&X(XawgPX)Rcql(L+Ycdif$f4f)*jVlsSLAf$K zfoLxx&N-_~5mm@G_KK;r94~J%^IfugWwaH&G>v~+2GAyv47Q|gbg`Kp!{iXp9A8NB zTKz&bRieVhmT6moE&MwikYyc^UtN5}T;}qj?~%^f8H2(ETt%k=kd}oO%&f~Ggv#~K zv%WI>m3#deqfN7v2WHxU$Pl>?z38>Y)eZ5Pa(BF~E1S(+rNx(|)zIy^W+}kXj-=Bi za>2D>Q!9^C%nVl)Z5-^9I^vJ1S`E!yc!1%4|81?X06D5;%9-OYO)0wmd&p{+8eRPw z*|aDDd!>I7%rH#`fcYJe7Ki6Z)g5M-G+?BhL_<g9#=-r&Hl7R<YOpP*fuG)&-Hv*# zqCvwf$Gzgya#0ooE}OR|Gj-Nsh0x8({plSR-QKJ_CTzn^mS7h7ECI~0s(#7L#u~gl zjni7(ecP1pCXd3i+<GJ(-nAJY;Q0#g7AcStAI<k=bEPumPcB1M6M!&W4fI@a##k;S zkab+q)A=DLz=YQ6)1M5e6zhB1Ux$~MiS~<ufZEna<5Leq>8Z1ivq4{#{Df`#GyJ`F zOtFGw0}KZ~26j>5hTE1*)pz;In|IFXv%BMvUIG=_&@$&Vi{QLVgN~kp+R_F?qd*xq zus;}nvK*6#cn!eXTdIa2Qq0fIJEg~05n=W~!_?g}UGjZ7Mrpx0Pyt^SCH>q4cH|+F zuIs?(_;!Iufvs)+oIVk#eyxS)%~DSdwEC}jOqbrNzLH$;UA_gyqnArabWcg1@Kh%> zi}L-eXiZ1{hq|nc>X`dTP-Hgi+dvpkrb7SLY<Oi6_$#!;JTa+j9uWH`&WB-)UlnUA z)-CpKSxm{ME*jR=K>&}X6n#*i2^-n;2t=$F><aC;8#BT-8JJL2I4F6V)e<LslkDb> zA_KYwN)&O<X{$9AY&Yjr-pvc^tp1}d?AR;W-0;wcxcx1cMID@cVjI(!1@q5k-t>YA zwgbiRGQ9nGi+Wfoq74!R#2xWF-DONpQQoiNPVY^2jOHm4jicU32J2DPS0%I1DgCB` zzFLwWtm%6sO{tVVfuTK=kcj}k{LD2-&}ukTTIse%QrV65OG?5mna@e{?Seak@YnMX zaDfnCd5)h|JtEanHW2>qC$!^@U=FzKd}lC6nkEU>GivhFt)`nVY$!tK*&Vt|%Lj%L z0?U=a9ooR&AC=vApp}SLxtE)TXCT(JoVl#38ZHC`8Mj8X`CAVSd)0<+c4)IFMz%C6 zz3>Nxy2-l%K@NE^DRA%Qsl1ZR+l(YtJHFLm^jAD6+_4?O<_%(efU@qf^JK2nz87bg z%69j@NPIKY5$_g?z|#?fYCkIQqe0hZDaR1Ex%;jB_vkjP6*i6aouz%M&$1k>#GB|g z)$7%u{i;gD(j5&_VF3Z^#%-;3n2#6^HSes|JiED*5G*)I0Q~!$rfRaTX7#P^#bjL1 zL&tq|+x;iWe>b-YDJxhOaDB0*iPx8I=ZP4{_FtO!@$`@P+An|al>U^Tlq9C}k}2_y zh7eKemn`OP5frF^UMP1wE7SY7)_Yh2?9!|1&rUw}P|8LRtkrR*BeFGTI^0<U%Zkxv z8F?jqBDl=8Y?gz5UL9)ZZ&i1MeQt#*Uw(D8ITEOUF7^JU87DLjo`XMlOw^4a49h>7 zeQA0}HA!(LWe{RFla9wI5rg;I>e8a{2?8#SHZktE|5+nhw*ArDPtxe#M-D~+a%e61 zOE~Y|4K>&8Z5A7RMNtUhn#?liQ{VW2^z8~B-MUX#5wcqOQj02vcF_x}Ohm$Bo4VMz zx0C7vg`siR;IV+qsl_?-(r~fu-DOmu9@)Eyykuqt!1xQ-rvi>s{lhX~sa#uIdUybG zQP}=01m@OVH-)aTmg&lNb45}2Zl;32lv@sl`KHb(j0NiA!8|srch~b3mTo|~+a9&o z&jT7$SWfaA)!U0O-40X#gR}Pa>ruYkQ{~|Xc{Do<V+OkTC$)33SQ2jt#lR2WJFBsc ziIZ8Z4|h12pj-;hCSsRIx>K>TX`PUx^hV2|RG<3Vh_{t1;xsv0!Q5*pE5edwXSKgH z3C5jN5J_ktqAcST^tQg!Hs=fBQVQ#QigpF%HfD?h`9=;$T%HYT(TOc+fZmJO<8yfX zlGA0SBRk?bd^zY^h4<tpVZ>3t*e-fj@D7T^iAd2V$>E#3J6JBUNSct&|DF;PkH3n3 z(jyw8^k#o!7zGdg(O6iKuGUSt#;cg#l_s6^Ab_PD{%-wpnT|)k3Dh>CPAOP=MBy(D z4?G0svZz1z_NC>Ux^Q0C3azE;clRagr;!&cTATx9+}cmj{WH(nMK_+6ZAXv1wG>NG zFP~Q&e2Z&<WCC(pebn2e3vnfbgo{XUWkuMZ&qfw`=M%ZXx4{9Qxs^I>BeIF<tBp^5 zEjl|3Q3W$hWiTy9orj^=fvoHluQ}ckZy7m5C+|$xAeU9_PL00Xm3w@k>t?Ndgd9>! z1aGIhP=>xz9S`epr>d_ac~2C+WX>HPGztM#1S*VDjOfv6u^4mr(lz#9)y?^)x2Ksx zn$O1;6@BmYccNjw^nT8g*8MBt-1Hfu5A3_UecXKSK1${+OI7Msu9HAlb&=*D%Z>Dp zb&93_$ZxMjY=0(`an2;VAO4Q<^0$jz=H5EoKYw_1OK}qRM@Wdx&I<eA<#S#(N<@id zLJM6>*s`(nOAa17njh~A6}f?7zXA60dL5Og@i)-X6yC51`<NJ%$pOPh-i*(PX95#k zmJ5j3#b;zFLr5X%%Hq>_`S-tSi?4KigxUV~w2la^fo8KgnKoJv<l;zE9f=yt+_9yi zVKiYI!*x=FJL*C`FhbJ~J6Yc<8!$!JIQ7z^&teJ}x{_zdf=dh-o#P+}u*MOfgPiLp znd4}J)Rzv4T|76>^}jR?0&<t6bO~;uut2|sjs6RV4j&wDuHC6v6fF5Eg2<}DiVz(# z%LCQxiK+8qPocLRSuZ@%d~x2bG?5Jt!SLcY+%CZ(PkwJkIZ3}Xd+;e_iPh{h8Cb^~ zKp2@@r1IFof5XGw{a>BReL8$G33T~9aiqLXTb6BL^IdUPmjKS~5KCyLr0)d5@`b&| ztmdG_zUD9nuqJeD{~GA)SE#4nq!x$GRG!tmY`RKLK}05-QXCh=NvM!(z$qK0a6?wy zms4ixS^3-eW=5lK)QZ(WB{9L6#2YRvZ^#W_F&*9dA`%M2Jc~R`^uYTio+evn$&%d| zVlcFBcqG&~T~Fq#c=+MH6d`_E6BU0iiOK`pk0)6zK=Q`cK~)*|zAnK?%l?2fu7b~% zR?juF-)%jMp}B=fLj(+_UerR}Dtqst4R&~b=eYlNpF_gsejxGl7ui^5*9}XYqudUi z+S@9tx-`#oHp3MXh&VhpZ$XngB|FAVwuaGsPEA?=o(_|LZ(R3&8HgzuXq~q)_@V~9 zoBE%v*PZi_<l7}R&HRbqHWZ@w-TzNCk^c>6=kou0gHh+@cZCx}MjlTuzkIXn^7!AO zc?Fv>+5DS}|G`{QkZg&xucu6BSC*TVd9UbuI(cihS?;<2_4)ssZ-=lDK;g>5%@x2L zGOVlIlqfk>Zij_$xhm4|210Qktjmq^Z;QK&=DX0C7`>-ir78K()B68K(fJ>*S9o@1 zu~(5`%}F-a>x$1O`y4|S4I6Gfj(t(m&gP&1ZNmzT1j-Z&%1B5)n(V9Uk&Y8je&pZO z^rjkQZ26ygGupbBjXD_PxP5QieTYpS9sT_8e`BQ-8O*opf7s+(vd$||Y1x|XQW<}| zh_0WYu_mEx=zS`65<5P1M1Lx#HPNA=`*sfSi~Dab`TzQc()8LKxBNBV^tg>pbWPYw z${Dw&<UU|(&k!sv*<pz^9S9QIhiSEnW%x<%>5KWEmL*V|{k7Mhj#pj#r-$W-ah0Cf zTxrnbkh{mY42l@3qK;t5LtfFwS#%k0G8J#-rjB2T>6@`XpJ?5(@&)zm-z%t>i&GaJ z$6Q?q*x_*UoCtl%j^Q=k5=rxl%zRLxe&9vr7_}dx+{j&r+$>Z3^O^S!{VM+=vj)Wg z@SWrSgAk-R64=gl=i08_SsR|3x9xm=h*Rt{b7j_#U{zCo-TeH2vkHsYtMIP9HjmXP zd;IB^<EhT7C3w>F^gSYS0krlTXQzGng%X5)N^8Wb_sVVAJG-|``0w#c6z1kM)`t)C zq%WJ{qukRzg%tO+_9&z*8o0W#l5LH~U|z@Q8%Vo7`f^aPVSzqg%>w4z?(b9L`AR)g zVN}!<oxRhU)rBt3jlNM~c6EaG?YoPeeo}!ZI0)e$(TEsUcUT#^CD?-gOXFM3KM<I{ zNfjkmf$8C5MkJP*o6Ezu9;#p|v09}o>rlBL!{k{sOnIe4$-;Z?Q&5p$6z4duM=^Q% zPVq$_Sw^`*v~SJ-d<Gz&$*3+HG2&6@;3YV`zi?*FVxuSJR7(7NX?#W<fO0=@2@i;b zQ7To3x|acigYSZ0_KmXgabE)Aq_oIDy1a=E0qLo?se5zU4*xFhQ?vWhSME`F3jC3t z2zHFFCmwup4$9;I;sitF?#$<BK7Oe}H=>?W_HDkW)G3vB&%(eSuq?c5`Q#Qc_1R;k z`hlBgmmz{Ar7m79^YGgpd4Rb*w^3#2@tse`vw?P}4RFA%>PyrbdD3=$NdNw8nrHXL z)6Mer^2|kFt}bxf-#_mky@v`zaJ?a6>j*3oM_LU-sG2nEp{J)&rsB-RTky62;vLEz zwP+AL--hKLQ|PUcqmN~|t-VkwbUEm$)F<LKz?9w_LY%8EwQ^2cZA5=<s7Ke;PP{$R zL9w%1r477;qx5p4i%L6#6p{<myy=lWr&ay5Uv(+xfzF9CFuZ!71!QI3cx!zloat|C zOBatxxyiiiVJ2ete@JG3!R2at(sv|_KkpW6rCQ|x@^ZA_gIF)6S8Bf)Lo)?Q>SIRT zZ0(Wxa;m7+(u?44C}pw=>6N<ZtV^xu>Q0^u5ABud9&oz3V9Tr(;$UOAf=4H;gSF&_ zapljM%ZK7`955sJmDqzbV}fr?pbQe5t*R{VF7G*QDKGu!O!HIOsMEgz(~ZEgU6N1M ze=#O+8Dr-79i6&~>~Hw`hB0;;?%m~%Q_u$x98q$CuZSx;IJEW$IX8~J7@DgWCWUlp zC9D2@A|R=hKvG1cDjog>uI5I~QItdcEV5$j>#imE*2|5xHJcnRx44Vjv_=1O+x@@% z!LPf^R5_(00?)`QPU1dkzeSf_)qUFY^Qe`Mgi<GmB}B~E=!R4Dg++%C_IY?6`LxAc zR{qieHhn=HHiAT6>SJ7&;ps(SESF<tvU8rC&}qy0hD5)eKwwh4)YW#PFBo87X&Lo& z=Cz)_()klM|J8$RzIEY?<Yy;;X<~E34QwVa>2o(sCH=B0{jiqB;;>db&!qrj)<()j z%9jN_hST@?>y04Z<ySm}U4{LniF2ihkVX;gsvzOgm!~pI9tzE)puGW;E{($_h(1B> zHLm@HHK%NyS-apfo9dS<c%64@{eDFsb|`*}J8azq?(t0uV3XQVjuicFnYR0*)mdn| zr2CZ_f_vM0BVlr|vzJiGwXS$%>&T_e5#{i(DOUV_K*FD=pRi(UEthJxJRgk9>qAvo zc$iYEPOpB-j}u|m{4{8FX_Y`O<8Eo4b_3Z?p)$q!d45i?DeejX4$f0ZMy|JT?At~} zbQ!OoSXH;5n;Xmv3Vo|37V=E5DOf`Rwa6BuIHlXp0_vE8eQm&wcNk5WS9UqL|8sla z#`Ecz*G^PwumIq2NmBcGQlq#9K74EO%<0X$yMM}D=eN@TfL(4}%V@=3O!Dp+tguJ} zZSm#z`(hPw3Te1<Rq#T|76Ki`X)90Ue_d0jCiGK`84(t+H`N4FSNT#-(4P)#s5gp8 zvD<CWwr;pb*%-tslS4a&If);EAy-&_wSDzXSJ<}59s7%23z~dg+D;SDBVG^_SBC*o zBd0ug4%cGWmiu;2Gr`w20H@$fVlXEneoP~{;pmr5V>{2q+#E0Kh=_mkDE7}r4I|fi z=DEr#cO|MCsVRzOmoNO;&))3Qc*KAEqS6k<(*VTo3aG9<-{}gzk|ZVAWNBU@9&Sci z5WXhfJ^kC$GMnun)2{O`4U<=p)$9+)GMgXEs=aQ_m$$_}iUT@5w}}~DbE2e{Ho-0b zb;1D7G}=5x9I%sM{I>g*iVg*=dMM9GsCJbgU#(Eh_?N>B(pCJfirCu%L1PqyfGt0T z!Dt}6=Af932ZFx2q&8l|Cb(T0vC?yqOvleiy?VfY?)}&p*<-_I$g4TnO>oZA>POM9 z-S!}6QP7>q*AVHS7k@CoDN=Dnp1MWDDCHMek;*Y-;QicwsqR-aRlIi}Mf>c0`e(6N z?S{93FTen9Z{b;2j+;$81T+_KL_1VU3C%DG+{tXJA23uOoo4}fH-?cl2u8q<dbQG- z*UbeNC45w$Dk0Vvtnq?x@La)=Dg@A)w2>mQ)P)^LS@UWRxvF;`=DEn)H-7PMeSNM7 zh+BcTNOJ|n8^PC!^D)@I#+HbA&smKEPPn0-Vpew88!~SPAlCZzRWY<t80CyV<9m8| z5@_&RR{V<`>8E);<;I)<ISxsV!MjBr+<|%RaKb&eF8bthNk9Fa<4P+=TY2(AoqJqe z0=@#k7En$n6`@5|gIq1CFo6emrK%QE?>)^r7!711q306<=~>H4I<NSW`VRLZyDnEP zCaQmg1gTd3U{31$A*wCg=TCEA0u#|1EJ||gn1*gawE>f9HT-@ia`VL`Q&bVtxUTF> z5WN#com5*{44^I58A;$tJCbl3d%9qg)6ZxE&vcX`*Qnc5WlyV>kAaRP-j0*HIC%qU za!`er%AQjlPEXuU@E^xs>q)RAQl(q{E~z^dBe#&LbrNt5J6iFwYE(uX4U&$%=)jEJ zvPN}*h4dB-S$?R+6=TLw+s}V>UASkO(v<D8MDZiAU7;xaE~n_0xg08QMH^hP2uqq| z^2n+0d&*|FVTzR?Z*&MS#86l+d~h$Cah|)D-D9?W6)bW#CkR)g3_kuv4kKho+Ond& z;%p(KH9>}&jm`SzTd?vz9g)eU+v11v^HW(XW}!O2MQgBiF$PUzFuW5c$*QHVwc7Q^ z)BAiVo#uot3*S(0G4AcmGIFG+Q;!pDas8gX?A+PLM*wgMZ1&qD^39&l#y7p2?{6=n zF}2h|o}~-SzB(oes=lRwWa~iXg}86p&OvTG8NQ{{Z9{(I4T!HF9A-oQVUC436Q&b* z;ZXcIy40}3xy~X!`*NMjM&XyCp%>ZGsC0zt2ta|CaU(t+>7t4}bPn!3{A%|R#@exP zb7hoJjgbu&B^R}&W{C)kjL0|a<nSt<yc@y%OyRSqYk<wFNj<>3#q9(l08t}<Ko&8= zFtfY@*Sq)pKBWG+A1KZvn_1Naa68ZqaTt|8kYUizlIoF(?dn;wtGRJnKm_tr+w-c9 z74T20+6C}RnU-2Fl|@JS+V+c*Ho62B|1j>orIua4cL1(M8~}XeS%A^`7TFXjsS>;9 zTI=ijmwMm+<`SzVg@AlPPat{lbG?8bi5FYNhN9BpAdL6Z6&{HT34esleomJm%)_ZL zMfiS3G1BcT!dJf1FS=;f<1U~K#M^}xAw`albSm*wx+vTC)TVa{x=DAhcGg|l7b7Cw zE^hc!a~9pWbp1*v_3*Qt+8^>Q)#9WJ)wY}Jt}yNb#8@JLX|N<IPMul|d0Qgb;6akm z0B%Jsf^*x!r`|e{CWHziPg{%vLb`Hv<S$d51cN(r%7VS{pYa5qF7XLNqvm^S{VEH9 z6mQGrdH6uDRqD8&JWQ|rRVrg(b1M(OnB?ylHuOOHAWOXiNBubI?=KiDOo3h|8F06J z?z6UY4Yr$leBeS-K?uOt-C~3#h&ErmRB+#`<Cg_vY683sdijq-wq+9TWLJ=Px`Zzi z3loZ5#t(UI6vq{mMm7)QzH`rixItGZmf-Ijk1-(Zgx|<>IiXfMSFHN->Ny6+yp~xC zeP@TggB*M?-n7G?aM{o|--2vP82`ne^&lWXttETun^nc=OoKSd$~BWP$ms;)_u8R{ zho9geHDl5i>r-1Y+L%vO5!cMlX@Z)-nX)B|YQXH0%MD-~HXyyoUd0a^Qw!wP18%5^ z#jAeEMm4+7$ybeSV$~?O4cyEG%I*%>Au7x1@2wQ!k0C?eK;GE3rm8j1gB4yIPcJBE zx3ZBRkA~^{J-=@BRUMIyLMt8SMm(=0>*eSoZ7k<)E9x#B=X`8U*fmH<mWiL;uq70t zNOylUvf!e{#%lOCrN0WmlvO17b-ZnazGP9yep7Tv!DV*DNO*61^$*t#dzPJKRbeOZ zWCsSLSl0p^R>W%6_8d|b=I$ocxu0%d&=VP0Z2v_EOxv(tn*r+J_ln~(uO&%jlrnvl z`BPt&VE8b$b+d`mptSPmx&J|@e+u^>a1AI1^I!pdNgL(FtN7|6X}Y<&6MF{iyYQd; z#bD=Cq-i%WK2p!{qi?Q0AHHTGYNPFI(pIZsgH0Kws8o?yTEdV6MdfC57o~Gf`J#We zFHtvxcIFhRbD1{{=rj`A6sHcGOJ>yz%I4&z+_pPjF-0a{iVV#yW}us^N1TTOx*a<q z2>gv<jCSFKp67A~?DkupHwLjU#C|^A{3jT_;jfzJv3e+1BHA7NTL;J3%%hd}4)h>> zf%^YFwHOz-xj%-HA-;n*b;X@O+SN!dD8KC|BL8I)gs_mGc8f|+2p1g(Fw7>{0@ZWN zYT|1x_0J)qiix$rEeHJ9IMHmE19`^+&2ztaZ5cm~_Gt_;>nj$IQmXP_<g3WWQ>)A2 zEqK?2vW$A^1L%Zm_gC0aZf3{3j|qkr%j#V4=?)tu@`E6hwUznQ`jGye{3y52w3mgA z!Q<ZpZ!ChNg%!w-ZWXJ~oNo6CX#7ciAk&5G5;JUUi9!XTWJ%!I1Ee9rE0~_>l{%ir zb2$HY6wMSFxKo|e#myzcqmqU~KEqKg2>>wj#_v}o(;R0cJizQ9i=awaSj~7<*4Imq z><cLn5+WLNby1G>0c&1SJATVyV-ux1u01tYzwR41i+ErS?m$H<f?2&XC05K>JaB2Z zr;@%{xu+!yhgMuC=aoY(v{PdP6#|@vmU9p+A8#ALmdnF+dftZfU5ef!Llj7Iom6SS z91p`$FlpmlSGiHAGp?zYryG9ZcH)C8jzRVmEkGezE&|f1gDP9MP%rv6Yg15uSUc_@ z#{PDfFDXFa=<%-Ml#h%amTTj=rS-ISVZQrWA#a_Gcs4dc&=$@#Sc%LI9k&sQXiGnT zl8UnT&c~*>9R`?{#~QNV&auKC&W0_1D~~h4Ub7^tn2_kZ8VV<ErrH&To$a15XNb*c z$%kusXl(2lYc6J5T9VlSRpr{x<F!hp2?IE(ha*+-)(&%~4()Y6WJ|=!KqW9C32RiZ za9yY#L%rM+wy&Fu_T^~fR8xa0Eil9$7z)D~PVKBt?*Y=biLcL3)IYo3y=djOS(@e% zC{Mb%R{el}2v?z6mn9~8V>f608)}c+^3chRYyB|&u+Y2A$m!(Z2R20i&Y)_RmEX<N zu7TOOASUhqUlkRI*iC(^L~uLvsHJM5$i5v|NzzV?D#S5&!zZ03JPba55j4@+H*zP5 zISvymcja}XE%~tmn31A5>WvaQ=CWDC`s}&n-hP*>^*zNZvx#auP^tRgoyCp|D+zB% z10Q@&!oF3FdrgM}4&26xRdViI))hrTZiUWu5L~=iZEe&_N;9{P9wp3A_dU8rAW(0( zfJ7gUgyQ>ooNZJX=@T2$9~##M#;yoyu0dQYR38F8+~BLzWbC7r=Bkhr#){XWJ?1&5 z*X`f65XFumAYyQD_fa-IMRksQT;5vwe7Nx?eU}lvt9$wQsC%}p5OZP^;bZzrn+l-J zMvlG~A0*wE24!ru6A1q)ybwL`TfsIGdxI#RC08@%HG97(Y`eTB;d_+Pq7~le`E=F9 z)^MS1oKF<dLQc@Yk@|V(P}8X>)N`;mtA0_Tgy$<saj|{zSz5=GcSZT{<934tebX>o zevTc7*{yU!i?e=H)6V3)9%k(It~XOeRVv|5lh5O!q(!0cdVq4JGVZ`Be?%U1LEm*w ztYK2>BH@lMeTz=26-SM~f0k6$FaZ<Nb?-o`czgT(@p3%qx)Oy!5>V5e=SSOe!UKNz zrmuuutJ$mBziZ&;PMi4neQcs8Uu#bR5g<ZPw28I24qk!I@9FCkGYZ2~Tl%l_R-R|X z`=q=YZ|GMdu%dDUuV!>nrIVOa({IZZ{G&+KyE@Hr&SU2LkFs>{x{iL`b`GdMf#v4> z^DJ6V;Uus5nHy4{1Rq%<7WMIlk&s|TvOy3*M!daneO&K)ee@&BsGglcr+eZ%_)%F4 zBfzNw@_C)?^4S^7sdZei$8qJ4&stSg35nU-2jzpI!g3_GctDd+VpJ9>b08@6Sf9^T zwDwrzS<y8nPuzHeAsrl`1;q!0Y}OmaEzVg_&lvE2742z!9?d7JJED4o3aq-5agXI^ z$Fjm5w!_MPzl6v@bL4t9PYW=BrRG5Mkm&c=dQ3X4YEn|``M8U8IZJ2IVqzpoG26Xd zo3L?expB`&&pGJIxpO}?WrZ~F-PEX%Y@L$;>W2N6ad{b?>GruR(LQz6G7hqi4bx-O zo-}z`V>z+~i*ZtIa|+2XT56Iu9-7uyV^1%PHpac&W4sQkfG>>mhN&8plsd5&iH9wP z4{~&2s!@k2f>Q)9uD2f1IvopK1OBEp!qOz(IQ6R=Q*2>!u>Ckm4N<|SNg3^q<fk5r zBI4KSoXc!kF^*;ZivY<M4(f!#fbr5NnNi;FlBsp<igS<O;KND7)v98I1n$5mm~m8~ zLh011jc`>XRK?sNu_1MB^qkeU2>p^*35IF0*|#H|H)el&rMik_7`_ab%(|}ME}`_Q zjVsGXppP6xkc*t>2o|2)P<Ac(wr1S)D=aSK=bM`otCmbBI6We$>m)laP$4)_^YZQW z6Z?%xt1mhnU)_IluX+7HY!gA^GkN495tq@Yy%}3NI78w|MVj-qu<7ZBf8zFbv0shM zz(VR=mP+k$mPIFy^$l9GEjqD0@L-o}=;XN6y34NOk~NMjcx+F`sVpN?kzL<N&$ zgAdeA&vXz1c=dAtPS)Z-9L(+^09T$26S8qWJYElDP290<AyUiyEo{}twXUXAc{Zyz zpunW~x{5%}v(z`E2iG{~)=u7Y_3*W(h^hGgrCFRW2)gmjrPf!SbL8Mf*6r7aMl*f| z*k>8E1Hmavh$;h2(T@{qq1_E=@%nJTE8Ed6hP{f7#nepq(m-*Nc0oG7B=pXD+342Q zgw?{*;K6isA(9x;?l55D33aKhzP_F$@`K@+ssK4m2N3dtgoGmz0O}jL-UA@geZYqR z@_efR9*%ZYINF5dVs4sQ7_R&TPw?JBQTwDOC~6C~Z1A!+9*BN98SpZ1L2LcSHhGb% zQuv=2khY@n2q%McgFoi@$w7)4=gV@)2oqzG9*;;frNtwIASOp|`h#+aVzT)7o(Oy? z_K&%t77ILK%cEkBjo8*UEup+mEBO1%pYo<K3|W$NXWD2~L9h&nzU1V$7Gbj^_PLEh z*WLyMf89srUJj=TO>`-&E}Vu67%XQXKwq7GnKW<umobA@Y~=#MNr(FU>MSmn>6Ql0 zslKboqLRB{@D>2{Nq~5sT2J;$w)e{(UOxh4nLiocN!W(jQ{O<ouUmAcpu)Gkze+qP z>UP2DSWyaZHB}$~OM=+n$dH><>U6uwaX4+QMYy^iE(Cy~yAAv!Hc2=2iIDaSisxmj zud07kfv}v)0=t1`47}02LXEMQJ4*&HMXzNakN^fi9!mhXA0(D4NQM#^BIUdVRZjcw zcBH>4gI(MDSRk&uJ2uKe-3-l=N+6<lqR|N~6jLHkb)a{~nMD6WZS(3L|LbJNIm)FC zu>G0o@L!sR!vrWy<nDxDqLq$+-f`^w&**vb27uB=bj}~LB_A788GviKN=!Hl%>}3h z(5@CofNf+x=MpUc`#=q1Q8`xbt;b|JvF>TH{bbSa#j7ktf&UVMxh6;y*OBIb51VE_ zR&y+Ktsa9(!Y}<|Z;&+%grrjYs6r#E4~ScKX=WsP<XK8zrIm&G`Vmhr|A6N1(0dTI zao^gp^+Ya&%1=Hz<y3ipbOM_>x?^P}-!B$vn`D-40d~kfzDfo74;99U)nlpjvjoIa znk{0&261*y`2f&iFz+oULrtsd?ximeI~kuXYcZ@tdl7FoBB${}&1tg@m6-Yv_~476 zKi?4-$_H6cho~(_pbaREuE;EqsoC}6<N)<j06&$C|I7rjohqVgsxt$8Qwr$k7<lT} zj70Xr)>DLn*QuIWP@!48fWpiBXDmKP*-WZR1R-hdfKqsj@rdIks@2q1-_RrF(2yko z0#$KJ`xS|4p&+GRR50jCN9d3VvXyFLcL<QPl05Se6CU#b^r=_x)GQGzObk%cBrt;a z8Ibc+lAY;AVHmjri6}2=R|Pd4Daq!Wf}5+YNfQTzdbTM<TcwjN^Ol1^S3~h*Z$4w* zlaI+aezmA52b&B9kBiGiV1)aB!$a84Xg7YV%OiTOks{7Qw!!;!HhM_sy>;8l%zV>4 zuTK-2?|RouZuy+iqU_1mLG(xMhRoI)3msm)?+kOyMmfmr&_0BN_^Cq~pf|yO4yYt7 zd}@RH=zewp9$q(XCyuCkKnL+G4Cs*m7ArW*Ml9t~UII(DLLF4|UydTkfUHw@)dY=e zumSf~OFB3icBg+6(9o40#L_MvcppGw7}9BEn;M}$s?7sPI*I@j>lUQc3AB4|1hFv% zK09x6ay;0bo<tEP&&x$Uc{-&Ox%p=Algf<FT`K4+%8=L+hLTq2npsnlW<?iUSQ+?G z>x|3pW}mKAk^#diNh_Us#;r~4R)5@|4z4c$yd9ZPvVsE~hCm~rU{0G!d!*Oa4Omg~ z_ryr5?aJ|s?CKbLQd%cmkm=^e?rlSjH>sHmw#UjXkpTaO4GmoFvws<<WH9w9uG{vI zArzPl)B$!cQ?7IO0-cGt7o(Et(|X~@_=bkCJ{XNd<o2BMJGMX8%Vorbc8jeqbz?i2 z2PNi7SG2v6Gksq--wi;s0FAMd^=!c!1l^CaIcH^!k+@Bivq(HN;`qJBS>vVF(Hgjy z;Z$}jKu>q!eYuv#Y;m%!9|3Brr%FmjR}!Ni4gne>h^R&r((d-ol72mRW8<4T(8rL9 zKyx5ce<Yh6G*Gpge_@msP5&hnegv3Xh7dYn*9`|xfOenCBTiW@fu>OdwBW1&U>8P^ z^QaB&Kmb}SXNv^wI_m>gg@T|zEM9X$0`e_%s#4Abg}D9Reo4a`ui)4>kA`%YwfztY z7|Bu!+fZ^x)&-K#@$l6~O~nL%>Kj?U#e}`|qpb%WQ|f7+Mbj=*amcvY<8yNt|6JMy zX|TM-g;OWycONDH52lg@;G$|a*m~wmZL~zJ?gQTB?kspA=J@cgbKsq+v8~6;Ols=O z%R3;4aEYX+cXvM|cMoHDJ8hXnh;tu`$=!ey>(0JfZTB<9q5cf>L|JOqf^Wb7VB0*q zHM|JF9f5S=DEIYEJ^f?C$KS&bN^yfK!)hz@=bY<E$Ej)WYB-BZzyF|m?;f=u%e|>g zUKlTED5x3#>KGh7<)3_ak2(Y*ANcET*%kI9h#s3$C87h%f)R98=UxB{sMV~bG4^&l z@LJJ&iR$al&Aj?O{lFYWx_{23R%}1kCiR@EQVd5wzWwe3cFUsi|ICg!*%<#z;~4ea zHU!Ie`}<Yc*NgjCr|R7%eW{NwlmNW*9q_)z_|YanPZWnd`Ij}DaK;CnC<EMY1)Xit zh?u0kKLQnBk}Z`SFI_z!9I=~s_}#c<Etr*fP+<w2h{aQvh2C)|W>X@is?WZu-U>7( zHbH8`^sT2*(=ZY)&=1_Ju&k_IJ}*SMTC%R>Ua6=o>RjvaG{Q(kUp|!dh+zeSrG<Ku zPxjiAZGfk<Q>+lfnM&iZuJziO{D7ZgQG*2oXND0Os8?PA3CZuRH3al8&9S7i(pdyR zN!zzVZ<{QGYq}|kK$u40fP^Q|+hx!^qrHVj+B@crxvX@c3QL=mmvrsAw!5<MS8syc zhoh_;IE;RU%{s4zb$@TU?;w3+BI+ZDj){BMO;AKTxDpNUz|r6{R{w3pe_gtU|1k6g zGAtYr&rfCU9zFm(B<VUphoFBcozI4Ye*%133GzR_fJGbdf;$8SXfX-Hf?=#OkH-$+ zd3$eaIN5GPMiaWw(C()(ydB_Zi?cudhk4K<au7tnCaG;}Yi2;__}KPIaXBbH`yw&} z-&KNeEZM--HF^lvFSd*pG+4>Wy<ggkP2bNBp#pfJkL~!{n9`r8+n7%*JzZe`Y^mTp zaNN6jX2jBBFo5R4Nx3cETy7xNX_3N_et_WE2IPdN(e+xmWfT7+7Wub7PjNVr{mysk z@s$L*E5ZH2cWcM3T@Pdg01v`pE8XEgSK+e>f6|ZK!f?NB1LcXGqpZxjPwLK}aK~wa zK3u?bAHFuMb!p+CXwpbN9aAWRI&QYA#y<K>(-P9GPjJn4FAG#ADTF1ZHa3j7ibm<0 z+VQti4BQb_)G}uTF+dkxo5;VZ`cqa+&4|+FwxsQY-~xg~I=qhhgBNjfZR5*XIs%9p zw$uh7uH-GD0Pd5WV&17VMFU;;eE6*K&sb2(Rm751Gg$^72kHPUQRG!74hA{4Pj7_- z8q%)o_ZAc1{o=5tTeI5PVp-5<W1xtPASnv4n``O8RcRwS!@S@-Rmp>IKiNK5JxKvT zaZ~HcUOj4=eXq?59wh$q7a;9S{iUHk+Rp}(0S0Qn)p8TGlyZgCm9Z$;ud`=5<ed_a zvrf11(Vx<w!Rrzeicz^+h0)85D<1%J*k`Nj9{h$Pq1s~@h|lo!jA##Yv7MJ|Z2rqo z+newg^G?R_<c0dXesxp1x=`8sJe+|eSj0wB_UU@F*kQ@AFd}56vq(F#Tr$K?0Ku%E zLJ8OQ5C2d)IYZVr9D5G$jG5GRUrs&NddqPC1QHfJ=raQTu_Nqql`-^rJtlS5@Hy5L zoaqCu$_EaZ^IqCIJ$ka-%?bakoJ9XR`;1tkT?9y%uHgO4`DY1WAngGf{Qr^n9NpXl z2?weZTRIGagN~F;)y0NQuPN2u@$=~5<9Qlzr0@&Qy3z@nR#zpvBVAgiVU9&SHKXF7 zdwX_mc~nG!%~=v^YaS0D_I*1lKi!bm@S)zR$72TgjlUdlkB%j>famwS_B=JpfBC;8 zVEsUI&}U$Sfa=HunT(=i1b4O+8$Y~7^COu_yopPZ6RzuE<wFAod~H}Rv`%?8&*kp= z-n1a3sTrI4=kSWJk9r8k?$D0d9AAJBvV77qdaxm6`E*n~o-jOUk~K;jMjI{0x)6H` z`R+`m8&bVm1W!NJ)33#hA~P$B8XNuQo|jIDH>ei^p0szVk1BxRXv+&axi!W%>3L?D zfY^MMeFCW;`oF<r{g*1x#QJfUjLt7h%kWIG#8<Ig7&fvpdpl9#13uxLlR9rx>f(d& zlgVX=q!%!qWwY7ovOB6_`T>gyMFcRL89csw(;qc8HJ#bx=BH3giDmDSeBM5>WXces z&P#^08>w2*7f`dgmTKO))Vbtm6$!iEeZC4}RaL^DS-=b*g+2>8!5<A?9h1!-bTg-W z^niN56ih6^$i}#Hm#!cBq)89DJ44H?wV4YVQ#B=|%0~e6j3>WGbSo?CBJ>~LW_tP6 zpr}~nV8FnGg&5H$F}XQD|2#q8v!Q0<KtBa-xBi-~wkb}z3-_clq}Q-6dTRJQM<?@R zZX?~7^yVlvEcyOIZ>A|shedtSurd4V(`-MPs+KXM_h(X%_waRLJF3c!-2HLw&X#>~ zu60M3uGz(YWlZE<RVOJp!9m(UWV57l45tCKR*>&c>PW*tA8fLvZ@wDzBNIC&8KKJk z4eqI(tUFwu=~Y5&T9ZYvjQsBZzUnRw+qVh_+(KPQd692bWivWz+S5|A#7dV5<jrQ? z*%ebb<CHyd#PdwQ;LFDgV<R4Xt*ur79#nMj-;X?<)>qRKe7mw)QZf@+P2E13BI&jd zGLy5U?s+%eD5|TzB(tDDNr;xg++d8)6DxE#CTFysutn|Plh0<ioS9oAviAzkKV{<h z-NZmY*u-TK3>tb%0T*f)t;M{nb$1sqbQk}l`^}j@lJ0xIb}2kfci8)p{F&jix|;fQ zhI&JFjc6lAW)H(tt$I}WxKH|goT~m}8T_*4{AT6%3~GQTd;2dnU`y@`>|36yz;u2E zsH}=Lpfj00Iz_`F#-r@ea4@5)C@i&S>p*h&^R~6Zfqp8Q0ryL;w&`OfI>C_V28?r3 zI{4B1>x^7{)A3)r`6?J5lW!~-$gb-l<?YY|JEE3fZP*brKps1ul|bxmYm`X#EOb_^ z8~5P_ZCs6b(P#oToO36e0Kt$frbYBp*Nu4DR8#w-g9Vs9Gap<Pn$$cx*J!bbwvAA} zkW(?cA$3;ts?>&_msdHsz};myjE3gN6}r}aV4z2a=nykM*EX_zsf~AL9=YxF>5u1F z=0vL9fkOW};OmDGDginOMTS`eR9E}dwrxv0$x$&{NIuyepGw@H5}TYwI1F^I#JO$L ze)&r?qRZ9*Ao!t>HY(qUs?<yA8k45zF^w0|(4GpOTgvA-Ro;T0m?}kMdCA5dCspg| zssF5%UhkgTa!i^tK6oPr$Sc}jau((Ze={tSV)2&WKHX0u>4{hGeTfEuCISjQfVo&( zZ%WpT+TTxw3O2xEv#n#LOjMb^>Ee58__k!Zp8S)VF5jGK^IV7Zm~Q87e8)%)m~J(l zHB|jmUN^$I=offQqR8{h@!<A!UtjPkW8RM}dH^yTf=`uWu`qOGF7kZnCYf^afJy8- z!(5~PqPJZ5oDgQL0)5Y}WdsE<4i=YTcc=jmz^4R7n(^##%2hzhQ7_}^?{fM$Oh--O zjVq5fb(r|?V(PG-=D?`a6W_w-QoU{=&wGfgV_SZ@V%(VcbgoM3(Sw7XbVQ6gi0s>$ z#-UFTg!Z;`MTr@1F@0H#>(+T;elBz;dNjM;-+JJKL|lL?ZpyO+5`E|_%f#lJSPc-I zg}@8Ako^@VsC}S}=Fb}CxONTj0zJu6{Tev{4`7<d8&j*H0cu+%vu@)4VSP552O3E< zMKjL<;{9Km2#krFGee{dO70c<l4u-SFy$E}kG+by<<wDT#~AR1Qs#}M+-YR3gUW1Y z<==_ge&a{S8qp_htA1R*Lbk^11>SZ4W@TpJS@d*64B0tTh5fVopqjJgLph!ZX^ksH zr;NuQxhtv%WHe-H(|v=?rhp!=dhgJ!+FT_zt_qCR95s3*{*sj~NP5<u=NH?#M;>FO z^1)wu>3M~+7ET3Day|66EPu?{1>*EjE3<5y;~1jIygC%(5iH)U-LmvUNz}*j4w>q{ z%v+0Yb^Dmbxw}#aC|09KwlCf_vsm|Kw|r!1)e+Cr_(c_5Xz3)CXEu$F|0kwWv?^um z7u%sZ<14a2HxUI?K&<5F<LlGywMVszM<P*T)>?nkB+ITlGn%gLF@yYVS%C9*C)`^f zsr#@NQ-^7MeZ)Ey)|cx*-7EX~0OWCF?h=tV0>kZIYKY&s`}QO@#Jnf5MNFJF>%FTg z#7HzktLUECl`8^xwl+hCOvh8JDHp_4efKoD)-7=7bZ4L+N^WXBVTeJ#Mw7Uk$7ai4 z(lTP}<Jg*R-eV3LFt8<3KiGe>6olPI1!mo<QyQ7s5(+u4nAROG!l7ei=pLsTjX9V} z6W*AMtMLYWJb!8*<~JXkp+^EBWf+AVvu11#>nESa=6zz-&+q3=IdmSWStl53qh3@f zJtxEP)BP43#^EYw%G4dIy2FUvO3htBm_Y0$3lwhH)~NKcTzIhkkYh?y>^KQ_ElX#6 zU{eo>3IiJmMhrg^9&hb&`sA|<m*?GfZ)s8E^&fl=C?}wugt?ImMV32FSvntW=2#<L z9ipzVe#nC`&PP_X)i>FO2lG|q{)}%S5BLt8H8`zVEH*KrL)CI(6F6;x5Ze<HPnv8d za<bFUUT!X0GZC6Ngaw?09;Nf3Yp_n=MB3eCb5z>-54FfhuwbAv5f{6?C3`S^LwI*2 zQdT4r|B2z-b#0?iyi%wPN_u;%rsO5IhT&I3$O+*_!$ul}zU9i;4j)CCI2bF7+&*Z! z5OC@qS+VdHpTcnZQ?q=Z{9vK8zPgb*&~)mZ)29^ryup0*<TylQ9_bsc_+E|PGgyhJ z_+b$WHN$8-;6V1t{UMM3IAtjwFy{;Ojs{<b>lzOu_qTL@ovi<2*yFt6t)Hv(mnM+9 zmwJSh@ob%vXwK2j+t3U0Ez-IDN3X={&+*_6pI+lre^-gpIUuv|U;e-o;ptY~ldqG* zGrC?Epco&moAL8dL5iYAoF?1YvKlyhsz-_DW?05-M44#4EY=!$O#7i#w4|Nb)UN02 z?CzDGns=zgY0+7{4&gP@XwP}^>1PFWQ7$BpG#`lp+h0iYl9S#ROSgu6jus4>^kTT@ zdvEOohl0o~f@lC=q{mzxsdbR=u^bH3+hQ?d*p7D%N1fIU#KL4>d~e*P6RDVfMZC|? zv^0;IyKF~G4sPQmaJkk--cSylR`~L@Hy2Mg8XPX=eP`{sege_;g>nBWAIC8Y^Cxz# z2bA!M)+>;~_^WTE&s$UuGf>)}BE4WOJCn)Wvy;=B_RcKGe~bV@E5^lWg-ZbImxe(@ zO63JfHX(mK(fK4R$IaPYp6y*$;D^h(?0ievhhgrvEah7YEdubgZd2m*x|T`1S4xz_ zkgE}&1Awi(s<3**4k*O}-O#Fb(a-Q%P1EPMG#QE&+LYQrj2VvAmO+ozWCoT;?8anG z#}Y~+)u*;#HNAq?H`VS;4fECP$MjfwX|PM&t`kmabGD^dy;v}-r%)K{(=fZF?<v*B zb{h5_AuuvT<%dHa4!e5wON^fkv@M>!xwW45xM=Nk0DP$hz`~w)vSE$*N!;Z1Nu9X& z0acWGH7j4N>ALy?MBfUK16CEvg_ms(mYe&fDI&2`%QtNJbKG8hVtjQxCc}h3il~9T z+2GLh_AP(A+j*GdD>L&8`yt<<^#o#RHpfLAPs6M6%Qs(|urwFL#PEqPRQBW(2gBu2 z%oVxv0d69;v(1~7<VHxB;hH%B;0pTpXgF-lLc{$2<7g0d;k|V%Id<;RxomgcXyCjG z=rlb{1Z<^t4+Wp)UY|B<FroLq%_P$Mm!{TZ?qJAy+{pRReOhA#;~sk>%NNLkcs<Oh z5><c~77M8JP;0P*eP(9LH%v|<40QG<Zd7T};5X%J-m3qbbnlN4gQ6Z#608E{*bu85 z3o}WXxPJ1wAyaMv^+A3-`RCBwBePVVy;*(nn})eOod6Sx=o*0!k}#0dL8q!I{4j<p zj8=Ei4rrM3zh_WgM0)-ow7q9kQ*YlUiXs+@2ug2CQ@T>6t4J3@ks68!NC^RvUII#$ z-h?Pf?_Emhy(68F1VT*^qzEL`Nc+!z-glid>p3&?&di6i79W7k4#|D*``54Qk~8TB zU3Ky?&~eJ=sPgfnU-(G~y~Me24It_Pugx+kIed6QzpRJ+vo4<{4>R5&Q_815FW!uX z_gK@O%dh<9b-Qi8XvQ0BiDwP(?Hl#4iThrvL@G1Rrfhp?kC*itk!Onum~&tf<!(*2 z6%WmvCx?#1%8sf(wkbQTW@Iz<I`&#LC5-q5_NYC+m)I`xQ7Ct&;_Zw}A)?7?TJ}0~ zw|v(>WTCm#%H*b;%mn^WTtKs{<WslGtana)YBR3(af>Z=JVUP=J0#45cnC+4pZ^36 zmR(d<HZP=|q=4Oqx~boK2`k2{+W0!)vct~>t2#LA+keFEn?FLxR|_XU*6rn&*o)SY zz-32Bw!1>#_0VXE=(?~}DI=;`iUyzk{j$e7D0L5*ENzp<z%fAC6^j;u34y%R%qvH4 zz5nxJ^k>x#scBO1v*~mBeAPlnv>w)p7{Yju-2)@L1#16LNl59jvN$Gyw-{Ss-TV+L zOI<vb)2;2VNj(_b{7r8;(TwZah35TE_E&e}nc<XqRhTQ~=iCJE!itfyOr-$%zs+f2 zs(%G(da)GF>MOLg>bT9rr#qsCy3M=`+*ae9Z`F_;&(3D)X46wt2ue{o8y*{{3O>i_ zp81@w{Zl7)fiP`$xJ8+C<({uhR~9G1#X}v}s=4#v>#lFyul)hdJ;dTiB~k^861A_; znOeYzrP9^_P;N#S#vL9H0qm!046}29EN%T{XN^rw*k%B$1oZv^U1}6B$K3b_e+(0Z zVA5^;LAJKG6A?bX-WY1w6we*JNDH>&A$b8h!kfnF?`n!iq%)m!Z4lbS__$}A`}rS( z*-@1q-RAtQxS>Oiw`}F@0#DA0+p|4vb9`u<I{}PhM4)`JudTL@ylOmN=n+W+NbTI2 z2UW!-7&v>Qy{qvYV(K%(E(rNq5&m{FR&t3j<Nf0_7Nt?42m%xVkM4N5%_&nG#W{{e zNye}hvVfB-%+1s%6F;7@9%g)g+Z>`H%424eq^01RQ!c=KKXir_$A+T~)2W-Q>?q_+ z`|aUWvjrD&9-Qgpg8Hz+;;J%iDAKas7!coY@<cNy3UbGHQLeaLQu@-5=%w#2s|oT! zcifJ@1;zq}D#iI=E%cNUo3HKjh+_`==@U>iA?=%pm(bUlY`tq=4G;TuaI|D3pYGPd zh#l98ybr+W1FSEJ-oIh+1K=mTyoMp2wDlaeRxnrn5_9KiwFd#MRDUZo6FsjD^i+`y zdsxN74St_7PUWX<o{xN6ODatFKJxjXSz&!A@DU-txuT)ky?6v#ro7xz+nkJ5KmB5p z-sncy?oD)r`)h%%VDWogP5`_hyem2I>f`+z3u?DkpO#<J6C&bpY@pf=I?H+Nr|=N% z&Gk6tMKg|&OJ<;O&m1UCXpE`O?L>R7%f<50EzXY;e&z(%hZ*frl4R5f&8df99S+vX zG!^?tQ-)Uj;kIU+JR~EW*d2(vX&Z7a)X1&V$H9ZIE#c@<uT-)93XHN>rDeKeXEz_w zBKx)S5N}4?)_QVTKXKca_8DP3)xFs9v9+1m=*=hmg&$u0Zh5Ej<E)D2VOSdlZttdr z#RP5}TyD~A%li|9p)ZK_uM=v$x^w|4`yWA6|0lnxfCcoN(thUsbhOB(J7Y!tS8aEZ zZ!TM>3tjMki90K6Day1jn;o++#diBRJ)Y;47~o(I2-Vw2=TFVSvRU5MtwZiaExbj9 zzcqlp&oK_a_x~xi{Od>4)06N+t~;9K+bz<WC2cJGfR)p(Q_A>MsgbYoRs*l9F+*0C zPj+SUioyTn?td%kFr-$K++Gp^&|Z7Nth44V5!S`7+OUUJGUU;n5I35_dhg>OgVaw- zUdKyOmfd(pwjt>Je+^Un&lRqc$KUIah=AU`yb}|^l2rAv^Gu)o&RI~qY}G*Yqlz&P z@Q=y7I+&K*Bg@5pds-GT;Wz|i{l@>|LJl!w+nr>s=SDf`#^1mLP}iD~Ud-*CBF}kG zdr1&oV0`wP|8N*v;m0-dlYYn)@S&~P@E|5%%&UJX18|E#bR4C$4LwD5GY-_00|pev zgHb^U?71~jXZceHle2lBC_qHtm!$qcm%8GG>)>j7Le~<*%;Ao@HkyyfUs<A}lu^6C zbi7s=SL7xVmQ;$9lhGY$zy9ChYeW#o@|Hi-An2;86Skv3^1@s*eQWCXyQm*eyDn3A zyfR9*y#e-*LZ?PUmv$7V#*XcP_Lmnshga11s~=tzd(nV;vzU=mnN%h-o@c{Sk3`s? z%bLzn4(XZ@s-3Gm@a$Q9F+DyBE1#i7nCGAeqBn1<;aW?{<vnK5MIW&-j@~!GriQN{ zKWH(%t*2e@O11MHb@~X{1iKFLP|bQ}+MPcRGc-S=!so8MwD`>xFI0e*lDA~jXq`a_ z7_(`craOH<G}2EooL%S-aG*f7x<)vnUq0O`urq-JKpOQ}DP=}LaDZ6P7$f~<vh4#{ zl!@N;0gQCD-Tc2V0q~><rIIr7GK9#FUhUrZ)Y7J}PL+F#(=#X=2&DtnjU6knHKlLf zUf*f^LZkQ9RXs#=^ScnWG(MZ!C*e8;rzXWys)i_GCjHs~pRBC~<@5T6ul@H=A6E-q zeDxYLu_ox&xmP(e$(%gimH<~^XwqhD`ahkfA1>Yn|3KT%Aa%cLVPQx!i#M=2Bctd` zws5B@Gfolo3Sl|IOYz<IR~P7#xAh*Bg`Bu)WkyiJ(?%gW?`?Om5dU}+wx!(*`!w%8 z7muvQlt}&YNyBfUO<6Vb=>;sOWYw(S_a;Jyf^ImsWCC)<{7(L9r2)Z^LTeR@oR%*` zQ$_EFCRUUMkInzJ1Yx9EjC3{)VoV#<*<RCDgYe5sM%%J1D8iigdK6#my(Zb>$}iM# zyKbVww#jA|Ynh*arEizyMH92JF?uuS$}0~lH~bs&i<b&V^?>HUxV{-!cIaGa7RTEc zb|ffp_&*$ShQYvB@Buw1=}6o~d+h0_X8p&l_aDW4UnTZ?Q+=mCD$I)>B{DV_lRREQ zRgANT5%j#^AG&6<f*)^`asy{>f)0`%94R?4Bjt3Sq0g<_dTlK;q=d{rSs+jYo9-K| z2fcDX#rTdaLUa7ia01+?!8zfhb)SK+ZhxBtL%sPX&2d=c{hYt?a`bYxg`WR1VJ4C1 zD#Xaxb9tc7sKio>mc%q*tgrk+HaD;l2ltfRrrXK!w4YtinFtfc=%Qr#)-yJXNP!wF zgBPWOax|k)D`+D*IZ<l}LUFX{IjDSb#OIBu6csol&5_sXtuY%9^J^@q(Ene;g#Y=) zfbV2>J5r`S*Cu&gz{|HDcUL&~u#LDWe6=L+dD2Lf+A)GxKw7-x+>5$Pbh+XB&5R8r zvGBwY_fwPfAf!)AS|ni$>h=<apiw%$l^4tA^i$}%3w!jDCBHgct1ekhc#l%z$(E*m z`o#aOCHfG2*PiHN#qy4DjWK0g$vF_t_u|i`SlhD+-J=fCv9y@uF&q5HZnyPC@$4k& zDvJc0P|ZAN?-q1|ed*?|)%5<ortr`AzW_sbusFZY-o1Oi9l!C_QEgKACJ~CldS#b7 zUnb_Lf*$IV)xRd?|IdQ_zbo@^-x$Hv_C=II&23HcHjPn59vfxi!KuF0J=*en(dK;1 z(dUL05V}DxFJ5nNMgSPv??z8}8W*v?JzQ>0E0t-eOUlMuN3!k~`;}t*UBo2MhJW#| zyzKrEcfXt0js47+wl@HnS}gACr1MlJ=}5JT$h<<)wDH*;R58eCkeOxk`BN&1s8o@7 zdV<L2@gjO#1DDI7_H?$*28&o}O#@hY8R;*6M@22Amy=_v8l%%jq}XUoJ|k7;Qs*uN zoTG*V4Q3vYoNV(+2|Yo=oihsMv$)Qh7L+;BHSbMda>XFcpng1}j@Ynghz#Nml()QV zfs#B#SEnzny=mf?w&=M+*I?LLXnXz+i3pAeRV7+Q;g{(xTb=dI7qHGuOD^L1*PqUk zarGKrPMbq?06yjA&C^)-C5ZkD+h}Mx-7@p-tb_^kBdAKx$rOqIM0Lt*QCEI0f@el_ z*W7HCH#YIYpBCK~vkEj&dl~`sS3u8_Ao|_RgU)DyovI@zQD8chIdNkYrfi;loQyPg zV+#aQ2+)je{DFD&U3NpLX*{XR^DxLC<4)vKgHho`+m7YNTU`H$ylaivIl85=g1g1? zUd;qs<GIJNL<&BJ)Di9fO!$>nhWtqWl_st=QKQXO${-UONacg)qHw}ie^$`P8&*3@ zmwI9tProEqHYZ-EOnPwZQ?}Lw$r=wc?9aMEbdAAlZ_Zl~4)?Lceh{JOycs?&fyF9c zq~HWM6_gTBpkQq$M!^AJQtZc{APo=Ue*gPg!{QhzeIxi?W`GH*O`^(l8#BGdB&Sv? zlDzQq!+3e@yY`UizXyZC`@UJ^Ku1g^Sg2*{qOyJx=wpf^XdA3bA{_64d7D1fUYG@7 z@_osBqw<`7=%zQ+1v)gu{OW9XnpXb8mB^XeUa>h`=9Dtm-jDi`>i*k&d~zsj>*sTZ zRpq*@!cyrPd^?~l(oh(T=iuHLFkj!-q{~yd{`w(#(rNTO!Pt%{6WgXPU0mK6Szn4p zPcK1VIN6HOb1CUm4Dz`5TnMq@_%cuWMd<hXg9Ol0pI2L2lI7*8fav;dW0WtuTCa!K zFI09UwxiUBC=c}aXpR;QP7La!XRMq~QnZ35x!*LaCB6S3b97uBG|`e(SOQe{>4XuA zx|f$U@}>dWZiofRN_Lw9=4%&%%8@cHv0U{`ap%hX<)xNR(u{hFZA?C(r*WCwydlem ze=!Km1lEyAb26CCOw!gNT2<Q=J}>T<b4y%kvrpspX3@lYJXi<lA4^G*xX9iyndhNa z>3e3VBL_qy%5`CwSFiPM`$+JeYk-`0w3>3{B|`&|D=g5dWN9l+qWAc-D8jo%yU#YX zor-I^-LTK!V(D=`;o^`Lb(vCdPew+_$rHW*s_J7N+^Q?v{9s4IAfuP7o-qp7&Sl*( z1LPl|G&7N^y>x<#;4Sc@(Y}PE;PE24_);R<Dq}0|5HOq)y-FO<>eOvyL$pgL-X;0X zV-lSEiPe!iZHmM_T&%Q-+!x}{gBqsB+J)8l0X1H)>b&yb!BMP2RzcI3)O9ehQMCMs z{5Nvd54MiVJ~DK4$U^grvWm{Sj=LMuF&-Z7YY^kDhb<|iNu54o!i!sOahCv4Lu#c` zy+7SL?))`2D{D%F9x{3VjhzwCPgSEmu=2el`T2>D)`Tzf*1$<FKDKYiYTADw;MVqs zhYW|-OGpR(>Bli=QXA<@86Hniu99b5N(XF9%HmRDVwi{3?M}X+-cz;u7NxqC1Xc*s zTP$9{wQcb&B)mC+G;KQfnK~$>-8Gu1jLkdIpKQBz8<D%!l9d@Gif>$mcoRzv*!S~8 zrz?U`=y9O!<0W6v+Vc4&p<IP+CteSE|8KuH*X=gx7VB{6oD|e~ty(x2n4T=}6-zp+ zxh&yis@@R5oVo;EC-8TA;L4qV9uXqzAn*@T+vDjA6^%jRUx36<;M4jVQsjziQyp=) zzC$YchLeT!er{t1a)|l{9EpI@+_Z~g7&j%mbtJXURj-s?kxgc`&B=m7h$!nLO(wXf z*H-CY%D#WL<vxK^OTsIPudcBACTnM^R)&9SPU@`Zm+%|uy`KS0s-S^@hSX_^zGOVV zi~OB+xqr~#5~J#Zv>HeLH5@98Cr>7`ptEH7hpbnABT!5@El7wcK$P@eLth{?wc5Ho zpD^wpJ2VK9YZBx3;)5MTO!^ELEzP!BVTHp^f7X53#-qhm0^3{MEq!`C-0=yaN?dT$ z&Kcg8=7vR)Q6B?!367odqX*^jB-%3PphqO8Qp;`shGNC7u@8WVrrc=m9lFRHQgMVq zbz(vvC=_iHw_0g{-LbNdGHQU^C$5ge;Wqs+E-R7BZB}?(hm0kOAM?5$DXGIcWNC$n z9bj>_d-GLiHBs4D&Y!iIcspP@%>N|fC{xG;<=UnQ^A&bGJlh^@F`^mr9gWq>qER8b zSOXT+C#;$mebm$@QofL(J!E3|jVIn%S%6LVwZ|#zMu%jeo-(Z$h#IRxKTI)-+Z#3* z5Yp?`rVR?#Y9}fQAjIzZDr-$6babb;^;*Pr(LU2X*|y=@L+`_=YaZpCVZ?}OI@&LY zd%ZD=RF-IA9+X>L;ShK*$?QrPdBcn6%1_p7J0zU2oxRWVNYyWiZc(C(h)0#KP${ZC zX%_uZb{8^QTy>t%P^UA8%nsMhqmktXtCu3HF^|<nXA4KC5;6nO%iYVj`7>}F<OZw_ zb>0{`otiU66fT+hM6GiF;d6_@=s?a>^$@R&G0;HEERok3!=(QzeYA$ViF%`yaYg!& zLrC<XFTJYuOk@z>jF8{9bQLmjtH+KLlD8#P(*V*;?^FG3GZI6gwUzbORnmt0B4S2H z>|T*Ik2ikkxdJM9uG6>^eR*e-HKN+jJs?0hWiQ=FbSLUNb#_m)*qp%(P{JpQv`k1f z!~9qLegIMAV(%n6_)lFP+YXN@${uwTo{X`~q!#csW+5bfALjBHgE6W4MGmlSgBNXk zg6_37hfwLL9a=3*PG1Anf#2#xDlfxA+U8fKYl=wVRi@B$zrrm>k8U1Vj6UN*MWn;4 zMCDoAzm%tDrcWs}1l68b(~_wEA>)Gp)cIjR>3OnBNT%0+5gyaQOX}4j4n}zaQpDqc zZyS>q0RRr?sk}EVV_O$6Zg@qlGn{n~jrrxCUbbmljW{elV3;~t`J42E+k+|fPtVJh zyE`aaiL@d0J0^XckB9;o1l#KtNDNF%!+2qcoI)cptZSmslthldFzl1FY6RxpZQLt1 zWF~ACyO<BUc&`txKqk+%%T;rHeO{w>uQ<Ah6g0n=ON<6{75Xvtz_|1PNAa5I5OdV- zI9v*l>6)2t(PO)ztgZLE;vzsdQVdDGFJ^!y2nf%RR$OYer5|*uEnDqMy&v--DqI+L z)A=W1;*+S?a;ThWK2yv&$o4~vmd-U}c-~E(2jbWJ^pi;F?B3wd{vns+$)rY8kAM=> z=kD;t0|}l~on@;l6(DNU1p0Fs*30JAMK!T|%V5PBo!eD!;^*SE?uT3OE9K>Iu^ic5 zWL2C$yQ=)T$~8WfJ&aniNx5xMH}s(DNQp`7^txD}A>L2w;I{dNl;7%A3-377`xeLj z?!oonWg3?20907{@Vc|R;ujxKtGmR_A&=}TNG;JdS1cAWd(MG_8LyA;4vsXTyr{Gr z;&yBmxvyv}@&ph%t%RoP%WodeGw-}j+p+_#HfOFUUYHH@H)Y4O>XyS+L;wmr|M)_i z3ey*uJ5re=gX<K3zfqR<+L5DcgO~vvGD_+CVAYn)Y1GU5WF0l1&eS4J?rTaIk!Fv^ z`&Z?nfA1+guLzVTQ3h(3SS~I3Cg{Dk1D|~pWn@f^QoWKuDBcpvoxWtVTK3h&1}roB ze(_BX@cLGbG5o^&q4xLHJKfS({omGHa{9LF5tqAR{+937*Ox7(Df-)x*jJOX$xlzp zcV7i3fvw4Qs}+n0APqnyS*!|(LRU0Dh+6VL&FuO+6R|;I8#E!~9~pJdhi`>>n4m;s z<z~<|x~{+Os<W2eVSMJ}Q)Pl<%wDAhrl_c@f58X+`wOO)K-aEI|D6jFuokz4&rRsI zVWt_Mv`HHiwdQ|mpv>xKK7~Mf+XC>+1*Ao;h;zeg%Z(s5*7xZPDxPR3FL@dHHG`+y zORbgS{ecwuqzo|3K@U~`bmwy3jRrNpP%p&pVyVB7#RlZ852uc3KL;^@7=1gz=-Bix z$%=^7_*{_+#;NjJ>YKB61V5>oVB8M4cbU2kO0(2jp^MIjv`_D5=p`-)Yr9ekY24(! zLDTO6AQ^$`#5}Gz{HVDNS|-xd@>2xWR-bCH5^?wGNV8yZyZkGRA^t|+G7}gQ#M3n0 zrkL|e7+O(@xL$Ym^4ptz`Enuldn*p@)+8gmb~#rJz=H5HeFlq8aC2@6k3;oc1}0VU zEV86DaXM_8F4G)+R(kjk8PqqjU+GahvSMs|-U$nBC_%qv{vvSu1%vRyky1p}xhU~^ ze&wd}oi>RwhzxuWx48(FdRnEWBdk6;`zmVrB)HO;B$K<9P1nI-X1$#yL40l4mZF}a z-A(t@BLwWaey-!GT&LR(C@`{MguS*my{IyIUZ)Ma+RHi^4M<qklq><$HzzXi8!pmB z$#EEi8fd?ofu!jGBWk~FC0a*&#l3yHTU8K0-qUjlF|EW~-Jtuiu;?e{f$L~4+W??) zfzJsi;F&5furIWKH{0*S+HbnVX7!+pV685Kr_}@Wr9j{dLVsh-Q3i)-KW={_-IZTe zF<DdFWzXnR%53}cD(Oj)4pWp@XeD;(B6II;#}}3<tTDxa-_yZ0%g!B|RS}h*CAR55 zhw|a|Gl-0t+W4IoaOv3uplU=auq6fKz;1LT^?~%b-BMcxWyg?h6G%au+Ee+-nhPP& zY7rusjBvdgcL9El>_i+<`P$vFXo|~Ayej^^$nPJrBNS~smcIr-%RG#g1hJ5^z-N#W z6t1<6mb~0OLBz=9u<)W3irsrofNivQ#JL`U9miU<KMxqi6O=oI&;^A4MR+J8PD~Ar zkeLz9{Q_RvV$xAa)EEwb(DLy%ji1;6M4E6TB%%@5$-EtDS(9}KzipDdVsZ7oO5f<~ zOCzQo*}Gdn3raWtcw`oRVu(;{jJJ46#Ul;8yu3-VZ%l8fI?1PM@OoXfw(uQL0K@2M zY=oUx+>dJ?LmT5$htH*mh~4Zn$$3(vSr%07bZKeJ*l(duYulYW=OIB~m*j@io?!On z?(I_ofMlO}Q3#F8>7ogPG_<_E?f%VaX(}XFCf5zb4#+aQ|B{lZmh0gWoNLL<c=_=0 zm?Ym<Aw~<2!EK9)u1a}RQWRl-Yt@<vk2cEhOj`^Z@#lt?m8e-ed0;T@o<MwEUOw!% z3c9`R|NS&~Qc40sG1kkNlp-qo@M0O=o*w;oZ`I`dJE&*k1eoS8^aN(jZ)Y4Qg!!-S z&5Lm}68pdMz+DX19S6tTx7}9uBJb)D;y;zrfX!MVnf$XCSzCl*>VSOXzjt%0w)N_@ z&t##6$-dLiLkO>?o}N$_&{=U2q|XfNNI))5MJhK(dC?f^ri|7@%7;1ZKAzmvr6pt! zv;<RuHOm6^iK>U@RaKrM?1PR!I9|Mq&~9`4x+4;M-_Eifs4#;0_WIY*f!bBh*!G5G zF)IuRS>a}fc&SS1Qxh99HfBLct1KhguJZl<=%r(P@_O3MrDLvm!biXlcck*raPsm? z=d~jaEl|`l{b9zKp<a6p()CR|N_5xC;|~9;kKheKWtt^tMy~pSVj$!3l0EdCQvC_G zw9=F-Pm8s4d&r>^0QKcq-QGESX+?5SBPx~J6i?(|6hzs{ypZO#8>pqfQqpmM8F0&P zA$e0fZ7N={vh9|s2&6$r;s{?Gb!oE40^KPp_<x(eSp#U)iC9m?s{u4tC+a_vU$(Ub zXopf)Q@!lF@3na#?yzYEEpevzm0z_Etp}vVLiIYQy$aKWM&#Sov{A+!>`d<jgE>*b zR;VLu_H$@6K_|X4pwQ7@DyOA0faR5;g*-)%8~dlTZsa6JkqGHE&SEDe5Hej{5t?Z* z7gzB7->PT5-N;ef=u_zqf6`h3Vq(B8g1`YXjF;d3))f7#I8i-Kf-ARD4C|oFs@?@I zmuhWqqg#A_wmlbH+qfq&;!_l;LkKFgC#-Mxp_QbG7XGQ>$%|^)P`d7}Yt?X85tpsg z%H!rUx#}psj#dN;t}3$x`@VPO;H7%@m%|C?v5fxHqsTwaZg_3&s4A(69|Hq;Q0D%0 znAl$Tm~yuqKO7IEQbQ^5t;RX88iw!uZgG-|Dm-}ndW3y4ZG}@^>-eY8aIjNM%$N`^ z^|-EJ3m`5Db|Lb9Ft^ma)2os5OJF^Rw8)O>tUE$&TU)6LI!z8gg!3;eG{O@v+aVq+ z5g%K8J_afWwPcmQ$F%6=GrPLRCiZ^)a=AlG1;)C5g5WsVjI!0D1IE-euzvQ<UxuY- zq9a{T6k$RG9d{KI`VuJH$8%R<@00;}-QT4Ca!prghKI}kiZNLZ^N#g1M*_&Hz;u3T z?DwL|HTMyj^TYQ!jOQRg)%w3^$OuNXzmd|R)kls%nY^dLyN64K!Ii$4KXX;HBmhjT zbeG70>iAX(s0|7qpNI=P*mB?oKs+gW=SrSLhn*XEH<rzR$fQ3x*hy}<Nt`toT#<n) zEldYZ_#DR(h44RPN~kO#;JmBP4-&+K)GOtWD_R>^eL`0xdiWD8LyTXn+{ux7TGHtR z_GLZjx_o>l?wrn_<gc5<LnX*;w)%VWP-@n6`JAggVzF}K({T0`ZUJZZlzBG`jKJBm z#d%et3XXFV7u#Lds=?AVTez~VeP(3^4(@56%0GLlWP=u2BljI2OFr+#CSYIeV>xVb z5!JlI7a5SMK}lrjm)A6G4*S<rj+2Orl|UN0C}&A)61}GaH;JA%%GPb7zjFJQ9pA0v z)lCbZoxARYqYid(_exTZ)Qr!MW~lhn5nf-L196YP7@IS7D{Oy7pctCdPR_oeDMkBz z@dv?(xVpdOe@$!wW&?jt0Pxvg>x3Q1^p5E9C7)l&FHN!eD^6>^vQzIsjQj(K<ZtZ4 z<)Tdowy9rHF~#eh0s3I>gb6%T#5^t{!3$PlX08|>YkZQV^GH3ybjs*U?(a(XVDdj} zkv-XW&aF#xYZ{0gGbi5o)n6Bwy_>d2;#@x)l<nC@951QOge>}4S$>OOUH!#2VXako zCcMzKx%zb)Q0v1uB)xt-tTKtoJy#;d<@)aaHV%CuBY!x2?Ze+G7n<)MP3A)_GXob_ zE3I|hup`|jd6!d_50I>~?+!3_(96_r<<IBa#TONBBH)$9g%|5$;(jZRaNm)*m0tlS zr6jFOpp4Ob8Zf&EUdWptpi;U2{`S;>Dg-mW%*Lfp3LqM45vx8qx>}okIvmcqabZ6& zsyeu$yqA8oL)AkE@Ic!VO5nV+iuFj^)nrvA+e_imVAcb-xjM@l!b!+(;6uDnIZVQQ zs;bCrXV=bjd_cZ8HcOp9kK~iU95k85OH50rPN&GsLB46d@nk~ut~c^8+O2!y-bU6P z;z{3*avwIe3a)TE1HY5eXd3p}O82>fe~=dhS5#N*tX%&)e)muHgEZ_OsNqcEQxlx7 z`veBrU?nKu+>%x~t|1m=yEM{`6soXtJq{dYT>fOD?3~Guce}m8dMF(XZJd&#Xl@B* zS)>~XPCVcC0HK3!TW?NT4lLb@m%aYdgRe|OF`Dyvl?>i~AcbkL^Y&(kbbxOg7vtAy z>~k*!RB7sfy21C5{mkfA_4%V<r|N4KB(uYkL&T5fxb>P_?ALWtPAslE??oI1SVvlO zwb|c@wzpIo>0@rIZT-Fz^}~;4b0&#o5U5I&jw%lfAUU`fIiJE7+v{}ebSQe{)HF6s z*-fUTRyrBPcIrV`8QgAZnGQ$M_cR|mL|<it6rUY?c3;rj@*tEy8eR?v$h|{KQOP%D zn}sK>e6uta)VfXM)ma~Rlz)DkctyK}#g!*!nEQE@GK_2Ss4936b8Joc`Q)YO&PYR) zJ?p3Y!*94(OjL1u3>*Gp-3ix~s*aJH$T?FdjB2L&Q|+#tzgY_&RuH0cZx$l~P>PKM z<Lt-U8>4m+%z0o%xfMB`yAJM;ZuMM#$JCLw@m8N!U=R(Y)Id`_^c7x!UU4Y&!H2=d zhfA&ggy4C`^@Tv;=$Q%TCg=-Bx-_=W^ADZpFN*9E3`tB?BgH@APa+y&lZmTWJrAoo zag9-)I&QskuUK^}ZT#FB!uU;XGR-wERk_5;Q-7ly0*%UxBY}{7oBkzI-3B6pR4b+k z5qNuJ&FTg*MTO+#x6(Sn=<B_wQ;VT{c`U;U9a2wsArvy5OIZD0Vet|;r^^|sieRls zdyGI6BMvBO=1#_-pnE=#hpC5ZRk^>|D}>NqWBnU|LnoD*`|kfkhSTZO#d2m=h}KVM z9hb-qM9vQX;u>$KIxZp{tv3>OsoKREn_8ybY&)J*8+?51_B*?$1q#Avhu<eic5p|U z)%uz*4BvZUe_;0WmwKJ-V%8HYKLWCcH7n-qv2R4r7Fxe#%h&`iaD~~ugZ=&~fp*oL z>#7pBukHj+J@RmS(Yt3}zcDH&z>Lr6i_-B%rjG69DCRirAF?Y_c1<lI{PB=l+%Ixh zJrk8Pev7W<8;581>C#Q{0U=Y76kk|q^{pnXs9D9xgOGAnrInp?p4s%KH+S6lAH2O= z67vY$c-nE9mwS;TTB!glBN=vEaWqF?p6Wbz6OF68#kj;kq5XtIiFjV#O8ScnCTVpr zZ5{t8g^bvp*>~Kg{l+}8KUA$qhzJiLI^aN2Qthty0ZpBsLh{1LXX59T*=pGVz&!q3 z8BC=Qo!{r*2ew1H<V}jy#r{ZGPfF<UPUy)vd$t5t2OP)4Z|;<StmSPP1>|p*Z<t$S zcX#J68II$)un*`t-Y)6M#QvER8&xb{6j_f3${n{DO~2b)-n^giR%le&skPiUh{`vb zr6`W?8#i6~V~UAvE-hGmrNBiN+WNL-K}%tAB+vfkI1VdoJZnoFs(wtcT<*;#=})u4 zCwBwQyowj1!f^bZ$!n>XwO-{}jL%Dg222>e?Lh7vsojpNvTsyJI`^v*0M%Rtfrnie zGP+RzZm&m&&)-3*%YXaDTwlzULru(iUyd)YM5O#)?B+`0>xO%Ls*{jqspy=$y|qAk zXw`VP|F?9rJNE!P<NR9hnEu7r^XCPQ=Ah4qI@bDiH7Ic3T^B^tS9P9Ux*W>ll%YX} ztspMI3v74Dp%wV-T!Rsw{qHgYebp$t!A{4*6kZsBM7Qg}Qk(s8&WJ)R!?P3qw&3nz z+}`KlJLi@a&QS$hljbc>=3ebX(Xg668Ex*;3F<uz7QPDqr~u@@lq2TS>Biv&%Y#?a zmmGI+jqmLKHbiu751l(N|2bG~6{8E3n$BzMY-G)hwSJe$`%NW@>&nm}55xHRwHe`g z{6v3c<9n|9EqCT;iChvi%0k;<^93#%B|eq1#;BB6jWaHy{Iyw{uJml51B-={=Qale z;~^7)VtJ4t(TfZPll=J+j}jG%gE*F7X9wMP^F@`Kq_&o+FCX|qJD43$OtAf_`Lm|| zZhrTs!+h=I7|gUd{V~dC5}S?xBIP#mAfH#o>*!ZiCO;2(OEDDOHv};4a&b8B;b|$h zTNH#D!P^3rQwh&T!)RwPNtY8HN>h^7<Y1CXKhtpwXLG(LUmF@57P63?`Sp%PJdmIO z1;NRqgitF{xEAUUkQXIC?^yEkTE18aMFSN6mt#s-9mg?xf+__!f4y@La}&$0mLX{u zDn~2ZE1IYvM?IYBV-l0Dvn+S|Ck$S#@1WjRrruS!QH1qPUhZX-TMG+**Op)uakFqK zl7(Ma$DDM8n-{xt&V}e8P_%zJPWK|rFe-{m?XMY8$G?7P-8<d7M-ymH&~46t9;BdI zFb97&{oK!oU0f|7ggJVp6T+c2aI!LLFt^w(ZfV&qNnsI0lwE^7#B+v12(`hqfiDSG z1GOLdii+=~@E-%)ofei=1%zT}z1XE}pxZWYI4x@1T-Wq$W5Z*{Qz;T#4_SlVebzB` z$q!k+wX*{dtA9sT<50tw%zxm&layD$24X$!*2gJ?#l5IY2J3mJBn6D|bRqU-DBrQe zecD{9+?;b=fb0A!(lXnuCi>=%-Wc7tz`n%$qXBZe6U<dyD`F8x%u2Mrd0V?ETpN*m zVNr#g`c4Al-GlX<i;O@R4$6ho{Z_Dbx)v9a?<Bk_%p@N6-rU5d`*fzWwjtjE02RD> z*AgK{%9?mW|J0zwNLD#j`B<T~(Jhkc81FkacwDjjc0q>BKnb<S@S9Vpg&-E)rcy!z z4@jRvEKPacxaRF%zcXXv9hkdj+d<<O+`D{RWT2F&-rYghnY`CSTl^KuQFy=|y{mC5 zbTSxR==Q&TXj&)ON${7bOGe+0RV~!v+0b3xmX9M8JuSDWMZ$-kPDrJkNmz7?bqC*8 zxi{5Tqb_=Ae64!#*R~ZDcQf$G%3ds|%yiKGIj1DmGAp(VX#ja3!KOC8^Kq|hOPS6J zgVSG;Z*46kM4s~`c-P?HO^5NJ*k%T?fToNANv3DJ(pMeNmlX-EGF@s_S1PA|rb9<2 zib>h<J(Sv!#wbyNs391udnvsmu4#K5eOUJ>J&wpL>2j-p7VrOYBwDwPCVxG7#G%kI z<pbsG*wfiEImN_Yj-~G;L<TYe+|+cI;LUV&oR|27n}^_l_md@dyM0+HuHH7^-s3Rh z!`MTVxFcg)s7}Zq_JaM784X<HDLB5PT+%;e0Q?r!A<DX-8g*muvAqBE<!qz$HlbF? zP$Ae+E=-t5Sca}acV-XkKXL}@0hBQ~GpNlA(-KNV`lnyM%*}l|ad^I+k37l_g`aww zxHpE_#y?MDA9hZreH)nwNxvvsuScZd{#?~~dk2!({OVKfljT{XJ?y|f78Git1%JYr zjwffnt@NG?VS70Zzth+oe9igEP_60wRzt0(Wbji;9#;tHIGSi@9@)comVE;veUijC z`eaF`*y0woyORHxhb;J}iMW(=U<4ps#tXWVo728`D*tdcSvu2j)Z!cEc`vcD8q11j zB$=$Rk$#y8S0dzP(o8SkmpyPk5@R5hKSL>T`6gS+TOdXASOYh#s0!XQ_sz0gZ|lSr zr2<qs*8hUQ-@MG^HP{lzE>eVPh;!|T%aLzRnt%!F1K4}kRFdVEhK6;>J;?xfhX9I& z9;Q$Ee|1;-ID39vUg;AH1QE#xQ-r`ytnKT<g&Du-U&Jme?-vCPV!T&zS^0G754fFE zTJPJWS|;r~1v_N4Iw|o6n%`0oMnaVA0xUST*Fi(ossx`tC~bcSKSomV(ZWTY#)p(| zJlM(zL9MLw=s(-*0Ir6$AwAepIRXfl9L>J&@b>Neu6m&4K=cQQWVEc!8oOx%smg;7 zKjZe5eU<&9@|DFZy{swSDn&0je4Ru@b24+McMP7he`<IfrFL7WvYL!^DjG<&x=a(O zffO0VX(HWhxb`Q-GqW-K3|rZ^+Z08kR$}C7Uhd9_(p8E5nh<jr5EB4UI$tsH%W)=j z7A4XPAgE5>UFtPKB5v_fxj%{pQBm|oW#uQ#7;NZf$zBxB_q7OJ<iDJh-1~vRAF!u9 z4o;;F^ef&k17xxJ6M!yJeDK}-MCn|&!iyH)qQ-#ItHLn{oVS2+MTx3S|LPsH;Narr z`3VQ5u$o@+4r8@NE-LF6CZFP7j0HoY_#mxbpB;mYUxl(Ad=E160PxbT{Dj?4)hZ6h z^RT;m;Ea+dnN#cze`&`XB`+LS)-E#{7N9F%R}<~j#mx&sXLEnC{<@SJDOMpmbfvpR zXFec+QiR$J0viV2R4@g*Dp?<-_Y=c`IeN^hPp{cIAAcNU_B~`}->LsVqU)f~D}hR> z8E6Mr&@^_b5YM7o6^EDSWyI9FGkwid2wDDg-Y>Cg679)hix=xDnnq;G9f?RKBHP=4 zYSe@fj_zZoZvNb0xe0X67;ws5qPXb};d4Qh)GfwkP{^*kNMGd5Z~LdnPG=e)4b&x- zl@h$nbg6u?hoN$p{+ULQKbP}XkbpDehrny-0&oedY<-%>oQ2K&$c7NSenvR*Pns>H ziM%oLR~Y&I;b7tOPV-3;6h9`^`wv;&UL=C*BpUqme#p|F>(tz4{QJW;o5NLiS4|=V zIr2?6JAm0C4~P?fur<o%&D3w>Gqu%8wa)4G?19d^l494KTSPPP{8{pqpj`#`-8flF zZO&f))^y@Bwq<=Wh-Rx{PZFY#JpU!OiF!8GpAwFDN!qfmb1go;W!pTEO8fYS`~F|M z%aDekTcmuI836bJ)&X>Z`DdVq8J=m=vNJ!!d5m0gWSO~J<K7;5E^;6LO>6-IuvB(N zY{BYb^;J@4!MQNe<l|nOrISa|taH)qVy`>oeT^=1=VyM7LbHPBI0PMZXQJHVT$1o> z>A`_+$#FE2CFt*VePgo)>!1IkE(BZ}LwR!Wn0UfWw0^XEo>h9dCa0ddUauT<f^y^_ z;+OakRCU9zuSlOlH>1nlayO-syy#QQSc!*%#QD71i<|ehE19(0zK;16&4He5^Zwv@ za;{N+$7~*qy+~hLVy+~pfBDSt-k%^C7a4J=DEDh&^He&+=|k{Z1!GPA<(qd!tyA@_ z!?75DuhhQ2H*NoMf8K9(q-a|w!U=8Y=g0#Rr+}8vsi~7=Gu;a|F>=APqLOE_F8;7A z4WoSEcxv?DD%cz@md;9t<;_0sZn#qto1oLwuL{j^JZ=!NhZJlQ=4uvz?joZ&%==Sx z8tkD?6SA}JH}cQgkAKLr9m37U&VI$d4xTkvpUZE&{Q2Wd!R|}UpG}13_NQ3N^g*2( z<Vgmb5Cl-@4H%9xRJNcj_rkT`-ap%E^cVf6`1|}M4K1B=dCDUdw2NNaC8wC7)48?H z{+R`|;#@B$4ZmhEcs<je{X<->;IlGz|2sD%w-q1i)_fVUFP@tpiFJ!+P)R7c*WwK? z-i&*X^@^)3x6rWv+D)IEdRF)518mHqqJgj*9lTCke0R?|8)vZS#0s7KY_W;<xCys= ztHID9mNT^Sx<L+>`qACi$<2j%E$m6y1co7dRm3Y$0yp1orEOM~*D!1K=(&TS<?BQ; z*)G|0q0fjJ9#Sg4opDvCp+$*#ieF}6YkdyKWb%yRvl{!=7xqy~O$=L78D$%CYE>Jj zRjD@qn<wV$i+n<d3pADuA#A1wY`*ys_n1wmUX*Zl8Oe`PX>@eNAD?LbXljeKd6>4y zse1Z^g+XF7jn-d`^Czlm;O6(f!olLPSX9fXHSNYv98we68=BZNCr-O&{_^T$h#;m{ zjwbUrc1Kc2l&Y%3(>SU8AF}0V?<$;I)H2F@YMimK%tJ>XL5r^1kFaNNoOq||hYjw* zb!t67zU6bg_jxdnIEVwGBrBDT8}B$bNH_inP2w08;{LtS6&-nYL;Xwv@ThafoG)ef z^Uvg<3CfGiUFSlo&-BRHjT8;Fkw>P+9Du6!F`s;hMNcgm@Gty|baFQ(Dzv5Hw%mQK zJhZN1+^5v>HxP0<Y_HOmn0b*ESvNh_)FuT?4=|1c*I{K6IUDOzv75#eOsUp&MK^HK z{*I@101w7su~}tX=QfY&J)sM=$Ic=Wy;#u{37x`CR<AFkk0+omNj02n&#J(9uCU!e zr?O3Bnd4*q4QUy=rS{&ygQ2Zp)cwJsVp4|G5{hk+N2eoWv>o|pmv2C3>}vC1kwz&u z@(->)z*IzJwZUaKis#C0f5Ov}!*(8>X<NJL`ZIZ6*K+990a}bBgFDKSvWY^Y`+98- zVc?USujtO9jwl;qQ^7l_JR$!|I;Ki~z)A@j_@KhnY+KJt1o2CB(}SWdC2s5IwE%t1 z;YFh$4l^rDXE{vtQGl%Qo)`ROW5YLhzV-qYy7JQ}!lUZ#K3-q4*d~#BXa0^@=Vb?F zN5&G~iK;*E5D;nP^J(E~ySCct3X$DkYrmrx>1NM<ut<uA7YMfSr@o=PBr$GAoDvP@ zoXlaN^=Zb8Y2&>Vx#4<A8yXDW<;!#CTZ|J>7?ftL^<rcF*;X*Q-lo6Ow}OGGO>?iz zWSJ$fBjf#`+-Kz|ic~<@w89&$r|Ra$j7@s^i9tPwJX%{w9>V;}*qivA?(N#!XZh~3 z56PRQD3;<1mtMVVMOIYt^H8jPVoAWOGRY}@^IE$o*R9PMdCuyWC<L|oDgKlb<&3=v zwb6j)0T`_CmwGucvJ$t$dA5sA*V=}bxs$++RN~=K9$+$lEFS|V1NxsP!v}M<d~SnP zF|MzX(cCy2>i&pZ)28v|yBk#+EK=_Vb!&gz7IxXG486cnYh`paF<A9JpE}&MPXPhT z#0S5y?RH6mpC(>+8qVDmpiV4;zpc@X+Yp%)vMo}REv%oaACV25*OB{qE4cF>W#!*b z8j^~<&JG5wmI=q7w!Mx$4?yR%EEi4$Cx2K&u6r=l7Q%4Ubrlj8WvuyZgXQD!xpV(m zn~Yw)$>TvuonGE(7SIf9xl{gTn!(=&f3M88rU6pUYvr#DQb*y1r-Ihz^9zFCOVS^& za1E3V<~S0Q4K<N7Ng>8_*VWf_Lsh0liZm+^TW=Psq<S{0zJYyap!tU^!jt30>JHN> zKio^nV;$tg*0`<)(S0=i2>o=1`w`hAW-`k07Q#}bAMAL(o#|E9!DYY*gbjd~!RXRa zd391C+6`=541amS=E=0!A|%7^OG54&XOn5kIT3C|3aAd^*oo?y6nJ?m`dENT9m$B= zNztuk+*Of$L2+}ihKIRS*mItZW_{o%78AU*|MvCbQCC^x68q#4RW-tT0}CCSI6q29 zar{FjE@AFi_L+f<@;Vtq%ERz;Wf5F!ipq4>p6o&TwD@0OKUvD**mv21Lm0Glqi`tY zyKsw78{&`PTFABfcr=*Jq#<^V+wn`@#r4O6+CoCwH%GmVe}L6=wR)MKfvOqCd@+Np z!J)2)2((QzSZG;FXY_Gf9=~N1bxFbbeAB71!$)WpBAb4zLt@6IsP4?}$?WE&1^=)u z;)Q8leE(vM?Ih(P<uJV0pS|%PGB>y?lJiXVOvOAmMX9wW9bK{EDZ<U6dUVsX{N~<r zTC=t%eIu$S<u5>3XtQbd<sY(lrtA7qv~$ScoaY|8b<>jbEN$~5a^p)Dwt;$r>@eWu zWR`81t5t>qHi)Uu^Gv4&*o0hi;|iCZ3X$Zcfh9J_ySsyw*YppsmTqNnO(Fakbxbso zdj-}l80ldFt`}W1V}(vTc4<%>M;GL7myKo2p~c%w+agm_38}c$$~u{)$9<*QRTMHt z)AbkTbhk@woC5C1-twRvy0OxQJlv5RdDVEw3GIzer2XsQMnBM*$Z)+pcT;X)c?T*w zaOSWGyd~|%%_dg(nHY%i>c}7IkRi{;eUlL`0{h!<x8n-C@6~h{o2j$syF@1nMskK- z8IzmPL{`{~&p91?@2|4q!}V6TC@d=$O`cCn`KY5j%c(FR;LUFeSQo80|6wG|&sW@0 zVSj%gTa))O$Dd5_i`?y`Yo)@hMqviIKU=_gsY*GY46HU;p@&QMyV(xzqE9*;8O9aG zRdt*kAoe#>oZP7C>@t(?8x0>bsQs^8+W+i+-c#vs?(CXMnGW19qz5=D9^A<L<xVnO z)<Q0Wq-kv&(GNpiZ46le>7vzpX;|G1r#EQh7T9;jSC1#vDJ$#(N|;Na3d;Fr=GqX4 z0;fr^_6aU}j*e@Kth+Qr3z-3eF#f2Q7C|rcbeNr1J<;b6%^!4ZC@t9Bb}s(VBa(Pu zDc3zZeMB4iha+oX06jPR=Ih(ny#DV65devWq>kE##TKhlrq>5K9mO*FguYnR-<>yE zv-4xu48TdDY&k*+uZ$otwpR%H3%G7=<d_P3mIY<&%#q=zq2vEBQUYOsHA!vD|44jR zvi$X4L%Jm}LW4qO##J!M=yc#6bB+8y@BX5$IYnVd;m@XidHYOz9(&6QqlYw=Q?;cN zia^v)K*eSw_ju@dx(aQ%{)9X|7u4pE9_S681*~V|#U4MO&awq%DZbKTLy2t$0aWql zYCje2bDvE^S-Pr~;HIJY_{My5$A*(QT&B{R6xIAlj7d0uveMgd@)D7Q4-4K5Td3@^ zjdbIxJI+}9I0C5kIKva}hJ63D+}OL}*m&5@;hNsFP%3r}2K7nG(vl5--9mScf&9YR z#R;xkyvLh>VnU+30jSXFV4<)NEnREDFReu=^%{IdFD|%aKb+$@tzlW8DO>Q6FMaOT z!~II}E6h@<5M1W<@q-=jbbdGm##&BD1N9HtUXFw@LPrdQsyvS~9zY*c{~l=$x3{=p zrql0;DpahHo+vU!0EoXl=?w#gBkYq;q}S>38MdY77a97s4Xq8UCx(5sV!xcP5ia96 z^33^@iYv?53%KX53LIO!F%HwO(64YWd96pL_n55gG%Lfl3=GRQtZirumEGUvHe*t1 zvWX5qROG`&Gfn?7f278v;u@|OK<%yzWz&WjHNd2Y<{t>xFyDQf^^5wA;qB1;zb};k zWGW2YdZ0A=_1e+Xe$CrSMf1IqdQNEf!N+}{6Cd4H>|&o`1;9j#(yKeH-f=}(&_85~ z_YoTN2jo&C=PHEEi8v`s!GX)ApNiK9@bZ`@w=6#n&}jklUjSBp_gyQt5LW1PGG1$K zYHraIdp(`u!;PGwQW42B`KPP^PVIhplyH(7187B%LriV@FcXOM%%Q3A|B$sGJ2EOR zTjm(yCCsRB!L*ett(LS}OwWG365+W`dp0}f@?S$^{_U!nIsEgXqUgSmBFGHsvb**V znF&SzwA$XG@qNHgMGMIdT271YD#QSB<a(gPNCb|f^S+0<B=8!>9@{N1{Xf>g47%O4 zubs&@J?CGYgpPac{KwVTCKCM+>XZeIr01+@J|7rf-!4coI$Q+nqR2C)FQ*9)m(CPM z_?N4u-Ax?xqN{@gpvChUG2357a;}l{PG8d}rRykNBJ~;%{)pzZMDqG24sm>ti;b@P zH;m`MA%6btWBvd0XGQ_rBTyx@cE%>Yp&{1Q@7?>)`3vb2NCi-ibEERR>7#bh<JD`Q zE2~zMhB$vZ#`LpZ!zLUDny;swT-wC^8S!C(`);**d_Q}eQAMimz2x#tutXn@NvpHG zZfVi@*6}gDxp<rPU19M>r|yi)?w|J{?3+w0CAsr1eEzi54v*P^a?KH#M&&2K(pkH} z+v<Uo*X);gMdXYuv&eu-m?7O<uckc#FY+dQTBdYzIakeFS{!q7sBl6qK4TuCHhDC` zY*qM$JvLybMX9D}+jt*TV2xc?Vf&h;?esFbO0G)Xzv)j6kNl6<`pF<N%HP80emJ&P zqCEr;V}$g)e-M8x{Wj<$I;*mJ11m9*-ceaRs}TCA(L{jG<_~l1%&BpyO*t5ruhoHQ zZydIk#u_Dkkhj+rz^3Kf7h*Fqwf2|BXYWuq(%+onD#h1M#GZ@Zzsp7Mm`Cp&rL@Sn zaO&VKAf?PgveimsJ`$sIVocU0SF2l63-8`g1A+V()XelPnZ+Lu@g%CM2lzp4Tuzu8 z@6307uTOcZ%4Gog?G|#^*LEO?lgQp7*oK@pMI#2^@TEU_-*t2J#bdwK2BAg7#65tq zAnESER$Wew<#lU|#@7Tr=IE?J>#4oN#+eE)Fjc19W9>zi_X+e@Fv7R53t+99f%edd zbZY6WRX-EGBBDp5^hi)wARYAC)AFrJj0Wm(`|llB`-WystptO6>BQd=PlF-l`qYje zH-t6x<JVi`Jn-Hz1?K?mg@oc-wBMw*)YvFoBgU<9S73N+P--5#pyC7N=&w&2yH>)% zt43W>V0TAd&)HdM%{rEKpp)x!At|X~ap4~_+YSE(e*<%wTV@#bSEA9ZWJO*r~A zD-!~9xSxz(=SzRc)fao^#=aEZx?cE+SRW|tLxm$B40a{(gL(!<fLcxYCRXHID_U&F zMdbC$7*K}(b~wUXo<k~rMx@dJD4UA5beKmf3x8_84hVmEujM4FUhH;-gB4oxLVolt z+qp@j5hlawJP=p0nZ8(zt%tstzMOx00DWg>qHM%#bedbSE%z?c={VCtzaF_$mms}m zALViMRxlz4zei1qHg1?gEIu@VyPC5>O4eKgN_a8x=d?4Pi?qN4%`6Hqbn7S$D7vw& zdqpwPDpxb?wA}72@Qs+;l@!q((f`C|s|gYRSq8gxJs)5I&GYqtx@?8|BRP{2CSzCu z?#TFDZmw2dye$p!DOfgNHgD9dEHt}&U?mvQir>3U3bKo_#CVR$Ik1@SRwYaGV6M%i z`8UMip@M6Ntvm9@^<?>9`7~F@<=E+kek$8V**20M*S*?GD%|Onzx$DFP-@%%Kek-` zKel}Hj(swEjZaWf!@zm%Xssa|!Z&tE1cTLN6zZP7)Zf){*vxu3DFx21bMjw;2e^m4 zG{(3O{kQh+JRHidVF0+2gd&w>i|0X<7&2qY)`sjwjHThxG%*+xW*7{UJy|9SB}^(? zSrTI%6r#<(Od%RmWS>bG>-*h$zW4o}<-4Bmd*ADNukZWgp38O3IL>|MoZo%UZRXr( z`7DHj8jdDx#Tc*ZEBl!R|BXxa<szy!{w)oUsBRA_wV)H>zzSPJHO9qLL09g{#y>_N z<jhA-SU7i65eD{UPIZS?`d9kur~A7LuaiXNE{I!QhXS>b4AjEaWmz#i_19XMVdF(J z&K~jD-q>N^;|)pEuDmgE@ML0xqW1dXf9bMN7KrCbDNob%Gv=Y0I($hAe;hV+%Rb0B zQCF#OxF`#lPjhf_rhXde_^+kh=RHKlhrlhn3J2!k4b)Pq^RuBhrT5qD!yFt964sOo zhvF~_%|UuIFSae8b2gd_>-{9zR}0ze4rdKnAdApxYEE1|G|lrh%{u#K*qpvN3paCG zH~d0*ukxWD(=<`^kvlgc!UM(+FpE8+<Cu_Lo|PES2U9C{*|__q(E~Gb#E>m*?vn$> zl!p$~;gS$fq(>d9It6)>lgwk+sS8w`Sh)~h_|slHeaV6LXPA{wJ<2p2#%fBH#>#Ap zVkM#{Fd(V&ww@C&xh3r+TR&oSuVN=YQ^#73RJcFw@L?C=pO%w|&4u1VT$}=}4+{*h z-aBXEbEGA1;gXNTiclO;XH?8tS>R$1OzhldEs^_0@2a3jbIk@>Fu&&VKn3OCqh_A+ z;M;qWgIv`q-DUWM;1gA4eTDLDsi@oRGncZ?&<vA1tBw?!7$^l@$tTKoF*=E2JW&nT zJ7Q%`B-d-(_6S<~hl|yOcse<-)1u3Daw_`q>qi>DM4y3c`m~HB!Gfk7y9>X6otvfV z95^c1^7gKRVM1BYPD??L#B3&H=S0O#gbOF;Y-L52ShNE~*7hdpnO_IP@w9EvpqY5` zh@+HN-W?U%mv1*#=GxWf(wQ3)Yvx@v%(f0J-fi1V092#D?P@))OTk3LO}Bse36sP> zA&T*Q%(-Rstj1DYBJMpCzf$1UU$U4>S<iq;R|3m6yQK`P5Wjq@SeXS<ycp0_5?iAX zKjW4v@Kz~MpAOYnoV)tK;nL~md+J#pLNP1O8Cfv4N?9(U4ga#&wEAh{7kRUjgA(@Z z$N8tJZ2_j8n5Y(N!3Q);ZQvQAz4WmDU8H%ZuJHp-xWcVdebX>GOUZ$uqqU*6R{IJ@ zmG@Yja@y7p9jlMiM^)9F{ux;e*FKOB1@?3EbEppn79sDRE7`rLa}Xhy$hBzg>HSwj z5C6LN`G57-+?po^aIS&_GW2U}veyZ`Ot%|rd(IiV7LaH3bn(opjvm<!ZUp683XCMi zsclI%66f)I^j?_$`Wgimv)Vnrv0QAk=ok*!?H;rgPsJsUJNCg2i;Us76?zmz9vten z_hQA&SVBV%sbO<DF=ne57TK(D+dWdBaMF_<V;<PB#|7*(=GJ^Jfv*M`y=V{7#rnRA zYg<?=;~OhC$`&$(Ea)VU+PGbgT`EUEcb<OD*Zx6pZggv1TBGy+Zlb(ruxGYYQBh9Y zTf`ms7U8=WcHhTID~{3{7PA|wG3t%OlF{g&sC4QXYOUf`$D_q?V25_;6o1klqSylu z>7B3;dEB6V(M+Md#^a<dpN|=tihO@jqQUx-Lw^bR;Q6}lqu&$5opIYD*Jh5Y`1^h5 zvK<lJ9O1W~39W_(oF7%{Oy9;ODN?QQc4UEX^-aWc(r&C9hdUqkI*?|Z>)o|hpdC<s zX^(X4m~>K+LBc_)3RcJT+x)K;Z{kxmDoSTt?e?AlCOWB`<a1=3G!4oIKS~LhiMp^7 z;!3Zkmc|kpo>ls5Zra6Zi}<QwN_hSLWV@lpk39-qD7^H2k&zJxCzt2H)Kx~0?m4OU zE{tw)+IjD)>;$m7rqEpR__K=SG36^)lWC@it4T{Uh!$!w!N7tO=X10R;SqXxRr0D{ zUFPjHU#G^L49O#zcjpZbD#dW5t|qX{MlWdi14GN+$YeNL2qmAdmiDW(Sq4VSP)`A~ z(H|rZ|8$$g{C576yzTm9eOVqZp{GEr`dXz}4J_hLD+lHtbCc9BP!S52w-(EKFpr*= zyUTT^yCq~>7k_#5R(Q&JVdwe5Q%R@dB+q8s?)ybil8eXeVn;J&H!y?y@Fxt?{$$PQ zjvbYjwPV;+*cu`#@aK#64KI+N?$VT)>PqhqWZ7h!MO-xk?p-d;r_<MO(@YLMVSW8d zf0=f!>ySo?#7>d;Z<O9p5%^*(u&6dL9E^88rUzKQ<b@3pA7|4|^I-_>CtVtvs@a}g z7Lwb|Gu)-Klh1#{B?U(j)V28p?6?;mf^8CvEfR1k>)4ibJy#gZd$ewOF8#BC+iB4_ z{NK35ISqEP-Y{*LELz}==7FEi-;B%3H2z{z6v-mZ=rH=aZaO(~5??2;?6}4!7dM9S zo9p>j5>&E{b=im0vv{2yGFI`#Pc%jt1Leqx*~e<RanmD~>BSd0PF86zYXYt#6Mm{M zk9Oxv;F`CyXdtX&m{ZQ`EcmHzd`YbIeiwMpQOKhRC;js^l_vgIOja)2HpCncsfb#& z<j_sKUCj{CiSw4qqZfa!{-(_hoVk95rV-&6f$V@$!O9}{mHN^EbP#k^*6otFVY%YB z67NhNG)F(g>;xx=S>$QiiO1+Pi5_=y*+zR7Oc)rGw|PE8xtCW^Wc4A~JmNgdw)Mus zxyqWc(g5`#ggLkVzG;E1CLsH{?i&Z5b*ikL49ts)#XIaDJ!^aFkymM?9Fp#BL2O`A zMiC8B^}FAHt)N3N_~6G-P4Tp3XFUz=9S4y?^&&TJtWX+5fh{=H9-hwo`t<rt+L(&v z`0XsSTGC!=#}9b8b@3Kp-Mf-49OK<Ap_UF2j@<pkCL8I2Ai`9u4<*-lZF{Z3mLnb; z>g<37xp*l5xXDx5l3QE!J%yHXI@aee=1o(#Im>h|%!zqSNVQWRdsr*Io8+_av)Q3n z{pjfjhR{HU`-=Ic5ev3p+G4>Bld<iwoX+#F27Q!wy(2<gE(39+XU}o1N>y&eMc+c4 zYoIR0?BG^7;kVLp0roFmr>aN;#%KCr4O<3^V=oVoKfrc)&w9a&-W{$zyqt7_D9xPP zLYQk7hgFw{C^V;gMa@jle%k%2r1bWKthIw#eYf08f$EgiH@$FM^mssYq3!g{BZ(xG z&wdx_*mb3TDui!>UVo?yKXOE?q`dNW%ftbm{<H5;Cf`3xH`3tGv&6b+r`dy}Ar+N* zFM>VyrOrMz<u=X;uv~CqMx{`qW11*i?FSJijJHK5V^w8gW;Awe%G!Ni=gTliOMy4+ z<6grmmT?5l3{!&EEbYK3b{~{hQI$~Y$@O`u(=zbJd86BIe^AT4e2?@i33(w8B$S+N zwC9K1-W}$UU)k238*y3lVZ~f0sxcBm8$YJZz#NL9^e}Pt&QhTJ;xH7r5d`$scyvfQ zO{U{>rulLPUlsUlt$8wCIi6%mIs23~K7(Mqhw9jSDbJM$UapGXwj;5reVlu}YZ=}^ zkMz95hR>WtJ(zr@0xc4<(7ZX=pm^n%25qSo@|(29+_Jbcto|gXl)NmJj>|j+ImFnv z^;|TMP^IY;_M%RROREd7`Qu@WnbnvrH<Anc$3-T^1Fq4u8I^rlsNS*R=8q274@HXz zNbn4uRGR8=oF{!q<V;Y?W?rr&wDip>v=(>OuGsNTuNT=Xgw4(^kOe(!+6$h1v{0Uz zc61sl9AbL^jcdYgLke9}oWcqo^-p^|ksg(pwiDisP8vCZbQLgEI59Gw{#Ab~N4@EI z#|s2M0_atpb*m1yO-C!=d^J*k)0fjRb-@6YKia@K9D*iE255A;3>lTa;ZDdtU%H%r zZ_%))kitOJ%{w~X>k8DGe}^QUA1T6#ht_@~;H7sDejUKi*6OwOCgj&8-j(kS_1p=? z$RHY`JyX_GFGX+e!&8Y4;2&~qdVI0vW;-|61FiQ$@A?`(04tP{qWqWI(B4?X&&&?B zgmvRk;Hn>eq+r#UXwHA1dsp?^)g#hdF>LINFw^NH%I>o}e`*lXSLKYDf}i4omO-XE zGu)6N6iX3WvwHYoVA$D(<TiZg+Ib&=eT)W2H!}3Cl-1%BRzhwL8jJT-i9Jlny?(qx zzl#nNdRZi3${J~bM8RtWDV}*l&K^Qo%@3D^c~2lEqgvfy-=+TDeKCZ98RhIrGe{KC zmXRjR32#~U`Xu#vKC#olVBEQsp}c*hDRh4i&WV&Ip@WYso%}3xmt3uFkPv9q6fEV! zkWB9n3(WSY$qj=shtW$lUIzpDUz|+nlq@)~f%kh+f3P1IaPB|fTC<pWC<)Dz_Z~N> z6Ce0a=hftKyxwZR3I!NtB-#XwLsRP|F+}>PMbgfMu^UXwc!N|Ug2CM<j`Dfejc52E zH-Jg-lXk~ZW67zmVJ4B-+pAyrT1|~3?BW*5x0**-<f&Z`cR{9|gB-^p85_2<DPxp_ zx+3|6hNg7l3LkkDYfLknI&+h8S*g#8PJUCi=EU4ZLa^|&Ne?)X=G{{RQMHbvV_PJ5 zi&__sUGl%F&Y?T8@){|uNP>V#=Rw0{Puw8~(TA_zIh1nJ=dm%;f-ororor{gDe_hV z4nz7mxh-&E>dQuqJZZ>c!UV-)T2t4vvEHMxJ&l?w>C+iRG9fI*W}P9IAP)?ahox+k zuqy4k%0o0}H&#~P3g^^#4_3IpPyIe|{?$_JCv|j$VQ)iudpxe8be%FjAKFo-)$y?- zsC3o9VFYa;P#z);?<t;!6x#Nmo!#qgc6NHlf+Rig@i6dx;Julza<TUf<dR+2TvGM4 z63_>5C0Ng;>7ZC`=fVuH?X&88=TpDP5l&o}{TZ3T?k?aEJ%R7W`bP+3v*V35{bhNc zOMHG9d~WlznHRpo&zjuV$0y+W;u8bwF)bsaQ{p2rC0-bO{{3%qh-WR4im%)pJ6L`M zGNZLwNW4ii5}%2*?5FOpr`Gl`;nM1AP01&msifzrj_W0@4f{L?8e;GQN>a|<JF;(L zQe;tQzlo*gnMQwsVL9%1bgk<p`v;9J6hGWGEYbO9W&V9Ek3ExGmc16#MMI+RPabc% zwVvvgyI+`3E_VK>3C@j)(4PoRFIOxhvPXagk~KA#G?PasyBU7+&-{mW-{f1#famak zbBTqgCzb$xCGR0I_}T;^i(dVaV5r86Nb;UrJDdX%Ym~-1cw1ZLz0!@bnLEohZU+`h zGS-ybN`R?;6?G*O!~5t~Q481Fv^1IsN!NT|_^q#P;Op4w%5WEUK+|fSLeolHv$)3N zv^4Vy&Oq2hYzKK9(M}z0b2DS_ihRvzb6#zt+g+}vR_xNNdro4SM}$*bIRU3=^w8r9 z@kKa^Iw6yao&i4RMd5AqGBwxCtR~4-ezyo*ofE_A#+rradQARgmPB81!a`2VJ+Z8_ z2Nn`~A~>rTR*Yj7C}L}<GInuE&cz9F4YCKOP=@wAD^PIy)hoXD`hLs&iyo|xPG{Jn zO(SuRC2_c2dzj9h3$LEnRg}wiM4wzUt!tGo3gV5?_4F&cc&sE+*CKE5k=LBYL#(9M zbA~Ok@tsw7l~wqD$BGo@ob(VdAu9)kDfTd$>_%q~)M}cCVo$$Xo5&I=>$6!Tvw5$N zcjDb~nZ{O$?GmxdEN-%rd>!v>+eu6whs+3Q9@#Tl;Vj)iC#sF|)%P+j&dc?8e~Dcm z@tFtKl+igsmt$ixztk;7<BL?@oQ?OwYca3CIq*xqp}*^kk|Ug}8w#A$*Z@X?P2);^ z?E~eeHe~*UFyA23AJ=|zv<_~`)@#qsc6MoFWcoI0_3oIN{n<+YVq(|B3bk3!*Y&#y zJjI~`9vi~!)R<r-wEL}+XhhbD_Y;#-<Sz)#Y2YUE=sk!KS&-0V)GL$x{LTy(Mdmvy zI~yJ>>|E_EwQA-bl>C<AB0@klhsu=JJ8AI->N3lPI+p2$1hbQstdXelkNZc)quW2a z9u2DI9z)JrS}~n%Si`Mwj`1PteP?&a;)44Ygr)S5*?YWMr=Ffe;&_i38Dw5$VPmKi zVIqRYo~_F>dE|H!y(p#8&OGQR`0aRNrd8-dN<OgI9QPWY%^Rz{2FwQ!QmORZ7ySKe zGkNcW`=5h|xykOt(*eL5<0sgd@hF&+g^HfyfWC$)yY$$nDkH5aYnphuOF1#?5U_m& z$sTh6O}aGSP1h!le=ETi!&?XHD<2p>8g>t|XfNWT4U(`PkGq$*Ykt`xE2sZv-b!L3 zjUr6*`Lz6<veP3SyJ)zA_&8Y;^|Zou&rRZ^4hZG#jWVXR5FxJ7VE<rimT33o{zANf zt7n1zi4%8zQ53v8wPgI+vywHJ=uLh5b*AS<y<*R(_Pjzbh8eb(9LQ&ItyqAOSy7a? zc7<JELb~s<xZ+>VigU;s;ZDq1SHdzIB4L@>4dId91Z%}{x~>61<w2z{Z$`B>oU&x- z@s%VDQ#Q3%&SCM!VZ7gm9ZnyXi_){Y)4h}2SWUh@EXC%H*-%0^>?T5T^vlF5R(GvO z%JG@{MVoI(r`7pyh_Q?M>p~>CUu+!eaeXnb0@M0AY%h1uyQ3r5ig_C=(u*2qL`PkO zJMMdQp^s<Yw!1k5Ymn$Y!-qY&T4o%p3<K_bqjzyPpL0K6USpZ*DjyH*E%a?p|0+)i zd?~!HkrvVFEZO(nAP)E}@LlRS!frcNLp&wpfV$U)X#BytDqt=uClg&rbh1!r3i6M7 zJmDz*QNBN$RN%C{?dR~VMv-6025&Oi53PFV>Sc&}l(U_9rCR0foFRk>X8ZYbcg_k- zb#B;B*0kg!S<`7~*L?HtmJ3d;-j2VV)w2US5B$0oq#%sKEK#;f90{rOTH8<8J|Ss+ z7mBD(0oJ7AJ332KDk8ug`l0!=&SuJH#@8;QB+80UO0NffmlpA;Tp4c?+ReinD+9jg zpncqUGV&92L}PEO?RdBE@=CwU^Lb!zgGfhz%9F1HIdzM7C61<!?W9HJ_-Y8Qd&(}N zy6_l*=jn;DB@>!8_};WzmOI%D2eETL%XR_Jp>&!oqkt$<Oh8@?|B5g-dMJ6eKii43 z*4TKTqktbJaS=kTc6c1*?Ju4itxf9w_TikPsYG?koh?q%W&SZwI020Vvr(f`M`l}Q zF-E~DfqT`CA2VuD3i#@2uo!v^!7_-UGzKk2Qs?xQ3NDM@Y)<fcLmE)g1C~#Ft~%N8 zB1uFQ4|4+SD|=wLa3ys5V0`{LvlZNvk_R5cTR62vgnL%qSXc;mvoK^J^)>PJOrG<q z)|;%LpuUh`(|&yg;%QdhyBgTyEk@>6Y=v(6ZRZP>>Zr4}<a|l|N^j`l@;;Zv#7?5g z_J}8Kk0u6)seTuYu_-FVX^{nKnh2!jiLw*0vjb~m%Di(y=Pg2TZRlg$PMtL50rK0; zbJ|B}XdXV=Lqjv-c5ydZggkH&S;Y^^UU|R&MZ1<YuP#0N-+XrtMacJPZ3-f<$>#o4 z7^uAHqA8*K&L?BBSjQB&I|sChiGjR$FJ<Tx<-_s)HJCd3z|J%t)8%gcPSxyt?n@;` z|I=c*N=h$J+X46BNen5qUC7tiXUkO|#*p#jRG$I6yQ8E%9I|DfF47g9<A655LhZrK z)^}d6Is$J`S`3TYIcQuL1p9Y?KnBwX1wa8%02BZPKmkwy6aWQ40Z;%G00lq+PyiGF z1wa8%02BZPKmkwy6aWQ40Z;%G00lq+PyiGF1wa8%02BZPKmkwy6aWQ40Z;%G00lq+ zPyiGF1wa8%02BZPKmkwy6aWQ40Z;%G00lq+PyiGF1wa8%02BZPKmkwy6aWQ40Z;%G z00lq+PyiGF1wa8%02BZPKmkwy6aWQ40Z;%G00lq+PyiGF1wa8%02KItD<JZ>5Bw<a z%YHatlq*JN^Ck9@hYY`#jH=9!7rMIq5F@k~4&^HYG4gW7q0XR?*vlw>h&jsJ4d*Tc zQ|H&$=l}I^enN)Q=VMf8mpW8aO%ta1Ox0SI>y)3mfSwsrmK!M`fV6pf)>kDhG%_sQ zOdl>I%EcATFZtiSz4mY4{zBkYlnmswE6&vm>&6c`=jw*?lTlLzqF8Uf_usSpBjg`> zHbY<blW|g0+l(cncI?+D^<ST$n@<RS$gc_iNRJ<K8jJVF$v}UX;^xu+Nbxk*8;A17 z`N{l9?6*hrL#$DLSiCP1$QS=6n7!2{4-^vjpTDTe{K&;-%D@khe_tS(zZU>vjl}_~ zGOGL#3)E$_>nSWj#%Z%`ni^Uv+Umzt)wQ(LVKOjnsEV2<6hJ+ub!;>1zG%$<F6wWE zHgo>x^8DcVr^@rg@t-Wu?@I9d(*3bKe;M_+<=M=~pUa~Ggj)Yo<$?V;;{X2qY@Uff zmuIsr{&VHg{1?jem*~H*Z+{u}zs?WA7j=ansQfT~)qgx>G+;2GI$x3bN0=Ibzxj~y z{xwYfn3lRaP~<;^K{fsmPeV%`3Ii&@Z{q=BFfE|*{3c9IRbB0vHc%!05C%Q=`(xFB zrlz6(hhu>-pvC?ESRhPG6}UeAHoeU-ZJ?3=K1@wj`%m%I)K&kKo*L}81~^|=v=_>k z|Hp;I<cy4yVubEHczBkt#NIDms$^9n>#)q9gMcPvjm6?*HZPn&U9mw2p*G=xli`PR X^~L=-6+jWyG>;wQmzOuRGUERaKW&U> literal 0 HcmV?d00001 From e3dd1863a95ded44a68b2c5d3222f8208eb95f01 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:16:57 +0100 Subject: [PATCH 307/898] completely reworked the OCRmyPDF parser. --- paperless.conf.example | 4 + src/paperless/settings.py | 8 + src/paperless_tesseract/parsers.py | 294 +++++++++++++++++------------ 3 files changed, 190 insertions(+), 116 deletions(-) diff --git a/paperless.conf.example b/paperless.conf.example index 652a741b0..9c799b083 100644 --- a/paperless.conf.example +++ b/paperless.conf.example @@ -41,6 +41,10 @@ #PAPERLESS_OCR_OUTPUT_TYPE=pdfa #PAPERLESS_OCR_PAGES=1 #PAPERLESS_OCR_IMAGE_DPI=300 +#PAPERLESS_OCR_CLEAN=clean +#PAPERLESS_OCR_DESKEW=false +#PAPERLESS_OCR_ROTATE_PAGES=false +#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=10 #PAPERLESS_OCR_USER_ARGS={} #PAPERLESS_CONVERT_MEMORY_LIMIT=0 #PAPERLESS_CONVERT_TMPDIR=/var/tmp/paperless diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 42ddec88d..abfb1afba 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -449,6 +449,14 @@ OCR_MODE = os.getenv("PAPERLESS_OCR_MODE", "skip") OCR_IMAGE_DPI = os.getenv("PAPERLESS_OCR_IMAGE_DPI") +OCR_CLEAN = os.getenv("PAPERLESS_OCR_CLEAN", "clean") + +OCR_DESKEW = __get_boolean("PAPERLESS_OCR_DESKEW") + +OCR_ROTATE_PAGES = __get_boolean("PAPERLESS_OCR_ROTATE_PAGES") + +OCR_ROTATE_PAGES_THRESHOLD = float(os.getenv("PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD", 10.0)) + OCR_USER_ARGS = os.getenv("PAPERLESS_OCR_USER_ARGS", "{}") # GNUPG needs a home directory for some reason diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 78c335ac3..dac364447 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -9,6 +9,10 @@ from documents.parsers import DocumentParser, ParseError, \ make_thumbnail_from_pdf +class NoTextFoundException(Exception): + pass + + class RasterisedDocumentParser(DocumentParser): """ This parser uses Tesseract to try and get some text out of a rasterised @@ -18,12 +22,13 @@ class RasterisedDocumentParser(DocumentParser): logging_name = "paperless.parsing.tesseract" def extract_metadata(self, document_path, mime_type): - import pikepdf - - namespace_pattern = re.compile(r"\{(.*)\}(.*)") result = [] if mime_type == 'application/pdf': + import pikepdf + + namespace_pattern = re.compile(r"\{(.*)\}(.*)") + pdf = pikepdf.open(document_path) meta = pdf.open_metadata() for key, value in meta.items(): @@ -88,125 +93,199 @@ class RasterisedDocumentParser(DocumentParser): f"Error while calculating DPI for image {image}: {e}") return None + def extract_text(self, sidecar_file, pdf_file): + if sidecar_file and os.path.isfile(sidecar_file): + with open(sidecar_file, "r") as f: + text = f.read() + + if "[OCR skipped on page" not in text: + # This happens when there's already text in the input file. + # The sidecar file will only contain text for OCR'ed pages. + self.log("debug", "Using text from sidecar file") + return text + else: + self.log("debug", "Incomplete sidecar file: discarding.") + + # no success with the sidecar file, try PDF + + if not os.path.isfile(pdf_file): + return None + + from pdfminer.high_level import extract_text + from pdfminer.pdftypes import PDFException + + try: + text = extract_text(pdf_file) + stripped = strip_excess_whitespace(text) + self.log("debug", f"Extracted text from PDF file {pdf_file}") + return stripped + except PDFException: + # probably not a PDF file. + return None + + def construct_ocrmypdf_parameters(self, + input_file, + mime_type, + output_file, + sidecar_file, + safe_fallback=False): + ocrmypdf_args = { + 'input_file': input_file, + 'output_file': output_file, + # need to use threads, since this will be run in daemonized + # processes by django-q. + 'use_threads': True, + 'jobs': settings.THREADS_PER_WORKER, + 'language': settings.OCR_LANGUAGE, + 'output_type': settings.OCR_OUTPUT_TYPE, + 'progress_bar': False + } + + if settings.OCR_MODE == 'force' or safe_fallback: + ocrmypdf_args['force_ocr'] = True + elif settings.OCR_MODE in ['skip', 'skip_noarchive']: + ocrmypdf_args['skip_text'] = True + elif settings.OCR_MODE == 'redo': + ocrmypdf_args['redo_ocr'] = True + else: + raise ParseError( + f"Invalid ocr mode: {settings.OCR_MODE}") + + if settings.OCR_CLEAN == 'clean': + ocrmypdf_args['clean'] = True + elif settings.OCR_CLEAN == 'clean-final': + ocrmypdf_args['clean_final'] = True + + if settings.OCR_DESKEW: + ocrmypdf_args['deskew'] = True + + if settings.OCR_ROTATE_PAGES: + ocrmypdf_args['rotate_pages'] = True + ocrmypdf_args['rotate_pages_threshold'] = settings.OCR_ROTATE_PAGES_THRESHOLD # NOQA: E501 + + if settings.OCR_PAGES > 0: + ocrmypdf_args['pages'] = f"1-{settings.OCR_PAGES}" + else: + # sidecar is incompatible with pages + ocrmypdf_args['sidecar'] = sidecar_file + + if self.is_image(mime_type): + dpi = self.get_dpi(input_file) + a4_dpi = self.calculate_a4_dpi(input_file) + if dpi: + self.log( + "debug", + f"Detected DPI for image {input_file}: {dpi}" + ) + ocrmypdf_args['image_dpi'] = dpi + elif settings.OCR_IMAGE_DPI: + ocrmypdf_args['image_dpi'] = settings.OCR_IMAGE_DPI + elif a4_dpi: + ocrmypdf_args['image_dpi'] = a4_dpi + else: + raise ParseError( + f"Cannot produce archive PDF for image {input_file}, " + f"no DPI information is present in this image and " + f"OCR_IMAGE_DPI is not set.") + + if settings.OCR_USER_ARGS and not safe_fallback: + try: + user_args = json.loads(settings.OCR_USER_ARGS) + ocrmypdf_args = {**ocrmypdf_args, **user_args} + except Exception as e: + self.log( + "warning", + f"There is an issue with PAPERLESS_OCR_USER_ARGS, so " + f"they will not be used. Error: {e}") + + return ocrmypdf_args + def parse(self, document_path, mime_type, file_name=None): - import ocrmypdf - from ocrmypdf import InputFileError, EncryptedPdfError + # This forces tesseract to use one core per page. + os.environ['OMP_THREAD_LIMIT'] = "1" - mode = settings.OCR_MODE + text_original = self.extract_text(None, document_path) + original_has_text = text_original and len(text_original) > 50 - text_original = get_text_from_pdf(document_path) - has_text = text_original and len(text_original) > 50 - - if mode == "skip_noarchive" and has_text: + if settings.OCR_MODE == "skip_noarchive" and original_has_text: self.log("debug", "Document has text, skipping OCRmyPDF entirely.") self.text = text_original return - if mode in ['skip', 'skip_noarchive'] and not has_text: - # upgrade to redo, since there appears to be no text in the - # document. This happens to some weird encrypted documents or - # documents with failed OCR attempts for which OCRmyPDF will - # still report that there actually is text in them. - self.log("debug", - "No text was found in the document and skip is " - "specified. Upgrading OCR mode to redo.") - mode = "redo" + import ocrmypdf + from ocrmypdf import InputFileError, EncryptedPdfError archive_path = os.path.join(self.tempdir, "archive.pdf") + sidecar_file = os.path.join(self.tempdir, "sidecar.txt") - ocr_args = { - 'input_file': document_path, - 'output_file': archive_path, - 'use_threads': True, - 'jobs': settings.THREADS_PER_WORKER, - 'language': settings.OCR_LANGUAGE, - 'output_type': settings.OCR_OUTPUT_TYPE, - 'progress_bar': False, - 'clean': True - } - - if settings.OCR_PAGES > 0: - ocr_args['pages'] = f"1-{settings.OCR_PAGES}" - - # Mode selection. - - if mode in ['skip', 'skip_noarchive']: - ocr_args['skip_text'] = True - elif mode == 'redo': - ocr_args['redo_ocr'] = True - elif mode == 'force': - ocr_args['force_ocr'] = True - else: - raise ParseError( - f"Invalid ocr mode: {mode}") - - if self.is_image(mime_type): - dpi = self.get_dpi(document_path) - a4_dpi = self.calculate_a4_dpi(document_path) - if dpi: - self.log( - "debug", - f"Detected DPI for image {document_path}: {dpi}" - ) - ocr_args['image_dpi'] = dpi - elif settings.OCR_IMAGE_DPI: - ocr_args['image_dpi'] = settings.OCR_IMAGE_DPI - elif a4_dpi: - ocr_args['image_dpi'] = a4_dpi - else: - raise ParseError( - f"Cannot produce archive PDF for image {document_path}, " - f"no DPI information is present in this image and " - f"OCR_IMAGE_DPI is not set.") - - if settings.OCR_USER_ARGS: - try: - user_args = json.loads(settings.OCR_USER_ARGS) - ocr_args = {**ocr_args, **user_args} - except Exception as e: - self.log( - "warning", - f"There is an issue with PAPERLESS_OCR_USER_ARGS, so " - f"they will not be used: {e}") - - # This forces tesseract to use one core per page. - os.environ['OMP_THREAD_LIMIT'] = "1" + args = self.construct_ocrmypdf_parameters( + document_path, mime_type, archive_path, sidecar_file) try: - self.log("debug", - f"Calling OCRmyPDF with {str(ocr_args)}") - ocrmypdf.ocr(**ocr_args) - # success! announce results + self.log("debug", f"Calling OCRmyPDF with args: {args}") + ocrmypdf.ocr(**args) + self.archive_path = archive_path - self.text = get_text_from_pdf(archive_path) + self.text = self.extract_text(sidecar_file, archive_path) - except (InputFileError, EncryptedPdfError) as e: - - self.log("debug", - f"Encountered an error: {e}. Trying to use text from " - f"original.") - # This happens with some PDFs when used with the redo_ocr option. - # This is not the end of the world, we'll just use what we already - # have in the document. - self.text = text_original - # Also, no archived file. if not self.text: - # However, if we don't have anything, fail: + raise NoTextFoundException( + "No text was found in the original document") + except EncryptedPdfError: + self.log("warning", + "This file is encrypted, OCR is impossible. Using " + "any text present in the original file.") + if original_has_text: + self.text = text_original + except (NoTextFoundException, InputFileError) as e: + self.log("exception", + f"Encountered the following error while running OCR, " + f"attempting force OCR to get the text.") + + archive_path_fallback = os.path.join( + self.tempdir, "archive-fallback.pdf") + sidecar_file_fallback = os.path.join( + self.tempdir, "sidecar-fallback.txt") + + # Attempt to run OCR with safe settings. + + args = self.construct_ocrmypdf_parameters( + document_path, mime_type, + archive_path_fallback, sidecar_file_fallback, + safe_fallback=True + ) + + try: + self.log("debug", + f"Fallback: Calling OCRmyPDF with args: {args}") + ocrmypdf.ocr(**args) + + # Don't return the archived file here, since this file + # is bigger and blurry due to --force-ocr. + + self.text = self.extract_text( + sidecar_file_fallback, archive_path_fallback) + + except Exception as e: + # If this fails, we have a serious issue at hand. raise ParseError(f"{e.__class__.__name__}: {str(e)}") except Exception as e: # Anything else is probably serious. raise ParseError(f"{e.__class__.__name__}: {str(e)}") + # As a last resort, if we still don't have any text for any reason, + # try to extract the text from the original document. if not self.text: - # This may happen for files that don't have any text. - self.log( - 'warning', - f"Document {document_path} does not have any text. " - f"This is probably an error or you tried to add an image " - f"without text, or something is wrong with this document.") - self.text = "" + if original_has_text: + self.text = text_original + else: + self.log( + "warning", + f"No text was found in {document_path}, the content will " + f"be empty." + ) def strip_excess_whitespace(text): @@ -222,20 +301,3 @@ def strip_excess_whitespace(text): # TODO: this needs a rework return no_trailing_whitespace.strip() - -def get_text_from_pdf(pdf_file): - import pdftotext - - if not os.path.isfile(pdf_file): - return None - - with open(pdf_file, "rb") as f: - try: - pdf = pdftotext.PDF(f) - except pdftotext.Error: - # might not be a PDF file - return None - - text = "\n".join(pdf) - - return strip_excess_whitespace(text) From 5d87b7e6a33a0dfc724f4b9a187db7f98c530817 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:17:12 +0100 Subject: [PATCH 308/898] changelog --- docs/changelog.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index ad45becab..37bea9f49 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,20 @@ Changelog ********* +paperless-ng 1.2.0 +################## + +* Changes to the OCRmyPDF integration + + * Added support for deskewing and automatic rotation of incorrectly rotated pages. + * Better support for encrypted files. + * Better support for various other PDF files: Paperless will now attempt to force OCR with safe options when OCR fails with the configured options. + * Added an explicit option to skip cleaning with ``unpaper``. + +* Download multiple selected document. + +* Paperless no longer depends on ``libpoppler-cpp-dev``. + paperless-ng 1.1.4 ################## From 26c65b29d5349a4897eb04eae1e4275c6f080390 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:18:34 +0100 Subject: [PATCH 309/898] tests --- .../tests/samples/multi-page-mixed.pdf | Bin 0 -> 160736 bytes src/paperless_tesseract/tests/test_parser.py | 64 +++++++++++++++--- 2 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 src/paperless_tesseract/tests/samples/multi-page-mixed.pdf diff --git a/src/paperless_tesseract/tests/samples/multi-page-mixed.pdf b/src/paperless_tesseract/tests/samples/multi-page-mixed.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cca8db4194d87b305497cd214b9c4f6afbf64ee6 GIT binary patch literal 160736 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 PJWm=tIk||ODE$8bgkwAq literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 4fd314667..b64abb382 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -7,7 +7,7 @@ from django.test import TestCase, override_settings from documents.parsers import ParseError, run_convert from documents.tests.utils import DirectoriesMixin -from paperless_tesseract.parsers import RasterisedDocumentParser, get_text_from_pdf, strip_excess_whitespace +from paperless_tesseract.parsers import RasterisedDocumentParser, strip_excess_whitespace image_to_string_calls = [] @@ -38,7 +38,12 @@ class TestParser(DirectoriesMixin, TestCase): def assertContainsStrings(self, content, strings): # Asserts that all strings appear in content, in the given order. - indices = [content.index(s) for s in strings] + indices = [] + for s in strings: + if s in content: + indices.append(content.index(s)) + else: + self.fail(f"'{s}' is not in '{content}'") self.assertListEqual(indices, sorted(indices)) text_cases = [ @@ -69,7 +74,8 @@ class TestParser(DirectoriesMixin, TestCase): SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples") def test_get_text_from_pdf(self): - text = get_text_from_pdf(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf')) + parser = RasterisedDocumentParser(uuid.uuid4()) + text = parser.extract_text(None, os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf')) self.assertContainsStrings(text.strip(), ["This is a test document."]) @@ -129,15 +135,21 @@ class TestParser(DirectoriesMixin, TestCase): self.assertIsNone(parser.archive_path) self.assertContainsStrings(parser.get_text(), ["Please enter your name in here:", "This is a PDF document with a form."]) - @override_settings(OCR_MODE="redo") - @mock.patch("paperless_tesseract.parsers.get_text_from_pdf", lambda _: None) - def test_with_form_error_notext(self): + @override_settings(OCR_MODE="skip") + def test_encrypted(self): parser = RasterisedDocumentParser(None) - def f(): - parser.parse(os.path.join(self.SAMPLE_FILES, "with-form.pdf"), "application/pdf") + parser.parse(os.path.join(self.SAMPLE_FILES, "encrypted.pdf"), "application/pdf") - self.assertRaises(ParseError, f) + self.assertIsNone(parser.archive_path) + self.assertContainsStrings(parser.get_text(), ["This is a digitally signed PDF, created with Acrobat Pro for the Paperless project to enable", "automated testing of signed/encrypted PDFs"]) + + @override_settings(OCR_MODE="redo") + def test_with_form_error_notext(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "with-form.pdf"), "application/pdf") + + self.assertContainsStrings(parser.get_text(), ["Please enter your name in here:", "This is a PDF document with a form."]) @override_settings(OCR_MODE="force") def test_with_form_force(self): @@ -253,9 +265,41 @@ class TestParser(DirectoriesMixin, TestCase): def test_skip_noarchive_notext(self): parser = RasterisedDocumentParser(None) parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-images.pdf"), "application/pdf") - self.assertTrue(os.path.join(parser.archive_path)) + self.assertTrue(os.path.isfile(parser.archive_path)) self.assertContainsStrings(parser.get_text().lower(), ["page 1", "page 2", "page 3"]) + @override_settings(OCR_MODE="skip") + def test_multi_page_mixed(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-mixed.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertContainsStrings(parser.get_text().lower(), ["page 1", "page 2", "page 3", "page 4", "page 5", "page 6"]) + + with open(os.path.join(parser.tempdir, "sidecar.txt")) as f: + sidecar = f.read() + + self.assertIn("[OCR skipped on page 4]", sidecar) + self.assertIn("[OCR skipped on page 5]", sidecar) + self.assertIn("[OCR skipped on page 6]", sidecar) + + @override_settings(OCR_MODE="skip_noarchive") + def test_multi_page_mixed_no_archive(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-mixed.pdf"), "application/pdf") + self.assertIsNone(parser.archive_path) + self.assertContainsStrings(parser.get_text().lower(), ["page 4", "page 5", "page 6"]) + + @override_settings(OCR_MODE="skip", OCR_ROTATE_PAGES=True) + def test_rotate(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "rotated.pdf"), "application/pdf") + self.assertContainsStrings(parser.get_text(), [ + "This is the text that appears on the first page. It’s a lot of text.", + "Even if the pages are rotated, OCRmyPDF still gets the job done.", + "This is a really weird file with lots of nonsense text.", + "If you read this, it’s your own fault. Also check your screen orientation." + ]) + class TestParserFileTypes(DirectoriesMixin, TestCase): From 3cfd97aa08d736e0b8d6d02855551e02ca9842f1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:21:43 +0100 Subject: [PATCH 310/898] pycodestyle --- src/documents/views.py | 5 ++++- src/paperless_tesseract/parsers.py | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index d886324ae..f5ddd88ee 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -639,7 +639,10 @@ class BulkDownloadView(APIView): content = serializer.validated_data.get('content') os.makedirs(settings.SCRATCH_DIR, exist_ok=True) - temp = tempfile.NamedTemporaryFile(dir=settings.SCRATCH_DIR, suffix="-compressed-archive", delete=False) + temp = tempfile.NamedTemporaryFile( + dir=settings.SCRATCH_DIR, + suffix="-compressed-archive", + delete=False) if content == 'both': strategy_class = OriginalAndArchiveStrategy diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index dac364447..883402414 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -300,4 +300,3 @@ def strip_excess_whitespace(text): # TODO: this needs a rework return no_trailing_whitespace.strip() - From dcbc2674e26e3459d4a05fc5a4f11059ccf74c71 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:23:01 +0100 Subject: [PATCH 311/898] documentation for the new configuration options --- docs/configuration.rst | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 95914e836..f9c0877f7 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -202,7 +202,6 @@ Paperless uses `OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/>`_ for performing OCR on documents and images. Paperless uses sensible defaults for most settings, but all of them can be configured to your needs. - PAPERLESS_OCR_LANGUAGE=<lang> Customize the language that paperless will attempt to use when parsing documents. @@ -245,6 +244,39 @@ PAPERLESS_OCR_MODE=<mode> The default is ``skip``, which only performs OCR when necessary and always creates archived documents. +PAPERLESS_OCR_CLEAN=<mode> + Tells paperless to use ``unpaper`` to clean any input document before + sending it to tesseract. This uses more resources, but generally results + in better OCR results. The following modes are available: + + * ``clean``: Apply unpaper. + * ``clean-final``: Apply unpaper, and use the cleaned images to build the + output file instead of the original images. + * ``none``: Do not apply unpaper. + + Defaults to ``clean``. + +PAPERLESS_OCR_DESKEW=<bool> + Tells paperless to correct skewing (slight rotation of input images Mostly + due to improper scanning) + + Defaults to ``false``, which disables this feature. + + +PAPERLESS_OCR_ROTATE_PAGES=<bool> + Tells paperless to correct page rotation (90°, 180° and 270° rotation). + + Defaults to ``false``, which disables this feature. + + +PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num> + Adjust the threshold for automatic page rotation by ``PAPERLESS_OCR_ROTATE_PAGES``. + This is an arbitrary value reported by tesseract. "15" is a very conservative value, + whereas "2" is a very aggressive option and will often result correctly rotated pages + being rotated as well. + + Defaults to "10". + PAPERLESS_OCR_OUTPUT_TYPE=<type> Specify the the type of PDF documents that paperless should produce. @@ -271,7 +303,6 @@ PAPERLESS_OCR_PAGES=<num> Defaults to 0, which disables this feature and always uses all pages. - PAPERLESS_OCR_IMAGE_DPI=<num> Paperless will OCR any images you put into the system and convert them into PDF documents. This is useful if your scanner produces images. @@ -282,8 +313,8 @@ PAPERLESS_OCR_IMAGE_DPI=<num> Set this to the DPI your scanner produces images at. - Default is none, which causes paperless to fail if no DPI information is - present in an image. + Default is none, which will automatically calculate image DPI so that + the produced PDF documents are A4 sized. PAPERLESS_OCR_USER_ARGS=<json> From bcad9c2ce4ec19baef5007856e7b264cf91fb5a9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 00:24:33 +0100 Subject: [PATCH 312/898] update dependencies --- .github/workflows/ci.yml | 6 ++--- Dockerfile | 1 - Pipfile | 2 +- Pipfile.lock | 48 +++++++++++++++++----------------------- ansible/tasks/main.yml | 1 - docs/setup.rst | 5 ++--- requirements.txt | 13 +++++------ 7 files changed, 31 insertions(+), 45 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08630e176..87b527cad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,8 +35,6 @@ jobs: - name: Install dependencies run: | - sudo apt-get update -qq - sudo apt-get install -qq --no-install-recommends libpoppler-cpp-dev pip install --upgrade pipenv pipenv install --system --dev --ignore-pipfile - @@ -81,7 +79,7 @@ jobs: name: Prepare tests run: | sudo apt-get update -qq - sudo apt-get install -qq --no-install-recommends libpoppler-cpp-dev unpaper tesseract-ocr imagemagick ghostscript optipng + sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript optipng pip install --upgrade pipenv pipenv install --system --dev --ignore-pipfile - @@ -140,7 +138,7 @@ jobs: name: Install dependencies run: | sudo apt-get update -qq - sudo apt-get install -qq --no-install-recommends libpoppler-cpp-dev gettext liblept5 + sudo apt-get install -qq --no-install-recommends gettext liblept5 pip3 install -r requirements.txt - name: Download frontend artifact diff --git a/Dockerfile b/Dockerfile index 57f96c39f..c94b7030f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -67,7 +67,6 @@ COPY requirements.txt ../ RUN apt-get update \ && apt-get -y --no-install-recommends install \ build-essential \ - libpoppler-cpp-dev \ libpq-dev \ libqpdf-dev \ && python3 -m pip install --upgrade --no-cache-dir supervisor \ diff --git a/Pipfile b/Pipfile index 8bacba7a4..29a91ece3 100644 --- a/Pipfile +++ b/Pipfile @@ -23,7 +23,6 @@ imap-tools = "*" langdetect = "*" # numpy 1.20.0 drops python 3.6 support numpy = "~=1.19.5" -pdftotext = "*" pathvalidate = "*" # pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202 pillow = "==8.1.0" @@ -55,6 +54,7 @@ concurrent-log-handler = "*" uvloop = "~=0.14.0" # TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/) cryptography = "~=3.3.2" +"pdfminer.six" = "*" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index f75949d20..eefaeeecd 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "bd8b69979d91f4d8c52cac127c891d750c52959807220a98dcf74fed126bfa26" + "sha256": "71959eb287fc97969263be5e3a1b1f4f369b7a5ace85bd1947a25b9b92e17e8a" }, "pipfile-spec": 6, "requires": {}, @@ -227,11 +227,11 @@ }, "django": { "hashes": [ - "sha256:169e2e7b4839a7910b393eec127fd7cbae62e80fa55f89c6510426abf673fe5f", - "sha256:c6c0462b8b361f8691171af1fb87eceb4442da28477e12200c40420176206ba7" + "sha256:32ce792ee9b6a0cbbec340123e229ac9f765dff8c2a4ae9247a14b2ba3a365a7", + "sha256:baf099db36ad31f970775d0be5587cc58a6256a6771a44eb795b554d45f211b8" ], "index": "pypi", - "version": "==3.1.6" + "version": "==3.1.7" }, "django-cors-headers": { "hashes": [ @@ -610,15 +610,8 @@ "sha256:b9aac0ebeafb21c08bf65f2039f4b2c5f78a3449d0a41df711d72445649e952a", "sha256:d78877ba8d8bf957f3bb636c4f73f4f6f30f56c461993877ac22c39c20837509" ], - "markers": "python_version >= '3.4'", - "version": "==20201018" - }, - "pdftotext": { - "hashes": [ - "sha256:98aeb8b07a4127e1a30223bd933ef080bbd29aa88f801717ca6c5618380b8aa6" - ], "index": "pypi", - "version": "==2.1.5" + "version": "==20201018" }, "pikepdf": { "hashes": [ @@ -1104,11 +1097,11 @@ }, "tqdm": { "hashes": [ - "sha256:11d544652edbdfc9cc41aa4c8a5c166513e279f3f2d9f1a9e1c89935b51de6ff", - "sha256:a89be573bfddb81bb0b395a416d5e55e3ecc73ce95a368a4f6360bedea33195e" + "sha256:65185676e9fdf20d154cffd1c5de8e39ef9696ff7e59fe0156b1b08e468736af", + "sha256:70657337ec104eb4f3fb229285358f23f045433f6aea26846cdd55f0fd68945c" ], "index": "pypi", - "version": "==4.56.2" + "version": "==4.57.0" }, "twisted": { "extras": [ @@ -1146,11 +1139,11 @@ }, "txaio": { "hashes": [ - "sha256:1488d31d564a116538cc1265ac3f7979fb6223bb5a9e9f1479436ee2c17d8549", - "sha256:a8676d6c68aea1f0e2548c4afdb8e6253873af3bc2659bb5bcd9f39dff7ff90f" + "sha256:7d6f89745680233f1c4db9ddb748df5e88d2a7a37962be174c0fd04c8dba1dc8", + "sha256:c16b55f9a67b2419cfdf8846576e2ec9ba94fe6978a83080c352a80db31c93fb" ], "markers": "python_version >= '3.6'", - "version": "==20.12.1" + "version": "==21.2.1" }, "tzlocal": { "hashes": [ @@ -1172,11 +1165,11 @@ "standard" ], "hashes": [ - "sha256:1079c50a06f6338095b4f203e7861dbff318dde5f22f3a324fc6e94c7654164c", - "sha256:ef1e0bb5f7941c6fe324e06443ddac0331e1632a776175f87891c7bd02694355" + "sha256:3292251b3c7978e8e4a7868f4baf7f7f7bb7e40c759ecc125c37e99cdea34202", + "sha256:7587f7b08bd1efd2b9bad809a3d333e972f1d11af8a5e52a9371ee3a5de71524" ], "index": "pypi", - "version": "==0.13.3" + "version": "==0.13.4" }, "uvloop": { "hashes": [ @@ -1220,11 +1213,10 @@ }, "watchgod": { "hashes": [ - "sha256:59700dab7445aa8e6067a5b94f37bae90fc367554549b1ed2e9d0f4f38a90d2a", - "sha256:5fb60afa9558b79736395db1cb60ad3ed59df5c2f507a3ff729220cf1251ffdc", - "sha256:e9cca0ab9c63f17fc85df9fd8bd18156ff00aff04ebe5976cee473f4968c6858" + "sha256:48140d62b0ebe9dd9cf8381337f06351e1f2e70b2203fa9c6eff4e572ca84f29", + "sha256:d6c1ea21df37847ac0537ca0d6c2f4cdf513562e95f77bb93abbcf05573407b7" ], - "version": "==0.6" + "version": "==0.7" }, "wcwidth": { "hashes": [ @@ -1498,11 +1490,11 @@ }, "faker": { "hashes": [ - "sha256:bf2a9b3f8d00a5dada61fc4a3f80fe0d6795c7f02a138a7d2ef2db5817c7d017", - "sha256:d4aecdb877519d06c2fdc01ffc5ecf70658981acf5e13cd07ded9892994ef5c6" + "sha256:31a58ec5a8f4672f24da3b5ddea02c82a712de1de3179b432948e5c34d787aca", + "sha256:aadfe0efe11ecbbbc5b3b0b0fab050c2acbd2d8e5201769546d43d236bfff663" ], "markers": "python_version >= '3.6'", - "version": "==6.1.1" + "version": "==6.4.1" }, "filelock": { "hashes": [ diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index 517831994..bfaf8df17 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -15,7 +15,6 @@ - imagemagick - optipng - gnupg - - libpoppler-cpp-dev - libpq-dev - libmagic-dev - mime-support diff --git a/docs/setup.rst b/docs/setup.rst index 8ebb6f83c..f6d6b47bc 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -280,7 +280,6 @@ writing. Windows is not and will never be supported. * ``imagemagick`` >= 6 for PDF conversion * ``optipng`` for optimizing thumbnails * ``gnupg`` for handling encrypted documents - * ``libpoppler-cpp-dev`` for PDF to text conversion * ``libpq-dev`` for PostgreSQL * ``libmagic-dev`` for mime type detection * ``mime-support`` for mime type detection @@ -354,7 +353,7 @@ writing. Windows is not and will never be supported. .. code:: shell-session sudo -Hu paperless pip3 install -r requirements.txt - + This will install all python dependencies in the home directory of the new paperless user. @@ -803,7 +802,7 @@ Using nginx as a reverse proxy ############################## If you want to expose paperless to the internet, you should hide it behind a -reverse proxy with SSL enabled. +reverse proxy with SSL enabled. In addition to the usual configuration for SSL, the following configuration is required for paperless to operate: diff --git a/requirements.txt b/requirements.txt index 7100ba953..2df1b29ae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ django-extensions==3.1.1 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 -django==3.1.6 +django==3.1.7 djangorestframework==3.12.2 filelock==3.0.12 fuzzywuzzy[speedup]==0.18.0 @@ -55,8 +55,7 @@ msgpack==1.0.2 numpy==1.19.5 ocrmypdf==11.6.2 pathvalidate==2.3.2 -pdfminer.six==20201018; python_version >= '3.4' -pdftotext==2.1.5 +pdfminer.six==20201018 pikepdf==2.5.2 pillow==8.1.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' @@ -86,15 +85,15 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.56.2 +tqdm==4.57.0 twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -txaio==20.12.1; python_version >= '3.6' +txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' -uvicorn[standard]==0.13.3 +uvicorn[standard]==0.13.4 uvloop==0.14.0 watchdog==1.0.2 -watchgod==0.6 +watchgod==0.7 wcwidth==0.2.5 websockets==8.1 whitenoise==5.2.0 From f7c7a39287fc6c1bd2fe85027699ee248a7c00b8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 01:29:55 +0100 Subject: [PATCH 313/898] documentation --- docs/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index f9c0877f7..a558ea79d 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -257,7 +257,7 @@ PAPERLESS_OCR_CLEAN=<mode> Defaults to ``clean``. PAPERLESS_OCR_DESKEW=<bool> - Tells paperless to correct skewing (slight rotation of input images Mostly + Tells paperless to correct skewing (slight rotation of input images mainly due to improper scanning) Defaults to ``false``, which disables this feature. From 8e26092266468845c77c544fdef33db0c2b0a963 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 01:30:03 +0100 Subject: [PATCH 314/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 51beb3fba..d170a0f02 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.1.5", + version: "1.2.0", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index b21fef930..09ac5f672 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 1, 5) +__version__ = (1, 2, 0) From 96c0890df835f8ac490a7e9a4895437f8a46028b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 01:48:14 +0100 Subject: [PATCH 315/898] changelog --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 37bea9f49..721997323 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -17,6 +17,10 @@ paperless-ng 1.2.0 * Download multiple selected document. +* The document list now remembers the current page. + +* Improved responsiveness when switching between saved views and the document list. + * Paperless no longer depends on ``libpoppler-cpp-dev``. paperless-ng 1.1.4 From 692557a3641b4de21612043f4c93018c697d2c03 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 12:14:54 +0100 Subject: [PATCH 316/898] increased default delay when waiting for file changes with polling --- docs/changelog.rst | 18 +++++++++++------- .../management/commands/document_consumer.py | 6 +++--- .../tests/test_management_consumer.py | 7 +++---- src/paperless/settings.py | 6 ++++++ 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 721997323..f5a353adb 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -21,15 +21,12 @@ paperless-ng 1.2.0 * Improved responsiveness when switching between saved views and the document list. +* Increased the default wait time when observing files in the consumption folder + with polling from 1 to 5 seconds. This will decrease the likelihood of paperless + consuming partially written files. + * Paperless no longer depends on ``libpoppler-cpp-dev``. -paperless-ng 1.1.4 -################## - -* Added English (GB) locale. - -* Added ISO-8601 date display option. - .. note:: Some packages that paperless depends on are slowly dropping Python 3.6 @@ -41,6 +38,13 @@ paperless-ng 1.1.4 If using docker, this does not affect you. +paperless-ng 1.1.4 +################## + +* Added English (GB) locale. + +* Added ISO-8601 date display option. + paperless-ng 1.1.3 ################## diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index aaa644891..b2549efbf 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -68,10 +68,10 @@ def _consume(filepath): logger.exception("Error while consuming document") -def _consume_wait_unmodified(file, num_tries=20, wait_time=1): +def _consume_wait_unmodified(file): mtime = -1 current_try = 0 - while current_try < num_tries: + while current_try < settings.CONSUMER_POLLING_RETRY_COUNT: try: new_mtime = os.stat(file).st_mtime except FileNotFoundError: @@ -82,7 +82,7 @@ def _consume_wait_unmodified(file, num_tries=20, wait_time=1): _consume(file) return mtime = new_mtime - sleep(wait_time) + sleep(settings.CONSUMER_POLLING_DELAY) current_try += 1 logger.error(f"Timeout while waiting on file {file} to remain unmodified.") diff --git a/src/documents/tests/test_management_consumer.py b/src/documents/tests/test_management_consumer.py index b6a61a167..2111705e0 100644 --- a/src/documents/tests/test_management_consumer.py +++ b/src/documents/tests/test_management_consumer.py @@ -203,7 +203,7 @@ class TestConsumer(DirectoriesMixin, ConsumerMixin, TransactionTestCase): self.assertRaises(CommandError, call_command, 'document_consumer', '--oneshot') -@override_settings(CONSUMER_POLLING=1) +@override_settings(CONSUMER_POLLING=1, CONSUMER_POLLING_DELAY=1, CONSUMER_POLLING_RETRY_COUNT=20) class TestConsumerPolling(TestConsumer): # just do all the tests with polling pass @@ -215,8 +215,7 @@ class TestConsumerRecursive(TestConsumer): pass -@override_settings(CONSUMER_RECURSIVE=True) -@override_settings(CONSUMER_POLLING=1) +@override_settings(CONSUMER_RECURSIVE=True, CONSUMER_POLLING=1, CONSUMER_POLLING_DELAY=1, CONSUMER_POLLING_RETRY_COUNT=20) class TestConsumerRecursivePolling(TestConsumer): # just do all the tests with polling and recursive pass @@ -257,6 +256,6 @@ class TestConsumerTags(DirectoriesMixin, ConsumerMixin, TransactionTestCase): # their order. self.assertCountEqual(kwargs["override_tag_ids"], tag_ids) - @override_settings(CONSUMER_POLLING=1) + @override_settings(CONSUMER_POLLING=1, CONSUMER_POLLING_DELAY=1, CONSUMER_POLLING_RETRY_COUNT=20) def test_consume_file_with_path_tags_polling(self): self.test_consume_file_with_path_tags() diff --git a/src/paperless/settings.py b/src/paperless/settings.py index abfb1afba..b0ce32305 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -425,6 +425,12 @@ THREADS_PER_WORKER = os.getenv("PAPERLESS_THREADS_PER_WORKER", default_threads_p CONSUMER_POLLING = int(os.getenv("PAPERLESS_CONSUMER_POLLING", 0)) +CONSUMER_POLLING_DELAY = int(os.getenv("PAPERLESS_CONSUMER_POLLING_DELAY", 5)) + +CONSUMER_POLLING_RETRY_COUNT = int( + os.getenv("PAPERLESS_CONSUMER_POLLING_RETRY_COUNT", 30 / CONSUMER_POLLING_DELAY) +) + CONSUMER_DELETE_DUPLICATES = __get_boolean("PAPERLESS_CONSUMER_DELETE_DUPLICATES") CONSUMER_RECURSIVE = __get_boolean("PAPERLESS_CONSUMER_RECURSIVE") From b95753110014a105c00f895e27af5efbf6959061 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 12:43:55 +0100 Subject: [PATCH 317/898] run the polling file change checks on individual threads to speed up queueing of new files --- .../management/commands/document_consumer.py | 11 +++++++++-- src/paperless/settings.py | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index b2549efbf..969941af9 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -1,6 +1,7 @@ import logging import os from pathlib import Path +from threading import Thread from time import sleep from django.conf import settings @@ -57,6 +58,7 @@ def _consume(filepath): logger.exception("Error creating tags from path") try: + logger.info(f"Adding {filepath} to the task queue.") async_task("documents.tasks.consume_file", filepath, override_tag_ids=tag_ids if tag_ids else None, @@ -69,6 +71,7 @@ def _consume(filepath): def _consume_wait_unmodified(file): + logger.debug(f"Waiting for file {file} to remain unmodified") mtime = -1 current_try = 0 while current_try < settings.CONSUMER_POLLING_RETRY_COUNT: @@ -91,10 +94,14 @@ def _consume_wait_unmodified(file): class Handler(FileSystemEventHandler): def on_created(self, event): - _consume_wait_unmodified(event.src_path) + Thread( + target=_consume_wait_unmodified, args=(event.src_path,) + ).start() def on_moved(self, event): - _consume_wait_unmodified(event.dest_path) + Thread( + target=_consume_wait_unmodified, args=(event.dest_path,) + ).start() class Command(BaseCommand): diff --git a/src/paperless/settings.py b/src/paperless/settings.py index b0ce32305..bf9fcd459 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -428,7 +428,7 @@ CONSUMER_POLLING = int(os.getenv("PAPERLESS_CONSUMER_POLLING", 0)) CONSUMER_POLLING_DELAY = int(os.getenv("PAPERLESS_CONSUMER_POLLING_DELAY", 5)) CONSUMER_POLLING_RETRY_COUNT = int( - os.getenv("PAPERLESS_CONSUMER_POLLING_RETRY_COUNT", 30 / CONSUMER_POLLING_DELAY) + os.getenv("PAPERLESS_CONSUMER_POLLING_RETRY_COUNT", 5) ) CONSUMER_DELETE_DUPLICATES = __get_boolean("PAPERLESS_CONSUMER_DELETE_DUPLICATES") From f1251b5970181b87269a8132347085225d667346 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 21 Feb 2021 12:12:19 +0000 Subject: [PATCH 318/898] Translate /src-ui/messages.xlf in en_GB translation completed for the source file '/src-ui/messages.xlf' on the 'en_GB' language. --- src-ui/src/locale/messages.en_GB.xlf | 82 +++++++++++++++------------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 14ab56659..f5e711c39 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -59,7 +59,7 @@ </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>View &quot;<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>&quot; saved successfully.</target> + <target>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> @@ -67,7 +67,7 @@ </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>View &quot;<x equiv-text="savedView.name" id="PH"/>&quot; created successfully.</target> + <target>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> @@ -131,7 +131,7 @@ </trans-unit> <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Save &quot;<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <target>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -219,7 +219,7 @@ </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Do you really want to delete document &quot;<x equiv-text="this.document.title" id="PH"/>&quot;?</target> + <target>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> @@ -475,7 +475,7 @@ </trans-unit> <trans-unit datatype="html" id="93754014749412887"> <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Do you really want to delete the tag &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">30</context> @@ -563,7 +563,7 @@ </trans-unit> <trans-unit datatype="html" id="4990731724078522539"> <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Do you really want to delete the document type &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> @@ -587,7 +587,7 @@ </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Saved view &quot;<x equiv-text="savedView.name" id="PH"/>&quot; deleted.</target> + <target>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">67</context> @@ -907,7 +907,7 @@ </trans-unit> <trans-unit datatype="html" id="7427874343955308724"> <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Do you really want to delete the correspondent &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> @@ -1075,7 +1075,7 @@ </trans-unit> <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Did you mean &quot;<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>&quot;?</target> + <target>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> @@ -1400,23 +1400,23 @@ <target>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7894972847287473517"> <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot;</target> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">113</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot; and &quot;<x equiv-text="items[1].name" id="PH_1"/>&quot;</target> + <target>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> @@ -1425,16 +1425,16 @@ <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">117</context> </context-group> <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> </trans-unit> <trans-unit datatype="html" id="1822679894391095557"> <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> and &quot;<x equiv-text="items[items.length - 1].name" id="PH_1"/>&quot;</target> + <target><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">118</context> </context-group> <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> </trans-unit> @@ -1443,15 +1443,15 @@ <target>Confirm tags assignment</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">127</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6619516195038467207"> <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will add the tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1894412783609570695"> @@ -1459,15 +1459,15 @@ <target>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">131</context> + <context context-type="linenumber">132</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7181166515756808573"> <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will remove the tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">134</context> + <context context-type="linenumber">135</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3819792277998068944"> @@ -1475,7 +1475,7 @@ <target>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">137</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2739066218579571288"> @@ -1483,7 +1483,7 @@ <target>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">138</context> + <context context-type="linenumber">139</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2996713129519325161"> @@ -1491,15 +1491,15 @@ <target>Confirm correspondent assignment</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">158</context> + <context context-type="linenumber">159</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6900893559485781849"> <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will assign the correspondent &quot;<x equiv-text="correspondent.name" id="PH"/>&quot; to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">161</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1257522660364398440"> @@ -1507,7 +1507,7 @@ <target>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5393409374423140648"> @@ -1515,15 +1515,15 @@ <target>Confirm document type assignment</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">181</context> + <context context-type="linenumber">182</context> </context-group> </trans-unit> <trans-unit datatype="html" id="332180123895325027"> <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will assign the document type &quot;<x equiv-text="documentType.name" id="PH"/>&quot; to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">183</context> + <context context-type="linenumber">184</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2236642492594872779"> @@ -1531,7 +1531,7 @@ <target>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">185</context> + <context context-type="linenumber">186</context> </context-group> </trans-unit> <trans-unit datatype="html" id="749430623564850405"> @@ -1539,7 +1539,7 @@ <target>Delete confirm</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4303174930844518780"> @@ -1547,7 +1547,7 @@ <target>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">202</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5641451190833696892"> @@ -1555,7 +1555,7 @@ <target>This operation cannot be undone.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">202</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6734339521247847366"> @@ -1563,7 +1563,7 @@ <target>Delete document(s)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> @@ -1590,6 +1590,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Download originals</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> <source>Suggestions:</source> <target>Suggestions:</target> From dab0d947767763538ca67f2deb23b24de34b32da Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 13:35:47 +0100 Subject: [PATCH 319/898] documentation --- docs/changelog.rst | 4 ++-- docs/configuration.rst | 9 +++++++++ docs/setup.rst | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index f5a353adb..57ffbc40d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,12 +10,12 @@ paperless-ng 1.2.0 * Changes to the OCRmyPDF integration - * Added support for deskewing and automatic rotation of incorrectly rotated pages. + * Added support for deskewing and automatic rotation of incorrectly rotated pages. This is disabled by default, see :ref:`configuration-ocr`. * Better support for encrypted files. * Better support for various other PDF files: Paperless will now attempt to force OCR with safe options when OCR fails with the configured options. * Added an explicit option to skip cleaning with ``unpaper``. -* Download multiple selected document. +* Download multiple selected documents as a zip archive. * The document list now remembers the current page. diff --git a/docs/configuration.rst b/docs/configuration.rst index a558ea79d..1c1763392 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -244,6 +244,8 @@ PAPERLESS_OCR_MODE=<mode> The default is ``skip``, which only performs OCR when necessary and always creates archived documents. + Read more about this in the `OCRmyPDF documentation <https://ocrmypdf.readthedocs.io/en/latest/advanced.html#when-ocr-is-skipped>`_. + PAPERLESS_OCR_CLEAN=<mode> Tells paperless to use ``unpaper`` to clean any input document before sending it to tesseract. This uses more resources, but generally results @@ -256,12 +258,19 @@ PAPERLESS_OCR_CLEAN=<mode> Defaults to ``clean``. + .. note:: + + ``clean-final`` is incompatible with ocr mode ``redo``. + PAPERLESS_OCR_DESKEW=<bool> Tells paperless to correct skewing (slight rotation of input images mainly due to improper scanning) Defaults to ``false``, which disables this feature. + .. note:: + + Deskewing is incompatible with ocr mode ``redo``. PAPERLESS_OCR_ROTATE_PAGES=<bool> Tells paperless to correct page rotation (90°, 180° and 270° rotation). diff --git a/docs/setup.rst b/docs/setup.rst index f6d6b47bc..69cb2bc97 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -774,6 +774,9 @@ configuring some options in paperless can help improve performance immensely: your documents before feeding them into paperless. Some scanners are able to do this! You might want to even specify ``skip_noarchive`` to skip archive file generation for already ocr'ed documents entirely. +* If you want to perform OCR on the the device, consider using ``PAPERLESS_OCR_CLEAN=none``. + This will speed up OCR times and use less memory at the expense of slightly worse + OCR results. * Set ``PAPERLESS_OPTIMIZE_THUMBNAILS`` to 'false' if you want faster consumption times. Thumbnails will be about 20% larger. * If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to From 77b11bd27be13b6a5124f47b9043fc840a25d9a0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 13:43:54 +0100 Subject: [PATCH 320/898] documentation on how to build the documentation --- docs/extending.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/extending.rst b/docs/extending.rst index b2ddf3d85..860106258 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -109,6 +109,30 @@ This will build the front end and put it in a location from which the Django ser it as static content. This way, you can verify that authentication is working. +Building the documentation +========================== + +The documentation is built using sphinx. I've configured ReadTheDocs to automatically build +the documentation when changes are pushed. If you want to build the documentation locally, +this is how you do it: + +1. Install python dependencies. + + .. code:: shell-session + + $ cd /path/to/paperless + $ pipenv install --dev + +2. Build the documentation + + .. code:: shell-session + + $ cd /path/to/paperless/docs + $ pipenv run make clean html + +This will build the HTML documentation, and put the resulting files in the ``_build/html`` +directory. + Extending Paperless =================== From 89f1e473171cb8764dc938bc3beb6b2c90227261 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 21 Feb 2021 14:15:43 +0000 Subject: [PATCH 321/898] Apply translations in fr translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'fr' language. --- src/locale/fr/LC_MESSAGES/django.po | 184 +++++++++++++++------------- 1 file changed, 98 insertions(+), 86 deletions(-) diff --git a/src/locale/fr/LC_MESSAGES/django.po b/src/locale/fr/LC_MESSAGES/django.po index e956642d4..244d45fb5 100644 --- a/src/locale/fr/LC_MESSAGES/django.po +++ b/src/locale/fr/LC_MESSAGES/django.po @@ -4,7 +4,7 @@ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # # Translators: -# Jonas Winkler, 2020 +# Jonas Winkler, 2021 # Philmo67, 2021 # #, fuzzy @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-28 22:02+0100\n" -"PO-Revision-Date: 2020-12-30 19:27+0000\n" +"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Philmo67, 2021\n" "Language-Team: French (https://www.transifex.com/paperless/teams/115905/fr/)\n" "MIME-Version: 1.0\n" @@ -26,64 +26,64 @@ msgstr "" msgid "Documents" msgstr "Documents" -#: documents/models.py:33 +#: documents/models.py:32 msgid "Any word" msgstr "Un des mots" -#: documents/models.py:34 +#: documents/models.py:33 msgid "All words" msgstr "Tous les mots" -#: documents/models.py:35 +#: documents/models.py:34 msgid "Exact match" msgstr "Concordance exacte" -#: documents/models.py:36 +#: documents/models.py:35 msgid "Regular expression" msgstr "Expression régulière" -#: documents/models.py:37 +#: documents/models.py:36 msgid "Fuzzy word" msgstr "Mot approximatif" -#: documents/models.py:38 +#: documents/models.py:37 msgid "Automatic" msgstr "Automatique" -#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "nom" -#: documents/models.py:46 +#: documents/models.py:45 msgid "match" msgstr "rapprochement" -#: documents/models.py:50 +#: documents/models.py:49 msgid "matching algorithm" msgstr "algorithme de rapprochement" -#: documents/models.py:56 +#: documents/models.py:55 msgid "is insensitive" msgstr "est insensible à la casse" -#: documents/models.py:75 documents/models.py:135 +#: documents/models.py:74 documents/models.py:134 msgid "correspondent" msgstr "correspondant" -#: documents/models.py:76 +#: documents/models.py:75 msgid "correspondents" msgstr "correspondants" -#: documents/models.py:98 +#: documents/models.py:97 msgid "color" msgstr "couleur" -#: documents/models.py:102 +#: documents/models.py:101 msgid "is inbox tag" msgstr "est une étiquette de boîte de réception" -#: documents/models.py:104 +#: documents/models.py:103 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Marque cette étiquette comme étiquette de boîte de réception : ces " "étiquettes sont affectées à tous les documents nouvellement traités." -#: documents/models.py:109 +#: documents/models.py:108 msgid "tag" msgstr "étiquette" -#: documents/models.py:110 documents/models.py:166 +#: documents/models.py:109 documents/models.py:165 msgid "tags" msgstr "étiquettes" -#: documents/models.py:116 documents/models.py:148 +#: documents/models.py:115 documents/models.py:147 msgid "document type" msgstr "type de document" -#: documents/models.py:117 +#: documents/models.py:116 msgid "document types" msgstr "types de document" -#: documents/models.py:125 +#: documents/models.py:124 msgid "Unencrypted" msgstr "Non chiffré" -#: documents/models.py:126 +#: documents/models.py:125 msgid "Encrypted with GNU Privacy Guard" msgstr "Chiffré avec GNU Privacy Guard" -#: documents/models.py:139 +#: documents/models.py:138 msgid "title" msgstr "titre" -#: documents/models.py:152 +#: documents/models.py:151 msgid "content" msgstr "contenu" -#: documents/models.py:154 +#: documents/models.py:153 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,43 +131,43 @@ msgstr "" "Les données brutes du document, en format texte uniquement. Ce champ est " "principalement utilisé pour la recherche." -#: documents/models.py:159 +#: documents/models.py:158 msgid "mime type" msgstr "type mime" -#: documents/models.py:170 +#: documents/models.py:169 msgid "checksum" msgstr "somme de contrôle" -#: documents/models.py:174 +#: documents/models.py:173 msgid "The checksum of the original document." msgstr "La somme de contrôle du document original." -#: documents/models.py:178 +#: documents/models.py:177 msgid "archive checksum" msgstr "somme de contrôle de l'archive" -#: documents/models.py:183 +#: documents/models.py:182 msgid "The checksum of the archived document." msgstr "La somme de contrôle du document archivé." -#: documents/models.py:187 documents/models.py:330 +#: documents/models.py:186 documents/models.py:342 msgid "created" msgstr "créé le" -#: documents/models.py:191 +#: documents/models.py:190 msgid "modified" msgstr "modifié" -#: documents/models.py:195 +#: documents/models.py:194 msgid "storage type" msgstr "forme d'enregistrement :" -#: documents/models.py:203 +#: documents/models.py:202 msgid "added" msgstr "date d'ajout" -#: documents/models.py:207 +#: documents/models.py:206 msgid "filename" msgstr "nom du fichier" @@ -176,179 +176,187 @@ msgid "Current filename in storage" msgstr "Nom du fichier courant en base de données" #: documents/models.py:216 +msgid "archive filename" +msgstr "nom de fichier de l'archive" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "Nom du fichier d'archive courant en base de données" + +#: documents/models.py:226 msgid "archive serial number" msgstr "numéro de série de l'archive" -#: documents/models.py:221 +#: documents/models.py:231 msgid "The position of this document in your physical document archive." msgstr "" "Le classement de ce document dans votre archive de documents physiques." -#: documents/models.py:227 +#: documents/models.py:237 msgid "document" msgstr "document" -#: documents/models.py:228 +#: documents/models.py:238 msgid "documents" msgstr "documents" -#: documents/models.py:313 +#: documents/models.py:325 msgid "debug" msgstr "débogage" -#: documents/models.py:314 +#: documents/models.py:326 msgid "information" msgstr "information" -#: documents/models.py:315 +#: documents/models.py:327 msgid "warning" msgstr "avertissement" -#: documents/models.py:316 +#: documents/models.py:328 msgid "error" msgstr "erreur" -#: documents/models.py:317 +#: documents/models.py:329 msgid "critical" msgstr "critique" -#: documents/models.py:321 +#: documents/models.py:333 msgid "group" msgstr "groupe" -#: documents/models.py:324 +#: documents/models.py:336 msgid "message" msgstr "message" -#: documents/models.py:327 +#: documents/models.py:339 msgid "level" msgstr "niveau" -#: documents/models.py:334 +#: documents/models.py:346 msgid "log" msgstr "rapport" -#: documents/models.py:335 +#: documents/models.py:347 msgid "logs" msgstr "rapports" -#: documents/models.py:346 documents/models.py:396 +#: documents/models.py:358 documents/models.py:408 msgid "saved view" msgstr "vue enregistrée" -#: documents/models.py:347 +#: documents/models.py:359 msgid "saved views" msgstr "vues enregistrées" -#: documents/models.py:350 +#: documents/models.py:362 msgid "user" msgstr "utilisateur" -#: documents/models.py:356 +#: documents/models.py:368 msgid "show on dashboard" msgstr "montrer sur le tableau de bord" -#: documents/models.py:359 +#: documents/models.py:371 msgid "show in sidebar" msgstr "montrer dans la barre latérale" -#: documents/models.py:363 +#: documents/models.py:375 msgid "sort field" msgstr "champ de tri" -#: documents/models.py:366 +#: documents/models.py:378 msgid "sort reverse" msgstr "tri inverse" -#: documents/models.py:372 +#: documents/models.py:384 msgid "title contains" msgstr "le titre contient" -#: documents/models.py:373 +#: documents/models.py:385 msgid "content contains" msgstr "le contenu contient" -#: documents/models.py:374 +#: documents/models.py:386 msgid "ASN is" msgstr "le NSA est" -#: documents/models.py:375 +#: documents/models.py:387 msgid "correspondent is" msgstr "le correspondant est" -#: documents/models.py:376 +#: documents/models.py:388 msgid "document type is" msgstr "le type de document est" -#: documents/models.py:377 +#: documents/models.py:389 msgid "is in inbox" msgstr "est dans la boîte de réception" -#: documents/models.py:378 +#: documents/models.py:390 msgid "has tag" msgstr "porte l'étiquette" -#: documents/models.py:379 +#: documents/models.py:391 msgid "has any tag" msgstr "porte l'une des étiquettes" -#: documents/models.py:380 +#: documents/models.py:392 msgid "created before" msgstr "créé avant" -#: documents/models.py:381 +#: documents/models.py:393 msgid "created after" msgstr "créé après" -#: documents/models.py:382 +#: documents/models.py:394 msgid "created year is" msgstr "l'année de création est" -#: documents/models.py:383 +#: documents/models.py:395 msgid "created month is" msgstr "le mois de création est" -#: documents/models.py:384 +#: documents/models.py:396 msgid "created day is" msgstr "le jour de création est" -#: documents/models.py:385 +#: documents/models.py:397 msgid "added before" msgstr "ajouté avant" -#: documents/models.py:386 +#: documents/models.py:398 msgid "added after" msgstr "ajouté après" -#: documents/models.py:387 +#: documents/models.py:399 msgid "modified before" msgstr "modifié avant" -#: documents/models.py:388 +#: documents/models.py:400 msgid "modified after" msgstr "modifié après" -#: documents/models.py:389 +#: documents/models.py:401 msgid "does not have tag" msgstr "ne porte pas d'étiquette" -#: documents/models.py:400 +#: documents/models.py:412 msgid "rule type" msgstr "type de règle" -#: documents/models.py:404 +#: documents/models.py:416 msgid "value" msgstr "valeur" -#: documents/models.py:410 +#: documents/models.py:422 msgid "filter rule" msgstr "règle de filtrage" -#: documents/models.py:411 +#: documents/models.py:423 msgid "filter rules" msgstr "règles de filtrage" -#: documents/serialisers.py:383 +#: documents/serialisers.py:370 #, python-format msgid "File type %(type)s not supported" msgstr "Type de fichier %(type)s non pris en charge" @@ -395,19 +403,23 @@ msgstr "Mot de passe" msgid "Sign in" msgstr "S'identifier" -#: paperless/settings.py:286 -msgid "English" -msgstr "Anglais" +#: paperless/settings.py:291 +msgid "English (US)" +msgstr "Anglais (US)" -#: paperless/settings.py:287 +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "Anglais (GB)" + +#: paperless/settings.py:293 msgid "German" msgstr "Allemand" -#: paperless/settings.py:288 +#: paperless/settings.py:294 msgid "Dutch" msgstr "Néerlandais" -#: paperless/settings.py:289 +#: paperless/settings.py:295 msgid "French" msgstr "Français" From 2dd25f4f9d01a9f36b9aa3a1ba1dc7b36938302a Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 21 Feb 2021 14:16:49 +0000 Subject: [PATCH 322/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 128 ++++++++++++++++++------------ 1 file changed, 76 insertions(+), 52 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index 0b7e86165..79045b3b4 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -58,11 +58,11 @@ </context-group> </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.savedView.name" id="PH"/>" saved successfully.</source> - <target>Vue "<x equiv-text="this.list.savedView.name" id="PH"/>" enregistrée avec succès.</target> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>Vue "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" enregistrée avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">109</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> @@ -70,7 +70,7 @@ <target>Vue "<x equiv-text="savedView.name" id="PH"/>" créée avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">130</context> + <context context-type="linenumber">136</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> @@ -129,9 +129,9 @@ <context context-type="linenumber">72</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="72e7d343f9165602cce1ca7faffbc565fd31ef92"> - <source>Save "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Enregistrer "<x equiv-text="{{list.savedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Enregistrer "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -585,14 +585,6 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5ca707824ab93066c7d9b44e1b8bf216725c2c22"> - <source>Filter</source> - <target>Filtrer</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> <target>Vue "<x equiv-text="savedView.name" id="PH"/>" supprimée.</target> @@ -622,7 +614,15 @@ <target>Utiliser le format de date de la langue d'affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +630,7 @@ <target>Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">114</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1234,6 +1234,14 @@ <context context-type="linenumber">46</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Titre : <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> <source>Filter tags</source> <target>Filtrer les étiquettes</target> @@ -1392,7 +1400,7 @@ <target>Une erreur s'est produite lors de l'exécution de l'opération de masse : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7894972847287473517"> @@ -1400,7 +1408,7 @@ <target>"<x equiv-text="items[0].name" id="PH"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">112</context> + <context context-type="linenumber">113</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> @@ -1408,7 +1416,7 @@ <target>"<x equiv-text="items[0].name" id="PH"/>" et "<x equiv-text="items[1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> </trans-unit> @@ -1417,7 +1425,7 @@ <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">116</context> + <context context-type="linenumber">117</context> </context-group> <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> </trans-unit> @@ -1426,7 +1434,7 @@ <target><x equiv-text="list" id="PH"/> et "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">118</context> </context-group> <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> </trans-unit> @@ -1435,7 +1443,7 @@ <target>Confirmer l'affectation des étiquettes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">126</context> + <context context-type="linenumber">127</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6619516195038467207"> @@ -1443,7 +1451,7 @@ <target>Cette action affectera l'étiquette "<x equiv-text="tag.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">130</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1894412783609570695"> @@ -1451,7 +1459,7 @@ <target>Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">131</context> + <context context-type="linenumber">132</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7181166515756808573"> @@ -1459,7 +1467,7 @@ <target>Cette action supprimera l'étiquette "<x equiv-text="tag.name" id="PH"/>" de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">134</context> + <context context-type="linenumber">135</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3819792277998068944"> @@ -1467,7 +1475,7 @@ <target>Cette action supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">137</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2739066218579571288"> @@ -1475,7 +1483,7 @@ <target>Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> et supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de(s) <x equiv-text="this.list.selected.size" id="PH_2"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">138</context> + <context context-type="linenumber">139</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2996713129519325161"> @@ -1483,7 +1491,7 @@ <target>Confirmer l'affectation du correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">158</context> + <context context-type="linenumber">159</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6900893559485781849"> @@ -1491,7 +1499,7 @@ <target>Cette action affectera le correspondant "<x equiv-text="correspondent.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/>document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">160</context> + <context context-type="linenumber">161</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1257522660364398440"> @@ -1499,7 +1507,7 @@ <target>Cette action supprimera le correspondant de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5393409374423140648"> @@ -1507,7 +1515,7 @@ <target>Confirmer l'affectation du type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">181</context> + <context context-type="linenumber">182</context> </context-group> </trans-unit> <trans-unit datatype="html" id="332180123895325027"> @@ -1515,7 +1523,7 @@ <target>Cette action affectera le type de document "<x equiv-text="documentType.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">183</context> + <context context-type="linenumber">184</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2236642492594872779"> @@ -1523,7 +1531,7 @@ <target>Cette action supprimera le type de document de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">185</context> + <context context-type="linenumber">186</context> </context-group> </trans-unit> <trans-unit datatype="html" id="749430623564850405"> @@ -1531,7 +1539,7 @@ <target>Confirmer la suppression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">200</context> + <context context-type="linenumber">201</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4303174930844518780"> @@ -1539,7 +1547,7 @@ <target>Cette action supprimera définitivement <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">201</context> + <context context-type="linenumber">202</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5641451190833696892"> @@ -1547,7 +1555,7 @@ <target>Cette action est irréversible.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">202</context> + <context context-type="linenumber">203</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6734339521247847366"> @@ -1555,7 +1563,7 @@ <target>Supprimer le(s) document(s)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> @@ -1582,6 +1590,14 @@ <context context-type="linenumber">27</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Télécharger les originaux</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> <source>Suggestions:</source> <target>Suggestions : </target> @@ -1614,22 +1630,22 @@ <context context-type="linenumber">1</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="46c8fe557cf52c9389783627d4f85453f4ddb459"> - <source>Documents in inbox: <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documents dans la boîte de réception : <x equiv-text="{{statistics.documents_inbox}}" id="INTERPOLATION"/></target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> - <context context-type="linenumber">3</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="c327c0e67bcac7494dcbaa9afb3b42d5008c6438"> - <source>Total documents: <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></source> - <target>Nombre total de documents : <x equiv-text="{{statistics.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Nombre total de documents : <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documents dans la boîte de réception : <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="6443586946875325554"> <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> <target>Traitement : <x equiv-text="countUploadingAndProcessing" id="PH"/></target> @@ -1848,12 +1864,20 @@ <context context-type="linenumber">82</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>Anglais (GB)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> <source>German</source> <target>Allemand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1861,7 +1885,7 @@ <target>Néerlandais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1869,7 +1893,7 @@ <target>Français</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From 70db00b829903406fd06cd068d512bb8c1e95d1c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 21:36:43 +0100 Subject: [PATCH 323/898] bugfix for tika parser --- src/documents/management/commands/document_archiver.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 297c95121..12aaf1393 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -34,7 +34,10 @@ def handle_document(document_id): parser = parser_class(logging_group=uuid.uuid4()) try: - parser.parse(document.source_path, mime_type) + parser.parse( + document.source_path, + mime_type, + document.get_public_filename()) if parser.get_archive_path(): with transaction.atomic(): From dce65dc0fa3776da58bc55a9d4d92deea71ce357 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 22:19:24 +0100 Subject: [PATCH 324/898] more parameter checking --- src/paperless_tesseract/parsers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 883402414..ba56a19b7 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -153,10 +153,10 @@ class RasterisedDocumentParser(DocumentParser): if settings.OCR_CLEAN == 'clean': ocrmypdf_args['clean'] = True - elif settings.OCR_CLEAN == 'clean-final': + elif settings.OCR_CLEAN == 'clean-final' and not settings.OCR_MODE == 'redo': # NOQA: E501 ocrmypdf_args['clean_final'] = True - if settings.OCR_DESKEW: + if settings.OCR_DESKEW and not settings.OCR_MODE == 'redo': ocrmypdf_args['deskew'] = True if settings.OCR_ROTATE_PAGES: From 725f43fc43193eb873646ba8228d858d76c240c4 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 23:29:52 +0100 Subject: [PATCH 325/898] update thumbnail in archiver, since page rotation might have changed --- src/documents/management/commands/document_archiver.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 12aaf1393..0d3a5e82d 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -39,6 +39,12 @@ def handle_document(document_id): mime_type, document.get_public_filename()) + thumbnail = parser.get_optimised_thumbnail( + document.source_path, + mime_type, + document.get_public_filename() + ) + if parser.get_archive_path(): with transaction.atomic(): with open(parser.get_archive_path(), 'rb') as f: @@ -58,6 +64,7 @@ def handle_document(document_id): create_source_path_directory(document.archive_path) shutil.move(parser.get_archive_path(), document.archive_path) + shutil.move(thumbnail, document.thumbnail_path) with AsyncWriter(index.open_index()) as writer: index.update_document(writer, document) From 3f920a84da8492d94d58be118ddf2fce93f7ab7f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 23:30:14 +0100 Subject: [PATCH 326/898] use archived file for thumbnail, if available --- src/paperless_tesseract/parsers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index ba56a19b7..728c40a56 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -53,7 +53,9 @@ class RasterisedDocumentParser(DocumentParser): def get_thumbnail(self, document_path, mime_type, file_name=None): return make_thumbnail_from_pdf( - document_path, self.tempdir, self.logging_group) + self.archive_path or document_path, + self.tempdir, + self.logging_group) def is_image(self, mime_type): return mime_type in [ From 8dd2e1098bc879ae6ce0eb3810b41caa11dd96f0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 23:39:19 +0100 Subject: [PATCH 327/898] fix up the ocrmypdf parameter construction for clean-final and redo --- src/paperless_tesseract/parsers.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 728c40a56..deadf2234 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -155,8 +155,11 @@ class RasterisedDocumentParser(DocumentParser): if settings.OCR_CLEAN == 'clean': ocrmypdf_args['clean'] = True - elif settings.OCR_CLEAN == 'clean-final' and not settings.OCR_MODE == 'redo': # NOQA: E501 - ocrmypdf_args['clean_final'] = True + elif settings.OCR_CLEAN == 'clean-final': + if settings.OCR_MODE == 'redo': + ocrmypdf_args['clean'] = True + else: + ocrmypdf_args['clean_final'] = True if settings.OCR_DESKEW and not settings.OCR_MODE == 'redo': ocrmypdf_args['deskew'] = True From ca397c56788cf11f7f92a82c5fb1791313873d07 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Feb 2021 23:40:26 +0100 Subject: [PATCH 328/898] enable deskewing and rotation by default --- docs/changelog.rst | 2 +- docs/configuration.rst | 26 ++++++++++++++++---------- paperless.conf.example | 6 +++--- src/paperless/settings.py | 6 +++--- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 57ffbc40d..abe667400 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,7 +10,7 @@ paperless-ng 1.2.0 * Changes to the OCRmyPDF integration - * Added support for deskewing and automatic rotation of incorrectly rotated pages. This is disabled by default, see :ref:`configuration-ocr`. + * Added support for deskewing and automatic rotation of incorrectly rotated pages. This is enabled by default, see :ref:`configuration-ocr`. * Better support for encrypted files. * Better support for various other PDF files: Paperless will now attempt to force OCR with safe options when OCR fails with the configured options. * Added an explicit option to skip cleaning with ``unpaper``. diff --git a/docs/configuration.rst b/docs/configuration.rst index 1c1763392..56537035c 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -260,22 +260,28 @@ PAPERLESS_OCR_CLEAN=<mode> .. note:: - ``clean-final`` is incompatible with ocr mode ``redo``. + ``clean-final`` is incompatible with ocr mode ``redo``. When both + ``clean-final`` and the ocr mode ``redo`` is configured, ``clean`` + is used instead. PAPERLESS_OCR_DESKEW=<bool> Tells paperless to correct skewing (slight rotation of input images mainly due to improper scanning) - Defaults to ``false``, which disables this feature. + Defaults to ``true``, which enables this feature. .. note:: - Deskewing is incompatible with ocr mode ``redo``. + Deskewing is incompatible with ocr mode ``redo``. Deskewing will get + disabled automatically if ``redo`` is used as the ocr mode. PAPERLESS_OCR_ROTATE_PAGES=<bool> Tells paperless to correct page rotation (90°, 180° and 270° rotation). - Defaults to ``false``, which disables this feature. + If you notice that paperless is not rotating pages incorrectly rotated + pages (or vice versa), try adjusting the threshold up or down (see below). + + Defaults to ``true``, which enables this feature. PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num> @@ -284,7 +290,7 @@ PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num> whereas "2" is a very aggressive option and will often result correctly rotated pages being rotated as well. - Defaults to "10". + Defaults to "12". PAPERLESS_OCR_OUTPUT_TYPE=<type> Specify the the type of PDF documents that paperless should produce. @@ -392,7 +398,7 @@ requires are as follows: PAPERLESS_TIKA_ENABLED: 1 PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 - + # ... gotenberg: @@ -622,10 +628,10 @@ USERMAP_UID=<uid> .. code:: shell-session $ id -u - + Paperless will change ownership on its folders to this user, so you need to get this right in order to be able to write to the consumption directory. - + Defaults to 1000. USERMAP_GID=<gid> @@ -635,10 +641,10 @@ USERMAP_GID=<gid> .. code:: shell-session $ id -g - + Paperless will change ownership on its folders to this group, so you need to get this right in order to be able to write to the consumption directory. - + Defaults to 1000. PAPERLESS_OCR_LANGUAGES=<list> diff --git a/paperless.conf.example b/paperless.conf.example index 9c799b083..b1b63879d 100644 --- a/paperless.conf.example +++ b/paperless.conf.example @@ -42,9 +42,9 @@ #PAPERLESS_OCR_PAGES=1 #PAPERLESS_OCR_IMAGE_DPI=300 #PAPERLESS_OCR_CLEAN=clean -#PAPERLESS_OCR_DESKEW=false -#PAPERLESS_OCR_ROTATE_PAGES=false -#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=10 +#PAPERLESS_OCR_DESKEW=true +#PAPERLESS_OCR_ROTATE_PAGES=true +#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=12.0 #PAPERLESS_OCR_USER_ARGS={} #PAPERLESS_CONVERT_MEMORY_LIMIT=0 #PAPERLESS_CONVERT_TMPDIR=/var/tmp/paperless diff --git a/src/paperless/settings.py b/src/paperless/settings.py index bf9fcd459..7c4e36391 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -457,11 +457,11 @@ OCR_IMAGE_DPI = os.getenv("PAPERLESS_OCR_IMAGE_DPI") OCR_CLEAN = os.getenv("PAPERLESS_OCR_CLEAN", "clean") -OCR_DESKEW = __get_boolean("PAPERLESS_OCR_DESKEW") +OCR_DESKEW = __get_boolean("PAPERLESS_OCR_DESKEW", "true") -OCR_ROTATE_PAGES = __get_boolean("PAPERLESS_OCR_ROTATE_PAGES") +OCR_ROTATE_PAGES = __get_boolean("PAPERLESS_OCR_ROTATE_PAGES", "true") -OCR_ROTATE_PAGES_THRESHOLD = float(os.getenv("PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD", 10.0)) +OCR_ROTATE_PAGES_THRESHOLD = float(os.getenv("PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD", 12.0)) OCR_USER_ARGS = os.getenv("PAPERLESS_OCR_USER_ARGS", "{}") From 5c66f489db74d871d720ec90c5f4def3c537abb1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 00:04:44 +0100 Subject: [PATCH 329/898] dropdown menu shadows --- .../document-list/bulk-editor/bulk-editor.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html index 98716e2f9..90cda1224 100644 --- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html +++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -64,7 +64,7 @@ </button> <div class="btn-group" ngbDropdown role="group" aria-label="Button group with nested dropdown"> <button class="btn btn-outline-primary btn-sm dropdown-toggle-split" ngbDropdownToggle></button> - <div class="dropdown-menu" ngbDropdownMenu> + <div class="dropdown-menu shadow" ngbDropdownMenu> <button ngbDropdownItem i18n (click)="downloadSelected('originals')">Download originals</button> </div> </div> From 96088716d95b4001318ebaffb7c7dbdbeabf211e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 00:17:16 +0100 Subject: [PATCH 330/898] tests --- src/paperless_tesseract/tests/test_parser.py | 41 ++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index b64abb382..c389d446f 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -300,6 +300,47 @@ class TestParser(DirectoriesMixin, TestCase): "If you read this, it’s your own fault. Also check your screen orientation." ]) + def test_ocrmypdf_parameters(self): + parser = RasterisedDocumentParser(None) + params = parser.construct_ocrmypdf_parameters(input_file="input.pdf", output_file="output.pdf", + sidecar_file="sidecar.txt", mime_type="application/pdf", + safe_fallback=False) + + self.assertEqual(params['input_file'], "input.pdf") + self.assertEqual(params['output_file'], "output.pdf") + self.assertEqual(params['sidecar'], "sidecar.txt") + + with override_settings(OCR_CLEAN="none"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertNotIn("clean", params) + self.assertNotIn("clean_final", params) + + with override_settings(OCR_CLEAN="clean"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertTrue(params['clean']) + self.assertNotIn("clean_final", params) + + with override_settings(OCR_CLEAN="clean-final", OCR_MODE="skip"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertTrue(params['clean_final']) + self.assertNotIn("clean", params) + + with override_settings(OCR_CLEAN="clean-final", OCR_MODE="redo"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertTrue(params['clean']) + self.assertNotIn("clean_final", params) + + with override_settings(OCR_DESKEW=True, OCR_MODE="skip"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertTrue(params['deskew']) + + with override_settings(OCR_DESKEW=True, OCR_MODE="redo"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertNotIn('deskew', params) + + with override_settings(OCR_DESKEW=False, OCR_MODE="skip"): + params = parser.construct_ocrmypdf_parameters("", "", "", "") + self.assertNotIn('deskew', params) class TestParserFileTypes(DirectoriesMixin, TestCase): From 1d5c8d2b0d4f4a38bde2ad30276f9194581a6985 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 11:11:04 +0100 Subject: [PATCH 331/898] fixes #591 --- .../management/commands/document_archiver.py | 12 +++++++++--- src/documents/tests/test_management.py | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 0d3a5e82d..6a6056ed7 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -31,6 +31,11 @@ def handle_document(document_id): parser_class = get_parser_class_for_mime_type(mime_type) + if not parser_class: + logger.error(f"No parser found for mime type {mime_type}, cannot " + f"archive document {document} (ID: {document_id})") + return + parser = parser_class(logging_group=uuid.uuid4()) try: @@ -66,11 +71,12 @@ def handle_document(document_id): document.archive_path) shutil.move(thumbnail, document.thumbnail_path) - with AsyncWriter(index.open_index()) as writer: - index.update_document(writer, document) + with index.open_index_writer() as writer: + index.update_document(writer, document) except Exception as e: - logger.exception(f"Error while parsing document {document}") + logger.exception(f"Error while parsing document {document} " + f"(ID: {document_id})") finally: parser.cleanup() diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index 40eaaf277..f7beb8907 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -49,6 +49,21 @@ class TestArchiver(DirectoriesMixin, TestCase): self.assertTrue(filecmp.cmp(sample_file, doc.source_path)) self.assertEqual(doc.archive_filename, "none/A.pdf") + def test_unknown_mime_type(self): + doc = self.make_models() + doc.mime_type = "sdgfh" + doc.save() + shutil.copy(sample_file, doc.source_path) + + handle_document(doc.pk) + + doc = Document.objects.get(id=doc.id) + + self.assertIsNotNone(doc.checksum) + self.assertIsNone(doc.archive_checksum) + self.assertIsNone(doc.archive_filename) + self.assertTrue(os.path.isfile(doc.source_path)) + @override_settings(PAPERLESS_FILENAME_FORMAT="{title}") def test_naming_priorities(self): doc1 = Document.objects.create(checksum="A", title="document", content="first document", mime_type="application/pdf", filename="document.pdf") From 8f1632c8cd33986a199a9cf60378de6c47e93cfa Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 11:38:16 +0100 Subject: [PATCH 332/898] associate error messages with documents --- .../management/commands/document_archiver.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 6a6056ed7..497e8fe7e 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -4,7 +4,9 @@ import multiprocessing import logging import os import shutil +import sys import uuid +from io import TextIOBase import tqdm from django import db @@ -12,7 +14,6 @@ from django.conf import settings from django.core.management.base import BaseCommand from django.db import transaction from filelock import FileLock -from whoosh.writing import AsyncWriter from documents.models import Document from ... import index @@ -24,11 +25,28 @@ from ...parsers import get_parser_class_for_mime_type logger = logging.getLogger("paperless.management.archiver") +class LoggerWriter(TextIOBase): + + def __init__(self, doc: Document): + self.doc = doc + + def write(self, message): + # if statement reduces the amount of newlines that are + # printed to the logger + if message != '\n': + logger.error( + f"Document {self.doc} (ID: {self.doc.pk}): {message}" + ) + + def handle_document(document_id): document = Document.objects.get(id=document_id) mime_type = document.mime_type + # redirect errors to the log and associate them with the current document + sys.stderr = LoggerWriter(document) + parser_class = get_parser_class_for_mime_type(mime_type) if not parser_class: From a681196a003e933d1d17260550c3f8393a51ef13 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 11:52:54 +0100 Subject: [PATCH 333/898] Revert "associate error messages with documents" This reverts commit aa3d91a3 --- .../management/commands/document_archiver.py | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 497e8fe7e..6a6056ed7 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -4,9 +4,7 @@ import multiprocessing import logging import os import shutil -import sys import uuid -from io import TextIOBase import tqdm from django import db @@ -14,6 +12,7 @@ from django.conf import settings from django.core.management.base import BaseCommand from django.db import transaction from filelock import FileLock +from whoosh.writing import AsyncWriter from documents.models import Document from ... import index @@ -25,28 +24,11 @@ from ...parsers import get_parser_class_for_mime_type logger = logging.getLogger("paperless.management.archiver") -class LoggerWriter(TextIOBase): - - def __init__(self, doc: Document): - self.doc = doc - - def write(self, message): - # if statement reduces the amount of newlines that are - # printed to the logger - if message != '\n': - logger.error( - f"Document {self.doc} (ID: {self.doc.pk}): {message}" - ) - - def handle_document(document_id): document = Document.objects.get(id=document_id) mime_type = document.mime_type - # redirect errors to the log and associate them with the current document - sys.stderr = LoggerWriter(document) - parser_class = get_parser_class_for_mime_type(mime_type) if not parser_class: From 55d6d371f077efbdd00d1aff0b4bcb13513fddbf Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 11:53:13 +0100 Subject: [PATCH 334/898] changelog --- docs/changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index abe667400..b23ca5137 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -25,6 +25,8 @@ paperless-ng 1.2.0 with polling from 1 to 5 seconds. This will decrease the likelihood of paperless consuming partially written files. +* Fixed a crash of the document archiver management command when trying to process documents with unknown mime types. + * Paperless no longer depends on ``libpoppler-cpp-dev``. .. note:: From 035c9c1df6c8c659d3f42e82b6ff4c483a111f5c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 12:03:07 +0100 Subject: [PATCH 335/898] lets hope this works! --- .github/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 87b527cad..d816687ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -112,6 +112,13 @@ jobs: uses: actions/setup-node@v2 with: node-version: '15' + - + name: Configure version on dev branches + if: startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' + run: | + git_hash=$(git rev-parse --short "$GITHUB_SHA") + git_branch=${GITHUB_REF#refs/heads/} + sed -i -E 's/version: "(.*)"/version: "$git_branch $git_hash"/g' src-ui/src/environments/environment.prod.ts - name: Build frontend run: ./compile-frontend.sh From 199c1c657bb31e7892f63feddbed3780ce71dcb6 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Feb 2021 13:25:21 +0100 Subject: [PATCH 336/898] Update ci.yml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d816687ca..dbb718cc8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -118,7 +118,7 @@ jobs: run: | git_hash=$(git rev-parse --short "$GITHUB_SHA") git_branch=${GITHUB_REF#refs/heads/} - sed -i -E 's/version: "(.*)"/version: "$git_branch $git_hash"/g' src-ui/src/environments/environment.prod.ts + sed -i -E "s/version: \"(.*)\"/version: \"${git_branch} ${git_hash}\"/g" src-ui/src/environments/environment.prod.ts - name: Build frontend run: ./compile-frontend.sh From 5efbc703479efd8a482643aca0e4dd0fdfc4812c Mon Sep 17 00:00:00 2001 From: Joel Nordell <joelnordell@gmail.com> Date: Mon, 22 Feb 2021 22:20:41 -0600 Subject: [PATCH 337/898] Add apple-touch-icon for iOS devices "Add to Home Screen" --- src-ui/angular.json | 2 ++ src-ui/src/apple-touch-icon.png | Bin 0 -> 6272 bytes src-ui/src/index.html | 1 + 3 files changed, 3 insertions(+) create mode 100644 src-ui/src/apple-touch-icon.png diff --git a/src-ui/angular.json b/src-ui/angular.json index a26dd8713..edf428fc7 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -36,6 +36,7 @@ "aot": true, "assets": [ "src/favicon.ico", + "src/apple-touch-icon.png", "src/assets", "src/manifest.webmanifest", { "glob": "pdf.worker.min.js", @@ -112,6 +113,7 @@ "karmaConfig": "karma.conf.js", "assets": [ "src/favicon.ico", + "src/apple-touch-icon.png", "src/assets", "src/manifest.webmanifest" ], diff --git a/src-ui/src/apple-touch-icon.png b/src-ui/src/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..46388a873d15b42999b0a173c8d33a224b80ca51 GIT binary patch literal 6272 zcmb_h^;cBU7QQe#ghQh;lz@tWbW3+jch^uuNew-SfFPw35&{AO0y2OINT-y5!cY=J zNq494uJ4!k54^k9y?4!7_ndY1*?WKc`}V|WYbuiv(-H#!K%%OmpbNfR|J{U8@ToiP zN&voYc+08k6M|PTp?x&?o5)ke#2Wx^n*F=+p1*!64-Ue86pelKJRE#bHeLt-g+g&V zyCc2rY&;R%9$t=_+Y+<@aQCmOf~>y(`>iZT8R~J`sM#5WiFE-7i!gbRtoF!+5UWck zV^apreVQQsyouX!T+oWxhe~lm$DN-#Cv3^aob&}JDijp*Ke0t`e%bu{+||6c0^#78 zdX{aqnJ(ann+~#E>1UsPw7<4i1eGPE<{QT+3|H>~B0exf$it&xGK94J0JGEod7$Ez z0_VJGxK0mn19^IJn(L-Qhe6Op!elDCJ~7_c{!z|4&L1ZSWirlfL_Ill8X__HVK8s{ z>fiT|6^`S=Mr2>PER}k3eP^==!k>kg-pEC5WCLLwOZfhOnKhtHG>R;#)`N4uGc<XU z`n1~`B)Usr^58H++X;Qcu%yhuunZslQWl)dhadcx4|C#_<t2qCOu{2n@=O-9{r>6U zYw=!RjKMB<_j4936NEgDxAa=@26SX7XrR^}PFKpuzz^66&19lvTWUgJmM2Fn5c2QI z(9w0fwhGaF-(dCgNtO7s*LZ}ndk4kQLW@T2y+gfDk~~IQ(TbOwE|>a>yNp^!TCVTE z+$oq=zhh#=lG-}@eH2>K{}LvX7T++<V3s$Q`^Dp7($1dOk-g5FC2*}O&vy+r>LX$! zB!q$+Qi+t?oa|pn2{1Rwk6$Pgk-5g=tUc?oH16E)oNQkh10m$B^NS|5Q!O|rofQJ@ zKQH->e$j=oQKIijyS_4wRYP2IxyvuJ*=dr$0N2hRDW{D)qC(54itv<9K3gcpb0Sor z`RJXLaJshf)DRU4c)s1o0*6p0AMzLl8k{d1>j}Jj0zXydf$c|zLNHiNlRZ=Khj!xo zIE^GA*@d6OWSl-(=F%F*n<Q{7aR}gQ2rq*nzeE5$V0EVc(Q#-)QpzA1;PT1DdE9iB zgvrxh7oK;a+1dK*>a)}%qhjmo5Orn<VOl-jb7Ow5=BIM+{`^_4xPqxOK?uoXjKgg# zpmuUQDk=;gg#(t6ikPR_cHH*BbDc_`o1Bb%WbsJhFKgc3)Zm6i6&_GBf8KIToAlr} zx91i{haPXZW=dnJdjR~_sV3@Wl6ct$=smB(`L$Tb_mWdI_F=Y~<Aqt|0-mfAPo!S& zONb|7SLniF+8TR)Jdqv*g9=4m4Bt}2gMFp=tH8{N|7VaxgmQ<)V4|LJx=DJE(TX>h zJP){z0$l4}Cuw%%G0CJCmtrgdoUAU@nw(#TPv!w-?hZlD!bYf`cDsp)AoI9HkAG|R z4bT^x^wK%6(xe6N46F-+K`%SZKm6ZGVOcD9V)lL$<X8v#Q$IR5U*4S~YQiIg7VA`s z-64&Y_e^2J6r^=ZC+>K2wK3TP;_b2vVYyiZHo@gXU{rf?b=$j3sVtd>%k}_%a&Ffd z#-gqX-)&UC$(0%2KWcLWGcW?y>J9oq$?slNxfCN_ap%?5PT=V#g~tgVo;_fxSFT2$ z8fPBXhk$%bwdE7Rx<BJ;15=PuS9C0Ax0j~j(&*ZadscH9Ozq7J^o*?vVph$VvXcCW zGi|;u^cu>MifJw7jp(f{_W~#Suw_4rR$z&!zJL)dU%L3Mw0It{D0L=w9emcX^bG~R zDR=;RY-)AyIvaEO9Cqdd4mYiW59~M-%q61Y^~UlN&|In1rb?hUEq?;w{sxKMMi{-L zf{})&vWRTT$COkRb43r?)|MkJs%koByAu^tQlIUOA#mIHT%e^C3A)M}TjIT&o)3(6 z3YlzGAH3Z$SFGMQsC?+c;F0tz>-+*XPWcM_5-(Khb|t@8v5ARca)|`zG-Kj-@l?6u zK6#buzzNX+5|87{jYW+<6U;+uB6w>Tm;t1>THfD6)vdwx+zV&gD-<cd1z!*YA8d}u zT{FHUyfe$WrL$D(xqTjhLHwJd1Rg`&mJsn9NtXUs$&HJh+;J9ss#O^-WLfusw;ooq zhNNhtuv^TK37{^CJ~ry7&_*yuuDG?IgwMEch2W`4$2#+bD1vK8TpFNn_K!mnvC2ZN z)Aw;p74GdEBm1Q``;u$$HNsfBIQ8OpLWp=5!Pc(c<DoOWxnGg@&DD8{_<`7wPsR+H ztmS;j)aAacmc4-fyZ*al>?Kj7@|z_Gjt-6sm+>v%Qf(-|Qub3mMT&G`(x(R2FJp>A z<%>QgR*RvzT4*PDovUYjLIF{)J<)yr0P`QbM1hbBnH5%sN}oUYRitH|*I($XM7m_l zu6Pnc!Qhyn{hMzhpcHI9`x^po1I`b0__z;K{Ae+~K|qCiRx;|+KTZAu(O~G5auJx) zw!C`8wq*I1B>nT7(*EzyrO_*<QN6G6Xg=yKYFCM)4>RB@6IG_A)7Viev%K;Aa8!V> z{g=MnTgrR<k7AK<R(Ys(v}U~cT!T*R)9uTW;M*+kv|3Z|PgVD2AqI^_nA=!YA5U1H z^jd)lcgGI_6nEmOF@~B~le#=#%3lDj?YI*XX`vcpx<pxdgXqnVUloCbbo?fd9*J~g zqNKwZ2Jj7z%OZ|R&Tj9MvGsiZW_zfcq~%^b>Y`x`FTkGRSqB<ZOMSYQ!cw|*ZR-VX zx|~8L-r#ki`J+%B;r!WB6M~2`lPW>%*g$*Ki%g%sj;SMrqz=QBtJv2RB$0#NUHK2D zp+djvRN4M$UdDv6CiPW>E^s6Z*=3`*Ya)%`d{ZlG^wqxAe{M_rV%=5C<=m}d;_8yy zZx0&1Dn)Pmh6Z%JV8HtUVQfeKz^kFEy<d0wXX>?!8cokiPNlry9#;*Vh=X}IQzXqX z{tn3;SU(tMU0J-npDAJ|<DVGn^Da{1Fy*~RKP@k)sHpOM`<67lKGQbPyK`eS`l_A~ z7qoM~1kZuygH^-NuTs1XLL2?L8R49<2T@%a=GRw?f`>T*G_O#Uim?hToU~GR!Mbi^ znm6z}G?;+VQEJ{aN^y4*&?R7(x~@nxGyy?abcU7})l<tVEq&oD+`a%^P<4nJtY&5) z*kuWMQ~hbwCHQ)SOws5Md!w*S=G++D)_j=(E9&iH6`9n$g4W5h#jh{!-bovY7JNiT z+m~f}SC#`xX~QU%q+!v;)dDJ&I#fIoey0No@o^hd^*Gzb$j`5vw-=gDo162MSta)# z)iPYb#WgpF*?E>MDQ6QcZBHm>iB0Mc#4!(zZ+ei-ae6BSK?2;=>jP{QYHfr^1wb-! z>YplHygj3Q!u!Og1c&r~*_k#?I{U=;2$o=V^#TbuY%_xd8@G`B(TqB2CEGrY9B6-j z8kiz$Y=(6R0rQ5Y**_U~dq~PHaPdAP#=%T&dhE<xy@D1;JNF{6EZ!28`owOy$j&Vf z;j|*ly0c}~XqS$2A_P&2@4or9SsUZo{j&#eG4B^lqegeffPoD`t}mM9hLXEBe}zA< z{{zIIQ=u-pGYyH`HbXzvefu8T5-lkA*Ouy8bZM84M$hmkBH?kZ>X3ij3}j$Q>w^sE zToP*j6@>_ECv;NMucsCQRCRskl5P?CI`L2q^~JcEN9gbA$=>EatZ!J-eo(X)NZLr< zJ8av;!<q~+--#J&@YPCMzY4wLJ<h^P5*yci<moy|us5Z3{KMhR=PeH#=cjq`4*JPT zXyWtvJ&~QhKH_I!$UU9hEY#*8Z&GR@awJQ$Ikdy!PTf)X<yBG{w|GdbHDOtD%cL=~ zDPAe?(Y+SKdztzk9Xpw?GeVV%8s+o-zPpS)`nx92iK~nQ4QdyMsB}{5munAfUZ{!w zctc(X8{~IX^6B}=AJKfG^X3RVdgEqffo5G&K9$2!PFM7uW?pvYjB%nJ&gUp7;cl7z zv(zNo+okvY<~WsnBJ@ighg}X5r2W<yC}FUzM6ZHA{=7)CO*OSnOL1b9Ek~n(Op4bS zLSb{Xo}hgS?OvVGB}8}IM7hk+Zf)?k*itqoo5p!D#YH$E`-omIG_9)|W;mCH7c3F- z+1<|Jx_s!H;Sj?FO(D(P+?jl!NVwuLy)&xqa~z-VfJVd2wmG$gVA#=x{YOfI2MXM^ z{)8+kq90_B&K1YZ%2!-H>U0qlxWRJ~a;u4y<mfVG^nxiANv#e6ZZ>cmC7Rg`ohUq< zRa4{+mF(?rwUMNF-LlC~qf1cy`{$qgC-;hMrcaXUQrkcy!fJ!qyCzHM$fE<~2dusp zYuB$vyT%luu`xP-wk%&&RS|0>74>zzi*1o}IKG7`s36{fG5PXJe)!D(kGpq>k@0UZ z>d8@VOQW=lTvdwj8h>Ds><2Ym9Kur!ac%#+GN!JEKG)tr>CeVE8PrDho)~d1ki1UH zd?Ec-%O$0*$NbmNxEK4u4nNaFj86|JF^Gv9jI=VgzI5o>hNxR2JTBFBwmyx$benze z_$_z9Lggde<m)!pyPYo%+;lcp?oysaL{q7QhuaBj#KV!f#5^%uMn2UEOx|tn>p`%F ze5j|U2;2CYeVAk8CM{sa_S64-pS^t%db?rN(r$MUD8F4l6*HjtfO7r^MxOkR2qBMU z(@64oDP@H7-$Lqu76sSKM)&<ppMpqGU&POG$fm|D5fK;QLzYQ9n$XuEk9#_wg~xBX z8bw|ivFw|Xrwf;kJJS?DZx17#UmeQJ913E1(Dl-09P94#cN^DOieL!{=dg;L-^+it zzwV4Fn4rhOWvpNf>gmId_>@{(ZHX-&V;nh>)=@(Ton7tJ%cTd;PUbBJJl?3-kMD&L z=Nn9!nWGCqi_-!jfQ+>agOBqtg-&VFqT#vQ)4GOf5)hMVG>qLi-}pKh7LHw_wU_EY z8Q0_6Ww<@<U#<(xH@I~Z2cMf=Nrbz3D2(U!^bW`#x@<unyM>$0V^4zCnjQ&=W37X< ztfa8#Gr|!w0==$ZR#yrFfAZcU!oiuAayH^>?$T%z?2Nib$lpy^wdYB{bEg2sc6eGh zA8)l2`cb5GCIX%->@b*m^VAPZk3o2nUc)?hXcwP25HzVuP&5Tb8NN0ZxogyvYoIZ6 zwhBV6%4lGJ^jGG}%oQ8lv7-5pxtomwt;p}l=}`ZdL&D;ME-#63OV3t@EFN4IX1%F& z{IM;j%o`sPEv|NLru+|FFv87XIaVmkPPi%k-J2^?1oSPaYLcs=pr+svi@*a?FTdcI zds#VSViau^j<P-)%udj?{uot1KrvjK#;w~YnIpKPIO&U%-Wsg#4g;<qC)corBJUA{ zV8j#;es#*6Gj!73kQ~@CBXftlc4J571)iEt{gi^e-dkV~)VR?1u$9W~P>0Y<priMM zXO`SEJY$K1#+a<K%6&srik@e*l+U&hA+mKn#KD3MVmcmxhj`3~Npg0VR8j2iojHm^ zKJa%5yGX=(9=Q`QZuz;;6MtZem~YUDpNjfA)CuS=v&RoAjea)X9kA96m*Ad2Z!^g~ zLUm^;qhc|f+WyV}@cDtcJKeBSmDTmkdqa@RSY%$kOPuS=DuqrFmCzGbs(emre8Kal zc%K)9X0YtSEwD`fu3=4%Cjz*_Y1IVbwlaVkR)rgwGB}L_!tC!uo!}ENkWgDX_yvQ4 zAy8xIMS*w=Re!1ja;^-Id%7_iB%W}OTHZx_Lrr1L2alXBZk5n~BC_+}8+-V|4V2ch zzuzKg#vQmWelm2vT$Fn@NqTVP1y)$FchXX3(>PFz{oITM2x1`XO~1#2=a&^<tk`^K z;S+1_&LQzk|II^QX%9R9zOL1yOcON@JzYwiiR;eaJL1SEdY9+n@R7IKDVu|=n<s~N zLbLlsYB*hWAzU8Kpt!-e73;f7DLh||N3C{K_^LT_&yP<3arButyO4?F`%SAZt%DPg zL6X!^m_H<Bp}`6D2`38VFxjrr9G<blKvw;Jtperm1^~v*K@YQ=svuZXIULPg^+NUF zw%(apH#3=)gu|iy@I;MsO^@CZv&~Nz!C3!$W{JOA&d1t=AQC?V6V9g6XBzg8??i!4 z{fg=R$UiU(F069)Qu>K!qJ`LVVLNdqmm{CD{OpLOT^s;ZILwMoYX~$-wwVVvUd2kE zA2%}rJ%dA1<jq=Im-o!P!N6#@CCDA`Z~g|#u5qtdxBYB@0uC~(ay!<|CqQz*<I6k_ zs|)#K=hS0QB;Cu7I67w$KL0ktU{P*;kMoD^ft&4sj4UapQ?G?@ICWYT(>t;HhYeew zdOlY(wqv$dySH+5D^6luUl;3Pr*P@?m3D@-;VoqV-;}=j{H$&vMHgE7CQ0c_UP>9G z?FY(+nl*y~mLZQ@rxLCrUb}4G3s$Z7B7S^w85ZJ5rdw1?;dcN9i19@fIpGk4=DzhB zuM}d@AMdOCllK;iaUStjZz+9ip7KV5nrH03bnez^!m0n{qtmVa(Dh5<P7DkHlzAAG zHyt*T1Rp083zp3oKc-%6J9v4Ru@Nxlz3J%hjVmK4K3(oM7Cij|XGu+HTSA4qQPi|y zqGTffiIVC|7t{B&LPqJa<FCdu4)7v3`6=mEPM4?*yRUouL!W1<#!Lj-i*Nm0A@Xwu zs!ijg3+%KfJIs(CiN(_@4L9qOVhtm{i6?F^RJ=)<O{A@<RoN(=HWKxjXZr`%xGI8O z)4j<&KSIBXe-&6hZTFk(#MP0~e|tH&<e+i#u`BOyKW2mwrN^IzM33DWM(}qCY6a{5 z#@*Gb+?mGPlnerGWE_uq@N}1;K?ndE{f{WGGl%X@6}t2OxPfBCDJq=s2(@6dC0gqt z((7d#AYAq{Eh5PSN+jO5?A^Wk=0&N@&DdRsMDy?GYE~p#&;e}G3&$<+kV;TQ2$l?e z=s5=^k(db4=&PlB4FTD0=z{Je+M8g*sO$^a>i~6VTg;y%(KqiSu;`rI`YL-15j{mk zR+XZ{f7pCG-%=b5EtT2D7kaWT(bqrSDnOm;O|`HdcWp);W+hp9*KmGl)%|{>ArmST z0lKk5(JI}Sde>n4u>vPNzxF^}g}%abf<9|7CnJ<@PyC%gUiw_NtsU^e+Ft;~ASe%w z&G2jc^Lh`Mk_OFK069KneKlE2Ev;`dkH#kGRSF*Q?~r|?ubIDouh!w*x<k7r|DH<+ zmnN6SRW>QDCGTjcbq=X_!?CKKi60fX5}nOstzS6u<k<X}ck_HL%Jk7xvTWLp{RG1- z;a-7bY6PJd*;PLB`+hP=LP9Gc{{*D(R>T%tsz;a{*aYau(Yz#0YMA$O`BHef-b4*H zr&gOBt(`<^4atVs6R#0Z7=I0Q*eX{F%P_ywOB%BA5^<GkBmv0H>oB;$E2+@5!!^;Y z{h;eBP~A2=8r*Lq3Fig0D~zlEPLKjJVIB{Y_YQ~ZxhZ3KJ)B@*brCz!v^pVivtcVF z>;eGK<H?+io8_s#nMjL`(Gr4;(V>B3FP0}nE!j9ERY=4ZMKYdOO5Hcle5MzdQ_x+u z`RBzsT4TjIMSb#z>u_PL@&uzS8~`*6s3S;RZ;!}PjoF*Fu!GW|Ko2$0d~|xjc%V~4 zbY*=K^t^uw<Wm5E+b+<aDrYsfF#pHpvjX8f*|vjYku|Bx6Et|Vb1jf<H+d-;P;nhX zzhyM>CCJ6z3bU<(57G~Ei$4dea;`SV9GmY*T__0nK4~NIgUiG~TL=VbjTGr%3dynp zN%8um$;jEwa3&J%Q-%+TZp!Gw({p^e*HHg`IW+9=yC)`TM|N@XqvYl+DiGKvIi@!F zszy<4C@*Fqeh#)9>ZyLCr5FD|SY+5;m(m%JMHCXer<0~>(kyn*t|jwELH5>=!k&^g z6l`GrBbl0K=a5WKu_aD|SA-b$8UkC`Gw=Yx4AAGeZJ&_P6MTek)eny|7h7gixlu=c zEQ}d^xSISfjADdb<=)6yWc(b745<G9|K0KbwcO973z+GnA6K!Mg8vo(s*0Kl7&+_k F{{T>d$}<1} literal 0 HcmV?d00001 diff --git a/src-ui/src/index.html b/src-ui/src/index.html index b05f9123b..39ecd824c 100644 --- a/src-ui/src/index.html +++ b/src-ui/src/index.html @@ -9,6 +9,7 @@ <meta name="theme-color" content="#17541f" /> <link rel="manifest" href="manifest.webmanifest"> <link rel="icon" type="image/x-icon" href="favicon.ico"> + <link ref="apple-touch-icon" href="apple-touch-icon.png"> </head> <body class="color-scheme-system"> <app-root></app-root> From 659dcbb3c1825de51931f87a947dc7ba788f993d Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Tue, 23 Feb 2021 08:35:10 +0100 Subject: [PATCH 338/898] Update exposed configuration variables Include the newly added OCR clean and deskew parameters --- ansible/defaults/main.yml | 11 ++++++++--- ansible/tasks/main.yml | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/ansible/defaults/main.yml b/ansible/defaults/main.yml index f1cbb8f88..0a5824608 100644 --- a/ansible/defaults/main.yml +++ b/ansible/defaults/main.yml @@ -18,8 +18,9 @@ paperlessng_directory: /opt/paperless-ng paperlessng_consumption_dir: "{{ paperlessng_directory }}/consumption" paperlessng_data_dir: "{{ paperlessng_directory }}/data" paperlessng_media_root: "{{ paperlessng_directory }}/media" -paperlessng_static_dir: "{{ paperlessng_directory }}/static" +paperlessng_staticdir: "{{ paperlessng_directory }}/static" paperlessng_filename_format: +paperlessng_logging_dir: "{{ paperlessng_data_dir }}/log" paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv" # Hosting & Security @@ -36,12 +37,15 @@ paperlessng_enable_http_remote_user: False paperlessng_ocr_languages: - eng paperlessng_ocr_mode: skip +paperlessng_ocr_clean: clean +paperlessng_ocr_deskew: True +paperlessng_ocr_rotate_pages: True +paperlessng_ocr_rotate_pages_threshold: 12 paperlessng_ocr_output_type: pdfa paperlessng_ocr_pages: 0 paperlessng_ocr_image_dpi: # see https://ocrmypdf.readthedocs.io/en/latest/api.html#ocrmypdf.ocr paperlessng_ocr_user_args: - #- "deskew": True # https://github.com/jonaswinkler/paperless-ng/issues/231 - "optimize": 1 paperlessng_use_jbig2enc: True paperlessng_big2enc_lossy: False @@ -57,10 +61,11 @@ paperlessng_consumer_polling: 0 paperlessng_consumer_delete_duplicates: False paperlessng_consumer_recursive: False paperlessng_consumer_subdirs_as_tags: False +paperlessng_convert_memory_limit: 0 +paperlessng_convert_tmpdir: paperlessng_optimize_thumbnails: True paperlessng_post_consume_script: paperlessng_filename_date_order: -paperlessng_filename_parse_transforms: paperlessng_thumbnail_font_name: /usr/share/fonts/liberation/LiberationSerif-Regular.ttf paperlessng_ignore_dates: "" diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index bfaf8df17..ad16e2b0c 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -256,7 +256,7 @@ - "{{ paperlessng_consumption_dir }}" - "{{ paperlessng_data_dir }}" - "{{ paperlessng_media_root }}" - - "{{ paperlessng_static_dir }}" + - "{{ paperlessng_staticdir }}" - name: rename initial config command: @@ -280,9 +280,11 @@ - regexp: PAPERLESS_MEDIA_ROOT line: "PAPERLESS_MEDIA_ROOT={{ paperlessng_media_root }}" - regexp: PAPERLESS_STATICDIR - line: "PAPERLESS_STATICDIR={{ paperlessng_static_dir }}" + line: "PAPERLESS_STATICDIR={{ paperlessng_staticdir }}" - regexp: PAPERLESS_FILENAME_FORMAT line: "PAPERLESS_FILENAME_FORMAT={{ paperlessng_filename_format }}" + - regexp: PAPERLESS_LOGGING_DIR + line: "PAPERLESS_LOGGING_DIR={{ paperlessng_logging_dir }}" # Hosting & Security - regexp: PAPERLESS_SECRET_KEY line: "PAPERLESS_SECRET_KEY={{ paperlessng_secret_key }}" @@ -305,6 +307,14 @@ line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') }}" - regexp: PAPERLESS_OCR_MODE line: "PAPERLESS_OCR_MODE={{ paperlessng_ocr_mode }}" + - regexp: PAPERLESS_OCR_CLEAN + line: "PAPERLESS_OCR_CLEAN={{ paperlessng_ocr_clean }}" + - regexp: PAPERLESS_OCR_DESKEW + line: "PAPERLESS_OCR_DESKEW={{ paperlessng_ocr_deskew }}" + - regexp: PAPERLESS_OCR_ROTATE_PAGES + line: "PAPERLESS_OCR_ROTATE_PAGES={{ paperlessng_ocr_rotate_pages }}" + - regexp: PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD + line: "PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD={{ paperlessng_ocr_rotate_pages_threshold }}" - regexp: PAPERLESS_OCR_OUTPUT_TYPE line: "PAPERLESS_OCR_OUTPUT_TYPE={{ paperlessng_ocr_output_type }}" - regexp: PAPERLESS_OCR_PAGES @@ -331,6 +341,10 @@ line: "PAPERLESS_CONSUMER_RECURSIVE={{ paperlessng_consumer_recursive }}" - regexp: PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS line: "PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS={{ paperlessng_consumer_subdirs_as_tags }}" + - regexp: PAPERLESS_CONVERT_MEMORY_LIMIT + line: "PAPERLESS_CONVERT_MEMORY_LIMIT={{ paperlessng_convert_memory_limit }}" + - regexp: PAPERLESS_CONVERT_TMPDIR + line: "PAPERLESS_CONVERT_TMPDIR={{ paperlessng_convert_tmpdir }}" - regexp: PAPERLESS_OPTIMIZE_THUMBNAILS line: "PAPERLESS_OPTIMIZE_THUMBNAILS={{ paperlessng_optimize_thumbnails }}" - regexp: PAPERLESS_POST_CONSUME_SCRIPT From 3c8df1194d480f9edbc9a2750f1905347bbe43aa Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Tue, 23 Feb 2021 08:38:01 +0100 Subject: [PATCH 339/898] Handle OCR languages with hyphens See https://github.com/jonaswinkler/paperless-ng/issues/584#issuecomment-782830878 --- ansible/tasks/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index ad16e2b0c..92eb92032 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -43,7 +43,7 @@ - name: install ocr languages apt: - pkg: "{{ paperlessng_ocr_languages | map('regex_replace', '^(.*)$', 'tesseract-ocr-\\1') | list }}" + pkg: "{{ paperlessng_ocr_languages | map('regex_replace', '^(.*)$', 'tesseract-ocr-\\1') | map('replace', '_', '-') | list }}" - name: set up notesalexp repository key (for jbig2enc) apt_key: @@ -304,7 +304,7 @@ line: "PAPERLESS_ENABLE_HTTP_REMOTE_USER={{ paperlessng_enable_http_remote_user }}" # OCR settings - regexp: PAPERLESS_OCR_LANGUAGE - line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') }}" + line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') | replace('-','_') }}" - regexp: PAPERLESS_OCR_MODE line: "PAPERLESS_OCR_MODE={{ paperlessng_ocr_mode }}" - regexp: PAPERLESS_OCR_CLEAN From a56896543c71f558e2d26a615bb521be5b276107 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 12:35:24 +0100 Subject: [PATCH 340/898] validation for regular expressions on matching models #605 --- src/documents/serialisers.py | 39 +++++++++++++------------- src/documents/tests/test_api.py | 37 +++++++++++++++++++++++- src/locale/en_US/LC_MESSAGES/django.po | 10 +++++-- 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 66736bdbf..652e5fe30 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1,11 +1,13 @@ +import re + import magic from django.utils.text import slugify from rest_framework import serializers from rest_framework.fields import SerializerMethodField from . import bulk_edit -from .models import Correspondent, Tag, Document, Log, DocumentType, \ - SavedView, SavedViewFilterRule +from .models import Correspondent, Tag, Document, DocumentType, \ + SavedView, SavedViewFilterRule, MatchingModel from .parsers import is_mime_type_supported from django.utils.translation import gettext as _ @@ -33,16 +35,27 @@ class DynamicFieldsModelSerializer(serializers.ModelSerializer): self.fields.pop(field_name) -class CorrespondentSerializer(serializers.ModelSerializer): +class MatchingModelSerializer(serializers.ModelSerializer): document_count = serializers.IntegerField(read_only=True) - last_correspondence = serializers.DateTimeField(read_only=True) - def get_slug(self, obj): return slugify(obj.name) slug = SerializerMethodField() + def validate_match(self, match): + if 'matching_algorithm' in self.initial_data and self.initial_data['matching_algorithm'] == MatchingModel.MATCH_REGEX: # NOQA: E501 + try: + re.compile(match) + except Exception as e: + raise serializers.ValidationError(_("Invalid regular expresssion: ") + str(e)) + return match + + +class CorrespondentSerializer(MatchingModelSerializer): + + last_correspondence = serializers.DateTimeField(read_only=True) + class Meta: model = Correspondent fields = ( @@ -57,13 +70,7 @@ class CorrespondentSerializer(serializers.ModelSerializer): ) -class DocumentTypeSerializer(serializers.ModelSerializer): - - document_count = serializers.IntegerField(read_only=True) - - def get_slug(self, obj): - return slugify(obj.name) - slug = SerializerMethodField() +class DocumentTypeSerializer(MatchingModelSerializer): class Meta: model = DocumentType @@ -78,13 +85,7 @@ class DocumentTypeSerializer(serializers.ModelSerializer): ) -class TagSerializer(serializers.ModelSerializer): - - document_count = serializers.IntegerField(read_only=True) - - def get_slug(self, obj): - return slugify(obj.name) - slug = SerializerMethodField() +class TagSerializer(MatchingModelSerializer): class Meta: model = Tag diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 7486154e1..cbd10ac71 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -14,7 +14,7 @@ from rest_framework.test import APITestCase from whoosh.writing import AsyncWriter from documents import index, bulk_edit -from documents.models import Document, Correspondent, DocumentType, Tag, SavedView +from documents.models import Document, Correspondent, DocumentType, Tag, SavedView, MatchingModel from documents.tests.utils import DirectoriesMixin @@ -772,6 +772,41 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(response.status_code, 200) self.assertListEqual(response.data, ["test", "test2"]) + def test_invalid_regex_other_algorithm(self): + for endpoint in ['correspondents', 'tags', 'document_types']: + response = self.client.post(f"/api/{endpoint}/", { + "name": "test", + "matching_algorithm": MatchingModel.MATCH_ANY, + "match": "[" + }, format='json') + self.assertEqual(response.status_code, 201, endpoint) + + def test_invalid_regex(self): + for endpoint in ['correspondents', 'tags', 'document_types']: + response = self.client.post(f"/api/{endpoint}/", { + "name": "test", + "matching_algorithm": MatchingModel.MATCH_REGEX, + "match": "[" + }, format='json') + self.assertEqual(response.status_code, 400, endpoint) + + def test_valid_regex(self): + for endpoint in ['correspondents', 'tags', 'document_types']: + response = self.client.post(f"/api/{endpoint}/", { + "name": "test", + "matching_algorithm": MatchingModel.MATCH_REGEX, + "match": "[0-9]" + }, format='json') + self.assertEqual(response.status_code, 201, endpoint) + + def test_regex_no_algorithm(self): + for endpoint in ['correspondents', 'tags', 'document_types']: + response = self.client.post(f"/api/{endpoint}/", { + "name": "test", + "match": "[0-9]" + }, format='json') + self.assertEqual(response.status_code, 201, endpoint) + class TestBulkEdit(DirectoriesMixin, APITestCase): diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index cb31bbc8c..c234d5c2a 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"POT-Creation-Date: 2021-02-23 12:30+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" @@ -346,7 +346,11 @@ msgstr "" msgid "filter rules" msgstr "" -#: documents/serialisers.py:370 +#: documents/serialisers.py:52 +msgid "Invalid regular expresssion: " +msgstr "" + +#: documents/serialisers.py:376 #, python-format msgid "File type %(type)s not supported" msgstr "" @@ -411,7 +415,7 @@ msgstr "" msgid "French" msgstr "" -#: paperless/urls.py:114 +#: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From 97d5919833311d0b067388152ade25d4e9e3bfb7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:03:20 +0100 Subject: [PATCH 341/898] Update CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a8fb1f8e9..0bbd6c8ea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,11 +9,11 @@ If you want to implement something big: Please start a discussion about that in ## Python -Use python 3.6 for development. Paperless supports python 3.6, 3.7 and 3.8. +Paperless supports python 3.6, 3.7, 3.8 and 3.9. ## Branches -master always reflects the latest release. +master always reflects the latest release. Apart from changes to the documentation or readme, absolutely no functional changes on this branch in between releases. dev contains all changes that will be part of the next release. Use this branch to start making your changes. From f592b3360287c4112e8161c38578eeacb0a0a773 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:09:41 +0100 Subject: [PATCH 342/898] move codestyle checks into separate job --- .github/workflows/ci.yml | 44 ++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dbb718cc8..cb61b753b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.8 + python-version: 3.7 - name: Get pip cache dir id: pip-cache @@ -49,6 +49,39 @@ jobs: name: documentation path: docs/_build/html/ + codestyle: + runs-on: ubuntu-20.04 + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - + name: Get pip cache dir + id: pip-cache + run: | + echo "::set-output name=dir::$(pip cache dir)" + - + name: Persistent Github pip cache + uses: actions/cache@v2 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: ${{ runner.os }}-pip${{ matrix.python-version }} + - + name: Prepare tests + run: | + pip install --upgrade pipenv + pipenv install --system --dev --ignore-pipfile + - + name: Codestyle + run: | + cd src/ + pycodestyle + tests: runs-on: ubuntu-20.04 strategy: @@ -87,11 +120,6 @@ jobs: run: | cd src/ pytest - - - name: Codestyle - run: | - cd src/ - pycodestyle - name: Publish coverage results if: matrix.python-version == '3.8' @@ -130,7 +158,7 @@ jobs: path: src/documents/static/frontend/ build-release: - needs: [frontend, documentation, tests] + needs: [frontend, documentation, tests, codestyle] runs-on: ubuntu-20.04 steps: - @@ -240,7 +268,7 @@ jobs: build-docker-image: if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/ng-')) runs-on: ubuntu-latest - needs: [frontend, tests] + needs: [frontend, tests, codestyle] steps: - name: Prepare From c5125105304798ab767a61cb88d7985bab4963c7 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 23 Feb 2021 12:12:00 +0000 Subject: [PATCH 343/898] Apply translations in de translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index 358c9b721..d1a07d18f 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"POT-Creation-Date: 2021-02-23 12:30+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" @@ -354,7 +354,11 @@ msgstr "Filterregel" msgid "filter rules" msgstr "Filterregeln" -#: documents/serialisers.py:370 +#: documents/serialisers.py:52 +msgid "Invalid regular expresssion: " +msgstr "Ungültiger regulärer Ausdruck:" + +#: documents/serialisers.py:376 #, python-format msgid "File type %(type)s not supported" msgstr "Dateityp %(type)s nicht unterstützt" @@ -421,7 +425,7 @@ msgstr "Niederländisch" msgid "French" msgstr "Französisch" -#: paperless/urls.py:114 +#: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" From 97ac2aeab9b8773a530485bac59e0739cbf4e5df Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:13:12 +0100 Subject: [PATCH 344/898] rename some steps --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb61b753b..85db2d482 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,7 +72,7 @@ jobs: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip${{ matrix.python-version }} - - name: Prepare tests + name: Install dependencies run: | pip install --upgrade pipenv pipenv install --system --dev --ignore-pipfile @@ -109,7 +109,7 @@ jobs: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip${{ matrix.python-version }} - - name: Prepare tests + name: Install dependencies run: | sudo apt-get update -qq sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript optipng From 357b810772cb46f1746ade836145775361d8e037 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:13:38 +0100 Subject: [PATCH 345/898] front end support for displaying error messages about regular expressions. --- .../correspondent-edit-dialog.component.html | 2 +- .../document-type-edit-dialog.component.html | 2 +- .../tag-list/tag-edit-dialog/tag-edit-dialog.component.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html b/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html index bbc2c8453..26a6dc219 100644 --- a/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html +++ b/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html @@ -8,7 +8,7 @@ <div class="modal-body"> <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text> <app-input-select i18n-title title="Matching algorithm" [items]="getMatchingAlgorithms()" formControlName="matching_algorithm"></app-input-select> - <app-input-text *ngIf="patternRequired" i18n-title title="Matching pattern" formControlName="match"></app-input-text> + <app-input-text *ngIf="patternRequired" i18n-title title="Matching pattern" formControlName="match" [error]="error?.match"></app-input-text> <app-input-check *ngIf="patternRequired" i18n-title title="Case insensitive" formControlName="is_insensitive" novalidate></app-input-check> </div> <div class="modal-footer"> diff --git a/src-ui/src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html b/src-ui/src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html index ed9f4f5af..55cd3de5b 100644 --- a/src-ui/src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html +++ b/src-ui/src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html @@ -9,7 +9,7 @@ <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text> <app-input-select i18n-title title="Matching algorithm" [items]="getMatchingAlgorithms()" formControlName="matching_algorithm"></app-input-select> - <app-input-text *ngIf="patternRequired" i18n-title title="Matching pattern" formControlName="match"></app-input-text> + <app-input-text *ngIf="patternRequired" i18n-title title="Matching pattern" formControlName="match" [error]="error?.match"></app-input-text> <app-input-check *ngIf="patternRequired" i18n-title title="Case insensitive" formControlName="is_insensitive"></app-input-check> </div> diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html index fd4c3b7f0..418a5c281 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html @@ -20,7 +20,7 @@ <app-input-check i18n-title title="Inbox tag" formControlName="is_inbox_tag" i18n-hint hint="Inbox tags are automatically assigned to all consumed documents."></app-input-check> <app-input-select i18n-title title="Matching algorithm" [items]="getMatchingAlgorithms()" formControlName="matching_algorithm"></app-input-select> - <app-input-text *ngIf="patternRequired" i18n-title title="Matching pattern" formControlName="match"></app-input-text> + <app-input-text *ngIf="patternRequired" i18n-title title="Matching pattern" formControlName="match" [error]="error?.match"></app-input-text> <app-input-check *ngIf="patternRequired" i18n-title title="Case insensitive" formControlName="is_insensitive"></app-input-check> </div> <div class="modal-footer"> From 334f481f9595e0d0d0db48ad24824c25c9fd69b0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:16:56 +0100 Subject: [PATCH 346/898] documentation typos --- docs/configuration.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 56537035c..e26180382 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -278,7 +278,7 @@ PAPERLESS_OCR_DESKEW=<bool> PAPERLESS_OCR_ROTATE_PAGES=<bool> Tells paperless to correct page rotation (90°, 180° and 270° rotation). - If you notice that paperless is not rotating pages incorrectly rotated + If you notice that paperless is not rotating incorrectly rotated pages (or vice versa), try adjusting the threshold up or down (see below). Defaults to ``true``, which enables this feature. @@ -287,7 +287,7 @@ PAPERLESS_OCR_ROTATE_PAGES=<bool> PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num> Adjust the threshold for automatic page rotation by ``PAPERLESS_OCR_ROTATE_PAGES``. This is an arbitrary value reported by tesseract. "15" is a very conservative value, - whereas "2" is a very aggressive option and will often result correctly rotated pages + whereas "2" is a very aggressive option and will often result in correctly rotated pages being rotated as well. Defaults to "12". @@ -338,7 +338,7 @@ PAPERLESS_OCR_USER_ARGS=<json> the API of OCRmyPDF, you have to specify these in a format that can be passed to the API. See `the API reference of OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/api.html#reference>`_ for valid parameters. All command line options are supported, but they - use underscores instead of dashed. + use underscores instead of dashes. .. caution:: From c3da66039a1893457b328abcb80bdd9692c2bbec Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 23 Feb 2021 13:21:11 +0100 Subject: [PATCH 347/898] fix pycodestyle and messages --- src/documents/serialisers.py | 5 ++++- src/locale/en_US/LC_MESSAGES/django.po | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 652e5fe30..adda7117e 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -48,7 +48,10 @@ class MatchingModelSerializer(serializers.ModelSerializer): try: re.compile(match) except Exception as e: - raise serializers.ValidationError(_("Invalid regular expresssion: ") + str(e)) + raise serializers.ValidationError( + _("Invalid regular expresssion: %(error)s") % + {'error': str(e)} + ) return match diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index c234d5c2a..27d628455 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 12:30+0100\n" +"POT-Creation-Date: 2021-02-23 13:20+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" @@ -347,10 +347,11 @@ msgid "filter rules" msgstr "" #: documents/serialisers.py:52 -msgid "Invalid regular expresssion: " +#, python-format +msgid "Invalid regular expresssion: %(error)s" msgstr "" -#: documents/serialisers.py:376 +#: documents/serialisers.py:378 #, python-format msgid "File type %(type)s not supported" msgstr "" From 3926362f5b829ea4c46a5b5405c1fc6ec21cf767 Mon Sep 17 00:00:00 2001 From: Bishop Clark <bishopolis@gmail.com> Date: Tue, 23 Feb 2021 22:09:12 -0800 Subject: [PATCH 348/898] Update README.md Like 'stuff' and 'traffic', 'mail' gets no 's'. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83ef1c1ed..aebd774e0 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Here's what you get: * Searching for similar documents ("More like this") * Email processing: Paperless adds documents from your email accounts. * Configure multiple accounts and filters for each account. - * When adding documents from mails, paperless can move these mails to a new folder, mark them as read, flag them as important or delete them. + * When adding documents from mail, paperless can move these mail to a new folder, mark them as read, flag them as important or delete them. * Machine learning powered document matching. * Paperless learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless. * Optimized for multi core systems: Paperless-ng consumes multiple documents in parallel. From 463a4912d3a56221e1ff260aa01a8efde62efad9 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 09:09:47 +0000 Subject: [PATCH 349/898] Apply translations in fr translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'fr' language. --- src/locale/fr/LC_MESSAGES/django.po | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/locale/fr/LC_MESSAGES/django.po b/src/locale/fr/LC_MESSAGES/django.po index 244d45fb5..6acd81649 100644 --- a/src/locale/fr/LC_MESSAGES/django.po +++ b/src/locale/fr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"POT-Creation-Date: 2021-02-23 13:20+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Philmo67, 2021\n" "Language-Team: French (https://www.transifex.com/paperless/teams/115905/fr/)\n" @@ -356,7 +356,12 @@ msgstr "règle de filtrage" msgid "filter rules" msgstr "règles de filtrage" -#: documents/serialisers.py:370 +#: documents/serialisers.py:52 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Expression régulière incorrecte : %(error)s" + +#: documents/serialisers.py:378 #, python-format msgid "File type %(type)s not supported" msgstr "Type de fichier %(type)s non pris en charge" @@ -423,7 +428,7 @@ msgstr "Néerlandais" msgid "French" msgstr "Français" -#: paperless/urls.py:114 +#: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" From 7e4f85326e1f94de3d0ab8fa5c0f2b10a45cc071 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 11:52:24 +0000 Subject: [PATCH 350/898] Apply translations in de translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index d1a07d18f..c031ebc85 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 12:30+0100\n" +"POT-Creation-Date: 2021-02-23 13:20+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" @@ -355,10 +355,11 @@ msgid "filter rules" msgstr "Filterregeln" #: documents/serialisers.py:52 -msgid "Invalid regular expresssion: " -msgstr "Ungültiger regulärer Ausdruck:" +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Ungültiger regulärer Ausdruck: %(error)s" -#: documents/serialisers.py:376 +#: documents/serialisers.py:378 #, python-format msgid "File type %(type)s not supported" msgstr "Dateityp %(type)s nicht unterstützt" From 9f9861ed76eb7d154f72555c3aeb4204627038a1 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 13:33:41 +0000 Subject: [PATCH 351/898] Translate /src-ui/messages.xlf in pt_BR translation completed for the source file '/src-ui/messages.xlf' on the 'pt_BR' language. --- src-ui/src/locale/messages.pt_BR.xlf | 2337 ++++++++++++++++++++++++++ 1 file changed, 2337 insertions(+) create mode 100644 src-ui/src/locale/messages.pt_BR.xlf diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf new file mode 100644 index 000000000..ac3b557ad --- /dev/null +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -0,0 +1,2337 @@ +<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="pt-BR"> + <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Documento adicionado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Documento <x equiv-text="status.filename" id="PH"/> foi adicionado ao paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Abrir documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Não foi possível adicionar <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>Novo documento detectado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Documento <x equiv-text="status.filename" id="PH"/> está sendo processado pelo paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4733307402565258070"> + <source>Documents</source> + <target>Documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2155249406916744630"> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>Visualização &quot;<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>&quot; salva com sucesso.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6837554170707123455"> + <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> + <target>Visualização &quot;<x equiv-text="savedView.name" id="PH"/>&quot; criada com sucesso.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <source>Select</source> + <target>Selecionar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <source>Select none</source> + <target>Selecionar nenhum</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <source>Select page</source> + <target>Selecionar página</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <source>Select all</source> + <target>Selecionar todos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <source>Sort</source> + <target>Ordenar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <source>Views</source> + <target>Visualizações</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <source>Save as...</source> + <target>Salvar como...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Salvar &quot;<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Selecionado <x id="INTERPOLATION"/> de um documento} other {Selecionado <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documentos}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Um documento} other {<x id="INTERPOLATION"/> documentos}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <source>(filtered)</source> + <target>(filtrado)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <source>ASN</source> + <target>NSA</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <source>Correspondent</source> + <target>Correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <source>Title</source> + <target>Título</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <source>Document type</source> + <target>Tipo de Documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <source>Created</source> + <target>Criado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <source>Added</source> + <target>Adicionado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9021887951960049161"> + <source>Confirm delete</source> + <target>Confirmar exclusão</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5382975254277698192"> + <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> + <target>Você realmente deseja excluir o documento &quot;<x equiv-text="this.document.title" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6691075929777935948"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <target>Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="719892092227206532"> + <source>Delete document</source> + <target>Excluir documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1844801255494293730"> + <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> + <target>Erro ao excluir documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <source>Delete</source> + <target>Excluir</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <source>Download</source> + <target>Baixar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <source>More like this</source> + <target>Mais como este</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <source>Close</source> + <target>Fechar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <source>Details</source> + <target>Detalhes</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <source>Content</source> + <target>Conteúdo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <source>Metadata</source> + <target>Metadados</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <source>Discard</source> + <target>Descartar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <source>Save</source> + <target>Salvar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <source>Page</source> + <target>Página</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> + <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> + <target>de <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <source>Download original</source> + <target>Baixar original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <source>Archive serial number</source> + <target>Número de série de arquivamento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <source>Date created</source> + <target>Data de criação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <source>Date modified</source> + <target>Data de modificação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <source>Date added</source> + <target>Data de adição</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <source>Media filename</source> + <target>Nome do arquivo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <source>Original MD5 checksum</source> + <target>Soma de verificação MD5 original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <source>Original file size</source> + <target>Tamanho do arquivo original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <source>Original mime type</source> + <target>Tipo mime original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <source>Archive MD5 checksum</source> + <target>Soma de verificação MD5 de arquivamento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <source>Archive file size</source> + <target>Tamanho arquivado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <source>Original document metadata</source> + <target>Metadados do documento original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <source>Archived document metadata</source> + <target>Metadados do documento arquivado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <source>Save & next</source> + <target>Salvar & próximo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8765497970646365998"> + <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> + <target>Olá <x equiv-text="this.displayName" id="PH"/>, bem-vindo ao Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7016571167317583872"> + <source>Welcome to Paperless-ng!</source> + <target>Bem-vindo ao Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <source>Dashboard</source> + <target>Painel de controle</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="93754014749412887"> + <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Você realmente deseja excluir a etiqueta &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">30</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <source>Tags</source> + <target>Etiquetas</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <source>Create</source> + <target>Criar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <source>Filter by:</source> + <target>Filtrar por:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <source>Name</source> + <target>Nome</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <source>Color</source> + <target>Cor</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <source>Matching</source> + <target>Detecção</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <source>Document count</source> + <target>Número de documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <source>Actions</source> + <target>Ações</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <source>Documents</source> + <target>Documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <source>Edit</source> + <target>Editar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4990731724078522539"> + <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Você realmente deseja excluir o tipo de documento &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <source>Document types</source> + <target>Tipos de documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <source>Logs</source> + <target>Logs</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5610279464668232148"> + <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> + <target>Visualização &quot;<x equiv-text="savedView.name" id="PH"/>&quot; excluída.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5647210819299459618"> + <source>Settings saved successfully.</source> + <target>Configurações salvas com sucesso.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6839066544204061364"> + <source>Use system language</source> + <target>Usar linguagem do sistema</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7729897675462249787"> + <source>Use date format of display language</source> + <target>Usar formato de data da linguagem de exibição</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8488620293789898901"> + <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Erro ao salvar configurações: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <source>Settings</source> + <target>Configurações</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <source>General settings</source> + <target>Configurações gerais</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Notificações</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <source>Saved views</source> + <target>Visualizações</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">133</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <source>Appearance</source> + <target>Aparência</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <source>Display language</source> + <target>Linguagem de exibição</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <source>You need to reload the page after applying a new language.</source> + <target>Você precisar recarregar a página depois de escolher uma nova linguagem.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <source>Date display</source> + <target>Exibição de data</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <source>Date format</source> + <target>Formato de data</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> + <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Curto: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> + <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Médio: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> + <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Longo: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <source>Items per page</source> + <target>Itens por página</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <source>Document editor</source> + <target>Editor de documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <source>Use PDF viewer provided by the browser</source> + <target>Usar visualizador de PDF do navegador</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <target>Isso é geralmente mais rápido para exibir grandes documentos PDF, mas poderá não funcionar em alguns navegadores.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <source>Dark mode</source> + <target>Modo noturno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <source>Use system settings</source> + <target>Usar configurações do sistema</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <source>Enable dark mode</source> + <target>Habilitar modo noturno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <source>Bulk editing</source> + <target>Edição em massa</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <source>Show confirmation dialogs</source> + <target>Mostrar janelas de confirmação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <source>Deleting documents will always ask for confirmation.</source> + <target>Ao excluir um documento, sempre será pedido uma confirmação.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <source>Apply on close</source> + <target>Aplicar ao fechar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Processamento de documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Exibir notificações quando novos documentos forem detectados</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Exibir notificações quando o processamento de um documento concluir com sucesso</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Exibir notificações quando o processamento de um documento falhar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Não exibir notificações no painel de controle</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <source>Appears on</source> + <target>Aparece em</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">145</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <source>Show on dashboard</source> + <target>Exibir no painel de controle</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">148</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <source>Show in sidebar</source> + <target>Mostrar na navegação lateral</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">152</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <source>No saved views defined.</source> + <target>Nenhuma visualização definida.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <source>404 Not Found</source> + <target>404 Não Encontrado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7427874343955308724"> + <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Você realmente deseja excluir o correspondente &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <source>Correspondents</source> + <target>Correspondentes</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <source>Last correspondence</source> + <target>Última correspondência</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1234709746630139322"> + <source>Confirmation</source> + <target>Confirmação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9178182467454450952"> + <source>Confirm</source> + <target>Confirmar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <source>Cancel</source> + <target>Cancelar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6457471243969293847"> + <source>Create new correspondent</source> + <target>Criar novo correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2059822531169388684"> + <source>Edit correspondent</source> + <target>Editar correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <source>Matching algorithm</source> + <target>Algoritmo de detecção</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <source>Matching pattern</source> + <target>Padrão de detecção</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <source>Case insensitive</source> + <target>Não diferenciar maiúsculas de minúsculas</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9153094873118985366"> + <source>Create new tag</source> + <target>Criar nova etiqueta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5872175735754226507"> + <source>Edit tag</source> + <target>Editar etiqueta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <source>Inbox tag</source> + <target>Etiqueta caixa de entrada</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <target>Etiquetas de caixa de entrada são atribuídas automaticamente para todos os documentos consumidos.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6672809941092516947"> + <source>Create new document type</source> + <target>Criar novo tipo de documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="36335016091244220"> + <source>Edit document type</source> + <target>Editar tipo de documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <source>Search results</source> + <target>Resultados da busca</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> + <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> + <target>Termo de pesquisa inválido: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> + <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> + <target>Exibindo documentos similares a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> + <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> + <target>Termo de pesquisa: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> + <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> + <target>Você quis dizer &quot;<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <target>{VAR_PLURAL, plural, =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <source>Paperless-ng</source> + <target>Paperless-ng</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note from="description" priority="1">app title</note> + </trans-unit> + <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <source>Search documents</source> + <target>Procurar documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <source>Logout</source> + <target>Encerrar sessão</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <source>Manage</source> + <target>Gerenciar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <source>Admin</source> + <target>Admin</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Informação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">155</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <source>Documentation</source> + <target>Documentação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <source>GitHub</source> + <target>GitHub</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Sugerir uma idéia</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> + <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> + <target>Sessão iniciada como <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <source>Open documents</source> + <target>Abrir documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <source>Close all</source> + <target>Fechar todos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">101</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5195932016807797291"> + <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> + <target>Correspondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8170755470576301659"> + <source>Without correspondent</source> + <target>Sem correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">31</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8705701325879965907"> + <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> + <target>Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4362173610367509215"> + <source>Without document type</source> + <target>Sem tipo de documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8180755793012580465"> + <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> + <target>Etiqueta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">42</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6494566478302448576"> + <source>Without any tag</source> + <target>Sem etiquetas</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">46</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Título: <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <source>Filter tags</source> + <target>Filtrar etiquetas</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <source>Filter correspondents</source> + <target>Filtrar correspondentes</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <source>Filter document types</source> + <target>Filtrar tipos de documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <source>Reset filters</source> + <target>Limpar filtros</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7593728289020204896"> + <source>Not assigned</source> + <target>Não atribuído</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + </trans-unit> + <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <source>Apply</source> + <target>Aplicar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4873149362496451858"> + <source>Last 7 days</source> + <target>Últimos 7 dias</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4463380307954693363"> + <source>Last month</source> + <target>Último mês</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8697368973702409683"> + <source>Last 3 months</source> + <target>Últimos 3 meses</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3566342898065860218"> + <source>Last year</source> + <target>Último ano</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <source>After</source> + <target>Antes</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <source>Before</source> + <target>Depois</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <source>Clear</source> + <target>Limpar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <source>View</source> + <target>Ver</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> + <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> + <target>Criado: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <source>Filter by correspondent</source> + <target>Filtrar por correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <source>Filter by tag</source> + <target>Filtrar por etiqueta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <source>Score:</source> + <target>Nota:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <source>View in browser</source> + <target>Visualizar no navegador</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7985804062689412812"> + <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Erro ao executar operação em massa: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8639884465898458690"> + <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> + <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot; e &quot;<x equiv-text="items[1].name" id="PH_1"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + </trans-unit> + <trans-unit datatype="html" id="760986369763309193"> + <source>, </source> + <target>, </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + </trans-unit> + <trans-unit datatype="html" id="1822679894391095557"> + <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> + <target><x equiv-text="list" id="PH"/> e &quot;<x equiv-text="items[items.length - 1].name" id="PH_1"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + </trans-unit> + <trans-unit datatype="html" id="4137232459980262849"> + <source>Confirm tags assignment</source> + <target>Confirmar atribuição de etiqueta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6619516195038467207"> + <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Essa operação irá adicionar a etiqueta &quot;<x equiv-text="tag.name" id="PH"/>&quot; em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1894412783609570695"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s). </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7181166515756808573"> + <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Essa operação irá remover a etiqueta &quot;<x equiv-text="tag.name" id="PH"/>&quot; de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3819792277998068944"> + <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Essa operação irá remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2739066218579571288"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> + <target>Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de <x equiv-text="this.list.selected.size" id="PH_2"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2996713129519325161"> + <source>Confirm correspondent assignment</source> + <target>Confirmar atribuição de correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6900893559485781849"> + <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Essa operação irá atribuir o correspondente &quot;<x equiv-text="correspondent.name" id="PH"/>&quot; para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1257522660364398440"> + <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Essa operação irá remover o correspondente de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5393409374423140648"> + <source>Confirm document type assignment</source> + <target>Confirmar atribuição de tipo de documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="332180123895325027"> + <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Essa operação irá atribuir o tipo de documento &quot;<x equiv-text="documentType.name" id="PH"/>&quot; para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2236642492594872779"> + <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Essa operação irá remover o tipo de documento de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="749430623564850405"> + <source>Delete confirm</source> + <target>Confirmar exlcusão</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4303174930844518780"> + <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Essa operação irá excluir permanentemente <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5641451190833696892"> + <source>This operation cannot be undone.</source> + <target>Essa operação não pode ser revertida.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6734339521247847366"> + <source>Delete document(s)</source> + <target>Apagar documento(s)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <source>Select:</source> + <target>Selecionar:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <source>All</source> + <target>Todos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <source>Edit:</source> + <target>Editar:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Descarregar originais</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Sugestões:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <source>Save current view</source> + <target>Salvar visualização atual</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <source>Show all</source> + <target>Mostrar todos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <source>Statistics</source> + <target>Estatísticas</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Total de documentos: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documentos na caixa de entrada: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>Processando: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Falha: <x equiv-text="countFailed" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Adicionado: <x equiv-text="countSuccess" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Conectando...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Enviando...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Envio concluído, esperando...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>Erro HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <source>Upload new documents</source> + <target>Enviar novos documentos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <source>Drop documents here or</source> + <target>Solte documentos aqui ou</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <source>Browse files</source> + <target>Navegar arquivos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Esconder completos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + </trans-unit> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Mais um documento} other {Mais <x id="INTERPOLATION"/> documentos}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Abrir documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <source>First steps</source> + <target>Primeiros passos</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <source>Paperless is running! :)</source> + <target>O Paperless está a correr! :)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <target>Pode começar a carregar documentos deixando-os na caixa de carregamento de ficheiros à direita, ou deixando-os na pasta de consumo pré-configurada, que eles depois aparecem na lista de documentos. Depois de ter adicionado alguns meta-dados aos seus documentos, utilize os mecanismos de filtragem do Paperless para criar visualizações personalizadas (tais como 'Adicionados recentemente', 'Etiquetados com PARAFAZER'). Posteriormente estes aparecerão no painel em vez desta mensagem.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <source>Paperless offers some more features that try to make your life easier:</source> + <target>O Paperless oferece algumas funcionalidades para tentar tornar a sua vida mais fácil:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <target>Assim que já tenha alguns documentos previamente adicionados com os respetivos meta-dados, o Paperless consegue adicionar automaticamente meta-dados aos novos documentos.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <target>Pode configurar o Paperless para ler os seus e-mails e adicionar os documentos em anexo à plataforma.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <target>Consulte a documentação para saber como utilizar estas funcionalidades. A secção sobre utilização básica têm informação para o ajudar a utilizar a plataforma de uma forma geral.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="218403386307979629"> + <source>Metadata</source> + <target>Metadados</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3797570084942068182"> + <source>Select</source> + <target>Selecione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7103181924469214926"> + <source>Please select an object</source> + <target>Por favor selecione um objeto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2807800733729323332"> + <source>Yes</source> + <target>Sim</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3542042671420335679"> + <source>No</source> + <target>Não</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7536524521722799066"> + <source>(no title)</source> + <target>(sem título)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1206520795340730278"> + <source>English (US)</source> + <target>Inglês (US)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">82</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>Inglês (GB)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1858110241312746425"> + <source>German</source> + <target>Alemão</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">84</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3071065188816255493"> + <source>Dutch</source> + <target>Holandês</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7633754075223722162"> + <source>French</source> + <target>Francês</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Documento já existente.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>Arquivo não encontrado.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Script pré-consumo não existe.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Erro ao executar script pré-consumo.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Script pós-consumo não existe.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Erro ao executar script pós-consumo.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Novo arquivo recebido.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>Tipo de arquivo não suportado.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Processando documento...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Gerando imagem...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Buscando data do documento...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Salvando documento...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Encerrado.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1519954996184640001"> + <source>Error</source> + <target>Erro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5037437391296624618"> + <source>Information</source> + <target>Informação</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517688192215738656"> + <source>ASN</source> + <target>NSA</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2691296884221415710"> + <source>Correspondent</source> + <target>Correspondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Título</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5066119607229701477"> + <source>Document type</source> + <target>Tipo de Documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4207916966377787111"> + <source>Created</source> + <target>Criado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="231679111972850796"> + <source>Added</source> + <target>Adicionado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3553216189604488439"> + <source>Modified</source> + <target>Modificado</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2056433880533904076"> + <source>Light blue</source> + <target>Azul claro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">6</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4082253113407591781"> + <source>Blue</source> + <target>Azul</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1143414876575720034"> + <source>Light green</source> + <target>Verde claro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="119581980963263815"> + <source>Green</source> + <target>Verde</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3250646524116252719"> + <source>Light red</source> + <target>Vermelho claro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1628552745302385832"> + <source>Red </source> + <target>Vermelho</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5479028842846122610"> + <source>Light orange</source> + <target>Laranja claro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8598918991528773310"> + <source>Orange</source> + <target>Laranja</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1789283185177957430"> + <source>Light violet</source> + <target>Violeta claro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2682868487071320453"> + <source>Violet</source> + <target>Violeta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1449010446077321264"> + <source>Brown</source> + <target>Marrom</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30300572504753589"> + <source>Black</source> + <target>Preto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="461048771215121187"> + <source>Light grey</source> + <target>Cinza claro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4561076822163447092"> + <source>Create new item</source> + <target>Criar novo item</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5324147361912094446"> + <source>Edit item</source> + <target>Editar item</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1699589597032579396"> + <source>Could not save element: <x equiv-text="error" id="PH"/></source> + <target>Não podemos salvar elemento: <x equiv-text="error" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="810888510148304696"> + <source>Automatic</source> + <target>Automático</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5044611416737085530"> + <source>Do you really want to delete this element?</source> + <target>Você realmente quer excluir esse elemento?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8371896857609524947"> + <source>Associated documents will not be deleted.</source> + <target>Documentos associados não serão excluidos.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7022070615528435141"> + <source>Delete</source> + <target>Excluir</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5467489005440577210"> + <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Erro ao excluir elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5851669019930456395"> + <source>Any word</source> + <target>Qualquer palavra</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517655726614958140"> + <source>Any: Document contains any of these words (space separated)</source> + <target>Qualquer: Documento contém qualquer uma dessas palavras (separadas por espaço)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="700315718208181326"> + <source>All words</source> + <target>Todas as palavras</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="111914402588955480"> + <source>All: Document contains all of these words (space separated)</source> + <target>Todas: Documento contém todas essas palavras (separadas por espaço)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9180173992399180575"> + <source>Exact match</source> + <target>Detecção exata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7109184332944610787"> + <source>Exact: Document contains this string</source> + <target>Exata: Documento contém essa palavra</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1338733395833138319"> + <source>Regular expression</source> + <target>Expressão regular</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7548151332424148033"> + <source>Regular expression: Document matches this regular expression</source> + <target>Expressão regular: Documento condiz com essa expressão regular</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1856513373880048959"> + <source>Fuzzy word</source> + <target>Palavra difusa</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8419167206585286450"> + <source>Fuzzy: Document contains a word similar to this word</source> + <target>Fuzzy: Documento contém uma palavra similar à essa.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2167862279705099846"> + <source>Auto: Learn matching automatically</source> + <target>Auto: Aprender detecção automaticamente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + </body> + </file> +</xliff> \ No newline at end of file From 56d1dfbbb86222ad65d4d9ddc0411aef6fa90a51 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 15:00:14 +0000 Subject: [PATCH 352/898] Apply translations in pt_BR translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'pt_BR' language. --- src/locale/pt_BR/LC_MESSAGES/django.po | 668 +++++++++++++++++++++++++ 1 file changed, 668 insertions(+) create mode 100644 src/locale/pt_BR/LC_MESSAGES/django.po diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..e1a74b104 --- /dev/null +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,668 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +# Translators: +# Jonas Winkler, 2021 +# Rodrigo A <rodrigo.avelino@meliuz.com.br>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-23 13:20+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" +"Last-Translator: Rodrigo A <rodrigo.avelino@meliuz.com.br>, 2021\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/paperless/teams/115905/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Documentos" + +#: documents/models.py:32 +msgid "Any word" +msgstr "Qualquer palavra" + +#: documents/models.py:33 +msgid "All words" +msgstr "Todas as palavras" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "Detecção exata" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "Expressão regular" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "Palavra difusa (fuzzy)" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "Automático" + +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "nome" + +#: documents/models.py:45 +msgid "match" +msgstr "detecção" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "algoritmo de detecção" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "diferencia maiúsculas de minúsculas" + +#: documents/models.py:74 documents/models.py:134 +msgid "correspondent" +msgstr "correspondente" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "correspondentes" + +#: documents/models.py:97 +msgid "color" +msgstr "cor" + +#: documents/models.py:101 +msgid "is inbox tag" +msgstr "é etiqueta caixa de entrada" + +#: documents/models.py:103 +msgid "" +"Marks this tag as an inbox tag: All newly consumed documents will be tagged " +"with inbox tags." +msgstr "" +"Marca essa etiqueta como caixa de entrada: Todos os novos documentos " +"consumidos terão as etiquetas de caixa de entrada." + +#: documents/models.py:108 +msgid "tag" +msgstr "etiqueta" + +#: documents/models.py:109 documents/models.py:165 +msgid "tags" +msgstr "etiquetas" + +#: documents/models.py:115 documents/models.py:147 +msgid "document type" +msgstr "tipo de documento" + +#: documents/models.py:116 +msgid "document types" +msgstr "tipos de documento" + +#: documents/models.py:124 +msgid "Unencrypted" +msgstr "Não encriptado" + +#: documents/models.py:125 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Encriptado com GNU Privacy Guard" + +#: documents/models.py:138 +msgid "title" +msgstr "título" + +#: documents/models.py:151 +msgid "content" +msgstr "conteúdo" + +#: documents/models.py:153 +msgid "" +"The raw, text-only data of the document. This field is primarily used for " +"searching." +msgstr "" +"O conteúdo de texto bruto do documento. Esse campo é usado principalmente " +"para busca." + +#: documents/models.py:158 +msgid "mime type" +msgstr "tipo mime" + +#: documents/models.py:169 +msgid "checksum" +msgstr "some de verificação" + +#: documents/models.py:173 +msgid "The checksum of the original document." +msgstr "A soma de verificação original do documento." + +#: documents/models.py:177 +msgid "archive checksum" +msgstr "Soma de verificação de arquivamento." + +#: documents/models.py:182 +msgid "The checksum of the archived document." +msgstr "A soma de verificação do documento arquivado." + +#: documents/models.py:186 documents/models.py:342 +msgid "created" +msgstr "criado" + +#: documents/models.py:190 +msgid "modified" +msgstr "modificado" + +#: documents/models.py:194 +msgid "storage type" +msgstr "tipo de armazenamento" + +#: documents/models.py:202 +msgid "added" +msgstr "adicionado" + +#: documents/models.py:206 +msgid "filename" +msgstr "nome do arquivo" + +#: documents/models.py:212 +msgid "Current filename in storage" +msgstr "Nome do arquivo atual armazenado" + +#: documents/models.py:216 +msgid "archive filename" +msgstr "nome do arquivo para arquivamento" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "Nome do arquivo para arquivamento armazenado" + +#: documents/models.py:226 +msgid "archive serial number" +msgstr "número de sério de arquivamento" + +#: documents/models.py:231 +msgid "The position of this document in your physical document archive." +msgstr "A posição deste documento no seu arquivamento físico." + +#: documents/models.py:237 +msgid "document" +msgstr "documento" + +#: documents/models.py:238 +msgid "documents" +msgstr "documentos" + +#: documents/models.py:325 +msgid "debug" +msgstr "debug" + +#: documents/models.py:326 +msgid "information" +msgstr "informação" + +#: documents/models.py:327 +msgid "warning" +msgstr "aviso" + +#: documents/models.py:328 +msgid "error" +msgstr "erro" + +#: documents/models.py:329 +msgid "critical" +msgstr "crítico" + +#: documents/models.py:333 +msgid "group" +msgstr "grupo" + +#: documents/models.py:336 +msgid "message" +msgstr "mensagem" + +#: documents/models.py:339 +msgid "level" +msgstr "nível" + +#: documents/models.py:346 +msgid "log" +msgstr "log" + +#: documents/models.py:347 +msgid "logs" +msgstr "logs" + +#: documents/models.py:358 documents/models.py:408 +msgid "saved view" +msgstr "visualização" + +#: documents/models.py:359 +msgid "saved views" +msgstr "visualizações" + +#: documents/models.py:362 +msgid "user" +msgstr "usuário" + +#: documents/models.py:368 +msgid "show on dashboard" +msgstr "exibir no painel de controle" + +#: documents/models.py:371 +msgid "show in sidebar" +msgstr "exibir no painel lateral" + +#: documents/models.py:375 +msgid "sort field" +msgstr "ordenar campo" + +#: documents/models.py:378 +msgid "sort reverse" +msgstr "odernar reverso" + +#: documents/models.py:384 +msgid "title contains" +msgstr "título contém" + +#: documents/models.py:385 +msgid "content contains" +msgstr "conteúdo contém" + +#: documents/models.py:386 +msgid "ASN is" +msgstr "NSA é" + +#: documents/models.py:387 +msgid "correspondent is" +msgstr "correspondente é" + +#: documents/models.py:388 +msgid "document type is" +msgstr "tipo de documento é" + +#: documents/models.py:389 +msgid "is in inbox" +msgstr "é caixa de entrada" + +#: documents/models.py:390 +msgid "has tag" +msgstr "contém etiqueta" + +#: documents/models.py:391 +msgid "has any tag" +msgstr "contém qualquer etiqueta" + +#: documents/models.py:392 +msgid "created before" +msgstr "criado antes de" + +#: documents/models.py:393 +msgid "created after" +msgstr "criado depois de" + +#: documents/models.py:394 +msgid "created year is" +msgstr "ano de criação é" + +#: documents/models.py:395 +msgid "created month is" +msgstr "mês de criação é" + +#: documents/models.py:396 +msgid "created day is" +msgstr "dia de criação é" + +#: documents/models.py:397 +msgid "added before" +msgstr "adicionado antes de" + +#: documents/models.py:398 +msgid "added after" +msgstr "adicionado depois de" + +#: documents/models.py:399 +msgid "modified before" +msgstr "modificado antes de" + +#: documents/models.py:400 +msgid "modified after" +msgstr "modificado depois de" + +#: documents/models.py:401 +msgid "does not have tag" +msgstr "não tem etiqueta" + +#: documents/models.py:412 +msgid "rule type" +msgstr "tipo de regra" + +#: documents/models.py:416 +msgid "value" +msgstr "valor" + +#: documents/models.py:422 +msgid "filter rule" +msgstr "regra de filtragem" + +#: documents/models.py:423 +msgid "filter rules" +msgstr "regras de filtragem" + +#: documents/serialisers.py:52 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Expressão regular inválida: %(error)s" + +#: documents/serialisers.py:378 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Tipo de arquivo %(type)s não suportado" + +#: documents/templates/index.html:20 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng está carregando..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Paperless-ng saiu" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "Sua sessão foi encerrada com sucesso. Até mais!" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Entre novamente" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Entrar no Paperless-ng" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Por favor, entre na sua conta" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Seu usuário e senha estão incorretos. Por favor, tente novamente." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Usuário" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Senha" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Entrar" + +#: paperless/settings.py:291 +msgid "English (US)" +msgstr "Inglês (EUA)" + +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "Inglês (GB)" + +#: paperless/settings.py:293 +msgid "German" +msgstr "Alemão" + +#: paperless/settings.py:294 +msgid "Dutch" +msgstr "Holandês" + +#: paperless/settings.py:295 +msgid "French" +msgstr "Francês" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "Administração do Paperless-ng" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filtro" + +#: paperless_mail/admin.py:27 +msgid "" +"Paperless will only process mails that match ALL of the filters given below." +msgstr "" +"Paperless processará somente e-mails que se encaixam em TODOS os filtros " +"abaixo." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Ações" + +#: paperless_mail/admin.py:39 +msgid "" +"The action applied to the mail. This action is only performed when documents" +" were consumed from the mail. Mails without attachments will remain entirely" +" untouched." +msgstr "" +"A ação se aplica ao e-mail. Essa ação só é executada quando documentos foram" +" consumidos do e-mail. E-mails sem anexos permanecerão intactos." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadados" + +#: paperless_mail/admin.py:48 +msgid "" +"Assign metadata to documents consumed from this rule automatically. If you " +"do not assign tags, types or correspondents here, paperless will still " +"process all matching rules that you have defined." +msgstr "" +"Atribua metadados aos documentos consumidos por esta regra automaticamente. " +"Se você não atribuir etiquetas, tipos ou correspondentes aqui, paperless " +"ainda sim processará todas as regras de detecção que você definiu." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Paperless mail" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "conta de e-mail" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "contas de e-mail" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Sem encriptação" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Usar SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Usar STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "Servidor IMAP" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "Porta IMAP" + +#: paperless_mail/models.py:36 +msgid "" +"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " +"SSL connections." +msgstr "" +"É geralmente 143 para não encriptado e conexões STARTTLS, e 993 para " +"conexões SSL." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "segurança IMAP" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "usuário" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "senha" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "regra de e-mail" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "regras de e-mail" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Processar somente anexos." + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Processar todos os arquivos, incluindo anexos 'inline'." + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Marcar como lido, não processar e-mails lidos" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Sinalizar o e-mail, não processar e-mails sinalizados" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Mover para pasta especificada" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Excluir" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Usar assunto como título" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Usar nome do arquivo anexo como título" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Não atribuir um correspondente" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Usar endereço de e-mail" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Usar nome (ou endereço de e-mail se não disponível)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Usar correspondente selecionado abaixo" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "ordem" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "conta" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "pasta" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filtrar de" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "filtrar assunto" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "filtrar corpo" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "filtrar nome do arquivo anexo" + +#: paperless_mail/models.py:140 +msgid "" +"Only consume documents which entirely match this filename if specified. " +"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" +"Consumir somente documentos que correspondem a este nome de arquivo se especificado.\n" +"Curingas como *.pdf ou *invoice* são permitidos. Sem diferenciação de maiúsculas e minúsculas." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "idade máxima" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "Especificada em dias." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "tipo de anexo" + +#: paperless_mail/models.py:154 +msgid "" +"Inline attachments include embedded images, so it's best to combine this " +"option with a filename filter." +msgstr "" +"Anexos inline incluem imagens inseridas, por isso é melhor combinar essa " +"opção com um filtro de nome de arquivo." + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "ação" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "parâmetro da ação" + +#: paperless_mail/models.py:167 +msgid "" +"Additional parameter for the action selected above, i.e., the target folder " +"of the move to folder action." +msgstr "" +"Parâmetro adicional para a ação selecionada acima, por exemplo: a pasta de " +"destino da ação de mover pasta." + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "atribuir título de" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "atribuir esta etiqueta" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "atribuir este tipo de documento" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "atribuir correspondente de" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "atribuir este correspondente" From ad8a2555b2acf8846869bacedfa11af0a12677cd Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 16:39:41 +0100 Subject: [PATCH 353/898] add configuration for pt-br --- src-ui/angular.json | 3 ++- src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 3 ++- src/paperless/settings.py | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index edf428fc7..2877408d2 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -19,7 +19,8 @@ "de": "src/locale/messages.de.xlf", "nl-NL": "src/locale/messages.nl_NL.xlf", "fr": "src/locale/messages.fr.xlf", - "en-GB": "src/locale/messages.en_GB.xlf" + "en-GB": "src/locale/messages.en_GB.xlf", + "pt-BR": "src/locale/messages.pt_BR.xlf" } }, "architect": { diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 54c19a216..0773a9ace 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -64,11 +64,13 @@ import { CustomDatePipe } from './pipes/custom-date.pipe'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; import localeDe from '@angular/common/locales/de'; +import localePt from '@angular/common/locales/pt-PT'; import localeEnGb from '@angular/common/locales/en-GB'; registerLocaleData(localeFr) registerLocaleData(localeNl) registerLocaleData(localeDe) +registerLocaleData(localePt, "pt-BR") registerLocaleData(localeEnGb) @NgModule({ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index d511fa65f..393417e31 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -83,7 +83,8 @@ export class SettingsService { {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)"}, {code: "de", name: $localize`German`, englishName: "German"}, {code: "nl", name: $localize`Dutch`, englishName: "Dutch"}, - {code: "fr", name: $localize`French`, englishName: "French"} + {code: "fr", name: $localize`French`, englishName: "French"}, + {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)"} ] } diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 7c4e36391..4c860351f 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -292,7 +292,8 @@ LANGUAGES = [ ("en-gb", _("English (GB)")), ("de", _("German")), ("nl-nl", _("Dutch")), - ("fr", _("French")) + ("fr", _("French")), + ("pt-br", _("Portuguese (Brazil)")) ] LOCALE_PATHS = [ From a4ac86bc7b8c97d83bfe05d5aa60012857d079c5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 16:43:55 +0100 Subject: [PATCH 354/898] fix up quoting (hope this gets pushed into transifex --- src-ui/src/locale/messages.pt_BR.xlf | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index ac3b557ad..0efe12ad0 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -59,7 +59,7 @@ </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>Visualização &quot;<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>&quot; salva com sucesso.</target> + <target>Visualização "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" salva com sucesso.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> @@ -67,7 +67,7 @@ </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>Visualização &quot;<x equiv-text="savedView.name" id="PH"/>&quot; criada com sucesso.</target> + <target>Visualização "<x equiv-text="savedView.name" id="PH"/>" criada com sucesso.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> @@ -131,7 +131,7 @@ </trans-unit> <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Salvar &quot;<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <target>Salvar "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -219,7 +219,7 @@ </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Você realmente deseja excluir o documento &quot;<x equiv-text="this.document.title" id="PH"/>&quot;?</target> + <target>Você realmente deseja excluir o documento "<x equiv-text="this.document.title" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> @@ -475,7 +475,7 @@ </trans-unit> <trans-unit datatype="html" id="93754014749412887"> <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Você realmente deseja excluir a etiqueta &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Você realmente deseja excluir a etiqueta "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">30</context> @@ -563,7 +563,7 @@ </trans-unit> <trans-unit datatype="html" id="4990731724078522539"> <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Você realmente deseja excluir o tipo de documento &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Você realmente deseja excluir o tipo de documento "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> @@ -587,7 +587,7 @@ </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Visualização &quot;<x equiv-text="savedView.name" id="PH"/>&quot; excluída.</target> + <target>Visualização "<x equiv-text="savedView.name" id="PH"/>" excluída.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">67</context> @@ -907,7 +907,7 @@ </trans-unit> <trans-unit datatype="html" id="7427874343955308724"> <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Você realmente deseja excluir o correspondente &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Você realmente deseja excluir o correspondente "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> @@ -1075,7 +1075,7 @@ </trans-unit> <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Você quis dizer &quot;<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>&quot;?</target> + <target>Você quis dizer "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> @@ -1405,7 +1405,7 @@ </trans-unit> <trans-unit datatype="html" id="7894972847287473517"> <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot;</target> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> @@ -1413,7 +1413,7 @@ </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot; e &quot;<x equiv-text="items[1].name" id="PH_1"/>&quot;</target> + <target>"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> @@ -1431,7 +1431,7 @@ </trans-unit> <trans-unit datatype="html" id="1822679894391095557"> <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> e &quot;<x equiv-text="items[items.length - 1].name" id="PH_1"/>&quot;</target> + <target><x equiv-text="list" id="PH"/> e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> @@ -1448,7 +1448,7 @@ </trans-unit> <trans-unit datatype="html" id="6619516195038467207"> <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá adicionar a etiqueta &quot;<x equiv-text="tag.name" id="PH"/>&quot; em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target>Essa operação irá adicionar a etiqueta "<x equiv-text="tag.name" id="PH"/>" em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> @@ -1464,7 +1464,7 @@ </trans-unit> <trans-unit datatype="html" id="7181166515756808573"> <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá remover a etiqueta &quot;<x equiv-text="tag.name" id="PH"/>&quot; de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target>Essa operação irá remover a etiqueta "<x equiv-text="tag.name" id="PH"/>" de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> @@ -1496,7 +1496,7 @@ </trans-unit> <trans-unit datatype="html" id="6900893559485781849"> <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá atribuir o correspondente &quot;<x equiv-text="correspondent.name" id="PH"/>&quot; para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target>Essa operação irá atribuir o correspondente "<x equiv-text="correspondent.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> @@ -1520,7 +1520,7 @@ </trans-unit> <trans-unit datatype="html" id="332180123895325027"> <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá atribuir o tipo de documento &quot;<x equiv-text="documentType.name" id="PH"/>&quot; para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target>Essa operação irá atribuir o tipo de documento "<x equiv-text="documentType.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> From 1dde1afe05e56a607708dcc999b3252865615ab9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 16:50:05 +0100 Subject: [PATCH 355/898] add translation strings for portuguese --- src-ui/messages.xlf | 37 +++++++++++++++----------- src/locale/en_US/LC_MESSAGES/django.po | 6 ++++- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 95e0fad15..e1747ba03 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -531,28 +531,21 @@ <source>Use system language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">96</context> - </context-group> - </trans-unit> - <trans-unit id="4912706592792948707" datatype="html"> - <source>ISO 8601</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> @@ -1630,35 +1623,49 @@ <source>English (US)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">82</context> + <context context-type="linenumber">84</context> </context-group> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">85</context> </context-group> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">88</context> + </context-group> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">89</context> + </context-group> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 27d628455..c4e8ee97b 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 13:20+0100\n" +"POT-Creation-Date: 2021-02-24 16:49+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" @@ -416,6 +416,10 @@ msgstr "" msgid "French" msgstr "" +#: paperless/settings.py:296 +msgid "Portuguese (Brazil)" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From 4c2efd2caa36c7d93dfe46a7c993eac7bef0d27a Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 17:41:32 +0100 Subject: [PATCH 356/898] update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83ef1c1ed..c935d90a8 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ The documentation for Paperless-ng is available on [ReadTheDocs](https://paperle # Translation -Paperless is currently available in English, German, Dutch and French. Translation is coordinated at transifex: https://www.transifex.com/paperless/paperless-ng +Paperless is currently available in English, German, Dutch, French, and Portuguese. Translation is coordinated at transifex: https://www.transifex.com/paperless/paperless-ng If you want to see paperless in your own language, request that language at transifex and you can start translating after I approve the language. From f35dcf1675a96ae6e1b4f9f81c5b5b8d4b81276d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:00:26 +0100 Subject: [PATCH 357/898] use ng-bootstrap date selector, with proper formatting/parsing according to the current locale #177 --- src-ui/src/app/app.module.ts | 14 +++-- .../input/date-time/date-time.component.html | 13 ---- .../input/date-time/date-time.component.ts | 61 ------------------- .../common/input/date/date.component.html | 15 +++++ .../date.component.scss} | 0 .../date.component.spec.ts} | 12 ++-- .../common/input/date/date.component.ts | 32 ++++++++++ .../document-detail.component.html | 2 +- .../manage/settings/settings.component.ts | 9 +-- src-ui/src/app/services/settings.service.ts | 36 ++++++++--- src-ui/src/app/utils/ngb-date-adapter.ts | 23 +++++++ .../app/utils/ngb-date-parser-formatter.ts | 59 ++++++++++++++++++ 12 files changed, 176 insertions(+), 100 deletions(-) delete mode 100644 src-ui/src/app/components/common/input/date-time/date-time.component.html delete mode 100644 src-ui/src/app/components/common/input/date-time/date-time.component.ts create mode 100644 src-ui/src/app/components/common/input/date/date.component.html rename src-ui/src/app/components/common/input/{date-time/date-time.component.scss => date/date.component.scss} (100%) rename src-ui/src/app/components/common/input/{date-time/date-time.component.spec.ts => date/date.component.spec.ts} (55%) create mode 100644 src-ui/src/app/components/common/input/date/date.component.ts create mode 100644 src-ui/src/app/utils/ngb-date-adapter.ts create mode 100644 src-ui/src/app/utils/ngb-date-parser-formatter.ts diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 0773a9ace..9e0dc56de 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -3,7 +3,7 @@ import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbDateAdapter, NgbDateParserFormatter, NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { DocumentListComponent } from './components/document-list/document-list.component'; import { DocumentDetailComponent } from './components/document-detail/document-detail.component'; @@ -39,7 +39,6 @@ import { SelectComponent } from './components/common/input/select/select.compone import { CheckComponent } from './components/common/input/check/check.component'; import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -import { DateTimeComponent } from './components/common/input/date-time/date-time.component'; import { TagsComponent } from './components/common/input/tags/tags.component'; import { SortableDirective } from './directives/sortable.directive'; import { CookieService } from 'ngx-cookie-service'; @@ -60,6 +59,9 @@ import { NgSelectModule } from '@ng-select/ng-select'; import { NumberComponent } from './components/common/input/number/number.component'; import { SafePipe } from './pipes/safe.pipe'; import { CustomDatePipe } from './pipes/custom-date.pipe'; +import { DateComponent } from './components/common/input/date/date.component'; +import { ISODateAdapter } from './utils/ngb-date-adapter'; +import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; @@ -106,7 +108,6 @@ registerLocaleData(localeEnGb) SelectComponent, CheckComponent, SaveViewConfigDialogComponent, - DateTimeComponent, TagsComponent, SortableDirective, SavedViewWidgetComponent, @@ -122,7 +123,8 @@ registerLocaleData(localeEnGb) SelectDialogComponent, NumberComponent, SafePipe, - CustomDatePipe + CustomDatePipe, + DateComponent ], imports: [ BrowserModule, @@ -144,7 +146,9 @@ registerLocaleData(localeEnGb) multi: true }, FilterPipe, - DocumentTitlePipe + DocumentTitlePipe, + {provide: NgbDateAdapter, useClass: ISODateAdapter}, + {provide: NgbDateParserFormatter, useClass: LocalizedDateParserFormatter} ], bootstrap: [AppComponent] }) diff --git a/src-ui/src/app/components/common/input/date-time/date-time.component.html b/src-ui/src/app/components/common/input/date-time/date-time.component.html deleted file mode 100644 index 7c002db1b..000000000 --- a/src-ui/src/app/components/common/input/date-time/date-time.component.html +++ /dev/null @@ -1,13 +0,0 @@ -<div class="form-row"> - <div class="form-group col"> - <label for="created_date">{{titleDate}}</label> - <input type="date" class="form-control" id="created_date" [(ngModel)]="dateValue" (change)="dateOrTimeChanged()"> - </div> - <div class="form-group col" *ngIf="titleTime"> - <label for="created_time">{{titleTime}}</label> - <input type="time" class="form-control" id="created_time" [(ngModel)]="timeValue" (change)="dateOrTimeChanged()"> - </div> -</div> - - -<!-- <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> --> \ No newline at end of file diff --git a/src-ui/src/app/components/common/input/date-time/date-time.component.ts b/src-ui/src/app/components/common/input/date-time/date-time.component.ts deleted file mode 100644 index bce208ec8..000000000 --- a/src-ui/src/app/components/common/input/date-time/date-time.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { formatDate } from '@angular/common'; -import { Component, forwardRef, Input, OnInit } from '@angular/core'; -import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; - -@Component({ - providers: [{ - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => DateTimeComponent), - multi: true - }], - selector: 'app-input-date-time', - templateUrl: './date-time.component.html', - styleUrls: ['./date-time.component.scss'] -}) -export class DateTimeComponent implements OnInit,ControlValueAccessor { - - constructor() { - } - - onChange = (newValue: any) => {}; - - onTouched = () => {}; - - writeValue(newValue: any): void { - this.dateValue = formatDate(newValue, 'yyyy-MM-dd', "en-US") - this.timeValue = formatDate(newValue, 'HH:mm:ss', 'en-US') - } - registerOnChange(fn: any): void { - this.onChange = fn; - } - registerOnTouched(fn: any): void { - this.onTouched = fn; - } - setDisabledState?(isDisabled: boolean): void { - this.disabled = isDisabled; - } - - @Input() - titleDate: string = "Date" - - @Input() - titleTime: string - - @Input() - disabled: boolean = false - - @Input() - hint: string - - timeValue - - dateValue - - ngOnInit(): void { - } - - dateOrTimeChanged() { - this.onChange(formatDate(this.dateValue + "T" + this.timeValue,"yyyy-MM-ddTHH:mm:ssZZZZZ", "en-us", "UTC")) - } - -} diff --git a/src-ui/src/app/components/common/input/date/date.component.html b/src-ui/src/app/components/common/input/date/date.component.html new file mode 100644 index 000000000..ca9ccc040 --- /dev/null +++ b/src-ui/src/app/components/common/input/date/date.component.html @@ -0,0 +1,15 @@ +<div class="form-group"> + <label [for]="inputId">{{title}}</label> + <div class="input-group"> + <input [class.is-invalid]="error" class="form-control" [placeholder]="placeholder" [id]="inputId" (dateSelect)="onChange(value)" (change)="onChange(value)" + name="dp" [(ngModel)]="value" ngbDatepicker #datePicker="ngbDatepicker" #datePickerContent="ngModel"> + <div class="input-group-append"> + <button class="btn btn-outline-secondary calendar" (click)="datePicker.toggle()" type="button"> + <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16"> + <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> + </svg> + </button> + </div> + <div class="invalid-feedback" *ngIf="error" i18n>Invalid date.</div> + </div> +</div> diff --git a/src-ui/src/app/components/common/input/date-time/date-time.component.scss b/src-ui/src/app/components/common/input/date/date.component.scss similarity index 100% rename from src-ui/src/app/components/common/input/date-time/date-time.component.scss rename to src-ui/src/app/components/common/input/date/date.component.scss diff --git a/src-ui/src/app/components/common/input/date-time/date-time.component.spec.ts b/src-ui/src/app/components/common/input/date/date.component.spec.ts similarity index 55% rename from src-ui/src/app/components/common/input/date-time/date-time.component.spec.ts rename to src-ui/src/app/components/common/input/date/date.component.spec.ts index 0657768bd..ea92c7b30 100644 --- a/src-ui/src/app/components/common/input/date-time/date-time.component.spec.ts +++ b/src-ui/src/app/components/common/input/date/date.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { DateTimeComponent } from './date-time.component'; +import { DateComponent } from './date.component'; -describe('DateTimeComponent', () => { - let component: DateTimeComponent; - let fixture: ComponentFixture<DateTimeComponent>; +describe('DateComponent', () => { + let component: DateComponent; + let fixture: ComponentFixture<DateComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ DateTimeComponent ] + declarations: [ DateComponent ] }) .compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(DateTimeComponent); + fixture = TestBed.createComponent(DateComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/src-ui/src/app/components/common/input/date/date.component.ts b/src-ui/src/app/components/common/input/date/date.component.ts new file mode 100644 index 000000000..b3b863581 --- /dev/null +++ b/src-ui/src/app/components/common/input/date/date.component.ts @@ -0,0 +1,32 @@ +import { Component, forwardRef, Input, OnInit, ViewChild } from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { NgbDateAdapter, NgbDateParserFormatter, NgbDatepickerContent } from '@ng-bootstrap/ng-bootstrap'; +import { SettingsService } from 'src/app/services/settings.service'; +import { v4 as uuidv4 } from 'uuid'; +import { AbstractInputComponent } from '../abstract-input'; + + +@Component({ + providers: [{ + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => DateComponent), + multi: true + }], + selector: 'app-input-date', + templateUrl: './date.component.html', + styleUrls: ['./date.component.scss'] +}) +export class DateComponent extends AbstractInputComponent<string> implements OnInit { + + constructor(private settings: SettingsService) { + super() + } + + ngOnInit(): void { + super.ngOnInit() + this.placeholder = this.settings.getLocalizedDateInputFormat() + } + + placeholder: string + +} diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 2814a1242..f9b87aee3 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -58,7 +58,7 @@ <app-input-text #inputTitle i18n-title title="Title" formControlName="title" [error]="error?.title"></app-input-text> <app-input-number i18n-title title="Archive serial number" [error]="error?.archive_serial_number" formControlName='archive_serial_number'></app-input-number> - <app-input-date-time i18n-titleDate titleDate="Date created" formControlName="created"></app-input-date-time> + <app-input-date i18n-title title="Date created" formControlName="created" [error]="error?.created"></app-input-date> <app-input-select [items]="correspondents" i18n-title title="Correspondent" formControlName="correspondent" [allowNull]="true" (createNew)="createCorrespondent()" [suggestions]="suggestions?.correspondents"></app-input-select> <app-input-select [items]="documentTypes" i18n-title title="Document type" formControlName="document_type" [allowNull]="true" diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 15cfb8a19..4ae4d9513 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -88,14 +88,15 @@ export class SettingsComponent implements OnInit { } get displayLanguageOptions(): LanguageOption[] { - return [{code: "", name: $localize`Use system language`}].concat(this.settings.getLanguageOptions()) + return [ + {code: "", name: $localize`Use system language`} + ].concat(this.settings.getLanguageOptions()) } get dateLocaleOptions(): LanguageOption[] { return [ - {code: "", name: $localize`Use date format of display language`}, - {code: "iso-8601", name: $localize`ISO 8601`} - ].concat(this.settings.getLanguageOptions()) + {code: "", name: $localize`Use date format of display language`} + ].concat(this.settings.getDateLocaleOptions()) } get today() { diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 393417e31..fca9262ab 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -1,5 +1,5 @@ import { DOCUMENT } from '@angular/common'; -import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core'; +import { Inject, Injectable, LOCALE_ID, Renderer2, RendererFactory2 } from '@angular/core'; import { Meta } from '@angular/platform-browser'; import { CookieService } from 'ngx-cookie-service'; @@ -10,9 +10,14 @@ export interface PaperlessSettings { } export interface LanguageOption { - code: string, - name: string, + code: string + name: string englishName?: string + + /** + * A date format string for use by the date selectors. MUST contain 'yyyy', 'mm' and 'dd'. + */ + dateInputFormat?: string } export const SETTINGS_KEYS = { @@ -56,7 +61,8 @@ export class SettingsService { private rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document, private cookieService: CookieService, - private meta: Meta + private meta: Meta, + @Inject(LOCALE_ID) private localeId: string ) { this.renderer = rendererFactory.createRenderer(null, null); @@ -79,15 +85,20 @@ export class SettingsService { getLanguageOptions(): LanguageOption[] { return [ - {code: "en-us", name: $localize`English (US)`, englishName: "English (US)"}, - {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)"}, - {code: "de", name: $localize`German`, englishName: "German"}, - {code: "nl", name: $localize`Dutch`, englishName: "Dutch"}, - {code: "fr", name: $localize`French`, englishName: "French"}, - {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)"} + {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"}, + {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"}, + {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, + {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, + {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, + {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"} ] } + getDateLocaleOptions(): LanguageOption[] { + let isoOption: LanguageOption = {code: "iso-8601", name: $localize`ISO 8601`, dateInputFormat: "yyyy-mm-dd"} + return [isoOption].concat(this.getLanguageOptions()) + } + private getLanguageCookieName() { let prefix = "" if (this.meta.getTag('name=cookie_prefix')) { @@ -108,6 +119,11 @@ export class SettingsService { } } + getLocalizedDateInputFormat(): string { + let dateLocale = this.get(SETTINGS_KEYS.DATE_LOCALE) || this.getLanguage() || this.localeId.toLowerCase() + return this.getDateLocaleOptions().find(o => o.code == dateLocale)?.dateInputFormat || "yyyy-mm-dd" + } + get(key: string): any { let setting = SETTINGS.find(s => s.key == key) diff --git a/src-ui/src/app/utils/ngb-date-adapter.ts b/src-ui/src/app/utils/ngb-date-adapter.ts new file mode 100644 index 000000000..19711319d --- /dev/null +++ b/src-ui/src/app/utils/ngb-date-adapter.ts @@ -0,0 +1,23 @@ +import { Injectable } from "@angular/core"; +import { NgbDateAdapter, NgbDateStruct } from "@ng-bootstrap/ng-bootstrap"; + +@Injectable() +export class ISODateAdapter extends NgbDateAdapter<string> { + + fromModel(value: string | null): NgbDateStruct | null { + if (value) { + let date = new Date(value) + return { + day : date.getDate(), + month : date.getMonth() + 1, + year : date.getFullYear() + } + } else { + return null + } + } + + toModel(date: NgbDateStruct | null): string | null { + return date ? new Date(date.year, date.month - 1, date.day).toISOString() : null + } +} diff --git a/src-ui/src/app/utils/ngb-date-parser-formatter.ts b/src-ui/src/app/utils/ngb-date-parser-formatter.ts new file mode 100644 index 000000000..7d819a6bf --- /dev/null +++ b/src-ui/src/app/utils/ngb-date-parser-formatter.ts @@ -0,0 +1,59 @@ +import { Injectable } from "@angular/core" +import { NgbDateParserFormatter, NgbDateStruct } from "@ng-bootstrap/ng-bootstrap" +import { SettingsService } from "../services/settings.service" + +@Injectable() +export class LocalizedDateParserFormatter extends NgbDateParserFormatter { + + constructor(private settings: SettingsService) { + super() + } + + private getDateInputFormat() { + return this.settings.getLocalizedDateInputFormat() + } + + /** + * This constructs a regular expression from a date input format which is then + * used to parse dates. + */ + private getDateParseRegex() { + return new RegExp( + "^" + this.getDateInputFormat() + .replace('dd', '(?<day>[0-9]+)') + .replace('mm', '(?<month>[0-9]+)') + .replace('yyyy', '(?<year>[0-9]+)') + .split('.').join('\\.\\s*') + "$" // allow whitespace(s) after dot (specific for German) + ) + } + + parse(value: string): NgbDateStruct | null { + let match = this.getDateParseRegex().exec(value) + if (match) { + let dateStruct = { + day: +match.groups.day, + month: +match.groups.month, + year: +match.groups.year + } + if (dateStruct.year <= (new Date().getFullYear() - 2000)) { + dateStruct.year += 2000 + } else if (dateStruct.year < 100) { + dateStruct.year += 1900 + } + return dateStruct + } else { + return null + } + } + + format(date: NgbDateStruct | null): string { + if (date) { + return this.getDateInputFormat() + .replace('dd', date.day.toString().padStart(2, '0')) + .replace('mm', date.month.toString().padStart(2, '0')) + .replace('yyyy', date.year.toString().padStart(4, '0')) + } else { + return null + } + } +} \ No newline at end of file From 77af5a8a3bdefc117839bcf12b787ab9c60d1608 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:00:35 +0100 Subject: [PATCH 358/898] update dependencies --- src-ui/package-lock.json | 6 +++--- src-ui/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 148bc72eb..fd6d69538 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -2055,9 +2055,9 @@ } }, "@ng-bootstrap/ng-bootstrap": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-8.0.0.tgz", - "integrity": "sha512-v77Gfd8xHH+exq0WqIqVRlxbUEHdA/2+RUJenUP2IDTQN9E1rWl7O461/kosr+0XPuxPArHQJxhh/WsCYckcNg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-8.0.4.tgz", + "integrity": "sha512-EdxTwOPOtlvfnwrglPniulmzdnXdXH3lTGaGAY1HrYRvdtGg6wicRvl+BvwVE/3Qik5NPkOWMVghUHpv3evIYg==", "requires": { "tslib": "^2.0.0" } diff --git a/src-ui/package.json b/src-ui/package.json index d6082c6b9..a4d014284 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -20,7 +20,7 @@ "@angular/platform-browser": "~10.1.5", "@angular/platform-browser-dynamic": "~10.1.5", "@angular/router": "~10.1.5", - "@ng-bootstrap/ng-bootstrap": "^8.0.0", + "@ng-bootstrap/ng-bootstrap": "^8.0.4", "@ng-select/ng-select": "^5.0.9", "bootstrap": "^4.5.0", "file-saver": "^2.0.5", From 7fe27fe9b484fa3fb0b79f5fe7ffeb3891132b1f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:08:55 +0100 Subject: [PATCH 359/898] added a missing string --- src-ui/messages.xlf | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index e1747ba03..d04d5a6f8 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1598,6 +1598,13 @@ <context context-type="linenumber">21</context> </context-group> </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> @@ -1623,49 +1630,49 @@ <source>English (US)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> From 1532f04f652b50da197d4fccd3a92aebb455b799 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 17:10:20 +0000 Subject: [PATCH 360/898] Apply translations in de translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index c031ebc85..0343c5a94 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 13:20+0100\n" +"POT-Creation-Date: 2021-02-24 16:49+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" @@ -426,6 +426,10 @@ msgstr "Niederländisch" msgid "French" msgstr "Französisch" +#: paperless/settings.py:296 +msgid "Portuguese (Brazil)" +msgstr "Portugiesisch (Brasilien)" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" From e6accb2a69e84e80f249d3fd100bb4af1e9d1073 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 17:10:24 +0000 Subject: [PATCH 361/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 48 ++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index 6802f8dce..a9762c286 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -606,7 +606,7 @@ <target>Benutze Systemsprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,15 +614,7 @@ <target>Benutze Datumsformat der Anzeigesprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">96</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> - <source>ISO 8601</source> - <target>ISO 8601</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +622,7 @@ <target>Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1832,6 +1824,14 @@ <context context-type="linenumber">21</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Ungültiges Datum.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> <source>Yes</source> <target>Ja</target> @@ -1861,7 +1861,7 @@ <target>Englisch (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">82</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1869,7 @@ <target>Englisch (UK)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1877,7 @@ <target>Deutsch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1885,7 @@ <target>Niederländisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1893,23 @@ <target>Französisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Portugiesisch (Brasilien)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From 9df56065a2682fe0d11f85b96ce64ccfa9062e7d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 17:18:07 +0000 Subject: [PATCH 362/898] Apply translations in pt_BR translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'pt_BR' language. --- src/locale/pt_BR/LC_MESSAGES/django.po | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index e1a74b104..7800b0c88 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 13:20+0100\n" +"POT-Creation-Date: 2021-02-24 16:49+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Rodrigo A <rodrigo.avelino@meliuz.com.br>, 2021\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/paperless/teams/115905/pt_BR/)\n" @@ -425,6 +425,10 @@ msgstr "Holandês" msgid "French" msgstr "Francês" +#: paperless/settings.py:296 +msgid "Portuguese (Brazil)" +msgstr "Português (Brasil)" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" From f984ad3d1783591ab4d467ca347720d3116efb95 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 17:18:26 +0000 Subject: [PATCH 363/898] Translate /src-ui/messages.xlf in pt_BR translation completed for the source file '/src-ui/messages.xlf' on the 'pt_BR' language. --- src-ui/src/locale/messages.pt_BR.xlf | 48 ++++++++++++++++++---------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 0efe12ad0..ff438073d 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -606,7 +606,7 @@ <target>Usar linguagem do sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,15 +614,7 @@ <target>Usar formato de data da linguagem de exibição</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">96</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> - <source>ISO 8601</source> - <target>ISO 8601</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +622,7 @@ <target>Erro ao salvar configurações: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1832,6 +1824,14 @@ <context context-type="linenumber">21</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Data inválida.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> <source>Yes</source> <target>Sim</target> @@ -1861,7 +1861,7 @@ <target>Inglês (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">82</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1869,7 @@ <target>Inglês (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1877,7 @@ <target>Alemão</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1885,7 @@ <target>Holandês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1893,23 @@ <target>Francês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Português (Brasil)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From 6362af2d84ca2995c2fba1109b363cd47f9d1d54 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:45:05 +0100 Subject: [PATCH 364/898] use new date inputs for the date filter as well --- src-ui/src/app/app.module.ts | 4 +-- .../date-dropdown.component.html | 22 +++++++++++++-- .../date-dropdown/date-dropdown.component.ts | 16 +++++++++-- src-ui/src/app/utils/ngb-iso-date-adapter.ts | 27 +++++++++++++++++++ ...dapter.ts => ngb-iso-date-time-adapter.ts} | 2 +- 5 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 src-ui/src/app/utils/ngb-iso-date-adapter.ts rename src-ui/src/app/utils/{ngb-date-adapter.ts => ngb-iso-date-time-adapter.ts} (89%) diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 9e0dc56de..46d8df9a1 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -60,7 +60,7 @@ import { NumberComponent } from './components/common/input/number/number.compone import { SafePipe } from './pipes/safe.pipe'; import { CustomDatePipe } from './pipes/custom-date.pipe'; import { DateComponent } from './components/common/input/date/date.component'; -import { ISODateAdapter } from './utils/ngb-date-adapter'; +import { ISODateTimeAdapter } from './utils/ngb-iso-date-time-adapter'; import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'; import localeFr from '@angular/common/locales/fr'; @@ -147,7 +147,7 @@ registerLocaleData(localeEnGb) }, FilterPipe, DocumentTitlePipe, - {provide: NgbDateAdapter, useClass: ISODateAdapter}, + {provide: NgbDateAdapter, useClass: ISODateTimeAdapter}, {provide: NgbDateParserFormatter, useClass: LocalizedDateParserFormatter} ], bootstrap: [AppComponent] diff --git a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html index b70a04103..ee8e6e6f4 100644 --- a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html +++ b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html @@ -20,8 +20,17 @@ </div> <div class="input-group input-group-sm"> - <input type="date" class="form-control" id="date_after" [(ngModel)]="dateAfter" (change)="onChangeDebounce()"> + <input class="form-control" [placeholder]="datePlaceHolder" id="dateAfter" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()" + [(ngModel)]="dateAfter" ngbDatepicker #dateAfterPicker="ngbDatepicker"> + <div class="input-group-append"> + <button class="btn btn-outline-secondary" (click)="dateAfterPicker.toggle()" type="button"> + <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16"> + <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> + </svg> + </button> + </div> </div> + </div> <div class="list-group-item d-flex flex-column align-items-start" role="menuitem"> @@ -36,8 +45,17 @@ </div> <div class="input-group input-group-sm"> - <input type="date" class="form-control" id="date_before" [(ngModel)]="dateBefore" (change)="onChangeDebounce()"> + <input class="form-control" [placeholder]="datePlaceHolder" id="dateBefore" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()" + [(ngModel)]="dateBefore" ngbDatepicker #dateBeforePicker="ngbDatepicker"> + <div class="input-group-append"> + <button class="btn btn-outline-secondary" (click)="dateBeforePicker.toggle()" type="button"> + <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-calendar" viewBox="0 0 16 16"> + <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> + </svg> + </button> + </div> </div> + </div> </div> </div> diff --git a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.ts b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.ts index 27472bdc7..e21b28312 100644 --- a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.ts +++ b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.ts @@ -1,7 +1,10 @@ import { formatDate } from '@angular/common'; import { Component, EventEmitter, Input, Output, OnInit, OnDestroy } from '@angular/core'; +import { NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; import { Subject, Subscription } from 'rxjs'; -import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; +import { debounceTime } from 'rxjs/operators'; +import { SettingsService } from 'src/app/services/settings.service'; +import { ISODateAdapter } from 'src/app/utils/ngb-iso-date-adapter'; export interface DateSelection { before?: string @@ -16,10 +19,17 @@ const LAST_YEAR = 3 @Component({ selector: 'app-date-dropdown', templateUrl: './date-dropdown.component.html', - styleUrls: ['./date-dropdown.component.scss'] + styleUrls: ['./date-dropdown.component.scss'], + providers: [ + {provide: NgbDateAdapter, useClass: ISODateAdapter}, + ] }) export class DateDropdownComponent implements OnInit, OnDestroy { + constructor(settings: SettingsService) { + this.datePlaceHolder = settings.getLocalizedDateInputFormat() + } + quickFilters = [ {id: LAST_7_DAYS, name: $localize`Last 7 days`}, {id: LAST_MONTH, name: $localize`Last month`}, @@ -27,6 +37,8 @@ export class DateDropdownComponent implements OnInit, OnDestroy { {id: LAST_YEAR, name: $localize`Last year`} ] + datePlaceHolder: string + @Input() dateBefore: string diff --git a/src-ui/src/app/utils/ngb-iso-date-adapter.ts b/src-ui/src/app/utils/ngb-iso-date-adapter.ts new file mode 100644 index 000000000..e43602a16 --- /dev/null +++ b/src-ui/src/app/utils/ngb-iso-date-adapter.ts @@ -0,0 +1,27 @@ +import { Injectable } from "@angular/core"; +import { NgbDateAdapter, NgbDateStruct } from "@ng-bootstrap/ng-bootstrap"; + +@Injectable() +export class ISODateAdapter extends NgbDateAdapter<string> { + + fromModel(value: string | null): NgbDateStruct | null { + if (value) { + let date = new Date(value) + return { + day : date.getDate(), + month : date.getMonth() + 1, + year : date.getFullYear() + } + } else { + return null + } + } + + toModel(date: NgbDateStruct | null): string | null { + if (date) { + return date.year.toString().padStart(4, '0') + "-" + date.month.toString().padStart(2, '0') + "-" + date.day.toString().padStart(2, '0') + } else { + return null + } + } +} diff --git a/src-ui/src/app/utils/ngb-date-adapter.ts b/src-ui/src/app/utils/ngb-iso-date-time-adapter.ts similarity index 89% rename from src-ui/src/app/utils/ngb-date-adapter.ts rename to src-ui/src/app/utils/ngb-iso-date-time-adapter.ts index 19711319d..21a97a19a 100644 --- a/src-ui/src/app/utils/ngb-date-adapter.ts +++ b/src-ui/src/app/utils/ngb-iso-date-time-adapter.ts @@ -2,7 +2,7 @@ import { Injectable } from "@angular/core"; import { NgbDateAdapter, NgbDateStruct } from "@ng-bootstrap/ng-bootstrap"; @Injectable() -export class ISODateAdapter extends NgbDateAdapter<string> { +export class ISODateTimeAdapter extends NgbDateAdapter<string> { fromModel(value: string | null): NgbDateStruct | null { if (value) { From f7808eebbcd80fe94572a9a0df075ab3efe77602 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:03:03 +0100 Subject: [PATCH 365/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index d170a0f02..6c97ac1cb 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", appTitle: "Paperless-ng", - version: "1.2.0", + version: "1.2.1", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 09ac5f672..d93cd02b0 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 2, 0) +__version__ = (1, 2, 1) From 2f21fee5cfc51ac68bfbe0cf33d1f3779b55cbb7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:03:21 +0100 Subject: [PATCH 366/898] fixes for #600 --- src-ui/src/index.html | 2 +- src/documents/templates/index.html | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src-ui/src/index.html b/src-ui/src/index.html index 39ecd824c..4308a6b16 100644 --- a/src-ui/src/index.html +++ b/src-ui/src/index.html @@ -9,7 +9,7 @@ <meta name="theme-color" content="#17541f" /> <link rel="manifest" href="manifest.webmanifest"> <link rel="icon" type="image/x-icon" href="favicon.ico"> - <link ref="apple-touch-icon" href="apple-touch-icon.png"> + <link rel="apple-touch-icon" href="apple-touch-icon.png"> </head> <body class="color-scheme-system"> <app-root></app-root> diff --git a/src/documents/templates/index.html b/src/documents/templates/index.html index 285e48d3f..b71aaaeb6 100644 --- a/src/documents/templates/index.html +++ b/src/documents/templates/index.html @@ -15,6 +15,7 @@ <link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="manifest" href="{% static webmanifest %}"> <link rel="stylesheet" href="{% static styles_css %}"> + <link rel="apple-touch-icon" href="apple-touch-icon.png"> </head> <body> <app-root>{% translate "Paperless-ng is loading..." %}</app-root> From fa788bd75810b60b686572de19141fb2a9cc88f9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:05:06 +0100 Subject: [PATCH 367/898] changelog --- docs/changelog.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index b23ca5137..d2ec7ec69 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,17 @@ Changelog ********* +paperless-ng 1.2.1 +################## + +* Added translation into Portuguese (Brazil). + +* The date input fields now respect the currently selected date format. + +* Added a fancy icon when adding paperless to the home screen on iOS devices. + +* When using regular expression matching, the regular expression is now validated before saving the tag/correspondent/type. + paperless-ng 1.2.0 ################## From 3e85306269ee4de610fc5076fc75a1d3e3c38afa Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:21:15 +0100 Subject: [PATCH 368/898] changelog --- docs/changelog.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index d2ec7ec69..137fa2fd2 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,11 +8,11 @@ Changelog paperless-ng 1.2.1 ################## -* Added translation into Portuguese (Brazil). +* `Rodrigo Avelino <https://github.com/rodavelino>`_ translated Paperless into Portuguese (Brazil). * The date input fields now respect the currently selected date format. -* Added a fancy icon when adding paperless to the home screen on iOS devices. +* Added a fancy icon when adding paperless to the home screen on iOS devices. Thanks to `Joel Nordell <https://github.com/joelnordell>`_. * When using regular expression matching, the regular expression is now validated before saving the tag/correspondent/type. From b543a4cb6faa3ae1ab93c4338db6f73c6b683e33 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:27:16 +0100 Subject: [PATCH 369/898] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 01ac30fa1..b21173ba5 100644 --- a/README.md +++ b/README.md @@ -77,9 +77,9 @@ The documentation for Paperless-ng is available on [ReadTheDocs](https://paperle # Translation -Paperless is currently available in English, German, Dutch, French, and Portuguese. Translation is coordinated at transifex: https://www.transifex.com/paperless/paperless-ng +Paperless is currently available in English, German, Dutch, French, and Portuguese. -If you want to see paperless in your own language, request that language at transifex and you can start translating after I approve the language. +There's an active translation project at transifex! If you want to help out by translating paperless into your language, please head over to https://github.com/jonaswinkler/paperless-ng/issues/212 for details. # Feature Requests From cd73094408bb2db24573c172c92ec02a182f595f Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:43:39 +0000 Subject: [PATCH 370/898] Apply translations in en_GB translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'en_GB' language. --- src/locale/en_GB/LC_MESSAGES/django.po | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index f0c5b0381..dbdd4b2a5 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"POT-Creation-Date: 2021-02-24 16:49+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/paperless/teams/115905/en_GB/)\n" @@ -355,7 +355,12 @@ msgstr "filter rule" msgid "filter rules" msgstr "filter rules" -#: documents/serialisers.py:370 +#: documents/serialisers.py:52 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Invalid regular expresssion: %(error)s" + +#: documents/serialisers.py:378 #, python-format msgid "File type %(type)s not supported" msgstr "File type %(type)s not supported" @@ -420,7 +425,11 @@ msgstr "Dutch" msgid "French" msgstr "French" -#: paperless/urls.py:114 +#: paperless/settings.py:296 +msgid "Portuguese (Brazil)" +msgstr "Portuguese (Brazil)" + +#: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" From c14daee2b23cdbeed0fa870f8b7a5bc85269af08 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 18:43:40 +0000 Subject: [PATCH 371/898] Translate /src-ui/messages.xlf in en_GB translation completed for the source file '/src-ui/messages.xlf' on the 'en_GB' language. --- src-ui/src/locale/messages.en_GB.xlf | 48 ++++++++++++++++++---------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index f5e711c39..b413a50a1 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -606,7 +606,7 @@ <target>Use system language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,15 +614,7 @@ <target>Use date format of display language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">96</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> - <source>ISO 8601</source> - <target>ISO 8601</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +622,7 @@ <target>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -1832,6 +1824,14 @@ <context context-type="linenumber">21</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Invalid date.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> <source>Yes</source> <target>Yes</target> @@ -1861,7 +1861,7 @@ <target>English (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">82</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1869,7 @@ <target>English (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1877,7 @@ <target>German</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1885,7 @@ <target>Dutch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1893,23 @@ <target>French</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Portuguese (Brazil)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From 7fc21fe2dd0b50c27498175e640f600fcf65768b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Sun, 17 Jan 2021 19:46:44 +0100 Subject: [PATCH 372/898] Dark mode compatibility --- src-ui/src/theme_dark.scss | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 4e850f017..751ff2b15 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -246,6 +246,16 @@ $border-color-dark-mode: #47494f; } } + .btn-light:not(:disabled):not(.disabled) { + background-color: $bg-dark-mode; + color: $text-color-dark-mode-accent; + + &:hover { + background-color: $text-color-dark-mode; + color: $bg-dark-mode; + } + } + .btn-link:not(:disabled):not(.disabled) { color: $primary-dark-mode; } @@ -366,6 +376,12 @@ $border-color-dark-mode: #47494f; .progress-bar.bg-primary { background-color: darken($primary-dark-mode, 5%) !important; } + + .ngb-dp-header, + .ngb-dp-weekdays, + .ngb-dp-month { + background-color: $bg-light-dark-mode; + } } body.color-scheme-dark { From 55dea67784225a28c65d87719b347cc75e336bcf Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 24 Feb 2021 11:26:39 -0800 Subject: [PATCH 373/898] Remove ng2-pdf-viewer and use only native viewer --- src-ui/package.json | 1 - src-ui/src/app/app.module.ts | 2 -- .../document-detail.component.html | 17 +---------------- .../document-detail.component.ts | 12 ------------ .../document-card-small.component.html | 10 ++-------- .../document-card-small.component.ts | 4 ---- .../manage/settings/settings.component.ts | 2 -- src-ui/src/app/services/settings.service.ts | 2 -- 8 files changed, 3 insertions(+), 47 deletions(-) diff --git a/src-ui/package.json b/src-ui/package.json index 14d828483..a7cef2581 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -24,7 +24,6 @@ "@ng-select/ng-select": "^5.0.9", "bootstrap": "^4.5.0", "ng-bootstrap": "^1.6.3", - "ng2-pdf-viewer": "^6.3.2", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^10.0.0", "ngx-infinite-scroll": "^9.1.0", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 49e937c0b..d63d34306 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -48,7 +48,6 @@ import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-v import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'; import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'; import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'; -import { PdfViewerModule } from 'ng2-pdf-viewer'; import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component'; import { YesNoPipe } from './pipes/yes-no.pipe'; import { FileSizePipe } from './pipes/file-size.pipe'; @@ -129,7 +128,6 @@ registerLocaleData(localeDe) ReactiveFormsModule, NgxFileDropModule, InfiniteScrollModule, - PdfViewerModule, NgSelectModule ], providers: [ diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 2814a1242..9db571708 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -1,14 +1,4 @@ <app-page-header [(title)]="title"> - <div class="input-group input-group-sm mr-5 d-none d-md-flex" *ngIf="getContentType() == 'application/pdf' && !useNativePdfViewer"> - <div class="input-group-prepend"> - <div class="input-group-text" i18n>Page</div> - </div> - <input class="form-control flex-grow-0 w-auto" type="number" min="1" [max]="previewNumPages" [(ngModel)]="previewCurrentPage" /> - <div class="input-group-append"> - <div class="input-group-text" i18n>of {{previewNumPages}}</div> - </div> - </div> - <button type="button" class="btn btn-sm btn-outline-danger mr-2 ml-auto" (click)="delete()"> <svg class="buttonicon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#trash" /> @@ -135,12 +125,7 @@ <div class="col-md-6 col-xl-8 mb-3"> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <div class="preview-sticky pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> - <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> - </div> - <ng-template #nativePdfViewer> - <object [data]="previewUrl | safe" type="application/pdf" class="preview-sticky" width="100%"></object> - </ng-template> + <object [data]="previewUrl | safe" class="preview-sticky" width="100%">If error</object> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview-sticky" width="100%"></object> diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index a7cce715e..d7c875be5 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -15,7 +15,6 @@ import { DocumentService } from 'src/app/services/rest/document.service'; import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'; import { CorrespondentEditDialogComponent } from '../manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component'; import { DocumentTypeEditDialogComponent } from '../manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component'; -import { PDFDocumentProxy } from 'ng2-pdf-viewer'; import { ToastService } from 'src/app/services/toast.service'; import { TextComponent } from '../common/input/text/text.component'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @@ -61,9 +60,6 @@ export class DocumentDetailComponent implements OnInit { tags: new FormControl([]) }) - previewCurrentPage: number = 1 - previewNumPages: number = 1 - constructor( private documentsService: DocumentService, private route: ActivatedRoute, @@ -77,10 +73,6 @@ export class DocumentDetailComponent implements OnInit { private toastService: ToastService, private settings: SettingsService) { } - get useNativePdfViewer(): boolean { - return this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER) - } - getContentType() { return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type } @@ -222,8 +214,4 @@ export class DocumentDetailComponent implements OnInit { return this.documentListViewService.hasNext(this.documentId) } - pdfPreviewLoaded(pdf: PDFDocumentProxy) { - this.previewNumPages = pdf.numPages - } - } diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index ca27fb697..1881a85ee 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -47,15 +47,9 @@ </a> <ng-template #previewContent> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <div class="preview pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> - <div class="spinner-border text-primary spinner-border-sm" role="status"> - <span class="sr-only">Loading...</span> - </div> - <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="false" [show-all]="true" [render-text-mode]="2"></pdf-viewer> + <div class="preview"> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </div> - <ng-template #nativePdfViewer> - <object [data]="previewUrl | safe" type="application/pdf" class="preview" width="100%"></object> - </ng-template> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 02eb5e0eb..b84dfcd9c 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -70,10 +70,6 @@ export class DocumentCardSmallComponent implements OnInit { ) } - get useNativePdfViewer(): boolean { - return this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER) - } - getContentType() { return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type } diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 47c7b8d7b..368a01027 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -21,7 +21,6 @@ export class SettingsComponent implements OnInit { 'documentListItemPerPage': new FormControl(this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE)), 'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), 'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), - 'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), 'savedViews': this.savedViewGroup, 'displayLanguage': new FormControl(this.settings.getLanguage()), 'dateLocale': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_LOCALE)), @@ -74,7 +73,6 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.DOCUMENT_LIST_SIZE, this.settingsForm.value.documentListItemPerPage) this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) - this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, this.settingsForm.value.notificationsConsumerNewDocument) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index f3e437ada..c8b657300 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -21,7 +21,6 @@ export const SETTINGS_KEYS = { DOCUMENT_LIST_SIZE: 'general-settings:documentListSize', DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system', DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', - USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', DATE_LOCALE: 'general-settings:date-display:date-locale', DATE_FORMAT: 'general-settings:date-display:date-format', NOTIFICATIONS_CONSUMER_NEW_DOCUMENT: 'general-settings:notifications:consumer-new-documents', @@ -36,7 +35,6 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50}, {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, - {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, type: "boolean", default: true}, From 3c893ce72e5b21c7de2e180e89f5339b7467dd04 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:29:33 +0000 Subject: [PATCH 374/898] Apply translations in fr translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'fr' language. --- src/locale/fr/LC_MESSAGES/django.po | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locale/fr/LC_MESSAGES/django.po b/src/locale/fr/LC_MESSAGES/django.po index 6acd81649..3b4fbce3f 100644 --- a/src/locale/fr/LC_MESSAGES/django.po +++ b/src/locale/fr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-23 13:20+0100\n" +"POT-Creation-Date: 2021-02-24 16:49+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Philmo67, 2021\n" "Language-Team: French (https://www.transifex.com/paperless/teams/115905/fr/)\n" @@ -428,6 +428,10 @@ msgstr "Néerlandais" msgid "French" msgstr "Français" +#: paperless/settings.py:296 +msgid "Portuguese (Brazil)" +msgstr "Portugais (Brésil)" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" From 3f9ae643422e0e36b8c07ff0727e9fd034aa1b1f Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 24 Feb 2021 19:30:01 +0000 Subject: [PATCH 375/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 50 ++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index 79045b3b4..05b9fdab7 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -606,7 +606,7 @@ <target>Utiliser la langue du système</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,15 +614,7 @@ <target>Utiliser le format de date de la langue d'affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">96</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> - <source>ISO 8601</source> - <target>ISO 8601</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +622,7 @@ <target>Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -819,7 +811,7 @@ </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> <source>Document processing</source> - <target>Traitement de document</target> + <target>Traitement de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">118</context> @@ -1832,6 +1824,14 @@ <context context-type="linenumber">21</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Date incorrecte.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> <source>Yes</source> <target>Oui</target> @@ -1861,7 +1861,7 @@ <target>Anglais (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">82</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1869,7 @@ <target>Anglais (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1877,7 @@ <target>Allemand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1885,7 @@ <target>Néerlandais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1893,23 @@ <target>Français</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Portugais (Brésil)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From 3d841d5c56a056fe7752098dd67ec279c7e5847a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 24 Feb 2021 12:48:58 -0800 Subject: [PATCH 376/898] Unused settings --- .../document-card-small/document-card-small.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index b84dfcd9c..cd88143e1 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -4,7 +4,6 @@ import { PaperlessDocument } from 'src/app/data/paperless-document'; import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; -import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @Component({ selector: 'app-document-card-small', @@ -13,7 +12,7 @@ import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.servic }) export class DocumentCardSmallComponent implements OnInit { - constructor(private documentService: DocumentService, private settings: SettingsService) { } + constructor(private documentService: DocumentService) { } @Input() selected = false From 8e3186af3b6fae96b5d7281a0cee25ef54a73663 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 24 Feb 2021 13:02:26 -0800 Subject: [PATCH 377/898] Support large cards --- .../document-card-large.component.html | 17 +++++-- .../document-card-large.component.scss | 23 ++++++++++ .../document-card-large.component.ts | 45 ++++++++++++++++++- 3 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index a47f13653..fd68996fa 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -1,4 +1,4 @@ -<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable"> +<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> <div class="row no-gutters"> <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left"> @@ -43,19 +43,30 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> <span class="d-block d-md-inline" i18n>Edit</span> </a> - <a class="btn btn-sm btn-outline-secondary" [href]="getPreviewUrl()"> + <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" title="Hover to preview, click to view in browser" i18n-title + [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" + autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> <span class="d-block d-md-inline" i18n>View</span> </a> + <ng-template #previewContent> + <ng-container *ngIf="getContentType() == 'application/pdf'"> + <div class="preview"> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> + </div> + </ng-container> + <ng-container *ngIf="getContentType() == 'text/plain'"> + <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> + </ng-container> + </ng-template> <a class="btn btn-sm btn-outline-secondary" [href]="getDownloadUrl()"> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/> <path fill-rule="evenodd" d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/> </svg> <span class="d-block d-md-inline" i18n>Download</span> </a> - </div> <div *ngIf="searchScore" class="d-flex align-items-center ml-md-auto mt-2 mt-md-0"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index c49de93b5..cf4e876d4 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -37,3 +37,26 @@ .doc-img-background-selected { background-color: $primaryFaded; } + +::ng-deep .popover { + max-width: 40rem; + + .preview { + min-width: 25rem; + min-height: 15rem; + max-height: 35rem; + overflow-y: scroll; + } + + .spinner-border { + position: absolute; + top: 4rem; + left: calc(50% - 0.5rem); + z-index: 0; + } +} + +.popover-hidden ::ng-deep .popover { + opacity: 0; + pointer-events: none; +} diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index f8bb9f518..d5168476b 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -1,7 +1,9 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PaperlessDocument } from 'src/app/data/paperless-document'; +import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; +import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-document-card-large', @@ -40,6 +42,13 @@ export class DocumentCardLargeComponent implements OnInit { @Input() searchScore: number + @ViewChild('popover') popover: NgbPopover + + mouseOnPreview = false + popoverHidden = true + + metadata: PaperlessDocumentMetadata + get searchScoreClass() { if (this.searchScore > 0.7) { return "success" @@ -51,6 +60,9 @@ export class DocumentCardLargeComponent implements OnInit { } ngOnInit(): void { + this.documentService.getMetadata(this.document?.id).subscribe(result => { + this.metadata = result + }) } getDetailsAsString() { @@ -74,7 +86,36 @@ export class DocumentCardLargeComponent implements OnInit { return this.documentService.getDownloadUrl(this.document.id) } - getPreviewUrl() { + get previewUrl() { return this.documentService.getPreviewUrl(this.document.id) } + + getContentType() { + return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type + } + + mouseEnterPreview() { + this.mouseOnPreview = true + if (!this.popover.isOpen()) { + // we're going to open but hide to pre-load content during hover delay + this.popover.open() + this.popoverHidden = true + setTimeout(() => { + if (this.mouseOnPreview) { + // show popover + this.popoverHidden = false + } else { + this.popover.close() + } + }, 600); + } + } + + mouseLeavePreview() { + this.mouseOnPreview = false + } + + mouseLeaveCard() { + this.popover.close() + } } From 5408b0b77bb94cd114eb9498dd0bc27996c3cb5e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 24 Feb 2021 13:08:31 -0800 Subject: [PATCH 378/898] Fix removed setting --- .../manage/settings/settings.component.html | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 3674bbcb9..12125df1f 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -78,17 +78,6 @@ </div> </div> - <div class="form-row form-group"> - <div class="col-md-3 col-form-label"> - <span i18n>Document editor</span> - </div> - <div class="col"> - - <app-input-check i18n-title title="Use PDF viewer provided by the browser" i18n-hint hint="This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName="useNativePdfViewer"></app-input-check> - - </div> - </div> - <div class="form-row form-group"> <div class="col-md-3 col-form-label"> <span i18n>Dark mode</span> @@ -110,11 +99,11 @@ </ng-template> </li> - + <li [ngbNavItem]="2"> <a ngbNavLink i18n>Notifications</a> <ng-template ngbNavContent> - + <h4 i18n>Document processing</h4> <div class="form-row form-group"> From 7a58479af4f53f79d39aebd7e3cc4aebe42b6b02 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 24 Feb 2021 13:08:39 -0800 Subject: [PATCH 379/898] Remove object tag contents --- .../components/document-detail/document-detail.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 7ef4e8e91..79215c51c 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -125,7 +125,7 @@ <div class="col-md-6 col-xl-8 mb-3"> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview-sticky" width="100%">If error</object> + <object [data]="previewUrl | safe" class="preview-sticky" width="100%"></object> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview-sticky" width="100%"></object> From ccd3b1a75c50978e2c153d7f1ed082ca5aaad573 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 22:27:43 +0100 Subject: [PATCH 380/898] add versioning support to the API --- src-ui/src/app/app.module.ts | 5 ++++ .../api-version.interceptor.spec.ts | 16 ++++++++++++ .../interceptors/api-version.interceptor.ts | 25 +++++++++++++++++++ src-ui/src/app/services/auth.interceptor.ts | 0 src-ui/src/environments/environment.prod.ts | 1 + src-ui/src/environments/environment.ts | 1 + src/paperless/settings.py | 7 ++++-- 7 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src-ui/src/app/interceptors/api-version.interceptor.spec.ts create mode 100644 src-ui/src/app/interceptors/api-version.interceptor.ts delete mode 100644 src-ui/src/app/services/auth.interceptor.ts diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 46d8df9a1..0cc42292b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -62,6 +62,7 @@ import { CustomDatePipe } from './pipes/custom-date.pipe'; import { DateComponent } from './components/common/input/date/date.component'; import { ISODateTimeAdapter } from './utils/ngb-iso-date-time-adapter'; import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'; +import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; @@ -144,6 +145,10 @@ registerLocaleData(localeEnGb) provide: HTTP_INTERCEPTORS, useClass: CsrfInterceptor, multi: true + },{ + provide: HTTP_INTERCEPTORS, + useClass: ApiVersionInterceptor, + multi: true }, FilterPipe, DocumentTitlePipe, diff --git a/src-ui/src/app/interceptors/api-version.interceptor.spec.ts b/src-ui/src/app/interceptors/api-version.interceptor.spec.ts new file mode 100644 index 000000000..7ad51f687 --- /dev/null +++ b/src-ui/src/app/interceptors/api-version.interceptor.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ApiVersionInterceptor } from './api-version.interceptor'; + +describe('ApiVersionInterceptor', () => { + beforeEach(() => TestBed.configureTestingModule({ + providers: [ + ApiVersionInterceptor + ] + })); + + it('should be created', () => { + const interceptor: ApiVersionInterceptor = TestBed.inject(ApiVersionInterceptor); + expect(interceptor).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/interceptors/api-version.interceptor.ts b/src-ui/src/app/interceptors/api-version.interceptor.ts new file mode 100644 index 000000000..95aa6ef16 --- /dev/null +++ b/src-ui/src/app/interceptors/api-version.interceptor.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { + HttpRequest, + HttpHandler, + HttpEvent, + HttpInterceptor +} from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; + +@Injectable() +export class ApiVersionInterceptor implements HttpInterceptor { + + constructor() {} + + intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> { + request = request.clone({ + setHeaders: { + 'Accept': `application/json; version=${environment.apiVersion}` + } + }) + + return next.handle(request); + } +} diff --git a/src-ui/src/app/services/auth.interceptor.ts b/src-ui/src/app/services/auth.interceptor.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 6c97ac1cb..50cf6d954 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -1,6 +1,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", + apiVersion: "1", appTitle: "Paperless-ng", version: "1.2.1", webSocketHost: window.location.host, diff --git a/src-ui/src/environments/environment.ts b/src-ui/src/environments/environment.ts index b2c40e261..b0ac843d5 100644 --- a/src-ui/src/environments/environment.ts +++ b/src-ui/src/environments/environment.ts @@ -5,6 +5,7 @@ export const environment = { production: false, apiBaseUrl: "http://localhost:8000/api/", + apiVersion: "1", appTitle: "Paperless-ng", version: "DEVELOPMENT", webSocketHost: "localhost:8000", diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 4c860351f..48712954c 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -112,7 +112,10 @@ REST_FRAMEWORK = { 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication' - ] + ], + 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', + 'DEFAULT_VERSION': 'v1', + 'ALLOWED_VERSIONS': ['1', '2'] } if DEBUG: @@ -142,7 +145,7 @@ ASGI_APPLICATION = "paperless.asgi.application" STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", "/static/") -# what is this used for? +# TODO: what is this used for? TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', From 650edcf0db4199aa437379c79c924b7622264ff1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 23:52:25 +0100 Subject: [PATCH 381/898] adjust migration --- src/documents/admin.py | 6 +++--- ...igrate_tag_colour.py => 1013_migrate_tag_colour.py} | 10 +++++----- src/documents/models.py | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) rename src/documents/migrations/{1006_migrate_tag_colour.py => 1013_migrate_tag_colour.py} (85%) diff --git a/src/documents/admin.py b/src/documents/admin.py index aee45b49d..c8c16d791 100755 --- a/src/documents/admin.py +++ b/src/documents/admin.py @@ -19,12 +19,12 @@ class TagAdmin(admin.ModelAdmin): list_display = ( "name", - "colour", + "color", "match", "matching_algorithm" ) - list_filter = ("colour", "matching_algorithm") - list_editable = ("colour", "match", "matching_algorithm") + list_filter = ("color", "matching_algorithm") + list_editable = ("color", "match", "matching_algorithm") class DocumentTypeAdmin(admin.ModelAdmin): diff --git a/src/documents/migrations/1006_migrate_tag_colour.py b/src/documents/migrations/1013_migrate_tag_colour.py similarity index 85% rename from src/documents/migrations/1006_migrate_tag_colour.py rename to src/documents/migrations/1013_migrate_tag_colour.py index d9bea8355..0c1189074 100644 --- a/src/documents/migrations/1006_migrate_tag_colour.py +++ b/src/documents/migrations/1013_migrate_tag_colour.py @@ -25,7 +25,7 @@ def forward(apps, schema_editor): for tag in Tag.objects.all(): colour_old_id = tag.colour_old rgb = COLOURS_OLD[colour_old_id] - tag.colour = rgb + tag.color = rgb tag.save() @@ -40,7 +40,7 @@ def reverse(apps, schema_editor): return 1 for tag in Tag.objects.all(): - colour_id = _get_colour_id(tag.colour) + colour_id = _get_colour_id(tag.color) tag.colour_old = colour_id tag.save() @@ -48,7 +48,7 @@ def reverse(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('documents', '1005_checksums'), + ('documents', '1012_fix_archive_files'), ] operations = [ @@ -59,8 +59,8 @@ class Migration(migrations.Migration): ), migrations.AddField( model_name='tag', - name='colour', - field=models.CharField(blank=True, max_length=7), + name='color', + field=models.CharField(blank=True, max_length=7, verbose_name='color'), ), migrations.RunPython(forward, reverse), migrations.RemoveField( diff --git a/src/documents/models.py b/src/documents/models.py index 47361776a..9c5b14806 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -78,7 +78,7 @@ class Correspondent(MatchingModel): class Tag(MatchingModel): - colour = models.CharField( + color = models.CharField( _("color"), blank=True, max_length=7) From 129a632b0547b7f02906e0475f595e441cc87711 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 23:52:52 +0100 Subject: [PATCH 382/898] remove colorhash (this will be done client side) --- Pipfile | 1 - src/documents/models.py | 10 ---------- 2 files changed, 11 deletions(-) diff --git a/Pipfile b/Pipfile index 0e72eb1c0..29a91ece3 100644 --- a/Pipfile +++ b/Pipfile @@ -55,7 +55,6 @@ uvloop = "~=0.14.0" # TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/) cryptography = "~=3.3.2" "pdfminer.six" = "*" -colorhash = "*" [dev-packages] coveralls = "*" diff --git a/src/documents/models.py b/src/documents/models.py index 9c5b14806..abbcc124e 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -8,7 +8,6 @@ from collections import OrderedDict import pathvalidate import dateutil.parser -from colorhash import ColorHash from django.conf import settings from django.contrib.auth.models import User from django.db import models @@ -93,15 +92,6 @@ class Tag(MatchingModel): verbose_name = _("tag") verbose_name_plural = _("tags") - def save(self, *args, **kwargs): - if self.colour == "": - self.colour = ColorHash( - self.name, - lightness=(0.35, 0.45, 0.55, 0.65), - saturation=(0.2, 0.3, 0.4, 0.5)).hex - - super().save(*args, **kwargs) - class DocumentType(MatchingModel): From dcff197e0a3c532bc923118a098270e1fe38dceb Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Feb 2021 23:54:19 +0100 Subject: [PATCH 383/898] versioning for the tags API --- src/documents/serialisers.py | 52 +++++++++++++++++++++++++++++++++++- src/documents/views.py | 8 +++++- src/paperless/settings.py | 2 +- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index adda7117e..e6aef3627 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -88,7 +88,40 @@ class DocumentTypeSerializer(MatchingModelSerializer): ) -class TagSerializer(MatchingModelSerializer): +class ColorField(serializers.Field): + + COLOURS = ( + (1, "#a6cee3"), + (2, "#1f78b4"), + (3, "#b2df8a"), + (4, "#33a02c"), + (5, "#fb9a99"), + (6, "#e31a1c"), + (7, "#fdbf6f"), + (8, "#ff7f00"), + (9, "#cab2d6"), + (10, "#6a3d9a"), + (11, "#b15928"), + (12, "#000000"), + (13, "#cccccc") + ) + + def to_internal_value(self, data): + for id, color in self.COLOURS: + if id == data: + return color + return "#a6cee3" + + def to_representation(self, value): + for id, color in self.COLOURS: + if color == value: + return id + return 1 + + +class TagSerializerVersion1(MatchingModelSerializer): + + colour = ColorField(source='color') class Meta: model = Tag @@ -105,6 +138,23 @@ class TagSerializer(MatchingModelSerializer): ) +class TagSerializer(MatchingModelSerializer): + + class Meta: + model = Tag + fields = ( + "id", + "slug", + "name", + "color", + "match", + "matching_algorithm", + "is_insensitive", + "is_inbox_tag", + "document_count" + ) + + class CorrespondentField(serializers.PrimaryKeyRelatedField): def get_queryset(self): return Correspondent.objects.all() diff --git a/src/documents/views.py b/src/documents/views.py index f5ddd88ee..bed44633d 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -50,6 +50,7 @@ from .parsers import get_parser_class_for_mime_type from .serialisers import ( CorrespondentSerializer, DocumentSerializer, + TagSerializerVersion1, TagSerializer, DocumentTypeSerializer, PostDocumentSerializer, @@ -118,7 +119,12 @@ class TagViewSet(ModelViewSet): queryset = Tag.objects.annotate( document_count=Count('documents')).order_by(Lower('name')) - serializer_class = TagSerializer + def get_serializer_class(self): + if int(self.request.version) == 1: + return TagSerializerVersion1 + else: + return TagSerializer + pagination_class = StandardPagination permission_classes = (IsAuthenticated,) filter_backends = (DjangoFilterBackend, OrderingFilter) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 48712954c..3dcff4a89 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -114,7 +114,7 @@ REST_FRAMEWORK = { 'rest_framework.authentication.TokenAuthentication' ], 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', - 'DEFAULT_VERSION': 'v1', + 'DEFAULT_VERSION': '1', 'ALLOWED_VERSIONS': ['1', '2'] } From 752c4b2266eba618116f0173bfa6ca92e86c5da6 Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Thu, 25 Feb 2021 06:22:59 +0100 Subject: [PATCH 384/898] Do not require molecule teardown for success CI failures should not be caused by intermittently failing docker communication furing test teardown. --- .github/workflows/ansible.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index 05419d5e8..c49ce2abc 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -47,7 +47,6 @@ jobs: molecule converge molecule idempotence molecule verify - molecule destroy working-directory: "${{ github.repository }}" # # https://galaxy.ansible.com/docs/contributing/importing.html # release: From bd41efe86813b49b043d40726352c320c4cfe73a Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Thu, 25 Feb 2021 06:24:09 +0100 Subject: [PATCH 385/898] Use local HEAD hash as installation target GitHub actions' GITHUB_SHA provides unexpected hashes for manually re-run pipelines. Instead rely on the commit as seen from the current git history. --- ansible/molecule/default/converge.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ansible/molecule/default/converge.yml b/ansible/molecule/default/converge.yml index 1ae260bac..c70c54d39 100644 --- a/ansible/molecule/default/converge.yml +++ b/ansible/molecule/default/converge.yml @@ -2,9 +2,15 @@ - name: update previous release to newest release hosts: all tasks: + - name: install git dependency + apt: + pkg: git + - name: obtain latest git hash in current tree + command: git rev-parse HEAD + register: git_hash - name: set current github commit as version when available set_fact: - paperlessng_version: "{{ lookup('env', 'GITHUB_SHA') | default('master', True) }}" + paperlessng_version: "{{ git_hash.stdout }}" - name: update to newest paperless-ng release include_role: name: ansible From 96b082b26de891f79021fa71882a3ca4e3428308 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:30:36 +0100 Subject: [PATCH 386/898] add text color generation based on luminance --- src/documents/serialisers.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index e6aef3627..4d52f496b 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1,6 +1,7 @@ import re import magic +import math from django.utils.text import slugify from rest_framework import serializers from rest_framework.fields import SerializerMethodField @@ -140,6 +141,21 @@ class TagSerializerVersion1(MatchingModelSerializer): class TagSerializer(MatchingModelSerializer): + def get_text_color(self, obj): + if obj.color: + h = obj.color.lstrip('#') + rgb = tuple(int(h[i:i + 2], 16)/256 for i in (0, 2, 4)) + luminance = math.sqrt( + 0.299 * math.pow(rgb[0], 2) + + 0.587 * math.pow(rgb[1], 2) + + 0.114 * math.pow(rgb[2], 2) + ) + return "#ffffff" if luminance < 0.5 else "#000000" + else: + return "#000000" + + text_color = serializers.SerializerMethodField() + class Meta: model = Tag fields = ( @@ -147,6 +163,7 @@ class TagSerializer(MatchingModelSerializer): "slug", "name", "color", + "text_color", "match", "matching_algorithm", "is_insensitive", From b04fa5812146916e3035f32b9c23bec39aead800 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:30:49 +0100 Subject: [PATCH 387/898] validate hex color strings --- src/documents/serialisers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 4d52f496b..689e2fe8d 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -171,6 +171,12 @@ class TagSerializer(MatchingModelSerializer): "document_count" ) + def validate_color(self, color): + regex = r"#[0-9a-fA-F]{6}" + if not re.match(regex, color): + raise serializers.ValidationError(_("Invalid color.")) + return color + class CorrespondentField(serializers.PrimaryKeyRelatedField): def get_queryset(self): From ec604bcdf0d73169f07538cae87e40f709184c80 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:32:22 +0100 Subject: [PATCH 388/898] adjust frontend to use the new tag color api --- src-ui/package-lock.json | 20 +++++++++++ src-ui/package.json | 1 + src-ui/src/app/app.module.ts | 8 +++-- .../common/input/color/color.component.html | 33 +++++++++++++++++++ .../common/input/color/color.component.scss | 0 .../input/color/color.component.spec.ts | 25 ++++++++++++++ .../common/input/color/color.component.ts | 27 +++++++++++++++ .../components/common/tag/tag.component.html | 4 +-- .../components/common/tag/tag.component.ts | 10 +----- .../tag-edit-dialog.component.html | 10 +----- .../tag-edit-dialog.component.ts | 12 ++----- .../manage/tag-list/tag-list.component.html | 4 +-- .../manage/tag-list/tag-list.component.ts | 10 +----- src-ui/src/app/data/paperless-tag.ts | 25 +++----------- src-ui/src/environments/environment.prod.ts | 2 +- src-ui/src/environments/environment.ts | 2 +- 16 files changed, 127 insertions(+), 66 deletions(-) create mode 100644 src-ui/src/app/components/common/input/color/color.component.html create mode 100644 src-ui/src/app/components/common/input/color/color.component.scss create mode 100644 src-ui/src/app/components/common/input/color/color.component.spec.ts create mode 100644 src-ui/src/app/components/common/input/color/color.component.ts diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index fd6d69538..54c99b1b3 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -2035,6 +2035,11 @@ "to-fast-properties": "^2.0.0" } }, + "@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" + }, "@istanbuljs/schema": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", @@ -7895,6 +7900,11 @@ "object-visit": "^1.0.0" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -8333,6 +8343,16 @@ } } }, + "ngx-color": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-6.2.0.tgz", + "integrity": "sha512-n04tcMnCpOgmI24egST94YwHmnSoAxK8O1T2t3nGrTwWbvw5XBRJvImNFnoNrriBXzc4Gx4hFehH5MU8CZxp1w==", + "requires": { + "@ctrl/tinycolor": "^3.1.6", + "material-colors": "^1.2.6", + "tslib": "^2.0.0" + } + }, "ngx-cookie-service": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-10.1.1.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index a4d014284..595228501 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -26,6 +26,7 @@ "file-saver": "^2.0.5", "ng-bootstrap": "^1.6.3", "ng2-pdf-viewer": "^6.3.2", + "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^10.0.0", "ngx-infinite-scroll": "^9.1.0", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 0cc42292b..cb3698187 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -63,6 +63,8 @@ import { DateComponent } from './components/common/input/date/date.component'; import { ISODateTimeAdapter } from './utils/ngb-iso-date-time-adapter'; import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'; import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'; +import { ColorSliderModule } from 'ngx-color/slider'; +import { ColorComponent } from './components/common/input/color/color.component'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; @@ -125,7 +127,8 @@ registerLocaleData(localeEnGb) NumberComponent, SafePipe, CustomDatePipe, - DateComponent + DateComponent, + ColorComponent ], imports: [ BrowserModule, @@ -137,7 +140,8 @@ registerLocaleData(localeEnGb) NgxFileDropModule, InfiniteScrollModule, PdfViewerModule, - NgSelectModule + NgSelectModule, + ColorSliderModule ], providers: [ DatePipe, diff --git a/src-ui/src/app/components/common/input/color/color.component.html b/src-ui/src/app/components/common/input/color/color.component.html new file mode 100644 index 000000000..c39c41d8f --- /dev/null +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -0,0 +1,33 @@ +<div class="form-group"> + <label [for]="inputId">{{title}}</label> + + <div class="input-group"> + <div class="input-group-prepend"> + <span class="input-group-text" [style.background-color]="value">   </span> + </div> + + <ng-template #popContent> + <div style="min-width: 200px;" class="pb-3"> + <color-slider [color]="value" (onChangeComplete)="colorChanged($event)"></color-slider> + </div> + + </ng-template> + + <input class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)" [autoClose]="'outside'" [ngbPopover]="popContent" placement="bottom"> + + <div class="input-group-append"> + <button class="btn btn-outline-secondary" type="button" (click)="randomize()"> + <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-dice-5" viewBox="0 0 16 16"> + <path d="M13 1a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h10zM3 0a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V3a3 3 0 0 0-3-3H3z"/> + <path d="M5.5 4a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm8 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-8 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm4-4a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/> + </svg> + </button> + </div> + + <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> + <div class="invalid-feedback"> + {{error}} + </div> + </div> + +</div> \ No newline at end of file diff --git a/src-ui/src/app/components/common/input/color/color.component.scss b/src-ui/src/app/components/common/input/color/color.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/input/color/color.component.spec.ts b/src-ui/src/app/components/common/input/color/color.component.spec.ts new file mode 100644 index 000000000..7c5d0d270 --- /dev/null +++ b/src-ui/src/app/components/common/input/color/color.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ColorComponent } from './color.component'; + +describe('ColorComponent', () => { + let component: ColorComponent; + let fixture: ComponentFixture<ColorComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ColorComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ColorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/components/common/input/color/color.component.ts b/src-ui/src/app/components/common/input/color/color.component.ts new file mode 100644 index 000000000..e75bbee16 --- /dev/null +++ b/src-ui/src/app/components/common/input/color/color.component.ts @@ -0,0 +1,27 @@ +import { Component, forwardRef } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { AbstractInputComponent } from '../abstract-input'; + +@Component({ + providers: [{ + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ColorComponent), + multi: true + }], + selector: 'app-input-color', + templateUrl: './color.component.html', + styleUrls: ['./color.component.scss'] +}) +export class ColorComponent extends AbstractInputComponent<string> { + + constructor() { + super() + } + + randomize() { + } + + colorChanged(value) { + this.value = value.color.hex + } +} diff --git a/src-ui/src/app/components/common/tag/tag.component.html b/src-ui/src/app/components/common/tag/tag.component.html index 29c554142..fc8b9ef65 100644 --- a/src-ui/src/app/components/common/tag/tag.component.html +++ b/src-ui/src/app/components/common/tag/tag.component.html @@ -1,2 +1,2 @@ -<span *ngIf="!clickable" class="badge" [style.background]="getColour().id" [style.color]="getColour().textColor">{{tag.name}}</span> -<a [routerLink]="" [title]="linkTitle" *ngIf="clickable" class="badge" [style.background]="getColour().id" [style.color]="getColour().textColor">{{tag.name}}</a> \ No newline at end of file +<span *ngIf="!clickable" class="badge" [style.background]="tag.color" [style.color]="tag.text_color">{{tag.name}}</span> +<a [routerLink]="" [title]="linkTitle" *ngIf="clickable" class="badge" [style.background]="tag.color" [style.color]="tag.text_color">{{tag.name}}</a> \ No newline at end of file diff --git a/src-ui/src/app/components/common/tag/tag.component.ts b/src-ui/src/app/components/common/tag/tag.component.ts index a3c558182..e552ade9c 100644 --- a/src-ui/src/app/components/common/tag/tag.component.ts +++ b/src-ui/src/app/components/common/tag/tag.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { TAG_COLOURS, PaperlessTag } from 'src/app/data/paperless-tag'; +import { PaperlessTag } from 'src/app/data/paperless-tag'; @Component({ selector: 'app-tag', @@ -22,12 +22,4 @@ export class TagComponent implements OnInit { ngOnInit(): void { } - getColour() { - var color = TAG_COLOURS.find(c => c.id == this.tag.colour) - if (color) { - return color - } - return { id: this.tag.colour, name: this.tag.colour, textColor: "#ffffff" } - } - } diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html index 0d2f6a1c7..d9db9283a 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html @@ -8,15 +8,7 @@ <div class="modal-body"> <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text> - - <div class="form-group paperless-input-select"> - <label for="colour" i18n>Color</label> - <ng-select name="colour" formControlName="colour" [items]="getColours()" bindValue="id" bindLabel="name" [clearable]="false"> - <ng-template ng-option-tmp ng-label-tmp let-item="item"> - <span class="badge" [style.background]="item.id" [style.color]="item.textColor">{{item.name}}</span> - </ng-template> - </ng-select> - </div> + <app-input-color i18n-title title="Color" formControlName="color" [error]="error?.color"></app-input-color> <app-input-check i18n-title title="Inbox tag" formControlName="is_inbox_tag" i18n-hint hint="Inbox tags are automatically assigned to all consumed documents."></app-input-check> <app-input-select i18n-title title="Matching algorithm" [items]="getMatchingAlgorithms()" formControlName="matching_algorithm"></app-input-select> diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts index d5b281e30..53cd50c45 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component'; -import { TAG_COLOURS, PaperlessTag } from 'src/app/data/paperless-tag'; +import { PaperlessTag } from 'src/app/data/paperless-tag'; import { TagService } from 'src/app/services/rest/tag.service'; import { ToastService } from 'src/app/services/toast.service'; @@ -28,7 +28,7 @@ export class TagEditDialogComponent extends EditDialogComponent<PaperlessTag> { getForm(): FormGroup { return new FormGroup({ name: new FormControl(''), - colour: new FormControl(''), + color: new FormControl(''), is_inbox_tag: new FormControl(false), matching_algorithm: new FormControl(1), match: new FormControl(""), @@ -36,12 +36,4 @@ export class TagEditDialogComponent extends EditDialogComponent<PaperlessTag> { }) } - getColours() { - return TAG_COLOURS - } - - getColor(id) { - return TAG_COLOURS.find(c => c.id == id) - } - } diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.html b/src-ui/src/app/components/manage/tag-list/tag-list.component.html index 62ecbcb90..bb4acdd7b 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.html @@ -26,8 +26,8 @@ <tbody> <tr *ngFor="let tag of data"> <td scope="row">{{ tag.name }}</td> - <td scope="row"><span class="badge" [style.color]="getColor(tag.colour).textColor" - [style.background-color]="tag.colour">{{ getColor(tag.colour).name }}</span></td> + <td scope="row"><span class="badge" [style.color]="tag.text_color" + [style.background-color]="tag.color">{{tag.color}}</span></td> <td scope="row">{{ getMatching(tag) }}</td> <td scope="row">{{ tag.document_count }}</td> <td scope="row"> diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.ts b/src-ui/src/app/components/manage/tag-list/tag-list.component.ts index ac468c46b..7ea379f64 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { FILTER_HAS_TAG } from 'src/app/data/filter-rule-type'; -import { TAG_COLOURS, PaperlessTag } from 'src/app/data/paperless-tag'; +import { PaperlessTag } from 'src/app/data/paperless-tag'; import { DocumentListViewService } from 'src/app/services/document-list-view.service'; import { TagService } from 'src/app/services/rest/tag.service'; import { ToastService } from 'src/app/services/toast.service'; @@ -22,14 +22,6 @@ export class TagListComponent extends GenericListComponent<PaperlessTag> { super(tagService, modalService, TagEditDialogComponent, toastService) } - getColor(id) { - var color = TAG_COLOURS.find(c => c.id == id) - if (color) { - return color - } - return { id: id, name: id, textColor: "#ffffff" } - } - getDeleteMessage(object: PaperlessTag) { return $localize`Do you really want to delete the tag "${object.name}"?` } diff --git a/src-ui/src/app/data/paperless-tag.ts b/src-ui/src/app/data/paperless-tag.ts index 1518caa1f..a999666c4 100644 --- a/src-ui/src/app/data/paperless-tag.ts +++ b/src-ui/src/app/data/paperless-tag.ts @@ -1,27 +1,10 @@ -import { MatchingModel } from './matching-model'; -import { ObjectWithId } from './object-with-id'; - - -export const TAG_COLOURS = [ - { id: "", name: "Auto", textColor: "#000000" }, - { id: "#a6cee3", name: $localize`Light blue`, textColor: "#000000" }, - { id: "#1f78b4", name: $localize`Blue`, textColor: "#ffffff" }, - { id: "#b2df8a", name: $localize`Light green`, textColor: "#000000" }, - { id: "#33a02c", name: $localize`Green`, textColor: "#ffffff" }, - { id: "#fb9a99", name: $localize`Light red`, textColor: "#000000" }, - { id: "#e31a1c", name: $localize`Red `, textColor: "#ffffff" }, - { id: "#fdbf6f", name: $localize`Light orange`, textColor: "#000000" }, - { id: "#ff7f00", name: $localize`Orange`, textColor: "#000000" }, - { id: "#cab2d6", name: $localize`Light violet`, textColor: "#000000" }, - { id: "#6a3d9a", name: $localize`Violet`, textColor: "#ffffff" }, - { id: "#b15928", name: $localize`Brown`, textColor: "#ffffff" }, - { id: "#000000", name: $localize`Black`, textColor: "#ffffff" }, - { id: "#cccccc", name: $localize`Light grey`, textColor: "#000000" } -] +import { MatchingModel } from "./matching-model"; export interface PaperlessTag extends MatchingModel { - colour?: string + color?: string + + text_color?: string is_inbox_tag?: boolean diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 50cf6d954..2d07ac31c 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -1,7 +1,7 @@ export const environment = { production: true, apiBaseUrl: "/api/", - apiVersion: "1", + apiVersion: "2", appTitle: "Paperless-ng", version: "1.2.1", webSocketHost: window.location.host, diff --git a/src-ui/src/environments/environment.ts b/src-ui/src/environments/environment.ts index b0ac843d5..3d981b677 100644 --- a/src-ui/src/environments/environment.ts +++ b/src-ui/src/environments/environment.ts @@ -5,7 +5,7 @@ export const environment = { production: false, apiBaseUrl: "http://localhost:8000/api/", - apiVersion: "1", + apiVersion: "2", appTitle: "Paperless-ng", version: "DEVELOPMENT", webSocketHost: "localhost:8000", From ffce0f803800af2a9712bcb14a93543513cd4ed6 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:37:39 +0100 Subject: [PATCH 389/898] fix pt-br calendar --- src-ui/src/app/app.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 0cc42292b..cf28b1e0a 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -67,7 +67,7 @@ import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; import localeDe from '@angular/common/locales/de'; -import localePt from '@angular/common/locales/pt-PT'; +import localePt from '@angular/common/locales/pt'; import localeEnGb from '@angular/common/locales/en-GB'; registerLocaleData(localeFr) From b8af04517a3603b16ac05c43a0c4b34965b69270 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:42:21 +0100 Subject: [PATCH 390/898] fixes #603 --- src-ui/src/app/components/app-frame/app-frame.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 34a978fe5..5692d9f78 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -94,7 +94,7 @@ </svg> {{d.title | documentTitle}} </a> </li> - <li class="nav-item w-100" *ngIf="openDocuments.length > 1"> + <li class="nav-item w-100" *ngIf="openDocuments.length >= 1"> <a class="nav-link text-truncate" [routerLink]="" (click)="closeAll()"> <svg class="sidebaricon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#x"/> From 00f665623f76a3ce098c6428630bfc8b5f1a4c94 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:42:38 +0100 Subject: [PATCH 391/898] fix duplicate IDs --- .../common/date-dropdown/date-dropdown.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html index ee8e6e6f4..dc329f964 100644 --- a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html +++ b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html @@ -20,7 +20,7 @@ </div> <div class="input-group input-group-sm"> - <input class="form-control" [placeholder]="datePlaceHolder" id="dateAfter" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()" + <input class="form-control" [placeholder]="datePlaceHolder" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()" [(ngModel)]="dateAfter" ngbDatepicker #dateAfterPicker="ngbDatepicker"> <div class="input-group-append"> <button class="btn btn-outline-secondary" (click)="dateAfterPicker.toggle()" type="button"> @@ -45,7 +45,7 @@ </div> <div class="input-group input-group-sm"> - <input class="form-control" [placeholder]="datePlaceHolder" id="dateBefore" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()" + <input class="form-control" [placeholder]="datePlaceHolder" (dateSelect)="onChangeDebounce()" (change)="onChangeDebounce()" [(ngModel)]="dateBefore" ngbDatepicker #dateBeforePicker="ngbDatepicker"> <div class="input-group-append"> <button class="btn btn-outline-secondary" (click)="dateBeforePicker.toggle()" type="button"> From 1cdc08156066d070c11c659f314b1e5494443640 Mon Sep 17 00:00:00 2001 From: Bolko Schreiber <bolko_schreiber@cotyinc.com> Date: Thu, 25 Feb 2021 13:57:45 +0100 Subject: [PATCH 392/898] Added option to invert thumbnails in dark mode --- .../document-card-large.component.html | 2 +- .../document-card-large.component.scss | 2 +- .../document-card-large.component.ts | 7 ++++++- .../document-card-small.component.html | 2 +- .../document-card-small.component.scss | 2 +- .../document-card-small.component.ts | 7 ++++++- .../manage/settings/settings.component.html | 1 + .../components/manage/settings/settings.component.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 2 ++ src-ui/src/theme_dark.scss | 12 +++++++++++- 10 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index a47f13653..a531dea97 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -1,7 +1,7 @@ <div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable"> <div class="row no-gutters"> <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> - <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left"> + <img [src]="getThumbUrl()" class="card-img {{ getIsThumbInverted() ? 'doc-img-inverted' : 'doc-img' }} border-right rounded-left"> <div style="top: 0; left: 0" class="position-absolute border-right border-bottom bg-light p-1" [class.document-card-check]="!selected"> <div class="custom-control custom-checkbox"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index c49de93b5..10454dc73 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -4,7 +4,7 @@ overflow-wrap: anywhere; } -.doc-img { +.doc-img, .doc-img-inverted { object-fit: cover; object-position: top left; height: 100%; diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index f8bb9f518..ae68f5b60 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { DocumentService } from 'src/app/services/rest/document.service'; +import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @Component({ selector: 'app-document-card-large', @@ -10,7 +11,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; }) export class DocumentCardLargeComponent implements OnInit { - constructor(private documentService: DocumentService, private sanitizer: DomSanitizer) { } + constructor(private documentService: DocumentService, private sanitizer: DomSanitizer, private settingsService: SettingsService) { } @Input() selected = false @@ -53,6 +54,10 @@ export class DocumentCardLargeComponent implements OnInit { ngOnInit(): void { } + getIsThumbInverted() { + return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED) + } + getDetailsAsString() { if (typeof this.details === 'string') { return this.details.substring(0, 500) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 28dc84236..f90239e63 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -1,7 +1,7 @@ <div class="col p-2 h-100"> <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected"> <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> - <img class="card-img doc-img rounded-top" [src]="getThumbUrl()"> + <img class="card-img {{ getIsThumbInverted() ? 'doc-img-inverted' : 'doc-img' }} rounded-top" [src]="getThumbUrl()"> <div class="border-right border-bottom bg-light p-1 rounded document-card-check"> <div class="custom-control custom-checkbox"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index cbe8fa6f6..680198efc 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -1,6 +1,6 @@ @import "/src/theme"; -.doc-img { +.doc-img, .doc-img-inverted { object-fit: cover; object-position: top left; height: 200px; diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 5db0e30c0..95c01dcec 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { map } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { DocumentService } from 'src/app/services/rest/document.service'; +import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @Component({ selector: 'app-document-card-small', @@ -10,7 +11,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; }) export class DocumentCardSmallComponent implements OnInit { - constructor(private documentService: DocumentService) { } + constructor(private documentService: DocumentService, private settingsService: SettingsService) { } @Input() selected = false @@ -32,6 +33,10 @@ export class DocumentCardSmallComponent implements OnInit { ngOnInit(): void { } + getIsThumbInverted() { + return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED) + } + getThumbUrl() { return this.documentService.getThumbUrl(this.document.id) } diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 3674bbcb9..5467f6ea2 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -96,6 +96,7 @@ <div class="col"> <app-input-check i18n-title title="Use system settings" formControlName="darkModeUseSystem"></app-input-check> <app-input-check [hidden]="settingsForm.value.darkModeUseSystem" i18n-title title="Enable dark mode" formControlName="darkModeEnabled"></app-input-check> + <app-input-check i18n-title title="Invert Thumbnails in dark mode" formControlName="darkModeInvertThumbs"></app-input-check> </div> </div> diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 15cfb8a19..fbcef7b70 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -21,6 +21,7 @@ export class SettingsComponent implements OnInit { 'documentListItemPerPage': new FormControl(this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE)), 'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), 'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), + 'darkModeInvertThumbs': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)), 'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), 'savedViews': this.savedViewGroup, 'displayLanguage': new FormControl(this.settings.getLanguage()), @@ -74,6 +75,7 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.DOCUMENT_LIST_SIZE, this.settingsForm.value.documentListItemPerPage) this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) + this.settings.set(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, (this.settingsForm.value.darkModeInvertThumbs == true).toString()) this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index d511fa65f..96db88430 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -21,6 +21,7 @@ export const SETTINGS_KEYS = { DOCUMENT_LIST_SIZE: 'general-settings:documentListSize', DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system', DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', + DARK_MODE_THUMB_INVERTED: 'general-settings:dark-mode:thumb-inverted', USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', DATE_LOCALE: 'general-settings:date-display:date-locale', DATE_FORMAT: 'general-settings:date-display:date-format', @@ -36,6 +37,7 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50}, {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, + {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: false}, {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 4e850f017..89a7bea34 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -138,6 +138,16 @@ $border-color-dark-mode: #47494f; } .doc-img { + mix-blend-mode: normal; + border-radius: 0; + border-color: $bg-dark-mode; + + &.border-right { + border-right: none !important; + } + } + + .doc-img-inverted { mix-blend-mode: normal; filter: invert(95%) hue-rotate(180deg); border-radius: 0; @@ -148,7 +158,7 @@ $border-color-dark-mode: #47494f; } } - .card-selected .doc-img { + .card-selected .doc-img .doc-img-inverted { mix-blend-mode: luminosity; } From cd2f36f86c3772c89c7b1fc3632bab46f719116d Mon Sep 17 00:00:00 2001 From: Bolko Schreiber <bolko_schreiber@cotyinc.com> Date: Thu, 25 Feb 2021 14:52:55 +0100 Subject: [PATCH 393/898] Set default value of DARK_MODE_THUMB_INVERTED to true --- src-ui/src/app/services/settings.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 96db88430..a89c791c6 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -37,7 +37,7 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50}, {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, - {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: false}, + {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: true}, {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, From e001921fd1d85a4edb0e6b22bebcb27765d46022 Mon Sep 17 00:00:00 2001 From: Christopher Nethercott <ccnethercott@gmail.com> Date: Thu, 25 Feb 2021 14:16:22 +0000 Subject: [PATCH 394/898] Fixed typo of scripts --- docs/extending.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/extending.rst b/docs/extending.rst index 860106258..287fb834f 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -25,7 +25,7 @@ This section describes the steps you need to take to start development on paperl * Python 3.6. * All dependencies listed in the :ref:`Bare metal route <setup-bare_metal>` - * redis. You can either install redis or use the included scritps/start-services.sh + * redis. You can either install redis or use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server). From d5c694e0428ee94bea26ba547c93a19ff5bf8956 Mon Sep 17 00:00:00 2001 From: Bolko Schreiber <bolko_schreiber@cotyinc.com> Date: Thu, 25 Feb 2021 15:35:15 +0100 Subject: [PATCH 395/898] cleanup css --- .../document-card-large.component.html | 2 +- .../document-card-large.component.scss | 2 +- .../document-card-small.component.html | 2 +- .../document-card-small.component.scss | 2 +- src-ui/src/theme_dark.scss | 11 ++--------- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index a531dea97..e1ad87bcc 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -1,7 +1,7 @@ <div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable"> <div class="row no-gutters"> <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> - <img [src]="getThumbUrl()" class="card-img {{ getIsThumbInverted() ? 'doc-img-inverted' : 'doc-img' }} border-right rounded-left"> + <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left" [class.inverted]="getIsThumbInverted()"> <div style="top: 0; left: 0" class="position-absolute border-right border-bottom bg-light p-1" [class.document-card-check]="!selected"> <div class="custom-control custom-checkbox"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 10454dc73..c49de93b5 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -4,7 +4,7 @@ overflow-wrap: anywhere; } -.doc-img, .doc-img-inverted { +.doc-img { object-fit: cover; object-position: top left; height: 100%; diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index f90239e63..862b0ad22 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -1,7 +1,7 @@ <div class="col p-2 h-100"> <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected"> <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> - <img class="card-img {{ getIsThumbInverted() ? 'doc-img-inverted' : 'doc-img' }} rounded-top" [src]="getThumbUrl()"> + <img class="card-img doc-img rounded-top" [class.inverted]="getIsThumbInverted()" [src]="getThumbUrl()"> <div class="border-right border-bottom bg-light p-1 rounded document-card-check"> <div class="custom-control custom-checkbox"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 680198efc..cbe8fa6f6 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -1,6 +1,6 @@ @import "/src/theme"; -.doc-img, .doc-img-inverted { +.doc-img { object-fit: cover; object-position: top left; height: 200px; diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 89a7bea34..1b26680fe 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -147,18 +147,11 @@ $border-color-dark-mode: #47494f; } } - .doc-img-inverted { - mix-blend-mode: normal; + .doc-img.inverted { filter: invert(95%) hue-rotate(180deg); - border-radius: 0; - border-color: $bg-dark-mode; - - &.border-right { - border-right: none !important; - } } - .card-selected .doc-img .doc-img-inverted { + .card-selected .doc-img { mix-blend-mode: luminosity; } From e47f577c7629c2e9fc494a196d0d86e1a9692603 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 16:04:45 +0100 Subject: [PATCH 396/898] fix default api version --- src/paperless/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 48712954c..3dcff4a89 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -114,7 +114,7 @@ REST_FRAMEWORK = { 'rest_framework.authentication.TokenAuthentication' ], 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', - 'DEFAULT_VERSION': 'v1', + 'DEFAULT_VERSION': '1', 'ALLOWED_VERSIONS': ['1', '2'] } From e8ab6f1b08011920ea3ada79d036a2df0df916fa Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 16:22:50 +0100 Subject: [PATCH 397/898] fixed a regression in the date pipe --- src-ui/src/app/pipes/custom-date.pipe.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/pipes/custom-date.pipe.ts b/src-ui/src/app/pipes/custom-date.pipe.ts index cf5a931cb..6587c157a 100644 --- a/src-ui/src/app/pipes/custom-date.pipe.ts +++ b/src-ui/src/app/pipes/custom-date.pipe.ts @@ -13,17 +13,20 @@ const FORMAT_TO_ISO_FORMAT = { }) export class CustomDatePipe extends DatePipe implements PipeTransform { + private defaultLocale: string + constructor(@Inject(LOCALE_ID) locale: string, private settings: SettingsService) { super(locale) + this.defaultLocale = locale } transform(value: any, format?: string, timezone?: string, locale?: string): string | null { - let l = locale || this.settings.get(SETTINGS_KEYS.DATE_LOCALE) + let l = locale || this.settings.get(SETTINGS_KEYS.DATE_LOCALE) || this.defaultLocale let f = format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT) if (l == "iso-8601") { return super.transform(value, FORMAT_TO_ISO_FORMAT[f], timezone) } else { - return super.transform(value, format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT), timezone, locale) + return super.transform(value, format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT), timezone, l) } } From 055c66a11e97695743eff433189c868985adf5f1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 16:24:24 +0100 Subject: [PATCH 398/898] fix an issue with the pt-br translation --- src-ui/src/locale/messages.pt_BR.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index ff438073d..fe574c7bc 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1729,7 +1729,7 @@ </trans-unit> <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Mais um documento} other {Mais <x id="INTERPOLATION"/> documentos}</target> + <target>{VAR_PLURAL, plural, =1 {Mais um documento} other {Mais <x id="INTERPOLATION"/> documentos}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> From ba73f6fe3e718aafea69e534e7e2d736dc8f887d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 16:29:49 +0100 Subject: [PATCH 399/898] fix date input error display --- .../app/components/common/input/date/date.component.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/common/input/date/date.component.html b/src-ui/src/app/components/common/input/date/date.component.html index ca9ccc040..19f606a16 100644 --- a/src-ui/src/app/components/common/input/date/date.component.html +++ b/src-ui/src/app/components/common/input/date/date.component.html @@ -1,7 +1,7 @@ <div class="form-group"> <label [for]="inputId">{{title}}</label> - <div class="input-group"> - <input [class.is-invalid]="error" class="form-control" [placeholder]="placeholder" [id]="inputId" (dateSelect)="onChange(value)" (change)="onChange(value)" + <div class="input-group" [class.is-invalid]="error"> + <input class="form-control" [class.is-invalid]="error" [placeholder]="placeholder" [id]="inputId" (dateSelect)="onChange(value)" (change)="onChange(value)" name="dp" [(ngModel)]="value" ngbDatepicker #datePicker="ngbDatepicker" #datePickerContent="ngModel"> <div class="input-group-append"> <button class="btn btn-outline-secondary calendar" (click)="datePicker.toggle()" type="button"> @@ -10,6 +10,7 @@ </svg> </button> </div> - <div class="invalid-feedback" *ngIf="error" i18n>Invalid date.</div> </div> + <div class="invalid-feedback" i18n>Invalid date.</div> + <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> </div> From bb5fc39190f17a95990587c778e2e2c7ea6f0328 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Thu, 25 Feb 2021 07:29:51 -0800 Subject: [PATCH 400/898] Remove redundant openDocuments and unused subscription --- .../app-frame/app-frame.component.ts | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index ad4460f16..0709a83ca 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { from, Observable, Subscription } from 'rxjs'; @@ -16,7 +16,7 @@ import { Meta } from '@angular/platform-browser'; templateUrl: './app-frame.component.html', styleUrls: ['./app-frame.component.scss'] }) -export class AppFrameComponent implements OnInit, OnDestroy { +export class AppFrameComponent implements OnInit { constructor ( public router: Router, @@ -26,7 +26,7 @@ export class AppFrameComponent implements OnInit, OnDestroy { public savedViewService: SavedViewService, private meta: Meta ) { - + } versionString = `${environment.appTitle} ${environment.version}` @@ -39,9 +39,9 @@ export class AppFrameComponent implements OnInit, OnDestroy { searchField = new FormControl('') - openDocuments: PaperlessDocument[] = [] - - openDocumentsSubscription: Subscription + get openDocuments(): PaperlessDocument[] { + return this.openDocumentsService.getOpenDocuments() + } searchAutoComplete = (text$: Observable<string>) => text$.pipe( @@ -92,13 +92,6 @@ export class AppFrameComponent implements OnInit, OnDestroy { } ngOnInit() { - this.openDocuments = this.openDocumentsService.getOpenDocuments() - } - - ngOnDestroy() { - if (this.openDocumentsSubscription) { - this.openDocumentsSubscription.unsubscribe() - } } get displayName() { From 45fcb607f77816e4d5f119d63b30347fca7bf8ed Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 16:42:06 +0100 Subject: [PATCH 401/898] changelog --- docs/changelog.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 137fa2fd2..73e457176 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,7 +8,7 @@ Changelog paperless-ng 1.2.1 ################## -* `Rodrigo Avelino <https://github.com/rodavelino>`_ translated Paperless into Portuguese (Brazil). +* `Rodrigo Avelino <https://github.com/rodavelino>`_ translated Paperless into Portuguese (Brazil)! * The date input fields now respect the currently selected date format. @@ -16,6 +16,8 @@ paperless-ng 1.2.1 * When using regular expression matching, the regular expression is now validated before saving the tag/correspondent/type. +* Regression fix: Dates on the front end did not respect date locale settings in some cases. + paperless-ng 1.2.0 ################## From 9ff9624204eddc8362d3b5fc7776c9ec1b2cfa31 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Thu, 25 Feb 2021 07:43:02 -0800 Subject: [PATCH 402/898] Allow closing individual documents from sidebar --- .../app-frame/app-frame.component.html | 7 +++- .../app-frame/app-frame.component.scss | 33 +++++++++++++++---- .../app-frame/app-frame.component.ts | 14 ++++++++ src-ui/src/theme_dark.scss | 4 +++ 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 5692d9f78..c59bc3e0a 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -92,9 +92,14 @@ <svg class="sidebaricon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#file-text"/> </svg> {{d.title | documentTitle}} + <span class="close bg-light" (click)="closeDocument(d); $event.preventDefault()"> + <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-x" viewBox="0 0 16 16"> + <use xlink:href="assets/bootstrap-icons.svg#x"/> + </svg> + </span> </a> </li> - <li class="nav-item w-100" *ngIf="openDocuments.length >= 1"> + <li class="nav-item w-100" *ngIf="openDocuments.length > 1"> <a class="nav-link text-truncate" [routerLink]="" (click)="closeAll()"> <svg class="sidebaricon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#x"/> diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index b6181b364..efae6cdd4 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -62,16 +62,37 @@ flex-wrap: nowrap; } -.nav-item .nav-link-additional { - margin-top: 0.2rem; - margin-left: 0.25rem; - padding-top: 0.5rem; +.nav-item { + position: relative; - svg { - margin-bottom: 2px; + &:hover .close { + display: block; + } + + .close { + display: none; + position: absolute; + cursor: pointer; + opacity: 1; + top: 0; + padding: .25rem .3rem 0; + right: .4rem; + width: 1.8rem; + height: 100%; + } + + .nav-item .nav-link-additional { + margin-top: 0.2rem; + margin-left: 0.25rem; + padding-top: 0.5rem; + + svg { + margin-bottom: 2px; + } } } + /* * Navbar */ diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 0709a83ca..05b1f3f68 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -77,6 +77,20 @@ export class AppFrameComponent implements OnInit { this.router.navigate(['search'], {queryParams: {query: this.searchField.value}}) } + closeDocument(d: PaperlessDocument) { + this.closeMenu() + this.openDocumentsService.closeDocument(d) + + // TODO: is there a better way to do this? (taken from closeAll) + let route = this.activatedRoute + while (route.firstChild) { + route = route.firstChild + } + if (route.component == DocumentDetailComponent) { + this.router.navigate([""]) + } + } + closeAll() { this.closeMenu() this.openDocumentsService.closeAll() diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 751ff2b15..11ea88c28 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -63,6 +63,10 @@ $border-color-dark-mode: #47494f; background-color: $bg-dark-mode; color: $text-color-dark-mode; border-color: $border-color-dark-mode $border-color-dark-mode $bg-dark-mode; + + .close { + background-color: inherit !important; + } } &:hover { From a86f9daf3db12a4754dddee108af4f241c30a088 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Thu, 25 Feb 2021 07:48:48 -0800 Subject: [PATCH 403/898] fix forgot to remove class when nested nav-link-additional scss block --- src-ui/src/app/components/app-frame/app-frame.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index efae6cdd4..7fa588e9e 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -81,7 +81,7 @@ height: 100%; } - .nav-item .nav-link-additional { + .nav-link-additional { margin-top: 0.2rem; margin-left: 0.25rem; padding-top: 0.5rem; From c1ae9f643b5e33e0d5aba89c2d0a237c368a7a9a Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:16:31 +0100 Subject: [PATCH 404/898] bugfixes --- src/documents/migrations/1013_migrate_tag_colour.py | 2 +- src/documents/models.py | 4 +++- src/documents/serialisers.py | 8 ++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/documents/migrations/1013_migrate_tag_colour.py b/src/documents/migrations/1013_migrate_tag_colour.py index 0c1189074..323ff2bfb 100644 --- a/src/documents/migrations/1013_migrate_tag_colour.py +++ b/src/documents/migrations/1013_migrate_tag_colour.py @@ -60,7 +60,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='tag', name='color', - field=models.CharField(blank=True, max_length=7, verbose_name='color'), + field=models.CharField(default='#a6cee3', max_length=7, verbose_name='color'), ), migrations.RunPython(forward, reverse), migrations.RemoveField( diff --git a/src/documents/models.py b/src/documents/models.py index abbcc124e..3d81efea4 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -79,7 +79,9 @@ class Tag(MatchingModel): color = models.CharField( _("color"), - blank=True, max_length=7) + max_length=7, + default="#a6cee3" + ) is_inbox_tag = models.BooleanField( _("is inbox tag"), diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 689e2fe8d..675bb464a 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -111,7 +111,7 @@ class ColorField(serializers.Field): for id, color in self.COLOURS: if id == data: return color - return "#a6cee3" + raise serializers.ValidationError() def to_representation(self, value): for id, color in self.COLOURS: @@ -122,7 +122,7 @@ class ColorField(serializers.Field): class TagSerializerVersion1(MatchingModelSerializer): - colour = ColorField(source='color') + colour = ColorField(source='color', default="#a6cee3") class Meta: model = Tag @@ -142,7 +142,7 @@ class TagSerializerVersion1(MatchingModelSerializer): class TagSerializer(MatchingModelSerializer): def get_text_color(self, obj): - if obj.color: + try: h = obj.color.lstrip('#') rgb = tuple(int(h[i:i + 2], 16)/256 for i in (0, 2, 4)) luminance = math.sqrt( @@ -151,7 +151,7 @@ class TagSerializer(MatchingModelSerializer): 0.114 * math.pow(rgb[2], 2) ) return "#ffffff" if luminance < 0.5 else "#000000" - else: + except ValueError: return "#000000" text_color = serializers.SerializerMethodField() From 9f56fbfa1d82d908e12870c5d2b57163d1a7a14c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:17:18 +0100 Subject: [PATCH 405/898] tests --- src/documents/tests/test_api.py | 63 +++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index cbd10ac71..9a4788135 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -807,6 +807,69 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): }, format='json') self.assertEqual(response.status_code, 201, endpoint) + def test_tag_color_default(self): + response = self.client.post("/api/tags/", { + "name": "tag" + }, format="json") + self.assertEqual(response.status_code, 201) + self.assertEqual(Tag.objects.get(id=response.data['id']).color, "#a6cee3") + self.assertEqual(self.client.get(f"/api/tags/{response.data['id']}/", format="json").data['colour'], 1) + + def test_tag_color(self): + response = self.client.post("/api/tags/", { + "name": "tag", + "colour": 3 + }, format="json") + self.assertEqual(response.status_code, 201) + self.assertEqual(Tag.objects.get(id=response.data['id']).color, "#b2df8a") + self.assertEqual(self.client.get(f"/api/tags/{response.data['id']}/", format="json").data['colour'], 3) + + def test_tag_color_invalid(self): + response = self.client.post("/api/tags/", { + "name": "tag", + "colour": 34 + }, format="json") + self.assertEqual(response.status_code, 400) + + def test_tag_color_custom(self): + tag = Tag.objects.create(name="test", color="#abcdef") + self.assertEqual(self.client.get(f"/api/tags/{tag.id}/", format="json").data['colour'], 1) + + +class TestDocumentApiV2(DirectoriesMixin, APITestCase): + + def setUp(self): + super(TestDocumentApiV2, self).setUp() + + self.user = User.objects.create_superuser(username="temp_admin") + + self.client.force_login(user=self.user) + self.client.defaults['HTTP_ACCEPT'] = 'application/json; version=2' + + def test_tag_validate_color(self): + self.assertEqual(self.client.post("/api/tags/", {"name": "test", "color": "#12fFaA"}, format="json").status_code, 201) + + self.assertEqual(self.client.post("/api/tags/", {"name": "test1", "color": "abcdef"}, format="json").status_code, 400) + self.assertEqual(self.client.post("/api/tags/", {"name": "test2", "color": "#abcdfg"}, format="json").status_code, 400) + self.assertEqual(self.client.post("/api/tags/", {"name": "test3", "color": "#asd"}, format="json").status_code, 400) + self.assertEqual(self.client.post("/api/tags/", {"name": "test4", "color": "#12121212"}, format="json").status_code, 400) + + def test_tag_text_color(self): + t = Tag.objects.create(name="tag1", color="#000000") + self.assertEqual(self.client.get(f"/api/tags/{t.id}/", format="json").data['text_color'], "#ffffff") + + t.color = "#ffffff" + t.save() + self.assertEqual(self.client.get(f"/api/tags/{t.id}/", format="json").data['text_color'], "#000000") + + t.color = "asdf" + t.save() + self.assertEqual(self.client.get(f"/api/tags/{t.id}/", format="json").data['text_color'], "#000000") + + t.color = "123" + t.save() + self.assertEqual(self.client.get(f"/api/tags/{t.id}/", format="json").data['text_color'], "#000000") + class TestBulkEdit(DirectoriesMixin, APITestCase): From bae41cc50a810eb3103115b9a1385b699500c07e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:43:45 +0100 Subject: [PATCH 406/898] color picker fixes, random default color --- .../common/input/color/color.component.html | 14 +++++++------- .../common/input/color/color.component.ts | 5 ++++- .../tag-edit-dialog/tag-edit-dialog.component.ts | 3 ++- src-ui/src/app/utils/color.ts | 12 ++++++++++++ 4 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 src-ui/src/app/utils/color.ts diff --git a/src-ui/src/app/components/common/input/color/color.component.html b/src-ui/src/app/components/common/input/color/color.component.html index c39c41d8f..ca4a0e281 100644 --- a/src-ui/src/app/components/common/input/color/color.component.html +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -1,14 +1,14 @@ <div class="form-group"> <label [for]="inputId">{{title}}</label> - <div class="input-group"> + <div class="input-group" [class.is-invalid]="error"> <div class="input-group-prepend"> <span class="input-group-text" [style.background-color]="value">   </span> </div> <ng-template #popContent> <div style="min-width: 200px;" class="pb-3"> - <color-slider [color]="value" (onChangeComplete)="colorChanged($event)"></color-slider> + <color-slider [color]="value" (onChangeComplete)="colorChanged($event.color.hex)"></color-slider> </div> </ng-template> @@ -24,10 +24,10 @@ </button> </div> - <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> - <div class="invalid-feedback"> - {{error}} - </div> - </div> + </div> + <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> + <div class="invalid-feedback"> + {{error}} + </div> </div> \ No newline at end of file diff --git a/src-ui/src/app/components/common/input/color/color.component.ts b/src-ui/src/app/components/common/input/color/color.component.ts index e75bbee16..a7f3452f2 100644 --- a/src-ui/src/app/components/common/input/color/color.component.ts +++ b/src-ui/src/app/components/common/input/color/color.component.ts @@ -1,5 +1,6 @@ import { Component, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { randomColor } from 'src/app/utils/color'; import { AbstractInputComponent } from '../abstract-input'; @Component({ @@ -19,9 +20,11 @@ export class ColorComponent extends AbstractInputComponent<string> { } randomize() { + this.colorChanged(randomColor()) } colorChanged(value) { - this.value = value.color.hex + this.value = value + this.onChange(value) } } diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts index 53cd50c45..623b033ec 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts @@ -5,6 +5,7 @@ import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit- import { PaperlessTag } from 'src/app/data/paperless-tag'; import { TagService } from 'src/app/services/rest/tag.service'; import { ToastService } from 'src/app/services/toast.service'; +import { randomColor } from 'src/app/utils/color'; @Component({ selector: 'app-tag-edit-dialog', @@ -28,7 +29,7 @@ export class TagEditDialogComponent extends EditDialogComponent<PaperlessTag> { getForm(): FormGroup { return new FormGroup({ name: new FormControl(''), - color: new FormControl(''), + color: new FormControl(randomColor()), is_inbox_tag: new FormControl(false), matching_algorithm: new FormControl(1), match: new FormControl(""), diff --git a/src-ui/src/app/utils/color.ts b/src-ui/src/app/utils/color.ts new file mode 100644 index 000000000..bcfdef088 --- /dev/null +++ b/src-ui/src/app/utils/color.ts @@ -0,0 +1,12 @@ + + function componentToHex(c) { + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + export function randomColor() { + let r = Math.floor(Math.random() * 150) + 50 + let g = Math.floor(Math.random() * 150) + 50 + let b = Math.floor(Math.random() * 150) + 50 + return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}` + } \ No newline at end of file From 0ded9531810cc35239e88b0224f2a56e050e9391 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:49:38 +0100 Subject: [PATCH 407/898] increase luminance threshold for better readability --- src/documents/serialisers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 675bb464a..6ebf4c541 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -150,7 +150,7 @@ class TagSerializer(MatchingModelSerializer): 0.587 * math.pow(rgb[1], 2) + 0.114 * math.pow(rgb[2], 2) ) - return "#ffffff" if luminance < 0.5 else "#000000" + return "#ffffff" if luminance < 0.53 else "#000000" except ValueError: return "#000000" From 97dc8553dbaa430fc6029a1f17a4bfdf6dffd8b7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 22:49:47 +0100 Subject: [PATCH 408/898] shadows --- .../src/app/components/common/input/color/color.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/common/input/color/color.component.html b/src-ui/src/app/components/common/input/color/color.component.html index ca4a0e281..778a3684e 100644 --- a/src-ui/src/app/components/common/input/color/color.component.html +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -13,7 +13,7 @@ </ng-template> - <input class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)" [autoClose]="'outside'" [ngbPopover]="popContent" placement="bottom"> + <input class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)" [autoClose]="'outside'" [ngbPopover]="popContent" placement="bottom" popoverClass="shadow"> <div class="input-group-append"> <button class="btn btn-outline-secondary" type="button" (click)="randomize()"> From 198bdc8d27e897f03773465bab3e84c23395f6f1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 23:04:37 +0100 Subject: [PATCH 409/898] API documentation --- docs/api.rst | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/api.rst b/docs/api.rst index cff72a970..ec24aca7c 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -284,3 +284,38 @@ The endpoint supports the following optional form fields: The endpoint will immediately return "OK" if the document consumption process was started successfully. No additional status information about the consumption process itself is available, since that happens in a different process. + + +API Versioning +############## + +The REST API is versioned since Paperless-ng 1.3.0. + +* Versioning ensures that changes to the API don't break older clients. +* Clients specify the specific version of the API they wish to use with every request and Paperless will handle the request using the specified API version. +* Even if the underlying data model changes, older API versions will always serve compatible data. +* If no version is specified, Paperless will serve version 1 to ensure compatibility with older clients that do not request a specific API version. + +API versions are specified by submitting an additional HTTP ``Accept`` header with every request: + +.. code:: + + Accept: application/json; version=6 + +If an invalid version is specified, Paperless 1.3.0 will respond with "406 Not Acceptable" and an error message in the body. +Earlier versions of Paperless will serve API version 1 regardless of whether a version is specified via the ``Accept`` header. + +API Changelog +============= + +Version 1 +--------- + +Initial API version. + +Version 2 +--------- + +* Added field ``Tag.color``. This read/write string field contains a hex color such as ``#a6cee3``. +* Added read-only field ``Tag.text_color``. This field contains the text color to use for a specific tag, which is either black or white depending on the brightness of ``Tag.color``. +* Removed field ``Tag.colour``. From cf4757344eb09e13630f70d50f53b3b2275c122e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 25 Feb 2021 23:23:26 +0100 Subject: [PATCH 410/898] fix #600 --- src/documents/templates/index.html | 2 +- src/documents/views.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/documents/templates/index.html b/src/documents/templates/index.html index b71aaaeb6..5a7b8c9ba 100644 --- a/src/documents/templates/index.html +++ b/src/documents/templates/index.html @@ -15,7 +15,7 @@ <link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="manifest" href="{% static webmanifest %}"> <link rel="stylesheet" href="{% static styles_css %}"> - <link rel="apple-touch-icon" href="apple-touch-icon.png"> + <link rel="apple-touch-icon" href="{% static apple_touch_icon %}"> </head> <body> <app-root>{% translate "Paperless-ng is loading..." %}</app-root> diff --git a/src/documents/views.py b/src/documents/views.py index f5ddd88ee..978a464ee 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -89,6 +89,7 @@ class IndexView(TemplateView): context['polyfills_js'] = f"frontend/{self.get_language()}/polyfills.js" # NOQA: E501 context['main_js'] = f"frontend/{self.get_language()}/main.js" context['webmanifest'] = f"frontend/{self.get_language()}/manifest.webmanifest" # NOQA: E501 + context['apple_touch_icon'] = f"frontend/{self.get_language()}/apple-touch-icon.png" # NOQA: E501 return context From d337d2e6904b9737751cd8ffcc092dfef3addb0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=B6nig?= <sebastian_koenig@cotyinc.com> Date: Fri, 26 Feb 2021 09:49:36 +0100 Subject: [PATCH 411/898] Added First-Time Step-by-Step procedure and CopyPaste lists of depeendencies to the docs --- docs/extending.rst | 74 ++++++++++++++++++++++++++++++++++++++-------- docs/setup.rst | 12 ++++++++ 2 files changed, 74 insertions(+), 12 deletions(-) diff --git a/docs/extending.rst b/docs/extending.rst index 287fb834f..6828d262d 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -3,6 +3,9 @@ Paperless development ##################### +General information +=================== + This section describes the steps you need to take to start development on paperless-ng. 1. Check out the source from github. The repository is organized in the following way: @@ -21,13 +24,60 @@ This section describes the steps you need to take to start development on paperl * ``scripts/`` - Various scripts that help with different parts of development. * ``docker/`` - Files required to build the docker image. -2. Install some dependencies. +Initial setup and first start +============================= - * Python 3.6. - * All dependencies listed in the :ref:`Bare metal route <setup-bare_metal>` - * redis. You can either install redis or use the included scripts/start-services.sh - to use docker to fire up a redis instance (and some other services such as tika, - gotenberg and a postgresql server). +After you forked and cloned the code from github you need to perform a first-time setup. +To do the setup you need to perform the steps from the following chapters in a certain order: + +1. Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>` +2. Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode. +3. Install the Angular CLI interface: + + .. code:: shell-session + + $ npm install -g @angular/cli + +4. Create ``consume`` and ``media`` folders in the cloned root folder. + + .. code:: shell-session + + mkdir -p consume media +5. You can now either ... : + * install redis or + * use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server) or + * spin up a bare redis container + + .. code:: shell-session + + docker run -d -p 6379:6379 -restart unless-stopped redis:latest +6. Install the python dependencies by performing in the src/ directory. + + .. code:: shell-session + + pipenv install --dev +7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). + + .. code:: shell-session + + pipenv shell + cd /src-ui && ng build --prod +8. Apply migrations and create a superuser for your dev instance: + + .. code:: shell-session + + python3 manage.py migrate + python3 manage.py createsuperuser + +9. Now spin up the dev backend. Depending on which part of paperless you're developing for, you need to have some or all of them running. + + .. code:: shell-session + + python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster + +10. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend. + +Backend development environment is now ready, to start Frontend development go to ``/src-ui`` and run ``ng serve``. From there you can use ``http://localhost:4200`` for a preview. Back end development ==================== @@ -35,21 +85,21 @@ Back end development The backend is a django application. I use PyCharm for development, but you can use whatever you want. -Install the python dependencies by performing ``pipenv install --dev`` in the src/ directory. This will also create a virtual environment, which you can enter with ``pipenv shell`` or execute one-shot commands in with ``pipenv run``. -Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode. - Configure the IDE to use the src/ folder as the base source folder. Configure the following launch configurations in your IDE: * python3 manage.py runserver * python3 manage.py qcluster -* python3 manage.py consumer +* python3 manage.py document_consumer -Depending on which part of paperless you're developing for, you need to have some or all of -them running. +To start them all: + +.. code:: shell-session + + python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster Testing and code style: diff --git a/docs/setup.rst b/docs/setup.rst index 69cb2bc97..98e055a07 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -284,6 +284,12 @@ writing. Windows is not and will never be supported. * ``libmagic-dev`` for mime type detection * ``mime-support`` for mime type detection + Use this list for your preferred package management: + + .. code:: + + python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support + These dependencies are required for OCRmyPDF, which is used for text recognition. * ``unpaper`` @@ -297,6 +303,12 @@ writing. Windows is not and will never be supported. * ``tesseract-ocr`` >= 4.0.0 for OCR * ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc) + Use this list for your preferred package management: + + .. code:: + + unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr + On Raspberry Pi, these libraries are required as well: * ``libatlas-base-dev`` From a952916c0680c4d5ea8ebd9226d79a814204ab55 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:13:28 +0100 Subject: [PATCH 412/898] added versioning headers to the API --- docs/api.rst | 13 +++++++++++++ src/paperless/middleware.py | 18 ++++++++++++++++++ src/paperless/settings.py | 3 +++ 3 files changed, 34 insertions(+) create mode 100644 src/paperless/middleware.py diff --git a/docs/api.rst b/docs/api.rst index ec24aca7c..d34558b36 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -305,6 +305,19 @@ API versions are specified by submitting an additional HTTP ``Accept`` header wi If an invalid version is specified, Paperless 1.3.0 will respond with "406 Not Acceptable" and an error message in the body. Earlier versions of Paperless will serve API version 1 regardless of whether a version is specified via the ``Accept`` header. +If a client wishes to verify whether it is compatible with any given server, the following procedure should be performed: + +1. Perform an *authenticated* request against any API endpoint. If the server is on version 1.3.0 or newer, the server will + add two custom headers to the response: + + .. code:: + + X-Api-Version: 2 + X-Version: 1.3.0 + +2. Determine whether the client is compatible with this server based on the presence/absence of these headers and their values if present. + + API Changelog ============= diff --git a/src/paperless/middleware.py b/src/paperless/middleware.py new file mode 100644 index 000000000..0fe526556 --- /dev/null +++ b/src/paperless/middleware.py @@ -0,0 +1,18 @@ +from django.conf import settings + +from paperless import version + + +class ApiVersionMiddleware: + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + response = self.get_response(request) + if request.user.is_authenticated: + versions = settings.REST_FRAMEWORK['ALLOWED_VERSIONS'] + response['X-Api-Version'] = versions[len(versions)-1] + response['X-Version'] = ".".join([str(_) for _ in version.__version__]) + + return response diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 3dcff4a89..1e864cb34 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -115,6 +115,8 @@ REST_FRAMEWORK = { ], 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', 'DEFAULT_VERSION': '1', + # Make sure these are ordered and that the most recent version appears + # last 'ALLOWED_VERSIONS': ['1', '2'] } @@ -131,6 +133,7 @@ MIDDLEWARE = [ 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', + 'paperless.middleware.ApiVersionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', From f02a6ce78b7e525feb16fda6c50134197730984d Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:02:24 +0000 Subject: [PATCH 413/898] Translate /src-ui/messages.xlf in it translation completed for the source file '/src-ui/messages.xlf' on the 'it' language. --- src-ui/src/locale/messages.it.xlf | 2353 +++++++++++++++++++++++++++++ 1 file changed, 2353 insertions(+) create mode 100644 src-ui/src/locale/messages.it.xlf diff --git a/src-ui/src/locale/messages.it.xlf b/src-ui/src/locale/messages.it.xlf new file mode 100644 index 000000000..a602079b0 --- /dev/null +++ b/src-ui/src/locale/messages.it.xlf @@ -0,0 +1,2353 @@ +<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="it"> + <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Documento aggiunto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Il documento <x equiv-text="status.filename" id="PH"/> è stato aggiunto a paperless.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Apri documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Impossibile aggiungere <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>Nuovo documento trovato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Paperless sta elaborando il documento <x equiv-text="status.filename" id="PH"/>.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4733307402565258070"> + <source>Documents</source> + <target>Documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2155249406916744630"> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>La vista &quot;<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>&quot; è stata salvata.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6837554170707123455"> + <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> + <target>La vista &quot;<x equiv-text="savedView.name" id="PH"/>&quot; è stata creata.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <source>Select</source> + <target>Selezione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <source>Select none</source> + <target>Seleziona nessuno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <source>Select page</source> + <target>Seleziona pagina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <source>Select all</source> + <target>Seleziona tutti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <source>Sort</source> + <target>Ordina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <source>Views</source> + <target>Viste</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <source>Save as...</source> + <target>Salva come...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Salva &quot;<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Selezionato <x id="INTERPOLATION"/> di un documento} other {Selezionati <x id="INTERPOLATION"/> di <x id="INTERPOLATION_1"/> documenti}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Un documento} other {<x id="INTERPOLATION"/> documenti}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <source>(filtered)</source> + <target>(filtrato)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <source>ASN</source> + <target>ASN</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <source>Correspondent</source> + <target>Corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <source>Title</source> + <target>Titolo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <source>Document type</source> + <target>Tipo di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <source>Created</source> + <target>Creato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <source>Added</source> + <target>Aggiunto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9021887951960049161"> + <source>Confirm delete</source> + <target>Conferma eliminazione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5382975254277698192"> + <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> + <target>Vuoi eliminare il documento &quot;<x equiv-text="this.document.title" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6691075929777935948"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <target>I file di questo documento saranno eliminati permanentemente. Questa operazione è irreversibile.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="719892092227206532"> + <source>Delete document</source> + <target>Elimina documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1844801255494293730"> + <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> + <target>Errore nell'eliminazione del documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <source>Delete</source> + <target>Elimina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <source>Download</source> + <target>Scarica</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <source>More like this</source> + <target>Altro come questo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <source>Close</source> + <target>Chiudi</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <source>Details</source> + <target>Dettagli</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <source>Content</source> + <target>Contenuto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <source>Metadata</source> + <target>Metadati</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <source>Discard</source> + <target>Scarta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <source>Save</source> + <target>Salva</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <source>Page</source> + <target>Pagina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> + <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> + <target>di <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <source>Download original</source> + <target>Scarica originale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <source>Archive serial number</source> + <target>Numero seriale di archivio</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <source>Date created</source> + <target>Data creazione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <source>Date modified</source> + <target>Data modifica</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <source>Date added</source> + <target>Data aggiunta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <source>Media filename</source> + <target>Nome del file multimediale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <source>Original MD5 checksum</source> + <target>Somma MD5 originale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <source>Original file size</source> + <target>Dimensione del file originale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <source>Original mime type</source> + <target>Tipo mime originale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <source>Archive MD5 checksum</source> + <target>Checksum MD5 dell'archivio</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <source>Archive file size</source> + <target>Dimensione dell'archivio</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <source>Original document metadata</source> + <target>Metadati del documento originale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <source>Archived document metadata</source> + <target>Metadati del documento archiviato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <source>Save & next</source> + <target>Salva e vai al prossimo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8765497970646365998"> + <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> + <target>Ciao <x equiv-text="this.displayName" id="PH"/>, benvenuto su Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7016571167317583872"> + <source>Welcome to Paperless-ng!</source> + <target>Benvenuto su Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <source>Dashboard</source> + <target>Dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="93754014749412887"> + <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Vuoi eliminare il tag &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">30</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <source>Tags</source> + <target>Etichette</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <source>Create</source> + <target>Crea</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <source>Filter by:</source> + <target>Filtra per:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <source>Name</source> + <target>Nome</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <source>Color</source> + <target>Colore</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <source>Matching</source> + <target>Corrispondenza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <source>Document count</source> + <target>Numero di documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <source>Actions</source> + <target>Azioni</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <source>Documents</source> + <target>Documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <source>Edit</source> + <target>Modifica</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4990731724078522539"> + <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Vuoi eliminare il tipo di documento &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <source>Document types</source> + <target>Tipi di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <source>Logs</source> + <target>Log</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5610279464668232148"> + <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> + <target>La vista &quot;<x equiv-text="savedView.name" id="PH"/>&quot; è stata eliminata. </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5647210819299459618"> + <source>Settings saved successfully.</source> + <target>Le impostazioni sono state salvate.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6839066544204061364"> + <source>Use system language</source> + <target>Usa lingua di sistema</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7729897675462249787"> + <source>Use date format of display language</source> + <target>Usa il formato data della lingua di visualizzazione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8488620293789898901"> + <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Errore durante il salvataggio delle impostazioni sul server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <source>Settings</source> + <target>Impostazioni</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <source>General settings</source> + <target>Impostazioni generali</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Notifiche</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <source>Saved views</source> + <target>Viste salvate</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">133</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <source>Appearance</source> + <target>Aspetto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <source>Display language</source> + <target>Lingua</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <source>You need to reload the page after applying a new language.</source> + <target>Riavviare la pagina dopo avere impostato la nuova lingua.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <source>Date display</source> + <target>Visualizzazione data</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <source>Date format</source> + <target>Formato data</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> + <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Breve: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> + <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Media: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> + <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Lunga: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <source>Items per page</source> + <target>Oggetti per pagina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <source>Document editor</source> + <target>Editor dei documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <source>Use PDF viewer provided by the browser</source> + <target>Usa il visualizzatore PDF fornito dal browser</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <target>Di solito è più rapido nel visualizzare documenti PDF grandi, ma potrebbe non funzionare su tutti i browser.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <source>Dark mode</source> + <target>Modalità notte</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <source>Use system settings</source> + <target>Usa impostazioni di sistema</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <source>Enable dark mode</source> + <target>Abilita modalità notte</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <source>Bulk editing</source> + <target>Modifica in blocco</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <source>Show confirmation dialogs</source> + <target>Mostra dialoghi di conferma</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <source>Deleting documents will always ask for confirmation.</source> + <target>L'eliminazione dei documenti chiederà sempre la conferma.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <source>Apply on close</source> + <target>Applica in chiusura</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Elaborazione del documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Notifica quando vengono trovati nuovi documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Notifica quando l'elaborazione del documento viene completata con successo.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Notifica quando l'elaborazione del documento fallisce</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Non mostrare notifiche nella dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Verranno interrotte tutte le notifiche nella dashboard riguardo lo stato dell'elaborazione dei documenti.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <source>Appears on</source> + <target>Appare in</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">145</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <source>Show on dashboard</source> + <target>Mostra nella dashboard</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">148</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <source>Show in sidebar</source> + <target>Mostra nella barra laterale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">152</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <source>No saved views defined.</source> + <target>Nessuna vista salvata.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <source>404 Not Found</source> + <target>404 Non trovato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7427874343955308724"> + <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Vuoi eliminare il corrispondente &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <source>Correspondents</source> + <target>Corrispondenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <source>Last correspondence</source> + <target>Ultrima corrispondenza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1234709746630139322"> + <source>Confirmation</source> + <target>Conferma</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9178182467454450952"> + <source>Confirm</source> + <target>Conferma</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <source>Cancel</source> + <target>Annulla</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6457471243969293847"> + <source>Create new correspondent</source> + <target>Crea nuovo corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2059822531169388684"> + <source>Edit correspondent</source> + <target>Modifica corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <source>Matching algorithm</source> + <target>Algoritmo di corrispondenza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <source>Matching pattern</source> + <target>Criterio di corrispondenza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <source>Case insensitive</source> + <target>Senza distinzione tra maiuscole e minuscole</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9153094873118985366"> + <source>Create new tag</source> + <target>Crea nuovo tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5872175735754226507"> + <source>Edit tag</source> + <target>Modifica tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <source>Inbox tag</source> + <target>Tag di arrivo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <target>I tag di arrivo vengono assegnati automaticamente a tutti i documenti elaborati.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6672809941092516947"> + <source>Create new document type</source> + <target>Crea nuovo tipo di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="36335016091244220"> + <source>Edit document type</source> + <target>Modifica tipo di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <source>Search results</source> + <target>Risultati della ricerca</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> + <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> + <target>Query di ricerca non valida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> + <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> + <target>Documenti simili a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> + <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> + <target>Query di ricerca: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> + <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> + <target>Forse intendevi &quot;<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>&quot;?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <target>{VAR_PLURAL, plural, =0 {Nessun risultato} =1 {Un risultato} other {<x id="INTERPOLATION"/> risultati}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <source>Paperless-ng</source> + <target>Paperless-ng</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note from="description" priority="1">app title</note> + </trans-unit> + <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <source>Search documents</source> + <target>Cerca documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <source>Logout</source> + <target>Esci</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <source>Manage</source> + <target>Gestisci</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <source>Admin</source> + <target>Amministratore</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Informazioni</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">155</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <source>Documentation</source> + <target>Documentazione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <source>GitHub</source> + <target>GitHub</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Suggerisci un'idea</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> + <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> + <target>Accesso effettuato come <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <source>Open documents</source> + <target>Apri documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <source>Close all</source> + <target>Chiudi tutti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">101</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5195932016807797291"> + <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> + <target>Corrispondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8170755470576301659"> + <source>Without correspondent</source> + <target>Senza corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">31</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8705701325879965907"> + <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> + <target>Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4362173610367509215"> + <source>Without document type</source> + <target>Senza tipo di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8180755793012580465"> + <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> + <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">42</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6494566478302448576"> + <source>Without any tag</source> + <target>Senza alcun tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">46</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Titolo: <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <source>Filter tags</source> + <target>Filtra tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <source>Filter correspondents</source> + <target>Filtra corrispondenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <source>Filter document types</source> + <target>Filtra tipi di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <source>Reset filters</source> + <target>Ripristina filtri</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7593728289020204896"> + <source>Not assigned</source> + <target>Non assegnato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + </trans-unit> + <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <source>Apply</source> + <target>Applica</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4873149362496451858"> + <source>Last 7 days</source> + <target>Ultimi 7 giorni</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4463380307954693363"> + <source>Last month</source> + <target>Ultimo mese</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8697368973702409683"> + <source>Last 3 months</source> + <target>Ultimi 3 mesi</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3566342898065860218"> + <source>Last year</source> + <target>Ultimo anno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <source>After</source> + <target>Dopo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <source>Before</source> + <target>Prima</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <source>Clear</source> + <target>Pulisci</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <source>View</source> + <target>Mostra</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> + <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> + <target>Creato il: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <source>Filter by correspondent</source> + <target>Filtra per corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <source>Filter by tag</source> + <target>Filtra per tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <source>Score:</source> + <target>Punteggio:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <source>View in browser</source> + <target>Apri nel browser</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7985804062689412812"> + <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Errore durante l'operazione di modifica in blocco: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8639884465898458690"> + <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> + <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot; e &quot;<x equiv-text="items[1].name" id="PH_1"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + </trans-unit> + <trans-unit datatype="html" id="760986369763309193"> + <source>, </source> + <target>,</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + </trans-unit> + <trans-unit datatype="html" id="1822679894391095557"> + <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> + <target><x equiv-text="list" id="PH"/>e &quot;<x equiv-text="items[items.length - 1].name" id="PH_1"/>&quot;</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + </trans-unit> + <trans-unit datatype="html" id="4137232459980262849"> + <source>Confirm tags assignment</source> + <target>Conferma assegnazione tag</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6619516195038467207"> + <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Questa operazione aggiungerà il tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1894412783609570695"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7181166515756808573"> + <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Questa operazione rimuoverà il tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i. </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3819792277998068944"> + <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Questa operazione rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2739066218579571288"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> + <target>Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> a <x equiv-text="this.list.selected.size" id="PH_2"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2996713129519325161"> + <source>Confirm correspondent assignment</source> + <target>Conferma assegnazione corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6900893559485781849"> + <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Questa operazione assegnerà il corrispondente &quot;<x equiv-text="correspondent.name" id="PH"/>&quot; a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1257522660364398440"> + <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Questa operazione rimuoverà il corrispondente da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5393409374423140648"> + <source>Confirm document type assignment</source> + <target>Conferma assegnazione tipo di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="332180123895325027"> + <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Questa operazione assegnerà il tipo di documento &quot;<x equiv-text="documentType.name" id="PH"/>&quot; a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2236642492594872779"> + <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Questa operazione eliminerà il tipo di documento da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i. </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="749430623564850405"> + <source>Delete confirm</source> + <target>Conferma eliminazione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4303174930844518780"> + <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Questa operazione eliminerà definitivamente <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5641451190833696892"> + <source>This operation cannot be undone.</source> + <target>Questa operazione non può essere annullata.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6734339521247847366"> + <source>Delete document(s)</source> + <target>Elimina documento/i</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <source>Select:</source> + <target>Seleziona:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <source>All</source> + <target>Tutto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <source>Edit:</source> + <target>Modifica:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Scarica originali</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Suggerimenti:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <source>Save current view</source> + <target>Salva vista corrente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <source>Show all</source> + <target>Mostra tutto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <source>Statistics</source> + <target>Statistiche</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Documenti totali: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documenti taggati in arrivo: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>Elaborazione in corso: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Falliti: <x equiv-text="countFailed" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Aggiunti: <x equiv-text="countSuccess" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Connessione in corso...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Caricamento in corso...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Caricamento completato, in attesa...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>Errore HTTP: <x equiv-text="error.status" id="PH"/><x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <source>Upload new documents</source> + <target>Carica nuovi documenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <source>Drop documents here or</source> + <target>Trascina qui i documenti oppure</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <source>Browse files</source> + <target>Sfoglia i file</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Messaggi ignorati</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + </trans-unit> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Un altro documento} other {altri <x id="INTERPOLATION"/> documenti}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Apri documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <source>First steps</source> + <target>Primi passi</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <source>Paperless is running! :)</source> + <target>Paperless è in esecuzione! :)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <target>Puoi iniziare a caricare documenti trascinandoli nel riquadro per il caricamento posizionato sulla destra, oppure spostarli nella cartella di elaborazione e appariranno nella lista dei documenti. Dopo aver aggiunto i metadati ai tuoi documenti, usa i meccanismi di filtraggio per creare viste personalizzate (come 'Aggiunti di recente' o 'Da taggare') e appariranno sulla dashboard invece di questo messaggio.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <source>Paperless offers some more features that try to make your life easier:</source> + <target>Paperless offre alcune funzionalità che cercano di rendere migliore la tua vita:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <target>Quando avrai caricato qualche documento e aggiunto dei metadati, Paperless potrà assegnare automaticamente quei metadati ai nuovi documenti.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <target>Puoi configurare Paperless per leggere le tue mail e aggiungere i documenti che trova negli allegati.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <target>Controlla la documentazione per capire come usare queste funzioni. La sezione per l'utilizzo base ha anche qualche suggerimento su come usare Paperless in generale.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="218403386307979629"> + <source>Metadata</source> + <target>Metadati</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3797570084942068182"> + <source>Select</source> + <target>Seleziona</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7103181924469214926"> + <source>Please select an object</source> + <target>Seleziona un elemento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Data non valida.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2807800733729323332"> + <source>Yes</source> + <target>Sì</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3542042671420335679"> + <source>No</source> + <target>No</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7536524521722799066"> + <source>(no title)</source> + <target>(nessun titolo)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1206520795340730278"> + <source>English (US)</source> + <target>Inglese (US)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">88</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>Inglese (GB)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">89</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1858110241312746425"> + <source>German</source> + <target>Tedesco</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3071065188816255493"> + <source>Dutch</source> + <target>Olandese</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7633754075223722162"> + <source>French</source> + <target>Francese</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Portoghese (Brasile)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Il documento esiste già.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>File non trovato.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Lo script di pre-consume (pre elaborazione) non esiste.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Errore durante l'esecuzione dello script di pre-consume (pre elaborazione).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Lo script di post-consume (post elaborazione) non esiste.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Errore durante l'esecuzione dello script di post-consume (post elaborazione).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Nuovo file ricevuto.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>Tipo di file non supportato.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Elaborazione documento in corso...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Generazione anteprima in corso...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Recupero della data del documento in corso...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Salvataggio documento in corso...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Completato.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1519954996184640001"> + <source>Error</source> + <target>Errore</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5037437391296624618"> + <source>Information</source> + <target>Informazione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517688192215738656"> + <source>ASN</source> + <target>ASN</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2691296884221415710"> + <source>Correspondent</source> + <target>Corrispondente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titolo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5066119607229701477"> + <source>Document type</source> + <target>Tipo di documento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4207916966377787111"> + <source>Created</source> + <target>Creato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="231679111972850796"> + <source>Added</source> + <target>Aggiunto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3553216189604488439"> + <source>Modified</source> + <target>Modificato</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2056433880533904076"> + <source>Light blue</source> + <target>Blu chiaro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">6</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4082253113407591781"> + <source>Blue</source> + <target>Blu</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1143414876575720034"> + <source>Light green</source> + <target>Verde chiaro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="119581980963263815"> + <source>Green</source> + <target>Verde</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3250646524116252719"> + <source>Light red</source> + <target>Rosso chiaro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1628552745302385832"> + <source>Red </source> + <target>Rosso</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5479028842846122610"> + <source>Light orange</source> + <target>Arancione chiaro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8598918991528773310"> + <source>Orange</source> + <target>Arancione</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1789283185177957430"> + <source>Light violet</source> + <target>Viola chiaro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2682868487071320453"> + <source>Violet</source> + <target>Viola</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1449010446077321264"> + <source>Brown</source> + <target>Marrone</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30300572504753589"> + <source>Black</source> + <target>Nero</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="461048771215121187"> + <source>Light grey</source> + <target>Grigio chiaro</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4561076822163447092"> + <source>Create new item</source> + <target>Crea nuovo elemento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5324147361912094446"> + <source>Edit item</source> + <target>Modifica elemento</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1699589597032579396"> + <source>Could not save element: <x equiv-text="error" id="PH"/></source> + <target>Non è possibile salvare l'elemento: <x equiv-text="error" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="810888510148304696"> + <source>Automatic</source> + <target>Automatico</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5044611416737085530"> + <source>Do you really want to delete this element?</source> + <target>Vuoi eliminare questo elemento?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8371896857609524947"> + <source>Associated documents will not be deleted.</source> + <target>I documenti associati non verranno eliminati.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7022070615528435141"> + <source>Delete</source> + <target>Elimina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5467489005440577210"> + <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Errore durante l'eliminazione dell'elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5851669019930456395"> + <source>Any word</source> + <target>Qualsiasi parola</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517655726614958140"> + <source>Any: Document contains any of these words (space separated)</source> + <target>Qualsiasi: il documento contiene una qualunque di queste parole (separate dallo spazio)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="700315718208181326"> + <source>All words</source> + <target>Tutte le parole</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="111914402588955480"> + <source>All: Document contains all of these words (space separated)</source> + <target>Tutto: il documento contiene tutte queste parole (separate dallo spazio)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9180173992399180575"> + <source>Exact match</source> + <target>Corrispondenza esatta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7109184332944610787"> + <source>Exact: Document contains this string</source> + <target>Puntuale: il documento contiene questa stringa</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1338733395833138319"> + <source>Regular expression</source> + <target>Espressione regolare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7548151332424148033"> + <source>Regular expression: Document matches this regular expression</source> + <target>Espressione regolare: il documento corrisponde a questa espressione regolare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1856513373880048959"> + <source>Fuzzy word</source> + <target>Parola fuzzy</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8419167206585286450"> + <source>Fuzzy: Document contains a word similar to this word</source> + <target>Fuzzy: il documento contiene una parola simile a questa </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2167862279705099846"> + <source>Auto: Learn matching automatically</source> + <target>Automatico: apprende automaticamente la corrispondenza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + </body> + </file> +</xliff> \ No newline at end of file From bcf734be2fe2346a3bb72349c0253bd6f7e9b167 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:24:55 +0000 Subject: [PATCH 414/898] Apply translations in it translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'it' language. --- src/locale/it/LC_MESSAGES/django.po | 673 ++++++++++++++++++++++++++++ 1 file changed, 673 insertions(+) create mode 100644 src/locale/it/LC_MESSAGES/django.po diff --git a/src/locale/it/LC_MESSAGES/django.po b/src/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..f3456bed9 --- /dev/null +++ b/src/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,673 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +# Translators: +# Ioma Taani, 2021 +# Jonas Winkler, 2021 +# Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" +"Last-Translator: Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021\n" +"Language-Team: Italian (https://www.transifex.com/paperless/teams/115905/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Documenti" + +#: documents/models.py:32 +msgid "Any word" +msgstr "Qualsiasi parola" + +#: documents/models.py:33 +msgid "All words" +msgstr "Tutte le parole" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "Corrispondenza esatta" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "Espressione regolare" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "Parole fuzzy" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "Automatico" + +#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "nome" + +#: documents/models.py:45 +msgid "match" +msgstr "corrispondenza" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "algoritmo di corrispondenza" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "non distingue maiuscole e minuscole" + +#: documents/models.py:74 documents/models.py:134 +msgid "correspondent" +msgstr "corrispondente" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "corrispondenti" + +#: documents/models.py:97 +msgid "color" +msgstr "colore" + +#: documents/models.py:101 +msgid "is inbox tag" +msgstr "è tag di arrivo" + +#: documents/models.py:103 +msgid "" +"Marks this tag as an inbox tag: All newly consumed documents will be tagged " +"with inbox tags." +msgstr "" +"Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati " +"verranno taggati con questo tag." + +#: documents/models.py:108 +msgid "tag" +msgstr "tag" + +#: documents/models.py:109 documents/models.py:165 +msgid "tags" +msgstr "tag" + +#: documents/models.py:115 documents/models.py:147 +msgid "document type" +msgstr "tipo di documento" + +#: documents/models.py:116 +msgid "document types" +msgstr "tipi di documento" + +#: documents/models.py:124 +msgid "Unencrypted" +msgstr "Non criptato" + +#: documents/models.py:125 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Criptato con GNU Privacy Guard" + +#: documents/models.py:138 +msgid "title" +msgstr "titolo" + +#: documents/models.py:151 +msgid "content" +msgstr "contenuto" + +#: documents/models.py:153 +msgid "" +"The raw, text-only data of the document. This field is primarily used for " +"searching." +msgstr "" +"I dati grezzi o solo testo del documento. Questo campo è usato " +"principalmente per la ricerca." + +#: documents/models.py:158 +msgid "mime type" +msgstr "tipo mime" + +#: documents/models.py:169 +msgid "checksum" +msgstr "checksum" + +#: documents/models.py:173 +msgid "The checksum of the original document." +msgstr "Il checksum del documento originale." + +#: documents/models.py:177 +msgid "archive checksum" +msgstr "checksum dell'archivio" + +#: documents/models.py:182 +msgid "The checksum of the archived document." +msgstr "Il checksum del documento archiviato." + +#: documents/models.py:186 documents/models.py:342 +msgid "created" +msgstr "creato il" + +#: documents/models.py:190 +msgid "modified" +msgstr "modificato il" + +#: documents/models.py:194 +msgid "storage type" +msgstr "tipo di storage" + +#: documents/models.py:202 +msgid "added" +msgstr "aggiunto il" + +#: documents/models.py:206 +msgid "filename" +msgstr "nome del file" + +#: documents/models.py:212 +msgid "Current filename in storage" +msgstr "Nome del file corrente nello storage" + +#: documents/models.py:216 +msgid "archive filename" +msgstr "Nome file in archivio" + +#: documents/models.py:222 +msgid "Current archive filename in storage" +msgstr "Il nome del file nell'archiviazione" + +#: documents/models.py:226 +msgid "archive serial number" +msgstr "numero seriale dell'archivio" + +#: documents/models.py:231 +msgid "The position of this document in your physical document archive." +msgstr "Posizione di questo documento all'interno dell'archivio fisico." + +#: documents/models.py:237 +msgid "document" +msgstr "documento" + +#: documents/models.py:238 +msgid "documents" +msgstr "documenti" + +#: documents/models.py:325 +msgid "debug" +msgstr "debug" + +#: documents/models.py:326 +msgid "information" +msgstr "informazione" + +#: documents/models.py:327 +msgid "warning" +msgstr "avvertimento" + +#: documents/models.py:328 +msgid "error" +msgstr "errore" + +#: documents/models.py:329 +msgid "critical" +msgstr "critico" + +#: documents/models.py:333 +msgid "group" +msgstr "gruppo" + +#: documents/models.py:336 +msgid "message" +msgstr "messaggio" + +#: documents/models.py:339 +msgid "level" +msgstr "livello" + +#: documents/models.py:346 +msgid "log" +msgstr "log" + +#: documents/models.py:347 +msgid "logs" +msgstr "log" + +#: documents/models.py:358 documents/models.py:408 +msgid "saved view" +msgstr "vista salvata" + +#: documents/models.py:359 +msgid "saved views" +msgstr "viste salvate" + +#: documents/models.py:362 +msgid "user" +msgstr "utente" + +#: documents/models.py:368 +msgid "show on dashboard" +msgstr "mostra sul cruscotto" + +#: documents/models.py:371 +msgid "show in sidebar" +msgstr "mostra nella barra laterale" + +#: documents/models.py:375 +msgid "sort field" +msgstr "campo di ordinamento" + +#: documents/models.py:378 +msgid "sort reverse" +msgstr "ordine invertito" + +#: documents/models.py:384 +msgid "title contains" +msgstr "il titolo contiene" + +#: documents/models.py:385 +msgid "content contains" +msgstr "il contenuto contiene" + +#: documents/models.py:386 +msgid "ASN is" +msgstr "ASN è" + +#: documents/models.py:387 +msgid "correspondent is" +msgstr "la corrispondenza è" + +#: documents/models.py:388 +msgid "document type is" +msgstr "il tipo di documento è" + +#: documents/models.py:389 +msgid "is in inbox" +msgstr "è in arrivo" + +#: documents/models.py:390 +msgid "has tag" +msgstr "ha etichetta" + +#: documents/models.py:391 +msgid "has any tag" +msgstr "ha qualsiasi etichetta" + +#: documents/models.py:392 +msgid "created before" +msgstr "creato prima del" + +#: documents/models.py:393 +msgid "created after" +msgstr "creato dopo il" + +#: documents/models.py:394 +msgid "created year is" +msgstr "l'anno di creazione è" + +#: documents/models.py:395 +msgid "created month is" +msgstr "il mese di creazione è" + +#: documents/models.py:396 +msgid "created day is" +msgstr "il giorno di creazione è" + +#: documents/models.py:397 +msgid "added before" +msgstr "aggiunto prima del" + +#: documents/models.py:398 +msgid "added after" +msgstr "aggiunto dopo il" + +#: documents/models.py:399 +msgid "modified before" +msgstr "modificato prima del" + +#: documents/models.py:400 +msgid "modified after" +msgstr "modificato dopo" + +#: documents/models.py:401 +msgid "does not have tag" +msgstr "non ha tag" + +#: documents/models.py:412 +msgid "rule type" +msgstr "tipo di regola" + +#: documents/models.py:416 +msgid "value" +msgstr "valore" + +#: documents/models.py:422 +msgid "filter rule" +msgstr "regola filtro" + +#: documents/models.py:423 +msgid "filter rules" +msgstr "regole filtro" + +#: documents/serialisers.py:52 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Espressione regolare non valida: %(error)s" + +#: documents/serialisers.py:378 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Il tipo di file %(type)s non è supportato" + +#: documents/templates/index.html:20 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng si sta caricando..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Paperless-ng è uscito" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "Vi siete disconnessi. Ciao!" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Rientra nuovamente" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Accedi a Paperless-ng" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Accedi" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Il nome utente e la password non sono corretti. Riprovare." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Nome utente" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Password" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Accedi" + +#: paperless/settings.py:291 +msgid "English (US)" +msgstr "Inglese (US)" + +#: paperless/settings.py:292 +msgid "English (GB)" +msgstr "Inglese (GB)" + +#: paperless/settings.py:293 +msgid "German" +msgstr "Tedesco" + +#: paperless/settings.py:294 +msgid "Dutch" +msgstr "Olandese" + +#: paperless/settings.py:295 +msgid "French" +msgstr "Francese" + +#: paperless/settings.py:296 +msgid "Portuguese (Brazil)" +msgstr "Portoghese (Brasile)" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "Amministrazione di Paperless-ng" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filtro" + +#: paperless_mail/admin.py:27 +msgid "" +"Paperless will only process mails that match ALL of the filters given below." +msgstr "" +"Paperless-ng processerà solo la posta che rientra in TUTTI i filtri " +"impostati." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Azioni" + +#: paperless_mail/admin.py:39 +msgid "" +"The action applied to the mail. This action is only performed when documents" +" were consumed from the mail. Mails without attachments will remain entirely" +" untouched." +msgstr "" +"L'azione che viene applicata alla email. Questa azione viene eseguita solo " +"quando dei documenti vengono elaborati dalla email. Le email senza allegati " +"vengono ignorate." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadati" + +#: paperless_mail/admin.py:48 +msgid "" +"Assign metadata to documents consumed from this rule automatically. If you " +"do not assign tags, types or correspondents here, paperless will still " +"process all matching rules that you have defined." +msgstr "" +"Assegna automaticamente i metadati ai documenti elaborati da questa regola. " +"Se non assegni qui dei tag, tipi di documenti o corrispondenti, Paperless " +"userà comunque le regole corrispondenti che hai configurato." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Email Paperless" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "account email" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "account email" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Nessuna crittografia" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Usa SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Usa STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "Server IMAP" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "Porta IMAP" + +#: paperless_mail/models.py:36 +msgid "" +"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " +"SSL connections." +msgstr "" +"Di solito si usa 143 per STARTTLS o nessuna crittografia e 993 per SSL." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "Sicurezza IMAP" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "nome utente" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "password" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "regola email" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "regole email" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Elabora solo gli allegati." + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Elabora tutti i file, inclusi gli allegati nel corpo." + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Segna come letto, non elaborare le email lette" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Contrassegna la email, non elaborare le email elaborate." + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Sposta in una cartella" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Elimina" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Usa oggetto come titolo" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Usa il nome dell'allegato come titolo" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Non assegnare un corrispondente" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Usa indirizzo email" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Usa nome (o indirizzo email se non disponibile)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Usa il corrispondente selezionato qui sotto" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "priorità" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "account" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "cartella" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filtra da" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "filtra oggetto" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "filtra corpo" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "filtra nome allegato" + +#: paperless_mail/models.py:140 +msgid "" +"Only consume documents which entirely match this filename if specified. " +"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" +"Elabora i documenti che corrispondono a questo nome. Puoi usare wildcard " +"come *.pdf o *fattura*. Non fa differenza fra maiuscole e minuscole." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "età massima" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "Definito in giorni." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "tipo di allegato" + +#: paperless_mail/models.py:154 +msgid "" +"Inline attachments include embedded images, so it's best to combine this " +"option with a filename filter." +msgstr "" +"Gli allegati in linea includono le immagini nel corpo, quindi è meglio " +"combinare questa opzione con il filtro nome." + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "azione" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "parametro azione" + +#: paperless_mail/models.py:167 +msgid "" +"Additional parameter for the action selected above, i.e., the target folder " +"of the move to folder action." +msgstr "" +"Parametro aggiuntivo per l'azione selezionata, ad esempio la cartella di " +"destinazione per l'azione che sposta in una cartella." + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "assegna tittolo da" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "assegna questo tag" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "assegna questo tipo di documento" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "assegna corrispondente da" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "assegna questo corrispondente" From ff1dc87f6698f40a84b5c7d197dd1154f3281cc9 Mon Sep 17 00:00:00 2001 From: Bolko Schreiber <bolko_schreiber@cotyinc.com> Date: Fri, 26 Feb 2021 12:26:23 +0100 Subject: [PATCH 415/898] lowered thumb brightness in non-inverted mode --- src-ui/src/theme_dark.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 1b26680fe..aa3822661 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -141,7 +141,7 @@ $border-color-dark-mode: #47494f; mix-blend-mode: normal; border-radius: 0; border-color: $bg-dark-mode; - + filter: invert(10%); &.border-right { border-right: none !important; } From 719b8ec4eb7e726c7f1bc6030a9be829c361149d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=B6nig?= <sebastian_koenig@cotyinc.com> Date: Fri, 26 Feb 2021 12:50:12 +0100 Subject: [PATCH 416/898] Minor changes --- docs/extending.rst | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/docs/extending.rst b/docs/extending.rst index 6828d262d..0b6a7bddf 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -3,9 +3,6 @@ Paperless development ##################### -General information -=================== - This section describes the steps you need to take to start development on paperless-ng. 1. Check out the source from github. The repository is organized in the following way: @@ -56,12 +53,11 @@ To do the setup you need to perform the steps from the following chapters in a c .. code:: shell-session pipenv install --dev -7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). +7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From root folder: .. code:: shell-session - pipenv shell - cd /src-ui && ng build --prod + compile-frontend.sh 8. Apply migrations and create a superuser for your dev instance: .. code:: shell-session @@ -85,9 +81,6 @@ Back end development The backend is a django application. I use PyCharm for development, but you can use whatever you want. -This will also create a virtual environment, which you can enter with ``pipenv shell`` or -execute one-shot commands in with ``pipenv run``. - Configure the IDE to use the src/ folder as the base source folder. Configure the following launch configurations in your IDE: From 0f1d8d82e340ea519ae932f0d16b9753279812ef Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 12:55:39 +0100 Subject: [PATCH 417/898] add Italian locale --- src-ui/angular.json | 3 ++- src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 3 ++- src/paperless/settings.py | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 2877408d2..5a54b3494 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -20,7 +20,8 @@ "nl-NL": "src/locale/messages.nl_NL.xlf", "fr": "src/locale/messages.fr.xlf", "en-GB": "src/locale/messages.en_GB.xlf", - "pt-BR": "src/locale/messages.pt_BR.xlf" + "pt-BR": "src/locale/messages.pt_BR.xlf", + "it": "src/locale/messages.it.xlf" } }, "architect": { diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 42e8877b3..01c17b284 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -70,12 +70,14 @@ import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; import localeDe from '@angular/common/locales/de'; import localePt from '@angular/common/locales/pt'; +import localeIt from '@angular/common/locales/it'; import localeEnGb from '@angular/common/locales/en-GB'; registerLocaleData(localeFr) registerLocaleData(localeNl) registerLocaleData(localeDe) registerLocaleData(localePt, "pt-BR") +registerLocaleData(localeIt) registerLocaleData(localeEnGb) @NgModule({ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index fca9262ab..f7c89b197 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -90,7 +90,8 @@ export class SettingsService { {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, - {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"} + {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}, + {code: "it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"} ] } diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 1e864cb34..d16246c13 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -299,7 +299,8 @@ LANGUAGES = [ ("de", _("German")), ("nl-nl", _("Dutch")), ("fr", _("French")), - ("pt-br", _("Portuguese (Brazil)")) + ("pt-br", _("Portuguese (Brazil)")), + ("it", _("Italian")) ] LOCALE_PATHS = [ From 5b7c65e1108bed54a43d4411cffa9adc369493ad Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 12:57:36 +0100 Subject: [PATCH 418/898] update messages --- src-ui/messages.xlf | 122 +++--------------- src/locale/en_US/LC_MESSAGES/django.po | 168 +++++++++++++------------ 2 files changed, 107 insertions(+), 183 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index d04d5a6f8..6ca0a56ec 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -419,7 +419,7 @@ <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> @@ -867,28 +867,28 @@ <source>Create new tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> @@ -1128,28 +1128,28 @@ <source>Last 7 days</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> @@ -1163,7 +1163,7 @@ <source>Before</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> @@ -1602,7 +1602,7 @@ <source>Invalid date.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">14</context> </context-group> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> @@ -1668,11 +1668,18 @@ <context context-type="linenumber">93</context> </context-group> </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> @@ -1833,97 +1840,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit id="2056433880533904076" datatype="html"> - <source>Light blue</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit id="4082253113407591781" datatype="html"> - <source>Blue</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit id="1143414876575720034" datatype="html"> - <source>Light green</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit id="119581980963263815" datatype="html"> - <source>Green</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit id="3250646524116252719" datatype="html"> - <source>Light red</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit id="1628552745302385832" datatype="html"> - <source>Red </source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit id="5479028842846122610" datatype="html"> - <source>Light orange</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit id="8598918991528773310" datatype="html"> - <source>Orange</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit id="1789283185177957430" datatype="html"> - <source>Light violet</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit id="2682868487071320453" datatype="html"> - <source>Violet</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit id="1449010446077321264" datatype="html"> - <source>Brown</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit id="30300572504753589" datatype="html"> - <source>Black</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit id="461048771215121187" datatype="html"> - <source>Light grey</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> <context-group purpose="location"> diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index c4e8ee97b..4a3dde410 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"POT-Creation-Date: 2021-02-26 12:56+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" @@ -45,7 +45,7 @@ msgstr "" msgid "Automatic" msgstr "" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "" @@ -62,7 +62,7 @@ msgstr "" msgid "is insensitive" msgstr "" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "" @@ -70,293 +70,297 @@ msgstr "" msgid "correspondents" msgstr "" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." msgstr "" -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." msgstr "" -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "" -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "" -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "" -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "" -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "" -#: documents/serialisers.py:52 +#: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" msgstr "" -#: documents/serialisers.py:378 +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "" @@ -396,30 +400,34 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "" -#: paperless/settings.py:296 +#: paperless/settings.py:302 msgid "Portuguese (Brazil)" msgstr "" +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From 3fba85954faa002c7039675589a9b0ddccd12283 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:59:16 +0000 Subject: [PATCH 419/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 136 +++++------------------------- 1 file changed, 20 insertions(+), 116 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index a9762c286..3f141d9c8 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -478,7 +478,7 @@ <target>Möchten Sie das Tag "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> @@ -990,7 +990,7 @@ <target>Neues Tag erstellen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5872175735754226507"> @@ -998,7 +998,7 @@ <target>Tag bearbeiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> @@ -1006,7 +1006,7 @@ <target>Posteingangs-Tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> @@ -1014,7 +1014,7 @@ <target>Ein Tag mit dieser Option wird automatisch allen neuen Dokumenten zugewiesen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6672809941092516947"> @@ -1288,7 +1288,7 @@ <target>Letzte 7 Tage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4463380307954693363"> @@ -1296,7 +1296,7 @@ <target>Letzten Monat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8697368973702409683"> @@ -1304,7 +1304,7 @@ <target>Letzte 3 Monate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3566342898065860218"> @@ -1312,7 +1312,7 @@ <target>Letztes Jahr</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> @@ -1328,7 +1328,7 @@ <target>Vor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> @@ -1829,7 +1829,7 @@ <target>Ungültiges Datum.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">14</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> @@ -1904,12 +1904,20 @@ <context context-type="linenumber">93</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italienisch</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> <source>ISO 8601</source> <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2092,110 +2100,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2056433880533904076"> - <source>Light blue</source> - <target>Blau, hell</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4082253113407591781"> - <source>Blue</source> - <target>Blau</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1143414876575720034"> - <source>Light green</source> - <target>Grün, hell</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="119581980963263815"> - <source>Green</source> - <target>Grün</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="3250646524116252719"> - <source>Light red</source> - <target>Rot, hell</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1628552745302385832"> - <source>Red </source> - <target>Rot</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="5479028842846122610"> - <source>Light orange</source> - <target>Orange, hell</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8598918991528773310"> - <source>Orange</source> - <target>Orange</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1789283185177957430"> - <source>Light violet</source> - <target>Violet, hell</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2682868487071320453"> - <source>Violet</source> - <target>Violet</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1449010446077321264"> - <source>Brown</source> - <target>Braun</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="30300572504753589"> - <source>Black</source> - <target>Schwarz</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="461048771215121187"> - <source>Light grey</source> - <target>Grau, hell</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="4561076822163447092"> <source>Create new item</source> <target>Neues Element erstellen</target> From d9eabe481f947fc7a2ca79e92889e534085a65e0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 11:59:26 +0000 Subject: [PATCH 420/898] Apply translations in de translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 168 +++++++++++++++------------- 1 file changed, 88 insertions(+), 80 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index 0343c5a94..7d03e91ec 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"POT-Creation-Date: 2021-02-26 12:56+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" @@ -49,7 +49,7 @@ msgstr "Ungenaues Wort" msgid "Automatic" msgstr "Automatisch" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "Name" @@ -66,7 +66,7 @@ msgstr "Zuweisungsalgorithmus" msgid "is insensitive" msgstr "Groß-/Kleinschreibung irrelevant" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "Korrespondent" @@ -74,15 +74,15 @@ msgstr "Korrespondent" msgid "correspondents" msgstr "Korrespondenten" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "Farbe" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "Posteingangs-Tag" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -90,39 +90,39 @@ msgstr "" "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit " "diesem Tag versehen." -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "Tag" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "Tags" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "Dokumenttyp" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "Dokumenttypen" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Nicht verschlüsselt" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Verschlüsselt mit GNU Privacy Guard" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "Titel" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "Inhalt" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -130,241 +130,245 @@ msgstr "" "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche " "verwendet." -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "MIME-Typ" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "Prüfsumme" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "Die Prüfsumme des originalen Dokuments." -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "Archiv-Prüfsumme" -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "Die Prüfsumme des archivierten Dokuments." -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "Ausgestellt" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "Geändert" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "Speichertyp" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "Hinzugefügt" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "Dateiname" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Aktueller Dateiname im Datenspeicher" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "Archiv-Dateiname" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "Aktueller Dateiname im Archiv" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "Archiv-Seriennummer" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "Die Position dieses Dokuments in Ihrem physischen Dokumentenarchiv." -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "Dokument" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "Dokumente" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "Debug" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "Information" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "Warnung" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "Fehler" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "Kritisch" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "Gruppe" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "Nachricht" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "Level" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "Protokoll" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "Protokoll" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "Gespeicherte Ansicht" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "Gespeicherte Ansichten" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "Benutzer" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "Auf Startseite zeigen" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "In Seitenleiste zeigen" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "Sortierfeld" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "Umgekehrte Sortierung" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "Titel enthält" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "Inhalt enthält" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "ASN ist" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "Korrespondent ist" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "Dokumenttyp ist" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "Ist im Posteingang" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "Hat Tag" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "Hat irgendein Tag" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "Ausgestellt vor" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "Ausgestellt nach" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "Ausgestellt im Jahr" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "Ausgestellt im Monat" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "Ausgestellt am Tag" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "Hinzugefügt vor" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "Hinzugefügt nach" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "Geändert vor" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "Geändert nach" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "Hat nicht folgendes Tag" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "Regeltyp" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "Wert" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "Filterregel" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "Filterregeln" -#: documents/serialisers.py:52 +#: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" msgstr "Ungültiger regulärer Ausdruck: %(error)s" -#: documents/serialisers.py:378 +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Ungültige Farbe." + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "Dateityp %(type)s nicht unterstützt" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng wird geladen..." @@ -406,30 +410,34 @@ msgstr "Passwort" msgid "Sign in" msgstr "Anmelden" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "Englisch (US)" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "Englisch (UK)" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Niederländisch" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "Französisch" -#: paperless/settings.py:296 +#: paperless/settings.py:302 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italienisch" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" From 3e71181b4af7186636b295a39da1c5b9bca0642b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:09:02 +0100 Subject: [PATCH 421/898] fix pycodestyle --- src/paperless/middleware.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/paperless/middleware.py b/src/paperless/middleware.py index 0fe526556..2e9d2793c 100644 --- a/src/paperless/middleware.py +++ b/src/paperless/middleware.py @@ -13,6 +13,8 @@ class ApiVersionMiddleware: if request.user.is_authenticated: versions = settings.REST_FRAMEWORK['ALLOWED_VERSIONS'] response['X-Api-Version'] = versions[len(versions)-1] - response['X-Version'] = ".".join([str(_) for _ in version.__version__]) + response['X-Version'] = ".".join( + [str(_) for _ in version.__version__] + ) return response From 6c704acd08c860571b4f75010118093b3732dd5d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 13:21:33 +0100 Subject: [PATCH 422/898] tests for API versioning --- src/documents/tests/test_api.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 9a4788135..770562ba8 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -1356,3 +1356,16 @@ class TestApiAuth(APITestCase): self.assertEqual(self.client.get("/api/documents/bulk_edit/").status_code, 401) self.assertEqual(self.client.get("/api/documents/bulk_download/").status_code, 401) self.assertEqual(self.client.get("/api/documents/selection_data/").status_code, 401) + + def test_api_version_no_auth(self): + + response = self.client.get("/api/") + self.assertNotIn("X-Api-Version", response) + self.assertNotIn("X-Version", response) + + def test_api_version_with_auth(self): + user = User.objects.create_superuser(username="test") + self.client.force_login(user) + response = self.client.get("/api/") + self.assertIn("X-Api-Version", response) + self.assertIn("X-Version", response) From 26df2a0753bdbf56159076f147405cecc6a991a7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 15:29:33 +0100 Subject: [PATCH 423/898] documentation changes --- docs/extending.rst | 139 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 116 insertions(+), 23 deletions(-) diff --git a/docs/extending.rst b/docs/extending.rst index 0b6a7bddf..54a0d061e 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -5,21 +5,23 @@ Paperless development This section describes the steps you need to take to start development on paperless-ng. -1. Check out the source from github. The repository is organized in the following way: +Check out the source from github. The repository is organized in the following way: - * ``master`` always represents the latest release and will only see changes - when a new release is made. - * ``dev`` contains the code that will be in the next release. - * ``feature-X`` contain bigger changes that will be in some release, but not - necessarily the next one. - - Apart from that, the folder structure is as follows: +* ``master`` always represents the latest release and will only see changes + when a new release is made. +* ``dev`` contains the code that will be in the next release. +* ``feature-X`` contain bigger changes that will be in some release, but not + necessarily the next one. - * ``docs/`` - Documentation. - * ``src-ui/`` - Code of the front end. - * ``src/`` - Code of the back end. - * ``scripts/`` - Various scripts that help with different parts of development. - * ``docker/`` - Files required to build the docker image. +When making functional changes to paperless, *always* make your changes on the ``dev`` branch. + +Apart from that, the folder structure is as follows: + +* ``docs/`` - Documentation. +* ``src-ui/`` - Code of the front end. +* ``src/`` - Code of the back end. +* ``scripts/`` - Various scripts that help with different parts of development. +* ``docker/`` - Files required to build the docker image. Initial setup and first start ============================= @@ -27,20 +29,22 @@ Initial setup and first start After you forked and cloned the code from github you need to perform a first-time setup. To do the setup you need to perform the steps from the following chapters in a certain order: -1. Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>` -2. Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode. -3. Install the Angular CLI interface: +1. Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>` +2. Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode. +3. Install the Angular CLI interface: .. code:: shell-session $ npm install -g @angular/cli -4. Create ``consume`` and ``media`` folders in the cloned root folder. +4. Create ``consume`` and ``media`` folders in the cloned root folder. .. code:: shell-session mkdir -p consume media -5. You can now either ... : + +5. You can now either ... + * install redis or * use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server) or * spin up a bare redis container @@ -48,24 +52,27 @@ To do the setup you need to perform the steps from the following chapters in a c .. code:: shell-session docker run -d -p 6379:6379 -restart unless-stopped redis:latest -6. Install the python dependencies by performing in the src/ directory. + +6. Install the python dependencies by performing in the src/ directory. .. code:: shell-session pipenv install --dev -7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From root folder: + +7. Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From root folder: .. code:: shell-session compile-frontend.sh -8. Apply migrations and create a superuser for your dev instance: + +8. Apply migrations and create a superuser for your dev instance: .. code:: shell-session python3 manage.py migrate python3 manage.py createsuperuser -9. Now spin up the dev backend. Depending on which part of paperless you're developing for, you need to have some or all of them running. +9. Now spin up the dev backend. Depending on which part of paperless you're developing for, you need to have some or all of them running. .. code:: shell-session @@ -105,7 +112,7 @@ Testing and code style: The line length rule E501 is generally useful for getting multiple source files next to each other on the screen. However, in some cases, its just not possible - to make some lines fit, especially complicated IF cases. Append `` # NOQA: E501`` + to make some lines fit, especially complicated IF cases. Append ``# NOQA: E501`` to disable this check for certain lines. Front end development @@ -152,6 +159,92 @@ This will build the front end and put it in a location from which the Django ser it as static content. This way, you can verify that authentication is working. +Localization +============ + +Paperless is available in many different languages. Since paperless consists both of a django +application and an Angular front end, both these parts have to be translated separately. + +Front end localization +---------------------- + +* The Angular front end does localization according to the `Angular documentation <https://angular.io/guide/i18n>`_. +* The source language of the project is "en_US". +* The source strings end up in the file "src-ui/messages.xlf". +* The translated strings need to be placed in the "src-ui/src/locale/" folder. +* In order to extract added or changed strings from the source files, call ``ng xi18n --ivy``. + +Adding new languages requires adding the translated files in the "src-ui/src/locale/" fodler and adjusting a couple files. + +1. Adjust "src-ui/angular.json": + + .. code:: json + + "i18n": { + "sourceLocale": "en-US", + "locales": { + "de": "src/locale/messages.de.xlf", + "nl-NL": "src/locale/messages.nl_NL.xlf", + "fr": "src/locale/messages.fr.xlf", + "en-GB": "src/locale/messages.en_GB.xlf", + "pt-BR": "src/locale/messages.pt_BR.xlf", + "language-code": "language-file" + } + } + +2. Add the language to the available options in "src-ui/src/app/services/settings.service.ts": + + .. code:: typescript + + getLanguageOptions(): LanguageOption[] { + return [ + {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"}, + {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"}, + {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, + {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, + {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, + {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"} + // Add your new language here + ] + } + + ``dateInputFormat`` is a special string that defines the behavior of the date input fields and absolutely needs to contain "dd", "mm" and "yyyy". + +3. Import and register the Angular data for this locale in "src-ui/src/app/app.module.ts": + + .. code:: typescript + + import localeDe from '@angular/common/locales/de'; + registerLocaleData(localeDe) + +Back end localization +--------------------- + +A majority of the strings that appear in the back end appear only when the admin is used. However, +some of these are still shown on the front end (such as error messages). + +* The django application does localization according to the `django documentation <https://docs.djangoproject.com/en/3.1/topics/i18n/translation/>`_. +* The source language of the project is "en_US". +* Localization files end up in the folder "src/locale/". +* In order to extract strings from the application, call ``python3 manage.py makemessages -l en_US``. This is important after making changes to translatable strings. +* The message files need to be compiled for them to show up in the application. Call ``python3 manage.py compilemessages`` to do this. The generated files don't get + committed into git, since these are derived artifacts. The build pipeline takes care of executing this command. + +Adding new languages requires adding the translated files in the "src/locale/" folder and adjusting the file "src/paperless/settings.py" to include the new language: + +.. code:: python + + LANGUAGES = [ + ("en-us", _("English (US)")), + ("en-gb", _("English (GB)")), + ("de", _("German")), + ("nl-nl", _("Dutch")), + ("fr", _("French")), + ("pt-br", _("Portuguese (Brazil)")), + # Add language here. + ] + + Building the documentation ========================== From 84c7d24d16d573798718efd2566ef0f4f1637f45 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:36:04 +0000 Subject: [PATCH 424/898] Translate /src-ui/messages.xlf in en_GB translation completed for the source file '/src-ui/messages.xlf' on the 'en_GB' language. --- src-ui/src/locale/messages.en_GB.xlf | 136 ++++----------------------- 1 file changed, 20 insertions(+), 116 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index b413a50a1..4e3f0eccf 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -478,7 +478,7 @@ <target>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> @@ -990,7 +990,7 @@ <target>Create new tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5872175735754226507"> @@ -998,7 +998,7 @@ <target>Edit tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> @@ -1006,7 +1006,7 @@ <target>Inbox tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> @@ -1014,7 +1014,7 @@ <target>Inbox tags are automatically assigned to all consumed documents.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6672809941092516947"> @@ -1288,7 +1288,7 @@ <target>Last 7 days</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4463380307954693363"> @@ -1296,7 +1296,7 @@ <target>Last month</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8697368973702409683"> @@ -1304,7 +1304,7 @@ <target>Last 3 months</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3566342898065860218"> @@ -1312,7 +1312,7 @@ <target>Last year</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> @@ -1328,7 +1328,7 @@ <target>Before</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> @@ -1829,7 +1829,7 @@ <target>Invalid date.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">14</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> @@ -1904,12 +1904,20 @@ <context context-type="linenumber">93</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italian</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> <source>ISO 8601</source> <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2092,110 +2100,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2056433880533904076"> - <source>Light blue</source> - <target>Light blue</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4082253113407591781"> - <source>Blue</source> - <target>Blue</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1143414876575720034"> - <source>Light green</source> - <target>Light green</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="119581980963263815"> - <source>Green</source> - <target>Green</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="3250646524116252719"> - <source>Light red</source> - <target>Light red</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1628552745302385832"> - <source>Red </source> - <target>Red </target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="5479028842846122610"> - <source>Light orange</source> - <target>Light orange</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8598918991528773310"> - <source>Orange</source> - <target>Orange</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1789283185177957430"> - <source>Light violet</source> - <target>Light violet</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2682868487071320453"> - <source>Violet</source> - <target>Violet</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1449010446077321264"> - <source>Brown</source> - <target>Brown</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="30300572504753589"> - <source>Black</source> - <target>Black</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="461048771215121187"> - <source>Light grey</source> - <target>Light grey</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="4561076822163447092"> <source>Create new item</source> <target>Create new item</target> From 7cf02b7364bdddcc1511d7d2a9a0f9b77e74d861 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:36:09 +0000 Subject: [PATCH 425/898] Apply translations in en_GB translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'en_GB' language. --- src/locale/en_GB/LC_MESSAGES/django.po | 168 +++++++++++++------------ 1 file changed, 88 insertions(+), 80 deletions(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index dbdd4b2a5..7e775cc08 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"POT-Creation-Date: 2021-02-26 12:56+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/paperless/teams/115905/en_GB/)\n" @@ -50,7 +50,7 @@ msgstr "Fuzzy word" msgid "Automatic" msgstr "Automatic" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "name" @@ -67,7 +67,7 @@ msgstr "matching algorithm" msgid "is insensitive" msgstr "is insensitive" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "correspondent" @@ -75,15 +75,15 @@ msgstr "correspondent" msgid "correspondents" msgstr "correspondents" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "colour" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "is inbox tag" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "tag" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "tags" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "document type" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "document types" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Unencrypted" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Encrypted with GNU Privacy Guard" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "title" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "content" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,241 +131,245 @@ msgstr "" "The raw, text-only data of the document. This field is primarily used for " "searching." -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "mime type" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "checksum" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "The checksum of the original document." -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "archive checksum" -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "The checksum of the archived document." -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "created" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "modified" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "storage type" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "added" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "filename" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Current filename in storage" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "archive filename" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "Current archive filename in storage" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "archive serial number" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "The position of this document in your physical document archive." -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "document" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "documents" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "debug" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "information" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "warning" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "error" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "critical" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "group" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "message" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "level" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "log" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "logs" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "saved view" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "saved views" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "user" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "show on dashboard" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "show in sidebar" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "sort field" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "sort reverse" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "title contains" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "content contains" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "document type is" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "is in inbox" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "has tag" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "has any tag" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "created before" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "created after" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "created year is" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "created month is" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "created day is" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "added before" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "added after" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "modified before" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "modified after" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "does not have tag" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "rule type" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "value" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "filter rule" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "filter rules" -#: documents/serialisers.py:52 +#: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" msgstr "Invalid regular expresssion: %(error)s" -#: documents/serialisers.py:378 +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Invalid colour." + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "File type %(type)s not supported" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng is loading..." @@ -405,30 +409,34 @@ msgstr "Password" msgid "Sign in" msgstr "Sign in" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "English (US)" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "German" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Dutch" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "French" -#: paperless/settings.py:296 +#: paperless/settings.py:302 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italian" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" From 884d85de569e25319bbe23b39012d0374a0025bd Mon Sep 17 00:00:00 2001 From: Fabian Koller <anokfireball@posteo.de> Date: Fri, 26 Feb 2021 19:39:44 +0100 Subject: [PATCH 426/898] Fix GitHub actions Follow-up to #630. The check for the target git sha can does not work in the molecule step. Instead expose the sha through an env variable in GitHub actions. --- .github/workflows/ansible.yml | 2 ++ ansible/molecule/default/converge.yml | 8 +------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ansible.yml b/.github/workflows/ansible.yml index c49ce2abc..7467806c9 100644 --- a/.github/workflows/ansible.yml +++ b/.github/workflows/ansible.yml @@ -48,6 +48,8 @@ jobs: molecule idempotence molecule verify working-directory: "${{ github.repository }}" + env: + TARGET_GITHUB_SHA: "${{ github.event.pull_request.head.sha }}" # # https://galaxy.ansible.com/docs/contributing/importing.html # release: # runs-on: ubuntu-latest diff --git a/ansible/molecule/default/converge.yml b/ansible/molecule/default/converge.yml index c70c54d39..c7f43c877 100644 --- a/ansible/molecule/default/converge.yml +++ b/ansible/molecule/default/converge.yml @@ -2,15 +2,9 @@ - name: update previous release to newest release hosts: all tasks: - - name: install git dependency - apt: - pkg: git - - name: obtain latest git hash in current tree - command: git rev-parse HEAD - register: git_hash - name: set current github commit as version when available set_fact: - paperlessng_version: "{{ git_hash.stdout }}" + paperlessng_version: "{{ lookup('env', 'TARGET_GITHUB_SHA') | default('master', True) }}" - name: update to newest paperless-ng release include_role: name: ansible From d275ba9fd41b9159e125abc082de4c2f27b92f37 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 21:06:40 +0000 Subject: [PATCH 427/898] Translate /src-ui/messages.xlf in nl_NL translation completed for the source file '/src-ui/messages.xlf' on the 'nl_NL' language. --- src-ui/src/locale/messages.nl_NL.xlf | 180 ++++++++------------------- 1 file changed, 50 insertions(+), 130 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index fa997d375..2a2c1eaee 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -478,7 +478,7 @@ <target>Wil je het etiket echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> @@ -606,7 +606,7 @@ <target>Gebruik de systeemtaal</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,15 +614,7 @@ <target>Datumopmaak van weergavetaal gebruiken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">96</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> - <source>ISO 8601</source> - <target>ISO 8601</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -630,7 +622,7 @@ <target>Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">114</context> + <context context-type="linenumber">115</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -998,7 +990,7 @@ <target>Nieuw etiket maken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5872175735754226507"> @@ -1006,7 +998,7 @@ <target>Etiket bewerken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> @@ -1014,7 +1006,7 @@ <target>"Postvak in"-etiket</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> @@ -1022,7 +1014,7 @@ <target>"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten."</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6672809941092516947"> @@ -1296,7 +1288,7 @@ <target>Afgelopen 7 dagen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4463380307954693363"> @@ -1304,7 +1296,7 @@ <target>Afgelopen maand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8697368973702409683"> @@ -1312,7 +1304,7 @@ <target>Afgelopen 3 maanden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3566342898065860218"> @@ -1320,7 +1312,7 @@ <target>Afgelopen jaar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> @@ -1336,7 +1328,7 @@ <target>Voor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> @@ -1832,6 +1824,14 @@ <context context-type="linenumber">21</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Ongeldige datum.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> <source>Yes</source> <target>Ja</target> @@ -1861,7 +1861,7 @@ <target>Engels (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">82</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1869,7 @@ <target>Engels (Brits)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">83</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1877,7 @@ <target>Duits</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">84</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1885,7 @@ <target>Nederlands</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1893,31 @@ <target>Frans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Portugees (Brazilië)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italiaans</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2076,110 +2100,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2056433880533904076"> - <source>Light blue</source> - <target>Licht blauw</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4082253113407591781"> - <source>Blue</source> - <target>Blauw</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1143414876575720034"> - <source>Light green</source> - <target>Licht groen</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="119581980963263815"> - <source>Green</source> - <target>Groen</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="3250646524116252719"> - <source>Light red</source> - <target>Licht rood</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1628552745302385832"> - <source>Red </source> - <target>Rood</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="5479028842846122610"> - <source>Light orange</source> - <target>Licht oranje</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8598918991528773310"> - <source>Orange</source> - <target>Oranje</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1789283185177957430"> - <source>Light violet</source> - <target>Licht paars</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2682868487071320453"> - <source>Violet</source> - <target>Paars</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1449010446077321264"> - <source>Brown</source> - <target>Bruin</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="30300572504753589"> - <source>Black</source> - <target>Zwart</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="461048771215121187"> - <source>Light grey</source> - <target>Licht grijs</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="4561076822163447092"> <source>Create new item</source> <target>Maak nieuw item</target> From e9e3b9c4b0b75e00fc863e6f9e91b8e7286f9087 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 26 Feb 2021 21:07:13 +0000 Subject: [PATCH 428/898] Apply translations in nl_NL translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'nl_NL' language. --- src/locale/nl_NL/LC_MESSAGES/django.po | 175 ++++++++++++++----------- 1 file changed, 96 insertions(+), 79 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index eefba7fbb..1309edd69 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-16 14:52+0100\n" +"POT-Creation-Date: 2021-02-26 12:56+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jo Vandeginste <jo.vandeginste@gmail.com>, 2021\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/paperless/teams/115905/nl_NL/)\n" @@ -50,7 +50,7 @@ msgstr "Gelijkaardig woord" msgid "Automatic" msgstr "Automatisch" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "naam" @@ -67,7 +67,7 @@ msgstr "Algoritme voor het bepalen van de overeenkomst" msgid "is insensitive" msgstr "is niet hoofdlettergevoelig" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "correspondent" @@ -75,15 +75,15 @@ msgstr "correspondent" msgid "correspondents" msgstr "correspondenten" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "Kleur" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "is \"Postvak in\"-etiket" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Markeer dit etiket als een \"Postvak in\"-etiket: alle nieuw verwerkte " "documenten krijgen de \"Postvak in\"-etiketten." -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "etiket" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "etiketten" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "documenttype" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "documenttypen" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Niet versleuteld" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Versleuteld met GNU Privacy Guard" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "titel" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "inhoud" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,236 +131,245 @@ msgstr "" "De onbewerkte gegevens van het document. Dit veld wordt voornamelijk " "gebruikt om te zoeken." -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "mimetype" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "checksum" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "Het controlecijfer van het originele document." -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "archief checksum" -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "De checksum van het gearchiveerde document." -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "aangemaakt" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "gewijzigd" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "type opslag" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "toegevoegd" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "bestandsnaam" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Huidige bestandsnaam in opslag" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "Bestandsnaam in archief" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "Huidige bestandsnaam in archief" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "serienummer in archief" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "De positie van dit document in je fysieke documentenarchief." -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "document" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "documenten" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "debug" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "informatie" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "waarschuwing" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "fout" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "kritisch" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "groep" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "bericht" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "niveau" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "bericht" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "berichten" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "opgeslagen view" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "opgeslagen views" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "gebruiker" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "weergeven op dashboard" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "weergeven in zijbalk" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "sorteerveld" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "omgekeerd sorteren" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "titel bevat" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "inhoud bevat" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "documenttype is" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "zit in \"Postvak in\"" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "heeft etiket" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "heeft één van de etiketten" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "aangemaakt voor" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "aangemaakt na" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "aangemaakt jaar is" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "aangemaakte maand is" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "aangemaakte dag is" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "toegevoegd voor" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "toegevoegd na" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "gewijzigd voor" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "gewijzigd na" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "heeft geen etiket" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "type regel" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "waarde" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "filterregel" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "filterregels" -#: documents/serialisers.py:370 +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Ongeldige reguliere expressie: %(error)s" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Ongeldig kleur." + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "Bestandstype %(type)s niet ondersteund" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng is aan het laden..." @@ -400,27 +409,35 @@ msgstr "Wachtwoord" msgid "Sign in" msgstr "Aanmelden" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "Engels (US)" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "Engels (Brits)" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "Duits" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Nederlands" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "Frans" -#: paperless/urls.py:114 +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "Portugees (Brazilië)" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italiaans" + +#: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" From e38c5ede832caa50ce9a43a1d045487c10433633 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:08:04 -0800 Subject: [PATCH 429/898] Closing should only navigate if closing current document --- src-ui/src/app/components/app-frame/app-frame.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 05b1f3f68..18e30b0cd 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; -import { from, Observable, Subscription } from 'rxjs'; +import { from, Observable, Subscription, BehaviorSubject } from 'rxjs'; import { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { OpenDocumentsService } from 'src/app/services/open-documents.service'; @@ -86,7 +86,7 @@ export class AppFrameComponent implements OnInit { while (route.firstChild) { route = route.firstChild } - if (route.component == DocumentDetailComponent) { + if (route.component == DocumentDetailComponent && (route.params as BehaviorSubject).getValue()['id'] == d.id) { this.router.navigate([""]) } } From b7433550ad784cc29681e357386cf7f27e405619 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:08:13 -0800 Subject: [PATCH 430/898] Hover state for close x button --- .../src/app/components/app-frame/app-frame.component.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 7fa588e9e..6fa0f6164 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -79,6 +79,14 @@ right: .4rem; width: 1.8rem; height: 100%; + + svg { + opacity: 50%; + } + + &:hover svg { + opacity: 100%; + } } .nav-link-additional { From 10613756c0b0fe14b5fcf6d5f931f6996eba91e8 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:11:25 -0800 Subject: [PATCH 431/898] Consistency please --- src-ui/src/app/components/app-frame/app-frame.component.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 6fa0f6164..0ce91f779 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -81,11 +81,11 @@ height: 100%; svg { - opacity: 50%; + opacity: 0.5; } &:hover svg { - opacity: 100%; + opacity: 1; } } From 5ee97b848aad89e4da41c4fa8d1bff325c265d71 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Fri, 26 Feb 2021 14:16:31 -0800 Subject: [PATCH 432/898] TypeScript fixes --- src-ui/src/app/components/app-frame/app-frame.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 18e30b0cd..91177fc54 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, Router, Params } from '@angular/router'; import { from, Observable, Subscription, BehaviorSubject } from 'rxjs'; import { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; @@ -86,7 +86,7 @@ export class AppFrameComponent implements OnInit { while (route.firstChild) { route = route.firstChild } - if (route.component == DocumentDetailComponent && (route.params as BehaviorSubject).getValue()['id'] == d.id) { + if (route.component == DocumentDetailComponent && (route.params as BehaviorSubject<Params>).getValue()['id'] == d.id) { this.router.navigate([""]) } } From cd18f8021e4f6cf0444e9b9fcd2d29f43c54dc8c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Feb 2021 23:24:13 +0100 Subject: [PATCH 433/898] remove unused files --- src/clash.pdf | Bin 10862 -> 0 bytes src/tox.ini | 21 --------------------- 2 files changed, 21 deletions(-) delete mode 100644 src/clash.pdf delete mode 100644 src/tox.ini diff --git a/src/clash.pdf b/src/clash.pdf deleted file mode 100644 index 304fbe71785e0320b55414484ff07b4ebe558dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10862 zcmb7q1z40@*ES%Hlpq~LH#5V~5)u+Bor1)`4Ba3pNQ+2!OE=OWARW@(Ez%v*^^fPA z?|i=RcfR-ke=Zm{d+)W^+V{HGVqMR(n3SbuxWL>3*i6mmnRnP=00>}fWPvRr0syMJ z*}(xoB_j(pCu;!kCEUi;$qc~H#{&S$m|Ho)9T2~*piXdUxUnq^u~88q^lQbz(Fwo@ z0f>oVJ32YQq1M>0DWPiCwzD9DyCwtsCG5gr13An@c1C@fkHR{rR%V5TJqj-^a93FE zvyTs4Hh3u)c+IitY7X}6HtL?dSRQ_FhJ@S=@Fjq8BDwIO&j)}Xj&vh8UjR1+Ld0Gh zJkYhsQ(Ys*^dYb`#INSCsO?T2)I$p=ll!LBqRBq?c*Uc1uVA<(m&~<{JVb`Z@^u5L zu4LZFI8_c)D={@iDbq6*hn@feDZ=M84}o=GmTxjov&fQTzNtm-N6Oj`|7bBRDtaEz zZhr{UGbk}}#B|SO0hyVPL0<a|mv4Ub>IM>4wd%$4mk@=v1YBldX`QvD?bfL0)eKT& z8oDqu#X^fJ2q(>M*RC}m(or70NTuK_FD3hSM851s+?OlE<X-bkXQy`(?kk51ktJ)^ zmYpVdAPW^4fn`xkf}^@?t|sUnC3>luC%#nA5q+4vsCdv^!Y!U`%1QXxJ?lj!2LG5w z=85`R*p1w)dG_lV7JfcA^vtE<x$&XFymV>pqmtVw%AX^E#WypiR=O__@zCu*)f>!P zL^po5P9Dem3`!cnXU~EjwMN%y!h+F9uf_Rl>V(X&G7Fl;>$GHVZGCW31fxSvcGJQB zTnZW)xvBCCIMOQqg(+fQoov{HTST>^#JuLVl7}69Sz*-E3|ItyCpg{;O1Nu!*{r?0 zxC5%yO^M5P*4_(N0!!rv#v>*|&HVREpSO%^gfzNcBM-P1UJM~A)t;Gvbqi6@u5b4J zV_XOv?&8xo!)=Us-3YiYKL=QCBp(L7p;#Hl4rjJspzQ)k;Yko&h<f(O*f!*n9fW%+ zc|C3Hc+c~UNl-mC&NO~q3=+$sG)$g%_DZdDJ5z9zVIoj%QwhUBT>u+y1N)1Xh|w>i zgMVkd+8ZOMKS-~w@bbU-uK;&~!k|vjzasz)0rC7sZxL}<JE*ZG+zDU=H#N5rr9WtB zrU#hAMCrBo6hI1gQgAbKId=!Rn!BR9vAd<Q5R6`23|qui*wxz38gVwj)!NF&QP@?K z9*QssE{queng-GX{@CJVDN3)cpbT)bwY9P|cLMNm3vq+Fzz|M=i38Lc?qcg;2>^5R z(<6>_fSCxZO3VCpAmT4kdNU^{J7FNu#l?l&1;TCXU<w2a2?+r~JU|{EF2oKlM>iWM zs4JI^BLhO;ABLD~|1D<Y$o+>++{U)nKyz&%m>UHAFGbRDM`H(bJ128no4*9@epC1_ zl86O_C<Jk%Ulu}*Y~MJE($fPF)56LQwy-zGa0gL(J9A4oVg_+PK5ia*;9uAIpIQ*8 z{j+_pP`f`3{1+`^A_xIt1zVW8iJLScS&8w0c)(mB9xjlOIv661_~rv~fIz|^kO=VK zb|QR)5S2pYFhq{~OBBQfMu0D<4(1c)0SWU8a)7{pi~hFrH&I&$b%f`{Y>geP-G1E< zjBpk=2ml1A!yO&r4p3t!fRdCd7a|J-c)7vc;6Kgy<E+0#MS#Cx`wfZz9UG{fg2I1B z$J+Ye-GIPNK|xsB*7%Jz+{Q^>T9p3H8*`X21Of(u`Am$tpgbmgh+CWRbAb?FT*h#I zL1Pm>BOwT%$$xMY%=m9R?A|z7{XspLF%WJA|E0wd;VJOH8v-*HHnDZEh9bxTwX?G_ zH-`Qq7Z3s3f6#+ih5m}Q--r%1H@E&n->)^GjU&(;_V23xloGasIv|ws{6R&;DZ<9K zHh)-PV+<Fimqcj&Bcy&q{@<vDu-Nz)J!~ER3W5KpTmN~g8r=TRft5Kz&mS)SV+#1+ zhyFGFoBsc4&|k^p|1T&I)*@o!ue|n)+6WMS3k%*q!-AV1!pkGX`zOVJf$@ithy;V+ zAMo$=C5Dat-x&~*Q$^`re&x4+NVGh^l@|Y4K>Sr<fcXS|ORuge3L)iqZJ>wJXx40G zsLjh@a?G&gs-EDEHuPSZMD|wo?6Z4}N3+Nab{iX&7>qfQQ6>lO7ombpP$bc{nR=Qb zWW{sz8K`TkQ^v?-FH}mb2~$+0L(-zWe>IYruo99>;ua~dxv2HJ^Xu~`2dM=mti5lF zH`ZR;COrITH0D)9crdHNY&ET86q$5={E2E6^7{LuWs*}gQGdq0f4C*&w_8fdORKp# zI>D{w5xfF`L5L+)08mN+YNv=u-H6i41}^F51eb>)Lc-k1P40gwtp2RSeu@44KZu8) z|6efDQ|Ym22N5)0bF3%4W@l5t4<Iljl6)(tw{4^BZkJt7IL<)VgK_T(pHT#$aGj83 z2pBcI{S=MYqMsVcgr3jG_I}Yxkv^q-B<90oR<3sS9F3aT0d3y+M*Qh@b;>Wa8ike7 zQH`Ag7*p*l@`(^`321708=F%Sh4v~o+vc#6^vtX4_tqWWEU5CK{rl=O@rBO}(Y`y< z+Bwsd-mnOl;`)5~kz(-ue33q={I2`_nVv_=f$0*V4=u89`!;l7>X7W)LAPgWNSi!s zmoyLkqUIyLXSgPmgSBNsR5k5VwqIs4CPGPERfjI@Xx!c8S)Xhe)r|KN8@hTkf4%v@ z=WLgAiT{Wsvh*Ju!uy*;{uAwZctQUPX=JNSJK$m9fgAQBfY~}lv+(T}w`g%vO(PPr z+M2SjnfvA(u&WR6$y+(v8i|{#jlMZ1g^%Xqy}Qk>VEgA8hsItcLnf<pF%)x&pv$$X z?d=0@fxXLxwF51aN`5=_=K3eKpGbDXCdkDxykHx3Uz~odqdv_eEBH=)7i(2YWIV6K z#Ws9kJ`qOT;<t(T$l6RJCUeddWgGTkjY2VdhM{Vh&q6DQy!$LX8)>qT0Sy!!h8TPl zVFQiNJjFI7fU6?C;*CO~p2DoDeNORcCoc17NL7%F?>eajCd_nqohD+M$ip#!e~atg z@ejc9{XYW7D+u}5fGrWibyA;5Jom7@i+ag(5_Jjh{wg3674b3<%MBR|^;nK4`Y9kW zBIF7128M!c^!UTgr9l^aFL{WxRW)maiHjcILPg)lX=_-Cv{u8Mb4mR~iRP;@2AZKX z$<WDJQTFKD#Z+4KLeV^rGn4(HbC-i#ul>fQmzV^S*z&$*($n?tO3O0mnyA2en9w`p z>+Z1B@O!%-dH!Wsk|9I8U$)Nn{7L#yB!ibI7WoB<1!oV@>DHuzUh{+m?WomKVzF5~ zb-g<rY^=?>?AtJASgNwzF+`tCa(jYdOIa`yK(-oA#~HFaTj>%+mGta_ANydDzvAqO z3&?PzH{YJ%6*DdW-V3cff^b$}V_L04A&ij6L&fiNRY7&-r|A1{M$cWAm{__Yu$Zq3 z{BTU@BRYWy&!8S4Fk*_ZC>C>z<(*QL0c4Mj=fh84gA}R}-pk%cbm5VZRfAF;CQ0Y0 zC-y*bfNeYdF_EMp=_TsRRhna-!7HqlNzV!OmstGf;Wk6<O;Txwc+q_QXsBW4#LV5= zJug-Tt-2D=Gt;t!LX+>zMlre<rq80F6|~=~HnrYfa;So?pNwzYR0O{LSWGXlCNF}a zR1vV*EOyK|`x7k~$K*p7-Wg@TIJkdJmcTV(w?!B;{|Th`^A!co?My&ulu^D3hg_?c zN+P<EyyxKfkXP^Ex9CTysXZ$uPfXu^!^^dq#NAxq*4p$s%bNs=6wiGag`N40rxwt8 z#^0g3?=aE?pW)s<=bW8tXkr;%sJ5}*NSdJD`>w2O*~ebzwicYb)<+SqUkf|RtY2<> zy60Qi8+^GULVHkQulYjWUIpsYV>Y~_jV@P`E-8{-@fd}ahFEIFP&Qo?vo3HBrJ4>* zr4=9{(W$7#=Io>#BbbkEFHzEA1Hz})g0Ied;pU~R$2g`KK2DO0uJLEhFRl8}#`yER z!%k$Dncdg@L)g?v`R6E<PRxt9tP(CcdzzR9-*4M{l&Q`!iJk?N812-wJ>^Pd<!plz zhK-}Gbfa==V>z{OVsa%L1{G-QlJMc;;uS=uY3C38IAQadov`>YEhC>Dt5`sxqrs4> z`bA<+ScvoGxFQp6N>vn>eY2Y!6~#Q6+KfbuLPZAb7&-Q&Xu>F2$MYK+sYR1Q$>TZ6 zLWAULM^Bs7L5>%`g{5V|lE>$$6NEs$uN07kRx<YDW|moHxQ>Q4?TL9Ok&G@&G*ktX z<ws9z&rAo2N?C9ZR;7^8BT2_-xrccPDWV?JS%I|b>XvWG;@HS1+IOBzRHWg8V+$~G z+WmrBl`1!Nw~y?F(z>T2v69e2{YcI(c_CD3F+C)x<I+l;xHzzn8|L&Fx52#~e7)*% zM&TAQ(s5Bl;U72W1{bweCp3y_9!Z%Uwfk8Z;mAx0@O}%@tX_qLE4_?!kTh1#_=>V` zaXO5PxQ8@DhI$iHS15B-m1_EGrISmKAC9_1j$~HQnAwSchqB1YjQDOF7AmjPdvR(^ zPq2nfyN^i1k+xYTchDn0d#7n!>+wVjWhxbGqZfk>vo(?eKfChfWL{QR7cw^SG3202 z{d|p;0sG3;h-S@Q&T_^XX_Ci6fjUI~ftMgh!PvRVC`KbNsyt(lo%a0U_qsXm4iPa8 z&EfW7vbkI{=zEgFw6o!5WwYX+ox&cSgK2luqx~|YsMf-I&o-0HI}%t#anaK)3PD)l zu6FirvuFMUT|U#J{v{U0AZT@FE1M?Hd>k_!I!)ACmv#Pxq?xX6ppsu{l6q-?nx(8W zzaRRFNC`E~r<E7+Pr3YHbd{jz3A|a(FnL!6x>o<AnOO;yBrZLjVH~i1a(+;|FT1Q! zl1-9Zek`Oboqy<}@PM6lNZX8gMaqF>IHVx(Htp??!ad?aAL^+HEz=&!QAX!8=IWl# zet%S#CLJan%)S>w_>DMK54ctqIJA%C#vY`mM8Nkz_`oq{LM?oz&P8pawXW+`n<461 zot$hU;cFd~YS-%OmqB*<rjmhDjko2dB?%9xw?B#wAdOMjsxYrJaGe!<hog7$P-se7 zc&8)JzT6=Msdx=l^3Y*DpHM*!s8vMC5L6?<fbB3wcfA_J(HISYwE>>R=XSrcp<a1u z{@QoNED?~@vnttW6@>$XsP(%tKa~;<O{h#TCP5N14m3J^nLh3woaWyl?XxTI$QU7| zcyOrvvv+jlZkim@G)ObMBFUxGYG;p|ReAIZ3rk8TeLm+Q%a35^>7WOCezeLGuRqv4 z(pr&uXi}{_KbcALfs3N)Rl7jm5jw7I2LT#Jx+{t&t%}4)Z(J}fjXZQvNko2!X+RBI zpIv?j1G$O}e5FcvOj@@={n>55gxHwrG#^ue-j0fq(*6**8xEdAFRtpRVU#k61->Mf z*0lDqMl~dJj^JsNN^xpM`q0K+fdbndu^;yJ<Y?1rCeSpb7&68wd-R>T1IVJ%!O1e9 z-B3=`TG*bno-Y*!IBR`K_4Eq~lYS?O*+khu(8LuVri<ZH+E#lIK9sh%rHHUAt)n$) zn{VulYI79=@+8-9eAosTJVcXj^6p?U{sf{OQa{Nv9UK5H(Bi&zx?-r=XDEB?&$h#~ zlhd7ZkrVmiNBqNpxQ~X+&B*(=TRAr#9D}m=mYoeM4m5mE3|zz<#O(D&OU3c6e(FuO z>gM?u)E7h+bc|c7jj2J@ayw3phalqa+}*lqKRy{>Ko(5#QlLLrS{<Uqd!*BX#9KqC zG5YN9Tn`1WFUkXM%AJAt(^(ofKeHg=JkgbErZimZZ9@_Q#Y`N-fqJIXukL=bKPi@~ z=A1s(_Co-%-{y{5gv@3cSwX^Pxt6or;*!3Zzmb2xnJSA<I}twr>C3xaFMfNwU4Wze zecf$;njByAj*0j?M-SYCxYsIK9WuCI9)9L7T~sXxP|-$QBEx2f4ZfY%YMsDU&DF!P zcOpjGj;$bb1N%ndWgFUA=AIpW=Z2|a{nBJYs)l&F^_TmG0#AgVaM|ws{BC6_Gs!qv zR@6T6R`yzTadfa2W6r?(UFmI>bNkaLA|E~-ZXMQvINlfeL4|ft12&vpGx2(8)><A_ zKaXQwPgIGJ<26gH29fl6uXzVlN0_uRQl-C_CrjSkIlX?u5?Yz?DS@6+T`*hor$x#9 zSSbZw0pn~l9Y6A6goB+^OjV3a;b|k7Pye%1p_E`mwFC;r<S`b8xysq@%uXKKjThBH zd)&qOC1IVL62%J#r<J7#9%m7v9{B_pe1W_Vr?2=Z=y`>nZVh+@O`1u+(~*l_j7|*0 z&Z88zvz95<BFOYWZg!bXmlreWB?dE3?t_Skh|8GOkiU_X+2?q3!7(A}5u+v;+Ek!D zZ$~`A74HXlWOhjOXu-|)UC5=vhAE>mRKt5nX^%!-Cy<p?N4eRVpQMNJ5MX?jEx-yc z%}Q9SbV{w7CVak`TSXqMRcV=xhRP0+VoA#EV`P0?OVa<joK4H7CvG9J;*#QqR)v?s z{LE3>VI(g4b*s-nGUI3Bl+cu_{K47_VZ{_v<j50yqY25w2OCxG#{xNh$s#57KdfmE zlx%f>t{a8#gXeb2L{5))x-x+_KRFebD)?_|&V0OLVxlXL_c}}*N#kRPzu<g*dzliX zs%V8NxIoysTNMuu(H|<&`Z;M&lk1kS(%SogW>5yT%ayE^GWI<tJ`esI5loT8n2>Dg zxZv!m{OsO#R~oS;!3GxtxOd2Y{+r5dTt<sPRWs>@v3DQ0TTEVKsW!HU1zS#<5p0k{ z+6z0yFe#sSO~3u7*Pte_=xKD)h@mP~D~5TxYub)eluYBke4Mrav}M3bOv9`0CFK^m z7Loy}coS#NRdsgIbdN#r+=m&fWx+f@u1yV09L>1uzO&IFquK-^98wid=VT%$MYEf6 zEMrAOnG^yS$quXvqTG~pVQ7l4FHx}~KrtbM3^uUwRal0X=%F&l>b%nWmtt|*4Ydb$ zsxoeVf~5}j?T>hoJf3YmS$kT-IfcI3)~s0f4d2(`T%RJYSvz;D2is<EVK2F{`^MKZ zkrNO+zYLjOCpMN-pCZ22&Ksjt5mDsOB~}S3W>9&+z(-K(BZrI0XIGDoZjs)AUUAK| zNh9g0{(M-#9OFB><C9_?P9bX5+m%27Cv4L>)w#S-HN~`Sj!F^OcVo0d+qP7M!@2!+ zuhY1<CiHZPa_&gF%;ac4ZL|Kf>{aqJkf@-h{?+$JYnFX8*7Is>+@&}E@8G7O(aCAP zJTK_ZDKE!nLSy%0Thmh!*M{AgWFfU@0g9mH1!0or?IDhosjM%%R05=;T}M>LCPHBe z*wixA+h#0hL6XHE*vaxy>agv~uu{FdSh#g^M!O7WFR~-MU{|OP<Xn&=t$<z!T#gKK z5&`v5$2wOmvKK8j(cAH_F-pbn4x7{qt<F2X6@6=dGTUU5@3J`BjO=i5`#^TKX0j6a z_Cz-xzy3k8i=X95YLWH=gCC{ewLYPmeyZ2W0Q*6vDTyb^@PZUow%%uUPBw5{dGS~d zgfx-ixlehwuW8bbO3)8^(tK_+XNlpQI&&BP5JtAj>#otRD|fEIpJY!{zI-8PY=Dsp zQC@8cdtg1)db>Q>P|J6J9N)JScN%;?<9uL9gQebhX|lBTph%~<=(R|-8>%%;7g<Gg z9ZY@S<$?Bk!Y+wN-IT)cu+3s<pmW1OPEJ^mss-PU2XUowFHRw8S0iXWz@Jp+E5W&B z2TlhLM|pIk@&;NfjwY~QSq#>@h*y_vuhu1$B>TE`w^a^<MwHSynUuFOi-*jYN+z{s z23cxwN*SyEF@`herL*3`lHUE`ke3&pjhra|SDY{#|JoPP-{^Cmy|@e@mAIc_DcIZj ze$kURNHyl9=U49)bPgw9Ou(v}%jKZAsnsw&J%&#PsRo`STf7V*Gn6T!L?bf|ZxcME zuo`M6$7)0+B95l%U=wq^f;`u+yR0B|U0cc8)*zGiv1ILxR<A=j9Jc(9G4A#{hZWTP zWvzVN$Dq-EjJw@HVs3H#KKr7>v-T%PgPK9$_4lcFNOo6vUfbAj?~0!wm5SUCY4pFR zIyEKTzTmy8Bw*Mrev6+6q<3F&N_<Wq+|xTvpC7S|vf^t_D*ak{1EmPZg!Li`C)aE| zw85|+4U0773t%5*2F*NjO-WVVKXaRP@;TP!@eg$#uE4$AQcrTnDfoWE`a}Q0+N+B5 z%yK%%Aw$kGr99z9*PRlV`xC99w<mWV=L_ybo>;CdojGE6d-3ls7IcAWsb2T8z?>zS z0X#i342%zb3T9~U7kxC#mMzUHgsqB8WTDhwPGT>U`jx3iu>p5gIOtXF@pE_U^KkC9 zgKCr?YRj8B-RAL`5n_H;Q<-YF1v_`wdl+4%C+GVLo>#R?;_hlcZY(Y?1mZ8pH&}cN zz6*FQkDYC|Hl~>>eb;Yhz>gR;O8uN()v`4jFVqVnrY52GdaPGUtV_L)GT-c(qT|7C zdDFEe@{VA;C1q*6SlB#d+4pVbhWHrciL`0`S6Lm82UYp~9cHo46bm{Xl0Po=1Vm9s zOA3~fW{3EP=F#;*pH>p_7kq%UE*O)Ve7>PGVZhj2hNd2Lfh%J|5w0NzllJ*Ku?j;8 zz%ry#^)@qr5FQElvE??!yLdntP<ydw<Cl@%QlrmSrU^}I*DTi3-tofv9B=pm^@Pbz z&M;ybg2gR&7>Ft!x6Fn`6KnVpl^`-*!B@D~H2Nt^>*33|BXX>>=YSW(PkZF9)qPzU z6QZ8xIL@=QM#Lo24;T+rG%~loc=Xo57u@Tdh1$nNP+`fb00ePMy!LI{rQm0G^Lg&2 z>x;?_ygu2aVfXN{@m67L$JC?Is+KeCO^NprPc_j`4OnL~(&{)#IOfi?a*yj7svu8- z#Al2krIRPASuRAp7<*3kBeuBYIH{`SB%5kht7(6tCUH(}1moL=zvO_k4ex}5AVuiH zlcf5)N!^T)(Cc_U-YZ?z<{n0ea<$wxqlGAqS7lmk&AWq4BD`U~WDlFW1e0Fmt~SWO zN-XNO;;#=`TdYgi8mx|?Tef=^Bl*5j9fz`rgkQ<+yDzE!F^U+gFp!u2&>FaV+7>~2 z^>uhX03FzW?)yIK2yT45#P@bU|3q@Xr|<g-m+;}c-nXTL9;M}mbM^0D#|?UTWZouR zc>RdeZRzi_q;xd5Ep`D!pPL-FVwfzwpX*6ZIImx&Hv%PmobhGhFN0?bMLVwO#m3vU z?PUZ8Dr-lzQIfuK;*4s8UK#g&97Y53@Ljm1)U}*d-hckMsko^Z$lR`kOL{~sup-cW zE*}s^KshFNV<ogT<~0eGmB(n~-(`@~^{dADrZ?@O+!gK_F>=R{drQ*sC0rptZwOC2 z$xG?t=RLuF$zJs*gUe3SGfzL=(p%Gkn9G5n8z6Jue84|EF5~~dJuXuOK>qvrEid9V z`tPsE_YzH&)nAc#A9$2Hre`#m^Y9AE#|(R~rZCE?`0O)}Nk+E@Jq&BXq^FlBlqR-o z8KLWDWzQrdKtt;v>jtEU_+<qJ_oCb-l+2ba%odj1R(g7UJ)fw{TNFB<C~-HKc<?kZ zqDAqg&ndFpYR<7|>Rv)CUB=5@Pwxk?rzq;)9}M#t-L8Z#{noS#(C!HiWRa^Jn)6PE zrtaYpf*(ZikO({ze+bSKpYa^LUMEweH)RrUY$Gp_FF<Np?0dNZ#Q)Nt@;L0KE0Kfh zHuR&W<&EcF{3R=rpz2R{BE=HBRd%%o%>?RpCDf<&wsraesT~GhO+TLlJ8dDwft$Tv z2_vs*;%Os$*Fg8}CAZfX4f>lgYw`C6wuj>Tl@88LBf5PP5M(g>U9UCU1MgD`r0mtw zlwK$jYXkD;<|PNI8<qFqBP7O8<zp9HOAh%HGswuwNYrx3Zs`wsz41V(xh*KuNV3c5 zU%kaKk&}@qJG`Y^Fvtx#rqPZi=va|4Bp&CZ;ih9%`9ji(QZV9M`Rs7!(HNG&1m5z8 z*!@1|hJ?NVPU%3i2;yv{0?FA3x(?rBfNb}J;{eHYJ64Jn3G-o1GXZtXSV;|K>T%Rt z)KouiDS>plO*&q@fv4{zKN+Gjw>oL#Y5JWSl33w1wBH@d2vR5pR(=<8rG1S&)t<ME zcfs=(hsFo(ki(S*8IuqS2oAz)liVc)G7^7~yy$k$Mq-oQj?~Pi+>+g=LxGW82DPP| zu`)l$fcrQ|prude!^WM}2@A2`Jeu&?mRgVs&01GB7=cxB>QGvTIX}b5${HcxeCs4s zPq+})6ig$bl(}RKB14y<HV(FL^*3Ar2_?|?Ltj#^KQh6D_#}QaDp%FEE@qm<q4ZJc zTsP(@&nqJ>Z=aUm#h@b0^M-T?eV4QsdCmQqYAR%>757K3-A7lIuk4Fd2LT()m4}@d z=x+t?@Vp*1%Mmc-6LDhQ`3tsjOQL1O+QlCFAI8ZsvJ(yjiFIhNC>o(1@g51=r(8rz zGnq&3%0shxN5w|5Mwv#XMs;}-i)Cu)-bbnRTz4z1a;%!J;?wgI>Je%YhIQjbT14VS zLL;Y$MV`ePy_k{i$&FDPRNYrLd3Ka(k$IL$m^t^X=-JSRun&VDM>-yMeC>GD8QhW7 zX%nQNR<6!h$Pg<vkVTWFpP@KRki;{P)|I=L%QyUalzEG+UU(svMi!WTFGrg_^g*pN zwBtc1q_e0K7=%NHDHZy?SI&?aG6<3(|HQb;XvOs9kq46wQy>!wBb?Eiu`UWN$~uZ6 z>Qi=tYMAPg>UEBAPTKRV?CNaKY)E#voIz|_Y(}4UcNrWTHrOo^6#%b>dBPoG;XQcW zgMB@HLVZj<8ohdv$+4#0bKT#1;(N}!hggS+i;0aM_Y!lne}x4@tP`>Nu}x?l6;(7x zo`Dt0744PnRpj;9p0a5bC~Ot*NF?S^<-E?FFA~YiOkXLe(8zhV7Rjz3n?sT1E>~^v zMnXZ4OU^o6CvUc@KD)liy~h3H6%lSlV6{wzOk<a)LJ0E<i2h00x*nHypEid~k<LyS zf3bBYb&;pGhZ(MW=nTbT(iNYvFe9~Ys#7XSs=Z#|=l3?BZSwXlMISdRH{QD6x*ME^ zo)Z0}{7Flxj646(0k<Caj(3~~MyW};Xz)URr^@-;?B{CRkgCuxGO{5wWMd(sq32}h z6z{-bzVFFZN&N|h34zIz31Q`%oVJ>TJN4wV{exETXWS~o*O}J~)=m5G%ZAH?YRzgA z^z)j+8a_i8{Bxq<{_xbCmSFS8HgCqC8<v<+L-lNL=VfLBjmOL&@FH_cQ;*)W>eMFc zrOyjCt&8(s$+t`x9j!ANEzse}ZL($UwTpiF9=6$nPV>Q;X`yeIQ8=@m3-IQ?grXFV zx$2%bg9GE%$-1AO^ehZD_TJXLkHc8Xnj<=MIuTjEgf(uvFJ37Em)Ex6wCohr*1J@k z1I5T_Z9iFjB5gu%()GN)HA84jx?Q}UyCl69#~a3!!`Z~mMh!&cN8?5nLXAbo@;&vf zMO(s-#QT7|h20s59>^a!XlplbXV(r(u-EpQ-jq2FO{BE7idu{*+iElET@M;CZ6EnA z@qOU?Cx)-|+YIXrdJLBI8`EdIQoCAIl#1l0ftEd7Yl_ca$;8Si$m+__2Bm!{4`T~Y z46P0?3HBt~c%(&HOK|Y`9laMD9cu;`VLVxyYnbd>=gCz~w{6cnPfT`d%qK=UekHL4 zk#8;=0=ZAwDAnp!xB6(ee0W2v4o17iN=A#u#9^o=DFeiPt8hG+Iec#*sn@wzEX}VM zy7ALSW4_*U=YoIE`psO%UgVsI3+qAm9Jp@GZKFreU+<{FW@CFJZoO%ax~k!c61T1C zVu#D%QuXS`)svHNXWF|3w=}1oyXSr$Q~M?J*VW!?c9qJ_WnT{+2^%)o@zKTAZ_28G z7E6ZZ@<)-6USgHPoSIMXqH~OLW^#xyMDU$rz<t=gi`4UP4`u39-1g|&GODC}vBQHu zKacH=>K)PmYcNbWPgwI+@OfC0;5p*q)0PX3>Tqc3YF}@e?T%o)8GJ*1YH_;u4fJg^ zywMEPYEyhrcyXL{L3{dQ4fVi(Is2feiFqtH*JNgWh2#rU34C3Bx}ZT^_-1;da7<^a z%Zx(=S1~Wu>r(APDa&+z=w}){)%y0;=|+;Xj)w%sc;p0lihPW16MKt7c*FT~?ObNV zE$M=RVv3fCfv3ccq&<EHOR4FW(OKu^3;B2xpsYdK=ED5-#q-11YfmvxKdpsQ{pNM2 zz30u=_nkX&Q$tIjX8V2S9g_{NXkF?DT@UtZLv3sElO8(HgB!=*Ozqm757%d;L3h6Q zom1`WH5|C#Pj+8LW{h}`U>HM<eKArn#_)+~n%rXU%#Mx*SvFbFl%9Qx6OZ=Pyf0cW zwMHRo4X}TI<g?*5M5|QBqJJBAJh##Fm2{PKO$}R3VJvWL!!*TYziIx^;aFp|sB`9K zsne^}t>oxxL)_|)ECDAi`EC2V%Ackqx&^f?i{y<vspo0$&cu#xS0r083h-IPE5y#; zVPEl9CmfMq*R6b9kKZrdH~7TK#Lb1J_jD6Ql9Zs{dl=218{mYTfrI&PQ$F{`q}sRP zl~momYtv*%cS1<6^XTan*htl^NUYF;`Tp@(jYSe>j~A*W;{3wQZ*U=80evAWj&)eC zyblHN-eFV!Ly0HwTZ#AQOL=WoxXIr|-T&Gd`DcfuGStD^5%8<AQp(oqjkS#<fENH% zc7Vgojem8JfPWQ)0H78?7XSwEAb#`!z(4v1esvTe+6Gi@Z4upHe~#76-QfVRAYy|w zKv#qZ0^^6l`S|%Df;<9zAbtqQ#0YL81T%ueczKL@_{2nbKyY3js1e8*A^_nNf(jYI z1R=aeyogpFIKPnz6e6bgFU6>_5fTcs47wM=(FY%_Zezy4i=mr)459~?%*q%)AOv7S uInXN<ET|`-^)vw)X?+;O{eObx=!9sladm*3V1q$?5Fu<Pre{hr*#8H`w5gT= diff --git a/src/tox.ini b/src/tox.ini deleted file mode 100644 index 9a5bbff90..000000000 --- a/src/tox.ini +++ /dev/null @@ -1,21 +0,0 @@ -# Tox (http://tox.testrun.org/) is a tool for running tests -# in multiple virtualenvs. This configuration file will run the -# test suite on all supported python versions. To use it, "pip install tox" -# and then run "tox" from this directory. - -[tox] -skipsdist = True -envlist = py34, py35, py36, py37, pycodestyle, doc - -[testenv] -commands = pytest -deps = -r{toxinidir}/../requirements.txt - -[testenv:pycodestyle] -commands=pycodestyle -deps=pycodestyle - -[testenv:doc] -deps = - -r {toxinidir}/../requirements.txt -commands=sphinx-build -b html ../docs ../docs/_build -W From 77664eb50faf0ffeabc232b92a8879d4d9c19871 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 27 Feb 2021 11:24:58 +0100 Subject: [PATCH 434/898] small changes --- .../src/app/components/app-frame/app-frame.component.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 91177fc54..e360e7567 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -81,12 +81,11 @@ export class AppFrameComponent implements OnInit { this.closeMenu() this.openDocumentsService.closeDocument(d) - // TODO: is there a better way to do this? (taken from closeAll) - let route = this.activatedRoute + let route = this.activatedRoute.snapshot while (route.firstChild) { route = route.firstChild } - if (route.component == DocumentDetailComponent && (route.params as BehaviorSubject<Params>).getValue()['id'] == d.id) { + if (route.component == DocumentDetailComponent && route.params['id'] == d.id) { this.router.navigate([""]) } } @@ -95,8 +94,7 @@ export class AppFrameComponent implements OnInit { this.closeMenu() this.openDocumentsService.closeAll() - // TODO: is there a better way to do this? - let route = this.activatedRoute + let route = this.activatedRoute.snapshot while (route.firstChild) { route = route.firstChild } From 5e1f54743cfcf25d86eab4970b599485b260d10c Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 10:33:26 +0000 Subject: [PATCH 435/898] Apply translations in ro translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'ro' language. --- src/locale/ro/LC_MESSAGES/django.po | 683 ++++++++++++++++++++++++++++ 1 file changed, 683 insertions(+) create mode 100644 src/locale/ro/LC_MESSAGES/django.po diff --git a/src/locale/ro/LC_MESSAGES/django.po b/src/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 000000000..613d60949 --- /dev/null +++ b/src/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,683 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +# Translators: +# Horea Petrila <petrilahorea@gmail.com>, 2021 +# Cubic Lemon <lemonsarecubic@gmail.com>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-26 12:56+0100\n" +"PO-Revision-Date: 2021-02-16 18:37+0000\n" +"Last-Translator: Cubic Lemon <lemonsarecubic@gmail.com>, 2021\n" +"Language-Team: Romanian (https://www.transifex.com/paperless/teams/115905/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Documente" + +#: documents/models.py:32 +msgid "Any word" +msgstr "Orice cuvant" + +#: documents/models.py:33 +msgid "All words" +msgstr "Toate cuvintele" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "Potrivire exacta" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "Expresie regulata" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "Cuvant neclar" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "Automat" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "nume" + +#: documents/models.py:45 +msgid "match" +msgstr "potrivire" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "algoritm de potrivire" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "ignora majusculele" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "corespondent" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "corespondenti" + +#: documents/models.py:81 +msgid "color" +msgstr "culoare" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "este eticheta inbox" + +#: documents/models.py:89 +msgid "" +"Marks this tag as an inbox tag: All newly consumed documents will be tagged " +"with inbox tags." +msgstr "" +"Marcheaza aceasta eticheta ca eticheta inbox: Toate documentele nou " +"consumate primesc aceasta eticheta." + +#: documents/models.py:94 +msgid "tag" +msgstr "eticheta" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "etichete" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "tip de document" + +#: documents/models.py:102 +msgid "document types" +msgstr "tipuri de document" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "Necriptat" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Criptat cu GNU Privacy Guard" + +#: documents/models.py:124 +msgid "title" +msgstr "titlu" + +#: documents/models.py:137 +msgid "content" +msgstr "continut" + +#: documents/models.py:139 +msgid "" +"The raw, text-only data of the document. This field is primarily used for " +"searching." +msgstr "" +"Textul brut al documentului. Acest camp este folosit in principal pentru " +"cautare." + +#: documents/models.py:144 +msgid "mime type" +msgstr "tip mime" + +#: documents/models.py:155 +msgid "checksum" +msgstr "suma de control" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "Suma de control a documentului original." + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "suma de control a arhivei" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "Suma de control a documentului arhivat." + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "creat" + +#: documents/models.py:176 +msgid "modified" +msgstr "modificat" + +#: documents/models.py:180 +msgid "storage type" +msgstr "tip de stocare" + +#: documents/models.py:188 +msgid "added" +msgstr "adaugat" + +#: documents/models.py:192 +msgid "filename" +msgstr "nume fisier" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "Numele curent al fisierului stocat" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "nume fisier arhiva" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "Numele curent al arhivei stocate" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "numar serial in arhiva" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "Pozitia acestui document in arhiva fizica." + +#: documents/models.py:223 +msgid "document" +msgstr "document" + +#: documents/models.py:224 +msgid "documents" +msgstr "documente" + +#: documents/models.py:311 +msgid "debug" +msgstr "depanare" + +#: documents/models.py:312 +msgid "information" +msgstr "informatii" + +#: documents/models.py:313 +msgid "warning" +msgstr "avertizare" + +#: documents/models.py:314 +msgid "error" +msgstr "eroare" + +#: documents/models.py:315 +msgid "critical" +msgstr "critic" + +#: documents/models.py:319 +msgid "group" +msgstr "grup" + +#: documents/models.py:322 +msgid "message" +msgstr "mesaj" + +#: documents/models.py:325 +msgid "level" +msgstr "nivel" + +#: documents/models.py:332 +msgid "log" +msgstr "jurnal" + +#: documents/models.py:333 +msgid "logs" +msgstr "jurnale" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "vizualizare" + +#: documents/models.py:345 +msgid "saved views" +msgstr "vizualizari" + +#: documents/models.py:348 +msgid "user" +msgstr "utilizator" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "afiseaza pe tabloul de bord" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "afiseaza in bara laterala" + +#: documents/models.py:361 +msgid "sort field" +msgstr "sorteaza camp" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "sorteaza invers" + +#: documents/models.py:370 +msgid "title contains" +msgstr "titlul contine" + +#: documents/models.py:371 +msgid "content contains" +msgstr "continutul contine" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "ASN-ul este" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "corespondentul este" + +#: documents/models.py:374 +msgid "document type is" +msgstr "tipul documentului este" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "este in inbox" + +#: documents/models.py:376 +msgid "has tag" +msgstr "are eticheta" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "are orice eticheta" + +#: documents/models.py:378 +msgid "created before" +msgstr "creat inainte de" + +#: documents/models.py:379 +msgid "created after" +msgstr "creat dupa" + +#: documents/models.py:380 +msgid "created year is" +msgstr "anul crearii este" + +#: documents/models.py:381 +msgid "created month is" +msgstr "luna crearii este" + +#: documents/models.py:382 +msgid "created day is" +msgstr "ziua crearii este" + +#: documents/models.py:383 +msgid "added before" +msgstr "adaugat inainte de" + +#: documents/models.py:384 +msgid "added after" +msgstr "adaugat dupa" + +#: documents/models.py:385 +msgid "modified before" +msgstr "modificat inainte de" + +#: documents/models.py:386 +msgid "modified after" +msgstr "modificat dupa" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "nu are eticheta" + +#: documents/models.py:398 +msgid "rule type" +msgstr "tip de regula" + +#: documents/models.py:402 +msgid "value" +msgstr "valoare" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "regula de filtrare" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "reguli de filtrare" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "Expresie regulata invalida: %(error)s" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Culoare invalida." + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Tip de fisier %(type)s nesuportat " + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng se incarca..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Paperless-ng s-a deconectat" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "Ati fost deconectat cu succes. La revedere !" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Conectati-va din nou" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Conectare Paperless-ng" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Va rugam conectati-va." + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Numele si parola nu sunt corecte. Va rugam incercati din nou." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Nume" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Parola" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Conectare" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "Engleza (SUA)" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "Engleza (UK)" + +#: paperless/settings.py:299 +msgid "German" +msgstr "Germana" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "Olandeza" + +#: paperless/settings.py:301 +msgid "French" +msgstr "Franceza" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "Portugheza (Brazilia)" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italiana" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "Administrare Paperless-ng" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filtru" + +#: paperless_mail/admin.py:27 +msgid "" +"Paperless will only process mails that match ALL of the filters given below." +msgstr "" +"Paperless va procesa numai email-urile care se potrivesc cu TOATE filtrele " +"de mai jos." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Acțiuni" + +#: paperless_mail/admin.py:39 +msgid "" +"The action applied to the mail. This action is only performed when documents" +" were consumed from the mail. Mails without attachments will remain entirely" +" untouched." +msgstr "" +"Actiunea aplicata tuturol email-urilor. Aceasta este realizata doar cand " +"sunt consumate documente din email. Cele fara atasamente nu vor fi " +"procesate." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadate" + +#: paperless_mail/admin.py:48 +msgid "" +"Assign metadata to documents consumed from this rule automatically. If you " +"do not assign tags, types or correspondents here, paperless will still " +"process all matching rules that you have defined." +msgstr "" +"Atribuie metadate documentelor consumate prin aceasta regula in mod automat." +" Chiar daca nu sunt atribuite etichete, tipuri sau corespondenti, Paperless " +"va procesa toate regulile definite care se potrivesc." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Email Paperless" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "cont de email" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "conturi de email" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Fara criptare" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Foloseste SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Foloseste STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "server IMAP" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "port IMAP" + +#: paperless_mail/models.py:36 +msgid "" +"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " +"SSL connections." +msgstr "" +"De obicei este 143 pentru conexiuni necriptate si STARTTLS, sau 993 pentru " +"conexiuni SSL." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "securitate IMAP" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "nume" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "parola" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "regula email" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "reguli email" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Proceseaza doar atasamentele." + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Proceseaza toate fisierele, inclusiv atasamentele \"inline\"." + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Marcheaza ca citit, nu procesa email-uri citite" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Semnalizeaza, nu procesa email-uri semnalizate" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Muta in directorul specificat" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Sterge" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Foloseste subiectul ca titlu" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Foloseste numele atasamentului ca titlu" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Nu atribui un corespondent" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Foloseste adresa de email" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Foloseste numele (daca nu exista, foloseste adresa de email)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Foloseste corespondentul selectat mai jos" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "ordoneaza" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "cont" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "director" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filtreaza de la" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "filtreaza subiect" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "filtreaza corpul email-ului" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "filtreaza numele atasamentului" + +#: paperless_mail/models.py:140 +msgid "" +"Only consume documents which entirely match this filename if specified. " +"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" +"Consuma doar documentele care se potrivesc in intregime cu acest nume de " +"fisier, daca este specificat. Simbolul * tine locul oricarui sir de " +"caractere. Majusculele nu conteaza." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "varsta maxima" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "Specificata in zile." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "tipul atasamentului" + +#: paperless_mail/models.py:154 +msgid "" +"Inline attachments include embedded images, so it's best to combine this " +"option with a filename filter." +msgstr "" +"Atasamentele \"inline\" includ si imaginile incorporate, deci aceasta " +"optiune functioneaza cel mai bine combinata cu un filtru pentru numele " +"fisierului." + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "actiune" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "parametru al actiunii" + +#: paperless_mail/models.py:167 +msgid "" +"Additional parameter for the action selected above, i.e., the target folder " +"of the move to folder action." +msgstr "" +"Parametru aditional pentru actiunea definita mai sus (ex. directorul in care" +" sa se realizeze o mutare)" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "atribuie titlu din" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "atribuie aceasta eticheta" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "atribuie acest tip" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "atribuie acest corespondent" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "atribuie acest corespondent" From 29b49e528110eedc5dae78d14824b1294fbed348 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 11:02:26 +0000 Subject: [PATCH 436/898] Translate /src-ui/messages.xlf in ro translation completed for the source file '/src-ui/messages.xlf' on the 'ro' language. --- src-ui/src/locale/messages.ro.xlf | 2257 +++++++++++++++++++++++++++++ 1 file changed, 2257 insertions(+) create mode 100644 src-ui/src/locale/messages.ro.xlf diff --git a/src-ui/src/locale/messages.ro.xlf b/src-ui/src/locale/messages.ro.xlf new file mode 100644 index 000000000..b45e86699 --- /dev/null +++ b/src-ui/src/locale/messages.ro.xlf @@ -0,0 +1,2257 @@ +<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> + <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="ro"> + <body> + <trans-unit datatype="html" id="9103526311244275943"> + <source>Document added</source> + <target>Document adaugat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9204248378636247318"> + <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> + <target>Documentul <x equiv-text="status.filename" id="PH"/> a fost adaugat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1931214133925051574"> + <source>Open document</source> + <target>Deschide document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8582620835547864448"> + <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> + <target>Nu s-a putut adauga <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1710712016675379662"> + <source>New document detected</source> + <target>Document nou detectat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="587031278561344416"> + <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> + <target>Documentul <x equiv-text="status.filename" id="PH"/> este in procesare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4733307402565258070"> + <source>Documents</source> + <target>Documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2155249406916744630"> + <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> + <target>Vizualizarea "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" a fost salvata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6837554170707123455"> + <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> + <target>Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost creata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <source>Select</source> + <target>Selecteaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <source>Select none</source> + <target>Deselecteaza tot</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <source>Select page</source> + <target>Selecteaza pagina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <source>Select all</source> + <target>Selecteaza tot</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <source>Sort</source> + <target>Sorteaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <source>Views</source> + <target>Vizualizari</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <source>Save as...</source> + <target>Salveaza ca...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> + <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> + <target>Salveaza "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Am selectat<x id="INTERPOLATION"/> din 1 document} other {Am selectat <x id="INTERPOLATION"/> din <x id="INTERPOLATION_1"/> documente}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Un document} other {<x id="INTERPOLATION"/> documente}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <source>(filtered)</source> + <target>(filtrat)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <source>ASN</source> + <target>ASN</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <source>Correspondent</source> + <target>Corespondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <source>Title</source> + <target>Titlu</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <source>Document type</source> + <target>Tipul documentului</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <source>Created</source> + <target>Creat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <source>Added</source> + <target>Adaugat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9021887951960049161"> + <source>Confirm delete</source> + <target>Confirma stergerea</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5382975254277698192"> + <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> + <target>Sunteti sigur ca doriti sa stergeti documentul "<x equiv-text="this.document.title" id="PH"/>"?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6691075929777935948"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <target>Fisierele pentru acest document vor fi sterse permanent. Operatiunea este ireversibila.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="719892092227206532"> + <source>Delete document</source> + <target>Sterge document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1844801255494293730"> + <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> + <target>Eroare la stergerea documentului: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <source>Delete</source> + <target>Sterge</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <source>Download</source> + <target>Descarca</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <source>More like this</source> + <target>Similare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <source>Close</source> + <target>Inchide</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <source>Details</source> + <target>Detalii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <source>Content</source> + <target>Continut</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <source>Metadata</source> + <target>Metadate</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <source>Discard</source> + <target>Renunta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <source>Save</source> + <target>Salveaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <source>Page</source> + <target>Pagina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> + <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> + <target>din <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <source>Download original</source> + <target>Descarca originalul</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <source>Archive serial number</source> + <target>Numar de arhiva</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <source>Date created</source> + <target>Data crearii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <source>Date modified</source> + <target>Data ultimei modificari</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <source>Date added</source> + <target>Data adaugarii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <source>Media filename</source> + <target>Numele fisierului media</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <source>Original MD5 checksum</source> + <target>MD5 original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <source>Original file size</source> + <target>Marimea fisierului original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <source>Original mime type</source> + <target>Tipul fisierului original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <source>Archive MD5 checksum</source> + <target>MD5 arhiva</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <source>Archive file size</source> + <target>Marimea arhivei</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <source>Original document metadata</source> + <target>Metadatele documentului original</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <source>Archived document metadata</source> + <target>Metadatele documentului arhivat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <source>Save & next</source> + <target>Salveaza si continua</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8765497970646365998"> + <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> + <target>Salut, <x equiv-text="this.displayName" id="PH"/>, bine ai venit la Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7016571167317583872"> + <source>Welcome to Paperless-ng!</source> + <target>Bine ai venit la Paperless-ng!</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <source>Dashboard</source> + <target>Tablou de bord</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="93754014749412887"> + <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Sunteti sigur ca doriti sa stergeti eticheta "<x equiv-text="object.name" id="PH"/>"?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <source>Tags</source> + <target>Etichete</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <source>Create</source> + <target>Creeaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <source>Filter by:</source> + <target>Filtreaza dupa:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <source>Name</source> + <target>Nume</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <source>Color</source> + <target>Culoare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <source>Matching</source> + <target>Potrivire</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <source>Document count</source> + <target>Numar de documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <source>Actions</source> + <target>Acțiuni</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <source>Documents</source> + <target>Documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <source>Edit</source> + <target>Editează</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4990731724078522539"> + <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Sunteti sigur ca doriti sa stergeti tipul de document "<x equiv-text="object.name" id="PH"/>"?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <source>Document types</source> + <target>Tipuri de documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <source>Logs</source> + <target>Jurnale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5610279464668232148"> + <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> + <target>Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost stearsa.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5647210819299459618"> + <source>Settings saved successfully.</source> + <target>Setarile au fost salvate.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6839066544204061364"> + <source>Use system language</source> + <target>Foloseste limba sistemului</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7729897675462249787"> + <source>Use date format of display language</source> + <target>Foloseste formatul datei corespunzator limbii de afisare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8488620293789898901"> + <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Eroare la stocarea setarilor pe server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <source>Settings</source> + <target>Setari</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <source>General settings</source> + <target>Setari generale</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <source>Notifications</source> + <target>Notificari</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <source>Saved views</source> + <target>Vizualizari</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">133</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <source>Appearance</source> + <target>Afisare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <source>Display language</source> + <target>Limba de afisare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <source>You need to reload the page after applying a new language.</source> + <target>Trebuie sa reincarcati pagina dupa schimbarea limbii.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <source>Date display</source> + <target>Afisarea datei</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <source>Date format</source> + <target>Formatul datei</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> + <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Scurt: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> + <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Mediu: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> + <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> + <target>Lung: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <source>Items per page</source> + <target>Articole pe pagina</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <source>Document editor</source> + <target>Editor de documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <source>Use PDF viewer provided by the browser</source> + <target>Folositi browserul pentru a deschide PDF-uri</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <target>Aceasta optiune este mai rapida pentru PDF-uri mari, dar nu este compatibila cu toate browserele.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <source>Dark mode</source> + <target>Mod intunecat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <source>Use system settings</source> + <target>Folositi setarile sistemului</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <source>Enable dark mode</source> + <target>Activati modul intunecat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <source>Bulk editing</source> + <target>Editare in bloc</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <source>Show confirmation dialogs</source> + <target>Afisati dialoguri de confirmare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <source>Deleting documents will always ask for confirmation.</source> + <target>Stergerea documentelor necesita intotdeauna confirmare.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <source>Apply on close</source> + <target>Aplica la iesire</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <source>Document processing</source> + <target>Procesarea documentelor</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <source>Show notifications when new documents are detected</source> + <target>Afisati notificari cand sunt detectate documente noi</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <source>Show notifications when document processing completes successfully</source> + <target>Afisati notificari cand procesarea unui document este completa</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <source>Show notifications when document processing fails</source> + <target>Afisati notificari cand procesarea unui document esueaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <source>Suppress notifications on dashboard</source> + <target>Ascundeti notificarile pe tabloul de bord</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <target>Aceasta setare va opri mesajele despre procesarea documentelor pe tabloul de bord</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <source>Appears on</source> + <target>Apare pe</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">145</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <source>Show on dashboard</source> + <target>Afiseaza pe tabloul de bord</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">148</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <source>Show in sidebar</source> + <target>Afiseaza in bara laterala</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">152</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <source>No saved views defined.</source> + <target>Nu sunt definite vizualizari.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <source>404 Not Found</source> + <target>404 Pagina nu a fost gasita</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7427874343955308724"> + <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> + <target>Sunteti sigur ca doriti sa stergeti corespondentul "<x equiv-text="object.name" id="PH"/>"?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <source>Correspondents</source> + <target>Corespondenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <source>Last correspondence</source> + <target>Ultima corespondenta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1234709746630139322"> + <source>Confirmation</source> + <target>Confirmare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9178182467454450952"> + <source>Confirm</source> + <target>Confirma</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <source>Cancel</source> + <target>Anuleaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6457471243969293847"> + <source>Create new correspondent</source> + <target>Creeaza un nou corespondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2059822531169388684"> + <source>Edit correspondent</source> + <target>Modifica un corespondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <source>Matching algorithm</source> + <target>Algoritm de potrivire</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <source>Matching pattern</source> + <target>Model de potrivire</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <source>Case insensitive</source> + <target>Ignora majusculele</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9153094873118985366"> + <source>Create new tag</source> + <target>Creeaza o noua eticheta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5872175735754226507"> + <source>Edit tag</source> + <target>Modifica o eticheta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <source>Inbox tag</source> + <target>Eticheta inbox</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <target>Etichetele inbox sunt atribuite automat documentelor consumate.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6672809941092516947"> + <source>Create new document type</source> + <target>Creeaza un nou tip de document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="36335016091244220"> + <source>Edit document type</source> + <target>Modifica un tip de document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <source>Search results</source> + <target>Rezultatele cautarii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> + <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> + <target>Interogare invalida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> + <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> + <target>Documente similare cu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/> </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> + <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> + <target>Interogare: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> + <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> + <target>Ati vrut sa scrieti "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <target>{VAR_PLURAL, plural, =0 {Niciun rezultat} =1 {Un rezultat} other {<x id="INTERPOLATION"/> rezultate}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <source>Paperless-ng</source> + <target>Paperless-ng</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note from="description" priority="1">app title</note> + </trans-unit> + <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <source>Search documents</source> + <target>Cauta documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <source>Logout</source> + <target>Deconectare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <source>Manage</source> + <target>Administreaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <source>Admin</source> + <target>Administrator</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <source>Info</source> + <target>Informatii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">155</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <source>Documentation</source> + <target>Documentatie</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">162</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <source>GitHub</source> + <target>GitHub</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">170</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <source>Suggest an idea</source> + <target>Sugestii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">176</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> + <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> + <target>Autentificat ca <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <source>Open documents</source> + <target>Deschide documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <source>Close all</source> + <target>Inchide tot</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">101</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5195932016807797291"> + <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> + <target>Corespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8170755470576301659"> + <source>Without correspondent</source> + <target>Fara corespondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">31</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8705701325879965907"> + <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> + <target>Tip: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4362173610367509215"> + <source>Without document type</source> + <target>Fara tip</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8180755793012580465"> + <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> + <target>Eticheta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">42</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6494566478302448576"> + <source>Without any tag</source> + <target>Fara etichete</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">46</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6523384805359286307"> + <source>Title: <x equiv-text="rule.value" id="PH"/></source> + <target>Titlu: <x equiv-text="rule.value" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <source>Filter tags</source> + <target>Filtreaza etichete</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <source>Filter correspondents</source> + <target>Filtreaza corespondenti</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <source>Filter document types</source> + <target>Filtreaza tipuri de documente</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <source>Reset filters</source> + <target>Resetati filtrele</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7593728289020204896"> + <source>Not assigned</source> + <target>Neasignate</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + </trans-unit> + <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <source>Apply</source> + <target>Aplica</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4873149362496451858"> + <source>Last 7 days</source> + <target>Ultimele 7 zile</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4463380307954693363"> + <source>Last month</source> + <target>Ultima luna</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8697368973702409683"> + <source>Last 3 months</source> + <target>Ultimele 3 luni</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3566342898065860218"> + <source>Last year</source> + <target>Ultimul an</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <source>After</source> + <target>Dupa</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <source>Before</source> + <target>Inainte</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <source>Clear</source> + <target>Goleste</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <source>View</source> + <target>Vizualizare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> + <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> + <target>Creat: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <source>Filter by correspondent</source> + <target>Filtreaza dupa corespondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <source>Filter by tag</source> + <target>Filtreaza dupa eticheta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <source>Score:</source> + <target>Scor:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <source>View in browser</source> + <target>Vizualizeaza in browser</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7985804062689412812"> + <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Eroare la executarea operatiunii in bloc: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7894972847287473517"> + <source>"<x equiv-text="items[0].name" id="PH"/>"</source> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8639884465898458690"> + <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> + <target>"<x equiv-text="items[0].name" id="PH"/>" si "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + </trans-unit> + <trans-unit datatype="html" id="760986369763309193"> + <source>, </source> + <target>, </target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + </trans-unit> + <trans-unit datatype="html" id="1822679894391095557"> + <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> + <target><x equiv-text="list" id="PH"/> si "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + </trans-unit> + <trans-unit datatype="html" id="4137232459980262849"> + <source>Confirm tags assignment</source> + <target>Confirmati atribuirea etichetelor</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6619516195038467207"> + <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Va fi adaugata eticheta "<x equiv-text="tag.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1894412783609570695"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7181166515756808573"> + <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Va fi eliminata eticheta "<x equiv-text="tag.name" id="PH"/>" din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3819792277998068944"> + <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2739066218579571288"> + <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> + <target>Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> si vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> pentru <x equiv-text="this.list.selected.size" id="PH_2"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2996713129519325161"> + <source>Confirm correspondent assignment</source> + <target>Confirmati atribuirea corespondentului</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6900893559485781849"> + <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Va fi adaugat corespondentul "<x equiv-text="correspondent.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1257522660364398440"> + <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Va fi eliminat corespondentul din <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5393409374423140648"> + <source>Confirm document type assignment</source> + <target>Confirmati atribuirea tipului de document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="332180123895325027"> + <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> + <target>Va fi atribuit tipul "<x equiv-text="documentType.name" id="PH"/>" pentru <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2236642492594872779"> + <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target>Va fi eliminat tipul pentru <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="749430623564850405"> + <source>Delete confirm</source> + <target>Confirmati stergerea</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4303174930844518780"> + <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> + <target><x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e) vor fi sterse permanent.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5641451190833696892"> + <source>This operation cannot be undone.</source> + <target>Aceasta operatiune este ireversibila.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6734339521247847366"> + <source>Delete document(s)</source> + <target>Sterge document(e)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <source>Select:</source> + <target>Selecteaza:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <source>All</source> + <target>Tot</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <source>Edit:</source> + <target>Editeaza:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <source>Download originals</source> + <target>Descarca originalele</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <source>Suggestions:</source> + <target>Sugestii:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <source>Save current view</source> + <target>Salveaza vizualizarea curenta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <source>Show all</source> + <target>Arata tot</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <source>Statistics</source> + <target>Statistici</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> + <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> + <target>Total documente: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> + <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> + <target>Documente in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6443586946875325554"> + <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> + <target>In procesare: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9182918211699394982"> + <source>Failed: <x equiv-text="countFailed" id="PH"/></source> + <target>Esuate: <x equiv-text="countFailed" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="534116346205124059"> + <source>Added: <x equiv-text="countSuccess" id="PH"/></source> + <target>Adaugate: <x equiv-text="countSuccess" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3852289441366561594"> + <source>Connecting...</source> + <target>Conectare...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1245343823699368872"> + <source>Uploading...</source> + <target>Incarcare...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7446520539098045935"> + <source>Upload complete, waiting...</source> + <target>Incarcare completa, in asteptare...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1405142710727603568"> + <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> + <target>Eroare HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <source>Upload new documents</source> + <target>Incarca documente noi</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <source>Drop documents here or</source> + <target>Trageti documentele aici sau</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <source>Browse files</source> + <target>Rasfoiti fisiere</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <source>Dismiss completed</source> + <target>Inlatura operatiunile finalizate</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + </trans-unit> + <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <target>{VAR_PLURAL, plural, =1 {Inca un document} other {Inca <x id="INTERPOLATION"/> documente}}</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + </trans-unit> + <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <source>Open document</source> + <target>Deschide document</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <source>First steps</source> + <target>Primii pasi</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <source>Paperless is running! :)</source> + <target>Paperless ruleaza! :)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <target>Puteti incepe sa incarcati fisiere tragandu-le in casuta din dreapta sau in directorul configurat de consum, si vor incepe sa apara in lista de documente. Dupa ce ati adaugat metadate documentelor, folositi mecanismele de filtrare pentru a crea vizualizari personalizate (cum ar fi "Adaugate recent", "Etichetate URGENT"), ce vor aparea in locul acestui mesaj.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <source>Paperless offers some more features that try to make your life easier:</source> + <target>Paperless mai ofera urmatoarele functii pentru a va face viata mai usoara:</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <target>Dupa ce aveti cateva documente si le adaugati metadate, Paperless poate atribui acele metadate in mod automat pentru documente noi.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <target>Puteti configura Paperless sa va citeasca email-urile si sa adauge documentele atasate.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <target>Consultati documentatia pentru a afla cum sa folositi aceste functii. Sectiunea de baza contine informatii despre cum sa folositi Paperless in general.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="218403386307979629"> + <source>Metadata</source> + <target>Metadate</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3797570084942068182"> + <source>Select</source> + <target>Selecteaza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7103181924469214926"> + <source>Please select an object</source> + <target>Selectati un obiect</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <source>Invalid date.</source> + <target>Data invalida.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2807800733729323332"> + <source>Yes</source> + <target>Da</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3542042671420335679"> + <source>No</source> + <target>Nu</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7536524521722799066"> + <source>(no title)</source> + <target>(fara titlu)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1206520795340730278"> + <source>English (US)</source> + <target>Engleza (SUA)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">88</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="6987083569809053351"> + <source>English (GB)</source> + <target>Engleza (UK)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">89</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1858110241312746425"> + <source>German</source> + <target>Germana</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3071065188816255493"> + <source>Dutch</source> + <target>Olandeza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7633754075223722162"> + <source>French</source> + <target>Franceza</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9184513005098760425"> + <source>Portuguese (Brazil)</source> + <target>Portugheza (Brazilia)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italiana</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4912706592792948707"> + <source>ISO 8601</source> + <target>ISO 8601</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2119857572761283468"> + <source>Document already exists.</source> + <target>Documentul exista deja.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="148389968432135849"> + <source>File not found.</source> + <target>Fisierul nu a fost gasit.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1520671543092565667"> + <source>Pre-consume script does not exist.</source> + <target>Scriptul pre-consum nu exista.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="7742915911032564889"> + <source>Error while executing pre-consume script.</source> + <target>Eroare la executia scriptului pre-consum.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="8995193730018060346"> + <source>Post-consume script does not exist.</source> + <target>Scriptul post-consum nu exista.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="256773668518189604"> + <source>Error while executing post-consume script.</source> + <target>Eroare la executia scriptului post-consum.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + </trans-unit> + <trans-unit datatype="html" id="6252258095055634191"> + <source>Received new file.</source> + <target>Fisier nou primit.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7337565919209746135"> + <source>File type not supported.</source> + <target>Tip de fisier nesuportat.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5002399167376099234"> + <source>Processing document...</source> + <target>Se proceseaza documentul...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1085975194762600381"> + <source>Generating thumbnail...</source> + <target>Se genereaza miniatura...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3280851677698431426"> + <source>Retrieving date from document...</source> + <target>Se extrage data din document...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7162102384876037296"> + <source>Saving document...</source> + <target>Se salveaza documentul...</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4550450765009165976"> + <source>Finished.</source> + <target>Terminat.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1519954996184640001"> + <source>Error</source> + <target>Eroare</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5037437391296624618"> + <source>Information</source> + <target>Informatii</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517688192215738656"> + <source>ASN</source> + <target>ASN</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2691296884221415710"> + <source>Correspondent</source> + <target>Corespondent</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titlu</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5066119607229701477"> + <source>Document type</source> + <target>Tipul documentului</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4207916966377787111"> + <source>Created</source> + <target>Creat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="231679111972850796"> + <source>Added</source> + <target>Adaugat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3553216189604488439"> + <source>Modified</source> + <target>Modificat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="4561076822163447092"> + <source>Create new item</source> + <target>Creeaza articol nou</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5324147361912094446"> + <source>Edit item</source> + <target>Modifica articol</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1699589597032579396"> + <source>Could not save element: <x equiv-text="error" id="PH"/></source> + <target>Nu s-a putut salva elementul: <x equiv-text="error" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="810888510148304696"> + <source>Automatic</source> + <target>Automat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5044611416737085530"> + <source>Do you really want to delete this element?</source> + <target>Sunteti sigur ca doriti sa stergeti acest element?</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8371896857609524947"> + <source>Associated documents will not be deleted.</source> + <target>Documentele asociate nu vor fi sterse.</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7022070615528435141"> + <source>Delete</source> + <target>Sterge</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5467489005440577210"> + <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> + <target>Eroare la stergerea elementului: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5851669019930456395"> + <source>Any word</source> + <target>Oricare cuvant</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7517655726614958140"> + <source>Any: Document contains any of these words (space separated)</source> + <target>Oricare: Documentul contine oricare dintre aceste cuvinte (separate prin spatiu)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="700315718208181326"> + <source>All words</source> + <target>Toate cuvintele</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="111914402588955480"> + <source>All: Document contains all of these words (space separated)</source> + <target>Toate: Documentul contine toate aceste cuvinte (separate prin spatiu)</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="9180173992399180575"> + <source>Exact match</source> + <target>Potrivire exacta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7109184332944610787"> + <source>Exact: Document contains this string</source> + <target>Exact: Documentul contine acest sir de caractere</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1338733395833138319"> + <source>Regular expression</source> + <target>Expresie regulata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="7548151332424148033"> + <source>Regular expression: Document matches this regular expression</source> + <target>Expresie regulata: Documentul se potriveste cu aceasta expresie regulata</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="1856513373880048959"> + <source>Fuzzy word</source> + <target>Cuvant neclar</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8419167206585286450"> + <source>Fuzzy: Document contains a word similar to this word</source> + <target>Neclar: Documentul contine un cuvant similar cu acesta</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2167862279705099846"> + <source>Auto: Learn matching automatically</source> + <target>Auto: Invata potrivirile automat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + </trans-unit> + </body> + </file> +</xliff> \ No newline at end of file From d819334662904256b364d4829dd936ea8fb221c1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 28 Feb 2021 12:40:25 +0100 Subject: [PATCH 437/898] add Romanian locale configuration --- src-ui/angular.json | 3 ++- src-ui/src/app/app.module.ts | 3 +++ src-ui/src/app/services/settings.service.ts | 3 ++- src/paperless/settings.py | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 5a54b3494..9f53a8fb1 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -21,7 +21,8 @@ "fr": "src/locale/messages.fr.xlf", "en-GB": "src/locale/messages.en_GB.xlf", "pt-BR": "src/locale/messages.pt_BR.xlf", - "it": "src/locale/messages.it.xlf" + "it": "src/locale/messages.it.xlf", + "ro": "src/locale/messages.ro.xlf" } }, "architect": { diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 01c17b284..be7ea2d0b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -72,6 +72,8 @@ import localeDe from '@angular/common/locales/de'; import localePt from '@angular/common/locales/pt'; import localeIt from '@angular/common/locales/it'; import localeEnGb from '@angular/common/locales/en-GB'; +import localeRo from '@angular/common/locales/ro'; + registerLocaleData(localeFr) registerLocaleData(localeNl) @@ -79,6 +81,7 @@ registerLocaleData(localeDe) registerLocaleData(localePt, "pt-BR") registerLocaleData(localeIt) registerLocaleData(localeEnGb) +registerLocaleData(localeRo) @NgModule({ declarations: [ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 1258c67ac..8810cd653 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -93,7 +93,8 @@ export class SettingsService { {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}, - {code: "it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"} + {code: "it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"}, + {code: "ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"} ] } diff --git a/src/paperless/settings.py b/src/paperless/settings.py index d16246c13..8cc12c1ff 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -300,7 +300,8 @@ LANGUAGES = [ ("nl-nl", _("Dutch")), ("fr", _("French")), ("pt-br", _("Portuguese (Brazil)")), - ("it", _("Italian")) + ("it", _("Italian")), + ("ro", _("Romanian")) ] LOCALE_PATHS = [ From 9f56feb84fa7f37d1484e58b8ea91962180443ba Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 28 Feb 2021 12:42:46 +0100 Subject: [PATCH 438/898] update messages and typo fix --- src-ui/messages.xlf | 86 +++++++++++-------- .../manage/settings/settings.component.html | 2 +- src/locale/en_US/LC_MESSAGES/django.po | 6 +- 3 files changed, 56 insertions(+), 38 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 6ca0a56ec..8f2b8b786 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -517,35 +517,35 @@ <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> @@ -566,14 +566,14 @@ <source>Notifications</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> @@ -681,102 +681,109 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> @@ -973,42 +980,42 @@ <source>Manage</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> @@ -1029,7 +1036,7 @@ <source>Close all</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> @@ -1630,56 +1637,63 @@ <source>English (US)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 5467f6ea2..231c4e82f 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -96,7 +96,7 @@ <div class="col"> <app-input-check i18n-title title="Use system settings" formControlName="darkModeUseSystem"></app-input-check> <app-input-check [hidden]="settingsForm.value.darkModeUseSystem" i18n-title title="Enable dark mode" formControlName="darkModeEnabled"></app-input-check> - <app-input-check i18n-title title="Invert Thumbnails in dark mode" formControlName="darkModeInvertThumbs"></app-input-check> + <app-input-check i18n-title title="Invert thumbnails in dark mode" formControlName="darkModeInvertThumbs"></app-input-check> </div> </div> diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 4a3dde410..7aaa6ddd1 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-26 12:56+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+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" @@ -428,6 +428,10 @@ msgstr "" msgid "Italian" msgstr "" +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From 81b787635e572dcfd67246b16dd8c53c506fe4e7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 28 Feb 2021 13:01:26 +0100 Subject: [PATCH 439/898] update dependencies --- Pipfile | 6 +- Pipfile.lock | 123 +++++++------------ requirements.txt | 19 ++- src/paperless_tesseract/tests/test_parser.py | 4 +- 4 files changed, 58 insertions(+), 94 deletions(-) diff --git a/Pipfile b/Pipfile index 29a91ece3..4d9836e68 100644 --- a/Pipfile +++ b/Pipfile @@ -9,12 +9,12 @@ verify_ssl = true name = "piwheels" [packages] -dateparser = "~=0.7.6" +dateparser = "~=1.0.0" django = "~=3.1.3" django-cors-headers = "*" django-extensions = "*" django-filter = "~=2.4.0" -django-q = "~=1.3.4" +django-q = "==1.3.4" djangorestframework = "~=3.12.2" filelock = "*" fuzzywuzzy = {extras = ["speedup"], version = "*"} @@ -53,7 +53,7 @@ concurrent-log-handler = "*" # uvloop 0.15+ incompatible with python 3.6 uvloop = "~=0.14.0" # TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/) -cryptography = "~=3.3.2" +cryptography = "~=3.4" "pdfminer.six" = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index eefaeeecd..98d8655eb 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "71959eb287fc97969263be5e3a1b1f4f369b7a5ace85bd1947a25b9b92e17e8a" + "sha256": "49f8a0718a7982bc4ca7e1315c17849523b0d29c38f13cff88f8f883e0e9943a" }, "pipfile-spec": 6, "requires": {}, @@ -28,11 +28,11 @@ }, "arrow": { "hashes": [ - "sha256:e098abbd9af3665aea81bdd6c869e93af4feb078e98468dd351c383af187aac5", - "sha256:ff08d10cda1d36c68657d6ad20d74fbea493d980f8b2d45344e00d6ed2bf6ed4" + "sha256:7909d9fd30d32fa8fd173fdeb3f7125aaf6dedd1a837276fe1d8cea2c0e86d76", + "sha256:b1e106a0ab754e540f4aeb08747900830b688adef02d81240e65afc0e781a870" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.17.0" + "markers": "python_version >= '3.6'", + "version": "==1.0.1" }, "asgiref": { "hashes": [ @@ -60,11 +60,11 @@ }, "autobahn": { "hashes": [ - "sha256:41a3a3f89cde48643baf4e105d9491c566295f9abee951379e59121784044b8b", - "sha256:7e6b1bf95196b733978bab2d54a7ab8899c16ce11be369dc58422c07b7eea726" + "sha256:884f79c50fdc55ade2c315946a9caa145e8b10075eee9d2c2594ea5e8f5226aa", + "sha256:bf7a9d302a34d0f719d43c57f65ca1f2f5c982dd6ea0c11e1e190ef6f43710fe" ], - "markers": "python_version >= '3.6'", - "version": "==21.2.1" + "markers": "python_version >= '3.7'", + "version": "==21.2.2" }, "automat": { "hashes": [ @@ -76,10 +76,10 @@ }, "blessed": { "hashes": [ - "sha256:0a74a8d3f0366db600d061273df77d44f0db07daade7bb7a4d49c8bc22ed9f74", - "sha256:580429e7e0c6f6a42ea81b0ae5a4993b6205c6ccbb635d034b4277af8175753e" + "sha256:1312879f971330a1b7f2c6341f2ae7e2cbac244bfc9d0ecfbbecd4b0293bc755", + "sha256:5b5e2f0563d5a668c282f3f5946f7b1abb70c85829461900e607e74d7725106e" ], - "version": "==1.17.12" + "version": "==1.18.0" }, "certifi": { "hashes": [ @@ -190,24 +190,22 @@ }, "cryptography": { "hashes": [ - "sha256:0d7b69674b738068fa6ffade5c962ecd14969690585aaca0a1b1fc9058938a72", - "sha256:1bd0ccb0a1ed775cd7e2144fe46df9dc03eefd722bbcf587b3e0616ea4a81eff", - "sha256:3c284fc1e504e88e51c428db9c9274f2da9f73fdf5d7e13a36b8ecb039af6e6c", - "sha256:49570438e60f19243e7e0d504527dd5fe9b4b967b5a1ff21cc12b57602dd85d3", - "sha256:541dd758ad49b45920dda3b5b48c968f8b2533d8981bcdb43002798d8f7a89ed", - "sha256:5a60d3780149e13b7a6ff7ad6526b38846354d11a15e21068e57073e29e19bed", - "sha256:7951a966613c4211b6612b0352f5bf29989955ee592c4a885d8c7d0f830d0433", - "sha256:922f9602d67c15ade470c11d616f2b2364950602e370c76f0c94c94ae672742e", - "sha256:a0f0b96c572fc9f25c3f4ddbf4688b9b38c69836713fb255f4a2715d93cbaf44", - "sha256:a777c096a49d80f9d2979695b835b0f9c9edab73b59e4ceb51f19724dda887ed", - "sha256:a9a4ac9648d39ce71c2f63fe7dc6db144b9fa567ddfc48b9fde1b54483d26042", - "sha256:aa4969f24d536ae2268c902b2c3d62ab464b5a66bcb247630d208a79a8098e9b", - "sha256:c7390f9b2119b2b43160abb34f63277a638504ef8df99f11cb52c1fda66a2e6f", - "sha256:ddd06e71c449a4fe10d0c60846280ee35d69ce49e3e413ce46d5f129e1468083", - "sha256:e18e6ab84dfb0ab997faf8cca25a86ff15dfea4027b986322026cc99e0a892da" + "sha256:066bc53f052dfeda2f2d7c195cf16fb3e5ff13e1b6b7415b468514b40b381a5b", + "sha256:0923ba600d00718d63a3976f23cab19aef10c1765038945628cd9be047ad0336", + "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87", + "sha256:4169a27b818de4a1860720108b55a2801f32b6ae79e7f99c00d79f2a2822eeb7", + "sha256:57ad77d32917bc55299b16d3b996ffa42a1c73c6cfa829b14043c561288d2799", + "sha256:5ecf2bcb34d17415e89b546dbb44e73080f747e504273e4d4987630493cded1b", + "sha256:600cf9bfe75e96d965509a4c0b2b183f74a4fa6f5331dcb40fb7b77b7c2484df", + "sha256:66b57a9ca4b3221d51b237094b0303843b914b7d5afd4349970bb26518e350b0", + "sha256:926ae3dfd160050158b9ca25d419fb7ee658974564b01aa10c059a75dffab7e8", + "sha256:93cfe5b7ff006de13e1e89830810ecbd014791b042cbe5eec253be11ac2b28f3", + "sha256:9e98b452132963678e3ac6c73f7010fe53adf72209a32854d55690acac3f6724", + "sha256:df186fcbf86dc1ce56305becb8434e4b6b7504bc724b71ad7a3239e0c9d14ef2", + "sha256:fec7fb46b10da10d9e1d078d1ff8ed9e05ae14f431fdbd11145edd0550b9a964" ], "index": "pypi", - "version": "==3.3.2" + "version": "==3.4.6" }, "daphne": { "hashes": [ @@ -219,11 +217,11 @@ }, "dateparser": { "hashes": [ - "sha256:7552c994f893b5cb8fcf103b4cd2ff7f57aab9bfd2619fdf0cf571c0740fd90b", - "sha256:e875efd8c57c85c2d02b238239878db59ff1971f5a823457fcc69e493bf6ebfa" + "sha256:159cc4e01a593706a15cd4e269a0b3345edf3aef8bf9278a57dac8adf5bf1e4a", + "sha256:17202df32c7a36e773136ff353aa3767e987f8b3e27374c39fd21a30a803d6f8" ], "index": "pypi", - "version": "==0.7.6" + "version": "==1.0.0" }, "django": { "hashes": [ @@ -415,11 +413,11 @@ }, "imap-tools": { "hashes": [ - "sha256:0eaa9b990fae336601dd44f353fac2d35ea25ca3b1b682a83700511635fc30ae", - "sha256:1c809e286d439e41fbe796c522ad4e565fd47a4260253343fa1b1045b6bfe8b1" + "sha256:44641716f0c5c07df78c5713405675fac50220d4f8e2906c9ed4aabd9c356fa8", + "sha256:bab9a6edf848a58bdd3959ba55e0eb75039ff188a3779371d0b8db674a4945e8" ], "index": "pypi", - "version": "==0.37.0" + "version": "==0.38.1" }, "img2pdf": { "hashes": [ @@ -591,11 +589,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:0f624456a50be0b0bc8c0b59704d159f637616c093a1cabe8bb383706561bcf7", - "sha256:b829ad640a6160423162012e094ee2f7cd074ec99efadd7f7486954ec9182985" + "sha256:2fca4046e3a33e5902dd89c3003a3f31c7d584dc43f14c7c97f57fce20d2e469", + "sha256:5c386fcf2c0f2635533c2bad0edcd2d455f667a134d180dc61cbb3d4d5f0c8e2" ], "index": "pypi", - "version": "==11.6.2" + "version": "==11.7.0" }, "pathvalidate": { "hashes": [ @@ -784,14 +782,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.20" }, - "pyhamcrest": { - "hashes": [ - "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316", - "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29" - ], - "markers": "python_version >= '3.5'", - "version": "==2.0.2" - }, "pyopenssl": { "hashes": [ "sha256:4c231c759543ba02560fcd2480c48dcec4dae34c9da7d3747c508227e0624b51", @@ -1097,45 +1087,22 @@ }, "tqdm": { "hashes": [ - "sha256:65185676e9fdf20d154cffd1c5de8e39ef9696ff7e59fe0156b1b08e468736af", - "sha256:70657337ec104eb4f3fb229285358f23f045433f6aea26846cdd55f0fd68945c" + "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089", + "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba" ], "index": "pypi", - "version": "==4.57.0" + "version": "==4.58.0" }, "twisted": { "extras": [ "tls" ], "hashes": [ - "sha256:0150dae5adc962d15e00054cc6926f1e64763fb8dd26e1632593ac06e592104b", - "sha256:040eb6641125d2a9a09cf198ec7b83dd8858c6f51f6770325ed9959c00f5098f", - "sha256:147780b8caf21ba2aef3688628eaf13d7e7fe02a86747cd54bfaf2140538f042", - "sha256:158ddb80719a4813d292293ac44ba41d8b56555ed009d90994a278237ee63d2c", - "sha256:15e52271f08f62e2230ff093e0278aa01c9dac057c4557cadadd2429eed86a3e", - "sha256:2182000d6ffc05d269e6c03bfcec8b57e20259ca1086180edaedec3f1e689292", - "sha256:25ffcf37944bdad4a99981bc74006d735a678d2b5c193781254fbbb6d69e3b22", - "sha256:3281d9ce889f7b21bdb73658e887141aa45a102baf3b2320eafcfba954fcefec", - "sha256:356e8d8dd3590e790e3dba4db139eb8a17aca64b46629c622e1b1597a4a92478", - "sha256:70952c56e4965b9f53b180daecf20a9595cf22b8d0935cd3bd664c90273c3ab2", - "sha256:7408c6635ee1b96587289283ebe90ee15dbf9614b05857b446055116bc822d29", - "sha256:7c547fd0215db9da8a1bc23182b309e84a232364cc26d829e9ee196ce840b114", - "sha256:894f6f3cfa57a15ea0d0714e4283913a5f2511dbd18653dd148eba53b3919797", - "sha256:94ac3d55a58c90e2075c5fe1853f2aa3892b73e3bf56395f743aefde8605eeaa", - "sha256:a58e61a2a01e5bcbe3b575c0099a2bcb8d70a75b1a087338e0c48dd6e01a5f15", - "sha256:c09c47ff9750a8e3aa60ad169c4b95006d455a29b80ad0901f031a103b2991cd", - "sha256:ca3a0b8c9110800e576d89b5337373e52018b41069bc879f12fa42b7eb2d0274", - "sha256:cd1dc5c85b58494138a3917752b54bb1daa0045d234b7c132c37a61d5483ebad", - "sha256:cdbc4c7f0cd7a2218b575844e970f05a1be1861c607b0e048c9bceca0c4d42f7", - "sha256:d267125cc0f1e8a0eed6319ba4ac7477da9b78a535601c49ecd20c875576433a", - "sha256:d72c55b5d56e176563b91d11952d13b01af8725c623e498db5507b6614fc1e10", - "sha256:d95803193561a243cb0401b0567c6b7987d3f2a67046770e1dccd1c9e49a9780", - "sha256:e92703bed0cc21d6cb5c61d66922b3b1564015ca8a51325bd164a5e33798d504", - "sha256:f058bd0168271de4dcdc39845b52dd0a4a2fecf5f1246335f13f5e96eaebb467", - "sha256:f3c19e5bd42bbe4bf345704ad7c326c74d3fd7a1b3844987853bef180be638d4" + "sha256:77544a8945cf69b98d2946689bbe0c75de7d145cdf11f391dd487eae8fc95a12", + "sha256:aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==20.3.0" + "markers": "python_full_version >= '3.5.4'", + "version": "==21.2.0" }, "txaio": { "hashes": [ @@ -1490,11 +1457,11 @@ }, "faker": { "hashes": [ - "sha256:31a58ec5a8f4672f24da3b5ddea02c82a712de1de3179b432948e5c34d787aca", - "sha256:aadfe0efe11ecbbbc5b3b0b0fab050c2acbd2d8e5201769546d43d236bfff663" + "sha256:90b69e9e05d622edb2fa5ebfda7bef41c88675cace85e72689fde5b8723d00a3", + "sha256:da395fe545f40d4366b82b1a02448847a4586bd2b28af393b3edbd1e45d1e0fc" ], "markers": "python_version >= '3.6'", - "version": "==6.4.1" + "version": "==6.5.0" }, "filelock": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 2df1b29ae..947a30350 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,13 +8,13 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 -arrow==0.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +arrow==1.0.1; python_version >= '3.6' asgiref==3.3.1; python_version >= '3.5' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -autobahn==21.2.1; python_version >= '3.6' +autobahn==21.2.2; python_version >= '3.7' automat==20.2.0 -blessed==1.17.12 +blessed==1.18.0 certifi==2020.12.5 cffi==1.14.5 channels-redis==3.2.0 @@ -24,9 +24,9 @@ click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.19 constantly==15.1.0 -cryptography==3.3.2 +cryptography==3.4.6 daphne==3.0.1; python_version >= '3.6' -dateparser==0.7.6 +dateparser==1.0.0 django-cors-headers==3.7.0 django-extensions==3.1.1 django-filter==2.4.0 @@ -43,7 +43,7 @@ httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.37.0 +imap-tools==0.38.1 img2pdf==0.4.0 incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' @@ -53,7 +53,7 @@ langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.6.2 +ocrmypdf==11.7.0 pathvalidate==2.3.2 pdfminer.six==20201018 pikepdf==2.5.2 @@ -64,7 +64,6 @@ psycopg2-binary==2.8.6 pyasn1-modules==0.2.8 pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -pyhamcrest==2.0.2; python_version >= '3.5' pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 python-dotenv==0.15.0 @@ -85,8 +84,8 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.57.0 -twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +tqdm==4.58.0 +twisted[tls]==21.2.0; python_full_version >= '3.5.4' txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index c389d446f..21f1e140c 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -278,9 +278,7 @@ class TestParser(DirectoriesMixin, TestCase): with open(os.path.join(parser.tempdir, "sidecar.txt")) as f: sidecar = f.read() - self.assertIn("[OCR skipped on page 4]", sidecar) - self.assertIn("[OCR skipped on page 5]", sidecar) - self.assertIn("[OCR skipped on page 6]", sidecar) + self.assertIn("[OCR skipped on page(s) 4-6]", sidecar) @override_settings(OCR_MODE="skip_noarchive") def test_multi_page_mixed_no_archive(self): From 971fb05c6baaa425941a1f955d178c8f3b8129a1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 28 Feb 2021 13:20:31 +0100 Subject: [PATCH 440/898] changelog, documentation, version bump --- docs/administration.rst | 20 ++++++++++---------- docs/api.rst | 2 ++ docs/changelog.rst | 16 ++++++++++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index c91f501bd..19ab1e73f 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -184,17 +184,17 @@ Downgrades are possible. However, some updates also contain database migrations In order to move back from a version that applied database migrations, you'll have to revert the database migration *before* downgrading, and then downgrade paperless. -This table lists the most recent database migrations for each versions: +This table lists the compatible versions for each database migration number. -+---------+-------------------------+ -| Version | Latest migration number | -+---------+-------------------------+ -| 1.0.0 | 1011 | -+---------+-------------------------+ -| 1.1.0 | 1011 | -+---------+-------------------------+ -| 1.1.1 | 1012 | -+---------+-------------------------+ ++------------------+-----------------+ +| Migration number | Version range | ++------------------+-----------------+ +| 1011 | 1.0.0 | ++------------------+-----------------+ +| 1012 | 1.1.0 - 1.2.1 | ++------------------+-----------------+ +| 1013 | 1.3.0 - current | ++------------------+-----------------+ Execute the following management command to migrate your database: diff --git a/docs/api.rst b/docs/api.rst index d34558b36..c2120b20f 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -286,6 +286,8 @@ was started successfully. No additional status information about the consumption process itself is available, since that happens in a different process. +.. _api-versioning: + API Versioning ############## diff --git a/docs/changelog.rst b/docs/changelog.rst index 73e457176..543d9435d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,22 @@ Changelog ********* +paperless-ng 1.3.0 +################## + +This release contains new database migrations. + +* Added a color picker for tag colors. + +* Added translations into Italian and Romanian. Thank you! + +* Close individual documents from the sidebar. + +* `BolkoSchreiber <https://github.com/BolkoSchreiber>`_ added an option to disable/enable thumbnail inversion in dark mode. + +* The REST API is versioned from this point onwards. See the documentation about :ref:`api-versioning` for details. + + paperless-ng 1.2.1 ################## diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 2d07ac31c..d48b0bebe 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -3,7 +3,7 @@ export const environment = { apiBaseUrl: "/api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.2.1", + version: "1.3.0", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index d93cd02b0..3be2947f7 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 2, 1) +__version__ = (1, 3, 0) From 8eb14402bf9c2ddb88953b2307ea2f0965a7b7f0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 12:35:21 +0000 Subject: [PATCH 441/898] Apply translations in ro translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'ro' language. --- src/locale/ro/LC_MESSAGES/django.po | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/locale/ro/LC_MESSAGES/django.po b/src/locale/ro/LC_MESSAGES/django.po index 613d60949..ac1fb40d1 100644 --- a/src/locale/ro/LC_MESSAGES/django.po +++ b/src/locale/ro/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-26 12:56+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Cubic Lemon <lemonsarecubic@gmail.com>, 2021\n" "Language-Team: Romanian (https://www.transifex.com/paperless/teams/115905/ro/)\n" @@ -437,6 +437,10 @@ msgstr "Portugheza (Brazilia)" msgid "Italian" msgstr "Italiana" +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Romana" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administrare Paperless-ng" @@ -676,7 +680,7 @@ msgstr "atribuie acest tip" #: paperless_mail/models.py:195 msgid "assign correspondent from" -msgstr "atribuie acest corespondent" +msgstr "atribuie corespondent din" #: paperless_mail/models.py:205 msgid "assign this correspondent" From 1d80f68426518ca76144e2034e1cf4a8454ede58 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 12:36:01 +0000 Subject: [PATCH 442/898] Translate /src-ui/messages.xlf in ro translation completed for the source file '/src-ui/messages.xlf' on the 'ro' language. --- src-ui/src/locale/messages.ro.xlf | 88 ++++++++++++++++++------------- 1 file changed, 52 insertions(+), 36 deletions(-) diff --git a/src-ui/src/locale/messages.ro.xlf b/src-ui/src/locale/messages.ro.xlf index b45e86699..65ff0f3f7 100644 --- a/src-ui/src/locale/messages.ro.xlf +++ b/src-ui/src/locale/messages.ro.xlf @@ -590,7 +590,7 @@ <target>Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost stearsa.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Setarile au fost salvate.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Foloseste limba sistemului</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Foloseste formatul datei corespunzator limbii de afisare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Eroare la stocarea setarilor pe server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Notificari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Vizualizari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Inverseaza miniaturile in modul intunecat</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Editare in bloc</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Afisati dialoguri de confirmare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>Stergerea documentelor necesita intotdeauna confirmare.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Aplica la iesire</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Procesarea documentelor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Afisati notificari cand sunt detectate documente noi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Afisati notificari cand procesarea unui document este completa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Afisati notificari cand procesarea unui document esueaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Ascundeti notificarile pe tabloul de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>Aceasta setare va opri mesajele despre procesarea documentelor pe tabloul de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Apare pe</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Afiseaza pe tabloul de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>Afiseaza in bara laterala</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>Nu sunt definite vizualizari.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1111,7 +1119,7 @@ <target>Administreaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Administrator</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Informatii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Documentatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Sugestii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,7 @@ <target>Inchide tot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1861,7 +1869,7 @@ <target>Engleza (SUA)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1877,7 @@ <target>Engleza (UK)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1885,7 @@ <target>Germana</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1893,7 @@ <target>Olandeza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1901,7 @@ <target>Franceza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1909,7 @@ <target>Portugheza (Brazilia)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2935232983274991580"> @@ -1909,7 +1917,15 @@ <target>Italiana</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Romana</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1917,7 +1933,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> From f4812cd70cd67bb11643461bc931103fcc5e8a55 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:19:41 +0100 Subject: [PATCH 443/898] filter by title or title+content fixes #636 --- src-ui/messages.xlf | 43 +++++++------ .../filter-editor.component.html | 10 +++- .../filter-editor/filter-editor.component.ts | 60 ++++++++++++++----- src-ui/src/app/data/filter-rule-type.ts | 6 +- src/documents/filters.py | 13 ++++ .../migrations/1014_auto_20210228_1614.py | 18 ++++++ src/documents/models.py | 2 + 7 files changed, 116 insertions(+), 36 deletions(-) create mode 100644 src/documents/migrations/1014_auto_20210228_1614.py diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 8f2b8b786..329399584 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1039,81 +1039,95 @@ <context context-type="linenumber">106</context> </context-group> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> @@ -1819,13 +1833,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> <context-group purpose="location"> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html index 033596f53..7290354eb 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html @@ -2,7 +2,15 @@ <div class="col mb-2 mb-xl-0"> <div class="form-inline d-flex align-items-center"> <label class="text-muted mr-2 mb-0" i18n>Filter by:</label> - <input class="form-control form-control-sm flex-fill w-auto" type="text" [(ngModel)]="titleFilter" placeholder="Title" i18n-placeholder> + <div class="input-group input-group-sm flex-fill w-auto"> + <div class="input-group-prepend" ngbDropdown> + <button class="btn btn-outline-primary" ngbDropdownToggle>{{textFilterTargetName}}</button> + <div class="dropdown-menu shadow" ngbDropdownMenu> + <button *ngFor="let t of textFilterTargets" ngbDropdownItem [class.active]="textFilterTarget == t.id" (click)="changeTextFilterTarget(t.id)">{{t.name}}</button> + </div> + </div> + <input class="form-control form-control-sm" type="text" [(ngModel)]="textFilter"> + </div> </div> </div> <div class="w-100 d-xl-none"></div> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index a6506efde..3ac9df1ff 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -8,10 +8,13 @@ import { DocumentTypeService } from 'src/app/services/rest/document-type.service import { TagService } from 'src/app/services/rest/tag.service'; import { CorrespondentService } from 'src/app/services/rest/correspondent.service'; import { FilterRule } from 'src/app/data/filter-rule'; -import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE } from 'src/app/data/filter-rule-type'; +import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE, FILTER_TITLE_CONTENT } from 'src/app/data/filter-rule-type'; import { FilterableDropdownSelectionModel } from '../../common/filterable-dropdown/filterable-dropdown.component'; import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'; +const TEXT_FILTER_TARGET_TITLE = "title" +const TEXT_FILTER_TARGET_TITLE_CONTENT = "title-content" + @Component({ selector: 'app-filter-editor', templateUrl: './filter-editor.component.html', @@ -64,7 +67,19 @@ export class FilterEditorComponent implements OnInit, OnDestroy { correspondents: PaperlessCorrespondent[] = [] documentTypes: PaperlessDocumentType[] = [] - _titleFilter = "" + _textFilter = "" + + textFilterTargets = [ + {id: TEXT_FILTER_TARGET_TITLE, name: $localize`Title`}, + {id: TEXT_FILTER_TARGET_TITLE_CONTENT, name: $localize`Title & content`} + ] + + textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT + + get textFilterTargetName() { + return this.textFilterTargets.find(t => t.id == this.textFilterTarget)?.name + } + tagSelectionModel = new FilterableDropdownSelectionModel() correspondentSelectionModel = new FilterableDropdownSelectionModel() @@ -80,7 +95,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this.documentTypeSelectionModel.clear(false) this.tagSelectionModel.clear(false) this.correspondentSelectionModel.clear(false) - this._titleFilter = null + this._textFilter = null this.dateAddedBefore = null this.dateAddedAfter = null this.dateCreatedBefore = null @@ -89,7 +104,12 @@ export class FilterEditorComponent implements OnInit, OnDestroy { value.forEach(rule => { switch (rule.rule_type) { case FILTER_TITLE: - this._titleFilter = rule.value + this._textFilter = rule.value + this.textFilterTarget = TEXT_FILTER_TARGET_TITLE + break + case FILTER_TITLE_CONTENT: + this._textFilter = rule.value + this.textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT break case FILTER_CREATED_AFTER: this.dateCreatedAfter = rule.value @@ -121,8 +141,11 @@ export class FilterEditorComponent implements OnInit, OnDestroy { get filterRules(): FilterRule[] { let filterRules: FilterRule[] = [] - if (this._titleFilter) { - filterRules.push({rule_type: FILTER_TITLE, value: this._titleFilter}) + if (this._textFilter && this.textFilterTarget == TEXT_FILTER_TARGET_TITLE_CONTENT) { + filterRules.push({rule_type: FILTER_TITLE_CONTENT, value: this._textFilter}) + } + if (this._textFilter && this.textFilterTarget == TEXT_FILTER_TARGET_TITLE) { + filterRules.push({rule_type: FILTER_TITLE, value: this._textFilter}) } if (this.tagSelectionModel.isNoneSelected()) { filterRules.push({rule_type: FILTER_HAS_ANY_TAG, value: "false"}) @@ -165,15 +188,15 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this.filterRulesChange.next(this.filterRules) } - get titleFilter() { - return this._titleFilter + get textFilter() { + return this._textFilter } - set titleFilter(value) { - this.titleFilterDebounce.next(value) + set textFilter(value) { + this.textFilterDebounce.next(value) } - titleFilterDebounce: Subject<string> + textFilterDebounce: Subject<string> subscription: Subscription ngOnInit() { @@ -181,19 +204,19 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this.correspondentService.listAll().subscribe(result => this.correspondents = result.results) this.documentTypeService.listAll().subscribe(result => this.documentTypes = result.results) - this.titleFilterDebounce = new Subject<string>() + this.textFilterDebounce = new Subject<string>() - this.subscription = this.titleFilterDebounce.pipe( + this.subscription = this.textFilterDebounce.pipe( debounceTime(400), distinctUntilChanged() - ).subscribe(title => { - this._titleFilter = title + ).subscribe(text => { + this._textFilter = text this.updateRules() }) } ngOnDestroy() { - this.titleFilterDebounce.complete() + this.textFilterDebounce.complete() } resetSelected() { @@ -223,4 +246,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { onDocumentTypeDropdownOpen() { this.documentTypeSelectionModel.apply() } + + changeTextFilterTarget(target) { + this.textFilterTarget = target + this.updateRules() + } } diff --git a/src-ui/src/app/data/filter-rule-type.ts b/src-ui/src/app/data/filter-rule-type.ts index 4669b548e..2c9f8a373 100644 --- a/src-ui/src/app/data/filter-rule-type.ts +++ b/src-ui/src/app/data/filter-rule-type.ts @@ -20,6 +20,8 @@ export const FILTER_DOES_NOT_HAVE_TAG = 17 export const FILTER_ASN_ISNULL = 18 +export const FILTER_TITLE_CONTENT = 19 + export const FILTER_RULE_TYPES: FilterRuleType[] = [ {id: FILTER_TITLE, filtervar: "title__icontains", datatype: "string", multi: false, default: ""}, @@ -47,7 +49,9 @@ export const FILTER_RULE_TYPES: FilterRuleType[] = [ {id: FILTER_MODIFIED_BEFORE, filtervar: "modified__date__lt", datatype: "date", multi: false}, {id: FILTER_MODIFIED_AFTER, filtervar: "modified__date__gt", datatype: "date", multi: false}, - {id: FILTER_ASN_ISNULL, filtervar: "archive_serial_number__isnull", datatype: "boolean", multi: false} + {id: FILTER_ASN_ISNULL, filtervar: "archive_serial_number__isnull", datatype: "boolean", multi: false}, + + {id: FILTER_TITLE_CONTENT, filtervar: "title_content", datatype: "string", multi: false} ] export interface FilterRuleType { diff --git a/src/documents/filters.py b/src/documents/filters.py index 2201298f3..a1ad94b1e 100755 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -1,3 +1,4 @@ +from django.db.models import Q from django_filters.rest_framework import BooleanFilter, FilterSet, Filter from .models import Correspondent, Document, Tag, DocumentType, Log @@ -70,6 +71,16 @@ class InboxFilter(Filter): return qs +class TitleContentFilter(Filter): + + def filter(self, qs, value): + if value: + return qs.filter(Q(title__icontains=value) | + Q(content__icontains=value)) + else: + return qs + + class DocumentFilterSet(FilterSet): is_tagged = BooleanFilter( @@ -85,6 +96,8 @@ class DocumentFilterSet(FilterSet): is_in_inbox = InboxFilter() + title_content = TitleContentFilter() + class Meta: model = Document fields = { diff --git a/src/documents/migrations/1014_auto_20210228_1614.py b/src/documents/migrations/1014_auto_20210228_1614.py new file mode 100644 index 000000000..cb716fa82 --- /dev/null +++ b/src/documents/migrations/1014_auto_20210228_1614.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.7 on 2021-02-28 15:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1013_migrate_tag_colour'), + ] + + operations = [ + migrations.AlterField( + model_name='savedviewfilterrule', + name='rule_type', + field=models.PositiveIntegerField(choices=[(0, 'title contains'), (1, 'content contains'), (2, 'ASN is'), (3, 'correspondent is'), (4, 'document type is'), (5, 'is in inbox'), (6, 'has tag'), (7, 'has any tag'), (8, 'created before'), (9, 'created after'), (10, 'created year is'), (11, 'created month is'), (12, 'created day is'), (13, 'added before'), (14, 'added after'), (15, 'modified before'), (16, 'modified after'), (17, 'does not have tag'), (18, 'does not have ASN'), (19, 'title or content contains')], verbose_name='rule type'), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index 3d81efea4..6ee93e3ad 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -385,6 +385,8 @@ class SavedViewFilterRule(models.Model): (15, _("modified before")), (16, _("modified after")), (17, _("does not have tag")), + (18, _("does not have ASN")), + (19, _("title or content contains")), ] saved_view = models.ForeignKey( From e85aa5bc3d5d5d7543deb6581976b5007d8aa67e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:35:02 +0100 Subject: [PATCH 444/898] improved color generation logic --- src-ui/src/app/utils/color.ts | 54 +++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/src-ui/src/app/utils/color.ts b/src-ui/src/app/utils/color.ts index bcfdef088..549e900b7 100644 --- a/src-ui/src/app/utils/color.ts +++ b/src-ui/src/app/utils/color.ts @@ -1,12 +1,48 @@ - function componentToHex(c) { - var hex = c.toString(16); - return hex.length == 1 ? "0" + hex : hex; +function componentToHex(c) { + var hex = Math.floor(c).toString(16) + return hex.length == 1 ? "0" + hex : hex +} + +/** + * https://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c + * + * Converts an HSL color value to RGB. Conversion formula + * adapted from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes h, s, and l are contained in the set [0, 1] and + * returns r, g, and b in the set [0, 255]. + * + * @param Number h The hue + * @param Number s The saturation + * @param Number l The lightness + * @return Array The RGB representation + */ +function hslToRgb(h, s, l){ + var r, g, b + + if(s == 0){ + r = g = b = l // achromatic + }else{ + function hue2rgb(p, q, t){ + if(t < 0) t += 1 + if(t > 1) t -= 1 + if(t < 1/6) return p + (q - p) * 6 * t + if(t < 1/2) return q + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6 + return p + } + + var q = l < 0.5 ? l * (1 + s) : l + s - l * s + var p = 2 * l - q + r = hue2rgb(p, q, h + 1/3) + g = hue2rgb(p, q, h) + b = hue2rgb(p, q, h - 1/3) } - export function randomColor() { - let r = Math.floor(Math.random() * 150) + 50 - let g = Math.floor(Math.random() * 150) + 50 - let b = Math.floor(Math.random() * 150) + 50 - return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}` - } \ No newline at end of file + return [r * 255, g * 255, b * 255] +} + +export function randomColor() { + let rgb = hslToRgb(Math.random(), 0.6, Math.random() * 0.4 + 0.4) + return `#${componentToHex(rgb[0])}${componentToHex(rgb[1])}${componentToHex(rgb[2])}` +} \ No newline at end of file From fca4487e54c1604e67ecf0e1aed6be2453f9400b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:35:20 +0000 Subject: [PATCH 445/898] Apply translations in fr translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'fr' language. --- src/locale/fr/LC_MESSAGES/django.po | 172 +++++++++++++++------------- 1 file changed, 92 insertions(+), 80 deletions(-) diff --git a/src/locale/fr/LC_MESSAGES/django.po b/src/locale/fr/LC_MESSAGES/django.po index 3b4fbce3f..755dbba9d 100644 --- a/src/locale/fr/LC_MESSAGES/django.po +++ b/src/locale/fr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Philmo67, 2021\n" "Language-Team: French (https://www.transifex.com/paperless/teams/115905/fr/)\n" @@ -50,7 +50,7 @@ msgstr "Mot approximatif" msgid "Automatic" msgstr "Automatique" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "nom" @@ -67,7 +67,7 @@ msgstr "algorithme de rapprochement" msgid "is insensitive" msgstr "est insensible à la casse" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "correspondant" @@ -75,15 +75,15 @@ msgstr "correspondant" msgid "correspondents" msgstr "correspondants" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "couleur" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "est une étiquette de boîte de réception" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Marque cette étiquette comme étiquette de boîte de réception : ces " "étiquettes sont affectées à tous les documents nouvellement traités." -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "étiquette" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "étiquettes" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "type de document" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "types de document" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Non chiffré" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Chiffré avec GNU Privacy Guard" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "titre" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "contenu" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,242 +131,246 @@ msgstr "" "Les données brutes du document, en format texte uniquement. Ce champ est " "principalement utilisé pour la recherche." -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "type mime" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "somme de contrôle" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "La somme de contrôle du document original." -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "somme de contrôle de l'archive" -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "La somme de contrôle du document archivé." -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "créé le" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "modifié" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "forme d'enregistrement :" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "date d'ajout" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "nom du fichier" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Nom du fichier courant en base de données" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "nom de fichier de l'archive" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "Nom du fichier d'archive courant en base de données" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "numéro de série de l'archive" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "" "Le classement de ce document dans votre archive de documents physiques." -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "document" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "documents" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "débogage" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "information" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "avertissement" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "erreur" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "critique" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "groupe" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "message" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "niveau" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "rapport" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "rapports" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "vue enregistrée" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "vues enregistrées" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "utilisateur" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "montrer sur le tableau de bord" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "montrer dans la barre latérale" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "champ de tri" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "tri inverse" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "le titre contient" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "le contenu contient" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "le NSA est" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "le correspondant est" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "le type de document est" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "est dans la boîte de réception" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "porte l'étiquette" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "porte l'une des étiquettes" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "créé avant" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "créé après" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "l'année de création est" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "le mois de création est" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "le jour de création est" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "ajouté avant" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "ajouté après" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "modifié avant" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "modifié après" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "ne porte pas d'étiquette" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "type de règle" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "valeur" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "règle de filtrage" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "règles de filtrage" -#: documents/serialisers.py:52 +#: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" msgstr "Expression régulière incorrecte : %(error)s" -#: documents/serialisers.py:378 +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Couleur incorrecte." + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "Type de fichier %(type)s non pris en charge" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng est en cours de chargement..." @@ -408,30 +412,38 @@ msgstr "Mot de passe" msgid "Sign in" msgstr "S'identifier" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "Anglais (US)" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "Anglais (GB)" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "Allemand" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Néerlandais" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "Français" -#: paperless/settings.py:296 +#: paperless/settings.py:302 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italien" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Roumain" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" From 4bf0ee579dcb44d99ccc361107fb88ba1acda0b9 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:36:24 +0000 Subject: [PATCH 446/898] Translate /src-ui/messages.xlf in fr translation completed for the source file '/src-ui/messages.xlf' on the 'fr' language. --- src-ui/src/locale/messages.fr.xlf | 266 +++++++++++------------------- 1 file changed, 97 insertions(+), 169 deletions(-) diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr.xlf index 05b9fdab7..b1f820e2e 100644 --- a/src-ui/src/locale/messages.fr.xlf +++ b/src-ui/src/locale/messages.fr.xlf @@ -478,7 +478,7 @@ <target>Voulez-vous vraiment supprimer l'étiquette "<x equiv-text="object.name" id="PH"/>" ?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> @@ -590,7 +590,7 @@ <target>Vue "<x equiv-text="savedView.name" id="PH"/>" supprimée.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Paramètres enregistrés avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Utiliser la langue du système</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Utiliser le format de date de la langue d'affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Notifications</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Vues enregistrées</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Inverser les vignettes en mode sombre</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Edition en masse</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Afficher les messages de confirmation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>La suppression de documents requiert toujours une confirmation.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Appliquer lors de la fermeture</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Traitement de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Afficher des notifications lorsque de nouveaux documents sont détectés</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Afficher des notifications lorsque le traitement des documents se termine avec succès</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Afficher des notifications en cas d'échec du traitement des documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Supprimer les notifications du tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Apparaît sur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Montrer sur le tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>Montrer dans la barre latérale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>Aucune vue sauvegardée n'est définie.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -990,7 +998,7 @@ <target>Créer une nouvelle étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5872175735754226507"> @@ -998,7 +1006,7 @@ <target>Éditer l'étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> @@ -1006,7 +1014,7 @@ <target>Étiquette de boîte de réception</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> @@ -1014,7 +1022,7 @@ <target>Les étiquettes de boîte de réception sont automatiquement affectées à tous les documents traités.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6672809941092516947"> @@ -1111,7 +1119,7 @@ <target>Gestion</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Administration</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Documentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Suggérer une idée</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,23 @@ <target>Fermer tout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titre</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Titre & contenu</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1183,7 +1207,7 @@ <target>Correspondant : <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1191,7 +1215,7 @@ <target>Sans correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1199,7 +1223,7 @@ <target>Type : <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1207,7 +1231,7 @@ <target>Sans type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1215,7 +1239,7 @@ <target>Étiquette : <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1223,7 +1247,7 @@ <target>Sans étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1231,7 +1255,7 @@ <target>Titre : <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1239,7 +1263,7 @@ <target>Filtrer les étiquettes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1247,7 +1271,7 @@ <target>Filtrer les correspondants</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1255,7 +1279,7 @@ <target>Filtrer les types de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1263,7 +1287,7 @@ <target>Réinitialiser les filtres</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -1288,7 +1312,7 @@ <target>Les 7 derniers jours</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4463380307954693363"> @@ -1296,7 +1320,7 @@ <target>Le mois dernier</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8697368973702409683"> @@ -1304,7 +1328,7 @@ <target>Les 3 derniers mois</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3566342898065860218"> @@ -1312,7 +1336,7 @@ <target>L'année passée</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> @@ -1328,7 +1352,7 @@ <target>Avant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> @@ -1829,7 +1853,7 @@ <target>Date incorrecte.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">14</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> @@ -1861,7 +1885,7 @@ <target>Anglais (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1893,7 @@ <target>Anglais (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1901,7 @@ <target>Allemand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1909,7 @@ <target>Néerlandais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1917,7 @@ <target>Français</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1925,23 @@ <target>Portugais (Brésil)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italien</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Roumain</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1909,7 +1949,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2052,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Titre</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Type de document</target> @@ -2092,110 +2124,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2056433880533904076"> - <source>Light blue</source> - <target>Bleu clair</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4082253113407591781"> - <source>Blue</source> - <target>Bleu</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1143414876575720034"> - <source>Light green</source> - <target>Vert clair</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="119581980963263815"> - <source>Green</source> - <target>Vert</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="3250646524116252719"> - <source>Light red</source> - <target>Rouge clair</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1628552745302385832"> - <source>Red </source> - <target>Rouge</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="5479028842846122610"> - <source>Light orange</source> - <target>Orange clair</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8598918991528773310"> - <source>Orange</source> - <target>Orange</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1789283185177957430"> - <source>Light violet</source> - <target>Violet clair</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2682868487071320453"> - <source>Violet</source> - <target>Violet</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1449010446077321264"> - <source>Brown</source> - <target>Brun</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="30300572504753589"> - <source>Black</source> - <target>Noir</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="461048771215121187"> - <source>Light grey</source> - <target>Gris clair</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="4561076822163447092"> <source>Create new item</source> <target>Créer un nouvel élément</target> From e91bbfcb243def8b59b97c763270ef74d30ef0a3 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:59:35 +0000 Subject: [PATCH 447/898] Translate /src-ui/messages.xlf in pt_BR translation completed for the source file '/src-ui/messages.xlf' on the 'pt_BR' language. --- src-ui/src/locale/messages.pt_BR.xlf | 266 ++++++++++----------------- 1 file changed, 97 insertions(+), 169 deletions(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index fe574c7bc..ec6fb02d9 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -478,7 +478,7 @@ <target>Você realmente deseja excluir a etiqueta "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> @@ -590,7 +590,7 @@ <target>Visualização "<x equiv-text="savedView.name" id="PH"/>" excluída.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Configurações salvas com sucesso.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Usar linguagem do sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Usar formato de data da linguagem de exibição</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Erro ao salvar configurações: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Notificações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Visualizações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Inverter imagens em modo noturno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Edição em massa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Mostrar janelas de confirmação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>Ao excluir um documento, sempre será pedido uma confirmação.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Aplicar ao fechar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Processamento de documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Exibir notificações quando novos documentos forem detectados</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Exibir notificações quando o processamento de um documento concluir com sucesso</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Exibir notificações quando o processamento de um documento falhar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Não exibir notificações no painel de controle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Aparece em</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Exibir no painel de controle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>Mostrar na navegação lateral</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>Nenhuma visualização definida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -990,7 +998,7 @@ <target>Criar nova etiqueta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5872175735754226507"> @@ -998,7 +1006,7 @@ <target>Editar etiqueta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> @@ -1006,7 +1014,7 @@ <target>Etiqueta caixa de entrada</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> @@ -1014,7 +1022,7 @@ <target>Etiquetas de caixa de entrada são atribuídas automaticamente para todos os documentos consumidos.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6672809941092516947"> @@ -1111,7 +1119,7 @@ <target>Gerenciar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Admin</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Informação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Documentação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Sugerir uma idéia</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,23 @@ <target>Fechar todos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Título</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Título & conteúdo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1183,7 +1207,7 @@ <target>Correspondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1191,7 +1215,7 @@ <target>Sem correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1199,7 +1223,7 @@ <target>Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1207,7 +1231,7 @@ <target>Sem tipo de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1215,7 +1239,7 @@ <target>Etiqueta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1223,7 +1247,7 @@ <target>Sem etiquetas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1231,7 +1255,7 @@ <target>Título: <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1239,7 +1263,7 @@ <target>Filtrar etiquetas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1247,7 +1271,7 @@ <target>Filtrar correspondentes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1255,7 +1279,7 @@ <target>Filtrar tipos de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1263,7 +1287,7 @@ <target>Limpar filtros</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -1288,7 +1312,7 @@ <target>Últimos 7 dias</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4463380307954693363"> @@ -1296,7 +1320,7 @@ <target>Último mês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8697368973702409683"> @@ -1304,7 +1328,7 @@ <target>Últimos 3 meses</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3566342898065860218"> @@ -1312,7 +1336,7 @@ <target>Último ano</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> @@ -1328,7 +1352,7 @@ <target>Depois</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> @@ -1829,7 +1853,7 @@ <target>Data inválida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">14</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> @@ -1861,7 +1885,7 @@ <target>Inglês (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1893,7 @@ <target>Inglês (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1901,7 @@ <target>Alemão</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1909,7 @@ <target>Holandês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1917,7 @@ <target>Francês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1925,23 @@ <target>Português (Brasil)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italiano</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Romeno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1909,7 +1949,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2052,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Título</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Tipo de Documento</target> @@ -2092,110 +2124,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2056433880533904076"> - <source>Light blue</source> - <target>Azul claro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4082253113407591781"> - <source>Blue</source> - <target>Azul</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1143414876575720034"> - <source>Light green</source> - <target>Verde claro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="119581980963263815"> - <source>Green</source> - <target>Verde</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="3250646524116252719"> - <source>Light red</source> - <target>Vermelho claro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1628552745302385832"> - <source>Red </source> - <target>Vermelho</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="5479028842846122610"> - <source>Light orange</source> - <target>Laranja claro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8598918991528773310"> - <source>Orange</source> - <target>Laranja</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1789283185177957430"> - <source>Light violet</source> - <target>Violeta claro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2682868487071320453"> - <source>Violet</source> - <target>Violeta</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1449010446077321264"> - <source>Brown</source> - <target>Marrom</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="30300572504753589"> - <source>Black</source> - <target>Preto</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="461048771215121187"> - <source>Light grey</source> - <target>Cinza claro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="4561076822163447092"> <source>Create new item</source> <target>Criar novo item</target> From 9ffaac1bb7cc321a7b0c50978d4860e9676c1ee6 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:59:47 +0000 Subject: [PATCH 448/898] Apply translations in pt_BR translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'pt_BR' language. --- src/locale/pt_BR/LC_MESSAGES/django.po | 172 +++++++++++++------------ 1 file changed, 92 insertions(+), 80 deletions(-) diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 7800b0c88..f4e5710db 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Rodrigo A <rodrigo.avelino@meliuz.com.br>, 2021\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/paperless/teams/115905/pt_BR/)\n" @@ -50,7 +50,7 @@ msgstr "Palavra difusa (fuzzy)" msgid "Automatic" msgstr "Automático" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "nome" @@ -67,7 +67,7 @@ msgstr "algoritmo de detecção" msgid "is insensitive" msgstr "diferencia maiúsculas de minúsculas" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "correspondente" @@ -75,15 +75,15 @@ msgstr "correspondente" msgid "correspondents" msgstr "correspondentes" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "cor" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "é etiqueta caixa de entrada" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -91,39 +91,39 @@ msgstr "" "Marca essa etiqueta como caixa de entrada: Todos os novos documentos " "consumidos terão as etiquetas de caixa de entrada." -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "etiqueta" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "etiquetas" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "tipo de documento" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "tipos de documento" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Não encriptado" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Encriptado com GNU Privacy Guard" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "título" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "conteúdo" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -131,241 +131,245 @@ msgstr "" "O conteúdo de texto bruto do documento. Esse campo é usado principalmente " "para busca." -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "tipo mime" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "some de verificação" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "A soma de verificação original do documento." -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "Soma de verificação de arquivamento." -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "A soma de verificação do documento arquivado." -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "criado" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "modificado" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "tipo de armazenamento" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "adicionado" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "nome do arquivo" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Nome do arquivo atual armazenado" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "nome do arquivo para arquivamento" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "Nome do arquivo para arquivamento armazenado" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "número de sério de arquivamento" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "A posição deste documento no seu arquivamento físico." -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "documento" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "documentos" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "debug" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "informação" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "aviso" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "erro" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "crítico" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "grupo" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "mensagem" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "nível" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "log" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "logs" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "visualização" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "visualizações" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "usuário" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "exibir no painel de controle" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "exibir no painel lateral" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "ordenar campo" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "odernar reverso" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "título contém" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "conteúdo contém" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "NSA é" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "correspondente é" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "tipo de documento é" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "é caixa de entrada" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "contém etiqueta" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "contém qualquer etiqueta" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "criado antes de" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "criado depois de" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "ano de criação é" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "mês de criação é" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "dia de criação é" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "adicionado antes de" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "adicionado depois de" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "modificado antes de" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "modificado depois de" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "não tem etiqueta" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "tipo de regra" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "valor" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "regra de filtragem" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "regras de filtragem" -#: documents/serialisers.py:52 +#: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" msgstr "Expressão regular inválida: %(error)s" -#: documents/serialisers.py:378 +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Cor inválida." + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "Tipo de arquivo %(type)s não suportado" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng está carregando..." @@ -405,30 +409,38 @@ msgstr "Senha" msgid "Sign in" msgstr "Entrar" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "Inglês (GB)" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "Alemão" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Holandês" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "Francês" -#: paperless/settings.py:296 +#: paperless/settings.py:302 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italiano" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Romeno" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" From fa25b15f5bd6eeae54c877c9d0ddbd9a9f90aedb Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 18:04:39 +0000 Subject: [PATCH 449/898] Translate /src-ui/messages.xlf in ro translation completed for the source file '/src-ui/messages.xlf' on the 'ro' language. --- src-ui/src/locale/messages.ro.xlf | 46 ++++++++++++++++++------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src-ui/src/locale/messages.ro.xlf b/src-ui/src/locale/messages.ro.xlf index 65ff0f3f7..c016b41a1 100644 --- a/src-ui/src/locale/messages.ro.xlf +++ b/src-ui/src/locale/messages.ro.xlf @@ -1186,12 +1186,28 @@ <context context-type="linenumber">106</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titlu</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Titlu si continut</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> <target>Corespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1199,7 +1215,7 @@ <target>Fara corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1207,7 +1223,7 @@ <target>Tip: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1215,7 +1231,7 @@ <target>Fara tip</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1223,7 +1239,7 @@ <target>Eticheta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1231,7 +1247,7 @@ <target>Fara etichete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1239,7 +1255,7 @@ <target>Titlu: <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1247,7 +1263,7 @@ <target>Filtreaza etichete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1255,7 +1271,7 @@ <target>Filtreaza corespondenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1263,7 +1279,7 @@ <target>Filtreaza tipuri de documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1271,7 +1287,7 @@ <target>Resetati filtrele</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -2076,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Titlu</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Tipul documentului</target> From 986dc5cac96966d75c98fd1867d36c9f6c22e4c4 Mon Sep 17 00:00:00 2001 From: HolzHannes <holzhannes@posteo.de> Date: Sun, 28 Feb 2021 20:23:38 +0100 Subject: [PATCH 450/898] Update to status of affiliateded projects --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b21173ba5..e59535af4 100644 --- a/README.md +++ b/README.md @@ -104,9 +104,13 @@ Paperless has been around a while now, and people are starting to build stuff on These projects also exist, but their status and compatibility with paperless-ng is unknown. -* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation. Runs on Mac, Linux, and Windows. * [paperless-cli](https://github.com/stgarf/paperless-cli): A golang command line binary to interact with a Paperless instance. +This project also exists, but needs updates to be compatile with paperless-ng. + +* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation. Runs on Mac, Linux, and Windows. + Known issues on Mac: (Could not load reminders and documents) + # Important Note Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption. This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home. From 3282a4603866aebc554b43f1ead536900366f564 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 20:47:14 +0000 Subject: [PATCH 451/898] Apply translations in de translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'de' language. --- src/locale/de/LC_MESSAGES/django.po | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index 7d03e91ec..55d2b0989 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-26 12:56+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" @@ -438,6 +438,10 @@ msgstr "Portugiesisch (Brasilien)" msgid "Italian" msgstr "Italienisch" +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Rumänisch" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" From 848b1bb1f125ee83b976fda4fff731c3298a710b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Sun, 28 Feb 2021 20:47:42 +0000 Subject: [PATCH 452/898] Translate /src-ui/messages.xlf in de translation completed for the source file '/src-ui/messages.xlf' on the 'de' language. --- src-ui/src/locale/messages.de.xlf | 134 ++++++++++++++++++------------ 1 file changed, 79 insertions(+), 55 deletions(-) diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de.xlf index 3f141d9c8..21c94b91c 100644 --- a/src-ui/src/locale/messages.de.xlf +++ b/src-ui/src/locale/messages.de.xlf @@ -590,7 +590,7 @@ <target>Gespeicherte Ansicht "<x equiv-text="savedView.name" id="PH"/>" gelöscht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Einstellungen erfolgreich gespeichert.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Benutze Systemsprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Benutze Datumsformat der Anzeigesprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Benachrichtigungen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Gespeicherte Ansichten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Miniaturbilder im dunklen Modus invertieren</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Massenbearbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Bestätigungsdialoge anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Anwenden beim Schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Dokumentverarbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Unterdrücke Benachrichtigungen auf der Startseite.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Erscheint auf</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Auf Startseite zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>In Seitenleiste zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>Keine gespeicherten Ansichten vorhanden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1111,7 +1119,7 @@ <target>Verwalten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Administration</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Dokumentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Eine Idee vorschlagen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,23 @@ <target>Alle schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titel</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Titel & Inhalt</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1183,7 +1207,7 @@ <target>Korrespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1191,7 +1215,7 @@ <target>Ohne Korrespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1199,7 +1223,7 @@ <target>Typ: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1207,7 +1231,7 @@ <target>Ohne Dokumenttyp</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1215,7 +1239,7 @@ <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1223,7 +1247,7 @@ <target>Ohne Tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1231,7 +1255,7 @@ <target>Titel: <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1239,7 +1263,7 @@ <target>Tags filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1247,7 +1271,7 @@ <target>Korrespondenten filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1255,7 +1279,7 @@ <target>Dokumenttypen filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1263,7 +1287,7 @@ <target>Filter zurücksetzen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -1861,7 +1885,7 @@ <target>Englisch (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1893,7 @@ <target>Englisch (UK)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1901,7 @@ <target>Deutsch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1909,7 @@ <target>Niederländisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1917,7 @@ <target>Französisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1925,7 @@ <target>Portugiesisch (Brasilien)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2935232983274991580"> @@ -1909,7 +1933,15 @@ <target>Italienisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Rumänisch</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1917,7 +1949,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2060,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Titel</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Dokumenttyp</target> From 5bf93c43b0699326acb8fe0cb391bf691aeb7c36 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 15:30:27 +0000 Subject: [PATCH 453/898] Apply translations in nl_NL translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'nl_NL' language. --- src/locale/nl_NL/LC_MESSAGES/django.po | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 1309edd69..7dae056cf 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -6,15 +6,16 @@ # Translators: # Jonas Winkler, 2021 # Jo Vandeginste <jo.vandeginste@gmail.com>, 2021 +# Ben <bzweekhorst@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-26 12:56+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Jo Vandeginste <jo.vandeginste@gmail.com>, 2021\n" +"Last-Translator: Ben <bzweekhorst@gmail.com>, 2021\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/paperless/teams/115905/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -437,6 +438,10 @@ msgstr "Portugees (Brazilië)" msgid "Italian" msgstr "Italiaans" +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Roemeens" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" From 7ab5dbdee859f7fc96f6d0fdcffa2843f0379b0e Mon Sep 17 00:00:00 2001 From: Simon Taddiken <simon.taddiken@gmail.com> Date: Tue, 2 Mar 2021 09:07:42 +0100 Subject: [PATCH 454/898] Add the possibility to customize the remote user header name Inspired by the discussion here https://github.com/jonaswinkler/paperless-ng/discussions/639#discussion-3242017 it is worthwhile to be able to customize the header name that is used for authentication as its name is not really standardized. --- docs/configuration.rst | 12 +++++++++++- src/paperless/auth.py | 3 +-- src/paperless/settings.py | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index e26180382..d182d589d 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -192,7 +192,17 @@ PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool> applications. Defaults to `false` which disables this feature. - + +PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<strl> + If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to + customize the name of the HTTP header from which the username is extracted. + Values are in terms of + [HttpRequest.META](https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META). + Thus, the configured value must start with `HTTP_` followed by the + normalized actual header name. + + Defaults to `HTTP_REMOTE_USER`. + .. _configuration-ocr: OCR settings diff --git a/src/paperless/auth.py b/src/paperless/auth.py index cd717e56b..3bc6344cd 100644 --- a/src/paperless/auth.py +++ b/src/paperless/auth.py @@ -33,5 +33,4 @@ class HttpRemoteUserMiddleware(RemoteUserMiddleware): """ This class allows authentication via HTTP_REMOTE_USER which is set for example by certain SSO applications. """ - - header = 'HTTP_REMOTE_USER' + header = settings.HTTP_REMOTE_USER_HEADER_NAME diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 8cc12c1ff..3330da19c 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -189,6 +189,7 @@ if AUTO_LOGIN_USERNAME: MIDDLEWARE.insert(_index+1, 'paperless.auth.AutoLoginMiddleware') ENABLE_HTTP_REMOTE_USER = __get_boolean("PAPERLESS_ENABLE_HTTP_REMOTE_USER") +HTTP_REMOTE_USER_HEADER_NAME = os.getenv("PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME", "HTTP_REMOTE_USER") if ENABLE_HTTP_REMOTE_USER: MIDDLEWARE.append( From c84446d7fd4d21f6ea90d69ff32c08cc274f0112 Mon Sep 17 00:00:00 2001 From: Simon Taddiken <simon.taddiken@gmail.com> Date: Tue, 2 Mar 2021 10:21:50 +0100 Subject: [PATCH 455/898] Improve documentation --- docs/configuration.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index d182d589d..7ffab20d7 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -193,10 +193,10 @@ PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool> Defaults to `false` which disables this feature. -PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<strl> +PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str> If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to - customize the name of the HTTP header from which the username is extracted. - Values are in terms of + customize the name of the HTTP header from which the authenticated username + is extracted. Values are in terms of [HttpRequest.META](https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META). Thus, the configured value must start with `HTTP_` followed by the normalized actual header name. From 1e6b0b0a512e45eec33e156e4a365a881eefbb7f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 2 Mar 2021 23:19:06 +0100 Subject: [PATCH 456/898] added remote user auth test --- src/documents/tests/test_auth.py | 66 ++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/documents/tests/test_auth.py diff --git a/src/documents/tests/test_auth.py b/src/documents/tests/test_auth.py new file mode 100644 index 000000000..82b586f7b --- /dev/null +++ b/src/documents/tests/test_auth.py @@ -0,0 +1,66 @@ +from django.contrib.auth.models import User +from django.test import override_settings, Client, modify_settings, TestCase + + +class TestRemoteUserAuthentication(TestCase): + + def test_no_remote_user_auth(self): + client = Client() + + response = client.get("/api/documents/") + self.assertEqual(response.status_code, 401) + + response = client.get("/api/documents/", HTTP_REMOTE_USER="someone") + self.assertEqual(response.status_code, 401) + + response = client.get("/api/documents/", HTTP_X_FORWARDED_USER="someone") + self.assertEqual(response.status_code, 401) + + @modify_settings( + MIDDLEWARE={ + 'append': 'paperless.auth.HttpRemoteUserMiddleware' + }, + AUTHENTICATION_BACKENDS={ + 'prepend': 'django.contrib.auth.backends.RemoteUserBackend' + } + ) + def test_standard_remote_user_auth(self): + client = Client() + + response = client.get("/api/documents/") + self.assertEqual(response.status_code, 401) + + response = client.get("/api/documents/", HTTP_X_FORWARDED_USER="someone") + self.assertEqual(response.status_code, 401) + + self.assertFalse(User.objects.filter(username="someone").exists()) + + response = client.get("/api/documents/", HTTP_REMOTE_USER="someone") + self.assertEqual(response.status_code, 200) + + self.assertTrue(User.objects.filter(username="someone").exists()) + + @modify_settings( + MIDDLEWARE={ + 'append': 'paperless.auth.HttpRemoteUserMiddleware' + }, + AUTHENTICATION_BACKENDS={ + 'prepend': 'django.contrib.auth.backends.RemoteUserBackend' + } + ) + @override_settings(HTTP_REMOTE_USER_HEADER_NAME="HTTP_X_FORWARDED_USER") + def test_custom_remote_user_auth(self): + client = Client() + + response = client.get("/api/documents/") + self.assertEqual(response.status_code, 401) + + response = client.get("/api/documents/", HTTP_REMOTE_USER="someone") + self.assertEqual(response.status_code, 401) + + self.assertFalse(User.objects.filter(username="someone").exists()) + + response = client.get("/api/documents/", HTTP_X_FORWARDED_USER="someone") + self.assertEqual(response.status_code, 200) + + self.assertTrue(User.objects.filter(username="someone").exists()) From 94d7e41efa72615ea1248f49a0b5bfcae014373c Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 3 Mar 2021 07:30:31 +0000 Subject: [PATCH 457/898] Translate /src-ui/messages.xlf in it translation completed for the source file '/src-ui/messages.xlf' on the 'it' language. --- src-ui/src/locale/messages.it.xlf | 266 +++++++++++------------------- 1 file changed, 97 insertions(+), 169 deletions(-) diff --git a/src-ui/src/locale/messages.it.xlf b/src-ui/src/locale/messages.it.xlf index a602079b0..401172fae 100644 --- a/src-ui/src/locale/messages.it.xlf +++ b/src-ui/src/locale/messages.it.xlf @@ -478,7 +478,7 @@ <target>Vuoi eliminare il tag &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> - <context context-type="linenumber">30</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> @@ -590,7 +590,7 @@ <target>La vista &quot;<x equiv-text="savedView.name" id="PH"/>&quot; è stata eliminata. </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Le impostazioni sono state salvate.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Usa lingua di sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Usa il formato data della lingua di visualizzazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Errore durante il salvataggio delle impostazioni sul server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Notifiche</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Viste salvate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Inverti anteptime in modalità notte</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Modifica in blocco</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Mostra dialoghi di conferma</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>L'eliminazione dei documenti chiederà sempre la conferma.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Applica in chiusura</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Elaborazione del documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Notifica quando vengono trovati nuovi documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Notifica quando l'elaborazione del documento viene completata con successo.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Notifica quando l'elaborazione del documento fallisce</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Non mostrare notifiche nella dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>Verranno interrotte tutte le notifiche nella dashboard riguardo lo stato dell'elaborazione dei documenti.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Appare in</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Mostra nella dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>Mostra nella barra laterale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>Nessuna vista salvata.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -990,7 +998,7 @@ <target>Crea nuovo tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">22</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5872175735754226507"> @@ -998,7 +1006,7 @@ <target>Modifica tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">26</context> </context-group> </trans-unit> <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> @@ -1006,7 +1014,7 @@ <target>Tag di arrivo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> @@ -1014,7 +1022,7 @@ <target>I tag di arrivo vengono assegnati automaticamente a tutti i documenti elaborati.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> - <context context-type="linenumber">21</context> + <context context-type="linenumber">13</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6672809941092516947"> @@ -1111,7 +1119,7 @@ <target>Gestisci</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Amministratore</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Informazioni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Documentazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Suggerisci un'idea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,23 @@ <target>Chiudi tutti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titolo</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Titolo & contenuto</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1183,7 +1207,7 @@ <target>Corrispondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1191,7 +1215,7 @@ <target>Senza corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1199,7 +1223,7 @@ <target>Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1207,7 +1231,7 @@ <target>Senza tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1215,7 +1239,7 @@ <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1223,7 +1247,7 @@ <target>Senza alcun tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1231,7 +1255,7 @@ <target>Titolo: <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1239,7 +1263,7 @@ <target>Filtra tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1247,7 +1271,7 @@ <target>Filtra corrispondenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1255,7 +1279,7 @@ <target>Filtra tipi di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1263,7 +1287,7 @@ <target>Ripristina filtri</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -1288,7 +1312,7 @@ <target>Ultimi 7 giorni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">24</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4463380307954693363"> @@ -1296,7 +1320,7 @@ <target>Ultimo mese</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">25</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8697368973702409683"> @@ -1304,7 +1328,7 @@ <target>Ultimi 3 mesi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">36</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3566342898065860218"> @@ -1312,7 +1336,7 @@ <target>Ultimo anno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> @@ -1328,7 +1352,7 @@ <target>Prima</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">38</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> @@ -1829,7 +1853,7 @@ <target>Data non valida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">14</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2807800733729323332"> @@ -1861,7 +1885,7 @@ <target>Inglese (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1893,7 @@ <target>Inglese (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1901,7 @@ <target>Tedesco</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1909,7 @@ <target>Olandese</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1917,7 @@ <target>Francese</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1925,23 @@ <target>Portoghese (Brasile)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="2935232983274991580"> + <source>Italian</source> + <target>Italiano</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Rumeno</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1909,7 +1949,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2052,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Titolo</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Tipo di documento</target> @@ -2092,110 +2124,6 @@ <context context-type="linenumber">23</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="2056433880533904076"> - <source>Light blue</source> - <target>Blu chiaro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="4082253113407591781"> - <source>Blue</source> - <target>Blu</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">7</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1143414876575720034"> - <source>Light green</source> - <target>Verde chiaro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">8</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="119581980963263815"> - <source>Green</source> - <target>Verde</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="3250646524116252719"> - <source>Light red</source> - <target>Rosso chiaro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">10</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1628552745302385832"> - <source>Red </source> - <target>Rosso</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="5479028842846122610"> - <source>Light orange</source> - <target>Arancione chiaro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">12</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="8598918991528773310"> - <source>Orange</source> - <target>Arancione</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">13</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1789283185177957430"> - <source>Light violet</source> - <target>Viola chiaro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">14</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="2682868487071320453"> - <source>Violet</source> - <target>Viola</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">15</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="1449010446077321264"> - <source>Brown</source> - <target>Marrone</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="30300572504753589"> - <source>Black</source> - <target>Nero</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> - <trans-unit datatype="html" id="461048771215121187"> - <source>Light grey</source> - <target>Grigio chiaro</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="4561076822163447092"> <source>Create new item</source> <target>Crea nuovo elemento</target> From fa2a5e356d68cd48d2123cde8bad6d28f0ccbc91 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 3 Mar 2021 07:30:59 +0000 Subject: [PATCH 458/898] Apply translations in it translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'it' language. --- src/locale/it/LC_MESSAGES/django.po | 175 +++++++++++++++------------- 1 file changed, 94 insertions(+), 81 deletions(-) diff --git a/src/locale/it/LC_MESSAGES/django.po b/src/locale/it/LC_MESSAGES/django.po index f3456bed9..c1b29608d 100644 --- a/src/locale/it/LC_MESSAGES/django.po +++ b/src/locale/it/LC_MESSAGES/django.po @@ -7,15 +7,16 @@ # Ioma Taani, 2021 # Jonas Winkler, 2021 # Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021 +# Alex Camilleri <camilleri.alex@gmail.com>, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-24 16:49+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021\n" +"Last-Translator: Alex Camilleri <camilleri.alex@gmail.com>, 2021\n" "Language-Team: Italian (https://www.transifex.com/paperless/teams/115905/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,7 +52,7 @@ msgstr "Parole fuzzy" msgid "Automatic" msgstr "Automatico" -#: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "nome" @@ -68,7 +69,7 @@ msgstr "algoritmo di corrispondenza" msgid "is insensitive" msgstr "non distingue maiuscole e minuscole" -#: documents/models.py:74 documents/models.py:134 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "corrispondente" @@ -76,15 +77,15 @@ msgstr "corrispondente" msgid "correspondents" msgstr "corrispondenti" -#: documents/models.py:97 +#: documents/models.py:81 msgid "color" msgstr "colore" -#: documents/models.py:101 +#: documents/models.py:87 msgid "is inbox tag" msgstr "è tag di arrivo" -#: documents/models.py:103 +#: documents/models.py:89 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." @@ -92,39 +93,39 @@ msgstr "" "Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati " "verranno taggati con questo tag." -#: documents/models.py:108 +#: documents/models.py:94 msgid "tag" msgstr "tag" -#: documents/models.py:109 documents/models.py:165 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "tag" -#: documents/models.py:115 documents/models.py:147 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "tipo di documento" -#: documents/models.py:116 +#: documents/models.py:102 msgid "document types" msgstr "tipi di documento" -#: documents/models.py:124 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Non criptato" -#: documents/models.py:125 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Criptato con GNU Privacy Guard" -#: documents/models.py:138 +#: documents/models.py:124 msgid "title" msgstr "titolo" -#: documents/models.py:151 +#: documents/models.py:137 msgid "content" msgstr "contenuto" -#: documents/models.py:153 +#: documents/models.py:139 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." @@ -132,241 +133,245 @@ msgstr "" "I dati grezzi o solo testo del documento. Questo campo è usato " "principalmente per la ricerca." -#: documents/models.py:158 +#: documents/models.py:144 msgid "mime type" msgstr "tipo mime" -#: documents/models.py:169 +#: documents/models.py:155 msgid "checksum" msgstr "checksum" -#: documents/models.py:173 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "Il checksum del documento originale." -#: documents/models.py:177 +#: documents/models.py:163 msgid "archive checksum" msgstr "checksum dell'archivio" -#: documents/models.py:182 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "Il checksum del documento archiviato." -#: documents/models.py:186 documents/models.py:342 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "creato il" -#: documents/models.py:190 +#: documents/models.py:176 msgid "modified" msgstr "modificato il" -#: documents/models.py:194 +#: documents/models.py:180 msgid "storage type" msgstr "tipo di storage" -#: documents/models.py:202 +#: documents/models.py:188 msgid "added" msgstr "aggiunto il" -#: documents/models.py:206 +#: documents/models.py:192 msgid "filename" msgstr "nome del file" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Nome del file corrente nello storage" -#: documents/models.py:216 +#: documents/models.py:202 msgid "archive filename" msgstr "Nome file in archivio" -#: documents/models.py:222 +#: documents/models.py:208 msgid "Current archive filename in storage" msgstr "Il nome del file nell'archiviazione" -#: documents/models.py:226 +#: documents/models.py:212 msgid "archive serial number" msgstr "numero seriale dell'archivio" -#: documents/models.py:231 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "Posizione di questo documento all'interno dell'archivio fisico." -#: documents/models.py:237 +#: documents/models.py:223 msgid "document" msgstr "documento" -#: documents/models.py:238 +#: documents/models.py:224 msgid "documents" msgstr "documenti" -#: documents/models.py:325 +#: documents/models.py:311 msgid "debug" msgstr "debug" -#: documents/models.py:326 +#: documents/models.py:312 msgid "information" msgstr "informazione" -#: documents/models.py:327 +#: documents/models.py:313 msgid "warning" msgstr "avvertimento" -#: documents/models.py:328 +#: documents/models.py:314 msgid "error" msgstr "errore" -#: documents/models.py:329 +#: documents/models.py:315 msgid "critical" msgstr "critico" -#: documents/models.py:333 +#: documents/models.py:319 msgid "group" msgstr "gruppo" -#: documents/models.py:336 +#: documents/models.py:322 msgid "message" msgstr "messaggio" -#: documents/models.py:339 +#: documents/models.py:325 msgid "level" msgstr "livello" -#: documents/models.py:346 +#: documents/models.py:332 msgid "log" msgstr "log" -#: documents/models.py:347 +#: documents/models.py:333 msgid "logs" msgstr "log" -#: documents/models.py:358 documents/models.py:408 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "vista salvata" -#: documents/models.py:359 +#: documents/models.py:345 msgid "saved views" msgstr "viste salvate" -#: documents/models.py:362 +#: documents/models.py:348 msgid "user" msgstr "utente" -#: documents/models.py:368 +#: documents/models.py:354 msgid "show on dashboard" msgstr "mostra sul cruscotto" -#: documents/models.py:371 +#: documents/models.py:357 msgid "show in sidebar" msgstr "mostra nella barra laterale" -#: documents/models.py:375 +#: documents/models.py:361 msgid "sort field" msgstr "campo di ordinamento" -#: documents/models.py:378 +#: documents/models.py:364 msgid "sort reverse" msgstr "ordine invertito" -#: documents/models.py:384 +#: documents/models.py:370 msgid "title contains" msgstr "il titolo contiene" -#: documents/models.py:385 +#: documents/models.py:371 msgid "content contains" msgstr "il contenuto contiene" -#: documents/models.py:386 +#: documents/models.py:372 msgid "ASN is" msgstr "ASN è" -#: documents/models.py:387 +#: documents/models.py:373 msgid "correspondent is" msgstr "la corrispondenza è" -#: documents/models.py:388 +#: documents/models.py:374 msgid "document type is" msgstr "il tipo di documento è" -#: documents/models.py:389 +#: documents/models.py:375 msgid "is in inbox" msgstr "è in arrivo" -#: documents/models.py:390 +#: documents/models.py:376 msgid "has tag" msgstr "ha etichetta" -#: documents/models.py:391 +#: documents/models.py:377 msgid "has any tag" msgstr "ha qualsiasi etichetta" -#: documents/models.py:392 +#: documents/models.py:378 msgid "created before" msgstr "creato prima del" -#: documents/models.py:393 +#: documents/models.py:379 msgid "created after" msgstr "creato dopo il" -#: documents/models.py:394 +#: documents/models.py:380 msgid "created year is" msgstr "l'anno di creazione è" -#: documents/models.py:395 +#: documents/models.py:381 msgid "created month is" msgstr "il mese di creazione è" -#: documents/models.py:396 +#: documents/models.py:382 msgid "created day is" msgstr "il giorno di creazione è" -#: documents/models.py:397 +#: documents/models.py:383 msgid "added before" msgstr "aggiunto prima del" -#: documents/models.py:398 +#: documents/models.py:384 msgid "added after" msgstr "aggiunto dopo il" -#: documents/models.py:399 +#: documents/models.py:385 msgid "modified before" msgstr "modificato prima del" -#: documents/models.py:400 +#: documents/models.py:386 msgid "modified after" msgstr "modificato dopo" -#: documents/models.py:401 +#: documents/models.py:387 msgid "does not have tag" msgstr "non ha tag" -#: documents/models.py:412 +#: documents/models.py:398 msgid "rule type" msgstr "tipo di regola" -#: documents/models.py:416 +#: documents/models.py:402 msgid "value" msgstr "valore" -#: documents/models.py:422 +#: documents/models.py:408 msgid "filter rule" msgstr "regola filtro" -#: documents/models.py:423 +#: documents/models.py:409 msgid "filter rules" msgstr "regole filtro" -#: documents/serialisers.py:52 +#: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" msgstr "Espressione regolare non valida: %(error)s" -#: documents/serialisers.py:378 +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Colore non valido." + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "Il tipo di file %(type)s non è supportato" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng si sta caricando..." @@ -406,30 +411,38 @@ msgstr "Password" msgid "Sign in" msgstr "Accedi" -#: paperless/settings.py:291 +#: paperless/settings.py:297 msgid "English (US)" msgstr "Inglese (US)" -#: paperless/settings.py:292 +#: paperless/settings.py:298 msgid "English (GB)" msgstr "Inglese (GB)" -#: paperless/settings.py:293 +#: paperless/settings.py:299 msgid "German" msgstr "Tedesco" -#: paperless/settings.py:294 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Olandese" -#: paperless/settings.py:295 +#: paperless/settings.py:301 msgid "French" msgstr "Francese" -#: paperless/settings.py:296 +#: paperless/settings.py:302 msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" +#: paperless/settings.py:303 +msgid "Italian" +msgstr "Italiano" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Rumeno" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" From e4655866f366d45d3679ef6ebd49e2b408dc9d45 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:35:26 +0100 Subject: [PATCH 459/898] fixes #689 --- src/documents/classifier.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 47dd7dfc7..664c00222 100755 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -123,10 +123,11 @@ class DocumentClassifier(object): m.update(y.to_bytes(4, 'little', signed=True)) labels_correspondent.append(y) - tags = [tag.pk for tag in doc.tags.filter( + tags = sorted([tag.pk for tag in doc.tags.filter( matching_algorithm=MatchingModel.MATCH_AUTO - )] - m.update(bytearray(tags)) + )]) + for tag in tags: + m.update(tag.to_bytes(4, 'little', signed=True)) labels_tags.append(tags) if not data: From 904f9efe7d24942b4c4abca3c9d4ce8e4c764d57 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:44:43 +0100 Subject: [PATCH 460/898] fix quoting --- src-ui/src/locale/messages.it.xlf | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.it.xlf b/src-ui/src/locale/messages.it.xlf index 401172fae..b2b49b833 100644 --- a/src-ui/src/locale/messages.it.xlf +++ b/src-ui/src/locale/messages.it.xlf @@ -59,7 +59,7 @@ </trans-unit> <trans-unit datatype="html" id="2155249406916744630"> <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>La vista &quot;<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>&quot; è stata salvata.</target> + <target>La vista "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" è stata salvata.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> @@ -67,7 +67,7 @@ </trans-unit> <trans-unit datatype="html" id="6837554170707123455"> <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>La vista &quot;<x equiv-text="savedView.name" id="PH"/>&quot; è stata creata.</target> + <target>La vista "<x equiv-text="savedView.name" id="PH"/>" è stata creata.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> @@ -131,7 +131,7 @@ </trans-unit> <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Salva &quot;<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>&quot;</target> + <target>Salva "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> @@ -219,7 +219,7 @@ </trans-unit> <trans-unit datatype="html" id="5382975254277698192"> <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Vuoi eliminare il documento &quot;<x equiv-text="this.document.title" id="PH"/>&quot;?</target> + <target>Vuoi eliminare il documento "<x equiv-text="this.document.title" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> @@ -475,7 +475,7 @@ </trans-unit> <trans-unit datatype="html" id="93754014749412887"> <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Vuoi eliminare il tag &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Vuoi eliminare il tag "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> @@ -563,7 +563,7 @@ </trans-unit> <trans-unit datatype="html" id="4990731724078522539"> <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Vuoi eliminare il tipo di documento &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Vuoi eliminare il tipo di documento "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> @@ -587,7 +587,7 @@ </trans-unit> <trans-unit datatype="html" id="5610279464668232148"> <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>La vista &quot;<x equiv-text="savedView.name" id="PH"/>&quot; è stata eliminata. </target> + <target>La vista "<x equiv-text="savedView.name" id="PH"/>" è stata eliminata. </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> @@ -907,7 +907,7 @@ </trans-unit> <trans-unit datatype="html" id="7427874343955308724"> <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Vuoi eliminare il corrispondente &quot;<x equiv-text="object.name" id="PH"/>&quot;?</target> + <target>Vuoi eliminare il corrispondente "<x equiv-text="object.name" id="PH"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> @@ -1075,7 +1075,7 @@ </trans-unit> <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Forse intendevi &quot;<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>&quot;?</target> + <target>Forse intendevi "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> @@ -1421,7 +1421,7 @@ </trans-unit> <trans-unit datatype="html" id="7894972847287473517"> <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot;</target> + <target>"<x equiv-text="items[0].name" id="PH"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> @@ -1429,7 +1429,7 @@ </trans-unit> <trans-unit datatype="html" id="8639884465898458690"> <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>&quot;<x equiv-text="items[0].name" id="PH"/>&quot; e &quot;<x equiv-text="items[1].name" id="PH_1"/>&quot;</target> + <target>"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> @@ -1447,7 +1447,7 @@ </trans-unit> <trans-unit datatype="html" id="1822679894391095557"> <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/>e &quot;<x equiv-text="items[items.length - 1].name" id="PH_1"/>&quot;</target> + <target><x equiv-text="list" id="PH"/>e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> @@ -1464,7 +1464,7 @@ </trans-unit> <trans-unit datatype="html" id="6619516195038467207"> <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione aggiungerà il tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target>Questa operazione aggiungerà il tag "<x equiv-text="tag.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> @@ -1480,7 +1480,7 @@ </trans-unit> <trans-unit datatype="html" id="7181166515756808573"> <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione rimuoverà il tag &quot;<x equiv-text="tag.name" id="PH"/>&quot; da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i. </target> + <target>Questa operazione rimuoverà il tag "<x equiv-text="tag.name" id="PH"/>" da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i. </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> @@ -1512,7 +1512,7 @@ </trans-unit> <trans-unit datatype="html" id="6900893559485781849"> <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione assegnerà il corrispondente &quot;<x equiv-text="correspondent.name" id="PH"/>&quot; a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target>Questa operazione assegnerà il corrispondente "<x equiv-text="correspondent.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> @@ -1536,7 +1536,7 @@ </trans-unit> <trans-unit datatype="html" id="332180123895325027"> <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione assegnerà il tipo di documento &quot;<x equiv-text="documentType.name" id="PH"/>&quot; a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target>Questa operazione assegnerà il tipo di documento "<x equiv-text="documentType.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> From ad175209b39de03c1e8b463f74d19002b1472492 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:55:25 +0100 Subject: [PATCH 461/898] remove test cases #677 --- src/documents/tests/test_auth.py | 66 -------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 src/documents/tests/test_auth.py diff --git a/src/documents/tests/test_auth.py b/src/documents/tests/test_auth.py deleted file mode 100644 index 82b586f7b..000000000 --- a/src/documents/tests/test_auth.py +++ /dev/null @@ -1,66 +0,0 @@ -from django.contrib.auth.models import User -from django.test import override_settings, Client, modify_settings, TestCase - - -class TestRemoteUserAuthentication(TestCase): - - def test_no_remote_user_auth(self): - client = Client() - - response = client.get("/api/documents/") - self.assertEqual(response.status_code, 401) - - response = client.get("/api/documents/", HTTP_REMOTE_USER="someone") - self.assertEqual(response.status_code, 401) - - response = client.get("/api/documents/", HTTP_X_FORWARDED_USER="someone") - self.assertEqual(response.status_code, 401) - - @modify_settings( - MIDDLEWARE={ - 'append': 'paperless.auth.HttpRemoteUserMiddleware' - }, - AUTHENTICATION_BACKENDS={ - 'prepend': 'django.contrib.auth.backends.RemoteUserBackend' - } - ) - def test_standard_remote_user_auth(self): - client = Client() - - response = client.get("/api/documents/") - self.assertEqual(response.status_code, 401) - - response = client.get("/api/documents/", HTTP_X_FORWARDED_USER="someone") - self.assertEqual(response.status_code, 401) - - self.assertFalse(User.objects.filter(username="someone").exists()) - - response = client.get("/api/documents/", HTTP_REMOTE_USER="someone") - self.assertEqual(response.status_code, 200) - - self.assertTrue(User.objects.filter(username="someone").exists()) - - @modify_settings( - MIDDLEWARE={ - 'append': 'paperless.auth.HttpRemoteUserMiddleware' - }, - AUTHENTICATION_BACKENDS={ - 'prepend': 'django.contrib.auth.backends.RemoteUserBackend' - } - ) - @override_settings(HTTP_REMOTE_USER_HEADER_NAME="HTTP_X_FORWARDED_USER") - def test_custom_remote_user_auth(self): - client = Client() - - response = client.get("/api/documents/") - self.assertEqual(response.status_code, 401) - - response = client.get("/api/documents/", HTTP_REMOTE_USER="someone") - self.assertEqual(response.status_code, 401) - - self.assertFalse(User.objects.filter(username="someone").exists()) - - response = client.get("/api/documents/", HTTP_X_FORWARDED_USER="someone") - self.assertEqual(response.status_code, 200) - - self.assertTrue(User.objects.filter(username="someone").exists()) From d73b3b1ac8c3f57cf864591a55ea85391a8d458c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 3 Mar 2021 23:58:53 +0100 Subject: [PATCH 462/898] update docs --- docs/configuration.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/configuration.rst b/docs/configuration.rst index 7ffab20d7..48b09213d 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -191,6 +191,16 @@ PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool> Allows authentication via HTTP_REMOTE_USER which is used by some SSO applications. + .. warning:: + + This will allow authentication by simply adding a ``Remote-User: <username>`` header + to a request. Use with care! You especially *must* ensure that any such header is not + passed from your proxy server to paperless. + + If you're exposing paperless to the internet directly, do not use this. + + Also see the warning `in the official documentation <https://docs.djangoproject.com/en/3.1/howto/auth-remote-user/#configuration>`. + Defaults to `false` which disables this feature. PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str> From bfa4aa7c9816013858ac08d512cacb204ac21a94 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 4 Mar 2021 00:10:15 +0100 Subject: [PATCH 463/898] changelog --- docs/changelog.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 543d9435d..0c8056266 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -18,9 +18,14 @@ This release contains new database migrations. * `BolkoSchreiber <https://github.com/BolkoSchreiber>`_ added an option to disable/enable thumbnail inversion in dark mode. +* Fixed an issue with the auto matching algorithm when more than 256 tags were used. + +* `Simon Taddiken <https://github.com/skuzzle>`_ added the ability to customize the header used for remote user authentication with SSO applications. + * The REST API is versioned from this point onwards. See the documentation about :ref:`api-versioning` for details. + paperless-ng 1.2.1 ################## From 3bead81d8ad6e8695a3a5b566e8949dad0b529fe Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 4 Mar 2021 00:16:24 +0100 Subject: [PATCH 464/898] test case for the migration --- .../tests/test_migration_tag_colors.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/documents/tests/test_migration_tag_colors.py diff --git a/src/documents/tests/test_migration_tag_colors.py b/src/documents/tests/test_migration_tag_colors.py new file mode 100644 index 000000000..2c4b35925 --- /dev/null +++ b/src/documents/tests/test_migration_tag_colors.py @@ -0,0 +1,37 @@ +from documents.tests.utils import DirectoriesMixin, TestMigrations + + +class TestMigrateTagColor(DirectoriesMixin, TestMigrations): + + migrate_from = '1012_fix_archive_files' + migrate_to = '1013_migrate_tag_colour' + + def setUpBeforeMigration(self, apps): + Tag = apps.get_model("documents", "Tag") + self.t1_id = Tag.objects.create(name="tag1").id + self.t2_id = Tag.objects.create(name="tag2", colour=1).id + self.t3_id = Tag.objects.create(name="tag3", colour=5).id + + def testMimeTypesMigrated(self): + Tag = self.apps.get_model('documents', 'Tag') + self.assertEqual(Tag.objects.get(id=self.t1_id).color, "#a6cee3") + self.assertEqual(Tag.objects.get(id=self.t2_id).color, "#a6cee3") + self.assertEqual(Tag.objects.get(id=self.t3_id).color, "#fb9a99") + + +class TestMigrateTagColorBackwards(DirectoriesMixin, TestMigrations): + + migrate_from = '1013_migrate_tag_colour' + migrate_to = '1012_fix_archive_files' + + def setUpBeforeMigration(self, apps): + Tag = apps.get_model("documents", "Tag") + self.t1_id = Tag.objects.create(name="tag1").id + self.t2_id = Tag.objects.create(name="tag2", color="#cab2d6").id + self.t3_id = Tag.objects.create(name="tag3", color="#123456").id + + def testMimeTypesReverted(self): + Tag = self.apps.get_model('documents', 'Tag') + self.assertEqual(Tag.objects.get(id=self.t1_id).colour, 1) + self.assertEqual(Tag.objects.get(id=self.t2_id).colour, 9) + self.assertEqual(Tag.objects.get(id=self.t3_id).colour, 1) From 017a4c3c3c9a390c8ae825fc6d417e628ba6e6ce Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 3 Mar 2021 20:42:50 -0800 Subject: [PATCH 465/898] Fix double scrollbar, I think --- .../document-card-large/document-card-large.component.html | 4 +--- .../document-card-small/document-card-small.component.html | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index fd68996fa..098eff71c 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -53,9 +53,7 @@ </a> <ng-template #previewContent> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <div class="preview"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </div> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 1881a85ee..f0f3f8634 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -47,9 +47,7 @@ </a> <ng-template #previewContent> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <div class="preview"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </div> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> From dcaaa917c5dfb181311d24cbaeb843fa0971ce68 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 3 Mar 2021 20:49:02 -0800 Subject: [PATCH 466/898] Refactor popover css to single file --- .../document-card-large.component.scss | 23 ------------------- .../document-card-large.component.ts | 2 +- .../document-card-small.component.scss | 23 ------------------- .../document-card-small.component.ts | 2 +- .../popover-preview/popover-preview.scss | 22 ++++++++++++++++++ 5 files changed, 24 insertions(+), 48 deletions(-) create mode 100644 src-ui/src/app/components/document-list/popover-preview/popover-preview.scss diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index cf4e876d4..c49de93b5 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -37,26 +37,3 @@ .doc-img-background-selected { background-color: $primaryFaded; } - -::ng-deep .popover { - max-width: 40rem; - - .preview { - min-width: 25rem; - min-height: 15rem; - max-height: 35rem; - overflow-y: scroll; - } - - .spinner-border { - position: absolute; - top: 4rem; - left: calc(50% - 0.5rem); - z-index: 0; - } -} - -.popover-hidden ::ng-deep .popover { - opacity: 0; - pointer-events: none; -} diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index d5168476b..5ae24493b 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -8,7 +8,7 @@ import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-document-card-large', templateUrl: './document-card-large.component.html', - styleUrls: ['./document-card-large.component.scss'] + styleUrls: ['./document-card-large.component.scss', '../popover-preview/popover-preview.scss'] }) export class DocumentCardLargeComponent implements OnInit { diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index c8f4a17c9..cbe8fa6f6 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -34,26 +34,3 @@ .doc-img-background-selected { background-color: $primaryFaded; } - -::ng-deep .popover { - max-width: 40rem; - - .preview { - min-width: 25rem; - min-height: 15rem; - max-height: 35rem; - overflow-y: scroll; - } - - .spinner-border { - position: absolute; - top: 4rem; - left: calc(50% - 0.5rem); - z-index: 0; - } -} - -.popover-hidden ::ng-deep .popover { - opacity: 0; - pointer-events: none; -} diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index cd88143e1..3e03f5e62 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -8,7 +8,7 @@ import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-document-card-small', templateUrl: './document-card-small.component.html', - styleUrls: ['./document-card-small.component.scss'] + styleUrls: ['./document-card-small.component.scss', '../popover-preview/popover-preview.scss'] }) export class DocumentCardSmallComponent implements OnInit { diff --git a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss new file mode 100644 index 000000000..b88c308d2 --- /dev/null +++ b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss @@ -0,0 +1,22 @@ +::ng-deep .popover { + max-width: 40rem; + + .preview { + min-width: 25rem; + min-height: 15rem; + max-height: 35rem; + overflow-y: scroll; + } + + .spinner-border { + position: absolute; + top: 4rem; + left: calc(50% - 0.5rem); + z-index: 0; + } +} + + ::ng-deep .popover-hidden .popover { + opacity: 0; + pointer-events: none; +} From a740d11c21c01b005d02e6b1711748614a2c7c6a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 3 Mar 2021 20:49:14 -0800 Subject: [PATCH 467/898] Larger popover preview size --- .../document-list/popover-preview/popover-preview.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss index b88c308d2..d232930c2 100644 --- a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss +++ b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss @@ -2,8 +2,8 @@ max-width: 40rem; .preview { - min-width: 25rem; - min-height: 15rem; + min-width: 30rem; + min-height: 18rem; max-height: 35rem; overflow-y: scroll; } From c9a90e69408448fdd8459f858b223395baefdfbe Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com> Date: Wed, 3 Mar 2021 21:14:24 -0800 Subject: [PATCH 468/898] Simplify preview tooltip since its delayed --- .../document-card-large/document-card-large.component.html | 2 +- .../document-card-small/document-card-small.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 098eff71c..1da9cb2d7 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -43,7 +43,7 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> <span class="d-block d-md-inline" i18n>Edit</span> </a> - <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" title="Hover to preview, click to view in browser" i18n-title + <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" title="Click to view in browser" i18n-title [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index f0f3f8634..605ccccec 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -37,7 +37,7 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> </a> - <a [href]="previewUrl" target="_blank" class="btn btn-sm btn-outline-secondary" title="Hover to preview, click to view in browser" i18n-title + <a [href]="previewUrl" target="_blank" class="btn btn-sm btn-outline-secondary" title="Click to view in browser" i18n-title [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> From 4446eedc1a35d01d0d12077ba91e57906831cd05 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Thu, 4 Mar 2021 10:25:24 +0000 Subject: [PATCH 469/898] Translate /src-ui/messages.xlf in nl_NL translation completed for the source file '/src-ui/messages.xlf' on the 'nl_NL' language. --- src-ui/src/locale/messages.nl_NL.xlf | 134 ++++++++++++++++----------- 1 file changed, 79 insertions(+), 55 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 2a2c1eaee..354b14391 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -590,7 +590,7 @@ <target>Opgeslagen view "<x equiv-text="savedView.name" id="PH"/>" verwijderd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Instellingen succesvol opgeslagen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Gebruik de systeemtaal</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Datumopmaak van weergavetaal gebruiken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Meldingen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Opgeslagen views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Toon negatief van previews in nachtmodus</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Massabewerking</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Toon dialoogvenster ter bevestiging</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>Er zal altijd om bevestiging gevraagd worden voor het verwijderen van documenten.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Toepassen bij het sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Verwerking van documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Toon meldingen wanneer nieuwe documenten worden gedetecteerd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Toon een melding wanneer documenten met succes zijn verwerkt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Toon meldingen wanneer het verwerken van documenten faalt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Onderdruk meldingen op het dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>Dit verbergt alle statusberichten op het dashboard die met het verwerken van documenten te maken hebben.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Komt voor bij</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Toon op het dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>Toon in de zijbalk</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>Geen opgeslagen views gedefinieerd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1111,7 +1119,7 @@ <target>Beheren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Beheer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Informatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Handleiding</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Ideeënbus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,23 @@ <target>Alles sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Titel</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Titel en inhoud</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1183,7 +1207,7 @@ <target>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1191,7 +1215,7 @@ <target>Zonder correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1199,7 +1223,7 @@ <target>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1207,7 +1231,7 @@ <target>Zonder documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1215,7 +1239,7 @@ <target>Etiket: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1223,7 +1247,7 @@ <target>Zonder enig etiket</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1231,7 +1255,7 @@ <target>Titel: <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1239,7 +1263,7 @@ <target>Etiketten filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1247,7 +1271,7 @@ <target>Correspondenten filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1255,7 +1279,7 @@ <target>Documenttypes filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1263,7 +1287,7 @@ <target>Filters terug zetten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -1861,7 +1885,7 @@ <target>Engels (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1893,7 @@ <target>Engels (Brits)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1901,7 @@ <target>Duits</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1909,7 @@ <target>Nederlands</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1917,7 @@ <target>Frans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1925,7 @@ <target>Portugees (Brazilië)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2935232983274991580"> @@ -1909,7 +1933,15 @@ <target>Italiaans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Roemeens</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1917,7 +1949,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2060,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Titel</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Documenttype</target> From 898fa2a85a23699b90e6e72dbe2b44e558468298 Mon Sep 17 00:00:00 2001 From: Stelian Iancu <stelian.iancu@gmail.com> Date: Thu, 4 Mar 2021 16:26:03 +0100 Subject: [PATCH 470/898] Postgres won't run without a password. --- scripts/start_services.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start_services.sh b/scripts/start_services.sh index cbab7ac9e..e2fc740a4 100755 --- a/scripts/start_services.sh +++ b/scripts/start_services.sh @@ -1,4 +1,4 @@ -docker run -p 5432:5432 -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13 +docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13 docker run -d -p 6379:6379 redis:latest docker run -p 3000:3000 -d thecodingmachine/gotenberg docker run -p 9998:9998 -d apache/tika From 79e610501ed2814f314e1dc718bb5db3024db3b8 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 5 Mar 2021 08:36:30 +0000 Subject: [PATCH 471/898] Apply translations in en_GB translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po' on the 'en_GB' language. --- src/locale/en_GB/LC_MESSAGES/django.po | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 7e775cc08..ee7f2800e 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-26 12:56+0100\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" "PO-Revision-Date: 2021-02-16 18:37+0000\n" "Last-Translator: Jonas Winkler, 2021\n" "Language-Team: English (United Kingdom) (https://www.transifex.com/paperless/teams/115905/en_GB/)\n" @@ -437,6 +437,10 @@ msgstr "Portuguese (Brazil)" msgid "Italian" msgstr "Italian" +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "Romanian" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" From 1012430835745a711071014c437312024f5d2efd Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Fri, 5 Mar 2021 08:36:32 +0000 Subject: [PATCH 472/898] Translate /src-ui/messages.xlf in en_GB translation completed for the source file '/src-ui/messages.xlf' on the 'en_GB' language. --- src-ui/src/locale/messages.en_GB.xlf | 134 ++++++++++++++++----------- 1 file changed, 79 insertions(+), 55 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 4e3f0eccf..b4164555f 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -590,7 +590,7 @@ <target>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">68</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5647210819299459618"> @@ -598,7 +598,7 @@ <target>Settings saved successfully.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6839066544204061364"> @@ -606,7 +606,7 @@ <target>Use system language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7729897675462249787"> @@ -614,7 +614,7 @@ <target>Use date format of display language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8488620293789898901"> @@ -622,7 +622,7 @@ <target>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> @@ -646,7 +646,7 @@ <target>Notifications</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> @@ -654,7 +654,7 @@ <target>Saved views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">133</context> + <context context-type="linenumber">134</context> </context-group> </trans-unit> <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> @@ -777,12 +777,20 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <source>Invert thumbnails in dark mode</source> + <target>Invert thumbnails in dark mode</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> <source>Bulk editing</source> <target>Bulk editing</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> @@ -790,7 +798,7 @@ <target>Show confirmation dialogs</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> @@ -798,7 +806,7 @@ <target>Deleting documents will always ask for confirmation.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> @@ -806,7 +814,7 @@ <target>Apply on close</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">108</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> @@ -814,7 +822,7 @@ <target>Document processing</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">118</context> + <context context-type="linenumber">119</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> @@ -822,7 +830,7 @@ <target>Show notifications when new documents are detected</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">122</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> @@ -830,7 +838,7 @@ <target>Show notifications when document processing completes successfully</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">124</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> @@ -838,7 +846,7 @@ <target>Show notifications when document processing fails</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">124</context> + <context context-type="linenumber">125</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> @@ -846,7 +854,7 @@ <target>Suppress notifications on dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> @@ -854,7 +862,7 @@ <target>This will suppress all messages about document processing status on the dashboard.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">125</context> + <context context-type="linenumber">126</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> @@ -862,7 +870,7 @@ <target>Appears on</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">145</context> + <context context-type="linenumber">146</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> @@ -870,7 +878,7 @@ <target>Show on dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">148</context> + <context context-type="linenumber">149</context> </context-group> </trans-unit> <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> @@ -878,7 +886,7 @@ <target>Show in sidebar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">152</context> + <context context-type="linenumber">153</context> </context-group> </trans-unit> <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> @@ -886,7 +894,7 @@ <target>No saved views defined.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">163</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> @@ -1111,7 +1119,7 @@ <target>Manage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">107</context> + <context context-type="linenumber">112</context> </context-group> </trans-unit> <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> @@ -1119,7 +1127,7 @@ <target>Admin</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">149</context> + <context context-type="linenumber">154</context> </context-group> </trans-unit> <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> @@ -1127,7 +1135,7 @@ <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">155</context> + <context context-type="linenumber">160</context> </context-group> </trans-unit> <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> @@ -1135,7 +1143,7 @@ <target>Documentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">162</context> + <context context-type="linenumber">167</context> </context-group> </trans-unit> <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> @@ -1143,7 +1151,7 @@ <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">170</context> + <context context-type="linenumber">175</context> </context-group> </trans-unit> <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> @@ -1151,7 +1159,7 @@ <target>Suggest an idea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">176</context> + <context context-type="linenumber">181</context> </context-group> </trans-unit> <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> @@ -1175,7 +1183,23 @@ <target>Close all</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> - <context context-type="linenumber">101</context> + <context context-type="linenumber">106</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="5701618810648052610"> + <source>Title</source> + <target>Title</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="3100631071441658964"> + <source>Title & content</source> + <target>Title & content</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> </context-group> </trans-unit> <trans-unit datatype="html" id="5195932016807797291"> @@ -1183,7 +1207,7 @@ <target>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">29</context> + <context context-type="linenumber">32</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8170755470576301659"> @@ -1191,7 +1215,7 @@ <target>Without correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">31</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8705701325879965907"> @@ -1199,7 +1223,7 @@ <target>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">36</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4362173610367509215"> @@ -1207,7 +1231,7 @@ <target>Without document type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">38</context> + <context context-type="linenumber">41</context> </context-group> </trans-unit> <trans-unit datatype="html" id="8180755793012580465"> @@ -1215,7 +1239,7 @@ <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">45</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6494566478302448576"> @@ -1223,7 +1247,7 @@ <target>Without any tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">49</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6523384805359286307"> @@ -1231,7 +1255,7 @@ <target>Title: <x equiv-text="rule.value" id="PH"/></target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">53</context> </context-group> </trans-unit> <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> @@ -1239,7 +1263,7 @@ <target>Filter tags</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">12</context> + <context context-type="linenumber">20</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> @@ -1247,7 +1271,7 @@ <target>Filter correspondents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">28</context> </context-group> </trans-unit> <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> @@ -1255,7 +1279,7 @@ <target>Filter document types</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">27</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> @@ -1263,7 +1287,7 @@ <target>Reset filters</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7593728289020204896"> @@ -1861,7 +1885,7 @@ <target>English (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit datatype="html" id="6987083569809053351"> @@ -1869,7 +1893,7 @@ <target>English (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">89</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit datatype="html" id="1858110241312746425"> @@ -1877,7 +1901,7 @@ <target>German</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">90</context> + <context context-type="linenumber">92</context> </context-group> </trans-unit> <trans-unit datatype="html" id="3071065188816255493"> @@ -1885,7 +1909,7 @@ <target>Dutch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">93</context> </context-group> </trans-unit> <trans-unit datatype="html" id="7633754075223722162"> @@ -1893,7 +1917,7 @@ <target>French</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">92</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit datatype="html" id="9184513005098760425"> @@ -1901,7 +1925,7 @@ <target>Portuguese (Brazil)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">93</context> + <context context-type="linenumber">95</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2935232983274991580"> @@ -1909,7 +1933,15 @@ <target>Italian</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">94</context> + <context context-type="linenumber">96</context> + </context-group> + </trans-unit> + <trans-unit datatype="html" id="8118856427047826368"> + <source>Romanian</source> + <target>Romanian</target> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit datatype="html" id="4912706592792948707"> @@ -1917,7 +1949,7 @@ <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">102</context> </context-group> </trans-unit> <trans-unit datatype="html" id="2119857572761283468"> @@ -2060,14 +2092,6 @@ <context context-type="linenumber">18</context> </context-group> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> - <source>Title</source> - <target>Title</target> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">19</context> - </context-group> - </trans-unit> <trans-unit datatype="html" id="5066119607229701477"> <source>Document type</source> <target>Document type</target> From cbb195a5602160a38d99350ff59147c8b0579995 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 5 Mar 2021 23:19:44 +0100 Subject: [PATCH 473/898] Revert "Merge pull request #628 from shamoon/feature/popover-previews" This reverts commit 8da15215087e4b7d605dc7fd32985fb5a656ff5d, reversing changes made to a7846925b1892c7c1148723b559135bc0fd7e47d. --- src-ui/package.json | 1 + src-ui/src/app/app.module.ts | 2 + .../document-detail.component.html | 17 ++++++- .../document-detail.component.ts | 12 +++++ .../document-card-large.component.html | 15 ++---- .../document-card-large.component.ts | 47 ++---------------- .../document-card-small.component.html | 14 +----- .../document-card-small.component.ts | 48 ++----------------- .../document-list.component.html | 2 +- .../popover-preview/popover-preview.scss | 22 --------- .../manage/settings/settings.component.html | 15 +++++- .../manage/settings/settings.component.ts | 2 + src-ui/src/app/services/settings.service.ts | 2 + src-ui/src/theme_dark.scss | 23 --------- 14 files changed, 61 insertions(+), 161 deletions(-) delete mode 100644 src-ui/src/app/components/document-list/popover-preview/popover-preview.scss diff --git a/src-ui/package.json b/src-ui/package.json index b005d843a..595228501 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -25,6 +25,7 @@ "bootstrap": "^4.5.0", "file-saver": "^2.0.5", "ng-bootstrap": "^1.6.3", + "ng2-pdf-viewer": "^6.3.2", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^10.0.0", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index dc8b185ea..be7ea2d0b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -47,6 +47,7 @@ import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-v import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'; import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'; import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'; +import { PdfViewerModule } from 'ng2-pdf-viewer'; import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component'; import { YesNoPipe } from './pipes/yes-no.pipe'; import { FileSizePipe } from './pipes/file-size.pipe'; @@ -143,6 +144,7 @@ registerLocaleData(localeRo) ReactiveFormsModule, NgxFileDropModule, InfiniteScrollModule, + PdfViewerModule, NgSelectModule, ColorSliderModule ], diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 79215c51c..f9b87aee3 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -1,4 +1,14 @@ <app-page-header [(title)]="title"> + <div class="input-group input-group-sm mr-5 d-none d-md-flex" *ngIf="getContentType() == 'application/pdf' && !useNativePdfViewer"> + <div class="input-group-prepend"> + <div class="input-group-text" i18n>Page</div> + </div> + <input class="form-control flex-grow-0 w-auto" type="number" min="1" [max]="previewNumPages" [(ngModel)]="previewCurrentPage" /> + <div class="input-group-append"> + <div class="input-group-text" i18n>of {{previewNumPages}}</div> + </div> + </div> + <button type="button" class="btn btn-sm btn-outline-danger mr-2 ml-auto" (click)="delete()"> <svg class="buttonicon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#trash" /> @@ -125,7 +135,12 @@ <div class="col-md-6 col-xl-8 mb-3"> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview-sticky" width="100%"></object> + <div class="preview-sticky pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> + <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> + </div> + <ng-template #nativePdfViewer> + <object [data]="previewUrl | safe" type="application/pdf" class="preview-sticky" width="100%"></object> + </ng-template> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview-sticky" width="100%"></object> diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 27360a811..af98a6f7f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -15,6 +15,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'; import { CorrespondentEditDialogComponent } from '../manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component'; import { DocumentTypeEditDialogComponent } from '../manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component'; +import { PDFDocumentProxy } from 'ng2-pdf-viewer'; import { ToastService } from 'src/app/services/toast.service'; import { TextComponent } from '../common/input/text/text.component'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @@ -60,6 +61,9 @@ export class DocumentDetailComponent implements OnInit { tags: new FormControl([]) }) + previewCurrentPage: number = 1 + previewNumPages: number = 1 + constructor( private documentsService: DocumentService, private route: ActivatedRoute, @@ -73,6 +77,10 @@ export class DocumentDetailComponent implements OnInit { private toastService: ToastService, private settings: SettingsService) { } + get useNativePdfViewer(): boolean { + return this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER) + } + getContentType() { return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type } @@ -218,4 +226,8 @@ export class DocumentDetailComponent implements OnInit { return this.documentListViewService.hasNext(this.documentId) } + pdfPreviewLoaded(pdf: PDFDocumentProxy) { + this.previewNumPages = pdf.numPages + } + } diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 71dac6a57..e1ad87bcc 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -1,4 +1,4 @@ -<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> +<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable"> <div class="row no-gutters"> <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left" [class.inverted]="getIsThumbInverted()"> @@ -43,28 +43,19 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> <span class="d-block d-md-inline" i18n>Edit</span> </a> - <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" title="Click to view in browser" i18n-title - [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" - autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> + <a class="btn btn-sm btn-outline-secondary" [href]="getPreviewUrl()"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> <span class="d-block d-md-inline" i18n>View</span> </a> - <ng-template #previewContent> - <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </ng-container> - <ng-container *ngIf="getContentType() == 'text/plain'"> - <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> - </ng-container> - </ng-template> <a class="btn btn-sm btn-outline-secondary" [href]="getDownloadUrl()"> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/> <path fill-rule="evenodd" d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/> </svg> <span class="d-block d-md-inline" i18n>Download</span> </a> + </div> <div *ngIf="searchScore" class="d-flex align-items-center ml-md-auto mt-2 mt-md-0"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index bf42c4235..ae68f5b60 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -1,15 +1,13 @@ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; -import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-document-card-large', templateUrl: './document-card-large.component.html', - styleUrls: ['./document-card-large.component.scss', '../popover-preview/popover-preview.scss'] + styleUrls: ['./document-card-large.component.scss'] }) export class DocumentCardLargeComponent implements OnInit { @@ -43,13 +41,6 @@ export class DocumentCardLargeComponent implements OnInit { @Input() searchScore: number - @ViewChild('popover') popover: NgbPopover - - mouseOnPreview = false - popoverHidden = true - - metadata: PaperlessDocumentMetadata - get searchScoreClass() { if (this.searchScore > 0.7) { return "success" @@ -61,9 +52,6 @@ export class DocumentCardLargeComponent implements OnInit { } ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { @@ -91,36 +79,7 @@ export class DocumentCardLargeComponent implements OnInit { return this.documentService.getDownloadUrl(this.document.id) } - get previewUrl() { + getPreviewUrl() { return this.documentService.getPreviewUrl(this.document.id) } - - getContentType() { - return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type - } - - mouseEnterPreview() { - this.mouseOnPreview = true - if (!this.popover.isOpen()) { - // we're going to open but hide to pre-load content during hover delay - this.popover.open() - this.popoverHidden = true - setTimeout(() => { - if (this.mouseOnPreview) { - // show popover - this.popoverHidden = false - } else { - this.popover.close() - } - }, 600); - } - } - - mouseLeavePreview() { - this.mouseOnPreview = false - } - - mouseLeaveCard() { - this.popover.close() - } } diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 1dde0c9d4..862b0ad22 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -1,5 +1,5 @@ <div class="col p-2 h-100"> - <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> + <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected"> <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> <img class="card-img doc-img rounded-top" [class.inverted]="getIsThumbInverted()" [src]="getThumbUrl()"> @@ -37,22 +37,12 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> </a> - <a [href]="previewUrl" target="_blank" class="btn btn-sm btn-outline-secondary" title="Click to view in browser" i18n-title - [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" - autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> + <a [href]="getPreviewUrl()" class="btn btn-sm btn-outline-secondary" title="View in browser" i18n-title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> </a> - <ng-template #previewContent> - <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </ng-container> - <ng-container *ngIf="getContentType() == 'text/plain'"> - <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> - </ng-container> - </ng-template> <a [href]="getDownloadUrl()" class="btn btn-sm btn-outline-secondary" title="Download" (click)="$event.stopPropagation()" i18n-title> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 033abab27..95c01dcec 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -1,15 +1,13 @@ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { map } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; -import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-document-card-small', templateUrl: './document-card-small.component.html', - styleUrls: ['./document-card-small.component.scss', '../popover-preview/popover-preview.scss'] + styleUrls: ['./document-card-small.component.scss'] }) export class DocumentCardSmallComponent implements OnInit { @@ -17,7 +15,7 @@ export class DocumentCardSmallComponent implements OnInit { @Input() selected = false - + @Output() toggleSelected = new EventEmitter() @@ -32,17 +30,7 @@ export class DocumentCardSmallComponent implements OnInit { moreTags: number = null - @ViewChild('popover') popover: NgbPopover - - mouseOnPreview = false - popoverHidden = true - - metadata: PaperlessDocumentMetadata - ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { @@ -57,7 +45,7 @@ export class DocumentCardSmallComponent implements OnInit { return this.documentService.getDownloadUrl(this.document.id) } - get previewUrl() { + getPreviewUrl() { return this.documentService.getPreviewUrl(this.document.id) } @@ -74,32 +62,4 @@ export class DocumentCardSmallComponent implements OnInit { ) } - getContentType() { - return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type - } - - mouseEnterPreview() { - this.mouseOnPreview = true - if (!this.popover.isOpen()) { - // we're going to open but hide to pre-load content during hover delay - this.popover.open() - this.popoverHidden = true - setTimeout(() => { - if (this.mouseOnPreview) { - // show popover - this.popoverHidden = false - } else { - this.popover.close() - } - }, 600); - } - } - - mouseLeavePreview() { - this.mouseOnPreview = false - } - - mouseLeaveCard() { - this.popover.close() - } } diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index e289c607e..75a9804a2 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -170,5 +170,5 @@ </table> <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> - <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> + <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> </div> diff --git a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss deleted file mode 100644 index d232930c2..000000000 --- a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss +++ /dev/null @@ -1,22 +0,0 @@ -::ng-deep .popover { - max-width: 40rem; - - .preview { - min-width: 30rem; - min-height: 18rem; - max-height: 35rem; - overflow-y: scroll; - } - - .spinner-border { - position: absolute; - top: 4rem; - left: calc(50% - 0.5rem); - z-index: 0; - } -} - - ::ng-deep .popover-hidden .popover { - opacity: 0; - pointer-events: none; -} diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 73b3b2b0d..231c4e82f 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -78,6 +78,17 @@ </div> </div> + <div class="form-row form-group"> + <div class="col-md-3 col-form-label"> + <span i18n>Document editor</span> + </div> + <div class="col"> + + <app-input-check i18n-title title="Use PDF viewer provided by the browser" i18n-hint hint="This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName="useNativePdfViewer"></app-input-check> + + </div> + </div> + <div class="form-row form-group"> <div class="col-md-3 col-form-label"> <span i18n>Dark mode</span> @@ -100,11 +111,11 @@ </ng-template> </li> - + <li [ngbNavItem]="2"> <a ngbNavLink i18n>Notifications</a> <ng-template ngbNavContent> - + <h4 i18n>Document processing</h4> <div class="form-row form-group"> diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 0933c2714..ab71b1028 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -22,6 +22,7 @@ export class SettingsComponent implements OnInit { 'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), 'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), 'darkModeInvertThumbs': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)), + 'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), 'savedViews': this.savedViewGroup, 'displayLanguage': new FormControl(this.settings.getLanguage()), 'dateLocale': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_LOCALE)), @@ -75,6 +76,7 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) this.settings.set(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, (this.settingsForm.value.darkModeInvertThumbs == true).toString()) + this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, this.settingsForm.value.notificationsConsumerNewDocument) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 01035c2bf..8810cd653 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -27,6 +27,7 @@ export const SETTINGS_KEYS = { DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system', DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', DARK_MODE_THUMB_INVERTED: 'general-settings:dark-mode:thumb-inverted', + USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', DATE_LOCALE: 'general-settings:date-display:date-locale', DATE_FORMAT: 'general-settings:date-display:date-format', NOTIFICATIONS_CONSUMER_NEW_DOCUMENT: 'general-settings:notifications:consumer-new-documents', @@ -42,6 +43,7 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: true}, + {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, type: "boolean", default: true}, diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index f3336cc1a..0be25026b 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -1,7 +1,6 @@ $primary-dark-mode: #45973a; $danger-dark-mode: #b71631; $bg-dark-mode: #161618; -$bg-dark-mode-accent: #21262d; $bg-light-dark-mode: #1c1c1f; $text-color-dark-mode: #abb2bf; $text-color-dark-mode-accent: lighten($text-color-dark-mode, 10%); @@ -385,28 +384,6 @@ $border-color-dark-mode: #47494f; background-color: darken($primary-dark-mode, 5%) !important; } - .popover { - .popover-header, - .popover-body { - background-color: $bg-dark-mode-accent; - border-color: $border-color-dark-mode; - } - } - - $placements: 'top', 'right', 'bottom', 'left'; - - @each $placement in $placements { - .bs-popover-#{$placement} > .arrow::after, - .bs-popover-auto[x-placement^=#{$placement}] > .arrow::after { - border-#{$placement}-color: $bg-dark-mode-accent; - } - } - - .bs-popover-bottom .popover-header::before, - .bs-popover-auto[x-placement^=bottom] .popover-header::before { - border-bottom-color: $bg-dark-mode-accent; - } - .ngb-dp-header, .ngb-dp-weekdays, .ngb-dp-month { From 73207aa074d0cbdf7f15bca09568df7a672550d7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 5 Mar 2021 23:36:09 +0100 Subject: [PATCH 474/898] dark mode for color picker --- src-ui/src/theme_dark.scss | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 0be25026b..9419974f2 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -1,6 +1,7 @@ $primary-dark-mode: #45973a; $danger-dark-mode: #b71631; $bg-dark-mode: #161618; +$bg-dark-mode-accent: #21262d; $bg-light-dark-mode: #1c1c1f; $text-color-dark-mode: #abb2bf; $text-color-dark-mode-accent: lighten($text-color-dark-mode, 10%); @@ -384,6 +385,28 @@ $border-color-dark-mode: #47494f; background-color: darken($primary-dark-mode, 5%) !important; } + .popover { + .popover-header, + .popover-body { + background-color: $bg-dark-mode-accent; + border-color: $border-color-dark-mode; + } + } + + $placements: 'top', 'right', 'bottom', 'left'; + + @each $placement in $placements { + .bs-popover-#{$placement} > .arrow::after, + .bs-popover-auto[x-placement^=#{$placement}] > .arrow::after { + border-#{$placement}-color: $bg-dark-mode-accent; + } + } + + .bs-popover-bottom .popover-header::before, + .bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: $bg-dark-mode-accent; + } + .ngb-dp-header, .ngb-dp-weekdays, .ngb-dp-month { From 05513edb20821a107e41846d64965f17b9e34da9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 11:47:11 +0100 Subject: [PATCH 475/898] instructions on building the docker image --- docs/extending.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/extending.rst b/docs/extending.rst index 54a0d061e..5393b941c 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -269,6 +269,23 @@ this is how you do it: This will build the HTML documentation, and put the resulting files in the ``_build/html`` directory. +Building the Docker image +========================= + +Building the docker image from source requires the following two steps: + +1. Build the front end. + + .. code:: shell-session + + ./compile-frontend.sh + +2. Build the docker image. + + .. code:: shell-session + + docker build . -t <your-tag> + Extending Paperless =================== From 145b05ba5408b2e84019b93e21ccb1a666a155eb Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 12:00:58 +0100 Subject: [PATCH 476/898] fix closing all documents from sidebar --- src-ui/src/app/components/app-frame/app-frame.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index c59bc3e0a..e17e21e03 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -99,7 +99,7 @@ </span> </a> </li> - <li class="nav-item w-100" *ngIf="openDocuments.length > 1"> + <li class="nav-item w-100" *ngIf="openDocuments.length >= 1"> <a class="nav-link text-truncate" [routerLink]="" (click)="closeAll()"> <svg class="sidebaricon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#x"/> From 7d38c67f7da0aef2ebb11adc325b7a92036f32e9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 12:08:52 +0100 Subject: [PATCH 477/898] fix typo --- docs/extending.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/extending.rst b/docs/extending.rst index 5393b941c..bceeacfd7 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -174,7 +174,7 @@ Front end localization * The translated strings need to be placed in the "src-ui/src/locale/" folder. * In order to extract added or changed strings from the source files, call ``ng xi18n --ivy``. -Adding new languages requires adding the translated files in the "src-ui/src/locale/" fodler and adjusting a couple files. +Adding new languages requires adding the translated files in the "src-ui/src/locale/" folder and adjusting a couple files. 1. Adjust "src-ui/angular.json": From 688d8898b42c9eafdad2fbcf0f9d369ca9859b14 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 12:28:41 +0100 Subject: [PATCH 478/898] documentation --- docs/administration.rst | 2 +- docs/changelog.rst | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index 19ab1e73f..5d6367277 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -193,7 +193,7 @@ This table lists the compatible versions for each database migration number. +------------------+-----------------+ | 1012 | 1.1.0 - 1.2.1 | +------------------+-----------------+ -| 1013 | 1.3.0 - current | +| 1014 | 1.3.0 - current | +------------------+-----------------+ Execute the following management command to migrate your database: diff --git a/docs/changelog.rst b/docs/changelog.rst index 0c8056266..a1686e48b 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,20 +10,23 @@ paperless-ng 1.3.0 This release contains new database migrations. -* Added a color picker for tag colors. +* Changes -* Added translations into Italian and Romanian. Thank you! + * The REST API is versioned from this point onwards. This will allow me to make changes without breaking existing clients. See the documentation about :ref:`api-versioning` for details. -* Close individual documents from the sidebar. + * Added a color picker for tag colors. -* `BolkoSchreiber <https://github.com/BolkoSchreiber>`_ added an option to disable/enable thumbnail inversion in dark mode. + * Added translations into Italian and Romanian. Thank you! -* Fixed an issue with the auto matching algorithm when more than 256 tags were used. + * Close individual documents from the sidebar. Thanks to `Michael Shamoon`_. -* `Simon Taddiken <https://github.com/skuzzle>`_ added the ability to customize the header used for remote user authentication with SSO applications. + * `BolkoSchreiber <https://github.com/BolkoSchreiber>`_ added an option to disable/enable thumbnail inversion in dark mode. -* The REST API is versioned from this point onwards. See the documentation about :ref:`api-versioning` for details. + * `Simon Taddiken <https://github.com/skuzzle>`_ added the ability to customize the header used for remote user authentication with SSO applications. +* Bug fixes + + * Fixed an issue with the auto matching algorithm when more than 256 tags were used. paperless-ng 1.2.1 From d70df4367e07dbeac0b649b5377ce71c6db2eaf8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 12:41:59 +0100 Subject: [PATCH 479/898] added a test case for title_content filter --- src/documents/tests/test_api.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 770562ba8..853131db2 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -270,6 +270,30 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): results = response.data['results'] self.assertEqual(len(results), 0) + def test_documents_title_content_filter(self): + + doc1 = Document.objects.create(title="title A", content="content A", checksum="A", mime_type="application/pdf") + doc2 = Document.objects.create(title="title B", content="content A", checksum="B", mime_type="application/pdf") + doc3 = Document.objects.create(title="title A", content="content B", checksum="C", mime_type="application/pdf") + doc4 = Document.objects.create(title="title B", content="content B", checksum="D", mime_type="application/pdf") + + response = self.client.get("/api/documents/?title_content=A") + self.assertEqual(response.status_code, 200) + results = response.data['results'] + self.assertEqual(len(results), 3) + self.assertCountEqual([results[0]['id'], results[1]['id'], results[2]['id']], [doc1.id, doc2.id, doc3.id]) + + response = self.client.get("/api/documents/?title_content=B") + self.assertEqual(response.status_code, 200) + results = response.data['results'] + self.assertEqual(len(results), 3) + self.assertCountEqual([results[0]['id'], results[1]['id'], results[2]['id']], [doc2.id, doc3.id, doc4.id]) + + response = self.client.get("/api/documents/?title_content=X") + self.assertEqual(response.status_code, 200) + results = response.data['results'] + self.assertEqual(len(results), 0) + def test_search_no_query(self): response = self.client.get("/api/search/") results = response.data['results'] From b553acef731893a87d181b59725f8c2552404203 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 12:42:07 +0100 Subject: [PATCH 480/898] changelog --- docs/changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index a1686e48b..11223265d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -16,6 +16,8 @@ This release contains new database migrations. * Added a color picker for tag colors. + * Added the ability to use the filter for searching the document content as well. + * Added translations into Italian and Romanian. Thank you! * Close individual documents from the sidebar. Thanks to `Michael Shamoon`_. From 071f6238c2ceb19a359d95d31948bf1c3c3c1e7f Mon Sep 17 00:00:00 2001 From: Oliver Cervera <cervera93-19@yahoo.it> Date: Sat, 6 Mar 2021 12:55:24 +0100 Subject: [PATCH 481/898] Update Italian Translation Minor change to Italian translation. Manual PR since Transifex doesn't do it. --- src-ui/src/locale/messages.it.xlf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/locale/messages.it.xlf b/src-ui/src/locale/messages.it.xlf index b2b49b833..721fc816c 100644 --- a/src-ui/src/locale/messages.it.xlf +++ b/src-ui/src/locale/messages.it.xlf @@ -1744,7 +1744,7 @@ </trans-unit> <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> <source>Dismiss completed</source> - <target>Messaggi ignorati</target> + <target>Ignora completati</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> @@ -2278,4 +2278,4 @@ </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From 29190ef4ec340884d5dde90454185d31fbbda0e1 Mon Sep 17 00:00:00 2001 From: Daniel <71837281+darmiel@users.noreply.github.com> Date: Sat, 6 Mar 2021 15:27:55 +0100 Subject: [PATCH 482/898] Check if the user has permissions for Docker --- install-paperless-ng.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index 8fb44e222..b0f0950fc 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -64,6 +64,17 @@ if [[ -z $(which docker-compose) ]] ; then exit 1 fi +# Check if user has permissions to run Docker by trying to get the status of Docker (docker status). +# If this fails, the user probably does not have permissions for Docker. +docker stats --no-stream 2>/dev/null 1>&2 +if [ $? -ne 0 ] ; then + echo "" + echo "WARN: It look like the current user does not have Docker permissions." + echo "WARN: Use 'sudo usermod -aG docker $USER' to assign Docker permissions to the user." + echo "" + sleep 3 +fi + echo "" echo "############################################" echo "### Paperless-ng docker installation ###" From 7f73e929162674907c923e9310117ef4163ab6ae Mon Sep 17 00:00:00 2001 From: Daniel <71837281+darmiel@users.noreply.github.com> Date: Sat, 6 Mar 2021 15:30:16 +0100 Subject: [PATCH 483/898] Changed spaces to tabs --- install-paperless-ng.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index b0f0950fc..f9cfddf14 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -68,8 +68,8 @@ fi # If this fails, the user probably does not have permissions for Docker. docker stats --no-stream 2>/dev/null 1>&2 if [ $? -ne 0 ] ; then - echo "" - echo "WARN: It look like the current user does not have Docker permissions." + echo "" + echo "WARN: It look like the current user does not have Docker permissions." echo "WARN: Use 'sudo usermod -aG docker $USER' to assign Docker permissions to the user." echo "" sleep 3 From 94d5bc5e88b6105477137f6e5db85db1d6361134 Mon Sep 17 00:00:00 2001 From: Daniel <71837281+darmiel@users.noreply.github.com> Date: Sat, 6 Mar 2021 15:40:19 +0100 Subject: [PATCH 484/898] Use -e switch after docker permission check --- install-paperless-ng.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index f9cfddf14..c550d253c 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -1,7 +1,5 @@ #!/bin/bash -set -e - ask() { while true ; do if [[ -z $3 ]] ; then @@ -75,6 +73,8 @@ if [ $? -ne 0 ] ; then sleep 3 fi +set -e + echo "" echo "############################################" echo "### Paperless-ng docker installation ###" From b3f9f871cb0c19066e8571f8607b1c16aa69544c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:09:03 +0100 Subject: [PATCH 485/898] update crowdin.yml --- crowdin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/crowdin.yml b/crowdin.yml index 0e6a46a31..100891706 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,4 @@ +commit_message: [ci skip] files: - source: /src/locale/en_US/LC_MESSAGES/django.po translation: /src/locale/%locale_with_underscore%/LC_MESSAGES/django.po From 67af5c42a3f98c633c29fa53754d69ce68bde471 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:12:44 +0100 Subject: [PATCH 486/898] fix config --- crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index 100891706..00f475464 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,4 @@ -commit_message: [ci skip] +commit_message: "[ci skip]" files: - source: /src/locale/en_US/LC_MESSAGES/django.po translation: /src/locale/%locale_with_underscore%/LC_MESSAGES/django.po From 9b6ec3970bc4333350180ec408878b1abdeeea9c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:13:12 +0100 Subject: [PATCH 487/898] Update Crowdin configuration file --- crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index 00f475464..ddc915f6d 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,4 @@ -commit_message: "[ci skip]" +commit_message: '[ci skip]' files: - source: /src/locale/en_US/LC_MESSAGES/django.po translation: /src/locale/%locale_with_underscore%/LC_MESSAGES/django.po From e2f2b8e2d6857cc29392ea80531502b6a112c79a Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:20:06 +0100 Subject: [PATCH 488/898] fix up language file locations --- src-ui/angular.json | 8 ++++---- src-ui/src/locale/{messages.de.xlf => messages.de_DE.xlf} | 0 src-ui/src/locale/{messages.fr.xlf => messages.fr_FR.xlf} | 0 src-ui/src/locale/{messages.it.xlf => messages.it_IT.xlf} | 0 src-ui/src/locale/{messages.ro.xlf => messages.ro_RO.xlf} | 0 src/locale/{cs => cs_CZ}/LC_MESSAGES/django.po | 0 src/locale/{de => de_DE}/LC_MESSAGES/django.po | 0 src/locale/{fr => fr_FR}/LC_MESSAGES/django.po | 0 src/locale/{it => it_IT}/LC_MESSAGES/django.po | 0 src/locale/{ro => ro_RO}/LC_MESSAGES/django.po | 0 src/paperless/settings.py | 8 ++++---- 11 files changed, 8 insertions(+), 8 deletions(-) rename src-ui/src/locale/{messages.de.xlf => messages.de_DE.xlf} (100%) rename src-ui/src/locale/{messages.fr.xlf => messages.fr_FR.xlf} (100%) rename src-ui/src/locale/{messages.it.xlf => messages.it_IT.xlf} (100%) rename src-ui/src/locale/{messages.ro.xlf => messages.ro_RO.xlf} (100%) rename src/locale/{cs => cs_CZ}/LC_MESSAGES/django.po (100%) rename src/locale/{de => de_DE}/LC_MESSAGES/django.po (100%) rename src/locale/{fr => fr_FR}/LC_MESSAGES/django.po (100%) rename src/locale/{it => it_IT}/LC_MESSAGES/django.po (100%) rename src/locale/{ro => ro_RO}/LC_MESSAGES/django.po (100%) diff --git a/src-ui/angular.json b/src-ui/angular.json index 9f53a8fb1..4691fec61 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -16,13 +16,13 @@ "i18n": { "sourceLocale": "en-US", "locales": { - "de": "src/locale/messages.de.xlf", + "de-DE": "src/locale/messages.de_DE.xlf", "nl-NL": "src/locale/messages.nl_NL.xlf", - "fr": "src/locale/messages.fr.xlf", + "fr-FR": "src/locale/messages.fr_FR.xlf", "en-GB": "src/locale/messages.en_GB.xlf", "pt-BR": "src/locale/messages.pt_BR.xlf", - "it": "src/locale/messages.it.xlf", - "ro": "src/locale/messages.ro.xlf" + "it-IT": "src/locale/messages.it_IT.xlf", + "ro-RO": "src/locale/messages.ro_RO.xlf" } }, "architect": { diff --git a/src-ui/src/locale/messages.de.xlf b/src-ui/src/locale/messages.de_DE.xlf similarity index 100% rename from src-ui/src/locale/messages.de.xlf rename to src-ui/src/locale/messages.de_DE.xlf diff --git a/src-ui/src/locale/messages.fr.xlf b/src-ui/src/locale/messages.fr_FR.xlf similarity index 100% rename from src-ui/src/locale/messages.fr.xlf rename to src-ui/src/locale/messages.fr_FR.xlf diff --git a/src-ui/src/locale/messages.it.xlf b/src-ui/src/locale/messages.it_IT.xlf similarity index 100% rename from src-ui/src/locale/messages.it.xlf rename to src-ui/src/locale/messages.it_IT.xlf diff --git a/src-ui/src/locale/messages.ro.xlf b/src-ui/src/locale/messages.ro_RO.xlf similarity index 100% rename from src-ui/src/locale/messages.ro.xlf rename to src-ui/src/locale/messages.ro_RO.xlf diff --git a/src/locale/cs/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po similarity index 100% rename from src/locale/cs/LC_MESSAGES/django.po rename to src/locale/cs_CZ/LC_MESSAGES/django.po diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po similarity index 100% rename from src/locale/de/LC_MESSAGES/django.po rename to src/locale/de_DE/LC_MESSAGES/django.po diff --git a/src/locale/fr/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po similarity index 100% rename from src/locale/fr/LC_MESSAGES/django.po rename to src/locale/fr_FR/LC_MESSAGES/django.po diff --git a/src/locale/it/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po similarity index 100% rename from src/locale/it/LC_MESSAGES/django.po rename to src/locale/it_IT/LC_MESSAGES/django.po diff --git a/src/locale/ro/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po similarity index 100% rename from src/locale/ro/LC_MESSAGES/django.po rename to src/locale/ro_RO/LC_MESSAGES/django.po diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 3330da19c..f57be3b6d 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -297,12 +297,12 @@ LANGUAGE_CODE = 'en-us' LANGUAGES = [ ("en-us", _("English (US)")), ("en-gb", _("English (GB)")), - ("de", _("German")), + ("de-de", _("German")), ("nl-nl", _("Dutch")), - ("fr", _("French")), + ("fr-fr", _("French")), ("pt-br", _("Portuguese (Brazil)")), - ("it", _("Italian")), - ("ro", _("Romanian")) + ("it-it", _("Italian")), + ("ro-ro", _("Romanian")) ] LOCALE_PATHS = [ From 08e57a37dc83f07db844ae2e68e989c9a1b0b822 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:51 +0100 Subject: [PATCH 489/898] New translations django.po (Romanian) [ci skip] --- src/locale/ro_RO/LC_MESSAGES/django.po | 107 +++++++------------------ 1 file changed, 31 insertions(+), 76 deletions(-) diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index ac1fb40d1..7d83eae22 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -1,26 +1,21 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Horea Petrila <petrilahorea@gmail.com>, 2021 -# Cubic Lemon <lemonsarecubic@gmail.com>, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Cubic Lemon <lemonsarecubic@gmail.com>, 2021\n" -"Language-Team: Romanian (https://www.transifex.com/paperless/teams/115905/ro/)\n" +"PO-Revision-Date: 2021-03-06 21:39\n" +"Last-Translator: \n" +"Language-Team: Romanian\n" +"Language: ro_RO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: ro\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" @@ -84,12 +79,8 @@ msgid "is inbox tag" msgstr "este eticheta inbox" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Marcheaza aceasta eticheta ca eticheta inbox: Toate documentele nou " -"consumate primesc aceasta eticheta." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Marcheaza aceasta eticheta ca eticheta inbox: Toate documentele nou consumate primesc aceasta eticheta." #: documents/models.py:94 msgid "tag" @@ -124,12 +115,8 @@ msgid "content" msgstr "continut" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"Textul brut al documentului. Acest camp este folosit in principal pentru " -"cautare." +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Textul brut al documentului. Acest camp este folosit in principal pentru cautare." #: documents/models.py:144 msgid "mime type" @@ -193,7 +180,7 @@ msgstr "Pozitia acestui document in arhiva fizica." #: documents/models.py:223 msgid "document" -msgstr "document" +msgstr "" #: documents/models.py:224 msgid "documents" @@ -450,39 +437,24 @@ msgid "Filter" msgstr "Filtru" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless va procesa numai email-urile care se potrivesc cu TOATE filtrele " -"de mai jos." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless va procesa numai email-urile care se potrivesc cu TOATE filtrele de mai jos." #: paperless_mail/admin.py:37 msgid "Actions" msgstr "Acțiuni" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"Actiunea aplicata tuturol email-urilor. Aceasta este realizata doar cand " -"sunt consumate documente din email. Cele fara atasamente nu vor fi " -"procesate." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Actiunea aplicata tuturol email-urilor. Aceasta este realizata doar cand sunt consumate documente din email. Cele fara atasamente nu vor fi procesate." #: paperless_mail/admin.py:46 msgid "Metadata" msgstr "Metadate" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Atribuie metadate documentelor consumate prin aceasta regula in mod automat." -" Chiar daca nu sunt atribuite etichete, tipuri sau corespondenti, Paperless " -"va procesa toate regulile definite care se potrivesc." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Atribuie metadate documentelor consumate prin aceasta regula in mod automat. Chiar daca nu sunt atribuite etichete, tipuri sau corespondenti, Paperless va procesa toate regulile definite care se potrivesc." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -517,12 +489,8 @@ msgid "IMAP port" msgstr "port IMAP" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"De obicei este 143 pentru conexiuni necriptate si STARTTLS, sau 993 pentru " -"conexiuni SSL." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "De obicei este 143 pentru conexiuni necriptate si STARTTLS, sau 993 pentru conexiuni SSL." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -621,13 +589,8 @@ msgid "filter attachment filename" msgstr "filtreaza numele atasamentului" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Consuma doar documentele care se potrivesc in intregime cu acest nume de " -"fisier, daca este specificat. Simbolul * tine locul oricarui sir de " -"caractere. Majusculele nu conteaza." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Consuma doar documentele care se potrivesc in intregime cu acest nume de fisier, daca este specificat. Simbolul * tine locul oricarui sir de caractere. Majusculele nu conteaza." #: paperless_mail/models.py:146 msgid "maximum age" @@ -642,13 +605,8 @@ msgid "attachment type" msgstr "tipul atasamentului" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"Atasamentele \"inline\" includ si imaginile incorporate, deci aceasta " -"optiune functioneaza cel mai bine combinata cu un filtru pentru numele " -"fisierului." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Atasamentele \"inline\" includ si imaginile incorporate, deci aceasta optiune functioneaza cel mai bine combinata cu un filtru pentru numele fisierului." #: paperless_mail/models.py:159 msgid "action" @@ -659,12 +617,8 @@ msgid "action parameter" msgstr "parametru al actiunii" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Parametru aditional pentru actiunea definita mai sus (ex. directorul in care" -" sa se realizeze o mutare)" +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Parametru aditional pentru actiunea definita mai sus (ex. directorul in care sa se realizeze o mutare)" #: paperless_mail/models.py:173 msgid "assign title from" @@ -685,3 +639,4 @@ msgstr "atribuie corespondent din" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "atribuie acest corespondent" + From 86edd4deceb9c64a3dc28bad73715a24a8c4754d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:52 +0100 Subject: [PATCH 490/898] New translations messages.xlf (Portuguese) [ci skip] --- src-ui/src/locale/messages.pt_PT.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.pt_PT.xlf diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf new file mode 100644 index 000000000..c608fc3f6 --- /dev/null +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="pt-PT"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From 57158363a1d81f28d23ada0e77648c4f5466e48d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:53 +0100 Subject: [PATCH 491/898] New translations django.po (Xhosa) [ci skip] --- src/locale/xh_ZA/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/xh_ZA/LC_MESSAGES/django.po diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po new file mode 100644 index 000000000..3939f9d52 --- /dev/null +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:39\n" +"Last-Translator: \n" +"Language-Team: Xhosa\n" +"Language: xh_ZA\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: xh\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "crwdns2528:0crwdne2528:0" + +#: documents/models.py:32 +msgid "Any word" +msgstr "crwdns2530:0crwdne2530:0" + +#: documents/models.py:33 +msgid "All words" +msgstr "crwdns2532:0crwdne2532:0" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "crwdns2534:0crwdne2534:0" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "crwdns2536:0crwdne2536:0" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "crwdns2538:0crwdne2538:0" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "crwdns2540:0crwdne2540:0" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "crwdns2542:0crwdne2542:0" + +#: documents/models.py:45 +msgid "match" +msgstr "crwdns2544:0crwdne2544:0" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "crwdns2546:0crwdne2546:0" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "crwdns2548:0crwdne2548:0" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "crwdns2550:0crwdne2550:0" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "crwdns2552:0crwdne2552:0" + +#: documents/models.py:81 +msgid "color" +msgstr "crwdns2554:0crwdne2554:0" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "crwdns2556:0crwdne2556:0" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "crwdns2558:0crwdne2558:0" + +#: documents/models.py:94 +msgid "tag" +msgstr "crwdns2560:0crwdne2560:0" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "crwdns2562:0crwdne2562:0" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "crwdns2564:0crwdne2564:0" + +#: documents/models.py:102 +msgid "document types" +msgstr "crwdns2566:0crwdne2566:0" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "crwdns2568:0crwdne2568:0" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "crwdns2570:0crwdne2570:0" + +#: documents/models.py:124 +msgid "title" +msgstr "crwdns2572:0crwdne2572:0" + +#: documents/models.py:137 +msgid "content" +msgstr "crwdns2574:0crwdne2574:0" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "crwdns2576:0crwdne2576:0" + +#: documents/models.py:144 +msgid "mime type" +msgstr "crwdns2578:0crwdne2578:0" + +#: documents/models.py:155 +msgid "checksum" +msgstr "crwdns2580:0crwdne2580:0" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "crwdns2582:0crwdne2582:0" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "crwdns2584:0crwdne2584:0" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "crwdns2586:0crwdne2586:0" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "crwdns2588:0crwdne2588:0" + +#: documents/models.py:176 +msgid "modified" +msgstr "crwdns2590:0crwdne2590:0" + +#: documents/models.py:180 +msgid "storage type" +msgstr "crwdns2592:0crwdne2592:0" + +#: documents/models.py:188 +msgid "added" +msgstr "crwdns2594:0crwdne2594:0" + +#: documents/models.py:192 +msgid "filename" +msgstr "crwdns2596:0crwdne2596:0" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "crwdns2598:0crwdne2598:0" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "crwdns2600:0crwdne2600:0" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "crwdns2602:0crwdne2602:0" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "crwdns2604:0crwdne2604:0" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "crwdns2606:0crwdne2606:0" + +#: documents/models.py:223 +msgid "document" +msgstr "crwdns2608:0crwdne2608:0" + +#: documents/models.py:224 +msgid "documents" +msgstr "crwdns2610:0crwdne2610:0" + +#: documents/models.py:311 +msgid "debug" +msgstr "crwdns2612:0crwdne2612:0" + +#: documents/models.py:312 +msgid "information" +msgstr "crwdns2614:0crwdne2614:0" + +#: documents/models.py:313 +msgid "warning" +msgstr "crwdns2616:0crwdne2616:0" + +#: documents/models.py:314 +msgid "error" +msgstr "crwdns2618:0crwdne2618:0" + +#: documents/models.py:315 +msgid "critical" +msgstr "crwdns2620:0crwdne2620:0" + +#: documents/models.py:319 +msgid "group" +msgstr "crwdns2622:0crwdne2622:0" + +#: documents/models.py:322 +msgid "message" +msgstr "crwdns2624:0crwdne2624:0" + +#: documents/models.py:325 +msgid "level" +msgstr "crwdns2626:0crwdne2626:0" + +#: documents/models.py:332 +msgid "log" +msgstr "crwdns2628:0crwdne2628:0" + +#: documents/models.py:333 +msgid "logs" +msgstr "crwdns2630:0crwdne2630:0" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "crwdns2632:0crwdne2632:0" + +#: documents/models.py:345 +msgid "saved views" +msgstr "crwdns2634:0crwdne2634:0" + +#: documents/models.py:348 +msgid "user" +msgstr "crwdns2636:0crwdne2636:0" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "crwdns2638:0crwdne2638:0" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "crwdns2640:0crwdne2640:0" + +#: documents/models.py:361 +msgid "sort field" +msgstr "crwdns2642:0crwdne2642:0" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "crwdns2644:0crwdne2644:0" + +#: documents/models.py:370 +msgid "title contains" +msgstr "crwdns2646:0crwdne2646:0" + +#: documents/models.py:371 +msgid "content contains" +msgstr "crwdns2648:0crwdne2648:0" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "crwdns2650:0crwdne2650:0" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "crwdns2652:0crwdne2652:0" + +#: documents/models.py:374 +msgid "document type is" +msgstr "crwdns2654:0crwdne2654:0" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "crwdns2656:0crwdne2656:0" + +#: documents/models.py:376 +msgid "has tag" +msgstr "crwdns2658:0crwdne2658:0" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "crwdns2660:0crwdne2660:0" + +#: documents/models.py:378 +msgid "created before" +msgstr "crwdns2662:0crwdne2662:0" + +#: documents/models.py:379 +msgid "created after" +msgstr "crwdns2664:0crwdne2664:0" + +#: documents/models.py:380 +msgid "created year is" +msgstr "crwdns2666:0crwdne2666:0" + +#: documents/models.py:381 +msgid "created month is" +msgstr "crwdns2668:0crwdne2668:0" + +#: documents/models.py:382 +msgid "created day is" +msgstr "crwdns2670:0crwdne2670:0" + +#: documents/models.py:383 +msgid "added before" +msgstr "crwdns2672:0crwdne2672:0" + +#: documents/models.py:384 +msgid "added after" +msgstr "crwdns2674:0crwdne2674:0" + +#: documents/models.py:385 +msgid "modified before" +msgstr "crwdns2676:0crwdne2676:0" + +#: documents/models.py:386 +msgid "modified after" +msgstr "crwdns2678:0crwdne2678:0" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "crwdns2680:0crwdne2680:0" + +#: documents/models.py:398 +msgid "rule type" +msgstr "crwdns2682:0crwdne2682:0" + +#: documents/models.py:402 +msgid "value" +msgstr "crwdns2684:0crwdne2684:0" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "crwdns2686:0crwdne2686:0" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "crwdns2688:0crwdne2688:0" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "crwdns2690:0%(error)scrwdne2690:0" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "crwdns2692:0crwdne2692:0" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "crwdns2694:0%(type)scrwdne2694:0" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "crwdns2696:0crwdne2696:0" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "crwdns2698:0crwdne2698:0" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "crwdns2700:0crwdne2700:0" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "crwdns2702:0crwdne2702:0" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "crwdns2704:0crwdne2704:0" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "crwdns2706:0crwdne2706:0" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "crwdns2708:0crwdne2708:0" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "crwdns2710:0crwdne2710:0" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "crwdns2712:0crwdne2712:0" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "crwdns2714:0crwdne2714:0" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "crwdns2716:0crwdne2716:0" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "crwdns2718:0crwdne2718:0" + +#: paperless/settings.py:299 +msgid "German" +msgstr "crwdns2720:0crwdne2720:0" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "crwdns2722:0crwdne2722:0" + +#: paperless/settings.py:301 +msgid "French" +msgstr "crwdns2724:0crwdne2724:0" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "crwdns2726:0crwdne2726:0" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "crwdns2728:0crwdne2728:0" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "crwdns2730:0crwdne2730:0" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "crwdns2732:0crwdne2732:0" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "crwdns2734:0crwdne2734:0" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "crwdns2736:0crwdne2736:0" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "crwdns2738:0crwdne2738:0" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "crwdns2740:0crwdne2740:0" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "crwdns2742:0crwdne2742:0" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "crwdns2744:0crwdne2744:0" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "crwdns2746:0crwdne2746:0" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "crwdns2748:0crwdne2748:0" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "crwdns2750:0crwdne2750:0" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "crwdns2752:0crwdne2752:0" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "crwdns2754:0crwdne2754:0" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "crwdns2756:0crwdne2756:0" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "crwdns2758:0crwdne2758:0" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "crwdns2760:0crwdne2760:0" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "crwdns2762:0crwdne2762:0" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "crwdns2764:0crwdne2764:0" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "crwdns2766:0crwdne2766:0" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "crwdns2768:0crwdne2768:0" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "crwdns2770:0crwdne2770:0" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "crwdns2772:0crwdne2772:0" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "crwdns2774:0crwdne2774:0" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "crwdns2776:0crwdne2776:0" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "crwdns2778:0crwdne2778:0" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "crwdns2780:0crwdne2780:0" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "crwdns2782:0crwdne2782:0" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "crwdns2784:0crwdne2784:0" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "crwdns2786:0crwdne2786:0" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "crwdns2788:0crwdne2788:0" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "crwdns2790:0crwdne2790:0" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "crwdns2792:0crwdne2792:0" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "crwdns2794:0crwdne2794:0" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "crwdns2796:0crwdne2796:0" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "crwdns2798:0crwdne2798:0" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "crwdns2800:0crwdne2800:0" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "crwdns2802:0crwdne2802:0" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "crwdns2804:0crwdne2804:0" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "crwdns2806:0crwdne2806:0" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "crwdns2808:0crwdne2808:0" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "crwdns2810:0crwdne2810:0" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "crwdns2812:0crwdne2812:0" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "crwdns2814:0crwdne2814:0" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "crwdns2816:0crwdne2816:0" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "crwdns2818:0crwdne2818:0" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "crwdns2820:0crwdne2820:0" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "crwdns2822:0crwdne2822:0" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "crwdns2824:0crwdne2824:0" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "crwdns2826:0crwdne2826:0" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "crwdns2828:0crwdne2828:0" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "crwdns2830:0crwdne2830:0" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "crwdns2832:0crwdne2832:0" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "crwdns2834:0crwdne2834:0" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "crwdns2836:0crwdne2836:0" + From 7925e68cb32d7510a8de0becc4b0442e064eb14f Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:54 +0100 Subject: [PATCH 492/898] New translations messages.xlf (Latin) [ci skip] --- src-ui/src/locale/messages.la_LA.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.la_LA.xlf diff --git a/src-ui/src/locale/messages.la_LA.xlf b/src-ui/src/locale/messages.la_LA.xlf new file mode 100644 index 000000000..21f16eb92 --- /dev/null +++ b/src-ui/src/locale/messages.la_LA.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="la-LA"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From 359f632710ee342ad69e481b7f7900522145d93b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:55 +0100 Subject: [PATCH 493/898] New translations django.po (Latin) [ci skip] --- src/locale/la_LA/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/la_LA/LC_MESSAGES/django.po diff --git a/src/locale/la_LA/LC_MESSAGES/django.po b/src/locale/la_LA/LC_MESSAGES/django.po new file mode 100644 index 000000000..d631e4911 --- /dev/null +++ b/src/locale/la_LA/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:39\n" +"Last-Translator: \n" +"Language-Team: Latin\n" +"Language: la_LA\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: la-LA\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From cb00cbfac6115efab171b2c0589bc0c255e56346 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:57 +0100 Subject: [PATCH 494/898] New translations messages.xlf (English, United Kingdom) [ci skip] --- src-ui/src/locale/messages.en_GB.xlf | 1265 +++++++++++++------------- 1 file changed, 633 insertions(+), 632 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index b4164555f..bb1800aba 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1,2281 +1,2282 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="en-GB"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="en-GB"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Document added</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="needs-translation">Document added</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Open document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="needs-translation">Open document</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>New document detected</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="needs-translation">New document detected</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="needs-translation">Documents</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Select</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="needs-translation">Select</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Select none</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="needs-translation">Select none</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Select page</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="needs-translation">Select page</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Select all</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="needs-translation">Select all</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Sort</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="needs-translation">Sort</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="needs-translation">Views</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Save as...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="needs-translation">Save as...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(filtered)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="needs-translation">(filtered)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="needs-translation">Correspondent</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Title</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="needs-translation">Title</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Document type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="needs-translation">Document type</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Created</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="needs-translation">Created</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Added</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="needs-translation">Added</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Confirm delete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="needs-translation">Confirm delete</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>The files for this document will be deleted permanently. This operation cannot be undone.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Delete document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="needs-translation">Delete document</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Delete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="needs-translation">Delete</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Download</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="needs-translation">Download</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>More like this</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="needs-translation">More like this</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Close</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="needs-translation">Close</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Details</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="needs-translation">Details</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Content</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="needs-translation">Content</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="needs-translation">Metadata</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Discard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="needs-translation">Discard</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Save</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="needs-translation">Save</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Page</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="needs-translation">Page</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Download original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="needs-translation">Download original</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Archive serial number</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="needs-translation">Archive serial number</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Date created</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="needs-translation">Date created</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Date modified</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="needs-translation">Date modified</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Date added</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="needs-translation">Date added</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Media filename</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="needs-translation">Media filename</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>Original MD5 checksum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="needs-translation">Original MD5 checksum</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Original file size</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="needs-translation">Original file size</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>Original mime type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="needs-translation">Original mime type</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>Archive MD5 checksum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="needs-translation">Archive MD5 checksum</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Archive file size</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="needs-translation">Archive file size</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Original document metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="needs-translation">Original document metadata</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Archived document metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="needs-translation">Archived document metadata</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Save & next</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="needs-translation">Save & next</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Welcome to Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Dashboard</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Tags</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Tags</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Create</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="needs-translation">Create</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filter by:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="needs-translation">Filter by:</target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Name</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="needs-translation">Name</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Colour</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Colour</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Matching</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="needs-translation">Matching</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Document count</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="needs-translation">Document count</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Actions</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="needs-translation">Actions</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="needs-translation">Documents</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Edit</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="needs-translation">Edit</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Document types</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Document types</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Logs</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Logs</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Settings saved successfully.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="needs-translation">Settings saved successfully.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Use system language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="needs-translation">Use system language</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Use date format of display language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="needs-translation">Use date format of display language</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Settings</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Settings</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>General settings</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="needs-translation">General settings</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Notifications</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="needs-translation">Notifications</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Saved views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="needs-translation">Saved views</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Appearance</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">Appearance</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Display language</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">Display language</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>You need to reload the page after applying a new language.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Date display</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="needs-translation">Date display</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Date format</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="needs-translation">Date format</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Items per page</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="needs-translation">Items per page</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Document editor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="needs-translation">Document editor</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Use PDF viewer provided by the browser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Dark mode</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="needs-translation">Dark mode</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Use system settings</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="needs-translation">Use system settings</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Enable dark mode</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="needs-translation">Enable dark mode</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Invert thumbnails in dark mode</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Bulk editing</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="needs-translation">Bulk editing</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Show confirmation dialogs</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="needs-translation">Show confirmation dialogs</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>Deleting documents will always ask for confirmation.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Apply on close</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="needs-translation">Apply on close</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Document processing</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="needs-translation">Document processing</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Show notifications when new documents are detected</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Show notifications when document processing completes successfully</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Show notifications when document processing fails</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Suppress notifications on dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>This will suppress all messages about document processing status on the dashboard.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Appears on</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="needs-translation">Appears on</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Show on dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="needs-translation">Show on dashboard</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>Show in sidebar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="needs-translation">Show in sidebar</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>No saved views defined.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="needs-translation">No saved views defined.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Not Found</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="needs-translation">404 Not Found</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Correspondents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Correspondents</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Last correspondence</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="needs-translation">Last correspondence</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Confirmation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">Confirmation</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Confirm</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="needs-translation">Confirm</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Cancel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="needs-translation">Cancel</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Create new correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="needs-translation">Create new correspondent</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Edit correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="needs-translation">Edit correspondent</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Matching algorithm</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="needs-translation">Matching algorithm</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Matching pattern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="needs-translation">Matching pattern</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Case insensitive</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="needs-translation">Case insensitive</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Create new tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="needs-translation">Create new tag</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Edit tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="needs-translation">Edit tag</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>Inbox tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">Inbox tag</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>Inbox tags are automatically assigned to all consumed documents.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Create new document type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="needs-translation">Create new document type</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Edit document type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="needs-translation">Edit document type</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Search results</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Search results</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated"> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Search documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="needs-translation">Search documents</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Logout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="needs-translation">Logout</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Manage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="needs-translation">Manage</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Admin</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="needs-translation">Admin</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="needs-translation">Info</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Documentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="needs-translation">Documentation</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Suggest an idea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="needs-translation">Suggest an idea</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Open documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="needs-translation">Open documents</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Close all</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="needs-translation">Close all</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Title</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="needs-translation">Title</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Title & content</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="needs-translation">Title & content</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Without correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="needs-translation">Without correspondent</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Without document type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="needs-translation">Without document type</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Without any tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="needs-translation">Without any tag</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Title: <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Title: <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Filter tags</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="needs-translation">Filter tags</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Filter correspondents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="needs-translation">Filter correspondents</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Filter document types</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="needs-translation">Filter document types</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Reset filters</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="needs-translation">Reset filters</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Not assigned</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Apply</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="needs-translation">Apply</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Last 7 days</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="needs-translation">Last 7 days</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Last month</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="needs-translation">Last month</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Last 3 months</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="needs-translation">Last 3 months</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>Last year</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="needs-translation">Last year</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>After</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">After</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Before</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="needs-translation">Before</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Clear</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">Clear</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>View</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="needs-translation">View</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Filter by correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="needs-translation">Filter by correspondent</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Filter by tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="needs-translation">Filter by tag</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Score:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="needs-translation">Score:</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>View in browser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="needs-translation">View in browser</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Confirm tags assignment</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="needs-translation">Confirm tags assignment</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Confirm correspondent assignment</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Confirm document type assignment</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="needs-translation">Confirm document type assignment</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Delete confirm</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="needs-translation">Delete confirm</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated">This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>This operation cannot be undone.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="needs-translation">This operation cannot be undone.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Delete document(s)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="needs-translation">Delete document(s)</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Select:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="needs-translation">Select:</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>All</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="needs-translation">All</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Edit:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="needs-translation">Edit:</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Download originals</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="needs-translation">Download originals</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Suggestions:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="needs-translation">Suggestions:</target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Save current view</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="needs-translation">Save current view</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Show all</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="needs-translation">Show all</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Statistics</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Statistics</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Failed: <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Failed: <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Added: <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Added: <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Connecting...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="needs-translation">Connecting...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Uploading...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="needs-translation">Uploading...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Upload complete, waiting...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="needs-translation">Upload complete, waiting...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Upload new documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Upload new documents</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Drop documents here or</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">Drop documents here or</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Browse files</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">Browse files</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Dismiss completed</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Open document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="needs-translation">Open document</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>First steps</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">First steps</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>Paperless is running! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="needs-translation">Paperless is running! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>Paperless offers some more features that try to make your life easier:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>You can configure paperless to read your mails and add documents from attached files.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">Metadata</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Select</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">Select</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Please select an object</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="needs-translation">Please select an object</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Invalid date.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="needs-translation">Invalid date.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Yes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="needs-translation">Yes</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>No</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="needs-translation">No</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(no title)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="needs-translation">(no title)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>English (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="needs-translation">English (US)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>English (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="needs-translation">English (GB)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>German</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="needs-translation">German</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Dutch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="needs-translation">Dutch</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>French</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="needs-translation">French</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Portuguese (Brazil)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italian</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="needs-translation">Italian</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Romanian</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="needs-translation">Romanian</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Document already exists.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="needs-translation">Document already exists.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>File not found.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="needs-translation">File not found.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Pre-consume script does not exist.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Error while executing pre-consume script.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Post-consume script does not exist.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Error while executing post-consume script.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Received new file.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="needs-translation">Received new file.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>File type not supported.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="needs-translation">File type not supported.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Processing document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="needs-translation">Processing document...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Generating thumbnail...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="needs-translation">Generating thumbnail...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Retrieving date from document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="needs-translation">Retrieving date from document...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Saving document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="needs-translation">Saving document...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Finished.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="needs-translation">Finished.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Error</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="needs-translation">Error</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Information</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="needs-translation">Information</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">Correspondent</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Document type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="needs-translation">Document type</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Created</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="needs-translation">Created</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Added</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="needs-translation">Added</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Modified</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="needs-translation">Modified</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Create new item</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="needs-translation">Create new item</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Edit item</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="needs-translation">Edit item</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Could not save element: <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Could not save element: <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automatic</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="needs-translation">Automatic</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Do you really want to delete this element?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>Associated documents will not be deleted.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Delete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="needs-translation">Delete</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Any word</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="needs-translation">Any word</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Any: Document contains any of these words (space separated)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>All words</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">All words</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>All: Document contains all of these words (space separated)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Exact match</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="needs-translation">Exact match</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Exact: Document contains this string</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="needs-translation">Exact: Document contains this string</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Regular expression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="needs-translation">Regular expression</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Regular expression: Document matches this regular expression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Fuzzy word</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="needs-translation">Fuzzy word</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Fuzzy: Document contains a word similar to this word</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Auto: Learn matching automatically</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From 71c5255691f43028f0cfb7a1dbcd98e924a863a0 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:58 +0100 Subject: [PATCH 495/898] New translations django.po (English, United Kingdom) [ci skip] --- src/locale/en_GB/LC_MESSAGES/django.po | 370 +++++++++++-------------- 1 file changed, 164 insertions(+), 206 deletions(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index ee7f2800e..5ae2832b0 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -1,79 +1,74 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Ali Bates, 2021 -# Jonas Winkler, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Jonas Winkler, 2021\n" -"Language-Team: English (United Kingdom) (https://www.transifex.com/paperless/teams/115905/en_GB/)\n" +"PO-Revision-Date: 2021-03-06 21:39\n" +"Last-Translator: \n" +"Language-Team: English, United Kingdom\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: en-GB\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" -msgstr "Documents" +msgstr "" #: documents/models.py:32 msgid "Any word" -msgstr "Any word" +msgstr "" #: documents/models.py:33 msgid "All words" -msgstr "All words" +msgstr "" #: documents/models.py:34 msgid "Exact match" -msgstr "Exact match" +msgstr "" #: documents/models.py:35 msgid "Regular expression" -msgstr "Regular expression" +msgstr "" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "Fuzzy word" +msgstr "" #: documents/models.py:37 msgid "Automatic" -msgstr "Automatic" +msgstr "" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" -msgstr "name" +msgstr "" #: documents/models.py:45 msgid "match" -msgstr "match" +msgstr "" #: documents/models.py:49 msgid "matching algorithm" -msgstr "matching algorithm" +msgstr "" #: documents/models.py:55 msgid "is insensitive" -msgstr "is insensitive" +msgstr "" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "correspondent" +msgstr "" #: documents/models.py:75 msgid "correspondents" -msgstr "correspondents" +msgstr "" #: documents/models.py:81 msgid "color" @@ -81,284 +76,276 @@ msgstr "colour" #: documents/models.py:87 msgid "is inbox tag" -msgstr "is inbox tag" +msgstr "" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." msgstr "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." #: documents/models.py:94 msgid "tag" -msgstr "tag" +msgstr "" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "tags" +msgstr "" #: documents/models.py:101 documents/models.py:133 msgid "document type" -msgstr "document type" +msgstr "" #: documents/models.py:102 msgid "document types" -msgstr "document types" +msgstr "" #: documents/models.py:110 msgid "Unencrypted" -msgstr "Unencrypted" +msgstr "" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "Encrypted with GNU Privacy Guard" +msgstr "" #: documents/models.py:124 msgid "title" -msgstr "title" +msgstr "" #: documents/models.py:137 msgid "content" -msgstr "content" +msgstr "" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." +msgid "The raw, text-only data of the document. This field is primarily used for searching." msgstr "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." #: documents/models.py:144 msgid "mime type" -msgstr "mime type" +msgstr "" #: documents/models.py:155 msgid "checksum" -msgstr "checksum" +msgstr "" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "The checksum of the original document." +msgstr "" #: documents/models.py:163 msgid "archive checksum" -msgstr "archive checksum" +msgstr "" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "The checksum of the archived document." +msgstr "" #: documents/models.py:172 documents/models.py:328 msgid "created" -msgstr "created" +msgstr "" #: documents/models.py:176 msgid "modified" -msgstr "modified" +msgstr "" #: documents/models.py:180 msgid "storage type" -msgstr "storage type" +msgstr "" #: documents/models.py:188 msgid "added" -msgstr "added" +msgstr "" #: documents/models.py:192 msgid "filename" -msgstr "filename" +msgstr "" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "Current filename in storage" +msgstr "" #: documents/models.py:202 msgid "archive filename" -msgstr "archive filename" +msgstr "" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "Current archive filename in storage" +msgstr "" #: documents/models.py:212 msgid "archive serial number" -msgstr "archive serial number" +msgstr "" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "The position of this document in your physical document archive." +msgstr "" #: documents/models.py:223 msgid "document" -msgstr "document" +msgstr "" #: documents/models.py:224 msgid "documents" -msgstr "documents" +msgstr "" #: documents/models.py:311 msgid "debug" -msgstr "debug" +msgstr "" #: documents/models.py:312 msgid "information" -msgstr "information" +msgstr "" #: documents/models.py:313 msgid "warning" -msgstr "warning" +msgstr "" #: documents/models.py:314 msgid "error" -msgstr "error" +msgstr "" #: documents/models.py:315 msgid "critical" -msgstr "critical" +msgstr "" #: documents/models.py:319 msgid "group" -msgstr "group" +msgstr "" #: documents/models.py:322 msgid "message" -msgstr "message" +msgstr "" #: documents/models.py:325 msgid "level" -msgstr "level" +msgstr "" #: documents/models.py:332 msgid "log" -msgstr "log" +msgstr "" #: documents/models.py:333 msgid "logs" -msgstr "logs" +msgstr "" #: documents/models.py:344 documents/models.py:394 msgid "saved view" -msgstr "saved view" +msgstr "" #: documents/models.py:345 msgid "saved views" -msgstr "saved views" +msgstr "" #: documents/models.py:348 msgid "user" -msgstr "user" +msgstr "" #: documents/models.py:354 msgid "show on dashboard" -msgstr "show on dashboard" +msgstr "" #: documents/models.py:357 msgid "show in sidebar" -msgstr "show in sidebar" +msgstr "" #: documents/models.py:361 msgid "sort field" -msgstr "sort field" +msgstr "" #: documents/models.py:364 msgid "sort reverse" -msgstr "sort reverse" +msgstr "" #: documents/models.py:370 msgid "title contains" -msgstr "title contains" +msgstr "" #: documents/models.py:371 msgid "content contains" -msgstr "content contains" +msgstr "" #: documents/models.py:372 msgid "ASN is" -msgstr "ASN is" +msgstr "" #: documents/models.py:373 msgid "correspondent is" -msgstr "correspondent is" +msgstr "" #: documents/models.py:374 msgid "document type is" -msgstr "document type is" +msgstr "" #: documents/models.py:375 msgid "is in inbox" -msgstr "is in inbox" +msgstr "" #: documents/models.py:376 msgid "has tag" -msgstr "has tag" +msgstr "" #: documents/models.py:377 msgid "has any tag" -msgstr "has any tag" +msgstr "" #: documents/models.py:378 msgid "created before" -msgstr "created before" +msgstr "" #: documents/models.py:379 msgid "created after" -msgstr "created after" +msgstr "" #: documents/models.py:380 msgid "created year is" -msgstr "created year is" +msgstr "" #: documents/models.py:381 msgid "created month is" -msgstr "created month is" +msgstr "" #: documents/models.py:382 msgid "created day is" -msgstr "created day is" +msgstr "" #: documents/models.py:383 msgid "added before" -msgstr "added before" +msgstr "" #: documents/models.py:384 msgid "added after" -msgstr "added after" +msgstr "" #: documents/models.py:385 msgid "modified before" -msgstr "modified before" +msgstr "" #: documents/models.py:386 msgid "modified after" -msgstr "modified after" +msgstr "" #: documents/models.py:387 msgid "does not have tag" -msgstr "does not have tag" +msgstr "" #: documents/models.py:398 msgid "rule type" -msgstr "rule type" +msgstr "" #: documents/models.py:402 msgid "value" -msgstr "value" +msgstr "" #: documents/models.py:408 msgid "filter rule" -msgstr "filter rule" +msgstr "" #: documents/models.py:409 msgid "filter rules" -msgstr "filter rules" +msgstr "" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" -msgstr "Invalid regular expresssion: %(error)s" +msgstr "" #: documents/serialisers.py:177 msgid "Invalid color." @@ -367,318 +354,289 @@ msgstr "Invalid colour." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "File type %(type)s not supported" +msgstr "" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "Paperless-ng is loading..." +msgstr "" #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" -msgstr "Paperless-ng signed out" +msgstr "" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "You have been successfully logged out. Bye!" +msgstr "" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "Sign in again" +msgstr "" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" -msgstr "Paperless-ng sign in" +msgstr "" #: documents/templates/registration/login.html:42 msgid "Please sign in." -msgstr "Please sign in." +msgstr "" #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "Your username and password didn't match. Please try again." +msgstr "" #: documents/templates/registration/login.html:48 msgid "Username" -msgstr "Username" +msgstr "" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "Password" +msgstr "" #: documents/templates/registration/login.html:54 msgid "Sign in" -msgstr "Sign in" +msgstr "" #: paperless/settings.py:297 msgid "English (US)" -msgstr "English (US)" +msgstr "" #: paperless/settings.py:298 msgid "English (GB)" -msgstr "English (GB)" +msgstr "" #: paperless/settings.py:299 msgid "German" -msgstr "German" +msgstr "" #: paperless/settings.py:300 msgid "Dutch" -msgstr "Dutch" +msgstr "" #: paperless/settings.py:301 msgid "French" -msgstr "French" +msgstr "" #: paperless/settings.py:302 msgid "Portuguese (Brazil)" -msgstr "Portuguese (Brazil)" +msgstr "" #: paperless/settings.py:303 msgid "Italian" -msgstr "Italian" +msgstr "" #: paperless/settings.py:304 msgid "Romanian" -msgstr "Romanian" +msgstr "" #: paperless/urls.py:118 msgid "Paperless-ng administration" -msgstr "Paperless-ng administration" +msgstr "" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "Filter" +msgstr "" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." +msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "" -"Paperless will only process mails that match ALL of the filters given below." #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "Actions" +msgstr "" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "Metadata" +msgstr "" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "Paperless mail" +msgstr "" #: paperless_mail/models.py:11 msgid "mail account" -msgstr "mail account" +msgstr "" #: paperless_mail/models.py:12 msgid "mail accounts" -msgstr "mail accounts" +msgstr "" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "No encryption" +msgstr "" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "Use SSL" +msgstr "" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "Use STARTTLS" +msgstr "" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "IMAP server" +msgstr "" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "IMAP port" +msgstr "" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." msgstr "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "IMAP security" +msgstr "" #: paperless_mail/models.py:46 msgid "username" -msgstr "username" +msgstr "" #: paperless_mail/models.py:50 msgid "password" -msgstr "password" +msgstr "" #: paperless_mail/models.py:60 msgid "mail rule" -msgstr "mail rule" +msgstr "" #: paperless_mail/models.py:61 msgid "mail rules" -msgstr "mail rules" +msgstr "" #: paperless_mail/models.py:67 msgid "Only process attachments." -msgstr "Only process attachments." +msgstr "" #: paperless_mail/models.py:68 msgid "Process all files, including 'inline' attachments." -msgstr "Process all files, including 'inline' attachments." +msgstr "" #: paperless_mail/models.py:78 msgid "Mark as read, don't process read mails" -msgstr "Mark as read, don't process read mails" +msgstr "" #: paperless_mail/models.py:79 msgid "Flag the mail, don't process flagged mails" -msgstr "Flag the mail, don't process flagged mails" +msgstr "" #: paperless_mail/models.py:80 msgid "Move to specified folder" -msgstr "Move to specified folder" +msgstr "" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "Delete" +msgstr "" #: paperless_mail/models.py:88 msgid "Use subject as title" -msgstr "Use subject as title" +msgstr "" #: paperless_mail/models.py:89 msgid "Use attachment filename as title" -msgstr "Use attachment filename as title" +msgstr "" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" -msgstr "Do not assign a correspondent" +msgstr "" #: paperless_mail/models.py:101 msgid "Use mail address" -msgstr "Use mail address" +msgstr "" #: paperless_mail/models.py:103 msgid "Use name (or mail address if not available)" -msgstr "Use name (or mail address if not available)" +msgstr "" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" -msgstr "Use correspondent selected below" +msgstr "" #: paperless_mail/models.py:113 msgid "order" -msgstr "order" +msgstr "" #: paperless_mail/models.py:120 msgid "account" -msgstr "account" +msgstr "" #: paperless_mail/models.py:124 msgid "folder" -msgstr "folder" +msgstr "" #: paperless_mail/models.py:128 msgid "filter from" -msgstr "filter from" +msgstr "" #: paperless_mail/models.py:131 msgid "filter subject" -msgstr "filter subject" +msgstr "" #: paperless_mail/models.py:134 msgid "filter body" -msgstr "filter body" +msgstr "" #: paperless_mail/models.py:138 msgid "filter attachment filename" -msgstr "filter attachment filename" +msgstr "" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." #: paperless_mail/models.py:146 msgid "maximum age" -msgstr "maximum age" +msgstr "" #: paperless_mail/models.py:148 msgid "Specified in days." -msgstr "Specified in days." +msgstr "" #: paperless_mail/models.py:151 msgid "attachment type" -msgstr "attachment type" +msgstr "" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." #: paperless_mail/models.py:159 msgid "action" -msgstr "action" +msgstr "" #: paperless_mail/models.py:165 msgid "action parameter" -msgstr "action parameter" +msgstr "" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." msgstr "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." #: paperless_mail/models.py:173 msgid "assign title from" -msgstr "assign title from" +msgstr "" #: paperless_mail/models.py:183 msgid "assign this tag" -msgstr "assign this tag" +msgstr "" #: paperless_mail/models.py:191 msgid "assign this document type" -msgstr "assign this document type" +msgstr "" #: paperless_mail/models.py:195 msgid "assign correspondent from" -msgstr "assign correspondent from" +msgstr "" #: paperless_mail/models.py:205 msgid "assign this correspondent" -msgstr "assign this correspondent" +msgstr "" + From 3527b16615ed4b849123bcf4308ba7571abc41fc Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:39:59 +0100 Subject: [PATCH 496/898] New translations messages.xlf (Thai) [ci skip] --- src-ui/src/locale/messages.th_TH.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.th_TH.xlf diff --git a/src-ui/src/locale/messages.th_TH.xlf b/src-ui/src/locale/messages.th_TH.xlf new file mode 100644 index 000000000..d5b3de020 --- /dev/null +++ b/src-ui/src/locale/messages.th_TH.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="th"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From 5a96235b6ae2a37dce5cfc89a0a1cc9f602d1a0f Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:00 +0100 Subject: [PATCH 497/898] New translations django.po (Thai) [ci skip] --- src/locale/th_TH/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/th_TH/LC_MESSAGES/django.po diff --git a/src/locale/th_TH/LC_MESSAGES/django.po b/src/locale/th_TH/LC_MESSAGES/django.po new file mode 100644 index 000000000..20c70dd69 --- /dev/null +++ b/src/locale/th_TH/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:39\n" +"Last-Translator: \n" +"Language-Team: Thai\n" +"Language: th_TH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: th\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From f2719b3f9cb78de0c6be8ec57c728275ee052c80 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:02 +0100 Subject: [PATCH 498/898] New translations messages.xlf (Portuguese, Brazilian) [ci skip] --- src-ui/src/locale/messages.pt_BR.xlf | 1265 +++++++++++++------------- 1 file changed, 633 insertions(+), 632 deletions(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index ec6fb02d9..b12cabcef 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1,2281 +1,2282 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="pt-BR"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="pt-BR"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Documento adicionado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Documento adicionado</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Documento <x equiv-text="status.filename" id="PH"/> foi adicionado ao paperless.</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Documento <x equiv-text="status.filename" id="PH"/> foi adicionado ao paperless.</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Abrir documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Abrir documento</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Não foi possível adicionar <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Não foi possível adicionar <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>Novo documento detectado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Novo documento detectado</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Documento <x equiv-text="status.filename" id="PH"/> está sendo processado pelo paperless.</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Documento <x equiv-text="status.filename" id="PH"/> está sendo processado pelo paperless.</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Documentos</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>Visualização "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" salva com sucesso.</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Visualização "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" salva com sucesso.</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>Visualização "<x equiv-text="savedView.name" id="PH"/>" criada com sucesso.</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Visualização "<x equiv-text="savedView.name" id="PH"/>" criada com sucesso.</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Selecionar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Selecionar</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Selecionar nenhum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Selecionar nenhum</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Selecionar página</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Selecionar página</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Selecionar todos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Selecionar todos</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Ordenar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Ordenar</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Visualizações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="translated">Visualizações</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Salvar como...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Salvar como...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Salvar "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">Salvar "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Selecionado <x id="INTERPOLATION"/> de um documento} other {Selecionado <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documentos}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Selecionado <x id="INTERPOLATION"/> de um documento} other {Selecionado <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documentos}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Um documento} other {<x id="INTERPOLATION"/> documentos}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Um documento} other {<x id="INTERPOLATION"/> documentos}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(filtrado)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">(filtrado)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>NSA</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="translated">NSA</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Correspondente</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Título</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Título</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Tipo de Documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Tipo de Documento</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Criado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="translated">Criado</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Adicionado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Adicionado</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Confirmar exclusão</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Confirmar exclusão</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Você realmente deseja excluir o documento "<x equiv-text="this.document.title" id="PH"/>"?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Você realmente deseja excluir o documento "<x equiv-text="this.document.title" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Excluir documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="translated">Excluir documento</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Erro ao excluir documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Erro ao excluir documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Excluir</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Excluir</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Baixar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Baixar</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>Mais como este</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Mais como este</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Fechar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="translated">Fechar</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Detalhes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="translated">Detalhes</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Conteúdo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Conteúdo</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Metadados</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="translated">Metadados</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Descartar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Descartar</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Salvar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Salvar</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Página</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Página</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>de <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">de <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Baixar original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Baixar original</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Número de série de arquivamento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="translated">Número de série de arquivamento</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Data de criação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="translated">Data de criação</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Data de modificação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Data de modificação</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Data de adição</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Data de adição</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Nome do arquivo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Nome do arquivo</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>Soma de verificação MD5 original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Soma de verificação MD5 original</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Tamanho do arquivo original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Tamanho do arquivo original</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>Tipo mime original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Tipo mime original</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>Soma de verificação MD5 de arquivamento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Soma de verificação MD5 de arquivamento</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Tamanho arquivado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Tamanho arquivado</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Metadados do documento original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="translated">Metadados do documento original</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Metadados do documento arquivado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="translated">Metadados do documento arquivado</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Salvar & próximo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="translated">Salvar & próximo</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Olá <x equiv-text="this.displayName" id="PH"/>, bem-vindo ao Paperless-ng!</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Olá <x equiv-text="this.displayName" id="PH"/>, bem-vindo ao Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Bem-vindo ao Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Bem-vindo ao Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Painel de controle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Painel de controle</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Você realmente deseja excluir a etiqueta "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Você realmente deseja excluir a etiqueta "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Etiquetas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Etiquetas</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Criar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="translated">Criar</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filtrar por:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Filtrar por:</target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Nome</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nome</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Cor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Cor</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Detecção</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Detecção</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Número de documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Número de documentos</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Ações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Ações</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Documentos</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Editar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="translated">Editar</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Você realmente deseja excluir o tipo de documento "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Você realmente deseja excluir o tipo de documento "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Tipos de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Tipos de documento</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Logs</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Logs</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Visualização "<x equiv-text="savedView.name" id="PH"/>" excluída.</target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Visualização "<x equiv-text="savedView.name" id="PH"/>" excluída.</target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Configurações salvas com sucesso.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="translated">Configurações salvas com sucesso.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Usar linguagem do sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Usar linguagem do sistema</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Usar formato de data da linguagem de exibição</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="translated">Usar formato de data da linguagem de exibição</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Erro ao salvar configurações: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Erro ao salvar configurações: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Configurações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Configurações</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>Configurações gerais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Configurações gerais</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Notificações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="translated">Notificações</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Visualizações</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="translated">Visualizações</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Aparência</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Aparência</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Linguagem de exibição</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Linguagem de exibição</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>Você precisar recarregar a página depois de escolher uma nova linguagem.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Você precisar recarregar a página depois de escolher uma nova linguagem.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Exibição de data</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Exibição de data</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Formato de data</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Formato de data</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Curto: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Curto: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Médio: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Médio: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Longo: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Longo: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Itens por página</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Itens por página</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Editor de documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="translated">Editor de documentos</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Usar visualizador de PDF do navegador</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Usar visualizador de PDF do navegador</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>Isso é geralmente mais rápido para exibir grandes documentos PDF, mas poderá não funcionar em alguns navegadores.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Isso é geralmente mais rápido para exibir grandes documentos PDF, mas poderá não funcionar em alguns navegadores.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Modo noturno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Modo noturno</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Usar configurações do sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Usar configurações do sistema</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Habilitar modo noturno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="translated">Habilitar modo noturno</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Inverter imagens em modo noturno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Inverter imagens em modo noturno</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Edição em massa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Edição em massa</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Mostrar janelas de confirmação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Mostrar janelas de confirmação</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>Ao excluir um documento, sempre será pedido uma confirmação.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Ao excluir um documento, sempre será pedido uma confirmação.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Aplicar ao fechar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="translated">Aplicar ao fechar</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Processamento de documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="translated">Processamento de documentos</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Exibir notificações quando novos documentos forem detectados</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Exibir notificações quando novos documentos forem detectados</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Exibir notificações quando o processamento de um documento concluir com sucesso</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="translated">Exibir notificações quando o processamento de um documento concluir com sucesso</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Exibir notificações quando o processamento de um documento falhar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="translated">Exibir notificações quando o processamento de um documento falhar</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Não exibir notificações no painel de controle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Não exibir notificações no painel de controle</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle.</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Aparece em</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="translated">Aparece em</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Exibir no painel de controle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="translated">Exibir no painel de controle</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>Mostrar na navegação lateral</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="translated">Mostrar na navegação lateral</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>Nenhuma visualização definida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Nenhuma visualização definida.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Não Encontrado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">404 Não Encontrado</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Você realmente deseja excluir o correspondente "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Você realmente deseja excluir o correspondente "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Correspondentes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Correspondentes</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Última correspondência</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Última correspondência</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Confirmação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Confirmação</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Confirmar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Confirmar</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Cancelar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Cancelar</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Criar novo correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Criar novo correspondente</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Editar correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Editar correspondente</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Algoritmo de detecção</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Algoritmo de detecção</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Padrão de detecção</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Padrão de detecção</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Não diferenciar maiúsculas de minúsculas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Não diferenciar maiúsculas de minúsculas</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Criar nova etiqueta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Criar nova etiqueta</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Editar etiqueta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Editar etiqueta</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>Etiqueta caixa de entrada</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Etiqueta caixa de entrada</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>Etiquetas de caixa de entrada são atribuídas automaticamente para todos os documentos consumidos.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Etiquetas de caixa de entrada são atribuídas automaticamente para todos os documentos consumidos.</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Criar novo tipo de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Criar novo tipo de documento</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Editar tipo de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Editar tipo de documento</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Resultados da busca</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Resultados da busca</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Termo de pesquisa inválido: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Termo de pesquisa inválido: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target>Exibindo documentos similares a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Exibindo documentos similares a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Termo de pesquisa: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Termo de pesquisa: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Você quis dizer "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Você quis dizer "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Procurar documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Procurar documentos</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Encerrar sessão</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Encerrar sessão</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Gerenciar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="translated">Gerenciar</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Admin</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="needs-translation">Admin</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Informação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="translated">Informação</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Documentação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="translated">Documentação</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Sugerir uma idéia</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="translated">Sugerir uma idéia</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Sessão iniciada como <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Sessão iniciada como <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Abrir documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Abrir documentos</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Fechar todos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Fechar todos</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Título</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="translated">Título</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Título & conteúdo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Título & conteúdo</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Correspondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Correspondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Sem correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Sem correspondente</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Sem tipo de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="translated">Sem tipo de documento</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Etiqueta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Etiqueta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Sem etiquetas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Sem etiquetas</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Título: <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Título: <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Filtrar etiquetas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtrar etiquetas</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Filtrar correspondentes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="translated">Filtrar correspondentes</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Filtrar tipos de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Filtrar tipos de documento</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Limpar filtros</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Limpar filtros</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Não atribuído</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Não atribuído</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Aplicar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Aplicar</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Últimos 7 dias</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Últimos 7 dias</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Último mês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Último mês</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Últimos 3 meses</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="translated">Últimos 3 meses</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>Último ano</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="translated">Último ano</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>Antes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Antes</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Depois</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Depois</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Limpar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Limpar</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>Ver</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Ver</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Criado: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Criado: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Filtrar por correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtrar por correspondente</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Filtrar por etiqueta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Filtrar por etiqueta</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Nota:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="translated">Nota:</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>Visualizar no navegador</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="translated">Visualizar no navegador</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Erro ao executar operação em massa: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Erro ao executar operação em massa: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/> e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Confirmar atribuição de etiqueta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="translated">Confirmar atribuição de etiqueta</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá adicionar a etiqueta "<x equiv-text="tag.name" id="PH"/>" em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Essa operação irá adicionar a etiqueta "<x equiv-text="tag.name" id="PH"/>" em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s). </target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s). </target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá remover a etiqueta "<x equiv-text="tag.name" id="PH"/>" de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Essa operação irá remover a etiqueta "<x equiv-text="tag.name" id="PH"/>" de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">Essa operação irá remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de <x equiv-text="this.list.selected.size" id="PH_2"/> documento(s) selecionado(s).</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de <x equiv-text="this.list.selected.size" id="PH_2"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Confirmar atribuição de correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="translated">Confirmar atribuição de correspondente</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá atribuir o correspondente "<x equiv-text="correspondent.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">Essa operação irá atribuir o correspondente "<x equiv-text="correspondent.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Essa operação irá remover o correspondente de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Essa operação irá remover o correspondente de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Confirmar atribuição de tipo de documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="translated">Confirmar atribuição de tipo de documento</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Essa operação irá atribuir o tipo de documento "<x equiv-text="documentType.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">Essa operação irá atribuir o tipo de documento "<x equiv-text="documentType.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Essa operação irá remover o tipo de documento de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">Essa operação irá remover o tipo de documento de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Confirmar exlcusão</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="translated">Confirmar exlcusão</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Essa operação irá excluir permanentemente <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated">Essa operação irá excluir permanentemente <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>Essa operação não pode ser revertida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Essa operação não pode ser revertida.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Apagar documento(s)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Apagar documento(s)</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Selecionar:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Selecionar:</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>Todos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Todos</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Editar:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Editar:</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Descarregar originais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Descarregar originais</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Sugestões:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Sugestões:</target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Salvar visualização atual</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Salvar visualização atual</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Mostrar todos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Mostrar todos</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Estatísticas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Estatísticas</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Total de documentos: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Total de documentos: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documentos na caixa de entrada: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Documentos na caixa de entrada: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>Processando: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Processando: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Falha: <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Falha: <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Adicionado: <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Adicionado: <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Conectando...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="translated">Conectando...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Enviando...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Enviando...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Envio concluído, esperando...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Envio concluído, esperando...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>Erro HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Erro HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Enviar novos documentos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Enviar novos documentos</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Solte documentos aqui ou</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Solte documentos aqui ou</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Navegar arquivos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Navegar arquivos</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Esconder completos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Esconder completos</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Mais um documento} other {Mais <x id="INTERPOLATION"/> documentos}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, =1 {Mais um documento} other {Mais <x id="INTERPOLATION"/> documentos}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Abrir documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Abrir documento</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>Primeiros passos</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Primeiros passos</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>O Paperless está a correr! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="translated">O Paperless está a correr! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Pode começar a carregar documentos deixando-os na caixa de carregamento de ficheiros à direita, ou deixando-os na pasta de consumo pré-configurada, que eles depois aparecem na lista de documentos. Depois de ter adicionado alguns meta-dados aos seus documentos, utilize os mecanismos de filtragem do Paperless para criar visualizações personalizadas (tais como 'Adicionados recentemente', 'Etiquetados com PARAFAZER'). Posteriormente estes aparecerão no painel em vez desta mensagem.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="translated">Pode começar a carregar documentos deixando-os na caixa de carregamento de ficheiros à direita, ou deixando-os na pasta de consumo pré-configurada, que eles depois aparecem na lista de documentos. Depois de ter adicionado alguns meta-dados aos seus documentos, utilize os mecanismos de filtragem do Paperless para criar visualizações personalizadas (tais como 'Adicionados recentemente', 'Etiquetados com PARAFAZER'). Posteriormente estes aparecerão no painel em vez desta mensagem.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>O Paperless oferece algumas funcionalidades para tentar tornar a sua vida mais fácil:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">O Paperless oferece algumas funcionalidades para tentar tornar a sua vida mais fácil:</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Assim que já tenha alguns documentos previamente adicionados com os respetivos meta-dados, o Paperless consegue adicionar automaticamente meta-dados aos novos documentos.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Assim que já tenha alguns documentos previamente adicionados com os respetivos meta-dados, o Paperless consegue adicionar automaticamente meta-dados aos novos documentos.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Pode configurar o Paperless para ler os seus e-mails e adicionar os documentos em anexo à plataforma.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Pode configurar o Paperless para ler os seus e-mails e adicionar os documentos em anexo à plataforma.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Consulte a documentação para saber como utilizar estas funcionalidades. A secção sobre utilização básica têm informação para o ajudar a utilizar a plataforma de uma forma geral.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Consulte a documentação para saber como utilizar estas funcionalidades. A secção sobre utilização básica têm informação para o ajudar a utilizar a plataforma de uma forma geral.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Metadados</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Metadados</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Selecione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Selecione</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Por favor selecione um objeto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Por favor selecione um objeto</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Data inválida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Data inválida.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Sim</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Sim</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>Não</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Não</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(sem título)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">(sem título)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>Inglês (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="translated">Inglês (US)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>Inglês (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Inglês (GB)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>Alemão</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="translated">Alemão</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Holandês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="translated">Holandês</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>Francês</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Francês</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Português (Brasil)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Português (Brasil)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italiano</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="translated">Italiano</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Romeno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Romeno</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Documento já existente.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Documento já existente.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>Arquivo não encontrado.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Arquivo não encontrado.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Script pré-consumo não existe.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Script pré-consumo não existe.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Erro ao executar script pré-consumo.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Erro ao executar script pré-consumo.</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Script pós-consumo não existe.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Script pós-consumo não existe.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Erro ao executar script pós-consumo.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Erro ao executar script pós-consumo.</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Novo arquivo recebido.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Novo arquivo recebido.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>Tipo de arquivo não suportado.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Tipo de arquivo não suportado.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Processando documento...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Processando documento...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Gerando imagem...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Gerando imagem...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Buscando data do documento...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Buscando data do documento...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Salvando documento...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Salvando documento...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Encerrado.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Encerrado.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Erro</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Erro</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Informação</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Informação</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>NSA</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">NSA</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Correspondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Correspondente</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Tipo de Documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tipo de Documento</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Criado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Criado</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Adicionado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Adicionado</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Modificado</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Modificado</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Criar novo item</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Criar novo item</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Editar item</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="translated">Editar item</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Não podemos salvar elemento: <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Não podemos salvar elemento: <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automático</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Automático</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Você realmente quer excluir esse elemento?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Você realmente quer excluir esse elemento?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>Documentos associados não serão excluidos.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="translated">Documentos associados não serão excluidos.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Excluir</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Excluir</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Erro ao excluir elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Erro ao excluir elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Qualquer palavra</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Qualquer palavra</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Qualquer: Documento contém qualquer uma dessas palavras (separadas por espaço)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Qualquer: Documento contém qualquer uma dessas palavras (separadas por espaço)</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>Todas as palavras</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Todas as palavras</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>Todas: Documento contém todas essas palavras (separadas por espaço)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Todas: Documento contém todas essas palavras (separadas por espaço)</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Detecção exata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Detecção exata</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Exata: Documento contém essa palavra</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Exata: Documento contém essa palavra</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Expressão regular</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Expressão regular</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Expressão regular: Documento condiz com essa expressão regular</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Expressão regular: Documento condiz com essa expressão regular</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Palavra difusa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Palavra difusa</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Fuzzy: Documento contém uma palavra similar à essa.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Fuzzy: Documento contém uma palavra similar à essa.</target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Auto: Aprender detecção automaticamente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Auto: Aprender detecção automaticamente</target> </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From 0dd02bb1672e9716ed78b35cdd0a1b51a6d9e3c4 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:03 +0100 Subject: [PATCH 499/898] New translations django.po (Portuguese, Brazilian) [ci skip] --- src/locale/pt_BR/LC_MESSAGES/django.po | 109 ++++++++----------------- 1 file changed, 34 insertions(+), 75 deletions(-) diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index f4e5710db..9f32ecfac 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -1,26 +1,21 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Jonas Winkler, 2021 -# Rodrigo A <rodrigo.avelino@meliuz.com.br>, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Rodrigo A <rodrigo.avelino@meliuz.com.br>, 2021\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/paperless/teams/115905/pt_BR/)\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Portuguese, Brazilian\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: pt-BR\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" @@ -84,12 +79,8 @@ msgid "is inbox tag" msgstr "é etiqueta caixa de entrada" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Marca essa etiqueta como caixa de entrada: Todos os novos documentos " -"consumidos terão as etiquetas de caixa de entrada." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Marca essa etiqueta como caixa de entrada: Todos os novos documentos consumidos terão as etiquetas de caixa de entrada." #: documents/models.py:94 msgid "tag" @@ -124,12 +115,8 @@ msgid "content" msgstr "conteúdo" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"O conteúdo de texto bruto do documento. Esse campo é usado principalmente " -"para busca." +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "O conteúdo de texto bruto do documento. Esse campo é usado principalmente para busca." #: documents/models.py:144 msgid "mime type" @@ -201,7 +188,7 @@ msgstr "documentos" #: documents/models.py:311 msgid "debug" -msgstr "debug" +msgstr "" #: documents/models.py:312 msgid "information" @@ -233,11 +220,11 @@ msgstr "nível" #: documents/models.py:332 msgid "log" -msgstr "log" +msgstr "" #: documents/models.py:333 msgid "logs" -msgstr "logs" +msgstr "" #: documents/models.py:344 documents/models.py:394 msgid "saved view" @@ -450,42 +437,28 @@ msgid "Filter" msgstr "Filtro" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless processará somente e-mails que se encaixam em TODOS os filtros " -"abaixo." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless processará somente e-mails que se encaixam em TODOS os filtros abaixo." #: paperless_mail/admin.py:37 msgid "Actions" msgstr "Ações" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"A ação se aplica ao e-mail. Essa ação só é executada quando documentos foram" -" consumidos do e-mail. E-mails sem anexos permanecerão intactos." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "A ação se aplica ao e-mail. Essa ação só é executada quando documentos foram consumidos do e-mail. E-mails sem anexos permanecerão intactos." #: paperless_mail/admin.py:46 msgid "Metadata" msgstr "Metadados" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Atribua metadados aos documentos consumidos por esta regra automaticamente. " -"Se você não atribuir etiquetas, tipos ou correspondentes aqui, paperless " -"ainda sim processará todas as regras de detecção que você definiu." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Atribua metadados aos documentos consumidos por esta regra automaticamente. Se você não atribuir etiquetas, tipos ou correspondentes aqui, paperless ainda sim processará todas as regras de detecção que você definiu." #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "Paperless mail" +msgstr "" #: paperless_mail/models.py:11 msgid "mail account" @@ -516,12 +489,8 @@ msgid "IMAP port" msgstr "Porta IMAP" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"É geralmente 143 para não encriptado e conexões STARTTLS, e 993 para " -"conexões SSL." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "É geralmente 143 para não encriptado e conexões STARTTLS, e 993 para conexões SSL." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -620,11 +589,8 @@ msgid "filter attachment filename" msgstr "filtrar nome do arquivo anexo" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Consumir somente documentos que correspondem a este nome de arquivo se especificado.\n" +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Consumir somente documentos que correspondem a este nome de arquivo se especificado.\n" "Curingas como *.pdf ou *invoice* são permitidos. Sem diferenciação de maiúsculas e minúsculas." #: paperless_mail/models.py:146 @@ -640,12 +606,8 @@ msgid "attachment type" msgstr "tipo de anexo" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"Anexos inline incluem imagens inseridas, por isso é melhor combinar essa " -"opção com um filtro de nome de arquivo." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Anexos inline incluem imagens inseridas, por isso é melhor combinar essa opção com um filtro de nome de arquivo." #: paperless_mail/models.py:159 msgid "action" @@ -656,12 +618,8 @@ msgid "action parameter" msgstr "parâmetro da ação" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Parâmetro adicional para a ação selecionada acima, por exemplo: a pasta de " -"destino da ação de mover pasta." +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Parâmetro adicional para a ação selecionada acima, por exemplo: a pasta de destino da ação de mover pasta." #: paperless_mail/models.py:173 msgid "assign title from" @@ -682,3 +640,4 @@ msgstr "atribuir correspondente de" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "atribuir este correspondente" + From f42645f2ddcbfbe4ad2b25460bc220162a4245b6 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:04 +0100 Subject: [PATCH 500/898] New translations messages.xlf (Chinese Simplified) [ci skip] --- src-ui/src/locale/messages.zh_CN.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.zh_CN.xlf diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf new file mode 100644 index 000000000..b8eaa1c53 --- /dev/null +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="zh-CN"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From cfda5c6f36ce04078cefa55b99b9b1660575f41a Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:05 +0100 Subject: [PATCH 501/898] New translations django.po (Chinese Simplified) [ci skip] --- src/locale/zh_CN/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/zh_CN/LC_MESSAGES/django.po diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po new file mode 100644 index 000000000..3d6513cbb --- /dev/null +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From 77718c1363271a79cb765a31f9d2cbe17732a258 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:07 +0100 Subject: [PATCH 502/898] New translations messages.xlf (Russian) [ci skip] --- src-ui/src/locale/messages.ru_RU.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.ru_RU.xlf diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf new file mode 100644 index 000000000..f018f5f31 --- /dev/null +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="ru"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From 4ae741ca3945c32a597febce255d0b031374bf9d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:08 +0100 Subject: [PATCH 503/898] New translations django.po (Russian) [ci skip] --- src/locale/ru_RU/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/ru_RU/LC_MESSAGES/django.po diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po new file mode 100644 index 000000000..b6d2b89f3 --- /dev/null +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Russian\n" +"Language: ru_RU\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: ru\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From 086217fc4f7d4fb9efbdcb217a9a4a6a5f9c0b3e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:09 +0100 Subject: [PATCH 504/898] New translations django.po (Portuguese) [ci skip] --- src/locale/pt_PT/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/pt_PT/LC_MESSAGES/django.po diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 000000000..df07b0ad6 --- /dev/null +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Portuguese\n" +"Language: pt_PT\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: pt-PT\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From 00aed6ba6521463213476b8e95718c74d5f4ebe5 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:10 +0100 Subject: [PATCH 505/898] New translations messages.xlf (Romanian) [ci skip] --- src-ui/src/locale/messages.ro_RO.xlf | 1265 +++++++++++++------------- 1 file changed, 633 insertions(+), 632 deletions(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index c016b41a1..712527fb4 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1,2281 +1,2282 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="ro"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="ro"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Document adaugat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Document adaugat</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Documentul <x equiv-text="status.filename" id="PH"/> a fost adaugat</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Documentul <x equiv-text="status.filename" id="PH"/> a fost adaugat</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Deschide document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Deschide document</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Nu s-a putut adauga <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Nu s-a putut adauga <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>Document nou detectat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Document nou detectat</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Documentul <x equiv-text="status.filename" id="PH"/> este in procesare</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Documentul <x equiv-text="status.filename" id="PH"/> este in procesare</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Documente</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>Vizualizarea "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" a fost salvata</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Vizualizarea "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" a fost salvata</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost creata</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost creata</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Selecteaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Selecteaza</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Deselecteaza tot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Deselecteaza tot</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Selecteaza pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Selecteaza pagina</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Selecteaza tot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Selecteaza tot</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Sorteaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Sorteaza</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Vizualizari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="translated">Vizualizari</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Salveaza ca...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Salveaza ca...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Salveaza "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">Salveaza "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Am selectat<x id="INTERPOLATION"/> din 1 document} other {Am selectat <x id="INTERPOLATION"/> din <x id="INTERPOLATION_1"/> documente}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Am selectat<x id="INTERPOLATION"/> din 1 document} other {Am selectat <x id="INTERPOLATION"/> din <x id="INTERPOLATION_1"/> documente}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Un document} other {<x id="INTERPOLATION"/> documente}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Un document} other {<x id="INTERPOLATION"/> documente}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(filtrat)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">(filtrat)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Corespondent</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Titlu</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Titlu</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Tipul documentului</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Tipul documentului</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Creat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="translated">Creat</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Adaugat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Adaugat</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Confirma stergerea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Confirma stergerea</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Sunteti sigur ca doriti sa stergeti documentul "<x equiv-text="this.document.title" id="PH"/>"?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Sunteti sigur ca doriti sa stergeti documentul "<x equiv-text="this.document.title" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>Fisierele pentru acest document vor fi sterse permanent. Operatiunea este ireversibila.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Fisierele pentru acest document vor fi sterse permanent. Operatiunea este ireversibila.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Sterge document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="translated">Sterge document</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Eroare la stergerea documentului: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Eroare la stergerea documentului: <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Sterge</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Sterge</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Descarca</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Descarca</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>Similare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Similare</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Inchide</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="translated">Inchide</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Detalii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="translated">Detalii</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Continut</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Continut</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Metadate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="translated">Metadate</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Renunta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Renunta</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Salveaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Salveaza</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Pagina</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>din <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">din <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Descarca originalul</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Descarca originalul</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Numar de arhiva</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="translated">Numar de arhiva</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Data crearii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="translated">Data crearii</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Data ultimei modificari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Data ultimei modificari</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Data adaugarii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Data adaugarii</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Numele fisierului media</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Numele fisierului media</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>MD5 original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">MD5 original</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Marimea fisierului original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Marimea fisierului original</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>Tipul fisierului original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Tipul fisierului original</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>MD5 arhiva</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">MD5 arhiva</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Marimea arhivei</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Marimea arhivei</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Metadatele documentului original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="translated">Metadatele documentului original</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Metadatele documentului arhivat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="translated">Metadatele documentului arhivat</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Salveaza si continua</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="translated">Salveaza si continua</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Salut, <x equiv-text="this.displayName" id="PH"/>, bine ai venit la Paperless-ng!</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Salut, <x equiv-text="this.displayName" id="PH"/>, bine ai venit la Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Bine ai venit la Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Bine ai venit la Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Tablou de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Tablou de bord</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Sunteti sigur ca doriti sa stergeti eticheta "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Sunteti sigur ca doriti sa stergeti eticheta "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Etichete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Etichete</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Creeaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="translated">Creeaza</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filtreaza dupa:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Filtreaza dupa:</target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Nume</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nume</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Culoare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Culoare</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Potrivire</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Potrivire</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Numar de documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Numar de documente</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Acțiuni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Acțiuni</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Documente</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Editează</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="translated">Editează</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Sunteti sigur ca doriti sa stergeti tipul de document "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Sunteti sigur ca doriti sa stergeti tipul de document "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Tipuri de documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Tipuri de documente</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Jurnale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Jurnale</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost stearsa.</target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost stearsa.</target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Setarile au fost salvate.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="translated">Setarile au fost salvate.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Foloseste limba sistemului</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Foloseste limba sistemului</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Foloseste formatul datei corespunzator limbii de afisare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="translated">Foloseste formatul datei corespunzator limbii de afisare</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Eroare la stocarea setarilor pe server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Eroare la stocarea setarilor pe server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Setari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Setari</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>Setari generale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Setari generale</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Notificari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="translated">Notificari</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Vizualizari</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="translated">Vizualizari</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Afisare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Afisare</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Limba de afisare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Limba de afisare</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>Trebuie sa reincarcati pagina dupa schimbarea limbii.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Trebuie sa reincarcati pagina dupa schimbarea limbii.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Afisarea datei</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Afisarea datei</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Formatul datei</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Formatul datei</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Scurt: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Scurt: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Mediu: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Mediu: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Lung: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Lung: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Articole pe pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Articole pe pagina</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Editor de documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="translated">Editor de documente</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Folositi browserul pentru a deschide PDF-uri</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Folositi browserul pentru a deschide PDF-uri</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>Aceasta optiune este mai rapida pentru PDF-uri mari, dar nu este compatibila cu toate browserele.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Aceasta optiune este mai rapida pentru PDF-uri mari, dar nu este compatibila cu toate browserele.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Mod intunecat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Mod intunecat</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Folositi setarile sistemului</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Folositi setarile sistemului</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Activati modul intunecat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="translated">Activati modul intunecat</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Inverseaza miniaturile in modul intunecat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Inverseaza miniaturile in modul intunecat</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Editare in bloc</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Editare in bloc</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Afisati dialoguri de confirmare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Afisati dialoguri de confirmare</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>Stergerea documentelor necesita intotdeauna confirmare.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Stergerea documentelor necesita intotdeauna confirmare.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Aplica la iesire</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="translated">Aplica la iesire</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Procesarea documentelor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="translated">Procesarea documentelor</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Afisati notificari cand sunt detectate documente noi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Afisati notificari cand sunt detectate documente noi</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Afisati notificari cand procesarea unui document este completa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="translated">Afisati notificari cand procesarea unui document este completa</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Afisati notificari cand procesarea unui document esueaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="translated">Afisati notificari cand procesarea unui document esueaza</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Ascundeti notificarile pe tabloul de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Ascundeti notificarile pe tabloul de bord</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Aceasta setare va opri mesajele despre procesarea documentelor pe tabloul de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Aceasta setare va opri mesajele despre procesarea documentelor pe tabloul de bord</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Apare pe</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="translated">Apare pe</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Afiseaza pe tabloul de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="translated">Afiseaza pe tabloul de bord</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>Afiseaza in bara laterala</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="translated">Afiseaza in bara laterala</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>Nu sunt definite vizualizari.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Nu sunt definite vizualizari.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Pagina nu a fost gasita</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">404 Pagina nu a fost gasita</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Sunteti sigur ca doriti sa stergeti corespondentul "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Sunteti sigur ca doriti sa stergeti corespondentul "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Corespondenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Corespondenti</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Ultima corespondenta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Ultima corespondenta</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Confirmare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Confirmare</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Confirma</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Confirma</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Anuleaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Anuleaza</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Creeaza un nou corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Creeaza un nou corespondent</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Modifica un corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Modifica un corespondent</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Algoritm de potrivire</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Algoritm de potrivire</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Model de potrivire</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Model de potrivire</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Ignora majusculele</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Ignora majusculele</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Creeaza o noua eticheta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Creeaza o noua eticheta</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Modifica o eticheta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Modifica o eticheta</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>Eticheta inbox</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Eticheta inbox</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>Etichetele inbox sunt atribuite automat documentelor consumate.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Etichetele inbox sunt atribuite automat documentelor consumate.</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Creeaza un nou tip de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Creeaza un nou tip de document</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Modifica un tip de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Modifica un tip de document</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Rezultatele cautarii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Rezultatele cautarii</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Interogare invalida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Interogare invalida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target>Documente similare cu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/> </target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Documente similare cu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/> </target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Interogare: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Interogare: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Ati vrut sa scrieti "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Ati vrut sa scrieti "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {Niciun rezultat} =1 {Un rezultat} other {<x id="INTERPOLATION"/> rezultate}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =0 {Niciun rezultat} =1 {Un rezultat} other {<x id="INTERPOLATION"/> rezultate}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Cauta documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Cauta documente</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Deconectare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Deconectare</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Administreaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="translated">Administreaza</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Administrator</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="translated">Administrator</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Informatii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="translated">Informatii</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Documentatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="translated">Documentatie</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Sugestii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="translated">Sugestii</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Autentificat ca <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Autentificat ca <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Deschide documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Deschide documente</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Inchide tot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Inchide tot</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Titlu</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="translated">Titlu</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Titlu si continut</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Titlu si continut</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Corespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Corespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Fara corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Fara corespondent</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Tip: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Tip: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Fara tip</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="translated">Fara tip</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Eticheta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Eticheta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Fara etichete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Fara etichete</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Titlu: <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Titlu: <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Filtreaza etichete</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtreaza etichete</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Filtreaza corespondenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="translated">Filtreaza corespondenti</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Filtreaza tipuri de documente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Filtreaza tipuri de documente</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Resetati filtrele</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Resetati filtrele</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Neasignate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Neasignate</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Aplica</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Aplica</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Ultimele 7 zile</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Ultimele 7 zile</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Ultima luna</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Ultima luna</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Ultimele 3 luni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="translated">Ultimele 3 luni</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>Ultimul an</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="translated">Ultimul an</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>Dupa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Dupa</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Inainte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Inainte</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Goleste</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Goleste</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>Vizualizare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Vizualizare</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Creat: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Creat: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Filtreaza dupa corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtreaza dupa corespondent</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Filtreaza dupa eticheta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Filtreaza dupa eticheta</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Scor:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="translated">Scor:</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>Vizualizeaza in browser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="translated">Vizualizeaza in browser</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Eroare la executarea operatiunii in bloc: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Eroare la executarea operatiunii in bloc: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" si "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" si "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> si "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/> si "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Confirmati atribuirea etichetelor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="translated">Confirmati atribuirea etichetelor</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Va fi adaugata eticheta "<x equiv-text="tag.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Va fi adaugata eticheta "<x equiv-text="tag.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Va fi eliminata eticheta "<x equiv-text="tag.name" id="PH"/>" din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Va fi eliminata eticheta "<x equiv-text="tag.name" id="PH"/>" din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">Vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> si vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> pentru <x equiv-text="this.list.selected.size" id="PH_2"/> document(e) selectat(e).</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> si vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> pentru <x equiv-text="this.list.selected.size" id="PH_2"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Confirmati atribuirea corespondentului</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="translated">Confirmati atribuirea corespondentului</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Va fi adaugat corespondentul "<x equiv-text="correspondent.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">Va fi adaugat corespondentul "<x equiv-text="correspondent.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Va fi eliminat corespondentul din <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Va fi eliminat corespondentul din <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Confirmati atribuirea tipului de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="translated">Confirmati atribuirea tipului de document</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Va fi atribuit tipul "<x equiv-text="documentType.name" id="PH"/>" pentru <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">Va fi atribuit tipul "<x equiv-text="documentType.name" id="PH"/>" pentru <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Va fi eliminat tipul pentru <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">Va fi eliminat tipul pentru <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Confirmati stergerea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="translated">Confirmati stergerea</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target><x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e) vor fi sterse permanent.</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated"><x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e) vor fi sterse permanent.</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>Aceasta operatiune este ireversibila.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Aceasta operatiune este ireversibila.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Sterge document(e)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Sterge document(e)</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Selecteaza:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Selecteaza:</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>Tot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tot</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Editeaza:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Editeaza:</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Descarca originalele</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Descarca originalele</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Sugestii:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Sugestii:</target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Salveaza vizualizarea curenta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Salveaza vizualizarea curenta</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Arata tot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Arata tot</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Statistici</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Statistici</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Total documente: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Total documente: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documente in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Documente in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>In procesare: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">In procesare: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Esuate: <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Esuate: <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Adaugate: <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Adaugate: <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Conectare...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="translated">Conectare...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Incarcare...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Incarcare...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Incarcare completa, in asteptare...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Incarcare completa, in asteptare...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>Eroare HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Eroare HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Incarca documente noi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Incarca documente noi</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Trageti documentele aici sau</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Trageti documentele aici sau</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Rasfoiti fisiere</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Rasfoiti fisiere</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Inlatura operatiunile finalizate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Inlatura operatiunile finalizate</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Inca un document} other {Inca <x id="INTERPOLATION"/> documente}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, =1 {Inca un document} other {Inca <x id="INTERPOLATION"/> documente}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Deschide document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Deschide document</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>Primii pasi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Primii pasi</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>Paperless ruleaza! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="translated">Paperless ruleaza! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Puteti incepe sa incarcati fisiere tragandu-le in casuta din dreapta sau in directorul configurat de consum, si vor incepe sa apara in lista de documente. Dupa ce ati adaugat metadate documentelor, folositi mecanismele de filtrare pentru a crea vizualizari personalizate (cum ar fi "Adaugate recent", "Etichetate URGENT"), ce vor aparea in locul acestui mesaj.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="translated">Puteti incepe sa incarcati fisiere tragandu-le in casuta din dreapta sau in directorul configurat de consum, si vor incepe sa apara in lista de documente. Dupa ce ati adaugat metadate documentelor, folositi mecanismele de filtrare pentru a crea vizualizari personalizate (cum ar fi "Adaugate recent", "Etichetate URGENT"), ce vor aparea in locul acestui mesaj.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>Paperless mai ofera urmatoarele functii pentru a va face viata mai usoara:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Paperless mai ofera urmatoarele functii pentru a va face viata mai usoara:</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Dupa ce aveti cateva documente si le adaugati metadate, Paperless poate atribui acele metadate in mod automat pentru documente noi.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Dupa ce aveti cateva documente si le adaugati metadate, Paperless poate atribui acele metadate in mod automat pentru documente noi.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Puteti configura Paperless sa va citeasca email-urile si sa adauge documentele atasate.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Puteti configura Paperless sa va citeasca email-urile si sa adauge documentele atasate.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Consultati documentatia pentru a afla cum sa folositi aceste functii. Sectiunea de baza contine informatii despre cum sa folositi Paperless in general.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Consultati documentatia pentru a afla cum sa folositi aceste functii. Sectiunea de baza contine informatii despre cum sa folositi Paperless in general.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Metadate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Metadate</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Selecteaza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Selecteaza</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Selectati un obiect</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Selectati un obiect</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Data invalida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Data invalida.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Da</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Da</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>Nu</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nu</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(fara titlu)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">(fara titlu)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>Engleza (SUA)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="translated">Engleza (SUA)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>Engleza (UK)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Engleza (UK)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>Germana</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="translated">Germana</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Olandeza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="translated">Olandeza</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>Franceza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Franceza</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Portugheza (Brazilia)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Portugheza (Brazilia)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italiana</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="translated">Italiana</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Romana</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Romana</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Documentul exista deja.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Documentul exista deja.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>Fisierul nu a fost gasit.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Fisierul nu a fost gasit.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Scriptul pre-consum nu exista.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Scriptul pre-consum nu exista.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Eroare la executia scriptului pre-consum.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Eroare la executia scriptului pre-consum.</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Scriptul post-consum nu exista.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Scriptul post-consum nu exista.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Eroare la executia scriptului post-consum.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Eroare la executia scriptului post-consum.</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Fisier nou primit.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Fisier nou primit.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>Tip de fisier nesuportat.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Tip de fisier nesuportat.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Se proceseaza documentul...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Se proceseaza documentul...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Se genereaza miniatura...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Se genereaza miniatura...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Se extrage data din document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Se extrage data din document...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Se salveaza documentul...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Se salveaza documentul...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Terminat.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Terminat.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Eroare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Eroare</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Informatii</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Informatii</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Corespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Corespondent</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Tipul documentului</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tipul documentului</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Creat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Creat</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Adaugat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Adaugat</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Modificat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Modificat</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Creeaza articol nou</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Creeaza articol nou</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Modifica articol</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="translated">Modifica articol</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Nu s-a putut salva elementul: <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Nu s-a putut salva elementul: <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Automat</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Sunteti sigur ca doriti sa stergeti acest element?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Sunteti sigur ca doriti sa stergeti acest element?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>Documentele asociate nu vor fi sterse.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="translated">Documentele asociate nu vor fi sterse.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Sterge</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Sterge</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Eroare la stergerea elementului: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Eroare la stergerea elementului: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Oricare cuvant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Oricare cuvant</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Oricare: Documentul contine oricare dintre aceste cuvinte (separate prin spatiu)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Oricare: Documentul contine oricare dintre aceste cuvinte (separate prin spatiu)</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>Toate cuvintele</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Toate cuvintele</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>Toate: Documentul contine toate aceste cuvinte (separate prin spatiu)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Toate: Documentul contine toate aceste cuvinte (separate prin spatiu)</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Potrivire exacta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Potrivire exacta</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Exact: Documentul contine acest sir de caractere</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Exact: Documentul contine acest sir de caractere</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Expresie regulata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Expresie regulata</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Expresie regulata: Documentul se potriveste cu aceasta expresie regulata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Expresie regulata: Documentul se potriveste cu aceasta expresie regulata</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Cuvant neclar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Cuvant neclar</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Neclar: Documentul contine un cuvant similar cu acesta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Neclar: Documentul contine un cuvant similar cu acesta</target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Auto: Invata potrivirile automat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Auto: Invata potrivirile automat</target> </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From 7a79145d96506e1956f6f9b8db9a445f8eb047aa Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:12 +0100 Subject: [PATCH 506/898] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 1265 +++++++++++++------------- 1 file changed, 633 insertions(+), 632 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 354b14391..f969efcdb 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1,2281 +1,2282 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="nl-NL"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="nl"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Document toegevoegd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Document toegevoegd</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Document <x equiv-text="status.filename" id="PH"/> werd toegevoegd aan paperless.</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Document <x equiv-text="status.filename" id="PH"/> werd toegevoegd aan paperless.</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Open document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="needs-translation">Open document</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Kon niet toevoegen <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Kon niet toevoegen <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>Nieuw document gedetecteerd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Nieuw document gedetecteerd</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Document <x equiv-text="status.filename" id="PH"/> wordt verwerkt door paperless.</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Document <x equiv-text="status.filename" id="PH"/> wordt verwerkt door paperless.</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Documenten</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" met succes opgeslagen.</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" met succes opgeslagen.</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>View "<x equiv-text="savedView.name" id="PH"/>" met succes gemaakt.</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">View "<x equiv-text="savedView.name" id="PH"/>" met succes gemaakt.</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Selecteer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Selecteer</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Niets selecteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Niets selecteren</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Selecteer pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Selecteer pagina</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Alles selecteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Alles selecteren</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Sorteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Sorteren</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="needs-translation">Views</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Opslaan als...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Opslaan als...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Opslaan "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">Opslaan "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {<x id="INTERPOLATION"/> van één document geselecteerd} other {<x id="INTERPOLATION"/> van <x id="INTERPOLATION_1"/> documenten geselecteerd}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {<x id="INTERPOLATION"/> van één document geselecteerd} other {<x id="INTERPOLATION"/> van <x id="INTERPOLATION_1"/> documenten geselecteerd}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Eén document} other {<x id="INTERPOLATION"/> documenten}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Eén document} other {<x id="INTERPOLATION"/> documenten}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(gefilterd)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">(gefilterd)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="needs-translation">Correspondent</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Titel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Titel</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Documenttype</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Aangemaakt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="translated">Aangemaakt</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Toegevoegd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Toegevoegd</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Bevestig het verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Bevestig het verwijderen</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Wilt u het document echt verwijderen "<x equiv-text="this.document.title" id="PH"/>"?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Wilt u het document echt verwijderen "<x equiv-text="this.document.title" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>De bestanden voor dit document worden definitief verwijderd. Deze bewerking kan niet ongedaan worden gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">De bestanden voor dit document worden definitief verwijderd. Deze bewerking kan niet ongedaan worden gemaakt.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Verwijder document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="translated">Verwijder document</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Fout bij het verwijderen van het document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Fout bij het verwijderen van het document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Verwijderen</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Download</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="needs-translation">Download</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>Meer zoals dit</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Meer zoals dit</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="translated">Sluiten</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Details</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="needs-translation">Details</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Inhoud</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Inhoud</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="needs-translation">Metadata</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Negeren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Negeren</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Opslaan</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Opslaan</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Pagina</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>van <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">van <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Download origineel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Download origineel</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Archief serienummer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="translated">Archief serienummer</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Aanmaakdatum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="translated">Aanmaakdatum</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Wijzigingsdatum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Wijzigingsdatum</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Datum toegevoegd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Datum toegevoegd</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Media bestandsnaam</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Media bestandsnaam</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>Originele MD5 checksum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Originele MD5 checksum</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Originele bestandsgrootte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Originele bestandsgrootte</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>Oorspronkelijke mime-type</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Oorspronkelijke mime-type</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>Archief MD5 checksum</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Archief MD5 checksum</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Archief bestandsgrootte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Archief bestandsgrootte</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Originele document metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="translated">Originele document metadata</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Gearchiveerde document metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="translated">Gearchiveerde document metadata</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Opslaan & volgende</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="translated">Opslaan & volgende</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Hallo <x equiv-text="this.displayName" id="PH"/>, welkom bij Paperless-ng!</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Hallo <x equiv-text="this.displayName" id="PH"/>, welkom bij Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Welkom bij Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Welkom bij Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Dashboard</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Wil je het etiket echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Wil je het etiket echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Etiketten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Etiketten</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Maak</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="translated">Maak</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filter op:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Filter op:</target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Naam</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Naam</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Kleur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Kleur</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Overeenkomend</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Overeenkomend</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Aantal documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Aantal documenten</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Acties</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Acties</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Documenten</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Bewerk</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="translated">Bewerk</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Wilt u het documenttype echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Wilt u het documenttype echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Documenttypen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Documenttypen</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Logs</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Logs</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Opgeslagen view "<x equiv-text="savedView.name" id="PH"/>" verwijderd.</target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Opgeslagen view "<x equiv-text="savedView.name" id="PH"/>" verwijderd.</target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Instellingen succesvol opgeslagen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="translated">Instellingen succesvol opgeslagen.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Gebruik de systeemtaal</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Gebruik de systeemtaal</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Datumopmaak van weergavetaal gebruiken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="translated">Datumopmaak van weergavetaal gebruiken</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Instellingen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Instellingen</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>Algemene instellingen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Algemene instellingen</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Meldingen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="translated">Meldingen</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Opgeslagen views</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="translated">Opgeslagen views</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Uiterlijk</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Uiterlijk</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Taal</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Taal</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>De pagina moet herladen worden nadat een andere taal werd gekozen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">De pagina moet herladen worden nadat een andere taal werd gekozen.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Datumweergave</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Datumweergave</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Datumopmaak</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Datumopmaak</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Kort: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Kort: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Lang: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Lang: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Resultaten per pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Resultaten per pagina</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Documentbewerker</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="translated">Documentbewerker</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Gebruik de PDF lezer ingebouwd in uw browser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Gebruik de PDF lezer ingebouwd in uw browser</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>Dit is gewoonlijk sneller om grote PDF's te tonen, maar werkt niet bij elke browser.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Dit is gewoonlijk sneller om grote PDF's te tonen, maar werkt niet bij elke browser.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Nachtmodus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Nachtmodus</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Gebruik systeeminstellingen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Gebruik systeeminstellingen</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Gebruik nachtmodus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="translated">Gebruik nachtmodus</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Toon negatief van previews in nachtmodus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Toon negatief van previews in nachtmodus</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Massabewerking</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Massabewerking</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Toon dialoogvenster ter bevestiging</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Toon dialoogvenster ter bevestiging</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>Er zal altijd om bevestiging gevraagd worden voor het verwijderen van documenten.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Er zal altijd om bevestiging gevraagd worden voor het verwijderen van documenten.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Toepassen bij het sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="translated">Toepassen bij het sluiten</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Verwerking van documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="translated">Verwerking van documenten</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Toon meldingen wanneer nieuwe documenten worden gedetecteerd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Toon meldingen wanneer nieuwe documenten worden gedetecteerd</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Toon een melding wanneer documenten met succes zijn verwerkt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="translated">Toon een melding wanneer documenten met succes zijn verwerkt</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Toon meldingen wanneer het verwerken van documenten faalt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="translated">Toon meldingen wanneer het verwerken van documenten faalt</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Onderdruk meldingen op het dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Onderdruk meldingen op het dashboard</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Dit verbergt alle statusberichten op het dashboard die met het verwerken van documenten te maken hebben.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Dit verbergt alle statusberichten op het dashboard die met het verwerken van documenten te maken hebben.</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Komt voor bij</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="translated">Komt voor bij</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Toon op het dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="translated">Toon op het dashboard</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>Toon in de zijbalk</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="translated">Toon in de zijbalk</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>Geen opgeslagen views gedefinieerd.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Geen opgeslagen views gedefinieerd.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Niet Gevonden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">404 Niet Gevonden</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Bent u zeker dat u correspondent "<x equiv-text="object.name" id="PH"/>" wilt verwijderen?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Bent u zeker dat u correspondent "<x equiv-text="object.name" id="PH"/>" wilt verwijderen?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Correspondenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Correspondenten</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Laatste correspondentie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Laatste correspondentie</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Bevestiging</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Bevestiging</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Bevestig</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Bevestig</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Annuleren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Annuleren</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Nieuwe correspondent maken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Nieuwe correspondent maken</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Correspondent bewerken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Correspondent bewerken</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Algoritme voor het bepalen van de overeenkomst</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Algoritme voor het bepalen van de overeenkomst</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Patroon voor overeenkomst</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Patroon voor overeenkomst</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Niet hoofdlettergevoelig</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Niet hoofdlettergevoelig</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Nieuw etiket maken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Nieuw etiket maken</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Etiket bewerken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Etiket bewerken</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>"Postvak in"-etiket</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">"Postvak in"-etiket</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten."</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten."</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Nieuw documenttype maken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Nieuw documenttype maken</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Documenttype bewerken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Documenttype bewerken</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Zoekresultaten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Zoekresultaten</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Ongeldige zoekopdracht: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Ongeldige zoekopdracht: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target>Toon documenten die lijken op <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Toon documenten die lijken op <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Zoekopdracht: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Zoekopdracht: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Bedoelde u "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Bedoelde u "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {Geen resultaten} =1 {Eén resultaat} other {<x id="INTERPOLATION"/> resultaten}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =0 {Geen resultaten} =1 {Eén resultaat} other {<x id="INTERPOLATION"/> resultaten}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Documenten doorzoeken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Documenten doorzoeken</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Afmelden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Afmelden</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Beheren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="translated">Beheren</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Beheer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="translated">Beheer</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Informatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="translated">Informatie</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Handleiding</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="translated">Handleiding</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Ideeënbus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="translated">Ideeënbus</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Aangemeld als <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Aangemeld als <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Open documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Open documenten</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Alles sluiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Alles sluiten</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Titel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="translated">Titel</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Titel en inhoud</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Titel en inhoud</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Zonder correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Zonder correspondent</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Zonder documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="translated">Zonder documenttype</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Etiket: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Etiket: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Zonder enig etiket</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Zonder enig etiket</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Titel: <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Titel: <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Etiketten filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Etiketten filteren</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Correspondenten filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="translated">Correspondenten filteren</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Documenttypes filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Documenttypes filteren</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Filters terug zetten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Filters terug zetten</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Niet toegekend</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Niet toegekend</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Toepassen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Toepassen</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Afgelopen 7 dagen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Afgelopen 7 dagen</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Afgelopen maand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Afgelopen maand</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Afgelopen 3 maanden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="translated">Afgelopen 3 maanden</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>Afgelopen jaar</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="translated">Afgelopen jaar</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>Na</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Na</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Voor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Voor</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Leegmaken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Leegmaken</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>Bekijken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Bekijken</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Aangemaakt op: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Aangemaakt op: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Op correspondent filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Op correspondent filteren</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Op etiket filteren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Op etiket filteren</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Score:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="needs-translation">Score:</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>In uw browser bekijken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="translated">In uw browser bekijken</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Fout bij het uitvoeren van een massabewerking: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Fout bij het uitvoeren van een massabewerking: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" en "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" en "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> en "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/> en "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Bevestig toewijzen van etiketten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="translated">Bevestig toewijzen van etiketten</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Het etiket "<x equiv-text="tag.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Het etiket "<x equiv-text="tag.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Het etiket "<x equiv-text="tag.name" id="PH"/>" zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Het etiket "<x equiv-text="tag.name" id="PH"/>" zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>De etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">De etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen toegevoegd worden aan, en de etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_2"/> geselecteerd(e) document(en).</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen toegevoegd worden aan, en de etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_2"/> geselecteerd(e) document(en).</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Bevestig toewijzen van correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="translated">Bevestig toewijzen van correspondent</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>De correspondent "<x equiv-text="correspondent.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">De correspondent "<x equiv-text="correspondent.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>De correspondent zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">De correspondent zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Bevestig toewijzen van documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="translated">Bevestig toewijzen van documenttype</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Het documenttype "<x equiv-text="documentType.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">Het documenttype "<x equiv-text="documentType.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Het documenttype zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">Het documenttype zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Bevestig verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="translated">Bevestig verwijderen</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target><x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en) zullen permanent worden verwijderd.</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated"><x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en) zullen permanent worden verwijderd.</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>Deze actie kan niet ongedaan worden gemaakt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Deze actie kan niet ongedaan worden gemaakt.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Verwijder document(en)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Verwijder document(en)</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Selecteer:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Selecteer:</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>Alles</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Alles</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Bewerk:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Bewerk:</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Originelen downloaden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Originelen downloaden</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Suggesties:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Suggesties:</target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Huidige view opslaan</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Huidige view opslaan</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Toon alles</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Toon alles</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Statistieken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Statistieken</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Totaal aantal documenten: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Totaal aantal documenten: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documenten in "Postvak in": <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Documenten in "Postvak in": <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>Bezig met verwerken: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Bezig met verwerken: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Gefaald: <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Gefaald: <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Toegevoegd: <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Toegevoegd: <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Bezig met verbinden...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="translated">Bezig met verbinden...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Bezig met opladen...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Bezig met opladen...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Upload voltooid, klaar voor meer...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Upload voltooid, klaar voor meer...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>HTTP fout: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">HTTP fout: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Nieuwe documenten opladen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Nieuwe documenten opladen</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Sleep documenten hierheen, of</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Sleep documenten hierheen, of</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Kies bestanden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Kies bestanden</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Verberg verwerkte documenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Verberg verwerkte documenten</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Nog één document} other {Nog <x id="INTERPOLATION"/> documenten}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, =1 {Nog één document} other {Nog <x id="INTERPOLATION"/> documenten}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Open document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="needs-translation">Open document</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>Laten we aan de slag gaan</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Laten we aan de slag gaan</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>Paperless is gestart! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="translated">Paperless is gestart! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Je kunt documenten uploaden door bestanden in het oplaadvak rechts te slepen of door ze in de map te kopiëren die geconfigureerd werd als consumptiemap. Ze zullen vervolgens beginnen verschijnen in de lijst met documenten. Nadat je metadata hebt toegevoegd aan je documenten, kun je de filters in Paperless gebruiken om eigen views te maken (zoals 'Recent toegevoegd', 'Te bekijken'). Deze views zullen hier verschijnen in plaats van dit bericht.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="translated">Je kunt documenten uploaden door bestanden in het oplaadvak rechts te slepen of door ze in de map te kopiëren die geconfigureerd werd als consumptiemap. Ze zullen vervolgens beginnen verschijnen in de lijst met documenten. Nadat je metadata hebt toegevoegd aan je documenten, kun je de filters in Paperless gebruiken om eigen views te maken (zoals 'Recent toegevoegd', 'Te bekijken'). Deze views zullen hier verschijnen in plaats van dit bericht.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>Paperless heeft nog meer in petto om jouw leven makkelijker te maken:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Paperless heeft nog meer in petto om jouw leven makkelijker te maken:</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Eenmaal je documenten hebt toegevoegd en metadata hebt toegewezen, kan Paperless automatisch die metadata aan nieuwe documenten toewijzen.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Eenmaal je documenten hebt toegevoegd en metadata hebt toegewezen, kan Paperless automatisch die metadata aan nieuwe documenten toewijzen.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Je kunt Paperless configureren om mails te lezen en documenten toe te voegen vanuit bijlagen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Je kunt Paperless configureren om mails te lezen en documenten toe te voegen vanuit bijlagen.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Lees de documentatie na om deze functies te ontdekken. Het hoofdstuk over basisgebruik biedt ook inzichten over het gebruik van Paperless in het algemeen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Lees de documentatie na om deze functies te ontdekken. Het hoofdstuk over basisgebruik biedt ook inzichten over het gebruik van Paperless in het algemeen.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Metadata</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">Metadata</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Selecteer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Selecteer</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Selecteer een object</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Selecteer een object</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Ongeldige datum.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Ongeldige datum.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Ja</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Ja</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>Nee</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nee</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(geen titel)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">(geen titel)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>Engels (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="translated">Engels (US)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>Engels (Brits)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Engels (Brits)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>Duits</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="translated">Duits</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Nederlands</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="translated">Nederlands</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>Frans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Frans</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Portugees (Brazilië)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Portugees (Brazilië)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italiaans</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="translated">Italiaans</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Roemeens</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Roemeens</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Document bestaat al.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Document bestaat al.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>Bestand niet gevonden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Bestand niet gevonden.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Pre-verwerkingsscript bestaat niet.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Pre-verwerkingsscript bestaat niet.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Fout tijdens het uitvoeren van het pre-verwerkingsscript</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Fout tijdens het uitvoeren van het pre-verwerkingsscript</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Post-verwerkingsscript bestaat niet.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Post-verwerkingsscript bestaat niet.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Fout tijdens het uitvoeren van het post-verwerkingsscript</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Fout tijdens het uitvoeren van het post-verwerkingsscript</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Nieuw bestand ontvangen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Nieuw bestand ontvangen.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>Bestandstype niet ondersteund.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Bestandstype niet ondersteund.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Document wordt verwerkt...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Document wordt verwerkt...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Voorbeeldweergave wordt gemaakt...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Voorbeeldweergave wordt gemaakt...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Datum wordt gezocht in document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Datum wordt gezocht in document...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Document wordt opgeslagen...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Document wordt opgeslagen...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Klaar.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Klaar.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Fout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Fout</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Informatie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Informatie</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Correspondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="needs-translation">Correspondent</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Documenttype</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Documenttype</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Aangemaakt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Aangemaakt</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Toegevoegd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Toegevoegd</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Gewijzigd</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Gewijzigd</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Maak nieuw item</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Maak nieuw item</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Item bewerken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="translated">Item bewerken</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Kon het element niet opslaan: <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Kon het element niet opslaan: <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automatisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Automatisch</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Wil je dit element echt verwijderen?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Wil je dit element echt verwijderen?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>Geassocieerde documenten zullen niet verwijderd worden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="translated">Geassocieerde documenten zullen niet verwijderd worden.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Verwijderen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Verwijderen</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Fout bij het verwijderen van het element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Fout bij het verwijderen van het element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Eender welk woord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Eender welk woord</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Eender welk: Documenten die eender welk van deze woorden bevatten (gescheiden door spaties)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Eender welk: Documenten die eender welk van deze woorden bevatten (gescheiden door spaties)</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>Alle woorden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Alle woorden</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>Alle: Documenten die elk van deze woorden bevatten (gescheiden door spaties)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Alle: Documenten die elk van deze woorden bevatten (gescheiden door spaties)</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Exacte overeenkomst</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Exacte overeenkomst</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Exact: Document bevat deze tekenreeks</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Exact: Document bevat deze tekenreeks</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Reguliere expressie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Reguliere expressie</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Reguliere expressie: Document voldoet aan deze reguliere expressie</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Reguliere expressie: Document voldoet aan deze reguliere expressie</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Gelijkaardig woord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Gelijkaardig woord</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Gelijkaardig: Document bevat een woord dat lijkt op dit woord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Gelijkaardig: Document bevat een woord dat lijkt op dit woord</target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Auto: Automatisch overeenkomsten aanleren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Auto: Automatisch overeenkomsten aanleren</target> </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From c5a67efe1d982ad8f719e95560d749e6c485675c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:13 +0100 Subject: [PATCH 507/898] New translations django.po (Dutch) [ci skip] --- src/locale/nl_NL/LC_MESSAGES/django.po | 120 ++++++++----------------- 1 file changed, 38 insertions(+), 82 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 7dae056cf..7aba94bba 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -1,27 +1,21 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Jonas Winkler, 2021 -# Jo Vandeginste <jo.vandeginste@gmail.com>, 2021 -# Ben <bzweekhorst@gmail.com>, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Ben <bzweekhorst@gmail.com>, 2021\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/paperless/teams/115905/nl_NL/)\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Dutch\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: nl\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" @@ -70,7 +64,7 @@ msgstr "is niet hoofdlettergevoelig" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "correspondent" +msgstr "" #: documents/models.py:75 msgid "correspondents" @@ -85,12 +79,8 @@ msgid "is inbox tag" msgstr "is \"Postvak in\"-etiket" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Markeer dit etiket als een \"Postvak in\"-etiket: alle nieuw verwerkte " -"documenten krijgen de \"Postvak in\"-etiketten." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Markeer dit etiket als een \"Postvak in\"-etiket: alle nieuw verwerkte documenten krijgen de \"Postvak in\"-etiketten." #: documents/models.py:94 msgid "tag" @@ -125,12 +115,8 @@ msgid "content" msgstr "inhoud" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"De onbewerkte gegevens van het document. Dit veld wordt voornamelijk " -"gebruikt om te zoeken." +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "De onbewerkte gegevens van het document. Dit veld wordt voornamelijk gebruikt om te zoeken." #: documents/models.py:144 msgid "mime type" @@ -138,7 +124,7 @@ msgstr "mimetype" #: documents/models.py:155 msgid "checksum" -msgstr "checksum" +msgstr "" #: documents/models.py:159 msgid "The checksum of the original document." @@ -194,7 +180,7 @@ msgstr "De positie van dit document in je fysieke documentenarchief." #: documents/models.py:223 msgid "document" -msgstr "document" +msgstr "" #: documents/models.py:224 msgid "documents" @@ -202,7 +188,7 @@ msgstr "documenten" #: documents/models.py:311 msgid "debug" -msgstr "debug" +msgstr "" #: documents/models.py:312 msgid "information" @@ -278,11 +264,11 @@ msgstr "inhoud bevat" #: documents/models.py:372 msgid "ASN is" -msgstr "ASN is" +msgstr "" #: documents/models.py:373 msgid "correspondent is" -msgstr "correspondent is" +msgstr "" #: documents/models.py:374 msgid "document type is" @@ -448,41 +434,27 @@ msgstr "Paperless-ng administratie" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "Filter" +msgstr "" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless verwerkt alleen e-mails die voldoen aan ALLE onderstaande filters." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless verwerkt alleen e-mails die voldoen aan ALLE onderstaande filters." #: paperless_mail/admin.py:37 msgid "Actions" msgstr "Acties" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"De actie die wordt toegepast op de mail. Deze actie wordt alleen uitgevoerd " -"wanneer documenten verwerkt werden uit de mail. Mails zonder bijlage blijven" -" onaangeroerd." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "De actie die wordt toegepast op de mail. Deze actie wordt alleen uitgevoerd wanneer documenten verwerkt werden uit de mail. Mails zonder bijlage blijven onaangeroerd." #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "Metadata" +msgstr "" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Automatisch metadata toewijzen aan documenten vanuit deze regel. Indien je " -"geen etiketten, documenttypes of correspondenten toewijst, zal Paperless nog" -" steeds alle regels verwerken die je hebt gedefinieerd." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Automatisch metadata toewijzen aan documenten vanuit deze regel. Indien je geen etiketten, documenttypes of correspondenten toewijst, zal Paperless nog steeds alle regels verwerken die je hebt gedefinieerd." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -517,12 +489,8 @@ msgid "IMAP port" msgstr "IMAP-poort" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"Dit is gewoonlijk 143 voor onversleutelde of STARTTLS verbindingen, en 993 " -"voor SSL verbindingen." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Dit is gewoonlijk 143 voor onversleutelde of STARTTLS verbindingen, en 993 voor SSL verbindingen." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -598,7 +566,7 @@ msgstr "volgorde" #: paperless_mail/models.py:120 msgid "account" -msgstr "account" +msgstr "" #: paperless_mail/models.py:124 msgid "folder" @@ -621,13 +589,8 @@ msgid "filter attachment filename" msgstr "Filter bestandsnaam van bijlage" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Alleen documenten verwerken die volledig overeenkomen, indien aangegeven. Je" -" kunt jokertekens gebruiken, zoals *.pdf of *factuur*. Dit is niet " -"hoofdlettergevoelig." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Alleen documenten verwerken die volledig overeenkomen, indien aangegeven. Je kunt jokertekens gebruiken, zoals *.pdf of *factuur*. Dit is niet hoofdlettergevoelig." #: paperless_mail/models.py:146 msgid "maximum age" @@ -642,12 +605,8 @@ msgid "attachment type" msgstr "Type bijlage" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"\"Inline\" bijlagen bevatten vaak ook afbeeldingen. In dit geval valt het " -"aan te raden om ook een filter voor de bestandsnaam op te geven." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "\"Inline\" bijlagen bevatten vaak ook afbeeldingen. In dit geval valt het aan te raden om ook een filter voor de bestandsnaam op te geven." #: paperless_mail/models.py:159 msgid "action" @@ -658,12 +617,8 @@ msgid "action parameter" msgstr "actie parameters" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Extra parameters voor de hierboven gekozen actie, met andere woorden: de " -"bestemmingsmap voor de verplaats-actie." +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Extra parameters voor de hierboven gekozen actie, met andere woorden: de bestemmingsmap voor de verplaats-actie." #: paperless_mail/models.py:173 msgid "assign title from" @@ -684,3 +639,4 @@ msgstr "wijs correspondent toe van" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "wijs deze correspondent toe" + From 625d159b8cfa59c079b0d2b3229e5ace235220d3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:14 +0100 Subject: [PATCH 508/898] New translations messages.xlf (Italian) [ci skip] --- src-ui/src/locale/messages.it_IT.xlf | 1263 +++++++++++++------------- 1 file changed, 632 insertions(+), 631 deletions(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 721fc816c..19821f8b3 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1,2280 +1,2281 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="it"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="it"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Documento aggiunto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Documento aggiunto</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Il documento <x equiv-text="status.filename" id="PH"/> è stato aggiunto a paperless.</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Il documento <x equiv-text="status.filename" id="PH"/> è stato aggiunto a paperless.</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Apri documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Apri documento</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Impossibile aggiungere <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Impossibile aggiungere <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>Nuovo documento trovato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Nuovo documento trovato</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Paperless sta elaborando il documento <x equiv-text="status.filename" id="PH"/>.</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Paperless sta elaborando il documento <x equiv-text="status.filename" id="PH"/>.</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Documenti</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>La vista "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" è stata salvata.</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">La vista "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" è stata salvata.</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>La vista "<x equiv-text="savedView.name" id="PH"/>" è stata creata.</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">La vista "<x equiv-text="savedView.name" id="PH"/>" è stata creata.</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Selezione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Selezione</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Seleziona nessuno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Seleziona nessuno</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Seleziona pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Seleziona pagina</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Seleziona tutti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Seleziona tutti</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Ordina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Ordina</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Viste</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="translated">Viste</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Salva come...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Salva come...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Salva "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">Salva "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Selezionato <x id="INTERPOLATION"/> di un documento} other {Selezionati <x id="INTERPOLATION"/> di <x id="INTERPOLATION_1"/> documenti}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Selezionato <x id="INTERPOLATION"/> di un documento} other {Selezionati <x id="INTERPOLATION"/> di <x id="INTERPOLATION_1"/> documenti}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Un documento} other {<x id="INTERPOLATION"/> documenti}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Un documento} other {<x id="INTERPOLATION"/> documenti}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(filtrato)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">(filtrato)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Titolo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Titolo</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Tipo di documento</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Creato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="translated">Creato</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Aggiunto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Aggiunto</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Conferma eliminazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Conferma eliminazione</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Vuoi eliminare il documento "<x equiv-text="this.document.title" id="PH"/>"?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Vuoi eliminare il documento "<x equiv-text="this.document.title" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>I file di questo documento saranno eliminati permanentemente. Questa operazione è irreversibile.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">I file di questo documento saranno eliminati permanentemente. Questa operazione è irreversibile.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Elimina documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="translated">Elimina documento</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Errore nell'eliminazione del documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Errore nell'eliminazione del documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Elimina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Elimina</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Scarica</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Scarica</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>Altro come questo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Altro come questo</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Chiudi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="translated">Chiudi</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Dettagli</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="translated">Dettagli</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Contenuto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Contenuto</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Metadati</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="translated">Metadati</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Scarta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Scarta</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Salva</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Salva</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Pagina</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>di <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">di <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Scarica originale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Scarica originale</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Numero seriale di archivio</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="translated">Numero seriale di archivio</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Data creazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="translated">Data creazione</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Data modifica</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Data modifica</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Data aggiunta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Data aggiunta</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Nome del file multimediale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Nome del file multimediale</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>Somma MD5 originale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Somma MD5 originale</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Dimensione del file originale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Dimensione del file originale</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>Tipo mime originale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Tipo mime originale</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>Checksum MD5 dell'archivio</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Checksum MD5 dell'archivio</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Dimensione dell'archivio</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Dimensione dell'archivio</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Metadati del documento originale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="translated">Metadati del documento originale</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Metadati del documento archiviato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="translated">Metadati del documento archiviato</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Salva e vai al prossimo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="translated">Salva e vai al prossimo</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Ciao <x equiv-text="this.displayName" id="PH"/>, benvenuto su Paperless-ng!</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Ciao <x equiv-text="this.displayName" id="PH"/>, benvenuto su Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Benvenuto su Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Benvenuto su Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Dashboard</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Vuoi eliminare il tag "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Vuoi eliminare il tag "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Etichette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Etichette</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Crea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="translated">Crea</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filtra per:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Filtra per:</target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Nome</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nome</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Colore</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Colore</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Corrispondenza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Corrispondenza</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Numero di documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Numero di documenti</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Azioni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Azioni</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Documenti</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Modifica</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="translated">Modifica</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Vuoi eliminare il tipo di documento "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Vuoi eliminare il tipo di documento "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Tipi di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Tipi di documento</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Log</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Log</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>La vista "<x equiv-text="savedView.name" id="PH"/>" è stata eliminata. </target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">La vista "<x equiv-text="savedView.name" id="PH"/>" è stata eliminata. </target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Le impostazioni sono state salvate.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="translated">Le impostazioni sono state salvate.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Usa lingua di sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Usa lingua di sistema</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Usa il formato data della lingua di visualizzazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="translated">Usa il formato data della lingua di visualizzazione</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Errore durante il salvataggio delle impostazioni sul server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Errore durante il salvataggio delle impostazioni sul server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Impostazioni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Impostazioni</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>Impostazioni generali</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Impostazioni generali</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Notifiche</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="translated">Notifiche</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Viste salvate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="translated">Viste salvate</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Aspetto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Aspetto</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Lingua</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Lingua</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>Riavviare la pagina dopo avere impostato la nuova lingua.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Riavviare la pagina dopo avere impostato la nuova lingua.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Visualizzazione data</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Visualizzazione data</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Formato data</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Formato data</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Breve: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Breve: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Media: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Media: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Lunga: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Lunga: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Oggetti per pagina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Oggetti per pagina</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Editor dei documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="translated">Editor dei documenti</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Usa il visualizzatore PDF fornito dal browser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Usa il visualizzatore PDF fornito dal browser</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>Di solito è più rapido nel visualizzare documenti PDF grandi, ma potrebbe non funzionare su tutti i browser.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Di solito è più rapido nel visualizzare documenti PDF grandi, ma potrebbe non funzionare su tutti i browser.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Modalità notte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Modalità notte</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Usa impostazioni di sistema</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Usa impostazioni di sistema</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Abilita modalità notte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="translated">Abilita modalità notte</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Inverti anteptime in modalità notte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Inverti anteptime in modalità notte</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Modifica in blocco</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Modifica in blocco</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Mostra dialoghi di conferma</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Mostra dialoghi di conferma</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>L'eliminazione dei documenti chiederà sempre la conferma.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">L'eliminazione dei documenti chiederà sempre la conferma.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Applica in chiusura</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="translated">Applica in chiusura</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Elaborazione del documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="translated">Elaborazione del documento</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Notifica quando vengono trovati nuovi documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Notifica quando vengono trovati nuovi documenti</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Notifica quando l'elaborazione del documento viene completata con successo.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="translated">Notifica quando l'elaborazione del documento viene completata con successo.</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Notifica quando l'elaborazione del documento fallisce</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="translated">Notifica quando l'elaborazione del documento fallisce</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Non mostrare notifiche nella dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Non mostrare notifiche nella dashboard</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Verranno interrotte tutte le notifiche nella dashboard riguardo lo stato dell'elaborazione dei documenti.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Verranno interrotte tutte le notifiche nella dashboard riguardo lo stato dell'elaborazione dei documenti.</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Appare in</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="translated">Appare in</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Mostra nella dashboard</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="translated">Mostra nella dashboard</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>Mostra nella barra laterale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="translated">Mostra nella barra laterale</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>Nessuna vista salvata.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Nessuna vista salvata.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Non trovato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">404 Non trovato</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Vuoi eliminare il corrispondente "<x equiv-text="object.name" id="PH"/>"?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Vuoi eliminare il corrispondente "<x equiv-text="object.name" id="PH"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Corrispondenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Corrispondenti</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Ultrima corrispondenza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Ultrima corrispondenza</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Conferma</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Conferma</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Conferma</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Conferma</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Annulla</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Annulla</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Crea nuovo corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Crea nuovo corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Modifica corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Modifica corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Algoritmo di corrispondenza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Algoritmo di corrispondenza</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Criterio di corrispondenza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Criterio di corrispondenza</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Senza distinzione tra maiuscole e minuscole</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Senza distinzione tra maiuscole e minuscole</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Crea nuovo tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Crea nuovo tag</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Modifica tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Modifica tag</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>Tag di arrivo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Tag di arrivo</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>I tag di arrivo vengono assegnati automaticamente a tutti i documenti elaborati.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">I tag di arrivo vengono assegnati automaticamente a tutti i documenti elaborati.</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Crea nuovo tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Crea nuovo tipo di documento</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Modifica tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Modifica tipo di documento</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Risultati della ricerca</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Risultati della ricerca</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Query di ricerca non valida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Query di ricerca non valida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target>Documenti simili a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Documenti simili a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Query di ricerca: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Query di ricerca: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Forse intendevi "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Forse intendevi "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {Nessun risultato} =1 {Un risultato} other {<x id="INTERPOLATION"/> risultati}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =0 {Nessun risultato} =1 {Un risultato} other {<x id="INTERPOLATION"/> risultati}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Cerca documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Cerca documenti</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Esci</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Esci</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Gestisci</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="translated">Gestisci</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Amministratore</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="translated">Amministratore</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Informazioni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="translated">Informazioni</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Documentazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="translated">Documentazione</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Suggerisci un'idea</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="translated">Suggerisci un'idea</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Accesso effettuato come <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Accesso effettuato come <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Apri documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Apri documenti</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Chiudi tutti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Chiudi tutti</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Titolo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="translated">Titolo</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Titolo & contenuto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Titolo & contenuto</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Corrispondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Corrispondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Senza corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Senza corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Senza tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="translated">Senza tipo di documento</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Senza alcun tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Senza alcun tag</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Titolo: <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Titolo: <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Filtra tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtra tag</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Filtra corrispondenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="translated">Filtra corrispondenti</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Filtra tipi di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Filtra tipi di documento</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Ripristina filtri</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Ripristina filtri</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Non assegnato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Non assegnato</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Applica</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Applica</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Ultimi 7 giorni</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Ultimi 7 giorni</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Ultimo mese</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Ultimo mese</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Ultimi 3 mesi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="translated">Ultimi 3 mesi</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>Ultimo anno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="translated">Ultimo anno</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>Dopo</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Dopo</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Prima</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Prima</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Pulisci</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Pulisci</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>Mostra</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Mostra</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Creato il: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Creato il: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Filtra per corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtra per corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Filtra per tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Filtra per tag</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Punteggio:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="translated">Punteggio:</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>Apri nel browser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="translated">Apri nel browser</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Errore durante l'operazione di modifica in blocco: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Errore durante l'operazione di modifica in blocco: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>,</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="translated">,</target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/>e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/>e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Conferma assegnazione tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="translated">Conferma assegnazione tag</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione aggiungerà il tag "<x equiv-text="tag.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Questa operazione aggiungerà il tag "<x equiv-text="tag.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione rimuoverà il tag "<x equiv-text="tag.name" id="PH"/>" da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i. </target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Questa operazione rimuoverà il tag "<x equiv-text="tag.name" id="PH"/>" da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i. </target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">Questa operazione rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> a <x equiv-text="this.list.selected.size" id="PH_2"/> documento/i selezionato/i.</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> a <x equiv-text="this.list.selected.size" id="PH_2"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Conferma assegnazione corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="translated">Conferma assegnazione corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione assegnerà il corrispondente "<x equiv-text="correspondent.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">Questa operazione assegnerà il corrispondente "<x equiv-text="correspondent.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Questa operazione rimuoverà il corrispondente da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Questa operazione rimuoverà il corrispondente da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Conferma assegnazione tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="translated">Conferma assegnazione tipo di documento</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Questa operazione assegnerà il tipo di documento "<x equiv-text="documentType.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">Questa operazione assegnerà il tipo di documento "<x equiv-text="documentType.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Questa operazione eliminerà il tipo di documento da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i. </target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">Questa operazione eliminerà il tipo di documento da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i. </target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Conferma eliminazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="translated">Conferma eliminazione</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Questa operazione eliminerà definitivamente <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated">Questa operazione eliminerà definitivamente <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>Questa operazione non può essere annullata.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Questa operazione non può essere annullata.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Elimina documento/i</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Elimina documento/i</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Seleziona:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Seleziona:</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>Tutto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tutto</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Modifica:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Modifica:</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Scarica originali</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Scarica originali</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Suggerimenti:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Suggerimenti:</target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Salva vista corrente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Salva vista corrente</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Mostra tutto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Mostra tutto</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Statistiche</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Statistiche</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Documenti totali: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Documenti totali: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documenti taggati in arrivo: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Documenti taggati in arrivo: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>Elaborazione in corso: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Elaborazione in corso: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Falliti: <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Falliti: <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Aggiunti: <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Aggiunti: <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Connessione in corso...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="translated">Connessione in corso...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Caricamento in corso...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Caricamento in corso...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Caricamento completato, in attesa...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Caricamento completato, in attesa...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>Errore HTTP: <x equiv-text="error.status" id="PH"/><x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Errore HTTP: <x equiv-text="error.status" id="PH"/><x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Carica nuovi documenti</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Carica nuovi documenti</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Trascina qui i documenti oppure</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Trascina qui i documenti oppure</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Sfoglia i file</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Sfoglia i file</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Ignora completati</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Ignora completati</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Un altro documento} other {altri <x id="INTERPOLATION"/> documenti}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, =1 {Un altro documento} other {altri <x id="INTERPOLATION"/> documenti}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Apri documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Apri documento</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>Primi passi</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Primi passi</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>Paperless è in esecuzione! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="translated">Paperless è in esecuzione! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Puoi iniziare a caricare documenti trascinandoli nel riquadro per il caricamento posizionato sulla destra, oppure spostarli nella cartella di elaborazione e appariranno nella lista dei documenti. Dopo aver aggiunto i metadati ai tuoi documenti, usa i meccanismi di filtraggio per creare viste personalizzate (come 'Aggiunti di recente' o 'Da taggare') e appariranno sulla dashboard invece di questo messaggio.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="translated">Puoi iniziare a caricare documenti trascinandoli nel riquadro per il caricamento posizionato sulla destra, oppure spostarli nella cartella di elaborazione e appariranno nella lista dei documenti. Dopo aver aggiunto i metadati ai tuoi documenti, usa i meccanismi di filtraggio per creare viste personalizzate (come 'Aggiunti di recente' o 'Da taggare') e appariranno sulla dashboard invece di questo messaggio.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>Paperless offre alcune funzionalità che cercano di rendere migliore la tua vita:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Paperless offre alcune funzionalità che cercano di rendere migliore la tua vita:</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Quando avrai caricato qualche documento e aggiunto dei metadati, Paperless potrà assegnare automaticamente quei metadati ai nuovi documenti.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Quando avrai caricato qualche documento e aggiunto dei metadati, Paperless potrà assegnare automaticamente quei metadati ai nuovi documenti.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Puoi configurare Paperless per leggere le tue mail e aggiungere i documenti che trova negli allegati.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Puoi configurare Paperless per leggere le tue mail e aggiungere i documenti che trova negli allegati.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Controlla la documentazione per capire come usare queste funzioni. La sezione per l'utilizzo base ha anche qualche suggerimento su come usare Paperless in generale.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Controlla la documentazione per capire come usare queste funzioni. La sezione per l'utilizzo base ha anche qualche suggerimento su come usare Paperless in generale.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Metadati</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Metadati</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Seleziona</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Seleziona</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Seleziona un elemento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Seleziona un elemento</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Data non valida.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Data non valida.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Sì</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Sì</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>No</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="needs-translation">No</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(nessun titolo)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">(nessun titolo)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>Inglese (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="translated">Inglese (US)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>Inglese (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Inglese (GB)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>Tedesco</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="translated">Tedesco</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Olandese</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="translated">Olandese</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>Francese</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Francese</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Portoghese (Brasile)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Portoghese (Brasile)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italiano</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="translated">Italiano</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Rumeno</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Rumeno</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Il documento esiste già.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Il documento esiste già.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>File non trovato.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">File non trovato.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Lo script di pre-consume (pre elaborazione) non esiste.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Lo script di pre-consume (pre elaborazione) non esiste.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Errore durante l'esecuzione dello script di pre-consume (pre elaborazione).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Errore durante l'esecuzione dello script di pre-consume (pre elaborazione).</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Lo script di post-consume (post elaborazione) non esiste.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Lo script di post-consume (post elaborazione) non esiste.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Errore durante l'esecuzione dello script di post-consume (post elaborazione).</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Errore durante l'esecuzione dello script di post-consume (post elaborazione).</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Nuovo file ricevuto.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Nuovo file ricevuto.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>Tipo di file non supportato.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Tipo di file non supportato.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Elaborazione documento in corso...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Elaborazione documento in corso...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Generazione anteprima in corso...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Generazione anteprima in corso...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Recupero della data del documento in corso...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Recupero della data del documento in corso...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Salvataggio documento in corso...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Salvataggio documento in corso...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Completato.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Completato.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Errore</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Errore</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Informazione</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Informazione</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Corrispondente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Corrispondente</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Tipo di documento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tipo di documento</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Creato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Creato</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Aggiunto</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Aggiunto</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Modificato</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Modificato</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Crea nuovo elemento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Crea nuovo elemento</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Modifica elemento</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="translated">Modifica elemento</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Non è possibile salvare l'elemento: <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Non è possibile salvare l'elemento: <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automatico</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Automatico</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Vuoi eliminare questo elemento?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Vuoi eliminare questo elemento?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>I documenti associati non verranno eliminati.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="translated">I documenti associati non verranno eliminati.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Elimina</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Elimina</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Errore durante l'eliminazione dell'elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Errore durante l'eliminazione dell'elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Qualsiasi parola</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Qualsiasi parola</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Qualsiasi: il documento contiene una qualunque di queste parole (separate dallo spazio)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Qualsiasi: il documento contiene una qualunque di queste parole (separate dallo spazio)</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>Tutte le parole</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Tutte le parole</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>Tutto: il documento contiene tutte queste parole (separate dallo spazio)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Tutto: il documento contiene tutte queste parole (separate dallo spazio)</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Corrispondenza esatta</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Corrispondenza esatta</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Puntuale: il documento contiene questa stringa</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Puntuale: il documento contiene questa stringa</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Espressione regolare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Espressione regolare</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Espressione regolare: il documento corrisponde a questa espressione regolare</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Espressione regolare: il documento corrisponde a questa espressione regolare</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Parola fuzzy</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Parola fuzzy</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Fuzzy: il documento contiene una parola simile a questa </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Fuzzy: il documento contiene una parola simile a questa </target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Automatico: apprende automaticamente la corrispondenza</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Automatico: apprende automaticamente la corrispondenza</target> </trans-unit> </body> </file> From 11fce64d2bf40be11d12e256a69940170fad64f1 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:15 +0100 Subject: [PATCH 509/898] New translations django.po (Italian) [ci skip] --- src/locale/it_IT/LC_MESSAGES/django.po | 116 ++++++++----------------- 1 file changed, 36 insertions(+), 80 deletions(-) diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index c1b29608d..8e9118139 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -1,28 +1,21 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Ioma Taani, 2021 -# Jonas Winkler, 2021 -# Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021 -# Alex Camilleri <camilleri.alex@gmail.com>, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Alex Camilleri <camilleri.alex@gmail.com>, 2021\n" -"Language-Team: Italian (https://www.transifex.com/paperless/teams/115905/it/)\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Italian\n" +"Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: it\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" @@ -86,16 +79,12 @@ msgid "is inbox tag" msgstr "è tag di arrivo" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati " -"verranno taggati con questo tag." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati verranno taggati con questo tag." #: documents/models.py:94 msgid "tag" -msgstr "tag" +msgstr "" #: documents/models.py:95 documents/models.py:151 msgid "tags" @@ -126,12 +115,8 @@ msgid "content" msgstr "contenuto" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"I dati grezzi o solo testo del documento. Questo campo è usato " -"principalmente per la ricerca." +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "I dati grezzi o solo testo del documento. Questo campo è usato principalmente per la ricerca." #: documents/models.py:144 msgid "mime type" @@ -139,7 +124,7 @@ msgstr "tipo mime" #: documents/models.py:155 msgid "checksum" -msgstr "checksum" +msgstr "" #: documents/models.py:159 msgid "The checksum of the original document." @@ -203,7 +188,7 @@ msgstr "documenti" #: documents/models.py:311 msgid "debug" -msgstr "debug" +msgstr "" #: documents/models.py:312 msgid "information" @@ -235,7 +220,7 @@ msgstr "livello" #: documents/models.py:332 msgid "log" -msgstr "log" +msgstr "" #: documents/models.py:333 msgid "logs" @@ -405,7 +390,7 @@ msgstr "Nome utente" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "Password" +msgstr "" #: documents/templates/registration/login.html:54 msgid "Sign in" @@ -452,39 +437,24 @@ msgid "Filter" msgstr "Filtro" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless-ng processerà solo la posta che rientra in TUTTI i filtri " -"impostati." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless-ng processerà solo la posta che rientra in TUTTI i filtri impostati." #: paperless_mail/admin.py:37 msgid "Actions" msgstr "Azioni" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"L'azione che viene applicata alla email. Questa azione viene eseguita solo " -"quando dei documenti vengono elaborati dalla email. Le email senza allegati " -"vengono ignorate." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "L'azione che viene applicata alla email. Questa azione viene eseguita solo quando dei documenti vengono elaborati dalla email. Le email senza allegati vengono ignorate." #: paperless_mail/admin.py:46 msgid "Metadata" msgstr "Metadati" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Assegna automaticamente i metadati ai documenti elaborati da questa regola. " -"Se non assegni qui dei tag, tipi di documenti o corrispondenti, Paperless " -"userà comunque le regole corrispondenti che hai configurato." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Assegna automaticamente i metadati ai documenti elaborati da questa regola. Se non assegni qui dei tag, tipi di documenti o corrispondenti, Paperless userà comunque le regole corrispondenti che hai configurato." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -519,11 +489,8 @@ msgid "IMAP port" msgstr "Porta IMAP" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"Di solito si usa 143 per STARTTLS o nessuna crittografia e 993 per SSL." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Di solito si usa 143 per STARTTLS o nessuna crittografia e 993 per SSL." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -535,7 +502,7 @@ msgstr "nome utente" #: paperless_mail/models.py:50 msgid "password" -msgstr "password" +msgstr "" #: paperless_mail/models.py:60 msgid "mail rule" @@ -599,7 +566,7 @@ msgstr "priorità" #: paperless_mail/models.py:120 msgid "account" -msgstr "account" +msgstr "" #: paperless_mail/models.py:124 msgid "folder" @@ -622,12 +589,8 @@ msgid "filter attachment filename" msgstr "filtra nome allegato" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Elabora i documenti che corrispondono a questo nome. Puoi usare wildcard " -"come *.pdf o *fattura*. Non fa differenza fra maiuscole e minuscole." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Elabora i documenti che corrispondono a questo nome. Puoi usare wildcard come *.pdf o *fattura*. Non fa differenza fra maiuscole e minuscole." #: paperless_mail/models.py:146 msgid "maximum age" @@ -642,12 +605,8 @@ msgid "attachment type" msgstr "tipo di allegato" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"Gli allegati in linea includono le immagini nel corpo, quindi è meglio " -"combinare questa opzione con il filtro nome." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Gli allegati in linea includono le immagini nel corpo, quindi è meglio combinare questa opzione con il filtro nome." #: paperless_mail/models.py:159 msgid "action" @@ -658,12 +617,8 @@ msgid "action parameter" msgstr "parametro azione" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Parametro aggiuntivo per l'azione selezionata, ad esempio la cartella di " -"destinazione per l'azione che sposta in una cartella." +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Parametro aggiuntivo per l'azione selezionata, ad esempio la cartella di destinazione per l'azione che sposta in una cartella." #: paperless_mail/models.py:173 msgid "assign title from" @@ -684,3 +639,4 @@ msgstr "assegna corrispondente da" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "assegna questo corrispondente" + From 7ecce3ae6d501c6414c565a82e55c78485b4f11b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:17 +0100 Subject: [PATCH 510/898] New translations messages.xlf (Hungarian) [ci skip] --- src-ui/src/locale/messages.hu_HU.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.hu_HU.xlf diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf new file mode 100644 index 000000000..909b1b104 --- /dev/null +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="hu"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From bf98a4e5d907173c2e3ca5e7be51af6962d09ab0 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:18 +0100 Subject: [PATCH 511/898] New translations django.po (Hungarian) [ci skip] --- src/locale/hu_HU/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/hu_HU/LC_MESSAGES/django.po diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po new file mode 100644 index 000000000..29fb985aa --- /dev/null +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Hungarian\n" +"Language: hu_HU\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: hu\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From 7022152b3b458718680e561eadefd70a7db1b82b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:19 +0100 Subject: [PATCH 512/898] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 1265 +++++++++++++------------- 1 file changed, 633 insertions(+), 632 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 21c94b91c..10c96ebf3 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1,2281 +1,2282 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="de"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="de"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Dokument hinzugefügt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Dokument hinzugefügt</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Das Dokument <x equiv-text="status.filename" id="PH"/> wurde zu Paperless hinzugefügt.</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Das Dokument <x equiv-text="status.filename" id="PH"/> wurde zu Paperless hinzugefügt.</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Dokument öffnen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Dokument öffnen</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Konnte <x equiv-text="status.filename" id="PH"/> nicht hinzufügen: <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Konnte <x equiv-text="status.filename" id="PH"/> nicht hinzufügen: <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>Neues Dokument erkannt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Neues Dokument erkannt</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Dokument <x equiv-text="status.filename" id="PH"/> wird von Paperless verarbeitet.</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Dokument <x equiv-text="status.filename" id="PH"/> wird von Paperless verarbeitet.</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Dokumente</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>Ansicht "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" erfolgreich gespeichert.</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Ansicht "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" erfolgreich gespeichert.</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>Ansicht "<x equiv-text="savedView.name" id="PH"/>" erfolgreich erstellt.</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Ansicht "<x equiv-text="savedView.name" id="PH"/>" erfolgreich erstellt.</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Auswählen</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Nichts auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Nichts auswählen</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Seite auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Seite auswählen</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Alles auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Alles auswählen</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Sortieren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Sortieren</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Ansicht</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="translated">Ansicht</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Speichern als...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Speichern als...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>"<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>" speichern</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">"<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>" speichern</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 { <x id="INTERPOLATION"/> von 1 Dokumente ausgewählt} other {<x id="INTERPOLATION"/> von <x id="INTERPOLATION_1"/> Dokumente ausgewählt}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 { <x id="INTERPOLATION"/> von 1 Dokumente ausgewählt} other {<x id="INTERPOLATION"/> von <x id="INTERPOLATION_1"/> Dokumente ausgewählt}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Ein Dokument} other {<x id="INTERPOLATION"/> Dokumente}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Ein Dokument} other {<x id="INTERPOLATION"/> Dokumente}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(gefiltert)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">(gefiltert)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Korrespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Korrespondent</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Titel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Titel</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Dokumenttyp</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Dokumenttyp</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Ausgestellt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="translated">Ausgestellt</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Hinzugefügt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Hinzugefügt</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Löschen bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Löschen bestätigen</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Möchten Sie das Dokument "<x equiv-text="this.document.title" id="PH"/>" wirklich löschen?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Möchten Sie das Dokument "<x equiv-text="this.document.title" id="PH"/>" wirklich löschen?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Dokument löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="translated">Dokument löschen</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Fehler beim Löschen des Dokuments: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Fehler beim Löschen des Dokuments: <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Löschen</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Herunterladen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Herunterladen</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>Ähnliche Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Ähnliche Dokumente</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="translated">Schließen</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Details</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="needs-translation">Details</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Inhalt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Inhalt</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Metadaten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="translated">Metadaten</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Verwerfen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Verwerfen</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Speichern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Speichern</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Seite</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Seite</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>von <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">von <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Original herunterladen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Original herunterladen</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Archiv-Seriennummer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="translated">Archiv-Seriennummer</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Ausgestellt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="translated">Ausgestellt am</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Geändert am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Geändert am</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Hinzugefügt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Hinzugefügt am</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Media-Dateiname</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Media-Dateiname</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>MD5-Prüfsumme Original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">MD5-Prüfsumme Original</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Dateigröße Original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Dateigröße Original</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>MIME-Typ Original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">MIME-Typ Original</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>MD5-Prüfsumme Archiv</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">MD5-Prüfsumme Archiv</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Dateigröße Archiv</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Dateigröße Archiv</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Metadaten Original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="translated">Metadaten Original</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Metadaten Archiv</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="translated">Metadaten Archiv</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Speichern & weiter</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="translated">Speichern & weiter</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Hallo <x equiv-text="this.displayName" id="PH"/>, willkommen zu Paperless-ng!</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Hallo <x equiv-text="this.displayName" id="PH"/>, willkommen zu Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Willkommen zu Paperless-ng!</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Willkommen zu Paperless-ng!</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Startseite</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Startseite</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Möchten Sie das Tag "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Möchten Sie das Tag "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Tags</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="needs-translation">Tags</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Erstellen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="translated">Erstellen</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filtern nach:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Filtern nach:</target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Name</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="needs-translation">Name</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Farbe</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Farbe</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Zuweisung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Zuweisung</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Anzahl Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Anzahl Dokumente</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Aktionen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Aktionen</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Dokumente</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Bearbeiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="translated">Bearbeiten</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Möchten Sie den Dokumenttyp "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Möchten Sie den Dokumenttyp "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Dokumenttypen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Dokumenttypen</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Protokoll</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Protokoll</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Gespeicherte Ansicht "<x equiv-text="savedView.name" id="PH"/>" gelöscht.</target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Gespeicherte Ansicht "<x equiv-text="savedView.name" id="PH"/>" gelöscht.</target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Einstellungen erfolgreich gespeichert.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="translated">Einstellungen erfolgreich gespeichert.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Benutze Systemsprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Benutze Systemsprache</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Benutze Datumsformat der Anzeigesprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="translated">Benutze Datumsformat der Anzeigesprache</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Einstellungen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Einstellungen</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>Allgemeine Einstellungen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Allgemeine Einstellungen</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Benachrichtigungen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="translated">Benachrichtigungen</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Gespeicherte Ansichten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="translated">Gespeicherte Ansichten</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Erscheinungsbild</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Erscheinungsbild</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Anzeigesprache</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Anzeigesprache</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>Nachdem Sie eine neue Sprache ausgewählt haben, müssen Sie die Seite neu laden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Nachdem Sie eine neue Sprache ausgewählt haben, müssen Sie die Seite neu laden.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Datumsanzeige</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Datumsanzeige</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Datumsformat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Datumsformat</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Kurz: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Kurz: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Mittel: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Mittel: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Lang: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Lang: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Dokumente pro Seite</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Dokumente pro Seite</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Dokumenteditor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="translated">Dokumenteditor</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Benutze PDF-Betrachter des Web Browsers</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Benutze PDF-Betrachter des Web Browsers</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>Der integrierte PDF-Betrachter des Web-Browsers ist in der Regel schneller bei der Anzeige besonders großer Dokumente, funktioniert aber nicht in allen Browsern.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Der integrierte PDF-Betrachter des Web-Browsers ist in der Regel schneller bei der Anzeige besonders großer Dokumente, funktioniert aber nicht in allen Browsern.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Dunkler Modus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Dunkler Modus</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Benutze Systemeinstellungen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Benutze Systemeinstellungen</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Dunklen Modus aktivieren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="translated">Dunklen Modus aktivieren</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Miniaturbilder im dunklen Modus invertieren</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Miniaturbilder im dunklen Modus invertieren</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Massenbearbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Massenbearbeitung</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Bestätigungsdialoge anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Bestätigungsdialoge anzeigen</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Anwenden beim Schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="translated">Anwenden beim Schließen</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Dokumentverarbeitung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="translated">Dokumentverarbeitung</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Zeige Benachrichtigungen wenn neue Dokumente erkannt werden</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="translated">Zeige Benachrichtigungen wenn neue Dokumente erfolgreich hinzugefügt wurden</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="translated">Zeige Benachrichtigungen wenn Dokumente nicht hinzugefügt werden konnten</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Unterdrücke Benachrichtigungen auf der Startseite.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Unterdrücke Benachrichtigungen auf der Startseite.</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Dadurch werden alle Benachrichtigungen über die Dokumentenverarbeitung auf der Startseite unterdrückt.</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Erscheint auf</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="translated">Erscheint auf</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Auf Startseite zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="translated">Auf Startseite zeigen</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>In Seitenleiste zeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="translated">In Seitenleiste zeigen</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>Keine gespeicherten Ansichten vorhanden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Keine gespeicherten Ansichten vorhanden.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Nicht gefunden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">404 Nicht gefunden</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Möchten Sie den Korrespondenten "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Möchten Sie den Korrespondenten "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Korrespondenten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Korrespondenten</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Letzter Kontakt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Letzter Kontakt</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Bestätigung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Bestätigung</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Bestätigen</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Abbrechen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Abbrechen</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Neuen Korrespondenten erstellen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Neuen Korrespondenten erstellen</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Korrespondenten bearbeiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Korrespondenten bearbeiten</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Zuweisungsalgorithmus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Zuweisungsalgorithmus</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Zuweisungsmuster</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Zuweisungsmuster</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Groß-/Kleinschreibung irrelevant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Groß-/Kleinschreibung irrelevant</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Neues Tag erstellen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Neues Tag erstellen</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Tag bearbeiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Tag bearbeiten</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>Posteingangs-Tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Posteingangs-Tag</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>Ein Tag mit dieser Option wird automatisch allen neuen Dokumenten zugewiesen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Ein Tag mit dieser Option wird automatisch allen neuen Dokumenten zugewiesen.</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Neuen Dokumenttyp erstellen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Neuen Dokumenttyp erstellen</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Dokumenttyp bearbeiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Dokumenttyp bearbeiten</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Suchergebnisse</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Suchergebnisse</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Ungültige Suchanfrage: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Ungültige Suchanfrage: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target>Zeige ähnliche Dokumente zu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Zeige ähnliche Dokumente zu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Suchanfrage: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Suchanfrage: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Meinten Sie "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Meinten Sie "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {Keine Ergebnisse} =1 {Ein Ergebnis} other {<x id="INTERPOLATION"/> Ergebnisse}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =0 {Keine Ergebnisse} =1 {Ein Ergebnis} other {<x id="INTERPOLATION"/> Ergebnisse}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Dokumente suchen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Dokumente suchen</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Abmelden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Abmelden</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Verwalten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="translated">Verwalten</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Administration</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="translated">Administration</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="needs-translation">Info</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Dokumentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="translated">Dokumentation</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Eine Idee vorschlagen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="translated">Eine Idee vorschlagen</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Angemeldet als <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Angemeldet als <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Geöffnete Dokumente</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Geöffnete Dokumente</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Alle schließen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Alle schließen</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Titel</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="translated">Titel</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Titel & Inhalt</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Titel & Inhalt</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Korrespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Korrespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Ohne Korrespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Ohne Korrespondent</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Typ: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Typ: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Ohne Dokumenttyp</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="translated">Ohne Dokumenttyp</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Ohne Tag</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Ohne Tag</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Titel: <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Titel: <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Tags filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tags filtern</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Korrespondenten filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="translated">Korrespondenten filtern</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Dokumenttypen filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Dokumenttypen filtern</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Filter zurücksetzen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Filter zurücksetzen</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Nicht zugewiesen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Nicht zugewiesen</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Anwenden</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Anwenden</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Letzte 7 Tage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Letzte 7 Tage</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Letzten Monat</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Letzten Monat</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Letzte 3 Monate</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="translated">Letzte 3 Monate</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>Letztes Jahr</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="translated">Letztes Jahr</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>Nach</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Nach</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Vor</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Vor</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Zurücksetzen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Zurücksetzen</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>Anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Anzeigen</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Erstellt: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Erstellt: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Nach Korrespondent filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Nach Korrespondent filtern</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Nach Tag filtern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Nach Tag filtern</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Relevanz:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="translated">Relevanz:</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>Im Browser anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="translated">Im Browser anzeigen</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Fehler beim Ausführung der Massenverarbeitung: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Fehler beim Ausführung der Massenverarbeitung: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" und "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" und "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> und "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/> und "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Tag-Zuweisung bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="translated">Tag-Zuweisung bestätigen</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten das Tag "<x equiv-text="tag.name" id="PH"/>" hinzufügen.</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten das Tag "<x equiv-text="tag.name" id="PH"/>" hinzufügen.</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> hinzufügen.</target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> hinzufügen.</target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Diese Aktion wird das Tag "<x equiv-text="tag.name" id="PH"/>" von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Diese Aktion wird das Tag "<x equiv-text="tag.name" id="PH"/>" von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> den <x equiv-text="this.list.selected.size" id="PH_2"/> ausgewählten Dokumenten hinzufügen und die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> entfernen.</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> den <x equiv-text="this.list.selected.size" id="PH_2"/> ausgewählten Dokumenten hinzufügen und die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> entfernen.</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Korrespondent-Zuweisung bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="translated">Korrespondent-Zuweisung bestätigen</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Korrespondent "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Korrespondent "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Korrespondent entfernen.</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Korrespondent entfernen.</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Dokumenttyp-Zuweisung bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="translated">Dokumenttyp-Zuweisung bestätigen</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Dokumenttyp "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Dokumenttyp "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Dokumenttyp entfernen.</target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Dokumenttyp entfernen.</target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Löschen bestätigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="translated">Löschen bestätigen</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH"/> ausgewählte Dokumente unwiderruflich löschen.</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH"/> ausgewählte Dokumente unwiderruflich löschen.</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>Diese Aktion kann nicht rückgängig gemacht werden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Diese Aktion kann nicht rückgängig gemacht werden.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Dokument(e) löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Dokument(e) löschen</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Auswählen:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Auswählen:</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>Alle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Alle</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Bearbeiten:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Bearbeiten:</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Originale herunterladen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Originale herunterladen</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Vorschläge:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Vorschläge:</target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Aktuelle Ansicht speichern</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Aktuelle Ansicht speichern</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Alle anzeigen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Alle anzeigen</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Statistiken</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Statistiken</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Anzahl Dokumente gesamt: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Anzahl Dokumente gesamt: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Dokumente im Posteingang: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Dokumente im Posteingang: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>Verarbeite: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Verarbeite: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Fehlgeschlagen: <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Fehlgeschlagen: <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Hinzugefügt: <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Hinzugefügt: <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Verbinde...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="translated">Verbinde...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Hochladen...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Hochladen...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Datei hochgeladen, warte...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Datei hochgeladen, warte...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>HTTP-Fehler: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">HTTP-Fehler: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Neue Dokumente hochladen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Neue Dokumente hochladen</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Dokumente hier ablegen oder</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Dokumente hier ablegen oder</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Datei auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Datei auswählen</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Fertiggestellte verbergen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Fertiggestellte verbergen</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Ein weiteres Dokument} other {<x id="INTERPOLATION"/> weitere Dokumente}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, =1 {Ein weiteres Dokument} other {<x id="INTERPOLATION"/> weitere Dokumente}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Dokument öffnen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Dokument öffnen</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>Erste Schritte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Erste Schritte</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>Paperless ist startbereit! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="translated">Paperless ist startbereit! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Sie können Ihre Dokumente hochladen, indem Sie sie in die Hochladebox auf der rechten Seite ziehen oder in den konfigurierten Ablageordner kopieren/verschieben. Danach werden sie in der Dokumentenliste erscheinen. Nachdem Sie den Dokumenten einige Metadaten zugewiesen haben, können Sie die Filtermechanismen zur Erstellung individueller Ansichten benutzen (zum Beispiel "Kürzlich hinzugefügt" oder "Mit TODO markiert") und die Ansichten werden auf der Startseite anstelle dieser Nachricht erscheinen.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="translated">Sie können Ihre Dokumente hochladen, indem Sie sie in die Hochladebox auf der rechten Seite ziehen oder in den konfigurierten Ablageordner kopieren/verschieben. Danach werden sie in der Dokumentenliste erscheinen. Nachdem Sie den Dokumenten einige Metadaten zugewiesen haben, können Sie die Filtermechanismen zur Erstellung individueller Ansichten benutzen (zum Beispiel "Kürzlich hinzugefügt" oder "Mit TODO markiert") und die Ansichten werden auf der Startseite anstelle dieser Nachricht erscheinen.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>Paperless bietet darüber hinaus einige erweiterte Funktionen:</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Paperless bietet darüber hinaus einige erweiterte Funktionen:</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Nachdem Sie einige Dokumente hochgeladen und diesen Korrespondenten, Tags und Dokumenttypen zugewiesen haben, kann Paperless-ng diese Metadaten automatisch passenden neuen Dokumenten zuweisen.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Nachdem Sie einige Dokumente hochgeladen und diesen Korrespondenten, Tags und Dokumenttypen zugewiesen haben, kann Paperless-ng diese Metadaten automatisch passenden neuen Dokumenten zuweisen.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Sie können in Paperless Ihre E-Mail-Konten einrichten und Paperless wird automatisch Dokumente aus Dateianhängen hinzufügen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Sie können in Paperless Ihre E-Mail-Konten einrichten und Paperless wird automatisch Dokumente aus Dateianhängen hinzufügen.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Die Dokumentation enthält mehr Informationen, wie diese Funktionen benutzt werden. Der Abschnitt zur allgemeinen Verwendung enthält zudem wertvolle Informationen zur generellen Verwendung von Paperless.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Die Dokumentation enthält mehr Informationen, wie diese Funktionen benutzt werden. Der Abschnitt zur allgemeinen Verwendung enthält zudem wertvolle Informationen zur generellen Verwendung von Paperless.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Metadaten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Metadaten</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Auswählen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Auswählen</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Bitte wählen Sie ein Element aus</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Bitte wählen Sie ein Element aus</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Ungültiges Datum.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Ungültiges Datum.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Ja</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Ja</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>Nein</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nein</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(kein Titel)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">(kein Titel)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>Englisch (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="translated">Englisch (US)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>Englisch (UK)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Englisch (UK)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>Deutsch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="translated">Deutsch</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Niederländisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="translated">Niederländisch</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>Französisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Französisch</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Portugiesisch (Brasilien)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Portugiesisch (Brasilien)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italienisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="translated">Italienisch</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Rumänisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Rumänisch</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Dokument existiert bereits.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Dokument existiert bereits.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>Datei nicht gefunden.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Datei nicht gefunden.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Pre-Consume-Skript existiert nicht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Pre-Consume-Skript existiert nicht.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Fehler beim Ausführen des Pre-Consume-Skripts.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Fehler beim Ausführen des Pre-Consume-Skripts.</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Post-Consume-Skript existiert nicht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Post-Consume-Skript existiert nicht.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Fehler beim Ausführen des Post-Consume-Skripts.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Fehler beim Ausführen des Post-Consume-Skripts.</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Neue Datei erhalten.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Neue Datei erhalten.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>Dateityp wird nicht unterstützt.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Dateityp wird nicht unterstützt.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Verarbeite Dokument...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Verarbeite Dokument...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Erzeuge Miniaturbild...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Erzeuge Miniaturbild...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Ermittle Datum des Dokuments...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Ermittle Datum des Dokuments...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Speichere Dokument...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Speichere Dokument...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Abgeschlossen.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Abgeschlossen.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Fehler</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Fehler</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Information</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="needs-translation">Information</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>ASN</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">ASN</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Korrespondent</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Korrespondent</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Dokumenttyp</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Dokumenttyp</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Ausgestellt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Ausgestellt am</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Hinzugefügt am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Hinzugefügt am</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Geändert am</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Geändert am</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Neues Element erstellen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Neues Element erstellen</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Element bearbeiten</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="translated">Element bearbeiten</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Konnte Element nicht speichern: <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Konnte Element nicht speichern: <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automatisch</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Automatisch</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Möchten Sie dieses Element wirklich löschen?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Möchten Sie dieses Element wirklich löschen?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>Assoziierte Dokumente werden nicht gelöscht.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="translated">Assoziierte Dokumente werden nicht gelöscht.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Löschen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Löschen</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Fehler beim Löschen des Elements: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Fehler beim Löschen des Elements: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Irgendein Wort</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Irgendein Wort</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Irgendein Wort: Dokument enthält eins der folgenden Wörter</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Irgendein Wort: Dokument enthält eins der folgenden Wörter</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>Alle Wörter</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Alle Wörter</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>Alle: Dokument enthält alle folgenden Wörter</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Alle: Dokument enthält alle folgenden Wörter</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Exakte Übereinstimmung</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Exakte Übereinstimmung</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Exakt: Dokument enthält die folgende Zeichenkette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Exakt: Dokument enthält die folgende Zeichenkette</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Regulärer Ausdruck</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Regulärer Ausdruck</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Regulärer Ausdruck: Dokument passt zum folgenden Ausdruck</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Regulärer Ausdruck: Dokument passt zum folgenden Ausdruck</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Ungenaues Wort</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Ungenaues Wort</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Ungenau: Dokument enthält ein zum folgenden Wort ähnliches Wort</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Ungenau: Dokument enthält ein zum folgenden Wort ähnliches Wort</target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Auto: Zuweisung automatisch erlernen</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Auto: Zuweisung automatisch erlernen</target> </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From 5a9e4f2e2922044da1d1ad7e42245fa1202b4416 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:20 +0100 Subject: [PATCH 513/898] New translations django.po (German) [ci skip] --- src/locale/de_DE/LC_MESSAGES/django.po | 108 +++++++------------------ 1 file changed, 31 insertions(+), 77 deletions(-) diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 55d2b0989..120dcd1a8 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -1,25 +1,21 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Jonas Winkler, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Jonas Winkler, 2021\n" -"Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: German\n" +"Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: de\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" @@ -83,12 +79,8 @@ msgid "is inbox tag" msgstr "Posteingangs-Tag" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit " -"diesem Tag versehen." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit diesem Tag versehen." #: documents/models.py:94 msgid "tag" @@ -123,12 +115,8 @@ msgid "content" msgstr "Inhalt" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche " -"verwendet." +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche verwendet." #: documents/models.py:144 msgid "mime type" @@ -394,9 +382,7 @@ msgstr "Bitte melden Sie sich an." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "" -"Ihr Benutzername und Passwort stimmen nicht überein. Bitte versuchen Sie es " -"erneut." +msgstr "Ihr Benutzername und Passwort stimmen nicht überein. Bitte versuchen Sie es erneut." #: documents/templates/registration/login.html:48 msgid "Username" @@ -448,43 +434,27 @@ msgstr "Paperless-ng Administration" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "Filter" +msgstr "" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless wird nur E-Mails verarbeiten, für die alle der hier angegebenen " -"Filter zutreffen." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless wird nur E-Mails verarbeiten, für die alle der hier angegebenen Filter zutreffen." #: paperless_mail/admin.py:37 msgid "Actions" msgstr "Aktionen" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"Die Aktion, die auf E-Mails angewendet werden soll. Diese Aktion wird nur " -"auf E-Mails angewendet, aus denen Anhänge verarbeitet wurden. E-Mails ohne " -"Anhänge werden vollständig ignoriert." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Die Aktion, die auf E-Mails angewendet werden soll. Diese Aktion wird nur auf E-Mails angewendet, aus denen Anhänge verarbeitet wurden. E-Mails ohne Anhänge werden vollständig ignoriert." #: paperless_mail/admin.py:46 msgid "Metadata" msgstr "Metadaten" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Folgende Metadaten werden Dokumenten dieser Regel automatisch zugewiesen. " -"Wenn Sie hier nichts auswählen wird Paperless weiterhin alle " -"Zuweisungsalgorithmen ausführen und Metadaten auf Basis des Dokumentinhalts " -"zuweisen." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Folgende Metadaten werden Dokumenten dieser Regel automatisch zugewiesen. Wenn Sie hier nichts auswählen wird Paperless weiterhin alle Zuweisungsalgorithmen ausführen und Metadaten auf Basis des Dokumentinhalts zuweisen." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -519,12 +489,8 @@ msgid "IMAP port" msgstr "IMAP-Port" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"Dies ist in der Regel 143 für unverschlüsselte und STARTTLS-Verbindungen und" -" 993 für SSL-Verbindungen." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Dies ist in der Regel 143 für unverschlüsselte und STARTTLS-Verbindungen und 993 für SSL-Verbindungen." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -623,13 +589,8 @@ msgid "filter attachment filename" msgstr "Anhang-Dateiname filtern" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Wenn angegeben werden nur Dateien verarbeitet, die diesem Dateinamen exakt " -"entsprechen. Platzhalter wie *.pdf oder *rechnung* sind erlaubt. Groß- und " -"Kleinschreibung ist irrelevant." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Wenn angegeben werden nur Dateien verarbeitet, die diesem Dateinamen exakt entsprechen. Platzhalter wie *.pdf oder *rechnung* sind erlaubt. Groß- und Kleinschreibung ist irrelevant." #: paperless_mail/models.py:146 msgid "maximum age" @@ -644,12 +605,8 @@ msgid "attachment type" msgstr "Dateianhangstyp" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"'Inline'-Anhänge schließen eingebettete Bilder mit ein, daher sollte diese " -"Einstellung mit einem Dateinamenfilter kombiniert werden." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "'Inline'-Anhänge schließen eingebettete Bilder mit ein, daher sollte diese Einstellung mit einem Dateinamenfilter kombiniert werden." #: paperless_mail/models.py:159 msgid "action" @@ -660,12 +617,8 @@ msgid "action parameter" msgstr "Parameter für Aktion" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Zusätzlicher Parameter für die oben ausgewählte Aktion, zum Beispiel der " -"Zielordner für die Aktion \"In angegebenen Ordner verschieben\"" +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Zusätzlicher Parameter für die oben ausgewählte Aktion, zum Beispiel der Zielordner für die Aktion \"In angegebenen Ordner verschieben\"" #: paperless_mail/models.py:173 msgid "assign title from" @@ -686,3 +639,4 @@ msgstr "Korrespondent zuweisen von" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "Diesen Korrespondent zuweisen" + From 997046244e5fd797cc55af728a8431fb0a2456e9 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:22 +0100 Subject: [PATCH 514/898] New translations messages.xlf (Czech) [ci skip] --- src-ui/src/locale/messages.cs_CZ.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.cs_CZ.xlf diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf new file mode 100644 index 000000000..8bdad274b --- /dev/null +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="cs"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From 336a0b12c21db9fc4058a1796006b6acb60dbff9 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:23 +0100 Subject: [PATCH 515/898] New translations django.po (Czech) [ci skip] --- src/locale/cs_CZ/LC_MESSAGES/django.po | 320 ++++++++++++------------- 1 file changed, 156 insertions(+), 164 deletions(-) diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index 959246aab..ff7098536 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,357 +1,362 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Štěpán Šebestian <mys.orangeorange0123@gmail.com>, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-28 22:02+0100\n" -"PO-Revision-Date: 2020-12-30 19:27+0000\n" -"Last-Translator: Štěpán Šebestian <mys.orangeorange0123@gmail.com>, 2021\n" -"Language-Team: Czech (https://www.transifex.com/paperless/teams/115905/cs/)\n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Czech\n" +"Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: cs\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" msgstr "Dokumenty" -#: documents/models.py:33 +#: documents/models.py:32 msgid "Any word" msgstr "Jakékoliv slovo" -#: documents/models.py:34 +#: documents/models.py:33 msgid "All words" msgstr "Všechna slova" -#: documents/models.py:35 +#: documents/models.py:34 msgid "Exact match" msgstr "Přesná shoda" -#: documents/models.py:36 +#: documents/models.py:35 msgid "Regular expression" msgstr "Regulární výraz" -#: documents/models.py:37 +#: documents/models.py:36 msgid "Fuzzy word" msgstr "Fuzzy slovo" -#: documents/models.py:38 +#: documents/models.py:37 msgid "Automatic" msgstr "Automatický" -#: documents/models.py:42 documents/models.py:352 paperless_mail/models.py:25 +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" msgstr "název" -#: documents/models.py:46 +#: documents/models.py:45 msgid "match" msgstr "shoda" -#: documents/models.py:50 +#: documents/models.py:49 msgid "matching algorithm" msgstr "algoritmus pro shodu" -#: documents/models.py:56 +#: documents/models.py:55 msgid "is insensitive" msgstr "je ignorováno" -#: documents/models.py:75 documents/models.py:135 +#: documents/models.py:74 documents/models.py:120 msgid "correspondent" msgstr "korespondent" -#: documents/models.py:76 +#: documents/models.py:75 msgid "correspondents" msgstr "korespondenti" -#: documents/models.py:98 +#: documents/models.py:81 msgid "color" msgstr "barva" -#: documents/models.py:102 +#: documents/models.py:87 msgid "is inbox tag" msgstr "tag přichozí" -#: documents/models.py:104 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Označí tento tag jako tag pro příchozí: Všechny nově zkonzumované dokumenty " -"budou označeny tagem pro přichozí" +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Označí tento tag jako tag pro příchozí: Všechny nově zkonzumované dokumenty budou označeny tagem pro přichozí" -#: documents/models.py:109 +#: documents/models.py:94 msgid "tag" -msgstr "tag" +msgstr "" -#: documents/models.py:110 documents/models.py:166 +#: documents/models.py:95 documents/models.py:151 msgid "tags" msgstr "tagy" -#: documents/models.py:116 documents/models.py:148 +#: documents/models.py:101 documents/models.py:133 msgid "document type" msgstr "typ dokumentu" -#: documents/models.py:117 +#: documents/models.py:102 msgid "document types" msgstr "typy dokumentu" -#: documents/models.py:125 +#: documents/models.py:110 msgid "Unencrypted" msgstr "Nešifrované" -#: documents/models.py:126 +#: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" msgstr "Šifrované pomocí GNU Privacy Guard" -#: documents/models.py:139 +#: documents/models.py:124 msgid "title" msgstr "titulek" -#: documents/models.py:152 +#: documents/models.py:137 msgid "content" msgstr "obsah" -#: documents/models.py:154 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"Nezpracovaná, pouze textová data dokumentu. Toto pole je používáno především" -" pro vyhledávání." +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Nezpracovaná, pouze textová data dokumentu. Toto pole je používáno především pro vyhledávání." -#: documents/models.py:159 +#: documents/models.py:144 msgid "mime type" msgstr "mime typ" -#: documents/models.py:170 +#: documents/models.py:155 msgid "checksum" msgstr "kontrolní součet" -#: documents/models.py:174 +#: documents/models.py:159 msgid "The checksum of the original document." msgstr "Kontrolní součet původního dokumentu" -#: documents/models.py:178 +#: documents/models.py:163 msgid "archive checksum" msgstr "kontrolní součet archivu" -#: documents/models.py:183 +#: documents/models.py:168 msgid "The checksum of the archived document." msgstr "Kontrolní součet archivovaného dokumentu." -#: documents/models.py:187 documents/models.py:330 +#: documents/models.py:172 documents/models.py:328 msgid "created" msgstr "vytvořeno" -#: documents/models.py:191 +#: documents/models.py:176 msgid "modified" msgstr "upraveno" -#: documents/models.py:195 +#: documents/models.py:180 msgid "storage type" msgstr "typ úložiště" -#: documents/models.py:203 +#: documents/models.py:188 msgid "added" msgstr "přidáno" -#: documents/models.py:207 +#: documents/models.py:192 msgid "filename" msgstr "název souboru" -#: documents/models.py:212 +#: documents/models.py:198 msgid "Current filename in storage" msgstr "Aktuální název souboru v úložišti" -#: documents/models.py:216 +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 msgid "archive serial number" msgstr "sériové číslo archivu" -#: documents/models.py:221 +#: documents/models.py:217 msgid "The position of this document in your physical document archive." msgstr "Pozice dokumentu ve vašem archivu fyzických dokumentů" -#: documents/models.py:227 +#: documents/models.py:223 msgid "document" msgstr "dokument" -#: documents/models.py:228 +#: documents/models.py:224 msgid "documents" msgstr "dokumenty" -#: documents/models.py:313 +#: documents/models.py:311 msgid "debug" -msgstr "debug" +msgstr "" -#: documents/models.py:314 +#: documents/models.py:312 msgid "information" msgstr "informace" -#: documents/models.py:315 +#: documents/models.py:313 msgid "warning" msgstr "varování" -#: documents/models.py:316 +#: documents/models.py:314 msgid "error" msgstr "chyba" -#: documents/models.py:317 +#: documents/models.py:315 msgid "critical" msgstr "kritická" -#: documents/models.py:321 +#: documents/models.py:319 msgid "group" msgstr "skupina" -#: documents/models.py:324 +#: documents/models.py:322 msgid "message" msgstr "zpráva" -#: documents/models.py:327 +#: documents/models.py:325 msgid "level" msgstr "úroveň" -#: documents/models.py:334 +#: documents/models.py:332 msgid "log" msgstr "záznam" -#: documents/models.py:335 +#: documents/models.py:333 msgid "logs" msgstr "záznamy" -#: documents/models.py:346 documents/models.py:396 +#: documents/models.py:344 documents/models.py:394 msgid "saved view" msgstr "uložený pohled" -#: documents/models.py:347 +#: documents/models.py:345 msgid "saved views" msgstr "uložené pohledy" -#: documents/models.py:350 +#: documents/models.py:348 msgid "user" msgstr "uživatel" -#: documents/models.py:356 +#: documents/models.py:354 msgid "show on dashboard" msgstr "zobrazit v dashboardu" -#: documents/models.py:359 +#: documents/models.py:357 msgid "show in sidebar" msgstr "zobrazit v postranním menu" -#: documents/models.py:363 +#: documents/models.py:361 msgid "sort field" msgstr "pole na řazení" -#: documents/models.py:366 +#: documents/models.py:364 msgid "sort reverse" msgstr "třídit opačně" -#: documents/models.py:372 +#: documents/models.py:370 msgid "title contains" msgstr "titulek obsahuje" -#: documents/models.py:373 +#: documents/models.py:371 msgid "content contains" msgstr "obsah obsahuje" -#: documents/models.py:374 +#: documents/models.py:372 msgid "ASN is" msgstr "ASN je" -#: documents/models.py:375 +#: documents/models.py:373 msgid "correspondent is" msgstr "korespondent je" -#: documents/models.py:376 +#: documents/models.py:374 msgid "document type is" msgstr "typ dokumentu je" -#: documents/models.py:377 +#: documents/models.py:375 msgid "is in inbox" msgstr "je v příchozích" -#: documents/models.py:378 +#: documents/models.py:376 msgid "has tag" msgstr "má tag" -#: documents/models.py:379 +#: documents/models.py:377 msgid "has any tag" msgstr "má jakýkoliv tag" -#: documents/models.py:380 +#: documents/models.py:378 msgid "created before" msgstr "vytvořeno před" -#: documents/models.py:381 +#: documents/models.py:379 msgid "created after" msgstr "vytvořeno po" -#: documents/models.py:382 +#: documents/models.py:380 msgid "created year is" msgstr "rok vytvoření je" -#: documents/models.py:383 +#: documents/models.py:381 msgid "created month is" msgstr "měsíc vytvoření je" -#: documents/models.py:384 +#: documents/models.py:382 msgid "created day is" msgstr "den vytvoření je" -#: documents/models.py:385 +#: documents/models.py:383 msgid "added before" msgstr "přidáno před" -#: documents/models.py:386 +#: documents/models.py:384 msgid "added after" msgstr "přidáno po" -#: documents/models.py:387 +#: documents/models.py:385 msgid "modified before" msgstr "upraveno před" -#: documents/models.py:388 +#: documents/models.py:386 msgid "modified after" msgstr "upraveno po" -#: documents/models.py:389 +#: documents/models.py:387 msgid "does not have tag" msgstr "nemá tag" -#: documents/models.py:400 +#: documents/models.py:398 msgid "rule type" msgstr "typ pravidla" -#: documents/models.py:404 +#: documents/models.py:402 msgid "value" msgstr "hodnota" -#: documents/models.py:410 +#: documents/models.py:408 msgid "filter rule" msgstr "filtrovací pravidlo" -#: documents/models.py:411 +#: documents/models.py:409 msgid "filter rules" msgstr "filtrovací pravidla" -#: documents/serialisers.py:383 +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" msgstr "Typ souboru %(type)s není podporován" -#: documents/templates/index.html:20 +#: documents/templates/index.html:21 msgid "Paperless-ng is loading..." msgstr "Paperless-ng se načítá..." @@ -391,23 +396,39 @@ msgstr "Heslo" msgid "Sign in" msgstr "Přihlásit se" -#: paperless/settings.py:286 -msgid "English" -msgstr "Angličtina" +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" -#: paperless/settings.py:287 +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 msgid "German" msgstr "Němčina" -#: paperless/settings.py:288 +#: paperless/settings.py:300 msgid "Dutch" msgstr "Holandština" -#: paperless/settings.py:289 +#: paperless/settings.py:301 msgid "French" msgstr "Francouzština" -#: paperless/urls.py:114 +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" @@ -416,37 +437,24 @@ msgid "Filter" msgstr "Filtr" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless zpracuje pouze emaily které odpovídají VŠEM níže zadaným filtrům." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless zpracuje pouze emaily které odpovídají VŠEM níže zadaným filtrům." #: paperless_mail/admin.py:37 msgid "Actions" msgstr "Akce" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"Akce provedena na emailu. Tato akce je provedena jen pokud byly dokumenty " -"zkonzumovány z emailu. Emaily bez příloh zůstanou nedotčeny." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Akce provedena na emailu. Tato akce je provedena jen pokud byly dokumenty zkonzumovány z emailu. Emaily bez příloh zůstanou nedotčeny." #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "Metadata" +msgstr "" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Automaticky přiřadit metadata dokumentům zkonzumovaných z tohoto pravidla. " -"Pokud zde nepřiřadíte tagy, typy nebo korespondenty, paperless stále " -"zpracuje všechna shodující-se pravidla které jste definovali." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Automaticky přiřadit metadata dokumentům zkonzumovaných z tohoto pravidla. Pokud zde nepřiřadíte tagy, typy nebo korespondenty, paperless stále zpracuje všechna shodující-se pravidla které jste definovali." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -474,19 +482,15 @@ msgstr "Používat STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "IMAP server" +msgstr "" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "IMAP port" +msgstr "" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"Toto je většinou 143 pro nešifrovaná připojení/připojení používající " -"STARTTLS a 993 pro SSL připojení." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Toto je většinou 143 pro nešifrovaná připojení/připojení používající STARTTLS a 993 pro SSL připojení." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -585,13 +589,8 @@ msgid "filter attachment filename" msgstr "název souboru u přílohy filtru" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Konzumovat jen dokumenty které přesně odpovídají tomuto názvu souboru pokud " -"specifikováno. Zástupné znaky jako *.pdf nebo *invoice* jsou povoleny. " -"Nezáleží na velikosti písmen." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Konzumovat jen dokumenty které přesně odpovídají tomuto názvu souboru pokud specifikováno. Zástupné znaky jako *.pdf nebo *invoice* jsou povoleny. Nezáleží na velikosti písmen." #: paperless_mail/models.py:146 msgid "maximum age" @@ -606,12 +605,8 @@ msgid "attachment type" msgstr "typ přílohy" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"Vložené přílohy zahrnují vložené obrázky, takže je nejlepší tuto možnost " -"kombinovat s filtrem na název souboru" +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Vložené přílohy zahrnují vložené obrázky, takže je nejlepší tuto možnost kombinovat s filtrem na název souboru" #: paperless_mail/models.py:159 msgid "action" @@ -622,12 +617,8 @@ msgid "action parameter" msgstr "parametr akce" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Další parametr pro výše vybranou akci, napříkad cílová složka akce přesunutí" -" do složky." +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Další parametr pro výše vybranou akci, napříkad cílová složka akce přesunutí do složky." #: paperless_mail/models.py:173 msgid "assign title from" @@ -648,3 +639,4 @@ msgstr "přiřadit korespondenta z" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "přiřadit tohoto korespondenta" + From 97d816c5d1800d95bf1f1f4a19465961bcd8da9d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:24 +0100 Subject: [PATCH 516/898] New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.es_ES.xlf diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf new file mode 100644 index 000000000..bea646011 --- /dev/null +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="es-ES"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document added</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">New document detected</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select none</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Select page</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Select all</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Sort</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="needs-translation">Views</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Save as...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">(filtered)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">Confirm delete</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="needs-translation">Delete document</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Download</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">More like this</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Close</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="needs-translation">Details</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="needs-translation">Content</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">Discard</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">Save</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Page</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Download original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="needs-translation">Archive serial number</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="needs-translation">Date created</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Date modified</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">Date added</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Media filename</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Original MD5 checksum</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Original file size</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Original mime type</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="needs-translation">Archive MD5 checksum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="needs-translation">Archive file size</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="needs-translation">Original document metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="needs-translation">Archived document metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="needs-translation">Save & next</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Welcome to Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Dashboard</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Tags</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="needs-translation">Create</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Filter by:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Name</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Color</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Matching</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Document count</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Actions</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Documents</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Edit</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Document types</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Logs</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="needs-translation">Settings saved successfully.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Use system language</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="needs-translation">Use date format of display language</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Settings</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">General settings</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="needs-translation">Notifications</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="needs-translation">Saved views</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Appearance</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Display language</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">You need to reload the page after applying a new language.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Date display</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Date format</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Items per page</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="needs-translation">Document editor</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Use PDF viewer provided by the browser</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">Dark mode</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Use system settings</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Enable dark mode</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Invert thumbnails in dark mode</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="needs-translation">Bulk editing</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Show confirmation dialogs</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="needs-translation">Apply on close</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="needs-translation">Document processing</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Show notifications when new documents are detected</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="needs-translation">Show notifications when document processing completes successfully</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="needs-translation">Show notifications when document processing fails</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Suppress notifications on dashboard</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="needs-translation">Appears on</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="needs-translation">Show on dashboard</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="needs-translation">Show in sidebar</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">No saved views defined.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation">404 Not Found</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Correspondents</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Last correspondence</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Confirmation</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="needs-translation">Confirm</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Cancel</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new correspondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit correspondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Matching algorithm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Matching pattern</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Case insensitive</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Create new tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Edit tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tag</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Create new document type</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Edit document type</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Search results</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Search documents</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Logout</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="needs-translation">Manage</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="needs-translation">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="needs-translation">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="needs-translation">Documentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="needs-translation">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="needs-translation">Suggest an idea</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">Open documents</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Close all</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Without correspondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target state="needs-translation">Without document type</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target state="needs-translation">Without any tag</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter tags</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="needs-translation">Filter correspondents</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Filter document types</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Reset filters</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="needs-translation">Not assigned</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Apply</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="needs-translation">Last 7 days</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Last month</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="needs-translation">Last 3 months</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="needs-translation">Last year</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">After</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Before</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Clear</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">View</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Filter by correspondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Filter by tag</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target state="needs-translation">Score:</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target state="needs-translation">View in browser</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="needs-translation">Confirm tags assignment</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="needs-translation">Confirm correspondent assignment</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="needs-translation">Confirm document type assignment</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="needs-translation">Delete confirm</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="needs-translation">This operation cannot be undone.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="needs-translation">Delete document(s)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Select:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">All</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Edit:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="needs-translation">Download originals</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Suggestions:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Save current view</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Show all</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Statistics</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="needs-translation">Connecting...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="needs-translation">Uploading...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="needs-translation">Upload complete, waiting...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Upload new documents</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Drop documents here or</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Browse files</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="needs-translation">Dismiss completed</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Open document</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">First steps</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="needs-translation">Paperless is running! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Select</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Please select an object</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Invalid date.</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">Yes</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="needs-translation">No</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">(no title)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="needs-translation">English (US)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">English (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="needs-translation">German</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="needs-translation">Dutch</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="needs-translation">French</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese (Brazil)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="needs-translation">Italian</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Romanian</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Document already exists.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">File not found.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Pre-consume script does not exist.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing pre-consume script.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Post-consume script does not exist.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="needs-translation">Error while executing post-consume script.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Received new file.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">File type not supported.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Processing document...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="needs-translation">Generating thumbnail...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="needs-translation">Retrieving date from document...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="needs-translation">Saving document...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="needs-translation">Finished.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="needs-translation">Error</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Information</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="needs-translation">Correspondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="needs-translation">Document type</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="needs-translation">Created</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="needs-translation">Added</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="needs-translation">Modified</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="needs-translation">Create new item</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="needs-translation">Edit item</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="needs-translation">Automatic</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="needs-translation">Do you really want to delete this element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="needs-translation">Associated documents will not be deleted.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="needs-translation">Delete</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any word</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All words</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="needs-translation">All: Document contains all of these words (space separated)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact match</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="needs-translation">Exact: Document contains this string</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="needs-translation">Regular expression: Document matches this regular expression</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="needs-translation">Auto: Learn matching automatically</target> + </trans-unit> + </body> + </file> +</xliff> From 58b44a2e15c73955353da76e7abb6cc79bfd6065 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:25 +0100 Subject: [PATCH 517/898] New translations django.po (Spanish) [ci skip] --- src/locale/es_ES/LC_MESSAGES/django.po | 642 +++++++++++++++++++++++++ 1 file changed, 642 insertions(+) create mode 100644 src/locale/es_ES/LC_MESSAGES/django.po diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po new file mode 100644 index 000000000..e13ab0ef1 --- /dev/null +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -0,0 +1,642 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: Spanish\n" +"Language: es_ES\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: es-ES\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:394 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:364 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:370 +msgid "title contains" +msgstr "" + +#: documents/models.py:371 +msgid "content contains" +msgstr "" + +#: documents/models.py:372 +msgid "ASN is" +msgstr "" + +#: documents/models.py:373 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:374 +msgid "document type is" +msgstr "" + +#: documents/models.py:375 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:376 +msgid "has tag" +msgstr "" + +#: documents/models.py:377 +msgid "has any tag" +msgstr "" + +#: documents/models.py:378 +msgid "created before" +msgstr "" + +#: documents/models.py:379 +msgid "created after" +msgstr "" + +#: documents/models.py:380 +msgid "created year is" +msgstr "" + +#: documents/models.py:381 +msgid "created month is" +msgstr "" + +#: documents/models.py:382 +msgid "created day is" +msgstr "" + +#: documents/models.py:383 +msgid "added before" +msgstr "" + +#: documents/models.py:384 +msgid "added after" +msgstr "" + +#: documents/models.py:385 +msgid "modified before" +msgstr "" + +#: documents/models.py:386 +msgid "modified after" +msgstr "" + +#: documents/models.py:387 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:398 +msgid "rule type" +msgstr "" + +#: documents/models.py:402 +msgid "value" +msgstr "" + +#: documents/models.py:408 +msgid "filter rule" +msgstr "" + +#: documents/models.py:409 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expresssion: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:297 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:298 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:299 +msgid "German" +msgstr "" + +#: paperless/settings.py:300 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:301 +msgid "French" +msgstr "" + +#: paperless/settings.py:302 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:303 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:304 +msgid "Romanian" +msgstr "" + +#: paperless/urls.py:118 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "" + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "" + From 14a84fef591c3c54d38574ba9852600b479b09ab Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:26 +0100 Subject: [PATCH 518/898] New translations messages.xlf (French) [ci skip] --- src-ui/src/locale/messages.fr_FR.xlf | 1265 +++++++++++++------------- 1 file changed, 633 insertions(+), 632 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index b1f820e2e..bbc97753e 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1,2281 +1,2282 @@ -<?xml version="1.0" ?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> - <file datatype="plaintext" original="ng2.template" source-language="en-US" target-language="fr"> +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="fr"> <body> - <trans-unit datatype="html" id="9103526311244275943"> + <trans-unit id="9103526311244275943" datatype="html"> <source>Document added</source> - <target>Document ajouté</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Document ajouté</target> </trans-unit> - <trans-unit datatype="html" id="9204248378636247318"> - <source>Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</source> - <target>Le document <x equiv-text="status.filename" id="PH"/> a été ajouté à Paperless-ng.</target> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Le document <x equiv-text="status.filename" id="PH"/> a été ajouté à Paperless-ng.</target> </trans-unit> - <trans-unit datatype="html" id="1931214133925051574"> + <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> - <target>Ouvrir le document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Ouvrir le document</target> </trans-unit> - <trans-unit datatype="html" id="8582620835547864448"> - <source>Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></source> - <target>Impossible d'ajouter <x equiv-text="status.filename" id="PH"/> : <x equiv-text="status.message" id="PH_1"/></target> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Impossible d'ajouter <x equiv-text="status.filename" id="PH"/> : <x equiv-text="status.message" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="1710712016675379662"> + <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> - <target>Nouveau document détecté</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Nouveau document détecté</target> </trans-unit> - <trans-unit datatype="html" id="587031278561344416"> - <source>Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</source> - <target>Le document <x equiv-text="status.filename" id="PH"/> est en cours de traitement par Paperless-ng.</target> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> + <target state="translated">Le document <x equiv-text="status.filename" id="PH"/> est en cours de traitement par Paperless-ng.</target> </trans-unit> - <trans-unit datatype="html" id="4733307402565258070"> + <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> - <target>Documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="needs-translation">Documents</target> </trans-unit> - <trans-unit datatype="html" id="2155249406916744630"> - <source>View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</source> - <target>Vue "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" enregistrée avec succès.</target> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Vue "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" enregistrée avec succès.</target> </trans-unit> - <trans-unit datatype="html" id="6837554170707123455"> - <source>View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</source> - <target>Vue "<x equiv-text="savedView.name" id="PH"/>" créée avec succès.</target> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Vue "<x equiv-text="savedView.name" id="PH"/>" créée avec succès.</target> </trans-unit> - <trans-unit datatype="html" id="9ca82952a6bc860b5391d5975322d8af8ceddfa4"> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> - <target>Sélectionner</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Sélectionner</target> </trans-unit> - <trans-unit datatype="html" id="7e1f9a7054aff842832620c03dedae894787ba41"> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> - <target>Sélectionner aucun</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Sélectionner aucun</target> </trans-unit> - <trans-unit datatype="html" id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9"> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> - <target>Sélectionner la page</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Sélectionner la page</target> </trans-unit> - <trans-unit datatype="html" id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74"> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> - <target>Sélectionner tout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Sélectionner tout</target> </trans-unit> - <trans-unit datatype="html" id="5d43539fc358c3a548b9d487be821db73e2702ff"> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> - <target>Trier</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Trier</target> </trans-unit> - <trans-unit datatype="html" id="b7641aed03492978b4ec6843b1e53f30464294d9"> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> - <target>Vues</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> + <target state="translated">Vues</target> </trans-unit> - <trans-unit datatype="html" id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f"> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> - <target>Enregistrer sous...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Enregistrer sous...</target> </trans-unit> - <trans-unit datatype="html" id="5f5ce787c428d917c30c9bd70789a618e09743a7"> - <source>Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</source> - <target>Enregistrer "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> + <target state="translated">Enregistrer "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> </trans-unit> - <trans-unit datatype="html" id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159"> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {<x id="INTERPOLATION"/> document sélectionné sur 1} other {<x id="INTERPOLATION"/> documents sélectionnés sur <x id="INTERPOLATION_1"/>}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {<x id="INTERPOLATION"/> document sélectionné sur 1} other {<x id="INTERPOLATION"/> documents sélectionnés sur <x id="INTERPOLATION_1"/>}}</target> </trans-unit> - <trans-unit datatype="html" id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9"> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Un document} other {<x id="INTERPOLATION"/> documents}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =1 {Un document} other {<x id="INTERPOLATION"/> documents}}</target> </trans-unit> - <trans-unit datatype="html" id="bb91083b44e3f77dd68de773ceab467ca3d57507"> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> - <target>(filtré)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> + <target state="translated">(filtré)</target> </trans-unit> - <trans-unit datatype="html" id="ca0b795795658155d44ddca02e95f1feeeb4a88f"> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> - <target>NSA</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> + <target state="translated">NSA</target> </trans-unit> - <trans-unit datatype="html" id="7b5c6286aaded63fb279d6deb8aa8c704e085ced"> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> - <target>Correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Correspondant</target> </trans-unit> - <trans-unit datatype="html" id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e"> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> - <target>Titre</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Titre</target> </trans-unit> - <trans-unit datatype="html" id="2bd5919e8098513664a89d5b7b52d61e3063950f"> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> - <target>Type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Type de document</target> </trans-unit> - <trans-unit datatype="html" id="1b051734b0ee9021991c91b3ed4e81c244322462"> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> - <target>Date de création</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> + <target state="translated">Date de création</target> </trans-unit> - <trans-unit datatype="html" id="80e3b490720757978c99a7b5af3885faf202b955"> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> - <target>Date d'ajout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Date d'ajout</target> </trans-unit> - <trans-unit datatype="html" id="9021887951960049161"> + <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> - <target>Confirmer la suppression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Confirmer la suppression</target> </trans-unit> - <trans-unit datatype="html" id="5382975254277698192"> - <source>Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</source> - <target>Voulez-vous vraiment supprimer le document "<x equiv-text="this.document.title" id="PH"/>" ?</target> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> + <target state="translated">Voulez-vous vraiment supprimer le document "<x equiv-text="this.document.title" id="PH"/>" ?</target> </trans-unit> - <trans-unit datatype="html" id="6691075929777935948"> + <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> - <target>Les fichiers liés à ce document seront supprimés définitivement. Cette action est irréversible.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Les fichiers liés à ce document seront supprimés définitivement. Cette action est irréversible.</target> </trans-unit> - <trans-unit datatype="html" id="719892092227206532"> + <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> - <target>Supprimer le document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> + <target state="translated">Supprimer le document</target> </trans-unit> - <trans-unit datatype="html" id="1844801255494293730"> - <source>Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></source> - <target>Une erreur s'est produite lors de la suppression du document : <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> + <target state="translated">Une erreur s'est produite lors de la suppression du document : <x equiv-text="JSON.stringify(error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="826b25211922a1b46436589233cb6f1a163d89b7"> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> - <target>Supprimer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Supprimer</target> </trans-unit> - <trans-unit datatype="html" id="dc75033a5238fdc4f462212c847a45ba8018a3fd"> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> - <target>Télécharger</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Télécharger</target> </trans-unit> - <trans-unit datatype="html" id="4ea3c236bca3528318e3b3a411a20909e5fa8be4"> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> - <target>Documents relatifs</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Documents relatifs</target> </trans-unit> - <trans-unit datatype="html" id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8"> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> - <target>Fermer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> + <target state="translated">Fermer</target> </trans-unit> - <trans-unit datatype="html" id="4f8b2bb476981727ab34ed40fde1218361f92c45"> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> - <target>Détails</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> + <target state="translated">Détails</target> </trans-unit> - <trans-unit datatype="html" id="4ab4cb601522b9194922554d934c4c30bd93567d"> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> - <target>Contenu</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> + <target state="translated">Contenu</target> </trans-unit> - <trans-unit datatype="html" id="f721a500a68c357e8f2a01e60510f6a01e4ba529"> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> - <target>Métadonnées</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> + <target state="translated">Métadonnées</target> </trans-unit> - <trans-unit datatype="html" id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7"> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> - <target>Abandonner</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Abandonner</target> </trans-unit> - <trans-unit datatype="html" id="52c9a103b812f258bcddc3d90a6e3f46871d25fe"> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> - <target>Enregistrer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Enregistrer</target> </trans-unit> - <trans-unit datatype="html" id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3"> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> - <target>Page</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="needs-translation">Page</target> </trans-unit> - <trans-unit datatype="html" id="c972a8e7d09f86e0c408a80349990fb213b32c08"> - <source>of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></source> - <target>sur <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">sur <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="a071e35fecc10753065b1cb5b38608be66da2c8b"> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> - <target>Télécharger l'original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Télécharger l'original</target> </trans-unit> - <trans-unit datatype="html" id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5"> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> - <target>Numéro de série de l'archive</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> + <target state="translated">Numéro de série de l'archive</target> </trans-unit> - <trans-unit datatype="html" id="30eebc2dd656dbcb259d8d5286d244ee397d63bd"> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> - <target>Date de création</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> + <target state="translated">Date de création</target> </trans-unit> - <trans-unit datatype="html" id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720"> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> - <target>Modifié le</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Modifié le</target> </trans-unit> - <trans-unit datatype="html" id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269"> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> - <target>Date d'ajout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Date d'ajout</target> </trans-unit> - <trans-unit datatype="html" id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3"> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> - <target>Nom de fichier du média</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Nom de fichier du média</target> </trans-unit> - <trans-unit datatype="html" id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8"> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> - <target>Somme de contrôle MD5 de l'original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Somme de contrôle MD5 de l'original</target> </trans-unit> - <trans-unit datatype="html" id="e92ca184ea785769fb26138fc25ee9fa06fff6e5"> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> - <target>Taille de fichier de l'original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Taille de fichier de l'original</target> </trans-unit> - <trans-unit datatype="html" id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd"> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> - <target>Type mime de l'original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Type mime de l'original</target> </trans-unit> - <trans-unit datatype="html" id="edbf54e4117606b5dd87aaea3c14b21ebf398020"> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> - <target>Somme de contrôle MD5 de l'archive</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> + <target state="translated">Somme de contrôle MD5 de l'archive</target> </trans-unit> - <trans-unit datatype="html" id="e6bf12eadecbfd80016eca15fa78651c6ca90c64"> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> - <target>Taille de fichier de l'archive</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> + <target state="translated">Taille de fichier de l'archive</target> </trans-unit> - <trans-unit datatype="html" id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f"> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> - <target>Métadonnées du document original</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> + <target state="translated">Métadonnées du document original</target> </trans-unit> - <trans-unit datatype="html" id="7174dcea4a3d0b743e7e4a78747e902230727f67"> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> - <target>Métadonnées du document archivé</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> + <target state="translated">Métadonnées du document archivé</target> </trans-unit> - <trans-unit datatype="html" id="3fb9f1a31c3798173b2fea72638732c783b152fe"> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> - <target>Enregistrer & suivant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> + <target state="translated">Enregistrer & suivant</target> </trans-unit> - <trans-unit datatype="html" id="8765497970646365998"> - <source>Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</source> - <target>Bonjour <x equiv-text="this.displayName" id="PH"/>, bienvenue dans Paperless-ng !</target> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> + <target state="translated">Bonjour <x equiv-text="this.displayName" id="PH"/>, bienvenue dans Paperless-ng !</target> </trans-unit> - <trans-unit datatype="html" id="7016571167317583872"> + <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> - <target>Bienvenue dans Paperless-ng !</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Bienvenue dans Paperless-ng !</target> </trans-unit> - <trans-unit datatype="html" id="f65253954b66e929a8b4d5ecaf61f9129f8cec64"> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> - <target>Tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Tableau de bord</target> </trans-unit> - <trans-unit datatype="html" id="93754014749412887"> - <source>Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Voulez-vous vraiment supprimer l'étiquette "<x equiv-text="object.name" id="PH"/>" ?</target> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Voulez-vous vraiment supprimer l'étiquette "<x equiv-text="object.name" id="PH"/>" ?</target> </trans-unit> - <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> - <target>Étiquettes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Étiquettes</target> </trans-unit> - <trans-unit datatype="html" id="70a67e04629f6d412db0a12d51820b480788d795"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> - <target>Créer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> + <target state="translated">Créer</target> </trans-unit> - <trans-unit datatype="html" id="ddb40946e790522301687ecddb9ce1cb8ad40dd1"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> - <target>Filtrer par : </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Filtrer par : </target> </trans-unit> - <trans-unit datatype="html" id="cff1428d10d59d14e45edec3c735a27b5482db59"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> - <target>Nom</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Nom</target> </trans-unit> - <trans-unit datatype="html" id="8fa4d523f7b91df4390120b85ed0406138273e1a"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> - <target>Couleur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Couleur</target> </trans-unit> - <trans-unit datatype="html" id="d0c4488f742efeba0915e90e285a022da813deff"> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> - <target>Rapprochement</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Rapprochement</target> </trans-unit> - <trans-unit datatype="html" id="9bcf8d20d23c111eca1431abd2d2ce0de324499c"> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> - <target>Nombre de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Nombre de documents</target> </trans-unit> - <trans-unit datatype="html" id="030b4423b92167200e39519599f9b863b4f7c62c"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> - <target>Actions</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> + <target state="needs-translation">Actions</target> </trans-unit> - <trans-unit datatype="html" id="9d51b3c90afda70700229d1b8a55371c13cb3bce"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> - <target>Documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="needs-translation">Documents</target> </trans-unit> - <trans-unit datatype="html" id="28f86ffd419b869711aa13f5e5ff54be6d70731c"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> - <target>Éditer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> + <target state="translated">Éditer</target> </trans-unit> - <trans-unit datatype="html" id="4990731724078522539"> - <source>Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Voulez-vous vraiment supprimer le type de document "<x equiv-text="object.name" id="PH"/>" ?</target> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Voulez-vous vraiment supprimer le type de document "<x equiv-text="object.name" id="PH"/>" ?</target> </trans-unit> - <trans-unit datatype="html" id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> - <target>Types de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Types de document</target> </trans-unit> - <trans-unit datatype="html" id="eb3d5aefff38a814b76da74371cbf02c0789a1ef"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> - <target>Rapports</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Rapports</target> </trans-unit> - <trans-unit datatype="html" id="5610279464668232148"> - <source>Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</source> - <target>Vue "<x equiv-text="savedView.name" id="PH"/>" supprimée.</target> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Vue "<x equiv-text="savedView.name" id="PH"/>" supprimée.</target> </trans-unit> - <trans-unit datatype="html" id="5647210819299459618"> + <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> - <target>Paramètres enregistrés avec succès.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> + <target state="translated">Paramètres enregistrés avec succès.</target> </trans-unit> - <trans-unit datatype="html" id="6839066544204061364"> + <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> - <target>Utiliser la langue du système</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Utiliser la langue du système</target> </trans-unit> - <trans-unit datatype="html" id="7729897675462249787"> + <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> - <target>Utiliser le format de date de la langue d'affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> + <target state="translated">Utiliser le format de date de la langue d'affichage</target> </trans-unit> - <trans-unit datatype="html" id="8488620293789898901"> - <source>Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> + <target state="translated">Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="121cc5391cd2a5115bc2b3160379ee5b36cd7716"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> - <target>Paramètres</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Paramètres</target> </trans-unit> - <trans-unit datatype="html" id="11ebd254cc9294717105c5982eb0cd2af30a446d"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> - <target>Paramètres généraux</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Paramètres généraux</target> </trans-unit> - <trans-unit datatype="html" id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> - <target>Notifications</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> + <target state="needs-translation">Notifications</target> </trans-unit> - <trans-unit datatype="html" id="99dee94e92dbd9e21a008d4569f9719ed206ae37"> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> - <target>Vues enregistrées</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> + <target state="translated">Vues enregistrées</target> </trans-unit> - <trans-unit datatype="html" id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13"> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> - <target>Affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Affichage</target> </trans-unit> - <trans-unit datatype="html" id="75f8908d266f7cc9b9e68e0be906fd080a223606"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> - <target>Langue d'affichage</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Langue d'affichage</target> </trans-unit> - <trans-unit datatype="html" id="1284a077dc18a2d1ff1b744f16f1797eea28ae37"> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> - <target>Vous devez recharger la page après avoir sélectionné une nouvelle langue.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Vous devez recharger la page après avoir sélectionné une nouvelle langue.</target> </trans-unit> - <trans-unit datatype="html" id="0cd55822928764cc82a62ee3e6f3adbc1c630479"> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> - <target>Affichage de la date</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Affichage de la date</target> </trans-unit> - <trans-unit datatype="html" id="7df4de0d0704a06a302d853e31f2580eba98f127"> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> - <target>Format de date</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Format de date</target> </trans-unit> - <trans-unit datatype="html" id="69852399a18b8ca4fca8c5bfddd3f00a6d137593"> - <source>Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Court : <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> + <target state="translated">Court : <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="d01a59285e711252b98c4f193394e4b854615c78"> - <source>Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Moyen : <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> + <target state="translated">Moyen : <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="00481629776699b1caebd12b3b1176e2e23740a8"> - <source>Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></source> - <target>Long : <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> + <target state="translated">Long : <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2045151788cbdda7512752e408da59a6b54a8ef0"> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> - <target>Éléments par page</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Éléments par page</target> </trans-unit> - <trans-unit datatype="html" id="c4435e56bf0289e78fedc462f1d21fb30b9de55d"> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> - <target>Visionneuse de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> + <target state="translated">Visionneuse de documents</target> </trans-unit> - <trans-unit datatype="html" id="4903e521c9bfd11ce88e7a5575106ef638912e0d"> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> - <target>Utiliser la visionneuse PDF fournie par le navigateur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Utiliser la visionneuse PDF fournie par le navigateur</target> </trans-unit> - <trans-unit datatype="html" id="d7db07023e53f8396d18d375c2b78c25fc81c197"> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> - <target>Cette option est généralement plus rapide pour l'affichage de grands documents PDF, mais elle peut ne pas fonctionner sur certains navigateurs.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Cette option est généralement plus rapide pour l'affichage de grands documents PDF, mais elle peut ne pas fonctionner sur certains navigateurs.</target> </trans-unit> - <trans-unit datatype="html" id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff"> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> - <target>Mode sombre</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Mode sombre</target> </trans-unit> - <trans-unit datatype="html" id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637"> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> - <target>Utiliser les paramètres du système</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Utiliser les paramètres du système</target> </trans-unit> - <trans-unit datatype="html" id="8ee474504043fa89821d626e4f3413240fa91b53"> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> - <target>Activer le mode sombre</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> + <target state="translated">Activer le mode sombre</target> </trans-unit> - <trans-unit datatype="html" id="71bad20b37410c8972c9aa0f7c62996534b84339"> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> - <target>Inverser les vignettes en mode sombre</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> + <target state="translated">Inverser les vignettes en mode sombre</target> </trans-unit> - <trans-unit datatype="html" id="3863a86cd9e69a61d143d3daf51df44203df4a82"> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> - <target>Edition en masse</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> + <target state="translated">Edition en masse</target> </trans-unit> - <trans-unit datatype="html" id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586"> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> - <target>Afficher les messages de confirmation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">Afficher les messages de confirmation</target> </trans-unit> - <trans-unit datatype="html" id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a"> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> - <target>La suppression de documents requiert toujours une confirmation.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> + <target state="translated">La suppression de documents requiert toujours une confirmation.</target> </trans-unit> - <trans-unit datatype="html" id="8cfddc13e04f5545ac63f419ef363505d6f78c2e"> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> - <target>Appliquer lors de la fermeture</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> + <target state="translated">Appliquer lors de la fermeture</target> </trans-unit> - <trans-unit datatype="html" id="8680abbea249ebe9c2fe35556559c8e1a9eb5841"> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> - <target>Traitement de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> + <target state="translated">Traitement de documents</target> </trans-unit> - <trans-unit datatype="html" id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0"> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> - <target>Afficher des notifications lorsque de nouveaux documents sont détectés</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Afficher des notifications lorsque de nouveaux documents sont détectés</target> </trans-unit> - <trans-unit datatype="html" id="e775f4f7c40249d31426ae61a21616a0c9d8e84f"> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> - <target>Afficher des notifications lorsque le traitement des documents se termine avec succès</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> + <target state="translated">Afficher des notifications lorsque le traitement des documents se termine avec succès</target> </trans-unit> - <trans-unit datatype="html" id="e3844dd174d8e817ddb551fae28f14ae80ca36b6"> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> - <target>Afficher des notifications en cas d'échec du traitement des documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> + <target state="translated">Afficher des notifications en cas d'échec du traitement des documents</target> </trans-unit> - <trans-unit datatype="html" id="af113f7c9f7e13145c3461f61a1aedf12d57bd71"> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> - <target>Supprimer les notifications du tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Supprimer les notifications du tableau de bord</target> </trans-unit> - <trans-unit datatype="html" id="e27bd3804d2936a6897e81c2e52e294490e5e5a8"> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> - <target>Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Cela supprimera tous les messages liés au traitement de documents sur le tableau de bord.</target> </trans-unit> - <trans-unit datatype="html" id="8cb90334f5dfd7fc67205085f59381e2a334ccfc"> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> - <target>Apparaît sur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> + <target state="translated">Apparaît sur</target> </trans-unit> - <trans-unit datatype="html" id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5"> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> - <target>Montrer sur le tableau de bord</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> + <target state="translated">Montrer sur le tableau de bord</target> </trans-unit> - <trans-unit datatype="html" id="541bfc5b123b3f8867fd681eaceefb663a811973"> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> - <target>Montrer dans la barre latérale</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> + <target state="translated">Montrer dans la barre latérale</target> </trans-unit> - <trans-unit datatype="html" id="abba764a7a595d04dc8c3b26e04b3780d4fdb540"> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> - <target>Aucune vue sauvegardée n'est définie.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Aucune vue sauvegardée n'est définie.</target> </trans-unit> - <trans-unit datatype="html" id="ef60a738a565f498b858e903e42bc5ffc3cc1299"> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> - <target>404 Non trouvé</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">404 Non trouvé</target> </trans-unit> - <trans-unit datatype="html" id="7427874343955308724"> - <source>Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</source> - <target>Voulez-vous vraiment supprimer le correspondant "<x equiv-text="object.name" id="PH"/>" ?</target> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Voulez-vous vraiment supprimer le correspondant "<x equiv-text="object.name" id="PH"/>" ?</target> </trans-unit> - <trans-unit datatype="html" id="c3f3334de899327bf3ec8999236e10798ff76e72"> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> - <target>Correspondants</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Correspondants</target> </trans-unit> - <trans-unit datatype="html" id="0488919cff4fcc2174d34e4a1167f1b3c586ca37"> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> - <target>Dernière correspondance</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Dernière correspondance</target> </trans-unit> - <trans-unit datatype="html" id="1234709746630139322"> + <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> - <target>Confirmation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="needs-translation">Confirmation</target> </trans-unit> - <trans-unit datatype="html" id="9178182467454450952"> + <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> - <target>Confirmer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> + <target state="translated">Confirmer</target> </trans-unit> - <trans-unit datatype="html" id="d7b35c384aecd25a516200d6921836374613dfe7"> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> - <target>Annuler</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Annuler</target> </trans-unit> - <trans-unit datatype="html" id="6457471243969293847"> + <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> - <target>Créer un nouveau correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Créer un nouveau correspondant</target> </trans-unit> - <trans-unit datatype="html" id="2059822531169388684"> + <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> - <target>Éditer le correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Éditer le correspondant</target> </trans-unit> - <trans-unit datatype="html" id="3d5caa52b0a51bfd2757215f7614183554d740f0"> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> - <target>Algorithme de rapprochement</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Algorithme de rapprochement</target> </trans-unit> - <trans-unit datatype="html" id="eab7fc7cf2d663e54de934b779fce4275a303f0f"> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> - <target>Modèle de rapprochement</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Modèle de rapprochement</target> </trans-unit> - <trans-unit datatype="html" id="632e529f49cf3d367dfbd15bd055e9b53aef30fb"> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> - <target>Insensible à la casse</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Insensible à la casse</target> </trans-unit> - <trans-unit datatype="html" id="9153094873118985366"> + <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> - <target>Créer une nouvelle étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Créer une nouvelle étiquette</target> </trans-unit> - <trans-unit datatype="html" id="5872175735754226507"> + <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> - <target>Éditer l'étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Éditer l'étiquette</target> </trans-unit> - <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> - <target>Étiquette de boîte de réception</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Étiquette de boîte de réception</target> </trans-unit> - <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> - <target>Les étiquettes de boîte de réception sont automatiquement affectées à tous les documents traités.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Les étiquettes de boîte de réception sont automatiquement affectées à tous les documents traités.</target> </trans-unit> - <trans-unit datatype="html" id="6672809941092516947"> + <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> - <target>Créer un nouveau type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Créer un nouveau type de document</target> </trans-unit> - <trans-unit datatype="html" id="36335016091244220"> + <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> - <target>Éditer le type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Éditer le type de document</target> </trans-unit> - <trans-unit datatype="html" id="49c9ede51100b454f7841b24cd02355c6622bf44"> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> - <target>Résultats de la recherche</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Résultats de la recherche</target> </trans-unit> - <trans-unit datatype="html" id="31976d04f98e8a38098f66ac3a83ad33b576e5db"> - <source>Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></source> - <target>Requête de recherche invalide : <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Requête de recherche invalide : <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e"> - <source> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></source> - <target>Présentation des documents similaires à <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> + <target state="translated">Présentation des documents similaires à <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> </trans-unit> - <trans-unit datatype="html" id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e"> - <source>Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></source> - <target>Requête de recherche : <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Requête de recherche : <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> </trans-unit> - <trans-unit datatype="html" id="afa760e48c97d64d19c1455d18b7834a2256e23f"> - <source>Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</source> - <target>Vouliez-vous dire "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>" ?</target> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Vouliez-vous dire "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>" ?</target> </trans-unit> - <trans-unit datatype="html" id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e"> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <target>{VAR_PLURAL, plural, =0 {Aucun résultat} =1 {Un résultat} other {<x id="INTERPOLATION"/> résultats}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">{VAR_PLURAL, plural, =0 {Aucun résultat} =1 {Un résultat} other {<x id="INTERPOLATION"/> résultats}}</target> </trans-unit> - <trans-unit datatype="html" id="41147374f427980a9f1a8cd5e3f4b1666e6f2418"> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> - <target>Paperless-ng</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">11</context> </context-group> - <note from="description" priority="1">app title</note> + <note priority="1" from="description">app title</note> + <target state="needs-translation">Paperless-ng</target> </trans-unit> - <trans-unit datatype="html" id="069566c6ed4f051b5b5617ef1935837226585dad"> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> - <target>Rechercher des documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Rechercher des documents</target> </trans-unit> - <trans-unit datatype="html" id="bb694b49d408265c91c62799c2b3a7e3151c824d"> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> - <target>Déconnexion</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Déconnexion</target> </trans-unit> - <trans-unit datatype="html" id="68949525c4d9a901e0cd15a94e3fc8d2711e9918"> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> - <target>Gestion</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> + <target state="translated">Gestion</target> </trans-unit> - <trans-unit datatype="html" id="408cb6073e60c5d966296a3207fc596adca75e01"> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> - <target>Administration</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> + <target state="translated">Administration</target> </trans-unit> - <trans-unit datatype="html" id="321e4419a943044e674beb55b8039f42a9761ca5"> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> - <target>Info</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> + <target state="needs-translation">Info</target> </trans-unit> - <trans-unit datatype="html" id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7"> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> - <target>Documentation</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> + <target state="needs-translation">Documentation</target> </trans-unit> - <trans-unit datatype="html" id="355a222236bc01b9a8cd3cb9ecf76891125aed69"> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> - <target>GitHub</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> + <target state="needs-translation">GitHub</target> </trans-unit> - <trans-unit datatype="html" id="ea3a452c5238897cabc5781308cceb2d37dcf258"> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> - <target>Suggérer une idée</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> + <target state="translated">Suggérer une idée</target> </trans-unit> - <trans-unit datatype="html" id="af665f8de8fabe306aaf27443957e69bcbbce63c"> - <source>Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></source> - <target>Connexion en tant que <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Connexion en tant que <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="4f55b670f49d927c6026bb614c7c62b1f2a394c0"> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> - <target>Documents ouverts</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> + <target state="translated">Documents ouverts</target> </trans-unit> - <trans-unit datatype="html" id="dca5bf9344a759fa5a07f1b21f50286ec242ba44"> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> - <target>Fermer tout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Fermer tout</target> </trans-unit> - <trans-unit datatype="html" id="5701618810648052610"> + <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> - <target>Titre</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> + <target state="translated">Titre</target> </trans-unit> - <trans-unit datatype="html" id="3100631071441658964"> + <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> - <target>Titre & contenu</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Titre & contenu</target> </trans-unit> - <trans-unit datatype="html" id="5195932016807797291"> - <source>Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></source> - <target>Correspondant : <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Correspondant : <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="8170755470576301659"> + <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> - <target>Sans correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Sans correspondant</target> </trans-unit> - <trans-unit datatype="html" id="8705701325879965907"> - <source>Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></source> - <target>Type : <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Type : <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="4362173610367509215"> + <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> - <target>Sans type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> + <target state="translated">Sans type de document</target> </trans-unit> - <trans-unit datatype="html" id="8180755793012580465"> - <source>Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></source> - <target>Étiquette : <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Étiquette : <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="6494566478302448576"> + <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> - <target>Sans étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> + <target state="translated">Sans étiquette</target> </trans-unit> - <trans-unit datatype="html" id="6523384805359286307"> - <source>Title: <x equiv-text="rule.value" id="PH"/></source> - <target>Titre : <x equiv-text="rule.value" id="PH"/></target> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> + <target state="translated">Titre : <x equiv-text="rule.value" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="02d184c288f567825a1fcbf83bcd3099a10853d5"> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> - <target>Filtrer les étiquettes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtrer les étiquettes</target> </trans-unit> - <trans-unit datatype="html" id="4b089ca12c472cf0b46167bb5afe4b527b301bbc"> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> - <target>Filtrer les correspondants</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> + <target state="translated">Filtrer les correspondants</target> </trans-unit> - <trans-unit datatype="html" id="0ad509732aaf702b7ea8c771c7809fa84bc85908"> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> - <target>Filtrer les types de documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Filtrer les types de documents</target> </trans-unit> - <trans-unit datatype="html" id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2"> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> - <target>Réinitialiser les filtres</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Réinitialiser les filtres</target> </trans-unit> - <trans-unit datatype="html" id="7593728289020204896"> + <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> - <target>Non affecté</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> <context context-type="linenumber">166</context> </context-group> - <note from="description" priority="1">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Non affecté</target> </trans-unit> - <trans-unit datatype="html" id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b"> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> - <target>Appliquer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Appliquer</target> </trans-unit> - <trans-unit datatype="html" id="4873149362496451858"> + <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> - <target>Les 7 derniers jours</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> + <target state="translated">Les 7 derniers jours</target> </trans-unit> - <trans-unit datatype="html" id="4463380307954693363"> + <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> - <target>Le mois dernier</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Le mois dernier</target> </trans-unit> - <trans-unit datatype="html" id="8697368973702409683"> + <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> - <target>Les 3 derniers mois</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> + <target state="translated">Les 3 derniers mois</target> </trans-unit> - <trans-unit datatype="html" id="3566342898065860218"> + <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> - <target>L'année passée</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> + <target state="translated">L'année passée</target> </trans-unit> - <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> - <target>Après</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Après</target> </trans-unit> - <trans-unit datatype="html" id="8785188e6c678b842fcb93b7392faf86db7ec676"> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> - <target>Avant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Avant</target> </trans-unit> - <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> - <target>Réinitialiser</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Réinitialiser</target> </trans-unit> - <trans-unit datatype="html" id="6829218544e108e152f5fa72cb79c4ccb82e0d06"> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> - <target>Vue</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Vue</target> </trans-unit> - <trans-unit datatype="html" id="849b42384616374df49bd8b3711ec159cb10b845"> - <source>Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></source> - <target>Créé le : <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> + <target state="translated">Créé le : <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8"> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> - <target>Filtrer par correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Filtrer par correspondant</target> </trans-unit> - <trans-unit datatype="html" id="bdb9a910523610254872e147222689e9a4115b84"> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> - <target>Filtrer par étiquette</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Filtrer par étiquette</target> </trans-unit> - <trans-unit datatype="html" id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60"> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> - <target>Score :</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> + <target state="translated">Score :</target> </trans-unit> - <trans-unit datatype="html" id="2840db547019ce8c76b2cdbe3a1653c5b68b06af"> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> - <target>Afficher dans le navigateur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> + <target state="translated">Afficher dans le navigateur</target> </trans-unit> - <trans-unit datatype="html" id="7985804062689412812"> - <source>Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Une erreur s'est produite lors de l'exécution de l'opération de masse : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> + <target state="translated">Une erreur s'est produite lors de l'exécution de l'opération de masse : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="7894972847287473517"> - <source>"<x equiv-text="items[0].name" id="PH"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>"</target> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> </trans-unit> - <trans-unit datatype="html" id="8639884465898458690"> - <source>"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</source> - <target>"<x equiv-text="items[0].name" id="PH"/>" et "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <note from="description" priority="1">This is for messages like 'modify "tag1" and "tag2"'</note> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" et "<x equiv-text="items[1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="760986369763309193"> + <trans-unit id="760986369763309193" datatype="html"> <source>, </source> - <target>, </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <note from="description" priority="1">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="needs-translation">, </target> </trans-unit> - <trans-unit datatype="html" id="1822679894391095557"> - <source><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</source> - <target><x equiv-text="list" id="PH"/> et "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <note from="description" priority="1">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x equiv-text="list" id="PH"/> et "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> </trans-unit> - <trans-unit datatype="html" id="4137232459980262849"> + <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> - <target>Confirmer l'affectation des étiquettes</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> + <target state="translated">Confirmer l'affectation des étiquettes</target> </trans-unit> - <trans-unit datatype="html" id="6619516195038467207"> - <source>This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Cette action affectera l'étiquette "<x equiv-text="tag.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> + <target state="translated">Cette action affectera l'étiquette "<x equiv-text="tag.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="1894412783609570695"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> + <target state="translated">Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="7181166515756808573"> - <source>This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Cette action supprimera l'étiquette "<x equiv-text="tag.name" id="PH"/>" de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> + <target state="translated">Cette action supprimera l'étiquette "<x equiv-text="tag.name" id="PH"/>" de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="3819792277998068944"> - <source>This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Cette action supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> + <target state="translated">Cette action supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="2739066218579571288"> - <source>This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</source> - <target>Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> et supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de(s) <x equiv-text="this.list.selected.size" id="PH_2"/> document(s) sélectionné(s).</target> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> + <target state="translated">Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> et supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de(s) <x equiv-text="this.list.selected.size" id="PH_2"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="2996713129519325161"> + <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> - <target>Confirmer l'affectation du correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> + <target state="translated">Confirmer l'affectation du correspondant</target> </trans-unit> - <trans-unit datatype="html" id="6900893559485781849"> - <source>This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Cette action affectera le correspondant "<x equiv-text="correspondent.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/>document(s) sélectionné(s).</target> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> + <target state="translated">Cette action affectera le correspondant "<x equiv-text="correspondent.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/>document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="1257522660364398440"> - <source>This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Cette action supprimera le correspondant de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> + <target state="translated">Cette action supprimera le correspondant de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="5393409374423140648"> + <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> - <target>Confirmer l'affectation du type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> + <target state="translated">Confirmer l'affectation du type de document</target> </trans-unit> - <trans-unit datatype="html" id="332180123895325027"> - <source>This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</source> - <target>Cette action affectera le type de document "<x equiv-text="documentType.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> + <target state="translated">Cette action affectera le type de document "<x equiv-text="documentType.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="2236642492594872779"> - <source>This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Cette action supprimera le type de document de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> + <target state="translated">Cette action supprimera le type de document de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="749430623564850405"> + <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> - <target>Confirmer la suppression</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> + <target state="translated">Confirmer la suppression</target> </trans-unit> - <trans-unit datatype="html" id="4303174930844518780"> - <source>This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</source> - <target>Cette action supprimera définitivement <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> + <target state="translated">Cette action supprimera définitivement <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> </trans-unit> - <trans-unit datatype="html" id="5641451190833696892"> + <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> - <target>Cette action est irréversible.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> + <target state="translated">Cette action est irréversible.</target> </trans-unit> - <trans-unit datatype="html" id="6734339521247847366"> + <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> - <target>Supprimer le(s) document(s)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> + <target state="translated">Supprimer le(s) document(s)</target> </trans-unit> - <trans-unit datatype="html" id="8b0609df23817024b3bed12beb9b64fc1009f588"> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> - <target>Sélectionner :</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Sélectionner :</target> </trans-unit> - <trans-unit datatype="html" id="dfc3c34e182ea73c5d784ff7c8135f087992dac1"> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> - <target>Tout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Tout</target> </trans-unit> - <trans-unit datatype="html" id="907df6a2b68daecc3c399cf40a764b358bd9fd84"> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> - <target>Éditer :</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Éditer :</target> </trans-unit> - <trans-unit datatype="html" id="fc2de37422d7c4af6686842283cc2afd781b6848"> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> - <target>Télécharger les originaux</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> + <target state="translated">Télécharger les originaux</target> </trans-unit> - <trans-unit datatype="html" id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e"> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> - <target>Suggestions : </target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Suggestions : </target> </trans-unit> - <trans-unit datatype="html" id="27d158b47717ff9305d19866960418c603f19d55"> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> - <target>Enregistrer la vue actuelle</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Enregistrer la vue actuelle</target> </trans-unit> - <trans-unit datatype="html" id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b"> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> - <target>Tout afficher</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Tout afficher</target> </trans-unit> - <trans-unit datatype="html" id="61e0f26d843eec0b33ff475e111b0c2f7a80b835"> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> - <target>Statistiques</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Statistiques</target> </trans-unit> - <trans-unit datatype="html" id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a"> - <source>Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></source> - <target>Nombre total de documents : <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> + <target state="translated">Nombre total de documents : <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9"> - <source>Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></source> - <target>Documents dans la boîte de réception : <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> + <target state="translated">Documents dans la boîte de réception : <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> </trans-unit> - <trans-unit datatype="html" id="6443586946875325554"> - <source>Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></source> - <target>Traitement : <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> + <target state="translated">Traitement : <x equiv-text="countUploadingAndProcessing" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="9182918211699394982"> - <source>Failed: <x equiv-text="countFailed" id="PH"/></source> - <target>Échec : <x equiv-text="countFailed" id="PH"/></target> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Échec : <x equiv-text="countFailed" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="534116346205124059"> - <source>Added: <x equiv-text="countSuccess" id="PH"/></source> - <target>Ajout : <x equiv-text="countSuccess" id="PH"/></target> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> + <target state="translated">Ajout : <x equiv-text="countSuccess" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="3852289441366561594"> + <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> - <target>Connexion...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> + <target state="translated">Connexion...</target> </trans-unit> - <trans-unit datatype="html" id="1245343823699368872"> + <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> - <target>Téléchargement...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> + <target state="translated">Téléchargement...</target> </trans-unit> - <trans-unit datatype="html" id="7446520539098045935"> + <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> - <target>Chargement terminé, en attente...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> + <target state="translated">Chargement terminé, en attente...</target> </trans-unit> - <trans-unit datatype="html" id="1405142710727603568"> - <source>HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></source> - <target>Erreur HTTP : <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> + <target state="translated">Erreur HTTP : <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> </trans-unit> - <trans-unit datatype="html" id="e022072b3e4dd77e3f09960817ef3359a49963b3"> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> - <target>Charger de nouveaux documents</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Charger de nouveaux documents</target> </trans-unit> - <trans-unit datatype="html" id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e"> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> - <target>Déposer des documents ici ou</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Déposer des documents ici ou</target> </trans-unit> - <trans-unit datatype="html" id="865c511f4a24558ed0e954f9bbbff557bbb8954d"> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> - <target>Parcourir les fichiers</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Parcourir les fichiers</target> </trans-unit> - <trans-unit datatype="html" id="bd4a8607e4a002d939cffb347ec056664dfb2c73"> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> - <target>Masquer lorsque terminé</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <note from="description" priority="1">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Masquer lorsque terminé</target> </trans-unit> - <trans-unit datatype="html" id="90917e1a0a7bb59e9d11bdde9183e9391963e17b"> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> - <target>{VAR_PLURAL, plural, =1 {Un document supplémentaire} other {<x id="INTERPOLATION"/> documents supplémentaires}}</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">25</context> </context-group> - <note from="description" priority="1">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, =1 {Un document supplémentaire} other {<x id="INTERPOLATION"/> documents supplémentaires}}</target> </trans-unit> - <trans-unit datatype="html" id="710254a196a2649674438edf8a15b7ab1f48271b"> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> - <target>Ouvrir le document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> + <target state="translated">Ouvrir le document</target> </trans-unit> - <trans-unit datatype="html" id="45854ddec74086b271e62be6a363f4fa5036f7fc"> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> - <target>Premiers pas</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> + <target state="translated">Premiers pas</target> </trans-unit> - <trans-unit datatype="html" id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3"> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> - <target>Paperless-ng fonctionne ! :)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> + <target state="translated">Paperless-ng fonctionne ! :)</target> </trans-unit> - <trans-unit datatype="html" id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d"> - <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> - <target>Vous pouvez commencer par télécharger des documents en les déposant dans la boîte de téléchargement de fichiers à droite ou en les déposant dans le dossier de traitement configuré, et ils commenceront à apparaître dans la liste des documents. Une fois que vous avez ajouté des métadonnées à vos documents, utilisez les mécanismes de filtrage de Paperless-ng pour créer des vues personnalisées (telles que "Récemment ajouté", "Marqué À FAIRE") et elles apparaîtront sur le tableau de bord à la place de ce message.</target> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> + <target state="translated">Vous pouvez commencer par télécharger des documents en les déposant dans la boîte de téléchargement de fichiers à droite ou en les déposant dans le dossier de traitement configuré, et ils commenceront à apparaître dans la liste des documents. Une fois que vous avez ajouté des métadonnées à vos documents, utilisez les mécanismes de filtrage de Paperless-ng pour créer des vues personnalisées (telles que "Récemment ajouté", "Marqué À FAIRE") et elles apparaîtront sur le tableau de bord à la place de ce message.</target> </trans-unit> - <trans-unit datatype="html" id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b"> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> - <target>Paperless-ng offre quelques fonctionnalités supplémentaires qui tendent à vous faciliter la vie :</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> + <target state="translated">Paperless-ng offre quelques fonctionnalités supplémentaires qui tendent à vous faciliter la vie :</target> </trans-unit> - <trans-unit datatype="html" id="edb41dc36af2e70789d8e3422325d930e783253e"> - <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> - <target>Une fois que vous avez quelques documents dans Paperless-ng et que vous y avez ajouté des métadonnées, Paperless-ng peut attribuer automatiquement ces métadonnées à de nouveaux documents.</target> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> + <target state="translated">Une fois que vous avez quelques documents dans Paperless-ng et que vous y avez ajouté des métadonnées, Paperless-ng peut attribuer automatiquement ces métadonnées à de nouveaux documents.</target> </trans-unit> - <trans-unit datatype="html" id="9dca488928c0b7af46c3866f86a6c2c8548399aa"> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> - <target>Vous pouvez configurer Paperless-ng pour lire vos courriels et ajouter des documents à partir des pièces jointes.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> + <target state="translated">Vous pouvez configurer Paperless-ng pour lire vos courriels et ajouter des documents à partir des pièces jointes.</target> </trans-unit> - <trans-unit datatype="html" id="d282f6277cbf6704f697170d2ad19ce500790e20"> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> - <target>Consultez la documentation sur l'utilisation de ces fonctionnalités. La section sur l'utilisation de base contient également des informations sur la manière d'utiliser Paperless-ng en général.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Consultez la documentation sur l'utilisation de ces fonctionnalités. La section sur l'utilisation de base contient également des informations sur la manière d'utiliser Paperless-ng en général.</target> </trans-unit> - <trans-unit datatype="html" id="218403386307979629"> + <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> - <target>Métadonnées</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Métadonnées</target> </trans-unit> - <trans-unit datatype="html" id="3797570084942068182"> + <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> - <target>Sélectionner</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Sélectionner</target> </trans-unit> - <trans-unit datatype="html" id="7103181924469214926"> + <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> - <target>Veuillez sélectionner un objet</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Veuillez sélectionner un objet</target> </trans-unit> - <trans-unit datatype="html" id="d6529debfc1613db22d6fa096ebfeb8a85fa739d"> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> - <target>Date incorrecte.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Date incorrecte.</target> </trans-unit> - <trans-unit datatype="html" id="2807800733729323332"> + <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> - <target>Oui</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Oui</target> </trans-unit> - <trans-unit datatype="html" id="3542042671420335679"> + <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> - <target>Non</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> + <target state="translated">Non</target> </trans-unit> - <trans-unit datatype="html" id="7536524521722799066"> + <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> - <target>(sans titre)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">(sans titre)</target> </trans-unit> - <trans-unit datatype="html" id="1206520795340730278"> + <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> - <target>Anglais (US)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> + <target state="translated">Anglais (US)</target> </trans-unit> - <trans-unit datatype="html" id="6987083569809053351"> + <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> - <target>Anglais (GB)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> + <target state="translated">Anglais (GB)</target> </trans-unit> - <trans-unit datatype="html" id="1858110241312746425"> + <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> - <target>Allemand</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> + <target state="translated">Allemand</target> </trans-unit> - <trans-unit datatype="html" id="3071065188816255493"> + <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> - <target>Néerlandais</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> + <target state="translated">Néerlandais</target> </trans-unit> - <trans-unit datatype="html" id="7633754075223722162"> + <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> - <target>Français</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> + <target state="translated">Français</target> </trans-unit> - <trans-unit datatype="html" id="9184513005098760425"> + <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> - <target>Portugais (Brésil)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> + <target state="translated">Portugais (Brésil)</target> </trans-unit> - <trans-unit datatype="html" id="2935232983274991580"> + <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> - <target>Italien</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> + <target state="translated">Italien</target> </trans-unit> - <trans-unit datatype="html" id="8118856427047826368"> + <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> - <target>Roumain</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Roumain</target> </trans-unit> - <trans-unit datatype="html" id="4912706592792948707"> + <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> - <target>ISO 8601</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> + <target state="needs-translation">ISO 8601</target> </trans-unit> - <trans-unit datatype="html" id="2119857572761283468"> + <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> - <target>Le document existe déjà.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Le document existe déjà.</target> </trans-unit> - <trans-unit datatype="html" id="148389968432135849"> + <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> - <target>Fichier non trouvé.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Fichier non trouvé.</target> </trans-unit> - <trans-unit datatype="html" id="1520671543092565667"> + <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> - <target>Le script de pré-traitement n'existe pas.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Le script de pré-traitement n'existe pas.</target> </trans-unit> - <trans-unit datatype="html" id="7742915911032564889"> + <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> - <target>Erreur lors de l'exécution du script de pré-traitement.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <note from="description" priority="1">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Erreur lors de l'exécution du script de pré-traitement.</target> </trans-unit> - <trans-unit datatype="html" id="8995193730018060346"> + <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> - <target>Le script de post-traitement n'existe pas.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">19</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Le script de post-traitement n'existe pas.</target> </trans-unit> - <trans-unit datatype="html" id="256773668518189604"> + <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> - <target>Erreur lors de l'exécution du script de post-traitement.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <note from="description" priority="1">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Erreur lors de l'exécution du script de post-traitement.</target> </trans-unit> - <trans-unit datatype="html" id="6252258095055634191"> + <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> - <target>Réception d'un nouveau fichier.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Réception d'un nouveau fichier.</target> </trans-unit> - <trans-unit datatype="html" id="7337565919209746135"> + <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> - <target>Type de fichier non pris en charge.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Type de fichier non pris en charge.</target> </trans-unit> - <trans-unit datatype="html" id="5002399167376099234"> + <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> - <target>Traitement du document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Traitement du document...</target> </trans-unit> - <trans-unit datatype="html" id="1085975194762600381"> + <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> - <target>Génération de vignette...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> + <target state="translated">Génération de vignette...</target> </trans-unit> - <trans-unit datatype="html" id="3280851677698431426"> + <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> - <target>Extraction de la date du document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> + <target state="translated">Extraction de la date du document...</target> </trans-unit> - <trans-unit datatype="html" id="7162102384876037296"> + <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> - <target>Enregistrement du document...</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> + <target state="translated">Enregistrement du document...</target> </trans-unit> - <trans-unit datatype="html" id="4550450765009165976"> + <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> - <target>Terminé.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> + <target state="translated">Terminé.</target> </trans-unit> - <trans-unit datatype="html" id="1519954996184640001"> + <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> - <target>Erreur</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> + <target state="translated">Erreur</target> </trans-unit> - <trans-unit datatype="html" id="5037437391296624618"> + <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> - <target>Information</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="needs-translation">Information</target> </trans-unit> - <trans-unit datatype="html" id="7517688192215738656"> + <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> - <target>NSA</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">NSA</target> </trans-unit> - <trans-unit datatype="html" id="2691296884221415710"> + <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> - <target>Correspondant</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> + <target state="translated">Correspondant</target> </trans-unit> - <trans-unit datatype="html" id="5066119607229701477"> + <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> - <target>Type de document</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> + <target state="translated">Type de document</target> </trans-unit> - <trans-unit datatype="html" id="4207916966377787111"> + <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> - <target>Date de création</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> + <target state="translated">Date de création</target> </trans-unit> - <trans-unit datatype="html" id="231679111972850796"> + <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> - <target>Date d'ajout</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> + <target state="translated">Date d'ajout</target> </trans-unit> - <trans-unit datatype="html" id="3553216189604488439"> + <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> - <target>Date de modification</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> + <target state="translated">Date de modification</target> </trans-unit> - <trans-unit datatype="html" id="4561076822163447092"> + <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> - <target>Créer un nouvel élément</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> + <target state="translated">Créer un nouvel élément</target> </trans-unit> - <trans-unit datatype="html" id="5324147361912094446"> + <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> - <target>Éditer l'élément</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> + <target state="translated">Éditer l'élément</target> </trans-unit> - <trans-unit datatype="html" id="1699589597032579396"> - <source>Could not save element: <x equiv-text="error" id="PH"/></source> - <target>Impossible d'enregistrer l'élément : <x equiv-text="error" id="PH"/></target> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> + <target state="translated">Impossible d'enregistrer l'élément : <x equiv-text="error" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="810888510148304696"> + <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> - <target>Automatique</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> + <target state="translated">Automatique</target> </trans-unit> - <trans-unit datatype="html" id="5044611416737085530"> + <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> - <target>Voulez-vous vraiment supprimer cet élément ?</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> + <target state="translated">Voulez-vous vraiment supprimer cet élément ?</target> </trans-unit> - <trans-unit datatype="html" id="8371896857609524947"> + <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> - <target>Les documents associés ne seront pas supprimés.</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> + <target state="translated">Les documents associés ne seront pas supprimés.</target> </trans-unit> - <trans-unit datatype="html" id="7022070615528435141"> + <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> - <target>Supprimer</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> + <target state="translated">Supprimer</target> </trans-unit> - <trans-unit datatype="html" id="5467489005440577210"> - <source>Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></source> - <target>Une erreur s'est produite lors de la suppression de l'élément : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> + <target state="translated">Une erreur s'est produite lors de la suppression de l'élément : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> </trans-unit> - <trans-unit datatype="html" id="5851669019930456395"> + <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> - <target>Un des mots</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Un des mots</target> </trans-unit> - <trans-unit datatype="html" id="7517655726614958140"> + <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> - <target>Un des mots : contient l'un de ces mots (séparés par des espaces)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> + <target state="translated">Un des mots : contient l'un de ces mots (séparés par des espaces)</target> </trans-unit> - <trans-unit datatype="html" id="700315718208181326"> + <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> - <target>Tous les mots</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Tous les mots</target> </trans-unit> - <trans-unit datatype="html" id="111914402588955480"> + <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> - <target>Tous les mots : contient tous ces mots (séparés par des espaces)</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> + <target state="translated">Tous les mots : contient tous ces mots (séparés par des espaces)</target> </trans-unit> - <trans-unit datatype="html" id="9180173992399180575"> + <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> - <target>Concordance exacte</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Concordance exacte</target> </trans-unit> - <trans-unit datatype="html" id="7109184332944610787"> + <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> - <target>Concordance exacte : contient cette chaîne de caractères</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> + <target state="translated">Concordance exacte : contient cette chaîne de caractères</target> </trans-unit> - <trans-unit datatype="html" id="1338733395833138319"> + <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> - <target>Expression régulière</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Expression régulière</target> </trans-unit> - <trans-unit datatype="html" id="7548151332424148033"> + <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> - <target>Expression régulière : correspond à cette expression régulière</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> + <target state="translated">Expression régulière : correspond à cette expression régulière</target> </trans-unit> - <trans-unit datatype="html" id="1856513373880048959"> + <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> - <target>Mot approximatif</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Mot approximatif</target> </trans-unit> - <trans-unit datatype="html" id="8419167206585286450"> + <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> - <target>Mot approximatif : contient un mot similaire à ce mot</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> + <target state="translated">Mot approximatif : contient un mot similaire à ce mot</target> </trans-unit> - <trans-unit datatype="html" id="2167862279705099846"> + <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> - <target>Automatique : apprentissage automatique du rapprochement</target> <context-group purpose="location"> <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> + <target state="translated">Automatique : apprentissage automatique du rapprochement</target> </trans-unit> </body> </file> -</xliff> \ No newline at end of file +</xliff> From c3110f0a9ab35f216f2abfadfb016195eb2e57be Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:27 +0100 Subject: [PATCH 519/898] New translations django.po (French) [ci skip] --- src/locale/fr_FR/LC_MESSAGES/django.po | 124 ++++++++----------------- 1 file changed, 38 insertions(+), 86 deletions(-) diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index 755dbba9d..f97e275d2 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -1,30 +1,25 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -# Translators: -# Jonas Winkler, 2021 -# Philmo67, 2021 -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-02-16 18:37+0000\n" -"Last-Translator: Philmo67, 2021\n" -"Language-Team: French (https://www.transifex.com/paperless/teams/115905/fr/)\n" +"PO-Revision-Date: 2021-03-06 21:40\n" +"Last-Translator: \n" +"Language-Team: French\n" +"Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: fr\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" #: documents/apps.py:10 msgid "Documents" -msgstr "Documents" +msgstr "" #: documents/models.py:32 msgid "Any word" @@ -84,12 +79,8 @@ msgid "is inbox tag" msgstr "est une étiquette de boîte de réception" #: documents/models.py:89 -msgid "" -"Marks this tag as an inbox tag: All newly consumed documents will be tagged " -"with inbox tags." -msgstr "" -"Marque cette étiquette comme étiquette de boîte de réception : ces " -"étiquettes sont affectées à tous les documents nouvellement traités." +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Marque cette étiquette comme étiquette de boîte de réception : ces étiquettes sont affectées à tous les documents nouvellement traités." #: documents/models.py:94 msgid "tag" @@ -124,12 +115,8 @@ msgid "content" msgstr "contenu" #: documents/models.py:139 -msgid "" -"The raw, text-only data of the document. This field is primarily used for " -"searching." -msgstr "" -"Les données brutes du document, en format texte uniquement. Ce champ est " -"principalement utilisé pour la recherche." +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Les données brutes du document, en format texte uniquement. Ce champ est principalement utilisé pour la recherche." #: documents/models.py:144 msgid "mime type" @@ -189,16 +176,15 @@ msgstr "numéro de série de l'archive" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "" -"Le classement de ce document dans votre archive de documents physiques." +msgstr "Le classement de ce document dans votre archive de documents physiques." #: documents/models.py:223 msgid "document" -msgstr "document" +msgstr "" #: documents/models.py:224 msgid "documents" -msgstr "documents" +msgstr "" #: documents/models.py:311 msgid "debug" @@ -206,7 +192,7 @@ msgstr "débogage" #: documents/models.py:312 msgid "information" -msgstr "information" +msgstr "" #: documents/models.py:313 msgid "warning" @@ -226,7 +212,7 @@ msgstr "groupe" #: documents/models.py:322 msgid "message" -msgstr "message" +msgstr "" #: documents/models.py:325 msgid "level" @@ -396,9 +382,7 @@ msgstr "Veuillez vous connecter." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "" -"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Veuillez" -" réessayer." +msgstr "Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Veuillez réessayer." #: documents/templates/registration/login.html:48 msgid "Username" @@ -453,40 +437,24 @@ msgid "Filter" msgstr "Filtrage" #: paperless_mail/admin.py:27 -msgid "" -"Paperless will only process mails that match ALL of the filters given below." -msgstr "" -"Paperless-ng ne traitera que les courriers qui correspondent à TOUS les " -"filtres ci-dessous." +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless-ng ne traitera que les courriers qui correspondent à TOUS les filtres ci-dessous." #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "Actions" +msgstr "" #: paperless_mail/admin.py:39 -msgid "" -"The action applied to the mail. This action is only performed when documents" -" were consumed from the mail. Mails without attachments will remain entirely" -" untouched." -msgstr "" -"Action appliquée au courriel. Cette action n'est exécutée que lorsque les " -"documents ont été traités depuis des courriels. Les courriels sans pièces " -"jointes demeurent totalement inchangés." +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Action appliquée au courriel. Cette action n'est exécutée que lorsque les documents ont été traités depuis des courriels. Les courriels sans pièces jointes demeurent totalement inchangés." #: paperless_mail/admin.py:46 msgid "Metadata" msgstr "Métadonnées" #: paperless_mail/admin.py:48 -msgid "" -"Assign metadata to documents consumed from this rule automatically. If you " -"do not assign tags, types or correspondents here, paperless will still " -"process all matching rules that you have defined." -msgstr "" -"Affecter automatiquement des métadonnées aux documents traités à partir de " -"cette règle. Si vous n'affectez pas d'étiquette, de type ou de correspondant" -" ici, Paperless-ng appliquera toutes les autres règles de rapprochement que " -"vous avez définies." +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Affecter automatiquement des métadonnées aux documents traités à partir de cette règle. Si vous n'affectez pas d'étiquette, de type ou de correspondant ici, Paperless-ng appliquera toutes les autres règles de rapprochement que vous avez définies." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -521,12 +489,8 @@ msgid "IMAP port" msgstr "Port IMAP" #: paperless_mail/models.py:36 -msgid "" -"This is usually 143 for unencrypted and STARTTLS connections, and 993 for " -"SSL connections." -msgstr "" -"Généralement 143 pour les connexions non chiffrées et STARTTLS, et 993 pour " -"les connexions SSL." +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Généralement 143 pour les connexions non chiffrées et STARTTLS, et 993 pour les connexions SSL." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -625,13 +589,8 @@ msgid "filter attachment filename" msgstr "filtrer le nom de fichier de la pièce jointe" #: paperless_mail/models.py:140 -msgid "" -"Only consume documents which entirely match this filename if specified. " -"Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" -"Ne traiter que les documents correspondant intégralement à ce nom de fichier" -" s'il est spécifié. Les jokers tels que *.pdf ou *facture* sont autorisés. " -"La casse n'est pas prise en compte." +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Ne traiter que les documents correspondant intégralement à ce nom de fichier s'il est spécifié. Les jokers tels que *.pdf ou *facture* sont autorisés. La casse n'est pas prise en compte." #: paperless_mail/models.py:146 msgid "maximum age" @@ -646,28 +605,20 @@ msgid "attachment type" msgstr "type de pièce jointe" #: paperless_mail/models.py:154 -msgid "" -"Inline attachments include embedded images, so it's best to combine this " -"option with a filename filter." -msgstr "" -"Les pièces jointes en ligne comprennent les images intégrées, il est donc " -"préférable de combiner cette option avec un filtre de nom de fichier." +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Les pièces jointes en ligne comprennent les images intégrées, il est donc préférable de combiner cette option avec un filtre de nom de fichier." #: paperless_mail/models.py:159 msgid "action" -msgstr "action" +msgstr "" #: paperless_mail/models.py:165 msgid "action parameter" msgstr "paramètre d'action" #: paperless_mail/models.py:167 -msgid "" -"Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." -msgstr "" -"Paramètre supplémentaire pour l'action sélectionnée ci-dessus, par exemple " -"le dossier cible de l'action de déplacement vers un dossier." +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Paramètre supplémentaire pour l'action sélectionnée ci-dessus, par exemple le dossier cible de l'action de déplacement vers un dossier." #: paperless_mail/models.py:173 msgid "assign title from" @@ -688,3 +639,4 @@ msgstr "affecter le correspondant depuis" #: paperless_mail/models.py:205 msgid "assign this correspondent" msgstr "affecter ce correspondant" + From ba0e68188a96cacff7a10a77e7674e7d720345b7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:40:29 +0100 Subject: [PATCH 520/898] New translations messages.xlf (Xhosa) [ci skip] --- src-ui/src/locale/messages.xh_ZA.xlf | 2282 ++++++++++++++++++++++++++ 1 file changed, 2282 insertions(+) create mode 100644 src-ui/src/locale/messages.xh_ZA.xlf diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf new file mode 100644 index 000000000..f17fd8941 --- /dev/null +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -0,0 +1,2282 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="xh"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target>crwdns2838:0crwdne2838:0</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target>crwdns2840:0crwdne2840:0</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target>crwdns2842:0crwdne2842:0</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target>crwdns2844:0crwdne2844:0</target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target>crwdns2846:0crwdne2846:0</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target>crwdns2848:0crwdne2848:0</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target>crwdns2850:0crwdne2850:0</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <target>crwdns2852:0crwdne2852:0</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target>crwdns2854:0crwdne2854:0</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target>crwdns2856:0crwdne2856:0</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target>crwdns2858:0crwdne2858:0</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target>crwdns2860:0crwdne2860:0</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target>crwdns2862:0crwdne2862:0</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target>crwdns2864:0crwdne2864:0</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target>crwdns2866:0crwdne2866:0</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target>crwdns2868:0crwdne2868:0</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target>crwdns2870:0{{list.activeSavedViewTitle}}crwdne2870:0</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target>crwdns2872:0VAR_PLURAL={VAR_PLURAL}crwdne2872:0</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target>crwdns2874:0VAR_PLURAL={VAR_PLURAL}crwdne2874:0</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target>crwdns2876:0crwdne2876:0</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">105</context> + </context-group> + <target>crwdns2878:0crwdne2878:0</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target>crwdns2880:0crwdne2880:0</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target>crwdns2882:0crwdne2882:0</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target>crwdns2884:0crwdne2884:0</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target>crwdns2886:0crwdne2886:0</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target>crwdns2888:0crwdne2888:0</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target>crwdns2890:0crwdne2890:0</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target>crwdns2892:0crwdne2892:0</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target>crwdns2894:0crwdne2894:0</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target>crwdns2896:0crwdne2896:0</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">214</context> + </context-group> + <target>crwdns2898:0crwdne2898:0</target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target>crwdns2900:0crwdne2900:0</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target>crwdns2902:0crwdne2902:0</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target>crwdns2904:0crwdne2904:0</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target>crwdns2906:0crwdne2906:0</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target>crwdns2908:0crwdne2908:0</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target>crwdns2910:0crwdne2910:0</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target>crwdns2912:0crwdne2912:0</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target>crwdns2914:0crwdne2914:0</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target>crwdns2916:0crwdne2916:0</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target>crwdns2918:0crwdne2918:0</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target>crwdns2920:0{{previewNumPages}}crwdne2920:0</target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target>crwdns2922:0crwdne2922:0</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target>crwdns2924:0crwdne2924:0</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target>crwdns2926:0crwdne2926:0</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target>crwdns2928:0crwdne2928:0</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target>crwdns2930:0crwdne2930:0</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target>crwdns2932:0crwdne2932:0</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target>crwdns2934:0crwdne2934:0</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target>crwdns2936:0crwdne2936:0</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target>crwdns2938:0crwdne2938:0</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target>crwdns2940:0crwdne2940:0</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target>crwdns2942:0crwdne2942:0</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target>crwdns2944:0crwdne2944:0</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target>crwdns2946:0crwdne2946:0</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target>crwdns2948:0crwdne2948:0</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target>crwdns2950:0crwdne2950:0</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target>crwdns2952:0crwdne2952:0</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns2954:0crwdne2954:0</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns2956:0crwdne2956:0</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns2958:0crwdne2958:0</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target>crwdns2960:0crwdne2960:0</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target>crwdns2962:0crwdne2962:0</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target>crwdns2964:0crwdne2964:0</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target>crwdns2966:0crwdne2966:0</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target>crwdns2968:0crwdne2968:0</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target>crwdns2970:0crwdne2970:0</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target>crwdns2972:0crwdne2972:0</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target>crwdns2974:0crwdne2974:0</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target>crwdns2976:0crwdne2976:0</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns2978:0crwdne2978:0</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns2980:0crwdne2980:0</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns2982:0crwdne2982:0</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target>crwdns2984:0crwdne2984:0</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target>crwdns2986:0crwdne2986:0</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target>crwdns2988:0crwdne2988:0</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target>crwdns2990:0crwdne2990:0</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target>crwdns2992:0crwdne2992:0</target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns2994:0crwdne2994:0</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target>crwdns2996:0crwdne2996:0</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target>crwdns2998:0crwdne2998:0</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target>crwdns3000:0crwdne3000:0</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3002:0crwdne3002:0</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target>crwdns3004:0crwdne3004:0</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target>crwdns3006:0crwdne3006:0</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target>crwdns3008:0crwdne3008:0</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target>crwdns3010:0crwdne3010:0</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target>crwdns3012:0{today | customDate:'shortDate':null:computedDateLocale}crwdne3012:0</target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target>crwdns3014:0{today | customDate:'mediumDate':null:computedDateLocale}crwdne3014:0</target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target>crwdns3016:0{today | customDate:'longDate':null:computedDateLocale}crwdne3016:0</target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target>crwdns3018:0crwdne3018:0</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target>crwdns3020:0crwdne3020:0</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target>crwdns3022:0crwdne3022:0</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target>crwdns3024:0crwdne3024:0</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target>crwdns3026:0crwdne3026:0</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target>crwdns3028:0crwdne3028:0</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target>crwdns3030:0crwdne3030:0</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target>crwdns3032:0crwdne3032:0</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target>crwdns3034:0crwdne3034:0</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target>crwdns3036:0crwdne3036:0</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target>crwdns3038:0crwdne3038:0</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target>crwdns3040:0crwdne3040:0</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target>crwdns3042:0crwdne3042:0</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target>crwdns3044:0crwdne3044:0</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target>crwdns3046:0crwdne3046:0</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target>crwdns3048:0crwdne3048:0</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target>crwdns3050:0crwdne3050:0</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target>crwdns3052:0crwdne3052:0</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target>crwdns3054:0crwdne3054:0</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target>crwdns3056:0crwdne3056:0</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target>crwdns3058:0crwdne3058:0</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target>crwdns3060:0crwdne3060:0</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target>crwdns3062:0crwdne3062:0</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns3064:0crwdne3064:0</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns3066:0crwdne3066:0</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target>crwdns3068:0crwdne3068:0</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target>crwdns3070:0crwdne3070:0</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target>crwdns3072:0crwdne3072:0</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target>crwdns3074:0crwdne3074:0</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target>crwdns3076:0crwdne3076:0</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target>crwdns3078:0crwdne3078:0</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target>crwdns3080:0crwdne3080:0</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target>crwdns3082:0crwdne3082:0</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target>crwdns3084:0crwdne3084:0</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target>crwdns3086:0crwdne3086:0</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns3088:0crwdne3088:0</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3090:0crwdne3090:0</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3092:0crwdne3092:0</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target>crwdns3094:0crwdne3094:0</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target>crwdns3096:0crwdne3096:0</target> + </trans-unit> + <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> + <source>Search results</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns3098:0crwdne3098:0</target> + </trans-unit> + <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> + <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target>crwdns3100:0{{errorMessage}}crwdne3100:0</target> + </trans-unit> + <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> + <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target>crwdns3102:0{{more_like}}crwdnd3102:0{{more_like_doc?.original_file_name}}crwdnd3102:0{{more_like_doc?.original_file_name}}crwdne3102:0</target> + </trans-unit> + <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> + <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target>crwdns3104:0{{query}}crwdnd3104:0{{query}}crwdne3104:0</target> + </trans-unit> + <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> + <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3106:0[routerLink]crwdnd3106:0{{correctedQuery}}crwdnd3106:0{{correctedQuery}}crwdne3106:0</target> + </trans-unit> + <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> + <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/search/search.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target>crwdns3108:0VAR_PLURAL={VAR_PLURAL}crwdne3108:0</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target>crwdns3110:0crwdne3110:0</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target>crwdns3112:0crwdne3112:0</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target>crwdns3114:0crwdne3114:0</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target>crwdns3116:0crwdne3116:0</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target>crwdns3118:0crwdne3118:0</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target>crwdns3120:0crwdne3120:0</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target>crwdns3122:0crwdne3122:0</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target>crwdns3124:0crwdne3124:0</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target>crwdns3126:0crwdne3126:0</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target>crwdns3128:0{{displayName}}crwdne3128:0</target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target>crwdns3130:0crwdne3130:0</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target>crwdns3132:0crwdne3132:0</target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">73</context> + </context-group> + <target>crwdns3134:0crwdne3134:0</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target>crwdns3136:0crwdne3136:0</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target>crwdns3138:0crwdne3138:0</target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target>crwdns3140:0crwdne3140:0</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target>crwdns3142:0crwdne3142:0</target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">41</context> + </context-group> + <target>crwdns3144:0crwdne3144:0</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">45</context> + </context-group> + <target>crwdns3146:0crwdne3146:0</target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">49</context> + </context-group> + <target>crwdns3148:0crwdne3148:0</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">53</context> + </context-group> + <target>crwdns3150:0crwdne3150:0</target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target>crwdns3152:0crwdne3152:0</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target>crwdns3154:0crwdne3154:0</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target>crwdns3156:0crwdne3156:0</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target>crwdns3158:0crwdne3158:0</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target>crwdns3160:0crwdne3160:0</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns3162:0crwdne3162:0</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target>crwdns3164:0crwdne3164:0</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target>crwdns3166:0crwdne3166:0</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target>crwdns3168:0crwdne3168:0</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target>crwdns3170:0crwdne3170:0</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3172:0crwdne3172:0</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target>crwdns3174:0crwdne3174:0</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target>crwdns3176:0crwdne3176:0</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">50</context> + </context-group> + <target>crwdns3178:0crwdne3178:0</target> + </trans-unit> + <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target>crwdns3180:0{{document.created | customDate}}crwdne3180:0</target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target>crwdns3182:0crwdne3182:0</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target>crwdns3184:0crwdne3184:0</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">62</context> + </context-group> + <target>crwdns3186:0crwdne3186:0</target> + </trans-unit> + <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> + <source>View in browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">40</context> + </context-group> + <target>crwdns3188:0crwdne3188:0</target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target>crwdns3190:0crwdne3190:0</target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target>crwdns3192:0[0]crwdne3192:0</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target>crwdns3194:0[0]crwdnd3194:0[1]crwdne3194:0</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target>crwdns3196:0crwdne3196:0</target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target>crwdns3198:0crwdne3198:0</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target>crwdns3200:0crwdne3200:0</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target>crwdns3202:0crwdne3202:0</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target>crwdns3204:0crwdne3204:0</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target>crwdns3206:0crwdne3206:0</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target>crwdns3208:0crwdne3208:0</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target>crwdns3210:0crwdne3210:0</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target>crwdns3212:0crwdne3212:0</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target>crwdns3214:0crwdne3214:0</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target>crwdns3216:0crwdne3216:0</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target>crwdns3218:0crwdne3218:0</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target>crwdns3220:0crwdne3220:0</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target>crwdns3222:0crwdne3222:0</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target>crwdns3224:0crwdne3224:0</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target>crwdns3226:0crwdne3226:0</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target>crwdns3228:0crwdne3228:0</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target>crwdns3230:0crwdne3230:0</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target>crwdns3232:0crwdne3232:0</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target>crwdns3234:0crwdne3234:0</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target>crwdns3236:0crwdne3236:0</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target>crwdns3238:0crwdne3238:0</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns3240:0crwdne3240:0</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target>crwdns3242:0crwdne3242:0</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target>crwdns3244:0crwdne3244:0</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns3246:0crwdne3246:0</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target>crwdns3248:0{{statistics?.documents_total}}crwdne3248:0</target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target>crwdns3250:0{{statistics?.documents_inbox}}crwdne3250:0</target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target>crwdns3252:0crwdne3252:0</target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target>crwdns3254:0crwdne3254:0</target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target>crwdns3256:0crwdne3256:0</target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target>crwdns3258:0crwdne3258:0</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target>crwdns3260:0crwdne3260:0</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target>crwdns3262:0crwdne3262:0</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target>crwdns3264:0crwdne3264:0</target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns3266:0crwdne3266:0</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3268:0crwdne3268:0</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3270:0crwdne3270:0</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target>crwdns3272:0crwdne3272:0</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target>crwdns3274:0VAR_PLURAL={VAR_PLURAL}crwdne3274:0</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target>crwdns3276:0crwdne3276:0</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns3278:0crwdne3278:0</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target>crwdns3280:0crwdne3280:0</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target>crwdns3282:0crwdne3282:0</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target>crwdns3284:0crwdne3284:0</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target>crwdns3286:0crwdne3286:0</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target>crwdns3288:0crwdne3288:0</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3290:0crwdne3290:0</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target>crwdns3292:0crwdne3292:0</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target>crwdns3294:0crwdne3294:0</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target>crwdns3296:0crwdne3296:0</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target>crwdns3298:0crwdne3298:0</target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target>crwdns3300:0crwdne3300:0</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target>crwdns3302:0crwdne3302:0</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target>crwdns3304:0crwdne3304:0</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target>crwdns3306:0crwdne3306:0</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target>crwdns3308:0crwdne3308:0</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target>crwdns3310:0crwdne3310:0</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target>crwdns3312:0crwdne3312:0</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target>crwdns3314:0crwdne3314:0</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target>crwdns3316:0crwdne3316:0</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target>crwdns3318:0crwdne3318:0</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target>crwdns3320:0crwdne3320:0</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target>crwdns3322:0crwdne3322:0</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target>crwdns3324:0crwdne3324:0</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target>crwdns3326:0crwdne3326:0</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target>crwdns3328:0crwdne3328:0</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target>crwdns3330:0crwdne3330:0</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target>crwdns3332:0crwdne3332:0</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target>crwdns3334:0crwdne3334:0</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target>crwdns3336:0crwdne3336:0</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target>crwdns3338:0crwdne3338:0</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target>crwdns3340:0crwdne3340:0</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target>crwdns3342:0crwdne3342:0</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target>crwdns3344:0crwdne3344:0</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target>crwdns3346:0crwdne3346:0</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target>crwdns3348:0crwdne3348:0</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target>crwdns3350:0crwdne3350:0</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target>crwdns3352:0crwdne3352:0</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target>crwdns3354:0crwdne3354:0</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target>crwdns3356:0crwdne3356:0</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target>crwdns3358:0crwdne3358:0</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target>crwdns3360:0crwdne3360:0</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target>crwdns3362:0crwdne3362:0</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target>crwdns3364:0crwdne3364:0</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target>crwdns3366:0crwdne3366:0</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target>crwdns3368:0crwdne3368:0</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target>crwdns3370:0crwdne3370:0</target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target>crwdns3372:0crwdne3372:0</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target>crwdns3374:0crwdne3374:0</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target>crwdns3376:0crwdne3376:0</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target>crwdns3378:0crwdne3378:0</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target>crwdns3380:0crwdne3380:0</target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target>crwdns3382:0crwdne3382:0</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target>crwdns3384:0crwdne3384:0</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3386:0crwdne3386:0</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target>crwdns3388:0crwdne3388:0</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target>crwdns3390:0crwdne3390:0</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target>crwdns3392:0crwdne3392:0</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target>crwdns3394:0crwdne3394:0</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target>crwdns3396:0crwdne3396:0</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target>crwdns3398:0crwdne3398:0</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target>crwdns3400:0crwdne3400:0</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target>crwdns3402:0crwdne3402:0</target> + </trans-unit> + </body> + </file> +</xliff> From d747170cbcac69bc3285995bf77e57b49d96754d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:41:35 +0100 Subject: [PATCH 521/898] fix a failing test case --- src/documents/tests/test_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/tests/test_views.py b/src/documents/tests/test_views.py index ccc41666a..7f7a07a61 100644 --- a/src/documents/tests/test_views.py +++ b/src/documents/tests/test_views.py @@ -15,7 +15,7 @@ class TestViews(TestCase): def test_index(self): self.client.force_login(self.user) - for (language_given, language_actual) in [("", "en-US"), ("en-US", "en-US"), ("de", "de"), ("en", "en-US"), ("en-us", "en-US"), ("fr", "fr"), ("jp", "en-US")]: + for (language_given, language_actual) in [("", "en-US"), ("en-US", "en-US"), ("de", "de-DE"), ("en", "en-US"), ("en-us", "en-US"), ("fr", "fr-FR"), ("jp", "en-US")]: if language_given: self.client.cookies.load({settings.LANGUAGE_COOKIE_NAME: language_given}) elif settings.LANGUAGE_COOKIE_NAME in self.client.cookies.keys(): From e50e9ecb807afa9a630176640a4519555fdbc7a9 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:50:35 +0100 Subject: [PATCH 522/898] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e59535af4..7cecbc0f8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![ci](https://github.com/jonaswinkler/paperless-ng/workflows/ci/badge.svg)](https://github.com/jonaswinkler/paperless-ng/actions) ![Ansible Role](https://github.com/jonaswinkler/paperless-ng/workflows/Ansible%20Role/badge.svg) +[![Crowdin](https://badges.crowdin.net/paperless-ng/localized.svg)](https://crowdin.com/project/paperless-ng) [![Documentation Status](https://readthedocs.org/projects/paperless-ng/badge/?version=latest)](https://paperless-ng.readthedocs.io/en/latest/?badge=latest) [![Gitter](https://badges.gitter.im/paperless-ng/community.svg)](https://gitter.im/paperless-ng/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Docker Hub Pulls](https://img.shields.io/docker/pulls/jonaswinkler/paperless-ng.svg)](https://hub.docker.com/r/jonaswinkler/paperless-ng) From bff68a2f1413b03842b81d32e0fe373bafbea22e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 22:52:52 +0100 Subject: [PATCH 523/898] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7cecbc0f8..45c71ab67 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,9 @@ The documentation for Paperless-ng is available on [ReadTheDocs](https://paperle # Translation -Paperless is currently available in English, German, Dutch, French, and Portuguese. +Paperless is currently available in English, German, Dutch, French, Portuguese, Italian, and Romanian. -There's an active translation project at transifex! If you want to help out by translating paperless into your language, please head over to https://github.com/jonaswinkler/paperless-ng/issues/212 for details. +There's an active translation project at crowdin! If you want to help out by translating paperless into your language, please head over to https://github.com/jonaswinkler/paperless-ng/issues/212 for details. # Feature Requests From 900bdf95a560d5ae428822d318d9d3bd3bf2ead6 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 Mar 2021 14:29:24 -0800 Subject: [PATCH 524/898] Update angular.json --- .../document-card-large.component.html | 7 +------ .../document-card-large.component.ts | 10 ---------- .../document-card-small.component.html | 7 +------ .../document-card-small.component.ts | 10 ---------- 4 files changed, 2 insertions(+), 32 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 71dac6a57..cf969ddbe 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -52,12 +52,7 @@ </svg> <span class="d-block d-md-inline" i18n>View</span> </a> <ng-template #previewContent> - <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </ng-container> - <ng-container *ngIf="getContentType() == 'text/plain'"> - <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> - </ng-container> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </ng-template> <a class="btn btn-sm btn-outline-secondary" [href]="getDownloadUrl()"> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index bf42c4235..10457054f 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @@ -48,8 +47,6 @@ export class DocumentCardLargeComponent implements OnInit { mouseOnPreview = false popoverHidden = true - metadata: PaperlessDocumentMetadata - get searchScoreClass() { if (this.searchScore > 0.7) { return "success" @@ -61,9 +58,6 @@ export class DocumentCardLargeComponent implements OnInit { } ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { @@ -95,10 +89,6 @@ export class DocumentCardLargeComponent implements OnInit { return this.documentService.getPreviewUrl(this.document.id) } - getContentType() { - return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type - } - mouseEnterPreview() { this.mouseOnPreview = true if (!this.popover.isOpen()) { diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 1dde0c9d4..aa0aa9225 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -46,12 +46,7 @@ </svg> </a> <ng-template #previewContent> - <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </ng-container> - <ng-container *ngIf="getContentType() == 'text/plain'"> - <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> - </ng-container> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </ng-template> <a [href]="getDownloadUrl()" class="btn btn-sm btn-outline-secondary" title="Download" (click)="$event.stopPropagation()" i18n-title> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 033abab27..e025e4e25 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { map } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @@ -37,12 +36,7 @@ export class DocumentCardSmallComponent implements OnInit { mouseOnPreview = false popoverHidden = true - metadata: PaperlessDocumentMetadata - ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { @@ -74,10 +68,6 @@ export class DocumentCardSmallComponent implements OnInit { ) } - getContentType() { - return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type - } - mouseEnterPreview() { this.mouseOnPreview = true if (!this.popover.isOpen()) { From c98a1d30b346f5982661947d485b83fe529145b3 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 Mar 2021 14:29:24 -0800 Subject: [PATCH 525/898] Remove metadata API calls --- .../document-card-large.component.html | 7 +------ .../document-card-large.component.ts | 10 ---------- .../document-card-small.component.html | 7 +------ .../document-card-small.component.ts | 10 ---------- 4 files changed, 2 insertions(+), 32 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 71dac6a57..cf969ddbe 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -52,12 +52,7 @@ </svg> <span class="d-block d-md-inline" i18n>View</span> </a> <ng-template #previewContent> - <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </ng-container> - <ng-container *ngIf="getContentType() == 'text/plain'"> - <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> - </ng-container> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </ng-template> <a class="btn btn-sm btn-outline-secondary" [href]="getDownloadUrl()"> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index bf42c4235..10457054f 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @@ -48,8 +47,6 @@ export class DocumentCardLargeComponent implements OnInit { mouseOnPreview = false popoverHidden = true - metadata: PaperlessDocumentMetadata - get searchScoreClass() { if (this.searchScore > 0.7) { return "success" @@ -61,9 +58,6 @@ export class DocumentCardLargeComponent implements OnInit { } ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { @@ -95,10 +89,6 @@ export class DocumentCardLargeComponent implements OnInit { return this.documentService.getPreviewUrl(this.document.id) } - getContentType() { - return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type - } - mouseEnterPreview() { this.mouseOnPreview = true if (!this.popover.isOpen()) { diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 1dde0c9d4..aa0aa9225 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -46,12 +46,7 @@ </svg> </a> <ng-template #previewContent> - <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview" width="100%"></object> - </ng-container> - <ng-container *ngIf="getContentType() == 'text/plain'"> - <object [data]="previewUrl | safe" type="text/plain" class="preview" width="100%"></object> - </ng-container> + <object [data]="previewUrl | safe" class="preview" width="100%"></object> </ng-template> <a [href]="getDownloadUrl()" class="btn btn-sm btn-outline-secondary" title="Download" (click)="$event.stopPropagation()" i18n-title> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-download" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index 033abab27..e025e4e25 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { map } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @@ -37,12 +36,7 @@ export class DocumentCardSmallComponent implements OnInit { mouseOnPreview = false popoverHidden = true - metadata: PaperlessDocumentMetadata - ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { @@ -74,10 +68,6 @@ export class DocumentCardSmallComponent implements OnInit { ) } - getContentType() { - return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type - } - mouseEnterPreview() { this.mouseOnPreview = true if (!this.popover.isOpen()) { From bf443802dc1884df155d38732ebb0d3dc03c53f3 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:40:29 +0100 Subject: [PATCH 526/898] fix language codes --- src-ui/src/app/services/settings.service.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 8810cd653..a2214bd04 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -89,12 +89,12 @@ export class SettingsService { return [ {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"}, {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"}, - {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, - {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, - {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, + {code: "de-de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, + {code: "nl-nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, + {code: "fr-fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}, - {code: "it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"}, - {code: "ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"} + {code: "it-it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"}, + {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"} ] } From 304b8ea237fab4c28cd33d7d774524959668fbbc Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 Mar 2021 14:50:38 -0800 Subject: [PATCH 527/898] Re-merging this branch with Reverted dev --- src-ui/package.json | 1 - src-ui/src/app/app.module.ts | 2 -- .../document-detail.component.html | 17 +------------- .../document-detail.component.ts | 12 ---------- .../document-card-large.component.html | 7 +++--- .../document-card-large.component.ts | 7 +++--- .../document-card-small.component.ts | 6 ----- .../document-list.component.html | 2 +- .../popover-preview/popover-preview.scss | 22 +++++++++++++++++++ .../manage/settings/settings.component.html | 15 ++----------- .../manage/settings/settings.component.ts | 2 -- src-ui/src/app/services/settings.service.ts | 2 -- src-ui/src/theme_dark.scss | 2 +- 13 files changed, 35 insertions(+), 62 deletions(-) create mode 100644 src-ui/src/app/components/document-list/popover-preview/popover-preview.scss diff --git a/src-ui/package.json b/src-ui/package.json index 595228501..b005d843a 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -25,7 +25,6 @@ "bootstrap": "^4.5.0", "file-saver": "^2.0.5", "ng-bootstrap": "^1.6.3", - "ng2-pdf-viewer": "^6.3.2", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^10.0.0", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index be7ea2d0b..dc8b185ea 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -47,7 +47,6 @@ import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-v import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'; import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'; import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'; -import { PdfViewerModule } from 'ng2-pdf-viewer'; import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component'; import { YesNoPipe } from './pipes/yes-no.pipe'; import { FileSizePipe } from './pipes/file-size.pipe'; @@ -144,7 +143,6 @@ registerLocaleData(localeRo) ReactiveFormsModule, NgxFileDropModule, InfiniteScrollModule, - PdfViewerModule, NgSelectModule, ColorSliderModule ], diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index f9b87aee3..79215c51c 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -1,14 +1,4 @@ <app-page-header [(title)]="title"> - <div class="input-group input-group-sm mr-5 d-none d-md-flex" *ngIf="getContentType() == 'application/pdf' && !useNativePdfViewer"> - <div class="input-group-prepend"> - <div class="input-group-text" i18n>Page</div> - </div> - <input class="form-control flex-grow-0 w-auto" type="number" min="1" [max]="previewNumPages" [(ngModel)]="previewCurrentPage" /> - <div class="input-group-append"> - <div class="input-group-text" i18n>of {{previewNumPages}}</div> - </div> - </div> - <button type="button" class="btn btn-sm btn-outline-danger mr-2 ml-auto" (click)="delete()"> <svg class="buttonicon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#trash" /> @@ -135,12 +125,7 @@ <div class="col-md-6 col-xl-8 mb-3"> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <div class="preview-sticky pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> - <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> - </div> - <ng-template #nativePdfViewer> - <object [data]="previewUrl | safe" type="application/pdf" class="preview-sticky" width="100%"></object> - </ng-template> + <object [data]="previewUrl | safe" class="preview-sticky" width="100%"></object> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview-sticky" width="100%"></object> diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index af98a6f7f..27360a811 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -15,7 +15,6 @@ import { DocumentService } from 'src/app/services/rest/document.service'; import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'; import { CorrespondentEditDialogComponent } from '../manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component'; import { DocumentTypeEditDialogComponent } from '../manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component'; -import { PDFDocumentProxy } from 'ng2-pdf-viewer'; import { ToastService } from 'src/app/services/toast.service'; import { TextComponent } from '../common/input/text/text.component'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @@ -61,9 +60,6 @@ export class DocumentDetailComponent implements OnInit { tags: new FormControl([]) }) - previewCurrentPage: number = 1 - previewNumPages: number = 1 - constructor( private documentsService: DocumentService, private route: ActivatedRoute, @@ -77,10 +73,6 @@ export class DocumentDetailComponent implements OnInit { private toastService: ToastService, private settings: SettingsService) { } - get useNativePdfViewer(): boolean { - return this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER) - } - getContentType() { return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type } @@ -226,8 +218,4 @@ export class DocumentDetailComponent implements OnInit { return this.documentListViewService.hasNext(this.documentId) } - pdfPreviewLoaded(pdf: PDFDocumentProxy) { - this.previewNumPages = pdf.numPages - } - } diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index e452dbc4e..cf969ddbe 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -1,4 +1,4 @@ -<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable"> +<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable" [class.popover-hidden]="popoverHidden" (mouseleave)="mouseLeaveCard()"> <div class="row no-gutters"> <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left" [class.inverted]="getIsThumbInverted()"> @@ -43,7 +43,9 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> <span class="d-block d-md-inline" i18n>Edit</span> </a> - <a class="btn btn-sm btn-outline-secondary" [href]="getPreviewUrl()"> + <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" title="Click to view in browser" i18n-title + [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" + autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> @@ -58,7 +60,6 @@ <path fill-rule="evenodd" d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/> </svg> <span class="d-block d-md-inline" i18n>Download</span> </a> - </div> <div *ngIf="searchScore" class="d-flex align-items-center ml-md-auto mt-2 mt-md-0"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index db905d8d1..10457054f 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -1,13 +1,14 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; +import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'app-document-card-large', templateUrl: './document-card-large.component.html', - styleUrls: ['./document-card-large.component.scss'] + styleUrls: ['./document-card-large.component.scss', '../popover-preview/popover-preview.scss'] }) export class DocumentCardLargeComponent implements OnInit { @@ -84,7 +85,7 @@ export class DocumentCardLargeComponent implements OnInit { return this.documentService.getDownloadUrl(this.document.id) } - getPreviewUrl() { + get previewUrl() { return this.documentService.getPreviewUrl(this.document.id) } diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index f34d232e7..e025e4e25 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -1,7 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { map } from 'rxjs/operators'; import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentMetadata } from 'src/app/data/paperless-document-metadata'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; @@ -37,12 +36,7 @@ export class DocumentCardSmallComponent implements OnInit { mouseOnPreview = false popoverHidden = true - metadata: PaperlessDocumentMetadata - ngOnInit(): void { - this.documentService.getMetadata(this.document?.id).subscribe(result => { - this.metadata = result - }) } getIsThumbInverted() { diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 75a9804a2..e289c607e 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -170,5 +170,5 @@ </table> <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> - <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> + <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> </div> diff --git a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss new file mode 100644 index 000000000..d232930c2 --- /dev/null +++ b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss @@ -0,0 +1,22 @@ +::ng-deep .popover { + max-width: 40rem; + + .preview { + min-width: 30rem; + min-height: 18rem; + max-height: 35rem; + overflow-y: scroll; + } + + .spinner-border { + position: absolute; + top: 4rem; + left: calc(50% - 0.5rem); + z-index: 0; + } +} + + ::ng-deep .popover-hidden .popover { + opacity: 0; + pointer-events: none; +} diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 231c4e82f..73b3b2b0d 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -78,17 +78,6 @@ </div> </div> - <div class="form-row form-group"> - <div class="col-md-3 col-form-label"> - <span i18n>Document editor</span> - </div> - <div class="col"> - - <app-input-check i18n-title title="Use PDF viewer provided by the browser" i18n-hint hint="This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName="useNativePdfViewer"></app-input-check> - - </div> - </div> - <div class="form-row form-group"> <div class="col-md-3 col-form-label"> <span i18n>Dark mode</span> @@ -111,11 +100,11 @@ </ng-template> </li> - + <li [ngbNavItem]="2"> <a ngbNavLink i18n>Notifications</a> <ng-template ngbNavContent> - + <h4 i18n>Document processing</h4> <div class="form-row form-group"> diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index ab71b1028..0933c2714 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -22,7 +22,6 @@ export class SettingsComponent implements OnInit { 'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), 'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), 'darkModeInvertThumbs': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)), - 'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), 'savedViews': this.savedViewGroup, 'displayLanguage': new FormControl(this.settings.getLanguage()), 'dateLocale': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_LOCALE)), @@ -76,7 +75,6 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) this.settings.set(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, (this.settingsForm.value.darkModeInvertThumbs == true).toString()) - this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, this.settingsForm.value.notificationsConsumerNewDocument) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 8810cd653..01035c2bf 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -27,7 +27,6 @@ export const SETTINGS_KEYS = { DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system', DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', DARK_MODE_THUMB_INVERTED: 'general-settings:dark-mode:thumb-inverted', - USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', DATE_LOCALE: 'general-settings:date-display:date-locale', DATE_FORMAT: 'general-settings:date-display:date-format', NOTIFICATIONS_CONSUMER_NEW_DOCUMENT: 'general-settings:notifications:consumer-new-documents', @@ -43,7 +42,6 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: true}, - {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, type: "boolean", default: true}, diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 9419974f2..f3336cc1a 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -392,7 +392,7 @@ $border-color-dark-mode: #47494f; border-color: $border-color-dark-mode; } } - + $placements: 'top', 'right', 'bottom', 'left'; @each $placement in $placements { From 576f4e39c0466720b218891dfda407ce32ac58a3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:03 +0100 Subject: [PATCH 528/898] New translations django.po (Romanian) [ci skip] --- src/locale/ro_RO/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 7d83eae22..daf063920 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:39\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -180,7 +180,7 @@ msgstr "Pozitia acestui document in arhiva fizica." #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "document" #: documents/models.py:224 msgid "documents" From 6ffd7beff32895cdb881e38f4252a66ee72b3ab7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:05 +0100 Subject: [PATCH 529/898] New translations django.po (Portuguese) [ci skip] --- src/locale/pt_PT/LC_MESSAGES/django.po | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index df07b0ad6..478a4bbd3 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -19,31 +19,31 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Documentos" #: documents/models.py:32 msgid "Any word" -msgstr "" +msgstr "Qualquer palavra" #: documents/models.py:33 msgid "All words" -msgstr "" +msgstr "Todas as palavras" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "Detecção exata" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "Expressão regular" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "Palavra difusa (fuzzy)" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "Automático" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 @@ -398,23 +398,23 @@ msgstr "" #: paperless/settings.py:297 msgid "English (US)" -msgstr "" +msgstr "Inglês (EUA)" #: paperless/settings.py:298 msgid "English (GB)" -msgstr "" +msgstr "English (GB)" #: paperless/settings.py:299 msgid "German" -msgstr "" +msgstr "Deutsch" #: paperless/settings.py:300 msgid "Dutch" -msgstr "" +msgstr "Nederlandse" #: paperless/settings.py:301 msgid "French" -msgstr "" +msgstr "Français" #: paperless/settings.py:302 msgid "Portuguese (Brazil)" @@ -442,7 +442,7 @@ msgstr "" #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "" +msgstr "Ações" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." @@ -450,7 +450,7 @@ msgstr "" #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Metadados" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -534,7 +534,7 @@ msgstr "" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "" +msgstr "Excluir" #: paperless_mail/models.py:88 msgid "Use subject as title" From f674f58c45e5d717fa30f66ac142c004167cb04b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:07 +0100 Subject: [PATCH 530/898] New translations messages.xlf (English, United Kingdom) [ci skip] --- src-ui/src/locale/messages.en_GB.xlf | 564 +++++++++++++-------------- 1 file changed, 282 insertions(+), 282 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index bb1800aba..13daeb771 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -8,7 +8,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document added</target> + <target state="translated">Document added</target> </trans-unit> <trans-unit id="9204248378636247318" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Document <x equiv-text="status.filename" id="PH"/> was added to paperless.</target> + <target state="translated">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -24,7 +24,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Open document</target> </trans-unit> <trans-unit id="8582620835547864448" datatype="html"> <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Could not add <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -40,7 +40,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">New document detected</target> + <target state="translated">New document detected</target> </trans-unit> <trans-unit id="587031278561344416" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Document <x equiv-text="status.filename" id="PH"/> is being processed by paperless.</target> + <target state="translated">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documents</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" saved successfully.</target> + <target state="translated">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">View "<x equiv-text="savedView.name" id="PH"/>" created successfully.</target> + <target state="translated">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Select</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select none</target> + <target state="translated">Select none</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -96,7 +96,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Select page</target> + <target state="translated">Select page</target> </trans-unit> <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> @@ -104,7 +104,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Select all</target> + <target state="translated">Select all</target> </trans-unit> <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> @@ -112,7 +112,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Sort</target> + <target state="translated">Sort</target> </trans-unit> <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="needs-translation">Views</target> + <target state="translated">Views</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Save as...</target> + <target state="translated">Save as...</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Save "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <target state="translated">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -144,7 +144,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> </trans-unit> <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> @@ -152,7 +152,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> </trans-unit> <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> @@ -160,7 +160,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">(filtered)</target> + <target state="translated">(filtered)</target> </trans-unit> <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondent</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -184,7 +184,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Title</target> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> @@ -192,7 +192,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Document type</target> </trans-unit> <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> @@ -200,7 +200,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Created</target> </trans-unit> <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> @@ -208,7 +208,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Added</target> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">Confirm delete</target> + <target state="translated">Confirm delete</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Do you really want to delete document "<x equiv-text="this.document.title" id="PH"/>"?</target> + <target state="translated">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + <target state="translated">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -240,7 +240,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> - <target state="needs-translation">Delete document</target> + <target state="translated">Delete document</target> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Error deleting document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Delete</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Download</target> + <target state="translated">Download</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -272,7 +272,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">More like this</target> + <target state="translated">More like this</target> </trans-unit> <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> @@ -280,7 +280,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Close</target> + <target state="translated">Close</target> </trans-unit> <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Details</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -296,7 +296,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Content</target> + <target state="translated">Content</target> </trans-unit> <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadata</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -312,7 +312,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">Discard</target> + <target state="translated">Discard</target> </trans-unit> <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> @@ -320,7 +320,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">Save</target> + <target state="translated">Save</target> </trans-unit> <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> @@ -328,7 +328,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Page</target> + <target state="translated">Page</target> </trans-unit> <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">of <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -344,7 +344,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Download original</target> + <target state="translated">Download original</target> </trans-unit> <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="needs-translation">Archive serial number</target> + <target state="translated">Archive serial number</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -360,7 +360,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> - <target state="needs-translation">Date created</target> + <target state="translated">Date created</target> </trans-unit> <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> @@ -368,7 +368,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Date modified</target> + <target state="translated">Date modified</target> </trans-unit> <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> @@ -376,7 +376,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Date added</target> + <target state="translated">Date added</target> </trans-unit> <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Media filename</target> + <target state="translated">Media filename</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Original MD5 checksum</target> + <target state="translated">Original MD5 checksum</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Original file size</target> + <target state="translated">Original file size</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -408,7 +408,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Original mime type</target> + <target state="translated">Original mime type</target> </trans-unit> <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Archive MD5 checksum</target> + <target state="translated">Archive MD5 checksum</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">Archive file size</target> + <target state="translated">Archive file size</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -432,7 +432,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> - <target state="needs-translation">Original document metadata</target> + <target state="translated">Original document metadata</target> </trans-unit> <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> @@ -440,7 +440,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> - <target state="needs-translation">Archived document metadata</target> + <target state="translated">Archived document metadata</target> </trans-unit> <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> @@ -448,7 +448,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> - <target state="needs-translation">Save & next</target> + <target state="translated">Save & next</target> </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Hello <x equiv-text="this.displayName" id="PH"/>, welcome to Paperless-ng!</target> + <target state="translated">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Welcome to Paperless-ng!</target> + <target state="translated">Welcome to Paperless-ng!</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Dashboard</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Do you really want to delete the tag "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,7 +488,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Tags</target> + <target state="translated">Tags</target> </trans-unit> <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> @@ -496,7 +496,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="needs-translation">Create</target> + <target state="translated">Create</target> </trans-unit> <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Filter by:</target> + <target state="translated">Filter by:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -512,7 +512,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Name</target> + <target state="translated">Name</target> </trans-unit> <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> @@ -528,7 +528,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Matching</target> + <target state="translated">Matching</target> </trans-unit> <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> @@ -536,7 +536,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Document count</target> + <target state="translated">Document count</target> </trans-unit> <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Actions</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documents</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -560,7 +560,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Edit</target> + <target state="translated">Edit</target> </trans-unit> <trans-unit id="4990731724078522539" datatype="html"> <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Do you really want to delete the document type "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -576,7 +576,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Document types</target> + <target state="translated">Document types</target> </trans-unit> <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Logs</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Saved view "<x equiv-text="savedView.name" id="PH"/>" deleted.</target> + <target state="translated">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -600,7 +600,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="needs-translation">Settings saved successfully.</target> + <target state="translated">Settings saved successfully.</target> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> @@ -608,7 +608,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Use system language</target> + <target state="translated">Use system language</target> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="needs-translation">Use date format of display language</target> + <target state="translated">Use date format of display language</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Error while storing settings on server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -632,7 +632,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Settings</target> + <target state="translated">Settings</target> </trans-unit> <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">General settings</target> + <target state="translated">General settings</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -648,7 +648,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="needs-translation">Notifications</target> + <target state="translated">Notifications</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="needs-translation">Saved views</target> + <target state="translated">Saved views</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -664,7 +664,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Appearance</target> + <target state="translated">Appearance</target> </trans-unit> <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> @@ -672,7 +672,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Display language</target> + <target state="translated">Display language</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -680,7 +680,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">You need to reload the page after applying a new language.</target> + <target state="translated">You need to reload the page after applying a new language.</target> </trans-unit> <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> @@ -688,7 +688,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Date display</target> + <target state="translated">Date display</target> </trans-unit> <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> @@ -696,7 +696,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Date format</target> + <target state="translated">Date format</target> </trans-unit> <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Short: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Long: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -728,7 +728,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Items per page</target> + <target state="translated">Items per page</target> </trans-unit> <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> @@ -736,7 +736,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> - <target state="needs-translation">Document editor</target> + <target state="translated">Document editor</target> </trans-unit> <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Use PDF viewer provided by the browser</target> + <target state="translated">Use PDF viewer provided by the browser</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + <target state="translated">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -760,7 +760,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Dark mode</target> + <target state="translated">Dark mode</target> </trans-unit> <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> @@ -768,7 +768,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Use system settings</target> + <target state="translated">Use system settings</target> </trans-unit> <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> @@ -776,7 +776,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Enable dark mode</target> + <target state="translated">Enable dark mode</target> </trans-unit> <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> @@ -784,7 +784,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Invert thumbnails in dark mode</target> + <target state="translated">Invert thumbnails in dark mode</target> </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> @@ -792,7 +792,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Bulk editing</target> + <target state="translated">Bulk editing</target> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Show confirmation dialogs</target> + <target state="translated">Show confirmation dialogs</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + <target state="translated">Deleting documents will always ask for confirmation.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -816,7 +816,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> - <target state="needs-translation">Apply on close</target> + <target state="translated">Apply on close</target> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> @@ -824,7 +824,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> - <target state="needs-translation">Document processing</target> + <target state="translated">Document processing</target> </trans-unit> <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> @@ -832,7 +832,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Show notifications when new documents are detected</target> + <target state="translated">Show notifications when new documents are detected</target> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> @@ -840,7 +840,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> - <target state="needs-translation">Show notifications when document processing completes successfully</target> + <target state="translated">Show notifications when document processing completes successfully</target> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> @@ -848,7 +848,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> - <target state="needs-translation">Show notifications when document processing fails</target> + <target state="translated">Show notifications when document processing fails</target> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Suppress notifications on dashboard</target> + <target state="translated">Suppress notifications on dashboard</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + <target state="translated">This will suppress all messages about document processing status on the dashboard.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -872,7 +872,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> - <target state="needs-translation">Appears on</target> + <target state="translated">Appears on</target> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="needs-translation">Show on dashboard</target> + <target state="translated">Show on dashboard</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="needs-translation">Show in sidebar</target> + <target state="translated">Show in sidebar</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">No saved views defined.</target> + <target state="translated">No saved views defined.</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -904,7 +904,7 @@ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">404 Not Found</target> + <target state="translated">404 Not Found</target> </trans-unit> <trans-unit id="7427874343955308724" datatype="html"> <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Do you really want to delete the correspondent "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Correspondents</target> + <target state="translated">Correspondents</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Last correspondence</target> + <target state="translated">Last correspondence</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -936,7 +936,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Confirmation</target> + <target state="translated">Confirmation</target> </trans-unit> <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> @@ -944,7 +944,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Confirm</target> + <target state="translated">Confirm</target> </trans-unit> <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> @@ -952,7 +952,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Cancel</target> + <target state="translated">Cancel</target> </trans-unit> <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new correspondent</target> + <target state="translated">Create new correspondent</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit correspondent</target> + <target state="translated">Edit correspondent</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Matching algorithm</target> + <target state="translated">Matching algorithm</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -984,7 +984,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Matching pattern</target> + <target state="translated">Matching pattern</target> </trans-unit> <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> @@ -992,7 +992,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Case insensitive</target> + <target state="translated">Case insensitive</target> </trans-unit> <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Create new tag</target> + <target state="translated">Create new tag</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1008,7 +1008,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Edit tag</target> + <target state="translated">Edit tag</target> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tag</target> + <target state="translated">Inbox tag</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + <target state="translated">Inbox tags are automatically assigned to all consumed documents.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1032,7 +1032,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new document type</target> + <target state="translated">Create new document type</target> </trans-unit> <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> @@ -1040,7 +1040,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit document type</target> + <target state="translated">Edit document type</target> </trans-unit> <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> @@ -1048,7 +1048,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Search results</target> + <target state="translated">Search results</target> </trans-unit> <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Invalid search query: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated"> Showing documents similar to <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <target state="translated"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Search query: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Did you mean "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <target state="translated">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1088,7 +1088,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + <target state="translated">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1105,7 +1105,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Search documents</target> + <target state="translated">Search documents</target> </trans-unit> <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> @@ -1113,7 +1113,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Logout</target> + <target state="translated">Logout</target> </trans-unit> <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> @@ -1121,7 +1121,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> - <target state="needs-translation">Manage</target> + <target state="translated">Manage</target> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="needs-translation">Admin</target> + <target state="translated">Admin</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="needs-translation">Info</target> + <target state="translated">Info</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="needs-translation">Documentation</target> + <target state="translated">Documentation</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1161,7 +1161,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> - <target state="needs-translation">Suggest an idea</target> + <target state="translated">Suggest an idea</target> </trans-unit> <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Logged in as <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1177,7 +1177,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Open documents</target> + <target state="translated">Open documents</target> </trans-unit> <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Close all</target> + <target state="translated">Close all</target> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> @@ -1193,7 +1193,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Title</target> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> @@ -1201,7 +1201,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="needs-translation">Title & content</target> + <target state="translated">Title & content</target> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1217,7 +1217,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Without correspondent</target> + <target state="translated">Without correspondent</target> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> - <target state="needs-translation">Without document type</target> + <target state="translated">Without document type</target> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1249,7 +1249,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Without any tag</target> + <target state="translated">Without any tag</target> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Title: <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter tags</target> + <target state="translated">Filter tags</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> - <target state="needs-translation">Filter correspondents</target> + <target state="translated">Filter correspondents</target> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> @@ -1281,7 +1281,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Filter document types</target> + <target state="translated">Filter document types</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1289,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Reset filters</target> + <target state="translated">Reset filters</target> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> @@ -1298,7 +1298,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="needs-translation">Not assigned</target> + <target state="translated">Not assigned</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1306,7 +1306,7 @@ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Apply</target> + <target state="translated">Apply</target> </trans-unit> <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> @@ -1314,7 +1314,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Last 7 days</target> + <target state="translated">Last 7 days</target> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Last month</target> + <target state="translated">Last month</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1330,7 +1330,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> - <target state="needs-translation">Last 3 months</target> + <target state="translated">Last 3 months</target> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> @@ -1338,7 +1338,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> - <target state="needs-translation">Last year</target> + <target state="translated">Last year</target> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> @@ -1346,7 +1346,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">After</target> + <target state="translated">After</target> </trans-unit> <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> @@ -1354,7 +1354,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Before</target> + <target state="translated">Before</target> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> @@ -1362,7 +1362,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Clear</target> + <target state="translated">Clear</target> </trans-unit> <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">View</target> + <target state="translated">View</target> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Created: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter by correspondent</target> + <target state="translated">Filter by correspondent</target> </trans-unit> <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Filter by tag</target> + <target state="translated">Filter by tag</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="needs-translation">Score:</target> + <target state="translated">Score:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1410,7 +1410,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> - <target state="needs-translation">View in browser</target> + <target state="translated">View in browser</target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Error executing bulk operation: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" and "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/> and "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1461,7 +1461,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="needs-translation">Confirm tags assignment</target> + <target state="translated">Confirm tags assignment</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">This operation will add the tag "<x equiv-text="tag.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target state="translated">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target state="translated">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">This operation will remove the tag "<x equiv-text="tag.name" id="PH"/>" from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target state="translated">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">This operation will remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> from <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target state="translated">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">This operation will add the tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> and remove the tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> on <x equiv-text="this.list.selected.size" id="PH_2"/> selected document(s).</target> + <target state="translated">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1509,7 +1509,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="needs-translation">Confirm correspondent assignment</target> + <target state="translated">Confirm correspondent assignment</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">This operation will assign the correspondent "<x equiv-text="correspondent.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target state="translated">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">This operation will remove the correspondent from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <target state="translated">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1533,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> - <target state="needs-translation">Confirm document type assignment</target> + <target state="translated">Confirm document type assignment</target> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">This operation will assign the document type "<x equiv-text="documentType.name" id="PH"/>" to <x equiv-text="this.list.selected.size" id="PH_1"/> selected document(s).</target> + <target state="translated">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">This operation will remove the document type from <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <target state="translated">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1557,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> - <target state="needs-translation">Delete confirm</target> + <target state="translated">Delete confirm</target> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated">This operation will permanently delete <x equiv-text="this.list.selected.size" id="PH"/> selected document(s).</target> + <target state="translated">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1573,7 +1573,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">This operation cannot be undone.</target> + <target state="translated">This operation cannot be undone.</target> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> @@ -1581,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">Delete document(s)</target> + <target state="translated">Delete document(s)</target> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> @@ -1589,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select:</target> + <target state="translated">Select:</target> </trans-unit> <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> @@ -1597,7 +1597,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">All</target> + <target state="translated">All</target> </trans-unit> <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> @@ -1605,7 +1605,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Edit:</target> + <target state="translated">Edit:</target> </trans-unit> <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> @@ -1613,7 +1613,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Download originals</target> + <target state="translated">Download originals</target> </trans-unit> <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> @@ -1621,7 +1621,7 @@ <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Suggestions:</target> + <target state="translated">Suggestions:</target> </trans-unit> <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> @@ -1629,7 +1629,7 @@ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Save current view</target> + <target state="translated">Save current view</target> </trans-unit> <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> @@ -1637,7 +1637,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Show all</target> + <target state="translated">Show all</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1645,7 +1645,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Statistics</target> + <target state="translated">Statistics</target> </trans-unit> <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Total documents: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documents in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Processing: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Failed: <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Failed: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Added: <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Added: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1693,7 +1693,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <target state="needs-translation">Connecting...</target> + <target state="translated">Connecting...</target> </trans-unit> <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Uploading...</target> + <target state="translated">Uploading...</target> </trans-unit> <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> @@ -1709,7 +1709,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Upload complete, waiting...</target> + <target state="translated">Upload complete, waiting...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">HTTP error: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1725,7 +1725,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Upload new documents</target> + <target state="translated">Upload new documents</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1733,7 +1733,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Drop documents here or</target> + <target state="translated">Drop documents here or</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Browse files</target> + <target state="translated">Browse files</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1750,7 +1750,7 @@ <context context-type="linenumber">4</context> </context-group> <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> - <target state="needs-translation">Dismiss completed</target> + <target state="translated">Dismiss completed</target> </trans-unit> <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> @@ -1759,7 +1759,7 @@ <context context-type="linenumber">25</context> </context-group> <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> @@ -1767,7 +1767,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Open document</target> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> @@ -1775,7 +1775,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">First steps</target> + <target state="translated">First steps</target> </trans-unit> <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> - <target state="needs-translation">Paperless is running! :)</target> + <target state="translated">Paperless is running! :)</target> </trans-unit> <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> @@ -1791,7 +1791,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + <target state="translated">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + <target state="translated">Paperless offers some more features that try to make your life easier:</target> </trans-unit> <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> @@ -1807,7 +1807,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + <target state="translated">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> </trans-unit> <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> @@ -1815,7 +1815,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + <target state="translated">You can configure paperless to read your mails and add documents from attached files.</target> </trans-unit> <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> @@ -1823,7 +1823,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + <target state="translated">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> </trans-unit> <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadata</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1839,7 +1839,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Select</target> </trans-unit> <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> @@ -1847,7 +1847,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Please select an object</target> + <target state="translated">Please select an object</target> </trans-unit> <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Invalid date.</target> + <target state="translated">Invalid date.</target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1863,7 +1863,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Yes</target> + <target state="translated">Yes</target> </trans-unit> <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> @@ -1871,7 +1871,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">No</target> + <target state="translated">No</target> </trans-unit> <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> @@ -1879,7 +1879,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">(no title)</target> + <target state="translated">(no title)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="needs-translation">English (US)</target> + <target state="translated">English (US)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1895,7 +1895,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">English (GB)</target> + <target state="translated">English (GB)</target> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="needs-translation">German</target> + <target state="translated">German</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1911,7 +1911,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> - <target state="needs-translation">Dutch</target> + <target state="translated">Dutch</target> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">French</target> + <target state="translated">French</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Portuguese (Brazil)</target> + <target state="translated">Portuguese (Brazil)</target> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> @@ -1935,7 +1935,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> - <target state="needs-translation">Italian</target> + <target state="translated">Italian</target> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> @@ -1943,7 +1943,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Romanian</target> + <target state="translated">Romanian</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -1959,7 +1959,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Document already exists.</target> + <target state="translated">Document already exists.</target> </trans-unit> <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">File not found.</target> + <target state="translated">File not found.</target> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> @@ -1976,7 +1976,7 @@ <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Pre-consume script does not exist.</target> + <target state="translated">Pre-consume script does not exist.</target> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -1985,7 +1985,7 @@ <context context-type="linenumber">18</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing pre-consume script.</target> + <target state="translated">Error while executing pre-consume script.</target> </trans-unit> <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> @@ -1994,7 +1994,7 @@ <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Post-consume script does not exist.</target> + <target state="translated">Post-consume script does not exist.</target> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> @@ -2003,7 +2003,7 @@ <context context-type="linenumber">20</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing post-consume script.</target> + <target state="translated">Error while executing post-consume script.</target> </trans-unit> <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> @@ -2011,7 +2011,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Received new file.</target> + <target state="translated">Received new file.</target> </trans-unit> <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> @@ -2019,7 +2019,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">File type not supported.</target> + <target state="translated">File type not supported.</target> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> @@ -2027,7 +2027,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Processing document...</target> + <target state="translated">Processing document...</target> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> @@ -2035,7 +2035,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Generating thumbnail...</target> + <target state="translated">Generating thumbnail...</target> </trans-unit> <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> @@ -2043,7 +2043,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Retrieving date from document...</target> + <target state="translated">Retrieving date from document...</target> </trans-unit> <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> @@ -2051,7 +2051,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Saving document...</target> + <target state="translated">Saving document...</target> </trans-unit> <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> @@ -2059,7 +2059,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Finished.</target> + <target state="translated">Finished.</target> </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> @@ -2067,7 +2067,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Error</target> + <target state="translated">Error</target> </trans-unit> <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Information</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondent</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> @@ -2099,7 +2099,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Document type</target> </trans-unit> <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> @@ -2107,7 +2107,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Created</target> </trans-unit> <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> @@ -2115,7 +2115,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Added</target> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> @@ -2123,7 +2123,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Modified</target> + <target state="translated">Modified</target> </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> @@ -2131,7 +2131,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">Create new item</target> + <target state="translated">Create new item</target> </trans-unit> <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> @@ -2139,7 +2139,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="needs-translation">Edit item</target> + <target state="translated">Edit item</target> </trans-unit> <trans-unit id="1699589597032579396" datatype="html"> <source>Could not save element: <x id="PH" equiv-text="error"/></source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Could not save element: <x equiv-text="error" id="PH"/></target> + <target state="translated">Could not save element: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">Automatic</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2163,7 +2163,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Do you really want to delete this element?</target> + <target state="translated">Do you really want to delete this element?</target> </trans-unit> <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> @@ -2171,7 +2171,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="needs-translation">Associated documents will not be deleted.</target> + <target state="translated">Associated documents will not be deleted.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Delete</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Error while deleting element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any word</target> + <target state="translated">Any word</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2203,7 +2203,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + <target state="translated">Any: Document contains any of these words (space separated)</target> </trans-unit> <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All words</target> + <target state="translated">All words</target> </trans-unit> <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> @@ -2219,7 +2219,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All: Document contains all of these words (space separated)</target> + <target state="translated">All: Document contains all of these words (space separated)</target> </trans-unit> <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact match</target> + <target state="translated">Exact match</target> </trans-unit> <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> @@ -2235,7 +2235,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact: Document contains this string</target> + <target state="translated">Exact: Document contains this string</target> </trans-unit> <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">Regular expression</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> @@ -2251,7 +2251,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression: Document matches this regular expression</target> + <target state="translated">Regular expression: Document matches this regular expression</target> </trans-unit> <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> @@ -2259,7 +2259,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy word</target> + <target state="translated">Fuzzy word</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> @@ -2267,7 +2267,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + <target state="translated">Fuzzy: Document contains a word similar to this word</target> </trans-unit> <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> @@ -2275,7 +2275,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Auto: Learn matching automatically</target> + <target state="translated">Auto: Learn matching automatically</target> </trans-unit> </body> </file> From 364beb340a9fc9df0166c060387de74e350f84a9 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:08 +0100 Subject: [PATCH 531/898] New translations django.po (English, United Kingdom) [ci skip] --- src/locale/en_GB/LC_MESSAGES/django.po | 308 ++++++++++++------------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 5ae2832b0..767c24105 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:39\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -19,56 +19,56 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Documents" #: documents/models.py:32 msgid "Any word" -msgstr "" +msgstr "Any word" #: documents/models.py:33 msgid "All words" -msgstr "" +msgstr "All words" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "Exact match" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "Regular expression" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "Fuzzy word" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "Automatic" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" -msgstr "" +msgstr "name" #: documents/models.py:45 msgid "match" -msgstr "" +msgstr "match" #: documents/models.py:49 msgid "matching algorithm" -msgstr "" +msgstr "matching algorithm" #: documents/models.py:55 msgid "is insensitive" -msgstr "" +msgstr "is insensitive" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "" +msgstr "correspondent" #: documents/models.py:75 msgid "correspondents" -msgstr "" +msgstr "correspondents" #: documents/models.py:81 msgid "color" @@ -76,276 +76,276 @@ msgstr "colour" #: documents/models.py:87 msgid "is inbox tag" -msgstr "" +msgstr "is inbox tag" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "tag" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "" +msgstr "tags" #: documents/models.py:101 documents/models.py:133 msgid "document type" -msgstr "" +msgstr "document type" #: documents/models.py:102 msgid "document types" -msgstr "" +msgstr "document types" #: documents/models.py:110 msgid "Unencrypted" -msgstr "" +msgstr "Unencrypted" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "Encrypted with GNU Privacy Guard" #: documents/models.py:124 msgid "title" -msgstr "" +msgstr "title" #: documents/models.py:137 msgid "content" -msgstr "" +msgstr "content" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "The raw, text-only data of the document. This field is primarily used for searching." #: documents/models.py:144 msgid "mime type" -msgstr "" +msgstr "mime type" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "checksum" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "" +msgstr "The checksum of the original document." #: documents/models.py:163 msgid "archive checksum" -msgstr "" +msgstr "archive checksum" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "" +msgstr "The checksum of the archived document." #: documents/models.py:172 documents/models.py:328 msgid "created" -msgstr "" +msgstr "created" #: documents/models.py:176 msgid "modified" -msgstr "" +msgstr "modified" #: documents/models.py:180 msgid "storage type" -msgstr "" +msgstr "storage type" #: documents/models.py:188 msgid "added" -msgstr "" +msgstr "added" #: documents/models.py:192 msgid "filename" -msgstr "" +msgstr "filename" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "" +msgstr "Current filename in storage" #: documents/models.py:202 msgid "archive filename" -msgstr "" +msgstr "archive filename" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "" +msgstr "Current archive filename in storage" #: documents/models.py:212 msgid "archive serial number" -msgstr "" +msgstr "archive serial number" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "" +msgstr "The position of this document in your physical document archive." #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "document" #: documents/models.py:224 msgid "documents" -msgstr "" +msgstr "documents" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "debug" #: documents/models.py:312 msgid "information" -msgstr "" +msgstr "information" #: documents/models.py:313 msgid "warning" -msgstr "" +msgstr "warning" #: documents/models.py:314 msgid "error" -msgstr "" +msgstr "error" #: documents/models.py:315 msgid "critical" -msgstr "" +msgstr "critical" #: documents/models.py:319 msgid "group" -msgstr "" +msgstr "group" #: documents/models.py:322 msgid "message" -msgstr "" +msgstr "message" #: documents/models.py:325 msgid "level" -msgstr "" +msgstr "level" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "log" #: documents/models.py:333 msgid "logs" -msgstr "" +msgstr "logs" #: documents/models.py:344 documents/models.py:394 msgid "saved view" -msgstr "" +msgstr "saved view" #: documents/models.py:345 msgid "saved views" -msgstr "" +msgstr "saved views" #: documents/models.py:348 msgid "user" -msgstr "" +msgstr "user" #: documents/models.py:354 msgid "show on dashboard" -msgstr "" +msgstr "show on dashboard" #: documents/models.py:357 msgid "show in sidebar" -msgstr "" +msgstr "show in sidebar" #: documents/models.py:361 msgid "sort field" -msgstr "" +msgstr "sort field" #: documents/models.py:364 msgid "sort reverse" -msgstr "" +msgstr "sort reverse" #: documents/models.py:370 msgid "title contains" -msgstr "" +msgstr "title contains" #: documents/models.py:371 msgid "content contains" -msgstr "" +msgstr "content contains" #: documents/models.py:372 msgid "ASN is" -msgstr "" +msgstr "ASN is" #: documents/models.py:373 msgid "correspondent is" -msgstr "" +msgstr "correspondent is" #: documents/models.py:374 msgid "document type is" -msgstr "" +msgstr "document type is" #: documents/models.py:375 msgid "is in inbox" -msgstr "" +msgstr "is in inbox" #: documents/models.py:376 msgid "has tag" -msgstr "" +msgstr "has tag" #: documents/models.py:377 msgid "has any tag" -msgstr "" +msgstr "has any tag" #: documents/models.py:378 msgid "created before" -msgstr "" +msgstr "created before" #: documents/models.py:379 msgid "created after" -msgstr "" +msgstr "created after" #: documents/models.py:380 msgid "created year is" -msgstr "" +msgstr "created year is" #: documents/models.py:381 msgid "created month is" -msgstr "" +msgstr "created month is" #: documents/models.py:382 msgid "created day is" -msgstr "" +msgstr "created day is" #: documents/models.py:383 msgid "added before" -msgstr "" +msgstr "added before" #: documents/models.py:384 msgid "added after" -msgstr "" +msgstr "added after" #: documents/models.py:385 msgid "modified before" -msgstr "" +msgstr "modified before" #: documents/models.py:386 msgid "modified after" -msgstr "" +msgstr "modified after" #: documents/models.py:387 msgid "does not have tag" -msgstr "" +msgstr "does not have tag" #: documents/models.py:398 msgid "rule type" -msgstr "" +msgstr "rule type" #: documents/models.py:402 msgid "value" -msgstr "" +msgstr "value" #: documents/models.py:408 msgid "filter rule" -msgstr "" +msgstr "filter rule" #: documents/models.py:409 msgid "filter rules" -msgstr "" +msgstr "filter rules" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" -msgstr "" +msgstr "Invalid regular expresssion: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." @@ -354,289 +354,289 @@ msgstr "Invalid colour." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "File type %(type)s not supported" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "" +msgstr "Paperless-ng is loading..." #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" -msgstr "" +msgstr "Paperless-ng signed out" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "You have been successfully logged out. Bye!" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "" +msgstr "Sign in again" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" -msgstr "" +msgstr "Paperless-ng sign in" #: documents/templates/registration/login.html:42 msgid "Please sign in." -msgstr "" +msgstr "Please sign in." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "Your username and password didn't match. Please try again." #: documents/templates/registration/login.html:48 msgid "Username" -msgstr "" +msgstr "Username" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "" +msgstr "Password" #: documents/templates/registration/login.html:54 msgid "Sign in" -msgstr "" +msgstr "Sign in" #: paperless/settings.py:297 msgid "English (US)" -msgstr "" +msgstr "English (US)" #: paperless/settings.py:298 msgid "English (GB)" -msgstr "" +msgstr "English (GB)" #: paperless/settings.py:299 msgid "German" -msgstr "" +msgstr "German" #: paperless/settings.py:300 msgid "Dutch" -msgstr "" +msgstr "Dutch" #: paperless/settings.py:301 msgid "French" -msgstr "" +msgstr "French" #: paperless/settings.py:302 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "Portuguese (Brazil)" #: paperless/settings.py:303 msgid "Italian" -msgstr "" +msgstr "Italian" #: paperless/settings.py:304 msgid "Romanian" -msgstr "" +msgstr "Romanian" #: paperless/urls.py:118 msgid "Paperless-ng administration" -msgstr "" +msgstr "Paperless-ng administration" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Filter" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "Paperless will only process mails that match ALL of the filters given below." #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "" +msgstr "Actions" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Metadata" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "" +msgstr "Paperless mail" #: paperless_mail/models.py:11 msgid "mail account" -msgstr "" +msgstr "mail account" #: paperless_mail/models.py:12 msgid "mail accounts" -msgstr "" +msgstr "mail accounts" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "" +msgstr "No encryption" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "" +msgstr "Use SSL" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "" +msgstr "Use STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "" +msgstr "IMAP server" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "" +msgstr "IMAP port" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "" +msgstr "IMAP security" #: paperless_mail/models.py:46 msgid "username" -msgstr "" +msgstr "username" #: paperless_mail/models.py:50 msgid "password" -msgstr "" +msgstr "password" #: paperless_mail/models.py:60 msgid "mail rule" -msgstr "" +msgstr "mail rule" #: paperless_mail/models.py:61 msgid "mail rules" -msgstr "" +msgstr "mail rules" #: paperless_mail/models.py:67 msgid "Only process attachments." -msgstr "" +msgstr "Only process attachments." #: paperless_mail/models.py:68 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "Process all files, including 'inline' attachments." #: paperless_mail/models.py:78 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "Mark as read, don't process read mails" #: paperless_mail/models.py:79 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "Flag the mail, don't process flagged mails" #: paperless_mail/models.py:80 msgid "Move to specified folder" -msgstr "" +msgstr "Move to specified folder" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "" +msgstr "Delete" #: paperless_mail/models.py:88 msgid "Use subject as title" -msgstr "" +msgstr "Use subject as title" #: paperless_mail/models.py:89 msgid "Use attachment filename as title" -msgstr "" +msgstr "Use attachment filename as title" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" -msgstr "" +msgstr "Do not assign a correspondent" #: paperless_mail/models.py:101 msgid "Use mail address" -msgstr "" +msgstr "Use mail address" #: paperless_mail/models.py:103 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "Use name (or mail address if not available)" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" -msgstr "" +msgstr "Use correspondent selected below" #: paperless_mail/models.py:113 msgid "order" -msgstr "" +msgstr "order" #: paperless_mail/models.py:120 msgid "account" -msgstr "" +msgstr "account" #: paperless_mail/models.py:124 msgid "folder" -msgstr "" +msgstr "folder" #: paperless_mail/models.py:128 msgid "filter from" -msgstr "" +msgstr "filter from" #: paperless_mail/models.py:131 msgid "filter subject" -msgstr "" +msgstr "filter subject" #: paperless_mail/models.py:134 msgid "filter body" -msgstr "" +msgstr "filter body" #: paperless_mail/models.py:138 msgid "filter attachment filename" -msgstr "" +msgstr "filter attachment filename" #: paperless_mail/models.py:140 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." #: paperless_mail/models.py:146 msgid "maximum age" -msgstr "" +msgstr "maximum age" #: paperless_mail/models.py:148 msgid "Specified in days." -msgstr "" +msgstr "Specified in days." #: paperless_mail/models.py:151 msgid "attachment type" -msgstr "" +msgstr "attachment type" #: paperless_mail/models.py:154 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "Inline attachments include embedded images, so it's best to combine this option with a filename filter." #: paperless_mail/models.py:159 msgid "action" -msgstr "" +msgstr "action" #: paperless_mail/models.py:165 msgid "action parameter" -msgstr "" +msgstr "action parameter" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "" +msgstr "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." #: paperless_mail/models.py:173 msgid "assign title from" -msgstr "" +msgstr "assign title from" #: paperless_mail/models.py:183 msgid "assign this tag" -msgstr "" +msgstr "assign this tag" #: paperless_mail/models.py:191 msgid "assign this document type" -msgstr "" +msgstr "assign this document type" #: paperless_mail/models.py:195 msgid "assign correspondent from" -msgstr "" +msgstr "assign correspondent from" #: paperless_mail/models.py:205 msgid "assign this correspondent" -msgstr "" +msgstr "assign this correspondent" From 4f310d674d4270f1704d733f3f0873014a6d1a6f Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:13 +0100 Subject: [PATCH 532/898] New translations messages.xlf (Portuguese, Brazilian) [ci skip] --- src-ui/src/locale/messages.pt_BR.xlf | 114 +++++++++++++-------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index b12cabcef..3d19c0ce6 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Documento <x equiv-text="status.filename" id="PH"/> foi adicionado ao paperless.</target> + <target state="translated">Documento <x id="PH" equiv-text="status.filename"/> foi adicionado ao paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Não foi possível adicionar <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Não foi possível adicionar <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Documento <x equiv-text="status.filename" id="PH"/> está sendo processado pelo paperless.</target> + <target state="translated">Documento <x id="PH" equiv-text="status.filename"/> está sendo processado pelo paperless.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Visualização "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" salva com sucesso.</target> + <target state="translated">Visualização "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" salva com sucesso.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Visualização "<x equiv-text="savedView.name" id="PH"/>" criada com sucesso.</target> + <target state="translated">Visualização "<x id="PH" equiv-text="savedView.name"/>" criada com sucesso.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Salvar "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <target state="translated">Salvar "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Você realmente deseja excluir o documento "<x equiv-text="this.document.title" id="PH"/>"?</target> + <target state="translated">Você realmente deseja excluir o documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Erro ao excluir documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Erro ao excluir documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">de <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">de <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Olá <x equiv-text="this.displayName" id="PH"/>, bem-vindo ao Paperless-ng!</target> + <target state="translated">Olá <x id="PH" equiv-text="this.displayName"/>, bem-vindo ao Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Você realmente deseja excluir a etiqueta "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Você realmente deseja excluir a etiqueta "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Você realmente deseja excluir o tipo de documento "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Você realmente deseja excluir o tipo de documento "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Logs</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Visualização "<x equiv-text="savedView.name" id="PH"/>" excluída.</target> + <target state="translated">Visualização "<x id="PH" equiv-text="savedView.name"/>" excluída.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Erro ao salvar configurações: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Erro ao salvar configurações: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Curto: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Curto: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Médio: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Médio: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Longo: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Longo: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Você realmente deseja excluir o correspondente "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Você realmente deseja excluir o correspondente "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Termo de pesquisa inválido: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Termo de pesquisa inválido: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Exibindo documentos similares a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <target state="translated">Exibindo documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Termo de pesquisa: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Termo de pesquisa: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Você quis dizer "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <target state="translated">Você quis dizer "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="needs-translation">Admin</target> + <target state="translated">Admin</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Sessão iniciada como <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Sessão iniciada como <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Correspondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Correspondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Etiqueta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Título: <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Criado: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Criado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Erro ao executar operação em massa: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Erro ao executar operação em massa: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" e "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/> e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> e "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Essa operação irá adicionar a etiqueta "<x equiv-text="tag.name" id="PH"/>" em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá adicionar a etiqueta "<x id="PH" equiv-text="tag.name"/>" em <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> em <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s). </target> + <target state="translated">Essa operação irá adicionar as etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> em <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s). </target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Essa operação irá remover a etiqueta "<x equiv-text="tag.name" id="PH"/>" de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá remover a etiqueta "<x id="PH" equiv-text="tag.name"/>" de <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">Essa operação irá remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá remover as etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> de <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">Essa operação irá adicionar as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e remover as etiquetas <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de <x equiv-text="this.list.selected.size" id="PH_2"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá adicionar as etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> e remover as etiquetas <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> de <x id="PH_2" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">Essa operação irá atribuir o correspondente "<x equiv-text="correspondent.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá atribuir o correspondente "<x id="PH" equiv-text="correspondent.name"/>" para <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Essa operação irá remover o correspondente de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá remover o correspondente de <x id="PH" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">Essa operação irá atribuir o tipo de documento "<x equiv-text="documentType.name" id="PH"/>" para <x equiv-text="this.list.selected.size" id="PH_1"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá atribuir o tipo de documento "<x id="PH" equiv-text="documentType.name"/>" para <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Essa operação irá remover o tipo de documento de <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá remover o tipo de documento de <x id="PH" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated">Essa operação irá excluir permanentemente <x equiv-text="this.list.selected.size" id="PH"/> documento(s) selecionado(s).</target> + <target state="translated">Essa operação irá excluir permanentemente <x id="PH" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Total de documentos: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Total de documentos: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documentos na caixa de entrada: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Documentos na caixa de entrada: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Processando: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">Processando: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Falha: <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Falha: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Adicionado: <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Adicionado: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Erro HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">Erro HTTP: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1733,7 +1733,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Solte documentos aqui ou</target> + <target state="translated">Arraste documentos aqui ou</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Não podemos salvar elemento: <x equiv-text="error" id="PH"/></target> + <target state="translated">Não podemos salvar elemento: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Erro ao excluir elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Erro ao excluir elemento: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> From f0c044d71d58e5a0cfcee2cdf3b4d54c4a9b5374 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:14 +0100 Subject: [PATCH 533/898] New translations django.po (Portuguese, Brazilian) [ci skip] --- src/locale/pt_BR/LC_MESSAGES/django.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 9f32ecfac..117caebdd 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -188,7 +188,7 @@ msgstr "documentos" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "debug" #: documents/models.py:312 msgid "information" @@ -220,11 +220,11 @@ msgstr "nível" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "log" #: documents/models.py:333 msgid "logs" -msgstr "" +msgstr "logs" #: documents/models.py:344 documents/models.py:394 msgid "saved view" @@ -458,7 +458,7 @@ msgstr "Atribua metadados aos documentos consumidos por esta regra automaticamen #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "" +msgstr "Paperless mail" #: paperless_mail/models.py:11 msgid "mail account" From cb0a1831a6d492985a66658c9489fd4ba00bde64 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:15 +0100 Subject: [PATCH 534/898] New translations messages.xlf (Chinese Simplified) [ci skip] --- src-ui/src/locale/messages.zh_CN.xlf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index b8eaa1c53..580497ce5 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">文件</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">文件</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">自动</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any word</target> + <target state="translated">任何词</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All words</target> + <target state="translated">所有词</target> </trans-unit> <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact match</target> + <target state="translated">完全符合</target> </trans-unit> <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">正则表达式</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> @@ -2259,7 +2259,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy word</target> + <target state="translated">模糊词汇</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> From 3b56aaac845ca1b401febbf20022cd2c724191ff Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:16 +0100 Subject: [PATCH 535/898] New translations django.po (Chinese Simplified) [ci skip] --- src/locale/zh_CN/LC_MESSAGES/django.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 3d6513cbb..93af25211 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -19,44 +19,44 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "文件" #: documents/models.py:32 msgid "Any word" -msgstr "" +msgstr "任何词" #: documents/models.py:33 msgid "All words" -msgstr "" +msgstr "所有词" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "完全符合" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "正则表达式" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "模糊词汇" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "自动" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" -msgstr "" +msgstr "名字" #: documents/models.py:45 msgid "match" -msgstr "" +msgstr "配对" #: documents/models.py:49 msgid "matching algorithm" -msgstr "" +msgstr "配对算法" #: documents/models.py:55 msgid "is insensitive" From 1bfdf8e64570e5c325a2dda49986d193bcf5cea4 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:18 +0100 Subject: [PATCH 536/898] New translations messages.xlf (Russian) [ci skip] --- src-ui/src/locale/messages.ru_RU.xlf | 502 +++++++++++++-------------- 1 file changed, 251 insertions(+), 251 deletions(-) diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index f018f5f31..816a78ca5 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -8,7 +8,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document added</target> + <target state="translated">Документ добавлен</target> </trans-unit> <trans-unit id="9204248378636247318" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + <target state="translated">Документ <x id="PH" equiv-text="status.filename"/> был добавлен в paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -24,7 +24,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Открыть документ</target> </trans-unit> <trans-unit id="8582620835547864448" datatype="html"> <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + <target state="translated">Невозможно добавить <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -40,7 +40,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">New document detected</target> + <target state="translated">Обнаружен новый документ</target> </trans-unit> <trans-unit id="587031278561344416" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + <target state="translated">Документ <x id="PH" equiv-text="status.filename"/> обрабатывается paperless</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Документы</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + <target state="translated">Просмотр "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" успешно сохранён.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + <target state="translated">Просмотр "<x id="PH" equiv-text="savedView.name"/>" создан успешно</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Выбрать</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select none</target> + <target state="translated">Ничего не выбрано</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -96,7 +96,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Select page</target> + <target state="translated">Выбрать страницу</target> </trans-unit> <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> @@ -104,7 +104,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Select all</target> + <target state="translated">Выбрать всё</target> </trans-unit> <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> @@ -112,7 +112,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Sort</target> + <target state="translated">Сортировать</target> </trans-unit> <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="needs-translation">Views</target> + <target state="translated">Просмотры</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Save as...</target> + <target state="translated">Сохранить как</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + <target state="translated">Сохранить "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -144,7 +144,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Выделено<x id="INTERPOLATION"/> из одного документа} other {Выделенные <x id="INTERPOLATION"/> и <x id="INTERPOLATION_1"/> документы}}</target> </trans-unit> <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> @@ -152,7 +152,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Один документ} other {<x id="INTERPOLATION"/> докуметы}}</target> </trans-unit> <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> @@ -160,7 +160,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">(filtered)</target> + <target state="translated">(отфильтровано)</target> </trans-unit> <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Корреспонденция</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -184,7 +184,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Заголовок</target> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> @@ -192,7 +192,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Тип документа</target> </trans-unit> <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> @@ -200,7 +200,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Создано</target> </trans-unit> <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> @@ -208,7 +208,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Добавлено</target> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">Confirm delete</target> + <target state="translated">Подтвердить удаление</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + <target state="translated">Вы действительно хотите удалить документ "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + <target state="translated">Файл из этого документа будет удалён незамедлительно. Это операцию нельзя отменить.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -240,7 +240,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> - <target state="needs-translation">Delete document</target> + <target state="translated">Удалить документ</target> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + <target state="translated">Ошибка удаления документа: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Удалить</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Download</target> + <target state="translated">Скачать</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -272,7 +272,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">More like this</target> + <target state="translated">Больше похожих</target> </trans-unit> <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> @@ -280,7 +280,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Close</target> + <target state="translated">Закрыть</target> </trans-unit> <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Детали</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -296,7 +296,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Content</target> + <target state="translated">Содержимое</target> </trans-unit> <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Метаданные</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -312,7 +312,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">Discard</target> + <target state="translated">Отменить</target> </trans-unit> <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> @@ -320,7 +320,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">Save</target> + <target state="translated">Сохранить</target> </trans-unit> <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> @@ -328,7 +328,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Page</target> + <target state="translated">Страница</target> </trans-unit> <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + <target state="translated">из <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -344,7 +344,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Download original</target> + <target state="translated">Скачать оригинал</target> </trans-unit> <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="needs-translation">Archive serial number</target> + <target state="translated">Серийный номер архива</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -360,7 +360,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> - <target state="needs-translation">Date created</target> + <target state="translated">Дата создания</target> </trans-unit> <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> @@ -368,7 +368,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Date modified</target> + <target state="translated">Дата изменения</target> </trans-unit> <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> @@ -376,7 +376,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Date added</target> + <target state="translated">Дата добавления</target> </trans-unit> <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Media filename</target> + <target state="translated">Название медиафайла</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Original MD5 checksum</target> + <target state="translated">Подлинная MD5 проверочная сумма</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Original file size</target> + <target state="translated">Размер оригинального файла</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -408,7 +408,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Original mime type</target> + <target state="translated">Оригинальный MIME тип</target> </trans-unit> <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Archive MD5 checksum</target> + <target state="translated">Проверочная сумма MD5 архива</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">Archive file size</target> + <target state="translated">Размер архива</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -432,7 +432,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> - <target state="needs-translation">Original document metadata</target> + <target state="translated">Метаданные оригинального документа</target> </trans-unit> <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> @@ -440,7 +440,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> - <target state="needs-translation">Archived document metadata</target> + <target state="translated">Метаданные архивированного документа</target> </trans-unit> <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> @@ -448,7 +448,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> - <target state="needs-translation">Save & next</target> + <target state="translated">Сохранить & следующий</target> </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + <target state="translated">Привет, <x id="PH" equiv-text="this.displayName"/>, добро пожаловать в Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Welcome to Paperless-ng!</target> + <target state="translated">Добро пожаловать в Paperless-ng,</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Панель</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Вы действительно хотите удалить тег "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,7 +488,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Tags</target> + <target state="translated">Теги</target> </trans-unit> <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> @@ -496,7 +496,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="needs-translation">Create</target> + <target state="translated">Создать</target> </trans-unit> <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Filter by:</target> + <target state="translated">Отсортировать по:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -512,7 +512,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Name</target> + <target state="translated">Имя</target> </trans-unit> <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> @@ -520,7 +520,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Color</target> + <target state="translated">Цвет</target> </trans-unit> <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> @@ -528,7 +528,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Matching</target> + <target state="translated">Совпадения</target> </trans-unit> <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> @@ -536,7 +536,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Document count</target> + <target state="translated">Количество документов</target> </trans-unit> <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Действия</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Документы</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -560,7 +560,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Edit</target> + <target state="translated">Редактировать</target> </trans-unit> <trans-unit id="4990731724078522539" datatype="html"> <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Вы действительно хотите удалить этот тип документа: "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -576,7 +576,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Document types</target> + <target state="translated">Типы документов</target> </trans-unit> <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Логи</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + <target state="translated">Сохраненное представление "<x id="PH" equiv-text="savedView.name"/>" удалено.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -600,7 +600,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="needs-translation">Settings saved successfully.</target> + <target state="translated">Настройки успешно сохранены.</target> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> @@ -608,7 +608,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Use system language</target> + <target state="translated">Использовать язык системы</target> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="needs-translation">Use date format of display language</target> + <target state="translated">Использовать формат даты, соответсвующий языку</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Ошибка при хранении настроек на сервере: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -632,7 +632,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Settings</target> + <target state="translated">Настройки</target> </trans-unit> <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">General settings</target> + <target state="translated">Основные настройки</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -648,7 +648,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="needs-translation">Notifications</target> + <target state="translated">Уведомления</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="needs-translation">Saved views</target> + <target state="translated">Сохраненные представления</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -664,7 +664,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Appearance</target> + <target state="translated">Вид</target> </trans-unit> <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> @@ -672,7 +672,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Display language</target> + <target state="translated">Отобразить язык</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -680,7 +680,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">You need to reload the page after applying a new language.</target> + <target state="translated">Вы должны перезагрузить страница, после применения нового языка.</target> </trans-unit> <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> @@ -688,7 +688,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Date display</target> + <target state="translated">Отображение даты</target> </trans-unit> <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> @@ -696,7 +696,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Date format</target> + <target state="translated">Формат даты</target> </trans-unit> <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + <target state="translated">Кратко: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + <target state="translated">Средний: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + <target state="translated">Длинный: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -728,7 +728,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Items per page</target> + <target state="translated">Элементов на страницу</target> </trans-unit> <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> @@ -736,7 +736,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> - <target state="needs-translation">Document editor</target> + <target state="translated">Редактор документов</target> </trans-unit> <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Use PDF viewer provided by the browser</target> + <target state="translated">Используйте просмоторщик PDF встроенный в браузер</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + <target state="translated">Это обычный способ для быстрого отображения больших PDF документов, но может быть так, что некоторые браузеры не поддерживают этот метод.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -760,7 +760,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Dark mode</target> + <target state="translated">Тёмная тема</target> </trans-unit> <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> @@ -768,7 +768,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Use system settings</target> + <target state="translated">Использовать системные настройки</target> </trans-unit> <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> @@ -776,7 +776,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Enable dark mode</target> + <target state="translated">Включить тёмную тему</target> </trans-unit> <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> @@ -792,7 +792,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Bulk editing</target> + <target state="translated">Массовое редактирование</target> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Show confirmation dialogs</target> + <target state="translated">Показать диалог подтверждения</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + <target state="translated">Удаления документов всегда будет требовать подтверждение.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -816,7 +816,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> - <target state="needs-translation">Apply on close</target> + <target state="translated">Применить при закрытии</target> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> @@ -824,7 +824,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> - <target state="needs-translation">Document processing</target> + <target state="translated">Документ обрабатывается</target> </trans-unit> <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> @@ -832,7 +832,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Show notifications when new documents are detected</target> + <target state="translated"> Показывать уведомления, когда новый документ удалён</target> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> @@ -840,7 +840,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> - <target state="needs-translation">Show notifications when document processing completes successfully</target> + <target state="translated"> Показывать уведомления, когда обработка документа успешна</target> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> @@ -848,7 +848,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> - <target state="needs-translation">Show notifications when document processing fails</target> + <target state="translated"> Показывать уведомления, когда обработка документа не удалась</target> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Suppress notifications on dashboard</target> + <target state="translated">Спрятать уведомления на панели мониторинга</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="needs-translation">Show on dashboard</target> + <target state="translated">Показать в панели управления</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="needs-translation">Show in sidebar</target> + <target state="translated">Показать в опоковой панели</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">No saved views defined.</target> + <target state="translated">Нет сохраненных представлений</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -904,7 +904,7 @@ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">404 Not Found</target> + <target state="translated">404 Не найдено</target> </trans-unit> <trans-unit id="7427874343955308724" datatype="html"> <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Correspondents</target> + <target state="translated">Корреспонденция</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Last correspondence</target> + <target state="translated">Последняя корреспонденция</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -936,7 +936,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Confirmation</target> + <target state="translated">Подтверждение</target> </trans-unit> <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> @@ -944,7 +944,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Confirm</target> + <target state="translated">Подтвердить</target> </trans-unit> <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> @@ -952,7 +952,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Cancel</target> + <target state="translated">Отменить</target> </trans-unit> <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new correspondent</target> + <target state="translated">Создать новую корреспонденцию</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit correspondent</target> + <target state="translated">Редактировать корреспонденцию</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Matching algorithm</target> + <target state="translated">Алгоритмы совпадения</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -984,7 +984,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Matching pattern</target> + <target state="translated">Сопоставление с образцом</target> </trans-unit> <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> @@ -992,7 +992,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Case insensitive</target> + <target state="translated">Без учёта регистра</target> </trans-unit> <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Create new tag</target> + <target state="translated">Создать новый тег</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1008,7 +1008,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Edit tag</target> + <target state="translated">Редактировать тег</target> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tag</target> + <target state="translated">Входящие теги</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + <target state="translated">Тег входящих сообщений будет автоматически назначен всем используемым документам.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1032,7 +1032,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new document type</target> + <target state="translated">Создать новый тип документа</target> </trans-unit> <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> @@ -1040,7 +1040,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit document type</target> + <target state="translated">Редактировать тип документа</target> </trans-unit> <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> @@ -1048,7 +1048,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Search results</target> + <target state="translated">Результаты поиска</target> </trans-unit> <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + <target state="translated">Неверный поисковой запрос: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated">Показываю документы похожие на <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + <target state="translated">Поисковый запрос: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + <target state="translated">Может вы имели ввиду "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1088,7 +1088,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + <target state="translated">{VAR_PLURAL, plural, =0 {Нет результатов} =1 {Один результат} other {<x id="INTERPOLATION"/>результатов}}</target> </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1105,7 +1105,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Search documents</target> + <target state="translated">Поиск документов</target> </trans-unit> <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> @@ -1113,7 +1113,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Logout</target> + <target state="translated">Выход</target> </trans-unit> <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> @@ -1121,7 +1121,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> - <target state="needs-translation">Manage</target> + <target state="translated">Управлять</target> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="needs-translation">Admin</target> + <target state="translated">Админ</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="needs-translation">Info</target> + <target state="translated">Инфо</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="needs-translation">Documentation</target> + <target state="translated">Документация </target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1161,7 +1161,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> - <target state="needs-translation">Suggest an idea</target> + <target state="translated">Предложить идею</target> </trans-unit> <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + <target state="translated">Вошёл как <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1177,7 +1177,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Open documents</target> + <target state="translated">Открыть документы</target> </trans-unit> <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Close all</target> + <target state="translated">Закрыть всё</target> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> @@ -1193,7 +1193,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Заголоок</target> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + <target state="translated">Корреспонденция: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1217,7 +1217,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Without correspondent</target> + <target state="translated">Без корреспондента</target> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + <target state="translated">Тип: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> - <target state="needs-translation">Without document type</target> + <target state="translated">Без типа документа</target> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + <target state="translated">Тег: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1249,7 +1249,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Without any tag</target> + <target state="translated">Без тегов</target> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">Заголовок: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter tags</target> + <target state="translated">Фильтр тегов</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> - <target state="needs-translation">Filter correspondents</target> + <target state="translated">Фильтр корреспондентов</target> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> @@ -1281,7 +1281,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Filter document types</target> + <target state="translated">Фильтр тип документов</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1289,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Reset filters</target> + <target state="translated">Сбросить фильры</target> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> @@ -1298,7 +1298,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="needs-translation">Not assigned</target> + <target state="translated"> Не назначено</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1306,7 +1306,7 @@ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Apply</target> + <target state="translated">Подтвердить</target> </trans-unit> <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> @@ -1314,7 +1314,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Last 7 days</target> + <target state="translated">Неделю назад</target> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Last month</target> + <target state="translated">Месяц назад</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1330,7 +1330,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> - <target state="needs-translation">Last 3 months</target> + <target state="translated">Три месяца назад</target> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> @@ -1338,7 +1338,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> - <target state="needs-translation">Last year</target> + <target state="translated">Год назад</target> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> @@ -1346,7 +1346,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">After</target> + <target state="translated">После</target> </trans-unit> <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> @@ -1354,7 +1354,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Before</target> + <target state="translated">До</target> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> @@ -1362,7 +1362,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Clear</target> + <target state="translated">Очистить</target> </trans-unit> <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">View</target> + <target state="translated">Просмотр</target> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + <target state="translated">Создано: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter by correspondent</target> + <target state="translated">Отфильтровать по корреспонденту</target> </trans-unit> <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Filter by tag</target> + <target state="translated">Отсортировано по тегу</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="needs-translation">Score:</target> + <target state="translated">Результат:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1410,7 +1410,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> - <target state="needs-translation">View in browser</target> + <target state="translated">Просмотреть в браузере</target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Ошибка выполнения массовой операции: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" и "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> и "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1461,7 +1461,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="needs-translation">Confirm tags assignment</target> + <target state="translated">Подтвердить применяемый тег</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция добавит тег "<x id="PH" equiv-text="tag.name"/>" выбранным документам <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция добавит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> выбранным документам <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция удалит теги "<x id="PH" equiv-text="tag.name"/>" с выбранных документов <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция удалит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> с выбранных документов <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция добавит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> и удалит теги <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> на выбранных документах.</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1509,7 +1509,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="needs-translation">Confirm correspondent assignment</target> + <target state="translated">Подтвердите назначения корресподента</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция присвоит тип "<x id="PH" equiv-text="documentType.name"/>" <x id="PH_1" equiv-text="this.list.selected.size"/> выбранным документам.</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция удалит тип из <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1557,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> - <target state="needs-translation">Delete confirm</target> + <target state="translated">Подтвердите удаление</target> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция навсегда удалит <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1573,7 +1573,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">This operation cannot be undone.</target> + <target state="translated">Эту операцию нельзя отменить.</target> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> @@ -1581,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">Delete document(s)</target> + <target state="translated">Удалить документ(ы)</target> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> @@ -1589,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select:</target> + <target state="translated">Выбрано:</target> </trans-unit> <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> @@ -1597,7 +1597,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">All</target> + <target state="translated">Все</target> </trans-unit> <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> @@ -1605,7 +1605,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Edit:</target> + <target state="translated">Редактировать:</target> </trans-unit> <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> @@ -1613,7 +1613,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Download originals</target> + <target state="translated">Скачать оригиналы</target> </trans-unit> <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> @@ -1621,7 +1621,7 @@ <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Suggestions:</target> + <target state="translated">Рекомендации:</target> </trans-unit> <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> @@ -1629,7 +1629,7 @@ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Save current view</target> + <target state="translated">Сохранить текущее представление</target> </trans-unit> <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> @@ -1637,7 +1637,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Show all</target> + <target state="translated">Показать всё</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1645,7 +1645,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Statistics</target> + <target state="translated">Статистика</target> </trans-unit> <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + <target state="translated">Всего документов: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + <target state="translated">Документов во входящих: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + <target state="translated">Обрабатываются: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + <target state="translated">Ошибка: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + <target state="translated">Добавлено: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1693,7 +1693,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <target state="needs-translation">Connecting...</target> + <target state="translated">Подключение...</target> </trans-unit> <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Uploading...</target> + <target state="translated">Загрузка...</target> </trans-unit> <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> @@ -1709,7 +1709,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Upload complete, waiting...</target> + <target state="translated">Загрузка завершена, ждите...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + <target state="translated">HTTP ошибка: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1725,7 +1725,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Upload new documents</target> + <target state="translated">Загрузить новые документы</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1733,7 +1733,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Drop documents here or</target> + <target state="translated">Перетащите документы сюда или</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Browse files</target> + <target state="translated">Загрузить файлы</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1759,7 +1759,7 @@ <context context-type="linenumber">25</context> </context-group> <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Ещё один документ} other {<x id="INTERPOLATION"/> ещё документов}}</target> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> @@ -1767,7 +1767,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Открыть документ</target> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> @@ -1775,7 +1775,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">First steps</target> + <target state="translated">Первые шаги</target> </trans-unit> <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> - <target state="needs-translation">Paperless is running! :)</target> + <target state="translated">Paperless запущен! ;)</target> </trans-unit> <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> @@ -1791,7 +1791,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + <target state="translated">Вы можете загрузить документы, перетащив их на панель загрузки файлов справа, либо положив их в каталог, указанный в настройках. После обработки документы появятся в списке документов. После того, как вы добавите метаданные в свои документы, используйте безбумажные механизмы фильтрации для создания пользовательских представлений (таких как «Недавно добавленные», «Tagged TODO»), и они появятся на панели управления вместо этого сообщения.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + <target state="translated">Paperless предлагает больше возможностей сделать вашу жизнь легче:</target> </trans-unit> <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Метаданные</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1839,7 +1839,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Выбрать</target> </trans-unit> <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> @@ -1847,7 +1847,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Please select an object</target> + <target state="translated">Пожалуйста, выберите объект</target> </trans-unit> <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Invalid date.</target> + <target state="translated">Неверная дата.</target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1863,7 +1863,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Yes</target> + <target state="translated">Да</target> </trans-unit> <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> @@ -1871,7 +1871,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">No</target> + <target state="translated">Нет</target> </trans-unit> <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> @@ -1879,7 +1879,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">(no title)</target> + <target state="translated">(без заголовка)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="needs-translation">English (US)</target> + <target state="translated">Английский (США)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1895,7 +1895,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">English (GB)</target> + <target state="translated">Английский (Великобритании)</target> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="needs-translation">German</target> + <target state="translated">Немецкий</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1911,7 +1911,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> - <target state="needs-translation">Dutch</target> + <target state="translated">Голландский</target> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">French</target> + <target state="translated">Французский</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -1959,7 +1959,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Document already exists.</target> + <target state="translated">Такой документ уже существует.</target> </trans-unit> <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">File not found.</target> + <target state="translated">Файл не найден</target> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> @@ -2011,7 +2011,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Received new file.</target> + <target state="translated">Получен новый файл.</target> </trans-unit> <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> @@ -2019,7 +2019,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">File type not supported.</target> + <target state="translated">Этот тип файла не поддерживается</target> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> @@ -2027,7 +2027,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Processing document...</target> + <target state="translated">Обрабатываю документ...</target> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> @@ -2051,7 +2051,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Saving document...</target> + <target state="translated">Сохранение документа...</target> </trans-unit> <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> @@ -2059,7 +2059,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Finished.</target> + <target state="translated">Завершено.</target> </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> @@ -2067,7 +2067,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Error</target> + <target state="translated">Ошибка</target> </trans-unit> <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Информация</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Корреспонденция</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> @@ -2099,7 +2099,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Тип документа</target> </trans-unit> <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> @@ -2107,7 +2107,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Создано</target> </trans-unit> <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> @@ -2115,7 +2115,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Добавлено</target> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> @@ -2123,7 +2123,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Modified</target> + <target state="translated">Изменено</target> </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> @@ -2131,7 +2131,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">Create new item</target> + <target state="translated">Создать новый объект</target> </trans-unit> <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> @@ -2139,7 +2139,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="needs-translation">Edit item</target> + <target state="translated">Редактировать объект</target> </trans-unit> <trans-unit id="1699589597032579396" datatype="html"> <source>Could not save element: <x id="PH" equiv-text="error"/></source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + <target state="translated">Не могу сохранить элемент: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">Автоматически</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2163,7 +2163,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Do you really want to delete this element?</target> + <target state="translated">Вы действительно хотите удалить этот элемент?</target> </trans-unit> <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Удалить</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Возникла ошибка при удалении: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any word</target> + <target state="translated">Любые слова</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All words</target> + <target state="translated">Все слова</target> </trans-unit> <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact match</target> + <target state="translated">Точное соответствие</target> </trans-unit> <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">Регулярное выражение</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> From 4605c703138d3b915e6e43120ed2cffb0ae31b84 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:19 +0100 Subject: [PATCH 537/898] New translations django.po (Russian) [ci skip] --- src/locale/ru_RU/LC_MESSAGES/django.po | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index b6d2b89f3..e9f2c1fd5 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -19,23 +19,23 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Документы" #: documents/models.py:32 msgid "Any word" -msgstr "" +msgstr "Любые слова" #: documents/models.py:33 msgid "All words" -msgstr "" +msgstr "Все слова" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "Точное соответствие" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "Регулярное выражение" #: documents/models.py:36 msgid "Fuzzy word" @@ -43,7 +43,7 @@ msgstr "" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "Автоматически" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 @@ -398,23 +398,23 @@ msgstr "" #: paperless/settings.py:297 msgid "English (US)" -msgstr "" +msgstr "Английский (США)" #: paperless/settings.py:298 msgid "English (GB)" -msgstr "" +msgstr "Английский (Великобритании)" #: paperless/settings.py:299 msgid "German" -msgstr "" +msgstr "Немецкий" #: paperless/settings.py:300 msgid "Dutch" -msgstr "" +msgstr "Датский" #: paperless/settings.py:301 msgid "French" -msgstr "" +msgstr "Французский" #: paperless/settings.py:302 msgid "Portuguese (Brazil)" @@ -442,7 +442,7 @@ msgstr "" #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "" +msgstr "Действия" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." @@ -450,7 +450,7 @@ msgstr "" #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Метаданные" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -534,7 +534,7 @@ msgstr "" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "" +msgstr "Удалить" #: paperless_mail/models.py:88 msgid "Use subject as title" From 77fd71dc6128427285a36ee8d18c9ebe1742ad81 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:20 +0100 Subject: [PATCH 538/898] New translations messages.xlf (Portuguese) [ci skip] --- src-ui/src/locale/messages.pt_PT.xlf | 460 +++++++++++++-------------- 1 file changed, 230 insertions(+), 230 deletions(-) diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index c608fc3f6..95558d108 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -8,7 +8,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document added</target> + <target state="translated">Documento adicionado</target> </trans-unit> <trans-unit id="9204248378636247318" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + <target state="translated">Documento <x id="PH" equiv-text="status.filename"/> foi adicionado ao paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -24,7 +24,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Abrir documento</target> </trans-unit> <trans-unit id="8582620835547864448" datatype="html"> <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + <target state="translated">Não foi possível adicionar <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -40,7 +40,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">New document detected</target> + <target state="translated">Novo documento detectado</target> </trans-unit> <trans-unit id="587031278561344416" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + <target state="translated">Documento <x id="PH" equiv-text="status.filename"/> está sendo processado pelo paperless.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documentos</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + <target state="translated">Visualização "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" salva com sucesso.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + <target state="translated">Visualização "<x id="PH" equiv-text="savedView.name"/>" criada com sucesso.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Selecionar</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select none</target> + <target state="translated">Selecionar nenhum</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -96,7 +96,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Select page</target> + <target state="translated">Selecionar página</target> </trans-unit> <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> @@ -104,7 +104,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Select all</target> + <target state="translated">Selecionar todos</target> </trans-unit> <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> @@ -112,7 +112,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Sort</target> + <target state="translated">Ordenar</target> </trans-unit> <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="needs-translation">Views</target> + <target state="translated">Visualizações</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Save as...</target> + <target state="translated">Salvar como...</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + <target state="translated">Salvar "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -160,7 +160,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">(filtered)</target> + <target state="translated">(filtrado)</target> </trans-unit> <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">NSA</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondente</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -184,7 +184,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Título</target> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> @@ -192,7 +192,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Tipo de Documento</target> </trans-unit> <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> @@ -200,7 +200,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Criado</target> </trans-unit> <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> @@ -208,7 +208,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Adicionado</target> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">Confirm delete</target> + <target state="translated">Confirmar exclusão</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + <target state="translated">Você realmente deseja excluir o documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + <target state="translated">Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -240,7 +240,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> - <target state="needs-translation">Delete document</target> + <target state="translated">Excluir documento</target> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + <target state="translated">Erro ao excluir documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Excluir</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Download</target> + <target state="translated">Baixar</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -272,7 +272,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">More like this</target> + <target state="translated">Mais como este</target> </trans-unit> <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> @@ -280,7 +280,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Close</target> + <target state="translated">Fechar</target> </trans-unit> <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Detalhes</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -296,7 +296,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Content</target> + <target state="translated">Conteúdo</target> </trans-unit> <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadados</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -312,7 +312,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">Discard</target> + <target state="translated">Descartar</target> </trans-unit> <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> @@ -320,7 +320,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">Save</target> + <target state="translated">Salvar</target> </trans-unit> <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> @@ -328,7 +328,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Page</target> + <target state="translated">Página</target> </trans-unit> <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + <target state="translated">de <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -344,7 +344,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Download original</target> + <target state="translated">Baixar original</target> </trans-unit> <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="needs-translation">Archive serial number</target> + <target state="translated">Número de série de arquivamento</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -360,7 +360,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> - <target state="needs-translation">Date created</target> + <target state="translated">Data de criação</target> </trans-unit> <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> @@ -368,7 +368,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Date modified</target> + <target state="translated">Data de modificação</target> </trans-unit> <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> @@ -376,7 +376,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Date added</target> + <target state="translated">Data de adição</target> </trans-unit> <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Media filename</target> + <target state="translated">Nome do arquivo</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Original MD5 checksum</target> + <target state="translated">Soma de verificação MD5 original</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Original file size</target> + <target state="translated">Tamanho do arquivo original</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -408,7 +408,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Original mime type</target> + <target state="translated">Tipo mime original</target> </trans-unit> <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Archive MD5 checksum</target> + <target state="translated">Soma de verificação MD5 de arquivamento</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">Archive file size</target> + <target state="translated">Tamanho arquivado</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -432,7 +432,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> - <target state="needs-translation">Original document metadata</target> + <target state="translated">Metadados do documento original</target> </trans-unit> <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> @@ -440,7 +440,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> - <target state="needs-translation">Archived document metadata</target> + <target state="translated">Metadados do documento arquivado</target> </trans-unit> <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> @@ -448,7 +448,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> - <target state="needs-translation">Save & next</target> + <target state="translated">Salvar & próximo</target> </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + <target state="translated">Olá <x id="PH" equiv-text="this.displayName"/>, bem-vindo ao Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Welcome to Paperless-ng!</target> + <target state="translated">Bem-vindo ao Paperless-ng!</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Painel de controle</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Você realmente deseja excluir a etiqueta "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,7 +488,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Tags</target> + <target state="translated">Etiquetas</target> </trans-unit> <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> @@ -496,7 +496,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="needs-translation">Create</target> + <target state="translated">Criar</target> </trans-unit> <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Filter by:</target> + <target state="translated">Filtrar por:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -512,7 +512,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Name</target> + <target state="translated">Nome</target> </trans-unit> <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> @@ -520,7 +520,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Color</target> + <target state="translated">Cor</target> </trans-unit> <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> @@ -528,7 +528,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Matching</target> + <target state="translated">Detecção</target> </trans-unit> <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> @@ -536,7 +536,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Document count</target> + <target state="translated">Número de documentos</target> </trans-unit> <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Ações</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documentos</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -560,7 +560,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Edit</target> + <target state="translated">Editar</target> </trans-unit> <trans-unit id="4990731724078522539" datatype="html"> <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Você realmente deseja excluir o tipo de documento "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -576,7 +576,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Document types</target> + <target state="translated">Tipos de documento</target> </trans-unit> <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Logs</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + <target state="translated">Visualização "<x id="PH" equiv-text="savedView.name"/>" excluída.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -600,7 +600,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="needs-translation">Settings saved successfully.</target> + <target state="translated">Configurações salvas com sucesso.</target> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> @@ -608,7 +608,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Use system language</target> + <target state="translated">Usar linguagem do sistema</target> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="needs-translation">Use date format of display language</target> + <target state="translated">Usar formato de data da linguagem de exibição</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Erro ao salvar configurações: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -632,7 +632,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Settings</target> + <target state="translated">Configurações</target> </trans-unit> <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">General settings</target> + <target state="translated">Configurações gerais</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -648,7 +648,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="needs-translation">Notifications</target> + <target state="translated">Notificações</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="needs-translation">Saved views</target> + <target state="translated">Visualizações</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -664,7 +664,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Appearance</target> + <target state="translated">Aparência</target> </trans-unit> <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> @@ -672,7 +672,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Display language</target> + <target state="translated">Linguagem de exibição</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -680,7 +680,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">You need to reload the page after applying a new language.</target> + <target state="translated">Você precisar recarregar a página depois de escolher uma nova linguagem.</target> </trans-unit> <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> @@ -688,7 +688,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Date display</target> + <target state="translated">Exibição de data</target> </trans-unit> <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> @@ -696,7 +696,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Date format</target> + <target state="translated">Formato de data</target> </trans-unit> <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + <target state="translated">Curto: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + <target state="translated">Médio: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + <target state="translated">Longo: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -728,7 +728,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Items per page</target> + <target state="translated">Itens por página</target> </trans-unit> <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> @@ -736,7 +736,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> - <target state="needs-translation">Document editor</target> + <target state="translated">Editor de documentos</target> </trans-unit> <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Use PDF viewer provided by the browser</target> + <target state="translated">Usar visualizador de PDF do navegador</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + <target state="translated">Isso é geralmente mais rápido para exibir grandes documentos PDF, mas poderá não funcionar em alguns navegadores.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -760,7 +760,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Dark mode</target> + <target state="translated">Modo noturno</target> </trans-unit> <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> @@ -768,7 +768,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Use system settings</target> + <target state="translated">Usar configurações do sistema</target> </trans-unit> <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> @@ -776,7 +776,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Enable dark mode</target> + <target state="translated">Habilitar modo noturno</target> </trans-unit> <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> @@ -792,7 +792,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Bulk editing</target> + <target state="translated">Edição em massa</target> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Show confirmation dialogs</target> + <target state="translated">Mostrar janelas de confirmação</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + <target state="translated">Ao excluir um documento, sempre será pedido uma confirmação.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -816,7 +816,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> - <target state="needs-translation">Apply on close</target> + <target state="translated">Aplicar ao fechar</target> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> @@ -824,7 +824,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> - <target state="needs-translation">Document processing</target> + <target state="translated">Processamento de documentos</target> </trans-unit> <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> @@ -832,7 +832,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Show notifications when new documents are detected</target> + <target state="translated">Exibir notificações quando novos documentos forem detectados</target> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> @@ -840,7 +840,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> - <target state="needs-translation">Show notifications when document processing completes successfully</target> + <target state="translated">Exibir notificações quando o processamento de um documento concluir com sucesso</target> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> @@ -848,7 +848,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> - <target state="needs-translation">Show notifications when document processing fails</target> + <target state="translated">Exibir notificações quando o processamento de um documento falhar</target> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Suppress notifications on dashboard</target> + <target state="translated">Não exibir notificações no painel de controle</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + <target state="translated">Isso esconderá todas as mensagens sobre o status de processamento de documentos no painel de controle.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -872,7 +872,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> - <target state="needs-translation">Appears on</target> + <target state="translated">Aparece em</target> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="needs-translation">Show on dashboard</target> + <target state="translated">Exibir no painel de controle</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="needs-translation">Show in sidebar</target> + <target state="translated">Mostrar na navegação lateral</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -904,7 +904,7 @@ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">404 Not Found</target> + <target state="translated">404 Não encontrado</target> </trans-unit> <trans-unit id="7427874343955308724" datatype="html"> <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Correspondents</target> + <target state="translated">Correspondentes</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Last correspondence</target> + <target state="translated">Última correspondência</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -936,7 +936,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Confirmation</target> + <target state="translated">Confirmação</target> </trans-unit> <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> @@ -944,7 +944,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Confirm</target> + <target state="translated">Confirmar</target> </trans-unit> <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> @@ -952,7 +952,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Cancel</target> + <target state="translated">Cancelar</target> </trans-unit> <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new correspondent</target> + <target state="translated">Criar nova correspondência</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit correspondent</target> + <target state="translated">Editar correspondente</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Create new tag</target> + <target state="translated">Criar uma nova etiqueta</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1008,7 +1008,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Edit tag</target> + <target state="translated">Editar etiqueta</target> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + <target state="translated">Termo de pesquisa inválido: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated">A mostrar documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + <target state="translated">Termo de pesquisa: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + <target state="translated">Será que quer dizer "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1105,7 +1105,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Search documents</target> + <target state="translated">Procurar documentos</target> </trans-unit> <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> @@ -1113,7 +1113,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Logout</target> + <target state="translated">Terminar sessão</target> </trans-unit> <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="needs-translation">Documentation</target> + <target state="translated">Documentação</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">Github</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1161,7 +1161,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> - <target state="needs-translation">Suggest an idea</target> + <target state="translated">Sugerir uma ideia</target> </trans-unit> <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + <target state="translated">Sessão iniciada como <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1177,7 +1177,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Open documents</target> + <target state="translated">Abrir documentos</target> </trans-unit> <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Close all</target> + <target state="translated">Fechar todos</target> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> @@ -1193,7 +1193,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Título</target> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1249,7 +1249,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Without any tag</target> + <target state="translated">Sem etiquetas</target> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter tags</target> + <target state="translated">Filtrar etiquetas</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1306,7 +1306,7 @@ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Apply</target> + <target state="translated">Aplicar</target> </trans-unit> <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> @@ -1314,7 +1314,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Last 7 days</target> + <target state="translated">Últimos 7 dias</target> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Last month</target> + <target state="translated">Último mês</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1330,7 +1330,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> - <target state="needs-translation">Last 3 months</target> + <target state="translated">Últimos 3 meses</target> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> @@ -1338,7 +1338,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> - <target state="needs-translation">Last year</target> + <target state="translated">Último ano</target> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> @@ -1346,7 +1346,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">After</target> + <target state="translated">Antes</target> </trans-unit> <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> @@ -1354,7 +1354,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Before</target> + <target state="translated">Depois</target> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> @@ -1362,7 +1362,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Clear</target> + <target state="translated">Limpar</target> </trans-unit> <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">View</target> + <target state="translated">Ver</target> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + <target state="translated">Criado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Filter by tag</target> + <target state="translated">Filtrar por etiqueta</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Erro ao executar operação em massa: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" e "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> e "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1581,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">Delete document(s)</target> + <target state="translated">Apagar documento(s)</target> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> @@ -1589,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select:</target> + <target state="translated">Selecionar:</target> </trans-unit> <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> @@ -1597,7 +1597,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">All</target> + <target state="translated">Todos</target> </trans-unit> <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> @@ -1605,7 +1605,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Edit:</target> + <target state="translated">Editar:</target> </trans-unit> <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> @@ -1613,7 +1613,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Download originals</target> + <target state="translated">Descarregar originais</target> </trans-unit> <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> @@ -1621,7 +1621,7 @@ <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Suggestions:</target> + <target state="translated">Sugestões:</target> </trans-unit> <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> @@ -1645,7 +1645,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Statistics</target> + <target state="translated">Estatísticas</target> </trans-unit> <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + <target state="translated">Total de documentos: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + <target state="translated">Documentos na caixa de entrada: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + <target state="translated">Processando: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + <target state="translated">Falha: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + <target state="translated">Adicionado: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1693,7 +1693,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <target state="needs-translation">Connecting...</target> + <target state="translated">A ligar...</target> </trans-unit> <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Uploading...</target> + <target state="translated">A carregar...</target> </trans-unit> <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> @@ -1709,7 +1709,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Upload complete, waiting...</target> + <target state="translated">Carregamento concluído, à espera...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + <target state="translated">Erro HTTP: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1725,7 +1725,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Upload new documents</target> + <target state="translated">Carregar novos documentos</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1733,7 +1733,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Drop documents here or</target> + <target state="translated">Largar documentos aqui ou</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Browse files</target> + <target state="translated">Navegar ficheiros</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1767,7 +1767,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Abrir documento</target> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> - <target state="needs-translation">Paperless is running! :)</target> + <target state="translated">O Paperless está a correr! :)</target> </trans-unit> <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> @@ -1791,7 +1791,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + <target state="translated">Pode começar a carregar documentos deixando-os na caixa de carregamento de ficheiros à direita, ou deixando-os na pasta de consumo pré-configurada, que eles depois aparecem na lista de documentos. Depois de ter adicionado alguns meta-dados aos seus documentos, utilize os mecanismos de filtragem do Paperless para criar visualizações personalizadas (tais como 'Adicionados recentemente', 'Etiquetados com PARAFAZER'). Posteriormente estes aparecerão no painel em vez desta mensagem.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + <target state="translated">O Paperless oferece algumas funcionalidades para tentar tornar a sua vida mais fácil:</target> </trans-unit> <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> @@ -1807,7 +1807,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + <target state="translated">Assim que já tenha alguns documentos previamente adicionados com os respetivos meta-dados, o Paperless consegue adicionar automaticamente meta-dados aos novos documentos.</target> </trans-unit> <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> @@ -1815,7 +1815,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + <target state="translated">Pode configurar o Paperless para ler os seus e-mails e adicionar os documentos em anexo à plataforma.</target> </trans-unit> <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> @@ -1823,7 +1823,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + <target state="translated">Consulte a documentação para saber como utilizar estas funcionalidades. A secção sobre utilização básica têm informação para o ajudar a utilizar a plataforma de uma forma geral.</target> </trans-unit> <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadados</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1839,7 +1839,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Selecione</target> </trans-unit> <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> @@ -1847,7 +1847,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Please select an object</target> + <target state="translated">Por favor selecione um objeto</target> </trans-unit> <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> @@ -1863,7 +1863,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Yes</target> + <target state="translated">Sim</target> </trans-unit> <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> @@ -1871,7 +1871,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">No</target> + <target state="translated">Não</target> </trans-unit> <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> @@ -1879,7 +1879,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">(no title)</target> + <target state="translated">(sem título)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="needs-translation">English (US)</target> + <target state="translated">Inglês (US)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1895,7 +1895,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">English (GB)</target> + <target state="translated">Inglês (GB)</target> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="needs-translation">German</target> + <target state="translated">Alemão</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1911,7 +1911,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> - <target state="needs-translation">Dutch</target> + <target state="translated">Holandês</target> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">French</target> + <target state="translated">Francês</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -1959,7 +1959,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Document already exists.</target> + <target state="translated">Documento já existente.</target> </trans-unit> <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">File not found.</target> + <target state="translated">Arquivo não encontrado.</target> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> @@ -1976,7 +1976,7 @@ <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Pre-consume script does not exist.</target> + <target state="translated">Script pré-consumo não existe.</target> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -1985,7 +1985,7 @@ <context context-type="linenumber">18</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing pre-consume script.</target> + <target state="translated">Erro ao executar script pré-consumo.</target> </trans-unit> <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> @@ -1994,7 +1994,7 @@ <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Post-consume script does not exist.</target> + <target state="translated">Script pós-consumo não existe.</target> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> @@ -2003,7 +2003,7 @@ <context context-type="linenumber">20</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing post-consume script.</target> + <target state="translated">Erro ao executar script pós-consumo.</target> </trans-unit> <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> @@ -2011,7 +2011,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Received new file.</target> + <target state="translated">Novo arquivo recebido.</target> </trans-unit> <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> @@ -2019,7 +2019,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">File type not supported.</target> + <target state="translated">Tipo de arquivo não suportado.</target> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> @@ -2027,7 +2027,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Processing document...</target> + <target state="translated">Processando documento...</target> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> @@ -2035,7 +2035,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Generating thumbnail...</target> + <target state="translated">Gerando imagem...</target> </trans-unit> <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> @@ -2043,7 +2043,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Retrieving date from document...</target> + <target state="translated">Buscando data do documento...</target> </trans-unit> <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> @@ -2051,7 +2051,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Saving document...</target> + <target state="translated">Salvando documento...</target> </trans-unit> <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> @@ -2059,7 +2059,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Finished.</target> + <target state="translated">Encerrado.</target> </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> @@ -2067,7 +2067,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Error</target> + <target state="translated">Erro</target> </trans-unit> <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Informação</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">NSA</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondente</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> @@ -2099,7 +2099,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Tipo de Documento</target> </trans-unit> <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> @@ -2107,7 +2107,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Criado</target> </trans-unit> <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> @@ -2115,7 +2115,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Adicionado</target> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> @@ -2123,7 +2123,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Modified</target> + <target state="translated">Modificado</target> </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> @@ -2131,7 +2131,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">Create new item</target> + <target state="translated">Criar novo item</target> </trans-unit> <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> @@ -2139,7 +2139,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="needs-translation">Edit item</target> + <target state="translated">Editar item</target> </trans-unit> <trans-unit id="1699589597032579396" datatype="html"> <source>Could not save element: <x id="PH" equiv-text="error"/></source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + <target state="translated">Não podemos salvar elemento: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">Automático</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2163,7 +2163,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Do you really want to delete this element?</target> + <target state="translated">Você realmente quer excluir esse elemento?</target> </trans-unit> <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> @@ -2171,7 +2171,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="needs-translation">Associated documents will not be deleted.</target> + <target state="translated">Documentos associados não serão excluidos.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Excluir</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Erro ao excluir elemento: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any word</target> + <target state="translated">Qualquer palavra</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2203,7 +2203,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + <target state="translated">Qualquer: Documento contém qualquer uma dessas palavras (separadas por espaço)</target> </trans-unit> <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All words</target> + <target state="translated">Todas as palavras</target> </trans-unit> <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> @@ -2219,7 +2219,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All: Document contains all of these words (space separated)</target> + <target state="translated">Todas: Documento contém todas essas palavras (separadas por espaço)</target> </trans-unit> <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact match</target> + <target state="translated">Detecção exata</target> </trans-unit> <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> @@ -2235,7 +2235,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact: Document contains this string</target> + <target state="translated">Exata: Documento contém essa palavra</target> </trans-unit> <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">Expressão regular</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> @@ -2251,7 +2251,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression: Document matches this regular expression</target> + <target state="translated">Expressão regular: Documento condiz com essa expressão regular</target> </trans-unit> <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> @@ -2259,7 +2259,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy word</target> + <target state="translated">Palavra difusa</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> @@ -2267,7 +2267,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + <target state="translated">Fuzzy: Documento contém uma palavra similar à essa.</target> </trans-unit> <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> @@ -2275,7 +2275,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Auto: Learn matching automatically</target> + <target state="translated">Auto: Aprender detecção automaticamente</target> </trans-unit> </body> </file> From 70e183f8fba3a8b71d0704ccc761c86d250fad54 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:21 +0100 Subject: [PATCH 539/898] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 138 +++++++++++++-------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index f969efcdb..f41489571 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Document <x equiv-text="status.filename" id="PH"/> werd toegevoegd aan paperless.</target> + <target state="translated">Document <x id="PH" equiv-text="status.filename"/> werd toegevoegd aan paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -24,7 +24,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Open document</target> </trans-unit> <trans-unit id="8582620835547864448" datatype="html"> <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Kon niet toevoegen <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Kon niet toevoegen <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Document <x equiv-text="status.filename" id="PH"/> wordt verwerkt door paperless.</target> + <target state="translated">Document <x id="PH" equiv-text="status.filename"/> wordt verwerkt door paperless.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">View "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" met succes opgeslagen.</target> + <target state="translated">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" met succes opgeslagen.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">View "<x equiv-text="savedView.name" id="PH"/>" met succes gemaakt.</target> + <target state="translated">View "<x id="PH" equiv-text="savedView.name"/>" met succes gemaakt.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="needs-translation">Views</target> + <target state="translated">Views</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Opslaan "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <target state="translated">Opslaan "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondent</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Wilt u het document echt verwijderen "<x equiv-text="this.document.title" id="PH"/>"?</target> + <target state="translated">Wilt u het document echt verwijderen "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Fout bij het verwijderen van het document: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Fout bij het verwijderen van het document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Download</target> + <target state="translated">Download</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Details</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadata</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">van <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">van <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Hallo <x equiv-text="this.displayName" id="PH"/>, welkom bij Paperless-ng!</target> + <target state="translated">Hallo <x id="PH" equiv-text="this.displayName"/>, welkom bij Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Dashboard</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Wil je het etiket echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Wil je het etiket echt verwijderen "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Wilt u het documenttype echt verwijderen "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Wilt u het documenttype echt verwijderen "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Logs</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Opgeslagen view "<x equiv-text="savedView.name" id="PH"/>" verwijderd.</target> + <target state="translated">Opgeslagen view "<x id="PH" equiv-text="savedView.name"/>" verwijderd.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Fout bij het opslaan van de instellingen: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Fout bij het opslaan van de instellingen: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Kort: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Kort: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Medium: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Lang: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Lang: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -784,7 +784,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="translated">Toon negatief van previews in nachtmodus</target> + <target state="translated">Toon negatief van voorbeeldweergave in nachtmodus</target> </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Bent u zeker dat u correspondent "<x equiv-text="object.name" id="PH"/>" wilt verwijderen?</target> + <target state="translated">Bent u zeker dat u correspondent "<x id="PH" equiv-text="object.name"/>" wilt verwijderen?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Ongeldige zoekopdracht: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Ongeldige zoekopdracht: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Toon documenten die lijken op <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <target state="translated">Toon documenten die lijken op <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Zoekopdracht: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Zoekopdracht: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Bedoelde u "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <target state="translated">Bedoelde u "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Aangemeld als <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Aangemeld als <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Correspondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Type: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Etiket: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Etiket: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Titel: <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Aangemaakt op: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Aangemaakt op: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="needs-translation">Score:</target> + <target state="translated">Score:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Fout bij het uitvoeren van een massabewerking: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Fout bij het uitvoeren van een massabewerking: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" en "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" en "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/> en "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> en "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Het etiket "<x equiv-text="tag.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <target state="translated">Het etiket "<x id="PH" equiv-text="tag.name"/>" zal aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <target state="translated">De etiketten <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> zullen aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Het etiket "<x equiv-text="tag.name" id="PH"/>" zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> + <target state="translated">Het etiket "<x id="PH" equiv-text="tag.name"/>" zal verwijderd worden van <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">De etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en).</target> + <target state="translated">De etiketten <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> zullen verwijderd worden van <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">De etiketten <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> zullen toegevoegd worden aan, en de etiketten <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> zullen verwijderd worden van <x equiv-text="this.list.selected.size" id="PH_2"/> geselecteerd(e) document(en).</target> + <target state="translated">De etiketten <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> zullen toegevoegd worden aan, en de etiketten <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> zullen verwijderd worden van <x id="PH_2" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">De correspondent "<x equiv-text="correspondent.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <target state="translated">De correspondent "<x id="PH" equiv-text="correspondent.name"/>" zal aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">De correspondent zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> + <target state="translated">De correspondent zal verwijderd worden van <x id="PH" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">Het documenttype "<x equiv-text="documentType.name" id="PH"/>" zal aan <x equiv-text="this.list.selected.size" id="PH_1"/> geselecteerd(e) document(en) worden toegewezen.</target> + <target state="translated">Het documenttype "<x id="PH" equiv-text="documentType.name"/>" zal aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Het documenttype zal verwijderd worden van <x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en).</target> + <target state="translated">Het documenttype zal verwijderd worden van <x id="PH" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated"><x equiv-text="this.list.selected.size" id="PH"/> geselecteerd(e) document(en) zullen permanent worden verwijderd.</target> + <target state="translated"><x id="PH" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) zullen permanent worden verwijderd.</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Totaal aantal documenten: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Totaal aantal documenten: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documenten in "Postvak in": <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Documenten in "Postvak in": <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Bezig met verwerken: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">Bezig met verwerken: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Gefaald: <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Gefaald: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Toegevoegd: <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Toegevoegd: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">HTTP fout: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">HTTP fout: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1767,7 +1767,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Open document</target> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadata</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondent</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Kon het element niet opslaan: <x equiv-text="error" id="PH"/></target> + <target state="translated">Kon het element niet opslaan: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Fout bij het verwijderen van het element: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Fout bij het verwijderen van het element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> From c14629de6b6ee9017548b4c58c023f59d12681e2 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:23 +0100 Subject: [PATCH 540/898] New translations messages.xlf (Romanian) [ci skip] --- src-ui/src/locale/messages.ro_RO.xlf | 112 +++++++++++++-------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 712527fb4..c52bd0460 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Documentul <x equiv-text="status.filename" id="PH"/> a fost adaugat</target> + <target state="translated">Documentul <x id="PH" equiv-text="status.filename"/> a fost adaugat</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Nu s-a putut adauga <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Nu s-a putut adauga <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Documentul <x equiv-text="status.filename" id="PH"/> este in procesare</target> + <target state="translated">Documentul <x id="PH" equiv-text="status.filename"/> este in procesare</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Vizualizarea "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" a fost salvata</target> + <target state="translated">Vizualizarea "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" a fost salvata</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost creata</target> + <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost creata</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Salveaza "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <target state="translated">Salveaza "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti documentul "<x equiv-text="this.document.title" id="PH"/>"?</target> + <target state="translated">Sunteti sigur ca doriti sa stergeti documentul "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Eroare la stergerea documentului: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Eroare la stergerea documentului: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">din <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">din <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Salut, <x equiv-text="this.displayName" id="PH"/>, bine ai venit la Paperless-ng!</target> + <target state="translated">Salut, <x id="PH" equiv-text="this.displayName"/>, bine ai venit la Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti eticheta "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Sunteti sigur ca doriti sa stergeti eticheta "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti tipul de document "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Sunteti sigur ca doriti sa stergeti tipul de document "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Vizualizarea "<x equiv-text="savedView.name" id="PH"/>" a fost stearsa.</target> + <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost stearsa.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Eroare la stocarea setarilor pe server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Eroare la stocarea setarilor pe server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Scurt: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Scurt: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Mediu: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Mediu: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Lung: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Lung: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti corespondentul "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Sunteti sigur ca doriti sa stergeti corespondentul "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Interogare invalida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Interogare invalida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Documente similare cu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/> </target> + <target state="translated">Documente similare cu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/> </target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Interogare: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Interogare: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Ati vrut sa scrieti "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <target state="translated">Ati vrut sa scrieti "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Autentificat ca <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Autentificat ca <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Corespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Corespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Tip: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Tip: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Eticheta: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Eticheta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Titlu: <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Titlu: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Creat: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Creat: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Eroare la executarea operatiunii in bloc: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Eroare la executarea operatiunii in bloc: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" si "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" si "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/> si "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> si "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Va fi adaugata eticheta "<x equiv-text="tag.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <target state="translated">Va fi adaugata eticheta "<x id="PH" equiv-text="tag.name"/>" la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <target state="translated">Vor fi adaugate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Va fi eliminata eticheta "<x equiv-text="tag.name" id="PH"/>" din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <target state="translated">Va fi eliminata eticheta "<x id="PH" equiv-text="tag.name"/>" din <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">Vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> din <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <target state="translated">Vor fi eliminate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> din <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">Vor fi adaugate etichetele <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> si vor fi eliminate etichetele <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> pentru <x equiv-text="this.list.selected.size" id="PH_2"/> document(e) selectat(e).</target> + <target state="translated">Vor fi adaugate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> si vor fi eliminate etichetele <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> pentru <x id="PH_2" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">Va fi adaugat corespondentul "<x equiv-text="correspondent.name" id="PH"/>" la <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <target state="translated">Va fi adaugat corespondentul "<x id="PH" equiv-text="correspondent.name"/>" la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Va fi eliminat corespondentul din <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> + <target state="translated">Va fi eliminat corespondentul din <x id="PH" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">Va fi atribuit tipul "<x equiv-text="documentType.name" id="PH"/>" pentru <x equiv-text="this.list.selected.size" id="PH_1"/> document(e) selectat(e).</target> + <target state="translated">Va fi atribuit tipul "<x id="PH" equiv-text="documentType.name"/>" pentru <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Va fi eliminat tipul pentru <x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e).</target> + <target state="translated">Va fi eliminat tipul pentru <x id="PH" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated"><x equiv-text="this.list.selected.size" id="PH"/> document(e) selectat(e) vor fi sterse permanent.</target> + <target state="translated"><x id="PH" equiv-text="this.list.selected.size"/> document(e) selectat(e) vor fi sterse permanent.</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Total documente: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Total documente: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documente in inbox: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Documente in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">In procesare: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">In procesare: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Esuate: <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Esuate: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Adaugate: <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Adaugate: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Eroare HTTP: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">Eroare HTTP: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Nu s-a putut salva elementul: <x equiv-text="error" id="PH"/></target> + <target state="translated">Nu s-a putut salva elementul: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Eroare la stergerea elementului: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Eroare la stergerea elementului: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> From 73d5bafc0b79fd5013fbd25443b32c9bad97143c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:23 +0100 Subject: [PATCH 541/898] New translations django.po (Dutch) [ci skip] --- src/locale/nl_NL/LC_MESSAGES/django.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 7aba94bba..549ba4842 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -64,7 +64,7 @@ msgstr "is niet hoofdlettergevoelig" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "" +msgstr "correspondent" #: documents/models.py:75 msgid "correspondents" @@ -124,7 +124,7 @@ msgstr "mimetype" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "checksum" #: documents/models.py:159 msgid "The checksum of the original document." @@ -180,7 +180,7 @@ msgstr "De positie van dit document in je fysieke documentenarchief." #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "document" #: documents/models.py:224 msgid "documents" @@ -188,7 +188,7 @@ msgstr "documenten" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "debug" #: documents/models.py:312 msgid "information" @@ -264,11 +264,11 @@ msgstr "inhoud bevat" #: documents/models.py:372 msgid "ASN is" -msgstr "" +msgstr "ASN is" #: documents/models.py:373 msgid "correspondent is" -msgstr "" +msgstr "correspondent is" #: documents/models.py:374 msgid "document type is" @@ -434,7 +434,7 @@ msgstr "Paperless-ng administratie" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Filter" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." @@ -450,7 +450,7 @@ msgstr "De actie die wordt toegepast op de mail. Deze actie wordt alleen uitgevo #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Metadata" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -566,7 +566,7 @@ msgstr "volgorde" #: paperless_mail/models.py:120 msgid "account" -msgstr "" +msgstr "account" #: paperless_mail/models.py:124 msgid "folder" From 567bc22c0c7c1b68dede4a25c7b698ce4fcdbbfd Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:25 +0100 Subject: [PATCH 542/898] New translations messages.xlf (Italian) [ci skip] --- src-ui/src/locale/messages.it_IT.xlf | 114 +++++++++++++-------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 19821f8b3..489bdda42 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Il documento <x equiv-text="status.filename" id="PH"/> è stato aggiunto a paperless.</target> + <target state="translated">Il documento <x id="PH" equiv-text="status.filename"/> è stato aggiunto a paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Impossibile aggiungere <x equiv-text="status.filename" id="PH"/>: <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Impossibile aggiungere <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Paperless sta elaborando il documento <x equiv-text="status.filename" id="PH"/>.</target> + <target state="translated">Paperless sta elaborando il documento <x id="PH" equiv-text="status.filename"/>.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">La vista "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" è stata salvata.</target> + <target state="translated">La vista "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" è stata salvata.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">La vista "<x equiv-text="savedView.name" id="PH"/>" è stata creata.</target> + <target state="translated">La vista "<x id="PH" equiv-text="savedView.name"/>" è stata creata.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Salva "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <target state="translated">Salva "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Vuoi eliminare il documento "<x equiv-text="this.document.title" id="PH"/>"?</target> + <target state="translated">Vuoi eliminare il documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Errore nell'eliminazione del documento: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Errore nell'eliminazione del documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">di <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">di <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Ciao <x equiv-text="this.displayName" id="PH"/>, benvenuto su Paperless-ng!</target> + <target state="translated">Ciao <x id="PH" equiv-text="this.displayName"/>, benvenuto su Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Dashboard</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Vuoi eliminare il tag "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Vuoi eliminare il tag "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Vuoi eliminare il tipo di documento "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Vuoi eliminare il tipo di documento "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">La vista "<x equiv-text="savedView.name" id="PH"/>" è stata eliminata. </target> + <target state="translated">La vista "<x id="PH" equiv-text="savedView.name"/>" è stata eliminata. </target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Errore durante il salvataggio delle impostazioni sul server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Errore durante il salvataggio delle impostazioni sul server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Breve: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Breve: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Media: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Media: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Lunga: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Lunga: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Vuoi eliminare il corrispondente "<x equiv-text="object.name" id="PH"/>"?</target> + <target state="translated">Vuoi eliminare il corrispondente "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Query di ricerca non valida: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Query di ricerca non valida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Documenti simili a <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <target state="translated">Documenti simili a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Query di ricerca: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Query di ricerca: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Forse intendevi "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <target state="translated">Forse intendevi "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Accesso effettuato come <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Accesso effettuato come <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Corrispondente: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Corrispondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Tipo: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Titolo: <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Titolo: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Creato il: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Creato il: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Errore durante l'operazione di modifica in blocco: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Errore durante l'operazione di modifica in blocco: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" e "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" e "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/>e "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/>e "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Questa operazione aggiungerà il tag "<x equiv-text="tag.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione aggiungerà il tag "<x id="PH" equiv-text="tag.name"/>" a <x id="PH_1" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione aggiungerà i tag <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> a <x id="PH_1" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Questa operazione rimuoverà il tag "<x equiv-text="tag.name" id="PH"/>" da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i. </target> + <target state="translated">Questa operazione rimuoverà il tag "<x id="PH" equiv-text="tag.name"/>" da <x id="PH_1" equiv-text="this.list.selected.size"/> documento/i selezionato/i. </target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">Questa operazione rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> da <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione rimuoverà i tag <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> da <x id="PH_1" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">Questa operazione aggiungerà i tag <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> e rimuoverà i tag <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> a <x equiv-text="this.list.selected.size" id="PH_2"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione aggiungerà i tag <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> e rimuoverà i tag <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> a <x id="PH_2" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">Questa operazione assegnerà il corrispondente "<x equiv-text="correspondent.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione assegnerà il corrispondente "<x id="PH" equiv-text="correspondent.name"/>" a <x id="PH_1" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Questa operazione rimuoverà il corrispondente da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione rimuoverà il corrispondente da <x id="PH" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">Questa operazione assegnerà il tipo di documento "<x equiv-text="documentType.name" id="PH"/>" a <x equiv-text="this.list.selected.size" id="PH_1"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione assegnerà il tipo di documento "<x id="PH" equiv-text="documentType.name"/>" a <x id="PH_1" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Questa operazione eliminerà il tipo di documento da <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i. </target> + <target state="translated">Questa operazione eliminerà il tipo di documento da <x id="PH" equiv-text="this.list.selected.size"/> documento/i selezionato/i. </target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated">Questa operazione eliminerà definitivamente <x equiv-text="this.list.selected.size" id="PH"/> documento/i selezionato/i.</target> + <target state="translated">Questa operazione eliminerà definitivamente <x id="PH" equiv-text="this.list.selected.size"/> documento/i selezionato/i.</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Documenti totali: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Documenti totali: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documenti taggati in arrivo: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Documenti taggati in arrivo: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Elaborazione in corso: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">Elaborazione in corso: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Falliti: <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Falliti: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Aggiunti: <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Aggiunti: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Errore HTTP: <x equiv-text="error.status" id="PH"/><x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">Errore HTTP: <x id="PH" equiv-text="error.status"/><x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1871,7 +1871,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">No</target> + <target state="translated">No</target> </trans-unit> <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Non è possibile salvare l'elemento: <x equiv-text="error" id="PH"/></target> + <target state="translated">Non è possibile salvare l'elemento: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Errore durante l'eliminazione dell'elemento: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Errore durante l'eliminazione dell'elemento: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> From 807b97c48083c17b56c3654172dba494372c86b3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:26 +0100 Subject: [PATCH 543/898] New translations django.po (Italian) [ci skip] --- src/locale/it_IT/LC_MESSAGES/django.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 8e9118139..e1a7e461f 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -84,7 +84,7 @@ msgstr "Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "tag" #: documents/models.py:95 documents/models.py:151 msgid "tags" @@ -124,7 +124,7 @@ msgstr "tipo mime" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "checksum" #: documents/models.py:159 msgid "The checksum of the original document." @@ -188,7 +188,7 @@ msgstr "documenti" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "debug" #: documents/models.py:312 msgid "information" @@ -220,7 +220,7 @@ msgstr "livello" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "log" #: documents/models.py:333 msgid "logs" @@ -390,7 +390,7 @@ msgstr "Nome utente" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "" +msgstr "Password" #: documents/templates/registration/login.html:54 msgid "Sign in" @@ -502,7 +502,7 @@ msgstr "nome utente" #: paperless_mail/models.py:50 msgid "password" -msgstr "" +msgstr "password" #: paperless_mail/models.py:60 msgid "mail rule" @@ -566,7 +566,7 @@ msgstr "priorità" #: paperless_mail/models.py:120 msgid "account" -msgstr "" +msgstr "account" #: paperless_mail/models.py:124 msgid "folder" From 2dd57d3d65525489f273e46dd37631b288883ac5 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:27 +0100 Subject: [PATCH 544/898] New translations messages.xlf (Hungarian) [ci skip] --- src-ui/src/locale/messages.hu_HU.xlf | 336 +++++++++++++-------------- 1 file changed, 168 insertions(+), 168 deletions(-) diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 909b1b104..9c474471b 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Dokumentumok</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + <target state="translated">Nézet "<x id="PH" equiv-text="savedView.name"/>" sikeresen létrehozva.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Kijelölés</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select none</target> + <target state="translated">Kijelölés törlése</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -96,7 +96,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Select page</target> + <target state="translated">Oldal kijelölése</target> </trans-unit> <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> @@ -104,7 +104,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Select all</target> + <target state="translated">Mindent kijelöl</target> </trans-unit> <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="needs-translation">Views</target> + <target state="translated">Nézet</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Save as...</target> + <target state="translated">Mentés másként</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Partner</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -184,7 +184,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Cím</target> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> @@ -192,7 +192,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Dokumentum típus</target> </trans-unit> <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> @@ -200,7 +200,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Létrehozva</target> </trans-unit> <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> @@ -208,7 +208,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Hozzáadva</target> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">Confirm delete</target> + <target state="translated">Törlés megerősítése</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + <target state="translated">A dokumentumhoz tartozó fájlok véglegesen törlésre kerülnek. Ez a művelet nem visszafordítható.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -240,7 +240,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> - <target state="needs-translation">Delete document</target> + <target state="translated">Dokumentum törlése</target> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Törlés</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Download</target> + <target state="translated">Letöltés</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -272,7 +272,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">More like this</target> + <target state="translated">Ehhez hasonlók</target> </trans-unit> <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> @@ -280,7 +280,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Close</target> + <target state="translated">Bezárás</target> </trans-unit> <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Részletek</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -296,7 +296,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Content</target> + <target state="translated">Tartalom</target> </trans-unit> <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metaadat</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -312,7 +312,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">Discard</target> + <target state="translated">Elvetés</target> </trans-unit> <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> @@ -320,7 +320,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">Save</target> + <target state="translated">Mentés</target> </trans-unit> <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> @@ -328,7 +328,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Page</target> + <target state="translated">Oldal</target> </trans-unit> <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + <target state="translated">/ <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -344,7 +344,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Download original</target> + <target state="translated">Eredeti letöltése</target> </trans-unit> <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="needs-translation">Archive serial number</target> + <target state="translated">Archívum sorozat szám</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -360,7 +360,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> - <target state="needs-translation">Date created</target> + <target state="translated">Létrehozás dátuma</target> </trans-unit> <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> @@ -368,7 +368,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Date modified</target> + <target state="translated">Módosítás dátuma</target> </trans-unit> <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> @@ -376,7 +376,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Date added</target> + <target state="translated">Hozzáadás dátuma</target> </trans-unit> <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Media filename</target> + <target state="translated">Média fájlnév</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Original MD5 checksum</target> + <target state="translated">Eredeti MD5 ellenőrző szám</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Original file size</target> + <target state="translated">Eredeti fájl méret</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -408,7 +408,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Original mime type</target> + <target state="translated">Eredeti MIME típus</target> </trans-unit> <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Archive MD5 checksum</target> + <target state="translated">Archívum MD5 ellenőrző szám</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">Archive file size</target> + <target state="translated">Archív fájl mérete</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -432,7 +432,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> - <target state="needs-translation">Original document metadata</target> + <target state="translated">Eredeti dokumentum metaadat</target> </trans-unit> <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> @@ -440,7 +440,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> - <target state="needs-translation">Archived document metadata</target> + <target state="translated">Archivált dokumentum metaadat</target> </trans-unit> <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> @@ -448,7 +448,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> - <target state="needs-translation">Save & next</target> + <target state="translated">Mentés & Következő</target> </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + <target state="translated">Hello <x id="PH" equiv-text="this.displayName"/>, a Paperless-ng üdvözöl Téged!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Welcome to Paperless-ng!</target> + <target state="translated">Üdvözöl a Paperless-ng!</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Vezérlőpult</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Valóban törölni akarod a "<x id="PH" equiv-text="object.name"/>" címkét?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,7 +488,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Tags</target> + <target state="translated">Cimkék</target> </trans-unit> <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> @@ -496,7 +496,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="needs-translation">Create</target> + <target state="translated">Létrehozás</target> </trans-unit> <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Filter by:</target> + <target state="translated">Szűrés:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -512,7 +512,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Name</target> + <target state="translated">Név</target> </trans-unit> <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> @@ -520,7 +520,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Color</target> + <target state="translated">Szín</target> </trans-unit> <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> @@ -528,7 +528,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Matching</target> + <target state="translated">Egyezés</target> </trans-unit> <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> @@ -536,7 +536,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Document count</target> + <target state="translated">Dokumentum szám</target> </trans-unit> <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Műveletek</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Dokumentumok</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -560,7 +560,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Edit</target> + <target state="translated">Szerkesztés</target> </trans-unit> <trans-unit id="4990731724078522539" datatype="html"> <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Valóban törölni akarod a "<x id="PH" equiv-text="object.name"/>" dokumentum típust?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -576,7 +576,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Document types</target> + <target state="translated">Dokumentum típusok</target> </trans-unit> <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Napló</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -600,7 +600,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="needs-translation">Settings saved successfully.</target> + <target state="translated">Beállítások elmentve.</target> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Hiba történt a beállitások mentése közben: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -632,7 +632,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Settings</target> + <target state="translated">Beállitások</target> </trans-unit> <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">General settings</target> + <target state="translated">Általános beállitások</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="needs-translation">Saved views</target> + <target state="translated">Mentett nézetek</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -728,7 +728,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Items per page</target> + <target state="translated">Oldalankénti elemek száma</target> </trans-unit> <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> @@ -792,7 +792,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Bulk editing</target> + <target state="translated">Csoportos szerkesztés</target> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Show confirmation dialogs</target> + <target state="translated">Jóváhagyó dialógusok mutatása</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + <target state="translated">Dokumentumok törlése mindig jóváhagyást igényel</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -816,7 +816,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> - <target state="needs-translation">Apply on close</target> + <target state="translated">Alkalmazás bezárás után</target> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> @@ -872,7 +872,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> - <target state="needs-translation">Appears on</target> + <target state="translated">Megjelenés</target> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="needs-translation">Show on dashboard</target> + <target state="translated">Vezérlőpulton megjelenítés</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="needs-translation">Show in sidebar</target> + <target state="translated">Oldal menüben megjelenítés</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">No saved views defined.</target> + <target state="translated">Nincs mentett nézet definiálva.</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -904,7 +904,7 @@ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">404 Not Found</target> + <target state="translated">404 Nem található</target> </trans-unit> <trans-unit id="7427874343955308724" datatype="html"> <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Valóban törölni szerenéd a következő partnert: "<x id="PH" equiv-text="object.name"/>" ?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Correspondents</target> + <target state="translated">Partnerek</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Last correspondence</target> + <target state="translated">Utolsó partner</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -936,7 +936,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Confirmation</target> + <target state="translated">Jóváhagyás</target> </trans-unit> <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> @@ -944,7 +944,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Confirm</target> + <target state="translated">Jóváhagy</target> </trans-unit> <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> @@ -952,7 +952,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Cancel</target> + <target state="translated">Megszakítás</target> </trans-unit> <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new correspondent</target> + <target state="translated">Új partner létrehozása</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit correspondent</target> + <target state="translated">Partner szerkesztése</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Matching algorithm</target> + <target state="translated">Egyeztető algoritmus</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -992,7 +992,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Case insensitive</target> + <target state="translated">Kisbetű-nagybetű érzékenység</target> </trans-unit> <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Create new tag</target> + <target state="translated">Új cimke készítése</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1008,7 +1008,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Edit tag</target> + <target state="translated">Cimke szerkesztés</target> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tag</target> + <target state="translated">Inbox cimke</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + <target state="translated">Az "inbox" cimkék automatikusan hozzárendelődnek a feldolgozott dokumentumokhoz.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1032,7 +1032,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new document type</target> + <target state="translated">Új dokumentum tipus létrehozása</target> </trans-unit> <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> @@ -1040,7 +1040,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit document type</target> + <target state="translated">Dokumentum típus szerkesztése</target> </trans-unit> <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> @@ -1048,7 +1048,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Search results</target> + <target state="translated">Találatok</target> </trans-unit> <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + <target state="translated">Érvénytelen keresési kifejezés: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated"><x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/> -hez hasonló dokumentumok mutatása</target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + <target state="translated">Keresés: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + <target state="translated">Úgy értetted, hogy "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1113,7 +1113,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Logout</target> + <target state="translated">Kilépés</target> </trans-unit> <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> @@ -1121,7 +1121,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> - <target state="needs-translation">Manage</target> + <target state="translated">Menedzselés</target> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="needs-translation">Admin</target> + <target state="translated">Adminisztráció</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="needs-translation">Documentation</target> + <target state="translated">Dokumentáció</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1177,7 +1177,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Open documents</target> + <target state="translated">Dokumentum megnyitása</target> </trans-unit> <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Close all</target> + <target state="translated">Összes bezárása</target> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> @@ -1193,7 +1193,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Cím</target> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + <target state="translated">Partner: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + <target state="translated">Típus: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + <target state="translated">Cimke: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter tags</target> + <target state="translated">Cimkék szerinti szűrés</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> - <target state="needs-translation">Filter correspondents</target> + <target state="translated">Partnerek szerinti szűrés</target> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> @@ -1281,7 +1281,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Filter document types</target> + <target state="translated">Dokumentum típus szerinti szűrés</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1298,7 +1298,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="needs-translation">Not assigned</target> + <target state="translated">Nincs hozzárendelés</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1306,7 +1306,7 @@ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Apply</target> + <target state="translated">Alkalmaz</target> </trans-unit> <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> @@ -1314,7 +1314,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Last 7 days</target> + <target state="translated">Utolsó 7 nap</target> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Last month</target> + <target state="translated">Előző hónap</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1330,7 +1330,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> - <target state="needs-translation">Last 3 months</target> + <target state="translated">Előző 3 hónap</target> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> @@ -1338,7 +1338,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> - <target state="needs-translation">Last year</target> + <target state="translated">Előző év</target> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> @@ -1346,7 +1346,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">After</target> + <target state="translated">Után</target> </trans-unit> <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> @@ -1354,7 +1354,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Before</target> + <target state="translated">Előtte</target> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> @@ -1362,7 +1362,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Clear</target> + <target state="translated">Törlés</target> </trans-unit> <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">View</target> + <target state="translated">Megtekint</target> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + <target state="translated">Létrehozva: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter by correspondent</target> + <target state="translated">Partner szerinti szűrés</target> </trans-unit> <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Filter by tag</target> + <target state="translated">Cimke szerinti szűrés</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="needs-translation">Score:</target> + <target state="translated">Pont:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1410,7 +1410,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> - <target state="needs-translation">View in browser</target> + <target state="translated">Megtekintés böngészőben</target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" és "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> és "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1461,7 +1461,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="needs-translation">Confirm tags assignment</target> + <target state="translated">Cimke hozzárendelés jóváhagyása</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1509,7 +1509,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="needs-translation">Confirm correspondent assignment</target> + <target state="translated">Partner hozzárendelés megerősítése</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1533,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> - <target state="needs-translation">Confirm document type assignment</target> + <target state="translated">Dokumentum típus hozzárendelés megerősítése</target> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1557,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> - <target state="needs-translation">Delete confirm</target> + <target state="translated">Törlés megerősítése</target> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1573,7 +1573,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">This operation cannot be undone.</target> + <target state="translated">Ez a művelet nem visszafordítható.</target> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> @@ -1581,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">Delete document(s)</target> + <target state="translated">Dokumentum(ok) törlése</target> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> @@ -1589,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select:</target> + <target state="translated">Kijelöl</target> </trans-unit> <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> @@ -1597,7 +1597,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">All</target> + <target state="translated">Mind</target> </trans-unit> <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> @@ -1605,7 +1605,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Edit:</target> + <target state="translated">Szerkeszt:</target> </trans-unit> <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> @@ -1629,7 +1629,7 @@ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Save current view</target> + <target state="translated">Jelenlegi nézet mentése</target> </trans-unit> <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> @@ -1637,7 +1637,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Show all</target> + <target state="translated">Mindent megjelenít</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1645,7 +1645,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Statistics</target> + <target state="translated">Statisztika</target> </trans-unit> <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> @@ -1725,7 +1725,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Upload new documents</target> + <target state="translated">Új dokumentum feltöltése</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1733,7 +1733,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Drop documents here or</target> + <target state="translated">Húzz ide dokumentumokat, vagy</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Browse files</target> + <target state="translated">Fájl böngészése</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1775,7 +1775,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">First steps</target> + <target state="translated">Első lépések</target> </trans-unit> <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> - <target state="needs-translation">Paperless is running! :)</target> + <target state="translated">A Paperless üzemel! :)</target> </trans-unit> <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metaadat</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1839,7 +1839,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Kijelöl</target> </trans-unit> <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> @@ -1847,7 +1847,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Please select an object</target> + <target state="translated">Kérem válaszon egy elemet</target> </trans-unit> <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> @@ -1863,7 +1863,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Yes</target> + <target state="translated">Igen</target> </trans-unit> <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> @@ -1871,7 +1871,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">No</target> + <target state="translated">Nem</target> </trans-unit> <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> @@ -1879,7 +1879,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">(no title)</target> + <target state="translated">(nincs cím)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="needs-translation">English (US)</target> + <target state="translated">Angol (US)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="needs-translation">German</target> + <target state="translated">Német</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -2067,7 +2067,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Error</target> + <target state="translated">Hiba</target> </trans-unit> <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Információ</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Partner</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> @@ -2099,7 +2099,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Dokumentum típus</target> </trans-unit> <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> @@ -2107,7 +2107,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Létrehozva</target> </trans-unit> <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> @@ -2115,7 +2115,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Hozzáadva</target> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> @@ -2123,7 +2123,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Modified</target> + <target state="translated">Módosítva</target> </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> @@ -2131,7 +2131,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">Create new item</target> + <target state="translated">Új elem létrehozása</target> </trans-unit> <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> @@ -2139,7 +2139,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="needs-translation">Edit item</target> + <target state="translated">Elem szerkesztése</target> </trans-unit> <trans-unit id="1699589597032579396" datatype="html"> <source>Could not save element: <x id="PH" equiv-text="error"/></source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + <target state="translated">Hiba az elem mentése során: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">Automatikus</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2163,7 +2163,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Do you really want to delete this element?</target> + <target state="translated">Valóban törölni szeretnéd ezt az elemet?</target> </trans-unit> <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> @@ -2171,7 +2171,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="needs-translation">Associated documents will not be deleted.</target> + <target state="translated">A kapcsolódó dokumentumok nem kerülnek törlésre.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Törlés</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">Regexp</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> From 34044d5b681fa7e8f619d7a585cd4b13d04c5040 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:28 +0100 Subject: [PATCH 545/898] New translations django.po (Hungarian) [ci skip] --- src/locale/hu_HU/LC_MESSAGES/django.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index 29fb985aa..eb4e89e46 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -19,7 +19,7 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Dokumentumok" #: documents/models.py:32 msgid "Any word" @@ -35,7 +35,7 @@ msgstr "" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "Regexp" #: documents/models.py:36 msgid "Fuzzy word" @@ -43,7 +43,7 @@ msgstr "" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "Automatikus" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 @@ -398,7 +398,7 @@ msgstr "" #: paperless/settings.py:297 msgid "English (US)" -msgstr "" +msgstr "Angol (US)" #: paperless/settings.py:298 msgid "English (GB)" @@ -406,7 +406,7 @@ msgstr "" #: paperless/settings.py:299 msgid "German" -msgstr "" +msgstr "Német" #: paperless/settings.py:300 msgid "Dutch" @@ -434,7 +434,7 @@ msgstr "" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Szűrő" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." @@ -442,7 +442,7 @@ msgstr "" #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "" +msgstr "Műveletek" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." @@ -450,7 +450,7 @@ msgstr "" #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Metaadat" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -534,7 +534,7 @@ msgstr "" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "" +msgstr "Törlés" #: paperless_mail/models.py:88 msgid "Use subject as title" From b8c3d5bdc215cd185444863fd56291bd0bd0e02d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:29 +0100 Subject: [PATCH 546/898] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 190 +++++++++++++-------------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 10c96ebf3..c401d6cb5 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Das Dokument <x equiv-text="status.filename" id="PH"/> wurde zu Paperless hinzugefügt.</target> + <target state="translated">Das Dokument <x id="PH" equiv-text="status.filename"/> wurde zu Paperless hinzugefügt.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Konnte <x equiv-text="status.filename" id="PH"/> nicht hinzufügen: <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Konnte <x id="PH" equiv-text="status.filename"/> nicht hinzufügen: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Dokument <x equiv-text="status.filename" id="PH"/> wird von Paperless verarbeitet.</target> + <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> wird von Paperless verarbeitet.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Ansicht "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" erfolgreich gespeichert.</target> + <target state="translated">Ansicht "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" erfolgreich gespeichert.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Ansicht "<x equiv-text="savedView.name" id="PH"/>" erfolgreich erstellt.</target> + <target state="translated">Ansicht "<x id="PH" equiv-text="savedView.name"/>" erfolgreich erstellt.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">"<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>" speichern</target> + <target state="translated">"<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>" speichern</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Möchten Sie das Dokument "<x equiv-text="this.document.title" id="PH"/>" wirklich löschen?</target> + <target state="translated">Möchten Sie das Dokument "<x id="PH" equiv-text="this.document.title"/>" wirklich löschen?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Fehler beim Löschen des Dokuments: <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Fehler beim Löschen des Dokuments: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Details</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">von <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">von <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Hallo <x equiv-text="this.displayName" id="PH"/>, willkommen zu Paperless-ng!</target> + <target state="translated">Hallo <x id="PH" equiv-text="this.displayName"/>, willkommen zu Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Möchten Sie das Tag "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> + <target state="translated">Möchten Sie das Tag "<x id="PH" equiv-text="object.name"/>" wirklich löschen?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,39 +488,39 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Tags</target> + <target state="translated">Tags</target> </trans-unit> - <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html" approved="yes"> <source>Create</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="translated">Erstellen</target> + <target state="final">Erstellen</target> </trans-unit> - <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html" approved="yes"> <source>Filter by:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">Filtern nach:</target> + <target state="final">Filtern nach:</target> </trans-unit> - <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html" approved="yes"> <source>Name</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Name</target> + <target state="final">Name</target> </trans-unit> - <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html" approved="yes"> <source>Color</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="translated">Farbe</target> + <target state="final">Farbe</target> </trans-unit> <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> @@ -538,117 +538,117 @@ </context-group> <target state="translated">Anzahl Dokumente</target> </trans-unit> - <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html" approved="yes"> <source>Actions</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="translated">Aktionen</target> + <target state="final">Aktionen</target> </trans-unit> - <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html" approved="yes"> <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Dokumente</target> + <target state="final">Dokumente</target> </trans-unit> - <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html" approved="yes"> <source>Edit</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="translated">Bearbeiten</target> + <target state="final">Bearbeiten</target> </trans-unit> - <trans-unit id="4990731724078522539" datatype="html"> + <trans-unit id="4990731724078522539" datatype="html" approved="yes"> <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Möchten Sie den Dokumenttyp "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> + <target state="final">Möchten Sie den Dokumenttyp "<x id="PH" equiv-text="object.name"/>" wirklich löschen?</target> </trans-unit> - <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html" approved="yes"> <source>Document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Dokumenttypen</target> + <target state="final">Dokumenttypen</target> </trans-unit> - <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html" approved="yes"> <source>Logs</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Protokoll</target> + <target state="final">Protokoll</target> </trans-unit> - <trans-unit id="5610279464668232148" datatype="html"> + <trans-unit id="5610279464668232148" datatype="html" approved="yes"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Gespeicherte Ansicht "<x equiv-text="savedView.name" id="PH"/>" gelöscht.</target> + <target state="final">Gespeicherte Ansicht "<x id="PH" equiv-text="savedView.name"/>" gelöscht.</target> </trans-unit> - <trans-unit id="5647210819299459618" datatype="html"> + <trans-unit id="5647210819299459618" datatype="html" approved="yes"> <source>Settings saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="translated">Einstellungen erfolgreich gespeichert.</target> + <target state="final">Einstellungen erfolgreich gespeichert.</target> </trans-unit> - <trans-unit id="6839066544204061364" datatype="html"> + <trans-unit id="6839066544204061364" datatype="html" approved="yes"> <source>Use system language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="translated">Benutze Systemsprache</target> + <target state="final">Benutze Systemsprache</target> </trans-unit> - <trans-unit id="7729897675462249787" datatype="html"> + <trans-unit id="7729897675462249787" datatype="html" approved="yes"> <source>Use date format of display language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="translated">Benutze Datumsformat der Anzeigesprache</target> + <target state="final">Benutze Datumsformat der Anzeigesprache</target> </trans-unit> - <trans-unit id="8488620293789898901" datatype="html"> + <trans-unit id="8488620293789898901" datatype="html" approved="yes"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Fehler beim Speichern der Einstellungen auf dem Server: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="final">Fehler beim Speichern der Einstellungen auf dem Server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> - <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html" approved="yes"> <source>Settings</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Einstellungen</target> + <target state="final">Einstellungen</target> </trans-unit> - <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html" approved="yes"> <source>General settings</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Allgemeine Einstellungen</target> + <target state="final">Allgemeine Einstellungen</target> </trans-unit> - <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html" approved="yes"> <source>Notifications</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="translated">Benachrichtigungen</target> + <target state="final">Benachrichtigungen</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -666,13 +666,13 @@ </context-group> <target state="translated">Erscheinungsbild</target> </trans-unit> - <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html" approved="yes"> <source>Display language</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="translated">Anzeigesprache</target> + <target state="final">Anzeigesprache</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Kurz: <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Kurz: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Mittel: <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Mittel: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Lang: <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Lang: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Möchten Sie den Korrespondenten "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> + <target state="translated">Möchten Sie den Korrespondenten "<x id="PH" equiv-text="object.name"/>" wirklich löschen?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Ungültige Suchanfrage: <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Ungültige Suchanfrage: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Zeige ähnliche Dokumente zu <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <target state="translated">Zeige ähnliche Dokumente zu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Suchanfrage: <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Suchanfrage: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Meinten Sie "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>"?</target> + <target state="translated">Meinten Sie "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="needs-translation">Info</target> + <target state="translated">Info</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Angemeldet als <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Angemeldet als <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Korrespondent: <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Korrespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Typ: <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Typ: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Tag: <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Titel: <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Erstellt: <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Erstellt: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Fehler beim Ausführung der Massenverarbeitung: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Fehler beim Ausführung der Massenverarbeitung: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" und "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" und "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/> und "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> und "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten das Tag "<x equiv-text="tag.name" id="PH"/>" hinzufügen.</target> + <target state="translated">Diese Aktion wird <x id="PH_1" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten das Tag "<x id="PH" equiv-text="tag.name"/>" hinzufügen.</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> hinzufügen.</target> + <target state="translated">Diese Aktion wird <x id="PH_1" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten die Tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> hinzufügen.</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Diese Aktion wird das Tag "<x equiv-text="tag.name" id="PH"/>" von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> + <target state="translated">Diese Aktion wird das Tag "<x id="PH" equiv-text="tag.name"/>" von <x id="PH_1" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten entfernen.</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> von <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten entfernen.</target> + <target state="translated">Diese Aktion wird die Tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> von <x id="PH_1" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten entfernen.</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">Diese Aktion wird die Tags <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> den <x equiv-text="this.list.selected.size" id="PH_2"/> ausgewählten Dokumenten hinzufügen und die Tags <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> entfernen.</target> + <target state="translated">Diese Aktion wird die Tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> den <x id="PH_2" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten hinzufügen und die Tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> entfernen.</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Korrespondent "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> + <target state="translated">Diese Aktion wird <x id="PH_1" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten den Korrespondent "<x id="PH" equiv-text="correspondent.name"/>" zuweisen.</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Korrespondent entfernen.</target> + <target state="translated">Diese Aktion wird bei <x id="PH" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten den Korrespondent entfernen.</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH_1"/> ausgewählten Dokumenten den Dokumenttyp "<x equiv-text="correspondent.name" id="PH"/>" zuweisen.</target> + <target state="translated">Diese Aktion wird <x id="PH_1" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten den Dokumenttyp "<x id="PH" equiv-text="correspondent.name"/>" zuweisen.</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Diese Aktion wird bei <x equiv-text="this.list.selected.size" id="PH"/> ausgewählten Dokumenten den Dokumenttyp entfernen.</target> + <target state="translated">Diese Aktion wird bei <x id="PH" equiv-text="this.list.selected.size"/> ausgewählten Dokumenten den Dokumenttyp entfernen.</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated">Diese Aktion wird <x equiv-text="this.list.selected.size" id="PH"/> ausgewählte Dokumente unwiderruflich löschen.</target> + <target state="translated">Diese Aktion wird <x id="PH" equiv-text="this.list.selected.size"/> ausgewählte Dokumente unwiderruflich löschen.</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Anzahl Dokumente gesamt: <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Anzahl Dokumente gesamt: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Dokumente im Posteingang: <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Dokumente im Posteingang: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Verarbeite: <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">Verarbeite: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Fehlgeschlagen: <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Fehlgeschlagen: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Hinzugefügt: <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Hinzugefügt: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">HTTP-Fehler: <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">HTTP-Fehler: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Information</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">ASN</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Konnte Element nicht speichern: <x equiv-text="error" id="PH"/></target> + <target state="translated">Konnte Element nicht speichern: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Fehler beim Löschen des Elements: <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Fehler beim Löschen des Elements: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> From 50850edf9134485d7aff00f9fc5312162cc5ab07 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:30 +0100 Subject: [PATCH 547/898] New translations django.po (German) [ci skip] --- src/locale/de_DE/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 120dcd1a8..b0c567568 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -434,7 +434,7 @@ msgstr "Paperless-ng Administration" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Filter" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." From 5c981001bc4f75895ae9dbc244657e0dfbce0fd1 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:32 +0100 Subject: [PATCH 548/898] New translations messages.xlf (Czech) [ci skip] --- src-ui/src/locale/messages.cs_CZ.xlf | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 8bdad274b..df4ee3d04 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Dokumenty</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Odstranit</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadata</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Akce</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Dokumenty</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadata</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="needs-translation">German</target> + <target state="translated">Němčina</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1911,7 +1911,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> - <target state="needs-translation">Dutch</target> + <target state="translated">Holandština</target> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">French</target> + <target state="translated">Francouzština</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">Automatický</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Odstranit</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any word</target> + <target state="translated">Jakékoliv slovo</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All words</target> + <target state="translated">Všechna slova</target> </trans-unit> <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact match</target> + <target state="translated">Přesná shoda</target> </trans-unit> <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">Regulární výraz</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> @@ -2259,7 +2259,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy word</target> + <target state="translated">Fuzzy slovo</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> From af696cf9413effa6dbc2927256f1e12e2fa816aa Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:33 +0100 Subject: [PATCH 549/898] New translations django.po (Czech) [ci skip] --- src/locale/cs_CZ/LC_MESSAGES/django.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index ff7098536..9542c2b9b 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -84,7 +84,7 @@ msgstr "Označí tento tag jako tag pro příchozí: Všechny nově zkonzumovan #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "tag" #: documents/models.py:95 documents/models.py:151 msgid "tags" @@ -188,7 +188,7 @@ msgstr "dokumenty" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "debug" #: documents/models.py:312 msgid "information" @@ -450,7 +450,7 @@ msgstr "Akce provedena na emailu. Tato akce je provedena jen pokud byly dokument #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Metadata" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -482,11 +482,11 @@ msgstr "Používat STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "" +msgstr "IMAP server" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "" +msgstr "IMAP port" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." From e197adccafeda548598a22447b9d98dda0653ccf Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:34 +0100 Subject: [PATCH 550/898] New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 518 +++++++++++++-------------- 1 file changed, 259 insertions(+), 259 deletions(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index bea646011..be2248614 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -8,7 +8,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document added</target> + <target state="translated">Documento agregado</target> </trans-unit> <trans-unit id="9204248378636247318" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</target> + <target state="translated">Documento<x id="PH" equiv-text="status.filename"/> agregado a paperless.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -24,7 +24,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Abrir documento</target> </trans-unit> <trans-unit id="8582620835547864448" datatype="html"> <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="needs-translation">Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + <target state="translated">No se pudo agregar<x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -40,7 +40,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">New document detected</target> + <target state="translated">Nuevo documento detectado</target> </trans-unit> <trans-unit id="587031278561344416" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="needs-translation">Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</target> + <target state="translated">El documento<x id="PH" equiv-text="status.filename"/> está siendo procesado por paperless.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documentos</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> + <target state="translated">Ver "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" guardado satisfactoriamente.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> + <target state="translated">Ver "<x id="PH" equiv-text="savedView.name"/>" creado satisfactoriamente.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Selecciona</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select none</target> + <target state="translated">Seleccionar ninguno</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -96,7 +96,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Select page</target> + <target state="translated">Seleccionar página</target> </trans-unit> <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> @@ -104,7 +104,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Select all</target> + <target state="translated">Seleccionar todo</target> </trans-unit> <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> @@ -112,7 +112,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Sort</target> + <target state="translated">Ordenar</target> </trans-unit> <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="needs-translation">Views</target> + <target state="translated">Vistas</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Save as...</target> + <target state="translated">Guardar como...</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="needs-translation">Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + <target state="translated">Guardar "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -144,7 +144,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Seleccionado <x id="INTERPOLATION"/> de un documento} other {Seleccionados <x id="INTERPOLATION"/> de <x id="INTERPOLATION_1"/> documentos}}</target> </trans-unit> <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> @@ -152,7 +152,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Un documento} other {<x id="INTERPOLATION"/> documentos}}</target> </trans-unit> <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> @@ -160,7 +160,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">(filtered)</target> + <target state="translated">(filtrado)</target> </trans-unit> <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> <source>ASN</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">NSA</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -184,7 +184,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Título</target> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> @@ -192,7 +192,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Tipo de documento</target> </trans-unit> <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> @@ -200,7 +200,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">129</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Creado</target> </trans-unit> <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> @@ -208,7 +208,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Aggregado</target> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">Confirm delete</target> + <target state="translated">Confirmar borrado</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> + <target state="translated">¿Estás seguro de querer borrar el documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> + <target state="translated">Los archivos para este documento serán borrados permanentemente. Esta operación no se puede deshacer.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -240,7 +240,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> - <target state="needs-translation">Delete document</target> + <target state="translated">Borrar documento</target> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + <target state="translated">Error borrando el documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Borrar</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Download</target> + <target state="translated">Descargar</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -272,7 +272,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">More like this</target> + <target state="translated">Similares</target> </trans-unit> <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> <source>Close</source> @@ -280,7 +280,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Close</target> + <target state="translated">Cerrar</target> </trans-unit> <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> @@ -288,7 +288,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">56</context> </context-group> - <target state="needs-translation">Details</target> + <target state="translated">Detalles</target> </trans-unit> <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> <source>Content</source> @@ -296,7 +296,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="needs-translation">Content</target> + <target state="translated">Contenido</target> </trans-unit> <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> @@ -304,7 +304,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">81</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadatos</target> </trans-unit> <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> <source>Discard</source> @@ -312,7 +312,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">Discard</target> + <target state="translated">Descartar</target> </trans-unit> <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> @@ -320,7 +320,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">Save</target> + <target state="translated">Salvar</target> </trans-unit> <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> @@ -328,7 +328,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Page</target> + <target state="translated">Página</target> </trans-unit> <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + <target state="translated">de <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -344,7 +344,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Download original</target> + <target state="translated">Documento original</target> </trans-unit> <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="needs-translation">Archive serial number</target> + <target state="translated">Número de serie del archivo</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -360,7 +360,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> - <target state="needs-translation">Date created</target> + <target state="translated">Fecha de creación</target> </trans-unit> <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> @@ -368,7 +368,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Date modified</target> + <target state="translated">Fecha de modificación</target> </trans-unit> <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> @@ -376,7 +376,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Date added</target> + <target state="translated">Fecha de subida</target> </trans-unit> <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Media filename</target> + <target state="translated">Nombre del fichero</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Original MD5 checksum</target> + <target state="translated">Comprobación MD5 original</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Original file size</target> + <target state="translated">Tamaño del fichero original</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -408,7 +408,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Original mime type</target> + <target state="translated">Tipo MIME original</target> </trans-unit> <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Archive MD5 checksum</target> + <target state="translated">Comprobación MD5 del archivo</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="needs-translation">Archive file size</target> + <target state="translated">Tamaño del archivo</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -432,7 +432,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">121</context> </context-group> - <target state="needs-translation">Original document metadata</target> + <target state="translated">Metadatos originales</target> </trans-unit> <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> <source>Archived document metadata</source> @@ -440,7 +440,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> - <target state="needs-translation">Archived document metadata</target> + <target state="translated">Metadatos archivados</target> </trans-unit> <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> @@ -448,7 +448,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> - <target state="needs-translation">Save & next</target> + <target state="translated">Guardar y continuar</target> </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="needs-translation">Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</target> + <target state="translated">Hola <x id="PH" equiv-text="this.displayName"/>, bienvenido a Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Welcome to Paperless-ng!</target> + <target state="translated">Bienvenido a Paperless-ng!</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Dashboard</target> + <target state="translated">Panel de control</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">¿Estás seguro de querer borrar la etiqueta "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,7 +488,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Tags</target> + <target state="translated">Etiquetas</target> </trans-unit> <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> @@ -496,7 +496,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="needs-translation">Create</target> + <target state="translated">Crear</target> </trans-unit> <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Filter by:</target> + <target state="translated">Filtrado por:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -512,7 +512,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Name</target> + <target state="translated">Nombre</target> </trans-unit> <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> <source>Color</source> @@ -520,7 +520,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Color</target> + <target state="translated">Color</target> </trans-unit> <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> <source>Matching</source> @@ -528,7 +528,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Matching</target> + <target state="translated">Condición</target> </trans-unit> <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> @@ -536,7 +536,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Document count</target> + <target state="translated">Cantidad de documentos</target> </trans-unit> <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Acciones</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documentos</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -560,7 +560,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Edit</target> + <target state="translated">Editar</target> </trans-unit> <trans-unit id="4990731724078522539" datatype="html"> <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">¿Estás seguro de querer borrar el tipo de documento "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -576,7 +576,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Document types</target> + <target state="translated">Tipos de documento</target> </trans-unit> <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> <source>Logs</source> @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Logs</target> + <target state="translated">Logs</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</target> + <target state="translated">Vista guardada "<x id="PH" equiv-text="savedView.name"/>" borrada.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -600,7 +600,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="needs-translation">Settings saved successfully.</target> + <target state="translated">Ajustes guardados satisfactoriamente.</target> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> @@ -608,7 +608,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Use system language</target> + <target state="translated">Usar idioma del sistema</target> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="needs-translation">Use date format of display language</target> + <target state="translated">Usar formato de fechas del idioma seleccionado</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="needs-translation">Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Error guardando los ajustes: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -632,7 +632,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Settings</target> + <target state="translated">Ajustes</target> </trans-unit> <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">General settings</target> + <target state="translated">Ajustes generales</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -648,7 +648,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="needs-translation">Notifications</target> + <target state="translated">Notificaciones</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="needs-translation">Saved views</target> + <target state="translated">Vistas guardadas</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -664,7 +664,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Appearance</target> + <target state="translated">Apariencia</target> </trans-unit> <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> @@ -672,7 +672,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Display language</target> + <target state="translated">Idioma</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -680,7 +680,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">You need to reload the page after applying a new language.</target> + <target state="translated">Necesitas recargar la página tras aplicar el nuevo idioma.</target> </trans-unit> <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> @@ -688,7 +688,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Date display</target> + <target state="translated">Formato de fechas</target> </trans-unit> <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> @@ -696,7 +696,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Date format</target> + <target state="translated">Formato de fechas</target> </trans-unit> <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="needs-translation">Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + <target state="translated">Corto: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="needs-translation">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + <target state="translated">Medio: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="needs-translation">Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + <target state="translated">Largo: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -728,7 +728,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Items per page</target> + <target state="translated">Elementos por página</target> </trans-unit> <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> @@ -736,7 +736,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">83</context> </context-group> - <target state="needs-translation">Document editor</target> + <target state="translated">Editor de documentos</target> </trans-unit> <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> <source>Use PDF viewer provided by the browser</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Use PDF viewer provided by the browser</target> + <target state="translated">Usar el visor PDF proporcionado por el navegador</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">This is usually faster for displaying large PDF documents, but it might not work on some browsers.</target> + <target state="translated">Habitualmente esto es mas rápido para mostrar archivos PDF largos, pero puede no funcionar en algunos navegadores.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -760,7 +760,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">Dark mode</target> + <target state="translated">Modo oscuro</target> </trans-unit> <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> @@ -768,7 +768,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Use system settings</target> + <target state="translated">Usar ajustes del sistema</target> </trans-unit> <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> @@ -776,7 +776,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Enable dark mode</target> + <target state="translated">Habilitar modo oscuro</target> </trans-unit> <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> @@ -784,7 +784,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Invert thumbnails in dark mode</target> + <target state="translated">Invertir miniaturas en modo oscuro</target> </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> @@ -792,7 +792,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="needs-translation">Bulk editing</target> + <target state="translated">Editor multiple</target> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Show confirmation dialogs</target> + <target state="translated">Mostrar diálogos de confirmación</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="needs-translation">Deleting documents will always ask for confirmation.</target> + <target state="translated">Borrar los documentos siempre pedirá confirmación.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -816,7 +816,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> - <target state="needs-translation">Apply on close</target> + <target state="translated">Aplicar al cerrar</target> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> @@ -824,7 +824,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> - <target state="needs-translation">Document processing</target> + <target state="translated">Procesado de documentos</target> </trans-unit> <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> @@ -832,7 +832,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Show notifications when new documents are detected</target> + <target state="translated">Mostrar notificaciones cuando nuevos documentos sean borrados</target> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> @@ -840,7 +840,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> - <target state="needs-translation">Show notifications when document processing completes successfully</target> + <target state="translated">Mostrar notificaciones cuando el procesado se complete satisfactoriamente</target> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> @@ -848,7 +848,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> - <target state="needs-translation">Show notifications when document processing fails</target> + <target state="translated">Mostrar notificaciones cuando el procesado falle</target> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Suppress notifications on dashboard</target> + <target state="translated">No mostrar notificaciones en el panel de control</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + <target state="translated">Esto suprimirá todos los mensajes de estado de procesamiento en el panel de control.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -872,7 +872,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> - <target state="needs-translation">Appears on</target> + <target state="translated">Aparece en</target> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="needs-translation">Show on dashboard</target> + <target state="translated">Mostrar en el panel de control</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="needs-translation">Show in sidebar</target> + <target state="translated">Mostrar barra lateral</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">No saved views defined.</target> + <target state="translated">No hay ninguna vista guardada definida</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -904,7 +904,7 @@ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation">404 Not Found</target> + <target state="translated">404 No encontrado</target> </trans-unit> <trans-unit id="7427874343955308724" datatype="html"> <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> @@ -936,7 +936,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Confirmation</target> + <target state="translated">Confirmación</target> </trans-unit> <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> @@ -944,7 +944,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> - <target state="needs-translation">Confirm</target> + <target state="translated">Confirmar</target> </trans-unit> <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> @@ -952,7 +952,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Cancel</target> + <target state="translated">Cancelar</target> </trans-unit> <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Matching algorithm</target> + <target state="translated">Algoritmo del patrón de búsqueda</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -984,7 +984,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Matching pattern</target> + <target state="translated">Patrón de busqueda</target> </trans-unit> <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> @@ -992,7 +992,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Case insensitive</target> + <target state="translated">Insensible a mayúsculas y minusculas</target> </trans-unit> <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Create new tag</target> + <target state="translated">Crear nueva etiqueta</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1008,7 +1008,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Edit tag</target> + <target state="translated">Editar etiqueta</target> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tag</target> + <target state="translated">Etiqueta de entrada</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1032,7 +1032,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new document type</target> + <target state="translated">Crear nuevo tipo de documento</target> </trans-unit> <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> @@ -1040,7 +1040,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit document type</target> + <target state="translated">Editar tipo de documento</target> </trans-unit> <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> @@ -1048,7 +1048,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Search results</target> + <target state="translated">Resultados de la busqueda</target> </trans-unit> <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + <target state="translated">Cadena de búsqueda no valida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated">Mostrando documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> + <target state="translated">Cadena de búsqueda: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + <target state="translated">¿Quizás quisiste decir "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1088,7 +1088,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + <target state="translated">{VAR_PLURAL, plural, =0 {Sin resultados} =1 {Un resultado} other {<x id="INTERPOLATION"/> resultados}}</target> </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1105,7 +1105,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Search documents</target> + <target state="translated">Buscar documentos</target> </trans-unit> <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> @@ -1113,7 +1113,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Logout</target> + <target state="translated">Cerrar sesión</target> </trans-unit> <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> <source>Manage</source> @@ -1121,7 +1121,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> - <target state="needs-translation">Manage</target> + <target state="translated">Organizar</target> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="needs-translation">Admin</target> + <target state="translated">Administrar</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="needs-translation">Info</target> + <target state="translated">Información</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="needs-translation">Documentation</target> + <target state="translated">Documentación</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1161,7 +1161,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">181</context> </context-group> - <target state="needs-translation">Suggest an idea</target> + <target state="translated">Sugerir una idea</target> </trans-unit> <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + <target state="translated">Sesión iniciada como <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1177,7 +1177,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="needs-translation">Open documents</target> + <target state="translated">Abrir documentos</target> </trans-unit> <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> <source>Close all</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Close all</target> + <target state="translated">Cerrar todos</target> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> @@ -1193,7 +1193,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> - <target state="needs-translation">Title</target> + <target state="translated">Título</target> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> @@ -1201,7 +1201,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="needs-translation">Title & content</target> + <target state="translated">Titulo y contenido</target> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> - <target state="needs-translation">Without document type</target> + <target state="translated">Sin tipo de documento</target> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1249,7 +1249,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Without any tag</target> + <target state="translated">Sin ninguna etiqueta</target> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter tags</target> + <target state="translated">Filtrar etiquetas</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1281,7 +1281,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Filter document types</target> + <target state="translated">Filtrar tipos de documento</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1289,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Reset filters</target> + <target state="translated">Quitar filtros</target> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> @@ -1298,7 +1298,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="needs-translation">Not assigned</target> + <target state="translated">Sin asignar</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1306,7 +1306,7 @@ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Apply</target> + <target state="translated">Aplicar</target> </trans-unit> <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> @@ -1314,7 +1314,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="needs-translation">Last 7 days</target> + <target state="translated">Últimos 7 días</target> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Last month</target> + <target state="translated">Último mes</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1330,7 +1330,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> - <target state="needs-translation">Last 3 months</target> + <target state="translated">Últimos 3 meses</target> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> @@ -1338,7 +1338,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> - <target state="needs-translation">Last year</target> + <target state="translated">Último año</target> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> @@ -1346,7 +1346,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">After</target> + <target state="translated">Después</target> </trans-unit> <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> @@ -1354,7 +1354,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Before</target> + <target state="translated">Antes</target> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> @@ -1362,7 +1362,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Clear</target> + <target state="translated">Limpiar</target> </trans-unit> <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">View</target> + <target state="translated">Vista</target> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> + <target state="translated">Creado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Filter by tag</target> + <target state="translated">Filtrar por etiqueta</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="needs-translation">Score:</target> + <target state="translated">Puntuación:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1410,7 +1410,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> - <target state="needs-translation">View in browser</target> + <target state="translated">Ver en navegador</target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="needs-translation">Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Error ejecutando operación múltiple: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="needs-translation">"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" y "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="needs-translation"><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> y "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1461,7 +1461,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="needs-translation">Confirm tags assignment</target> + <target state="translated">Confirmar etiquetas asignadas</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operación agregará la etiqueta "<x id="PH" equiv-text="tag.name"/>" a <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operación agregará las etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> a <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operacion eliminará la etiqueta "<x id="PH" equiv-text="tag.name"/>" de <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operacion eliminará las etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> de <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operacion agregará las etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> y eliminará las etiquetas <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> en <x id="PH_2" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1533,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> - <target state="needs-translation">Confirm document type assignment</target> + <target state="translated">Confirmar asignación de tipo de documento</target> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operacion asignará el tipo de documento "<x id="PH" equiv-text="documentType.name"/>" a <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operación eliminará el tipo de documento de <x id="PH" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1557,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> - <target state="needs-translation">Delete confirm</target> + <target state="translated">Confirmar borrado</target> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operación borrará permanentemente <x id="PH" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1573,7 +1573,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">This operation cannot be undone.</target> + <target state="translated">Esta operación no se puede deshacer.</target> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> @@ -1581,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="needs-translation">Delete document(s)</target> + <target state="translated">Borrar documento(s)</target> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> @@ -1589,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Select:</target> + <target state="translated">Seleccionar:</target> </trans-unit> <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> @@ -1597,7 +1597,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">All</target> + <target state="translated">Todos</target> </trans-unit> <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> <source>Edit:</source> @@ -1605,7 +1605,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Edit:</target> + <target state="translated">Editar:</target> </trans-unit> <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> @@ -1613,7 +1613,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> - <target state="needs-translation">Download originals</target> + <target state="translated">Descargar originales</target> </trans-unit> <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> @@ -1621,7 +1621,7 @@ <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Suggestions:</target> + <target state="translated">Sugerencias:</target> </trans-unit> <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> <source>Save current view</source> @@ -1629,7 +1629,7 @@ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Save current view</target> + <target state="translated">Guardar la vista actual</target> </trans-unit> <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> @@ -1637,7 +1637,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Show all</target> + <target state="translated">Mostrar todos</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1645,7 +1645,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Statistics</target> + <target state="translated">Estadisticas</target> </trans-unit> <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + <target state="translated">Total de documentos: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="needs-translation">Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + <target state="translated">Procesando: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Failed: <x id="PH" equiv-text="countFailed"/></target> + <target state="translated">Fallidos: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Added: <x id="PH" equiv-text="countSuccess"/></target> + <target state="translated">Agregado: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1693,7 +1693,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">118</context> </context-group> - <target state="needs-translation">Connecting...</target> + <target state="translated">Conectando...</target> </trans-unit> <trans-unit id="1245343823699368872" datatype="html"> <source>Uploading...</source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> - <target state="needs-translation">Uploading...</target> + <target state="translated">Subiendo...</target> </trans-unit> <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> @@ -1709,7 +1709,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">Upload complete, waiting...</target> + <target state="translated">Subida completa, esperando...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="needs-translation">HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + <target state="translated">Error HTTP: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1725,7 +1725,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Upload new documents</target> + <target state="translated">Subir nuevos documentos</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Browse files</target> + <target state="translated">Explorar ficheros</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1750,7 +1750,7 @@ <context context-type="linenumber">4</context> </context-group> <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> - <target state="needs-translation">Dismiss completed</target> + <target state="translated">Descartar completados</target> </trans-unit> <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> @@ -1759,7 +1759,7 @@ <context context-type="linenumber">25</context> </context-group> <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Un documento más} other {<x id="INTERPOLATION"/> más documentos}}</target> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> @@ -1767,7 +1767,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Open document</target> + <target state="translated">Abrir documento</target> </trans-unit> <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> <source>First steps</source> @@ -1775,7 +1775,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">First steps</target> + <target state="translated">Primeros pasos</target> </trans-unit> <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> - <target state="needs-translation">Paperless is running! :)</target> + <target state="translated">Paperless está ejecutándose :)</target> </trans-unit> <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="needs-translation">Paperless offers some more features that try to make your life easier:</target> + <target state="translated">Paperless tiene algunas características para hacer tu vida mas sencilla:</target> </trans-unit> <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> @@ -1807,7 +1807,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + <target state="translated">Una vez tengas un par de documentos en paperless y añadido metadatos, paperless puede asignar metadatos a los nuevos documentos automáticamente.</target> </trans-unit> <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> @@ -1815,7 +1815,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + <target state="translated">Puedes configurar paperless para leer tus correos y añadir documentos de los ficheros adjuntos.</target> </trans-unit> <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> @@ -1823,7 +1823,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + <target state="translated">Consulta la documentación sobre como usar estas características . La sección de uso básico también tiene algo de información de como usar Paperless en general.</target> </trans-unit> <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> @@ -1831,7 +1831,7 @@ <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Metadata</target> + <target state="translated">Metadatos</target> </trans-unit> <trans-unit id="3797570084942068182" datatype="html"> <source>Select</source> @@ -1839,7 +1839,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Select</target> + <target state="translated">Seleccionar</target> </trans-unit> <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> @@ -1847,7 +1847,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Please select an object</target> + <target state="translated">Por favor, selecciona un objeto</target> </trans-unit> <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Invalid date.</target> + <target state="translated">Fecha no válida.</target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1863,7 +1863,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">Yes</target> + <target state="translated">Si</target> </trans-unit> <trans-unit id="3542042671420335679" datatype="html"> <source>No</source> @@ -1871,7 +1871,7 @@ <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> <context context-type="linenumber">9</context> </context-group> - <target state="needs-translation">No</target> + <target state="translated">No</target> </trans-unit> <trans-unit id="7536524521722799066" datatype="html"> <source>(no title)</source> @@ -1879,7 +1879,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">(no title)</target> + <target state="translated">(sin título)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="needs-translation">English (US)</target> + <target state="translated">Inglés (US)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1895,7 +1895,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">English (GB)</target> + <target state="translated">Inglés (Gran Bretaña)</target> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="needs-translation">German</target> + <target state="translated">Alemán</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1911,7 +1911,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> - <target state="needs-translation">Dutch</target> + <target state="translated">Alemán</target> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">French</target> + <target state="translated">Francés</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Portuguese (Brazil)</target> + <target state="translated">Portugués (Brasil)</target> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> @@ -1935,7 +1935,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> - <target state="needs-translation">Italian</target> + <target state="translated">Italiano</target> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> @@ -1943,7 +1943,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Romanian</target> + <target state="translated">Rumano</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -1959,7 +1959,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Document already exists.</target> + <target state="translated">El documento ya existe.</target> </trans-unit> <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">File not found.</target> + <target state="translated">Archivo no encontrado</target> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> @@ -2011,7 +2011,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Received new file.</target> + <target state="translated">Nuevo archivo recibido.</target> </trans-unit> <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> @@ -2019,7 +2019,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">File type not supported.</target> + <target state="translated">Tipo de fichero no soportado.</target> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> @@ -2027,7 +2027,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Processing document...</target> + <target state="translated">Procesando documento...</target> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> @@ -2035,7 +2035,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Generating thumbnail...</target> + <target state="translated">Generando miniatura...</target> </trans-unit> <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> @@ -2043,7 +2043,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Retrieving date from document...</target> + <target state="translated">Obteniendo fecha del documento...</target> </trans-unit> <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> @@ -2051,7 +2051,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Saving document...</target> + <target state="translated">Guardando documento...</target> </trans-unit> <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> @@ -2059,7 +2059,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">27</context> </context-group> - <target state="needs-translation">Finished.</target> + <target state="translated">Completado.</target> </trans-unit> <trans-unit id="1519954996184640001" datatype="html"> <source>Error</source> @@ -2067,7 +2067,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Error</target> + <target state="translated">Error</target> </trans-unit> <trans-unit id="5037437391296624618" datatype="html"> <source>Information</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Información</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">NSF</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2099,7 +2099,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Document type</target> + <target state="translated">Tipo de documento</target> </trans-unit> <trans-unit id="4207916966377787111" datatype="html"> <source>Created</source> @@ -2107,7 +2107,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Created</target> + <target state="translated">Creado</target> </trans-unit> <trans-unit id="231679111972850796" datatype="html"> <source>Added</source> @@ -2115,7 +2115,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Added</target> + <target state="translated">Agregado</target> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> @@ -2123,7 +2123,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Modified</target> + <target state="translated">Modificado</target> </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> @@ -2131,7 +2131,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="needs-translation">Create new item</target> + <target state="translated">Crear nuevo elemento</target> </trans-unit> <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> @@ -2139,7 +2139,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="needs-translation">Edit item</target> + <target state="translated">Editar elemento</target> </trans-unit> <trans-unit id="1699589597032579396" datatype="html"> <source>Could not save element: <x id="PH" equiv-text="error"/></source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Could not save element: <x id="PH" equiv-text="error"/></target> + <target state="translated">No se pudo guardar el elemento: <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2155,7 +2155,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Automatic</target> + <target state="translated">Automático</target> </trans-unit> <trans-unit id="5044611416737085530" datatype="html"> <source>Do you really want to delete this element?</source> @@ -2163,7 +2163,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Do you really want to delete this element?</target> + <target state="translated">¿Estás seguro de querer borrar este elemento?</target> </trans-unit> <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> @@ -2171,7 +2171,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="needs-translation">Associated documents will not be deleted.</target> + <target state="translated">Los documentos asociados no serán borrados.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="needs-translation">Delete</target> + <target state="translated">Borrar</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="needs-translation">Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Error borrando el elemento: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any word</target> + <target state="translated">Cualquier palabra</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2203,7 +2203,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + <target state="translated">Cualquiera: El documento contiene cualquiera de estas palabras (separadas por espacios)</target> </trans-unit> <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All words</target> + <target state="translated">Todas las palabras</target> </trans-unit> <trans-unit id="111914402588955480" datatype="html"> <source>All: Document contains all of these words (space separated)</source> @@ -2219,7 +2219,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All: Document contains all of these words (space separated)</target> + <target state="translated">Todas: El documento contiene todas estas palabras (separadas por espacios)</target> </trans-unit> <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact match</target> + <target state="translated">Coincidencia exacta</target> </trans-unit> <trans-unit id="7109184332944610787" datatype="html"> <source>Exact: Document contains this string</source> @@ -2235,7 +2235,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact: Document contains this string</target> + <target state="translated">Exacto: El documento contiene este texto</target> </trans-unit> <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression</target> + <target state="translated">Expresión regular</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> @@ -2251,7 +2251,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression: Document matches this regular expression</target> + <target state="translated">Expresión regular: El documento coincide con esta expresión regular</target> </trans-unit> <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> @@ -2275,7 +2275,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Auto: Learn matching automatically</target> + <target state="translated">Automático: Aprender automáticamente</target> </trans-unit> </body> </file> From f712bdcaf3914a6d854710cd7b4c872e6aa0b1b5 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:35 +0100 Subject: [PATCH 551/898] New translations django.po (Spanish) [ci skip] --- src/locale/es_ES/LC_MESSAGES/django.po | 244 ++++++++++++------------- 1 file changed, 122 insertions(+), 122 deletions(-) diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index e13ab0ef1..69211d62f 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -19,23 +19,23 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Documentos" #: documents/models.py:32 msgid "Any word" -msgstr "" +msgstr "Cualquier palabra" #: documents/models.py:33 msgid "All words" -msgstr "" +msgstr "Todas las palabras" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "Coincidencia exacta" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "Expresión regular" #: documents/models.py:36 msgid "Fuzzy word" @@ -43,12 +43,12 @@ msgstr "" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "Automático" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" -msgstr "" +msgstr "nombre" #: documents/models.py:45 msgid "match" @@ -72,7 +72,7 @@ msgstr "" #: documents/models.py:81 msgid "color" -msgstr "" +msgstr "color" #: documents/models.py:87 msgid "is inbox tag" @@ -84,35 +84,35 @@ msgstr "" #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "etiqueta" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "" +msgstr "etiquetas" #: documents/models.py:101 documents/models.py:133 msgid "document type" -msgstr "" +msgstr "tipo de documento" #: documents/models.py:102 msgid "document types" -msgstr "" +msgstr "tipos de documento" #: documents/models.py:110 msgid "Unencrypted" -msgstr "" +msgstr "Sin encriptar" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "Encriptado con GNU Privacy Guard" #: documents/models.py:124 msgid "title" -msgstr "" +msgstr "titulo" #: documents/models.py:137 msgid "content" -msgstr "" +msgstr "contenido" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." @@ -120,7 +120,7 @@ msgstr "" #: documents/models.py:144 msgid "mime type" -msgstr "" +msgstr "tipo MIME" #: documents/models.py:155 msgid "checksum" @@ -140,15 +140,15 @@ msgstr "" #: documents/models.py:172 documents/models.py:328 msgid "created" -msgstr "" +msgstr "creado" #: documents/models.py:176 msgid "modified" -msgstr "" +msgstr "modificado" #: documents/models.py:180 msgid "storage type" -msgstr "" +msgstr "tipo de almacenamiento" #: documents/models.py:188 msgid "added" @@ -176,67 +176,67 @@ msgstr "" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "" +msgstr "Posición de este documento en tu archivo físico de documentos." #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "documento" #: documents/models.py:224 msgid "documents" -msgstr "" +msgstr "documentos" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "depuración" #: documents/models.py:312 msgid "information" -msgstr "" +msgstr "información" #: documents/models.py:313 msgid "warning" -msgstr "" +msgstr "alerta" #: documents/models.py:314 msgid "error" -msgstr "" +msgstr "error" #: documents/models.py:315 msgid "critical" -msgstr "" +msgstr "crítico" #: documents/models.py:319 msgid "group" -msgstr "" +msgstr "grupo" #: documents/models.py:322 msgid "message" -msgstr "" +msgstr "mensaje" #: documents/models.py:325 msgid "level" -msgstr "" +msgstr "nivel" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "log" #: documents/models.py:333 msgid "logs" -msgstr "" +msgstr "logs" #: documents/models.py:344 documents/models.py:394 msgid "saved view" -msgstr "" +msgstr "vista guardada" #: documents/models.py:345 msgid "saved views" -msgstr "" +msgstr "vistas guardadas" #: documents/models.py:348 msgid "user" -msgstr "" +msgstr "usuario" #: documents/models.py:354 msgid "show on dashboard" @@ -244,23 +244,23 @@ msgstr "" #: documents/models.py:357 msgid "show in sidebar" -msgstr "" +msgstr "mostrar en barra lateral" #: documents/models.py:361 msgid "sort field" -msgstr "" +msgstr "campo de ordenación" #: documents/models.py:364 msgid "sort reverse" -msgstr "" +msgstr "ordenar al revés" #: documents/models.py:370 msgid "title contains" -msgstr "" +msgstr "el titulo contiene" #: documents/models.py:371 msgid "content contains" -msgstr "" +msgstr "el contenido contiene" #: documents/models.py:372 msgid "ASN is" @@ -272,7 +272,7 @@ msgstr "" #: documents/models.py:374 msgid "document type is" -msgstr "" +msgstr "el tipo de documento es" #: documents/models.py:375 msgid "is in inbox" @@ -280,59 +280,59 @@ msgstr "" #: documents/models.py:376 msgid "has tag" -msgstr "" +msgstr "tiene la etiqueta" #: documents/models.py:377 msgid "has any tag" -msgstr "" +msgstr "tiene cualquier etiqueta" #: documents/models.py:378 msgid "created before" -msgstr "" +msgstr "creado antes" #: documents/models.py:379 msgid "created after" -msgstr "" +msgstr "creado después" #: documents/models.py:380 msgid "created year is" -msgstr "" +msgstr "el año de creación es" #: documents/models.py:381 msgid "created month is" -msgstr "" +msgstr "el mes de creación es" #: documents/models.py:382 msgid "created day is" -msgstr "" +msgstr "creado el día" #: documents/models.py:383 msgid "added before" -msgstr "" +msgstr "agregado antes de" #: documents/models.py:384 msgid "added after" -msgstr "" +msgstr "agregado después de" #: documents/models.py:385 msgid "modified before" -msgstr "" +msgstr "modificado después de" #: documents/models.py:386 msgid "modified after" -msgstr "" +msgstr "modificado antes de" #: documents/models.py:387 msgid "does not have tag" -msgstr "" +msgstr "no tiene la etiqueta" #: documents/models.py:398 msgid "rule type" -msgstr "" +msgstr "tipo de regla" #: documents/models.py:402 msgid "value" -msgstr "" +msgstr "valor" #: documents/models.py:408 msgid "filter rule" @@ -345,104 +345,104 @@ msgstr "" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" -msgstr "" +msgstr "Expresión irregular inválida: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." -msgstr "" +msgstr "Color inválido." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "Tipo de fichero %(type)s no suportado" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "" +msgstr "Paperless-ng está cargándose…" #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" -msgstr "" +msgstr "Paperless-ng Sesión cerrada" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "Has cerrado la sesión satisfactoriamente. ¡Adiós!" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "" +msgstr "Iniciar sesión de nuevo" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" -msgstr "" +msgstr "Paperless-ng Iniciar sesión" #: documents/templates/registration/login.html:42 msgid "Please sign in." -msgstr "" +msgstr "Por favor, inicie sesión" #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "Tu usuario y contraseña no coinciden. Inténtalo de nuevo." #: documents/templates/registration/login.html:48 msgid "Username" -msgstr "" +msgstr "Usuario" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "" +msgstr "Contraseña" #: documents/templates/registration/login.html:54 msgid "Sign in" -msgstr "" +msgstr "Iniciar sesión" #: paperless/settings.py:297 msgid "English (US)" -msgstr "" +msgstr "Inglés (US)" #: paperless/settings.py:298 msgid "English (GB)" -msgstr "" +msgstr "Inglés (Gran Bretaña)" #: paperless/settings.py:299 msgid "German" -msgstr "" +msgstr "Alemán" #: paperless/settings.py:300 msgid "Dutch" -msgstr "" +msgstr "Alemán" #: paperless/settings.py:301 msgid "French" -msgstr "" +msgstr "Francés" #: paperless/settings.py:302 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "Portugués (Brasil)" #: paperless/settings.py:303 msgid "Italian" -msgstr "" +msgstr "Italiano" #: paperless/settings.py:304 msgid "Romanian" -msgstr "" +msgstr "Rumano" #: paperless/urls.py:118 msgid "Paperless-ng administration" -msgstr "" +msgstr "Paperless-ng Administración" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Filtro" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "Paperless solo procesará los correos que coincidan con TODOS los filtros escritos abajo." #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "" +msgstr "Acciones" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." @@ -450,7 +450,7 @@ msgstr "" #: paperless_mail/admin.py:46 msgid "Metadata" -msgstr "" +msgstr "Metadatos" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -462,87 +462,87 @@ msgstr "" #: paperless_mail/models.py:11 msgid "mail account" -msgstr "" +msgstr "cuenta de correo" #: paperless_mail/models.py:12 msgid "mail accounts" -msgstr "" +msgstr "cuentas de correo" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "" +msgstr "Sin encriptar" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "" +msgstr "Usar SSL" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "" +msgstr "Usar STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "" +msgstr "Servidor IMAP" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "" +msgstr "Puerto IMAP" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "Normalmente 143 para conexiones sin encriptar y STARTTLS, y 993 para conexiones SSL." #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "" +msgstr "Seguridad IMAP" #: paperless_mail/models.py:46 msgid "username" -msgstr "" +msgstr "usuario" #: paperless_mail/models.py:50 msgid "password" -msgstr "" +msgstr "contraseña" #: paperless_mail/models.py:60 msgid "mail rule" -msgstr "" +msgstr "regla de correo" #: paperless_mail/models.py:61 msgid "mail rules" -msgstr "" +msgstr "reglas de correo" #: paperless_mail/models.py:67 msgid "Only process attachments." -msgstr "" +msgstr "Solo procesar ficheros adjuntos." #: paperless_mail/models.py:68 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "Procesar todos los ficheros, incluyendo ficheros 'incrustados'." #: paperless_mail/models.py:78 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "Marcar como leído, no procesar archivos leídos" #: paperless_mail/models.py:79 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "Marcar el correo, no procesar correos marcados" #: paperless_mail/models.py:80 msgid "Move to specified folder" -msgstr "" +msgstr "Mover a carpeta específica" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "" +msgstr "Borrar" #: paperless_mail/models.py:88 msgid "Use subject as title" -msgstr "" +msgstr "Usar asunto como titulo" #: paperless_mail/models.py:89 msgid "Use attachment filename as title" -msgstr "" +msgstr "Usar nombre del fichero adjunto como título" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" @@ -550,11 +550,11 @@ msgstr "" #: paperless_mail/models.py:101 msgid "Use mail address" -msgstr "" +msgstr "Usar dirección de correo" #: paperless_mail/models.py:103 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "Usar nombre (o dirección de correo si no está disponible)" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" @@ -562,15 +562,15 @@ msgstr "" #: paperless_mail/models.py:113 msgid "order" -msgstr "" +msgstr "orden" #: paperless_mail/models.py:120 msgid "account" -msgstr "" +msgstr "cuenta" #: paperless_mail/models.py:124 msgid "folder" -msgstr "" +msgstr "carpeta" #: paperless_mail/models.py:128 msgid "filter from" @@ -578,15 +578,15 @@ msgstr "" #: paperless_mail/models.py:131 msgid "filter subject" -msgstr "" +msgstr "filtrar asunto" #: paperless_mail/models.py:134 msgid "filter body" -msgstr "" +msgstr "filtrar cuerpo" #: paperless_mail/models.py:138 msgid "filter attachment filename" -msgstr "" +msgstr "filtrar nombre del fichero adjunto" #: paperless_mail/models.py:140 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." @@ -594,43 +594,43 @@ msgstr "" #: paperless_mail/models.py:146 msgid "maximum age" -msgstr "" +msgstr "antigüedad máxima" #: paperless_mail/models.py:148 msgid "Specified in days." -msgstr "" +msgstr "Especificado en días." #: paperless_mail/models.py:151 msgid "attachment type" -msgstr "" +msgstr "tipo de fichero adjunto" #: paperless_mail/models.py:154 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "Adjuntos incrustados incluyen imágenes, por lo que es mejor combina resta opción un filtro de nombre de fichero." #: paperless_mail/models.py:159 msgid "action" -msgstr "" +msgstr "acción" #: paperless_mail/models.py:165 msgid "action parameter" -msgstr "" +msgstr "parámetro de acción" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "" +msgstr "Parámetro adicional para la acción seleccionada arriba. Ej. la carpeta de destino de la acción de mover a carpeta." #: paperless_mail/models.py:173 msgid "assign title from" -msgstr "" +msgstr "asignar titulo desde" #: paperless_mail/models.py:183 msgid "assign this tag" -msgstr "" +msgstr "asignar esta etiqueta" #: paperless_mail/models.py:191 msgid "assign this document type" -msgstr "" +msgstr "asignar este tipo de documento" #: paperless_mail/models.py:195 msgid "assign correspondent from" From e55b587791da2c056ce457e40723c6535e93f2fc Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:36 +0100 Subject: [PATCH 552/898] New translations messages.xlf (French) [ci skip] --- src-ui/src/locale/messages.fr_FR.xlf | 126 +++++++++++++-------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index bbc97753e..c0547d6ed 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Le document <x equiv-text="status.filename" id="PH"/> a été ajouté à Paperless-ng.</target> + <target state="translated">Le document <x id="PH" equiv-text="status.filename"/> a été ajouté à Paperless-ng.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Impossible d'ajouter <x equiv-text="status.filename" id="PH"/> : <x equiv-text="status.message" id="PH_1"/></target> + <target state="translated">Impossible d'ajouter <x id="PH" equiv-text="status.filename"/> : <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Le document <x equiv-text="status.filename" id="PH"/> est en cours de traitement par Paperless-ng.</target> + <target state="translated">Le document <x id="PH" equiv-text="status.filename"/> est en cours de traitement par Paperless-ng.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -56,7 +56,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documents</target> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Vue "<x equiv-text="this.list.activeSavedViewTitle" id="PH"/>" enregistrée avec succès.</target> + <target state="translated">Vue "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" enregistrée avec succès.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Vue "<x equiv-text="savedView.name" id="PH"/>" créée avec succès.</target> + <target state="translated">Vue "<x id="PH" equiv-text="savedView.name"/>" créée avec succès.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Enregistrer "<x equiv-text="{{list.activeSavedViewTitle}}" id="INTERPOLATION"/>"</target> + <target state="translated">Enregistrer "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Voulez-vous vraiment supprimer le document "<x equiv-text="this.document.title" id="PH"/>" ?</target> + <target state="translated">Voulez-vous vraiment supprimer le document "<x id="PH" equiv-text="this.document.title"/>" ?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Une erreur s'est produite lors de la suppression du document : <x equiv-text="JSON.stringify(error)" id="PH"/></target> + <target state="translated">Une erreur s'est produite lors de la suppression du document : <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -328,7 +328,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="needs-translation">Page</target> + <target state="translated">Page</target> </trans-unit> <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> @@ -336,7 +336,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">sur <x equiv-text="{{previewNumPages}}" id="INTERPOLATION"/></target> + <target state="translated">sur <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> </trans-unit> <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> <source>Download original</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Bonjour <x equiv-text="this.displayName" id="PH"/>, bienvenue dans Paperless-ng !</target> + <target state="translated">Bonjour <x id="PH" equiv-text="this.displayName"/>, bienvenue dans Paperless-ng !</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Voulez-vous vraiment supprimer l'étiquette "<x equiv-text="object.name" id="PH"/>" ?</target> + <target state="translated">Voulez-vous vraiment supprimer l'étiquette "<x id="PH" equiv-text="object.name"/>" ?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -544,7 +544,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="needs-translation">Actions</target> + <target state="translated">Actions</target> </trans-unit> <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> <source>Documents</source> @@ -552,7 +552,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="needs-translation">Documents</target> + <target state="translated">Documents</target> </trans-unit> <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> <source>Edit</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Voulez-vous vraiment supprimer le type de document "<x equiv-text="object.name" id="PH"/>" ?</target> + <target state="translated">Voulez-vous vraiment supprimer le type de document "<x id="PH" equiv-text="object.name"/>" ?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Vue "<x equiv-text="savedView.name" id="PH"/>" supprimée.</target> + <target state="translated">Vue "<x id="PH" equiv-text="savedView.name"/>" supprimée.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Une erreur s'est produite lors de l'enregistrement des paramètres sur le serveur : <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -648,7 +648,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="needs-translation">Notifications</target> + <target state="translated">Notifications</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Court : <x equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Court : <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -712,7 +712,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">55</context> </context-group> - <target state="translated">Moyen : <x equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Moyen : <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> @@ -720,7 +720,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Long : <x equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}" id="INTERPOLATION"/></target> + <target state="translated">Long : <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> <source>Items per page</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Voulez-vous vraiment supprimer le correspondant "<x equiv-text="object.name" id="PH"/>" ?</target> + <target state="translated">Voulez-vous vraiment supprimer le correspondant "<x id="PH" equiv-text="object.name"/>" ?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -936,7 +936,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Confirmation</target> + <target state="translated">Confirmation</target> </trans-unit> <trans-unit id="9178182467454450952" datatype="html"> <source>Confirm</source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Requête de recherche invalide : <x equiv-text="{{errorMessage}}" id="INTERPOLATION"/></target> + <target state="translated">Requête de recherche invalide : <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Présentation des documents similaires à <x equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}" id="START_LINK"/><x equiv-text="{{more_like_doc?.original_file_name}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/></target> + <target state="translated">Présentation des documents similaires à <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1072,7 +1072,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Requête de recherche : <x equiv-text="<i>{{query}}" id="START_ITALIC_TEXT"/><x equiv-text="{{query}}</i>" id="INTERPOLATION"/><x equiv-text="</i>" id="CLOSE_ITALIC_TEXT"/></target> + <target state="translated">Requête de recherche : <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Vouliez-vous dire "<x equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}" id="START_LINK"/><x equiv-text="{{correctedQuery}}</a>" id="INTERPOLATION"/><x equiv-text="</a>" id="CLOSE_LINK"/>" ?</target> + <target state="translated">Vouliez-vous dire "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>" ?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1097,7 +1097,7 @@ <context context-type="linenumber">11</context> </context-group> <note priority="1" from="description">app title</note> - <target state="needs-translation">Paperless-ng</target> + <target state="translated">Paperless-ng</target> </trans-unit> <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> <source>Search documents</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="needs-translation">Info</target> + <target state="translated">Info</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="needs-translation">Documentation</target> + <target state="translated">Documentation</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1153,7 +1153,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">175</context> </context-group> - <target state="needs-translation">GitHub</target> + <target state="translated">GitHub</target> </trans-unit> <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> <source>Suggest an idea</source> @@ -1169,7 +1169,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Connexion en tant que <x equiv-text="{{displayName}}" id="INTERPOLATION"/></target> + <target state="translated">Connexion en tant que <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> </trans-unit> <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> <source>Open documents</source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Correspondant : <x equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Correspondant : <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Type : <x equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Type : <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">45</context> </context-group> - <target state="translated">Étiquette : <x equiv-text="this.tags.find(t => t.id == +rule.value)?.name" id="PH"/></target> + <target state="translated">Étiquette : <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1257,7 +1257,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">53</context> </context-group> - <target state="translated">Titre : <x equiv-text="rule.value" id="PH"/></target> + <target state="translated">Titre : <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1378,7 +1378,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Créé le : <x equiv-text="{{document.created | customDate}}" id="INTERPOLATION"/></target> + <target state="translated">Créé le : <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Une erreur s'est produite lors de l'exécution de l'opération de masse : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Une erreur s'est produite lors de l'exécution de l'opération de masse : <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1426,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">113</context> </context-group> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> </trans-unit> <trans-unit id="8639884465898458690" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x equiv-text="items[0].name" id="PH"/>" et "<x equiv-text="items[1].name" id="PH_1"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" et "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x equiv-text="list" id="PH"/> et "<x equiv-text="items[items.length - 1].name" id="PH_1"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> et "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Cette action affectera l'étiquette "<x equiv-text="tag.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action affectera l'étiquette "<x id="PH" equiv-text="tag.name"/>" au(x) <x id="PH_1" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action affectera les étiquettes <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> au(x) <x id="PH_1" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Cette action supprimera l'étiquette "<x equiv-text="tag.name" id="PH"/>" de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action supprimera l'étiquette "<x id="PH" equiv-text="tag.name"/>" de(s) <x id="PH_1" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">Cette action supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH"/> de(s) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action supprimera les étiquettes <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> de(s) <x id="PH_1" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">Cette action affectera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToAdd)" id="PH"/> et supprimera les étiquettes <x equiv-text="this._localizeList(changedTags.itemsToRemove)" id="PH_1"/> de(s) <x equiv-text="this.list.selected.size" id="PH_2"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action affectera les étiquettes <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> et supprimera les étiquettes <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> de(s) <x id="PH_2" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">Cette action affectera le correspondant "<x equiv-text="correspondent.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/>document(s) sélectionné(s).</target> + <target state="translated">Cette action affectera le correspondant "<x id="PH" equiv-text="correspondent.name"/>" au(x) <x id="PH_1" equiv-text="this.list.selected.size"/>document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Cette action supprimera le correspondant de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action supprimera le correspondant de(s) <x id="PH" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="translated">Cette action affectera le type de document "<x equiv-text="documentType.name" id="PH"/>" au(x) <x equiv-text="this.list.selected.size" id="PH_1"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action affectera le type de document "<x id="PH" equiv-text="documentType.name"/>" au(x) <x id="PH_1" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Cette action supprimera le type de document de(s) <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action supprimera le type de document de(s) <x id="PH" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated">Cette action supprimera définitivement <x equiv-text="this.list.selected.size" id="PH"/> document(s) sélectionné(s).</target> + <target state="translated">Cette action supprimera définitivement <x id="PH" equiv-text="this.list.selected.size"/> document(s) sélectionné(s).</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1653,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Nombre total de documents : <x equiv-text="{{statistics?.documents_total}}" id="INTERPOLATION"/></target> + <target state="translated">Nombre total de documents : <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> </trans-unit> <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> @@ -1661,7 +1661,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documents dans la boîte de réception : <x equiv-text="{{statistics?.documents_inbox}}" id="INTERPOLATION"/></target> + <target state="translated">Documents dans la boîte de réception : <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Traitement : <x equiv-text="countUploadingAndProcessing" id="PH"/></target> + <target state="translated">Traitement : <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Échec : <x equiv-text="countFailed" id="PH"/></target> + <target state="translated">Échec : <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Ajout : <x equiv-text="countSuccess" id="PH"/></target> + <target state="translated">Ajout : <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Erreur HTTP : <x equiv-text="error.status" id="PH"/> <x equiv-text="error.statusText" id="PH_1"/></target> + <target state="translated">Erreur HTTP : <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">ISO 8601</target> + <target state="translated">ISO 8601</target> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> @@ -2075,7 +2075,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="needs-translation">Information</target> + <target state="translated">Information</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Impossible d'enregistrer l'élément : <x equiv-text="error" id="PH"/></target> + <target state="translated">Impossible d'enregistrer l'élément : <x id="PH" equiv-text="error"/></target> </trans-unit> <trans-unit id="810888510148304696" datatype="html"> <source>Automatic</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Une erreur s'est produite lors de la suppression de l'élément : <x equiv-text="JSON.stringify(error.error)" id="PH"/></target> + <target state="translated">Une erreur s'est produite lors de la suppression de l'élément : <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> From e98175e2b5afb4863ec1dcd7bf9f49436b14c628 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 6 Mar 2021 23:56:37 +0100 Subject: [PATCH 553/898] New translations django.po (French) [ci skip] --- src/locale/fr_FR/LC_MESSAGES/django.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index f97e275d2..9ed2a51ac 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:40\n" +"PO-Revision-Date: 2021-03-06 22:56\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -19,7 +19,7 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Documents" #: documents/models.py:32 msgid "Any word" @@ -180,11 +180,11 @@ msgstr "Le classement de ce document dans votre archive de documents physiques." #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "document" #: documents/models.py:224 msgid "documents" -msgstr "" +msgstr "documents" #: documents/models.py:311 msgid "debug" @@ -192,7 +192,7 @@ msgstr "débogage" #: documents/models.py:312 msgid "information" -msgstr "" +msgstr "information" #: documents/models.py:313 msgid "warning" @@ -212,7 +212,7 @@ msgstr "groupe" #: documents/models.py:322 msgid "message" -msgstr "" +msgstr "message" #: documents/models.py:325 msgid "level" @@ -442,7 +442,7 @@ msgstr "Paperless-ng ne traitera que les courriers qui correspondent à TOUS les #: paperless_mail/admin.py:37 msgid "Actions" -msgstr "" +msgstr "Actions" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." @@ -610,7 +610,7 @@ msgstr "Les pièces jointes en ligne comprennent les images intégrées, il est #: paperless_mail/models.py:159 msgid "action" -msgstr "" +msgstr "action" #: paperless_mail/models.py:165 msgid "action parameter" From b99c38126a85349bdccd7cabdb2d59f8176cbb79 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 01:59:13 +0100 Subject: [PATCH 554/898] New translations messages.xlf (Russian) [ci skip] --- src-ui/src/locale/messages.ru_RU.xlf | 100 +++++++++++++-------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 816a78ca5..214545725 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Просмотр "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" успешно сохранён.</target> + <target state="translated">Представление "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" успешно сохранено.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Просмотр "<x id="PH" equiv-text="savedView.name"/>" создан успешно</target> + <target state="translated">Представление "<x id="PH" equiv-text="savedView.name"/>" успешно создано.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Выбрать</target> + <target state="translated">Выбор</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Ничего не выбрано</target> + <target state="translated">Ничего</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -112,7 +112,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Сортировать</target> + <target state="translated">Сортировка</target> </trans-unit> <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="translated">Просмотры</target> + <target state="translated">Представления</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="translated">Сохранить как</target> + <target state="translated">Сохранить как...</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -144,7 +144,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> - <target state="translated">{VAR_PLURAL, plural, =1 {Выделено<x id="INTERPOLATION"/> из одного документа} other {Выделенные <x id="INTERPOLATION"/> и <x id="INTERPOLATION_1"/> документы}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Выделено документов: <x id="INTERPOLATION"/> из 1} other {Выделено документов: <x id="INTERPOLATION"/> из <x id="INTERPOLATION_1"/>}}</target> </trans-unit> <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> @@ -152,7 +152,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="translated">{VAR_PLURAL, plural, =1 {Один документ} other {<x id="INTERPOLATION"/> докуметы}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Один документ} other {<x id="INTERPOLATION"/> документа}}</target> </trans-unit> <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">АН</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -672,7 +672,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="translated">Отобразить язык</target> + <target state="translated">Язык интерфейса</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -688,7 +688,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Отображение даты</target> + <target state="translated">Дата</target> </trans-unit> <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> @@ -704,7 +704,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Кратко: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + <target state="translated">Краткий: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> </trans-unit> <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> @@ -728,7 +728,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">67</context> </context-group> - <target state="translated">Элементов на страницу</target> + <target state="translated">Элементов на странице</target> </trans-unit> <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> <source>Document editor</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Используйте просмоторщик PDF встроенный в браузер</target> + <target state="translated">Использовать просмоторщик PDF встроенный в браузер</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Это обычный способ для быстрого отображения больших PDF документов, но может быть так, что некоторые браузеры не поддерживают этот метод.</target> + <target state="translated">Это, обычно, более быстрый способо отображения больших PDF документов, но он может не работать в некоторых браузерах.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -760,7 +760,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> - <target state="translated">Тёмная тема</target> + <target state="translated">Тёмный режим</target> </trans-unit> <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> @@ -776,7 +776,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> - <target state="translated">Включить тёмную тему</target> + <target state="translated">Включить тёмный режим</target> </trans-unit> <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> @@ -784,7 +784,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Invert thumbnails in dark mode</target> + <target state="translated">Инвертировать эскизы при включенном тёмном режиме</target> </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="translated">Показать диалог подтверждения</target> + <target state="translated">Показывать диалоги подтверждения</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="needs-translation">This will suppress all messages about document processing status on the dashboard.</target> + <target state="translated">Это отключит все сообщения о статусе обработки документов на панели инструментов.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -872,7 +872,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">146</context> </context-group> - <target state="needs-translation">Appears on</target> + <target state="translated">Появляется на</target> </trans-unit> <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> <source>Show on dashboard</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Вы действительно хотите удалить этого корреспондента "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -1201,7 +1201,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="needs-translation">Title & content</target> + <target state="translated">Заголовок & содержимое</target> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> @@ -1444,7 +1444,7 @@ <context context-type="linenumber">117</context> </context-group> <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> - <target state="needs-translation">, </target> + <target state="translated">, </target> </trans-unit> <trans-unit id="1822679894391095557" datatype="html"> <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция назначит корреспондента "<x id="PH" equiv-text="correspondent.name"/>" <x id="PH_1" equiv-text="this.list.selected.size"/> выбранным документам.</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Эта операция удалит корреспондента из <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов.</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1533,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> - <target state="needs-translation">Confirm document type assignment</target> + <target state="translated">Подтвердите назначение типа документа</target> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1750,7 +1750,7 @@ <context context-type="linenumber">4</context> </context-group> <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> - <target state="needs-translation">Dismiss completed</target> + <target state="translated">Скрытие завершено</target> </trans-unit> <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> @@ -1807,7 +1807,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</target> + <target state="translated">После того, как вы добавите несколько документов в paperless и добавите к ним метаданные, paperless сможет автоматически назначать эти метаданные новым документам.</target> </trans-unit> <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> @@ -1815,7 +1815,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">You can configure paperless to read your mails and add documents from attached files.</target> + <target state="translated">Вы можете настроить paperless на чтение ваших писем и добавление документов из прикрепленных файлов.</target> </trans-unit> <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> @@ -1823,7 +1823,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</target> + <target state="translated">Обратитесь к документации по использованию этих функций. Раздел "Использование" содержит общую информацию о работе с paperless.</target> </trans-unit> <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Portuguese (Brazil)</target> + <target state="translated">Португальский (Бразилия)</target> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> @@ -1935,7 +1935,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> - <target state="needs-translation">Italian</target> + <target state="translated">Итальянский</target> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> @@ -1943,7 +1943,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Romanian</target> + <target state="translated">Румынский</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -1976,7 +1976,7 @@ <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Pre-consume script does not exist.</target> + <target state="translated">скрипт предобработки не существует.</target> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -1985,7 +1985,7 @@ <context context-type="linenumber">18</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing pre-consume script.</target> + <target state="translated">Ошибка при выполнении скрипта предобработки.</target> </trans-unit> <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> @@ -1994,7 +1994,7 @@ <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Post-consume script does not exist.</target> + <target state="translated">скрипт постобработки не существует.</target> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> @@ -2003,7 +2003,7 @@ <context context-type="linenumber">20</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing post-consume script.</target> + <target state="translated">Ошибка при выполнении скрипта постобработки.</target> </trans-unit> <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> @@ -2035,7 +2035,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> - <target state="needs-translation">Generating thumbnail...</target> + <target state="translated">Создание эскиза...</target> </trans-unit> <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> @@ -2043,7 +2043,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Retrieving date from document...</target> + <target state="translated">Получение даты из документа...</target> </trans-unit> <trans-unit id="7162102384876037296" datatype="html"> <source>Saving document...</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">ASN</target> + <target state="translated">АН</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> @@ -2171,7 +2171,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="needs-translation">Associated documents will not be deleted.</target> + <target state="translated">Связанные документы не будут удалены.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2203,7 +2203,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Any: Document contains any of these words (space separated)</target> + <target state="translated">Любой: Документ содержит любое из этих слов (разделитель - пробел)</target> </trans-unit> <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> @@ -2219,7 +2219,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">All: Document contains all of these words (space separated)</target> + <target state="translated">Все: Документ содержит все эти слова (разделитель - пробел)</target> </trans-unit> <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> @@ -2235,7 +2235,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Exact: Document contains this string</target> + <target state="translated">Точное: Документ содержит эту строку</target> </trans-unit> <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> @@ -2251,7 +2251,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="needs-translation">Regular expression: Document matches this regular expression</target> + <target state="translated">Регулярное выражение: Документ соответствует этому регулярному выражению</target> </trans-unit> <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> @@ -2259,7 +2259,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy word</target> + <target state="translated">"Нечёткий" режим</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> @@ -2267,7 +2267,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + <target state="translated">Нечетко: Документ содержит слово, подобное этому слову</target> </trans-unit> <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> @@ -2275,7 +2275,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="needs-translation">Auto: Learn matching automatically</target> + <target state="translated">Авто: Автоматически изучать соответствие</target> </trans-unit> </body> </file> From 7de7875e3742e8ae1026736b7c95f73e4a1112b7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 02:58:08 +0100 Subject: [PATCH 555/898] New translations django.po (Russian) [ci skip] --- src/locale/ru_RU/LC_MESSAGES/django.po | 284 ++++++++++++------------- 1 file changed, 142 insertions(+), 142 deletions(-) diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index e9f2c1fd5..0494f0daa 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"PO-Revision-Date: 2021-03-07 01:58\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -39,7 +39,7 @@ msgstr "Регулярное выражение" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "\"Нечёткий\" режим" #: documents/models.py:37 msgid "Automatic" @@ -48,353 +48,353 @@ msgstr "Автоматически" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" -msgstr "" +msgstr "имя" #: documents/models.py:45 msgid "match" -msgstr "" +msgstr "соответствие" #: documents/models.py:49 msgid "matching algorithm" -msgstr "" +msgstr "алгоритм сопоставления" #: documents/models.py:55 msgid "is insensitive" -msgstr "" +msgstr "без учёта регистра" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "" +msgstr "корреспондент" #: documents/models.py:75 msgid "correspondents" -msgstr "" +msgstr "корреспонденты" #: documents/models.py:81 msgid "color" -msgstr "" +msgstr "цвет" #: documents/models.py:87 msgid "is inbox tag" -msgstr "" +msgstr "это входящий тег" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "Отметить этот тег как «Входящий»: все вновь добавленные документы будут помечены тегами «Входящие»." #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "тег" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "" +msgstr "теги" #: documents/models.py:101 documents/models.py:133 msgid "document type" -msgstr "" +msgstr "тип документа" #: documents/models.py:102 msgid "document types" -msgstr "" +msgstr "типы документов" #: documents/models.py:110 msgid "Unencrypted" -msgstr "" +msgstr "не зашифровано" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "Зашифровано с помощью GNU Privacy Guard" #: documents/models.py:124 msgid "title" -msgstr "" +msgstr "заголовок" #: documents/models.py:137 msgid "content" -msgstr "" +msgstr "содержимое" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "Это поле используется в основном для поиска." #: documents/models.py:144 msgid "mime type" -msgstr "" +msgstr "тип Mime" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "контрольная сумма" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "" +msgstr "Контрольная сумма оригинального документа." #: documents/models.py:163 msgid "archive checksum" -msgstr "" +msgstr "контрольная сумма архива" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "" +msgstr "Контрольная сумма архивного документа." #: documents/models.py:172 documents/models.py:328 msgid "created" -msgstr "" +msgstr "создано" #: documents/models.py:176 msgid "modified" -msgstr "" +msgstr "изменено" #: documents/models.py:180 msgid "storage type" -msgstr "" +msgstr "тип хранилища" #: documents/models.py:188 msgid "added" -msgstr "" +msgstr "добавлено" #: documents/models.py:192 msgid "filename" -msgstr "" +msgstr "имя файла" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "" +msgstr "Текущее имя файла в хранилище" #: documents/models.py:202 msgid "archive filename" -msgstr "" +msgstr "имя файла архива" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "" +msgstr "Текущее имя файла архива в хранилище" #: documents/models.py:212 msgid "archive serial number" -msgstr "" +msgstr "архивный номер (АН)" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "" +msgstr "Позиция этого документа в вашем физическом архиве документов." #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "документ" #: documents/models.py:224 msgid "documents" -msgstr "" +msgstr "документы" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "отладка" #: documents/models.py:312 msgid "information" -msgstr "" +msgstr "информация" #: documents/models.py:313 msgid "warning" -msgstr "" +msgstr "предупреждение" #: documents/models.py:314 msgid "error" -msgstr "" +msgstr "ошибка" #: documents/models.py:315 msgid "critical" -msgstr "" +msgstr "критическая" #: documents/models.py:319 msgid "group" -msgstr "" +msgstr "группа" #: documents/models.py:322 msgid "message" -msgstr "" +msgstr "сообщение" #: documents/models.py:325 msgid "level" -msgstr "" +msgstr "уровень" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "журнал" #: documents/models.py:333 msgid "logs" -msgstr "" +msgstr "логи" #: documents/models.py:344 documents/models.py:394 msgid "saved view" -msgstr "" +msgstr "сохранённое представление" #: documents/models.py:345 msgid "saved views" -msgstr "" +msgstr "сохраненные представления" #: documents/models.py:348 msgid "user" -msgstr "" +msgstr "пользователь" #: documents/models.py:354 msgid "show on dashboard" -msgstr "" +msgstr "показать на панели" #: documents/models.py:357 msgid "show in sidebar" -msgstr "" +msgstr "показать в боковой панели" #: documents/models.py:361 msgid "sort field" -msgstr "" +msgstr "Поле сортировки" #: documents/models.py:364 msgid "sort reverse" -msgstr "" +msgstr "обратная сортировка" #: documents/models.py:370 msgid "title contains" -msgstr "" +msgstr "заголовок содержит" #: documents/models.py:371 msgid "content contains" -msgstr "" +msgstr "содержимое содержит" #: documents/models.py:372 msgid "ASN is" -msgstr "" +msgstr "АН" #: documents/models.py:373 msgid "correspondent is" -msgstr "" +msgstr "корреспондент" #: documents/models.py:374 msgid "document type is" -msgstr "" +msgstr "тип документа" #: documents/models.py:375 msgid "is in inbox" -msgstr "" +msgstr "во входящих" #: documents/models.py:376 msgid "has tag" -msgstr "" +msgstr "есть тег" #: documents/models.py:377 msgid "has any tag" -msgstr "" +msgstr "есть любой тег" #: documents/models.py:378 msgid "created before" -msgstr "" +msgstr "создан до" #: documents/models.py:379 msgid "created after" -msgstr "" +msgstr "создан после" #: documents/models.py:380 msgid "created year is" -msgstr "" +msgstr "год создания" #: documents/models.py:381 msgid "created month is" -msgstr "" +msgstr "месяц создания" #: documents/models.py:382 msgid "created day is" -msgstr "" +msgstr "день создания" #: documents/models.py:383 msgid "added before" -msgstr "" +msgstr "добавлен до" #: documents/models.py:384 msgid "added after" -msgstr "" +msgstr "добавлен после" #: documents/models.py:385 msgid "modified before" -msgstr "" +msgstr "изменен до" #: documents/models.py:386 msgid "modified after" -msgstr "" +msgstr "изменен после" #: documents/models.py:387 msgid "does not have tag" -msgstr "" +msgstr "не имеет тега" #: documents/models.py:398 msgid "rule type" -msgstr "" +msgstr "Тип правила" #: documents/models.py:402 msgid "value" -msgstr "" +msgstr "значение" #: documents/models.py:408 msgid "filter rule" -msgstr "" +msgstr "Правило фильтрации" #: documents/models.py:409 msgid "filter rules" -msgstr "" +msgstr "правила фильтрации" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expresssion: %(error)s" -msgstr "" +msgstr "неверное регулярное выражение: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." -msgstr "" +msgstr "Неверный цвет." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "Тип файла %(type)s не поддерживается" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "" +msgstr "Paperless-ng загружается..." #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" -msgstr "" +msgstr "Выполнен выход из Paperless-ng" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "Вы успешно вышли из системы. До свидания!" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "" +msgstr "Войти снова" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" -msgstr "" +msgstr "Выполнен выход в Paperless-ng" #: documents/templates/registration/login.html:42 msgid "Please sign in." -msgstr "" +msgstr "Пожалуйста, войдите." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "Неправильные имя пользователя или пароль! Попробуйте еще раз." #: documents/templates/registration/login.html:48 msgid "Username" -msgstr "" +msgstr "Имя пользователя" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "" +msgstr "Пароль" #: documents/templates/registration/login.html:54 msgid "Sign in" -msgstr "" +msgstr "Вход" #: paperless/settings.py:297 msgid "English (US)" @@ -418,27 +418,27 @@ msgstr "Французский" #: paperless/settings.py:302 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "Portuguese (Brazil)" #: paperless/settings.py:303 msgid "Italian" -msgstr "" +msgstr "Italian" #: paperless/settings.py:304 msgid "Romanian" -msgstr "" +msgstr "Romanian" #: paperless/urls.py:118 msgid "Paperless-ng administration" -msgstr "" +msgstr "Администрирование Paperless-ng" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Фильтр" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "Paperless будет обрабатывать только те письма, которые соответствуют всем фильтрам, указанным ниже." #: paperless_mail/admin.py:37 msgid "Actions" @@ -446,7 +446,7 @@ msgstr "Действия" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "Действие применено к письму. Это действие применяется только при обработке документов из почты. Сообщения без вложений не обрабатываются." #: paperless_mail/admin.py:46 msgid "Metadata" @@ -454,83 +454,83 @@ msgstr "Метаданные" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "Автоматически назначать метаданные документам, полученным из этого правила. Если вы не назначаете здесь теги, типы или корреспонденты, paperless все равно будут обрабатывать все соответствующие правила, которые вы определили." #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "" +msgstr "Безбумажная почта" #: paperless_mail/models.py:11 msgid "mail account" -msgstr "" +msgstr "почтовый ящик" #: paperless_mail/models.py:12 msgid "mail accounts" -msgstr "" +msgstr "Почтовые ящики" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "" +msgstr "Без шифрования" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "" +msgstr "Использовать SSL" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "" +msgstr "Использовать STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "" +msgstr "Сервер IMAP" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "" +msgstr "Порт IMAP" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "Обычно это 143 для нешифрованных и STARTTLS соединений и 993 для SSL-соединений." #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "" +msgstr "Безопасность IMAP" #: paperless_mail/models.py:46 msgid "username" -msgstr "" +msgstr "Имя пользователя" #: paperless_mail/models.py:50 msgid "password" -msgstr "" +msgstr "пароль" #: paperless_mail/models.py:60 msgid "mail rule" -msgstr "" +msgstr "правило почты" #: paperless_mail/models.py:61 msgid "mail rules" -msgstr "" +msgstr "правила почты" #: paperless_mail/models.py:67 msgid "Only process attachments." -msgstr "" +msgstr "Обрабатывать только вложения." #: paperless_mail/models.py:68 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "Обрабатывать все файлы, включая 'встроенные' вложения." #: paperless_mail/models.py:78 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "Пометить как прочитанное, не обрабатывать прочитанные письма" #: paperless_mail/models.py:79 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "Пометить почту, не обрабатывать помеченные письма" #: paperless_mail/models.py:80 msgid "Move to specified folder" -msgstr "" +msgstr "Переместить в указанную папку" #: paperless_mail/models.py:81 msgid "Delete" @@ -538,105 +538,105 @@ msgstr "Удалить" #: paperless_mail/models.py:88 msgid "Use subject as title" -msgstr "" +msgstr "Тема в качестве заголовка" #: paperless_mail/models.py:89 msgid "Use attachment filename as title" -msgstr "" +msgstr "Использовать имя вложенного файла как заголовок" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" -msgstr "" +msgstr "Не назначать корреспондента" #: paperless_mail/models.py:101 msgid "Use mail address" -msgstr "" +msgstr "Использовать email адрес" #: paperless_mail/models.py:103 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "Использовать имя (или адрес электронной почты, если недоступно)" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" -msgstr "" +msgstr "Использовать корреспондента, выбранного ниже" #: paperless_mail/models.py:113 msgid "order" -msgstr "" +msgstr "порядок" #: paperless_mail/models.py:120 msgid "account" -msgstr "" +msgstr "Учётная запись" #: paperless_mail/models.py:124 msgid "folder" -msgstr "" +msgstr "каталог" #: paperless_mail/models.py:128 msgid "filter from" -msgstr "" +msgstr "фильтр по отправителю" #: paperless_mail/models.py:131 msgid "filter subject" -msgstr "" +msgstr "фильтр по теме" #: paperless_mail/models.py:134 msgid "filter body" -msgstr "" +msgstr "фильтр по тексту сообщения" #: paperless_mail/models.py:138 msgid "filter attachment filename" -msgstr "" +msgstr "фильтр по имени вложения" #: paperless_mail/models.py:140 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "Обрабатывать только документы, которые полностью совпадают с именем файла (если оно указано). Маски, например *.pdf или *счет*, разрешены. Без учёта регистра." #: paperless_mail/models.py:146 msgid "maximum age" -msgstr "" +msgstr "Максимальный возраст" #: paperless_mail/models.py:148 msgid "Specified in days." -msgstr "" +msgstr "Указывается в днях." #: paperless_mail/models.py:151 msgid "attachment type" -msgstr "" +msgstr "Тип вложения" #: paperless_mail/models.py:154 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "Вложенные вложения включая встраиваемые изображения. Лучше совместить эту опцию с фильтром по имени вложения." #: paperless_mail/models.py:159 msgid "action" -msgstr "" +msgstr "действие" #: paperless_mail/models.py:165 msgid "action parameter" -msgstr "" +msgstr "параметр действия" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "" +msgstr "Дополнительный параметр для выбранного действия, например целевой каталог для действия \"переместить в каталог\"." #: paperless_mail/models.py:173 msgid "assign title from" -msgstr "" +msgstr "назначить заголовок из" #: paperless_mail/models.py:183 msgid "assign this tag" -msgstr "" +msgstr "назначить этот тег" #: paperless_mail/models.py:191 msgid "assign this document type" -msgstr "" +msgstr "назначить этот тип документа" #: paperless_mail/models.py:195 msgid "assign correspondent from" -msgstr "" +msgstr "назначить корреспондента из" #: paperless_mail/models.py:205 msgid "assign this correspondent" -msgstr "" +msgstr "назначить этого корреспондента" From a9dc04cdb1cbc13ded52ce53e3708e5192107402 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 02:58:09 +0100 Subject: [PATCH 556/898] New translations messages.xlf (Russian) [ci skip] --- src-ui/src/locale/messages.ru_RU.xlf | 116 +++++++++++++-------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 214545725..9bef6322a 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -152,7 +152,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="translated">{VAR_PLURAL, plural, =1 {Один документ} other {<x id="INTERPOLATION"/> документа}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Один документ} other {<x id="INTERPOLATION"/> документа(ов)}}</target> </trans-unit> <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="translated">Корреспонденция</target> + <target state="translated">Корреспондент</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="translated">Подтвердить удаление</target> + <target state="translated">Подтвердите удаление</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="translated">Файл из этого документа будет удалён незамедлительно. Это операцию нельзя отменить.</target> + <target state="translated">Файлы из этого документа будут удалены незамедлительно. Это операцию нельзя отменить.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="translated">Серийный номер архива</target> + <target state="translated">Архивный номер (АН)</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="translated">Название медиафайла</target> + <target state="translated">Имя файла</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="translated">Подлинная MD5 проверочная сумма</target> + <target state="translated">Оригинальная MD5 сумма</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="translated">Проверочная сумма MD5 архива</target> + <target state="translated">MD5 сумма архива</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -440,7 +440,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">122</context> </context-group> - <target state="translated">Метаданные архивированного документа</target> + <target state="translated">Метаданные архивного документа</target> </trans-unit> <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> <source>Save & next</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">Отсортировать по:</target> + <target state="translated">Отфильтровать по:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="translated">Удаления документов всегда будет требовать подтверждение.</target> + <target state="translated">Удаление документов всегда будет требовать подтверждения.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Спрятать уведомления на панели мониторинга</target> + <target state="translated">Спрятать уведомления на панели</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Это отключит все сообщения о статусе обработки документов на панели инструментов.</target> + <target state="translated">Это отключит все сообщения о статусе обработки документов на панели.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="translated">Показать в панели управления</target> + <target state="translated">Показать на панели</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="translated">Показать в опоковой панели</target> + <target state="translated">Показать в боковой панели</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Нет сохраненных представлений</target> + <target state="translated">Нет сохраненных представлений.</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Корреспонденция</target> + <target state="translated">Корреспонденты</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Последняя корреспонденция</target> + <target state="translated">Недавние корреспонденты</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="translated">Создать новую корреспонденцию</target> + <target state="translated">Создать нового корреспондента</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="translated">Редактировать корреспонденцию</target> + <target state="translated">Редактировать корреспондента</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Алгоритмы совпадения</target> + <target state="translated">Алгоритм сопоставления</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -984,7 +984,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Сопоставление с образцом</target> + <target state="translated">Шаблон соответствия</target> </trans-unit> <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Входящие теги</target> + <target state="translated">Входящий теги</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Тег входящих сообщений будет автоматически назначен всем используемым документам.</target> + <target state="translated">Входящий тег будет автоматически назначен всем добавленным документам.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Показываю документы похожие на <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated"> Показываю документы похожие на <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1088,7 +1088,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Нет результатов} =1 {Один результат} other {<x id="INTERPOLATION"/>результатов}}</target> + <target state="translated">{VAR_PLURAL, plural, =0 {Нет результатов} =1 {Один результат} other {Результаты: <x id="INTERPOLATION"/>}}</target> </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="translated">Инфо</target> + <target state="translated">Информация</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1193,7 +1193,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">73</context> </context-group> - <target state="translated">Заголоок</target> + <target state="translated">Заголовок</target> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> @@ -1201,7 +1201,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Заголовок & содержимое</target> + <target state="translated">Заголовок и содержимое</target> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> @@ -1209,7 +1209,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Корреспонденция: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + <target state="translated">Корреспондент: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1281,7 +1281,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Фильтр тип документов</target> + <target state="translated">Фильтр типа документов</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1289,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Сбросить фильры</target> + <target state="translated">Сбросить фильтры</target> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> @@ -1314,7 +1314,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Неделю назад</target> + <target state="translated">7 дней</target> </trans-unit> <trans-unit id="4463380307954693363" datatype="html"> <source>Last month</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Месяц назад</target> + <target state="translated">Месяц</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1330,7 +1330,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">36</context> </context-group> - <target state="translated">Три месяца назад</target> + <target state="translated">Три месяца</target> </trans-unit> <trans-unit id="3566342898065860218" datatype="html"> <source>Last year</source> @@ -1338,7 +1338,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">37</context> </context-group> - <target state="translated">Год назад</target> + <target state="translated">Год</target> </trans-unit> <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> <source>After</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">50</context> </context-group> - <target state="translated">Просмотр</target> + <target state="translated">Представление</target> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="translated">Отсортировано по тегу</target> + <target state="translated">Отфильтровать по тегу</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="translated">Результат:</target> + <target state="translated">Оценка:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Эта операция добавит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> выбранным документам <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> + <target state="translated">Эта операция добавит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> <x id="PH_1" equiv-text="this.list.selected.size"/> выбранным документам.</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Эта операция удалит теги "<x id="PH" equiv-text="tag.name"/>" с выбранных документов <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> + <target state="translated">Эта операция удалит теги "<x id="PH" equiv-text="tag.name"/>" с <x id="PH_1" equiv-text="this.list.selected.size"/> выбранных документов.</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">Эта операция удалит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> с выбранных документов <x id="PH_1" equiv-text="this.list.selected.size"/>.</target> + <target state="translated">Эта операция удалит теги <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> с <x id="PH_1" equiv-text="this.list.selected.size"/> выбранных документов.</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1509,7 +1509,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="translated">Подтвердите назначения корресподента</target> + <target state="translated">Подтвердите назначения корреспондента</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated">Эта операция навсегда удалит <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов</target> + <target state="translated">Эта операция навсегда удалит <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов.</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">HTTP ошибка: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + <target state="translated">Ошибка HTTP: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> </trans-unit> <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> <source>Upload new documents</source> @@ -1759,7 +1759,7 @@ <context context-type="linenumber">25</context> </context-group> <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> - <target state="translated">{VAR_PLURAL, plural, =1 {Ещё один документ} other {<x id="INTERPOLATION"/> ещё документов}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Ещё документ: 1} other {Ещё документов: <x id="INTERPOLATION"/>}}</target> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">Paperless предлагает больше возможностей сделать вашу жизнь легче:</target> + <target state="translated">Paperless предлагает больше возможностей, чтобы сделать вашу жизнь легче:</target> </trans-unit> <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="translated">Английский (США)</target> + <target state="translated">English (US)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1895,7 +1895,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="translated">Английский (Великобритании)</target> + <target state="translated">English (GB)</target> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="translated">Немецкий</target> + <target state="translated">German</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="translated">Французский</target> + <target state="translated">French</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="translated">Португальский (Бразилия)</target> + <target state="translated">Portuguese (Brazil)</target> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> @@ -1935,7 +1935,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> - <target state="translated">Итальянский</target> + <target state="translated">Italian</target> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> @@ -1943,7 +1943,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="translated">Румынский</target> + <target state="translated">Romanian</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="translated">Файл не найден</target> + <target state="translated">Файл не найден.</target> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> @@ -2019,7 +2019,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Этот тип файла не поддерживается</target> + <target state="translated">Этот тип файла не поддерживается.</target> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> @@ -2027,7 +2027,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="translated">Обрабатываю документ...</target> + <target state="translated">Обработка документа...</target> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="translated">Корреспонденция</target> + <target state="translated">Корреспондент</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> From 3a6f17ad42dacb14a470e7722a6cce00f1464ff7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:07:42 +0100 Subject: [PATCH 557/898] add ru-ru locale --- src-ui/angular.json | 3 ++- src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 3 ++- src/paperless/settings.py | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 4691fec61..12c84bc1b 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -22,7 +22,8 @@ "en-GB": "src/locale/messages.en_GB.xlf", "pt-BR": "src/locale/messages.pt_BR.xlf", "it-IT": "src/locale/messages.it_IT.xlf", - "ro-RO": "src/locale/messages.ro_RO.xlf" + "ro-RO": "src/locale/messages.ro_RO.xlf", + "ru-RU": "src/locale/messages.ru_RU.xlf" } }, "architect": { diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index be7ea2d0b..ebf24a327 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -73,6 +73,7 @@ import localePt from '@angular/common/locales/pt'; import localeIt from '@angular/common/locales/it'; import localeEnGb from '@angular/common/locales/en-GB'; import localeRo from '@angular/common/locales/ro'; +import localeRu from '@angular/common/locales/ru'; registerLocaleData(localeFr) @@ -82,6 +83,7 @@ registerLocaleData(localePt, "pt-BR") registerLocaleData(localeIt) registerLocaleData(localeEnGb) registerLocaleData(localeRo) +registerLocaleData(localeRu) @NgModule({ declarations: [ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index a2214bd04..bc5725bab 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -94,7 +94,8 @@ export class SettingsService { {code: "fr-fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}, {code: "it-it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"}, - {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"} + {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"}, + {code: "ru-ru", name: $localize`Russian`, englishName: "Russian", dateInputFormat: "dd.mm.yyyy"}, ] } diff --git a/src/paperless/settings.py b/src/paperless/settings.py index f57be3b6d..909a38a84 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -302,7 +302,8 @@ LANGUAGES = [ ("fr-fr", _("French")), ("pt-br", _("Portuguese (Brazil)")), ("it-it", _("Italian")), - ("ro-ro", _("Romanian")) + ("ro-ro", _("Romanian")), + ("ru-ru", _("Russian")) ] LOCALE_PATHS = [ From 0a3bec3c62ad1131ed97874ebbcaa77ae1560bbd Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:08:45 +0100 Subject: [PATCH 558/898] updates messages --- src-ui/messages.xlf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 329399584..06f65fca1 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1703,11 +1703,18 @@ <context context-type="linenumber">97</context> </context-group> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> From ae5d45d6066c8081ee41b75db7c012a50c792f73 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:28 +0100 Subject: [PATCH 559/898] New translations messages.xlf (Latin) [ci skip] --- src-ui/src/locale/messages.la_LA.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.la_LA.xlf b/src-ui/src/locale/messages.la_LA.xlf index 21f16eb92..149c26513 100644 --- a/src-ui/src/locale/messages.la_LA.xlf +++ b/src-ui/src/locale/messages.la_LA.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="needs-translation">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> From 457c488266ab69f5f8acb3de3bf7fe8fdd325c66 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:30 +0100 Subject: [PATCH 560/898] New translations messages.xlf (English, United Kingdom) [ci skip] --- src-ui/src/locale/messages.en_GB.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 13daeb771..c6e15fec8 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 6271bffb797b8f9e48be9fc6c92cb7a0ca608658 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:32 +0100 Subject: [PATCH 561/898] New translations messages.xlf (Thai) [ci skip] --- src-ui/src/locale/messages.th_TH.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.th_TH.xlf b/src-ui/src/locale/messages.th_TH.xlf index d5b3de020..6fac379bd 100644 --- a/src-ui/src/locale/messages.th_TH.xlf +++ b/src-ui/src/locale/messages.th_TH.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="needs-translation">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> From fd81393084291a1afe3ddbdc98f69763bc9f59de Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:35 +0100 Subject: [PATCH 562/898] New translations messages.xlf (Portuguese, Brazilian) [ci skip] --- src-ui/src/locale/messages.pt_BR.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 3d19c0ce6..f247c82ac 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Romeno</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From f870c47de8a12ad8d999b06e8e6cb40752a06cb0 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:37 +0100 Subject: [PATCH 563/898] New translations messages.xlf (Chinese Simplified) [ci skip] --- src-ui/src/locale/messages.zh_CN.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index 580497ce5..aea19a5fe 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="needs-translation">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> From 2d8d2fa6e3735bc40c1e0193e1a7be3d18848420 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:39 +0100 Subject: [PATCH 564/898] New translations messages.xlf (Russian) [ci skip] --- src-ui/src/locale/messages.ru_RU.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 9bef6322a..ae20bb29e 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 0e216c080e20beb1eed9875d5593cec062bf866c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:41 +0100 Subject: [PATCH 565/898] New translations messages.xlf (Portuguese) [ci skip] --- src-ui/src/locale/messages.pt_PT.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 95558d108..281b85563 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="needs-translation">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 8cff9000350cd58c5d731ccbbfd1a6375c1a05ca Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:43 +0100 Subject: [PATCH 566/898] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index f41489571..40e316865 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Roemeens</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From b4c44b47f981f4db37c7ac138312ce724ba813c4 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:44 +0100 Subject: [PATCH 567/898] New translations messages.xlf (Romanian) [ci skip] --- src-ui/src/locale/messages.ro_RO.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index c52bd0460..fe00e9e66 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Romana</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 0fe8baa4ae340537ae1b8045b7ac9ab95ee37849 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:46 +0100 Subject: [PATCH 568/898] New translations messages.xlf (Italian) [ci skip] --- src-ui/src/locale/messages.it_IT.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 489bdda42..c5f7e5b3a 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Rumeno</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 4a239f4c3f67321a1b4131a9a741f972f0a46c6d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:48 +0100 Subject: [PATCH 569/898] New translations messages.xlf (Hungarian) [ci skip] --- src-ui/src/locale/messages.hu_HU.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 9c474471b..bdf0bd186 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="needs-translation">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> From 9abef7aefc77927345659de355120e1f25ae8f2c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:50 +0100 Subject: [PATCH 570/898] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index c401d6cb5..1ec7c4fd2 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Rumänisch</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 1330a6998f5113e104ca1c7fc4c79098fa9da281 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:52 +0100 Subject: [PATCH 571/898] New translations messages.xlf (Czech) [ci skip] --- src-ui/src/locale/messages.cs_CZ.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index df4ee3d04..4816b84aa 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="needs-translation">Romanian</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> From 30d25cabca09b805eea22cff04f7dd206df7e8b5 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:55 +0100 Subject: [PATCH 572/898] New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index be2248614..2324ce889 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Rumano</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 5ccfbb282f442ea586558cbbcf083bbc8fdf9745 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:13:57 +0100 Subject: [PATCH 573/898] New translations messages.xlf (French) [ci skip] --- src-ui/src/locale/messages.fr_FR.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index c0547d6ed..56d561438 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1945,11 +1945,19 @@ </context-group> <target state="translated">Roumain</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="needs-translation">Russian</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> From 14c525c136b51e7b1bf0de18d38db95b72fc63df Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 10:14:00 +0100 Subject: [PATCH 574/898] New translations messages.xlf (Xhosa) [ci skip] --- src-ui/src/locale/messages.xh_ZA.xlf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index f17fd8941..5d0466f11 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1945,11 +1945,19 @@ </context-group> <target>crwdns3320:0crwdne3320:0</target> </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target>crwdns3404:0crwdne3404:0</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">102</context> + <context context-type="linenumber">103</context> </context-group> <target>crwdns3322:0crwdne3322:0</target> </trans-unit> From 7647c04b2c285cc19a4f24d24bb9c0fb15fb7594 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 11:08:30 +0100 Subject: [PATCH 575/898] New translations django.po (German) [ci skip] --- src/locale/de_DE/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index b0c567568..8f196fb98 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"PO-Revision-Date: 2021-03-07 10:08\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -618,7 +618,7 @@ msgstr "Parameter für Aktion" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Zusätzlicher Parameter für die oben ausgewählte Aktion, zum Beispiel der Zielordner für die Aktion \"In angegebenen Ordner verschieben\"" +msgstr "Zusätzlicher Parameter für die oben ausgewählte Aktion, zum Beispiel der Zielordner für die Aktion \"In angegebenen Ordner verschieben\"." #: paperless_mail/models.py:173 msgid "assign title from" From 728463655d13e81b7fd4aa3b9af16a8eb0a0be53 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 11:08:32 +0100 Subject: [PATCH 576/898] New translations messages.xlf (German) [ci skip] --- src-ui/src/locale/messages.de_DE.xlf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 1ec7c4fd2..6f06fc2e7 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Unterdrücke Benachrichtigungen auf der Startseite.</target> + <target state="translated">Unterdrücke Benachrichtigungen auf der Startseite</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Russisch</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> From b53cd8e8a2f76abd1e326fffb9d54d6345acd710 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 11:08:33 +0100 Subject: [PATCH 577/898] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 40e316865..c8eadbc34 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten."</target> + <target state="translated">"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> From e09ac0c21cee1be9f137fff851a036e326159097 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 13:11:07 +0100 Subject: [PATCH 578/898] New translations messages.xlf (Dutch) [ci skip] --- src-ui/src/locale/messages.nl_NL.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index c8eadbc34..9ac2f2b8c 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Russisch</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> From 4698c6ade1694afdb11eccf8fafe9914af279024 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 13:16:23 +0100 Subject: [PATCH 579/898] some initial attempts to merge search and document list --- src/documents/index.py | 64 ++++++++++++++++++++++++++++++++++++++++++ src/documents/views.py | 40 ++++++++++++++++++++++++++ src/paperless/urls.py | 4 +-- 3 files changed, 106 insertions(+), 2 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index 89e56e930..2c851c9ea 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -2,6 +2,7 @@ import logging import os from contextlib import contextmanager +import math from django.conf import settings from whoosh import highlight, classify, query from whoosh.fields import Schema, TEXT, NUMERIC, KEYWORD, DATETIME @@ -9,8 +10,10 @@ from whoosh.highlight import Formatter, get_text from whoosh.index import create_in, exists_in, open_dir from whoosh.qparser import MultifieldParser from whoosh.qparser.dateparse import DateParserPlugin +from whoosh.searching import ResultsPage from whoosh.writing import AsyncWriter +from documents.models import Document logger = logging.getLogger("paperless.index") @@ -66,6 +69,7 @@ def get_schema(): title=TEXT(stored=True), content=TEXT(), correspondent=TEXT(stored=True), + correspondent_id=NUMERIC(stored=True, numtype=int), tag=KEYWORD(stored=True, commas=True, scorable=True, lowercase=True), type=TEXT(stored=True), created=DATETIME(stored=True, sortable=True), @@ -109,6 +113,7 @@ def update_document(writer, doc): title=doc.title, content=doc.content, correspondent=doc.correspondent.name if doc.correspondent else None, + correspondent_id=doc.correspondent.id if doc.correspondent else None, tag=tags if tags else None, type=doc.document_type.name if doc.document_type else None, created=doc.created, @@ -181,6 +186,65 @@ def query_page(ix, page, querystring, more_like_doc_id, more_like_doc_content): searcher.close() +class DelayedQuery: + + @property + def _query(self): + if 'query' in self.query_params: + qp = MultifieldParser( + ["content", "title", "correspondent", "tag", "type"], + self.ix.schema) + qp.add_plugin(DateParserPlugin()) + q = qp.parse(self.query_params['query']) + elif 'more_like_id' in self.query_params: + more_like_doc_id = int(self.query_params['more_like_id']) + content = Document.objects.get(id=more_like_doc_id).content + + docnum = self.searcher.document_number(id=more_like_doc_id) + kts = self.searcher.key_terms_from_text( + 'content', content, numterms=20, + model=classify.Bo1Model, normalize=False) + q = query.Or( + [query.Term('content', word, boost=weight) + for word, weight in kts]) + else: + raise ValueError( + "Either query or more_like_id is required." + ) + return q + + @property + def _query_filter(self): + criterias = [] + for k, v in self.query_params.items(): + if k == 'correspondent__id': + criterias.append(query.Term('correspondent_id', v)) + if len(criterias) > 0: + return query.And(criterias) + else: + return None + + def __init__(self, ix, searcher, query_params, page_size): + self.ix = ix + self.searcher = searcher + self.query_params = query_params + self.page_size = page_size + + def __len__(self): + results = self.searcher.search(self._query, limit=1, filter=self._query_filter) + return len(results) + #return 1000 + + def __getitem__(self, item): + page: ResultsPage = self.searcher.search_page( + self._query, + filter=self._query_filter, + pagenum=math.floor(item.start / self.page_size) + 1, + pagelen=self.page_size + ) + return page + + def autocomplete(ix, term, limit=10): with ix.reader() as reader: terms = [] diff --git a/src/documents/views.py b/src/documents/views.py index a3f495d50..209a277b8 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -35,6 +35,7 @@ from rest_framework.viewsets import ( from paperless.db import GnuPG from paperless.views import StandardPagination +from . import index from .bulk_download import OriginalAndArchiveStrategy, OriginalsOnlyStrategy, \ ArchiveOnlyStrategy from .classifier import load_classifier @@ -326,6 +327,45 @@ class DocumentViewSet(RetrieveModelMixin, raise Http404() +class SearchResultSerializer(DocumentSerializer): + + def to_representation(self, instance): + doc = Document.objects.get(id=instance['id']) + # repressentation = super(SearchResultSerializer, self).to_representation(doc) + # repressentation['__search_hit__'] = { + # "score": instance.score + # } + return super(SearchResultSerializer, self).to_representation(doc) + + +class UnifiedSearchViewSet(DocumentViewSet): + + def get_serializer_class(self): + if self._is_search_request(): + return SearchResultSerializer + else: + return DocumentSerializer + + def _is_search_request(self): + return "query" in self.request.query_params + + def filter_queryset(self, queryset): + + if self._is_search_request(): + ix = index.open_index() + return index.DelayedQuery(ix, self.searcher, self.request.query_params, self.paginator.page_size) + else: + return super(UnifiedSearchViewSet, self).filter_queryset(queryset) + + def list(self, request, *args, **kwargs): + if self._is_search_request(): + ix = index.open_index() + with ix.searcher() as s: + self.searcher = s + return super(UnifiedSearchViewSet, self).list(request) + else: + return super(UnifiedSearchViewSet, self).list(request) + class LogViewSet(ViewSet): permission_classes = (IsAuthenticated,) diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 4e0b8f191..176fce257 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -12,7 +12,7 @@ from django.utils.translation import gettext_lazy as _ from paperless.consumers import StatusConsumer from documents.views import ( CorrespondentViewSet, - DocumentViewSet, + UnifiedSearchViewSet, LogViewSet, TagViewSet, DocumentTypeViewSet, @@ -31,7 +31,7 @@ from paperless.views import FaviconView api_router = DefaultRouter() api_router.register(r"correspondents", CorrespondentViewSet) api_router.register(r"document_types", DocumentTypeViewSet) -api_router.register(r"documents", DocumentViewSet) +api_router.register(r"documents", UnifiedSearchViewSet) api_router.register(r"logs", LogViewSet, basename="logs") api_router.register(r"tags", TagViewSet) api_router.register(r"saved_views", SavedViewViewSet) From 21fe0fc0ad00281770625a1ef138cd176598b8cd Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 14:09:28 +0100 Subject: [PATCH 580/898] New translations messages.xlf (Italian) [ci skip] --- src-ui/src/locale/messages.it_IT.xlf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index c5f7e5b3a..1029d7646 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="translated">Nome del file multimediale</target> + <target state="translated">Nome file</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -392,7 +392,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="translated">Somma MD5 originale</target> + <target state="translated">Checksum MD5 originale</target> </trans-unit> <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> <source>Original file size</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="translated">Dimensione del file originale</target> + <target state="translated">Dimensione file originale</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="translated">Checksum MD5 dell'archivio</target> + <target state="translated">Checksum MD5 archivio</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Dimensione dell'archivio</target> + <target state="translated">Dimensione file archivio</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="translated">Usa il formato data della lingua di visualizzazione</target> + <target state="translated">Usa il formato data della lingua</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="translated">L'eliminazione dei documenti chiederà sempre la conferma.</target> + <target state="translated">Verrà sempre chiesta una conferma prima di eliminare documenti.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Russo</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> From 223532c8bb9fe240f7756b9ba0e5090e93e4da2d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 21:34:55 +0100 Subject: [PATCH 581/898] fix up some messages --- src-ui/angular.json | 3 +- src-ui/messages.xlf | 12 +++--- .../components/search/search.component.html | 4 +- src/documents/serialisers.py | 2 +- src/locale/en_US/LC_MESSAGES/django.po | 42 ++++++++++++------- 5 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 12c84bc1b..8b5804521 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -105,7 +105,8 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "paperless-ui:build" + "browserTarget": "paperless-ui:build", + "ivy": true } }, "test": { diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 06f65fca1..7049f88ae 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -926,32 +926,32 @@ <context context-type="linenumber">4</context> </context-group> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> </trans-unit> <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> diff --git a/src-ui/src/app/components/search/search.component.html b/src-ui/src/app/components/search/search.component.html index ae0ec8e3e..f794a0feb 100644 --- a/src-ui/src/app/components/search/search.component.html +++ b/src-ui/src/app/components/search/search.component.html @@ -3,9 +3,7 @@ <div *ngIf="errorMessage" class="alert alert-danger" i18n>Invalid search query: {{errorMessage}}</div> -<p *ngIf="more_like" i18n> - Showing documents similar to <a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}</a> -</p> +<p *ngIf="more_like" i18n>Showing documents similar to <a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}</a></p> <p *ngIf="query"> <ng-container i18n>Search query: <i>{{query}}</i></ng-container> diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 6ebf4c541..3641c73a5 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -50,7 +50,7 @@ class MatchingModelSerializer(serializers.ModelSerializer): re.compile(match) except Exception as e: raise serializers.ValidationError( - _("Invalid regular expresssion: %(error)s") % + _("Invalid regular expression: %(error)s") % {'error': str(e)} ) return match diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 7aaa6ddd1..36359709a 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" +"POT-Creation-Date: 2021-03-07 21:34+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" @@ -230,7 +230,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "" @@ -330,25 +330,33 @@ msgstr "" msgid "does not have tag" msgstr "" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "" #: documents/serialisers.py:177 @@ -400,38 +408,42 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From 65ed4fe9f5904db47982a4082823f7a378bbb9d7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 7 Mar 2021 22:37:04 +0100 Subject: [PATCH 582/898] New Crowdin updates (#718) * New translations messages.xlf (English, United Kingdom) [ci skip] * New translations django.po (Romanian) [ci skip] * New translations messages.xlf (Dutch) [ci skip] * New translations django.po (Xhosa) [ci skip] * New translations messages.xlf (English, United Kingdom) [ci skip] * New translations django.po (English, United Kingdom) [ci skip] * New translations messages.xlf (Portuguese, Brazilian) [ci skip] * New translations django.po (Portuguese, Brazilian) [ci skip] * New translations messages.xlf (Chinese Simplified) [ci skip] * New translations django.po (Chinese Simplified) [ci skip] * New translations messages.xlf (Russian) [ci skip] * New translations django.po (Russian) [ci skip] * New translations messages.xlf (Portuguese) [ci skip] * New translations django.po (Portuguese) [ci skip] * New translations django.po (Dutch) [ci skip] * New translations messages.xlf (Romanian) [ci skip] * New translations messages.xlf (Italian) [ci skip] * New translations django.po (Italian) [ci skip] * New translations messages.xlf (Hungarian) [ci skip] * New translations django.po (Hungarian) [ci skip] * New translations messages.xlf (German) [ci skip] * New translations django.po (German) [ci skip] * New translations messages.xlf (Czech) [ci skip] * New translations django.po (Czech) [ci skip] * New translations messages.xlf (Spanish) [ci skip] * New translations django.po (Spanish) [ci skip] * New translations messages.xlf (French) [ci skip] * New translations django.po (French) [ci skip] * New translations messages.xlf (Xhosa) [ci skip] * New translations django.po (Romanian) [ci skip] * New translations messages.xlf (Dutch) [ci skip] * New translations messages.xlf (English, United Kingdom) [ci skip] * New translations django.po (English, United Kingdom) [ci skip] * New translations messages.xlf (Portuguese, Brazilian) [ci skip] * New translations django.po (Portuguese, Brazilian) [ci skip] * New translations messages.xlf (Russian) [ci skip] * New translations django.po (Russian) [ci skip] * New translations django.po (Dutch) [ci skip] * New translations messages.xlf (Romanian) [ci skip] * New translations messages.xlf (Italian) [ci skip] * New translations django.po (Italian) [ci skip] * New translations messages.xlf (German) [ci skip] * New translations django.po (German) [ci skip] * New translations messages.xlf (Spanish) [ci skip] * New translations django.po (Spanish) [ci skip] * New translations messages.xlf (French) [ci skip] * New translations django.po (French) [ci skip] --- src-ui/src/locale/messages.cs_CZ.xlf | 14 ++++---- src-ui/src/locale/messages.de_DE.xlf | 12 +++---- src-ui/src/locale/messages.en_GB.xlf | 16 ++++----- src-ui/src/locale/messages.es_ES.xlf | 12 +++---- src-ui/src/locale/messages.fr_FR.xlf | 12 +++---- src-ui/src/locale/messages.hu_HU.xlf | 14 ++++---- src-ui/src/locale/messages.it_IT.xlf | 12 +++---- src-ui/src/locale/messages.nl_NL.xlf | 12 +++---- src-ui/src/locale/messages.pt_BR.xlf | 12 +++---- src-ui/src/locale/messages.pt_PT.xlf | 14 ++++---- src-ui/src/locale/messages.ro_RO.xlf | 14 ++++---- src-ui/src/locale/messages.ru_RU.xlf | 14 ++++---- src-ui/src/locale/messages.xh_ZA.xlf | 14 ++++---- src-ui/src/locale/messages.zh_CN.xlf | 14 ++++---- src/locale/cs_CZ/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/de_DE/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/en_GB/LC_MESSAGES/django.po | 46 ++++++++++++++++---------- src/locale/es_ES/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/fr_FR/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/hu_HU/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/it_IT/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/nl_NL/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/pt_BR/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/pt_PT/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/ro_RO/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/ru_RU/LC_MESSAGES/django.po | 44 +++++++++++++++--------- src/locale/xh_ZA/LC_MESSAGES/django.po | 46 ++++++++++++++++---------- src/locale/zh_CN/LC_MESSAGES/django.po | 44 +++++++++++++++--------- 28 files changed, 487 insertions(+), 319 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 4816b84aa..a6efd60ff 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 6f06fc2e7..13c5c6652 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1058,11 +1058,11 @@ </context-group> <target state="translated">Ungültige Suchanfrage: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> <target state="translated">Zeige ähnliche Dokumente zu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> @@ -1070,7 +1070,7 @@ <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Suchanfrage: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Meinten Sie "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Keine Ergebnisse} =1 {Ein Ergebnis} other {<x id="INTERPOLATION"/> Ergebnisse}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index c6e15fec8..8d0ebc007 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="translated">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="translated"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Russian</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 2324ce889..f5d79815b 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1058,11 +1058,11 @@ </context-group> <target state="translated">Cadena de búsqueda no valida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> <target state="translated">Mostrando documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> @@ -1070,7 +1070,7 @@ <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Cadena de búsqueda: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">¿Quizás quisiste decir "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Sin resultados} =1 {Un resultado} other {<x id="INTERPOLATION"/> resultados}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 56d561438..8cdc1b6f0 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1058,11 +1058,11 @@ </context-group> <target state="translated">Requête de recherche invalide : <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> <target state="translated">Présentation des documents similaires à <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> @@ -1070,7 +1070,7 @@ <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Requête de recherche : <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Vouliez-vous dire "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>" ?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Aucun résultat} =1 {Un résultat} other {<x id="INTERPOLATION"/> résultats}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index bdf0bd186..729ffc632 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="translated">Érvénytelen keresési kifejezés: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="translated"><x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/> -hez hasonló dokumentumok mutatása</target> + <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Keresés: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Úgy értetted, hogy "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 1029d7646..d582bfd72 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1058,11 +1058,11 @@ </context-group> <target state="translated">Query di ricerca non valida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> <target state="translated">Documenti simili a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> @@ -1070,7 +1070,7 @@ <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Query di ricerca: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Forse intendevi "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Nessun risultato} =1 {Un risultato} other {<x id="INTERPOLATION"/> risultati}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 9ac2f2b8c..a425f7e7c 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1058,11 +1058,11 @@ </context-group> <target state="translated">Ongeldige zoekopdracht: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> <target state="translated">Toon documenten die lijken op <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> @@ -1070,7 +1070,7 @@ <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Zoekopdracht: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Bedoelde u "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Geen resultaten} =1 {Eén resultaat} other {<x id="INTERPOLATION"/> resultaten}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index f247c82ac..5f65706c5 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1058,11 +1058,11 @@ </context-group> <target state="translated">Termo de pesquisa inválido: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> <target state="translated">Exibindo documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> @@ -1070,7 +1070,7 @@ <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Termo de pesquisa: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Você quis dizer "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 281b85563..724500581 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="translated">Termo de pesquisa inválido: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="translated">A mostrar documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Termo de pesquisa: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Será que quer dizer "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index fe00e9e66..f2f5870b9 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="translated">Interogare invalida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="translated">Documente similare cu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/> </target> + <target state="translated">Documente similare cu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Interogare: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Ati vrut sa scrieti "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Niciun rezultat} =1 {Un rezultat} other {<x id="INTERPOLATION"/> rezultate}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index ae20bb29e..298d91cb0 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="translated">Неверный поисковой запрос: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="translated"> Показываю документы похожие на <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated">Показываю документы похожие на <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="translated">Поисковый запрос: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="translated">Может вы имели ввиду "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="translated">{VAR_PLURAL, plural, =0 {Нет результатов} =1 {Один результат} other {Результаты: <x id="INTERPOLATION"/>}}</target> </trans-unit> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index 5d0466f11..aa5dd8165 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1058,19 +1058,19 @@ </context-group> <target>crwdns3100:0{{errorMessage}}crwdne3100:0</target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target>crwdns3102:0{{more_like}}crwdnd3102:0{{more_like_doc?.original_file_name}}crwdnd3102:0{{more_like_doc?.original_file_name}}crwdne3102:0</target> + <target>crwdns3406:0{{more_like}}crwdnd3406:0{{more_like_doc?.original_file_name}}crwdnd3406:0{{more_like_doc?.original_file_name}}crwdne3406:0</target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target>crwdns3104:0{{query}}crwdnd3104:0{{query}}crwdne3104:0</target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target>crwdns3106:0[routerLink]crwdnd3106:0{{correctedQuery}}crwdnd3106:0{{correctedQuery}}crwdne3106:0</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target>crwdns3108:0VAR_PLURAL={VAR_PLURAL}crwdne3108:0</target> </trans-unit> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index aea19a5fe..b5f263396 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1058,19 +1058,19 @@ </context-group> <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> - <trans-unit id="2abff6a01d9b342a5a14b7fb90309a95ce934f8e" datatype="html"> - <source> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> + <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> + <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">7</context> + <context context-type="linenumber">6</context> </context-group> - <target state="needs-translation"> Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> + <context context-type="linenumber">9</context> </context-group> <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> </trans-unit> @@ -1078,7 +1078,7 @@ <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">13</context> + <context context-type="linenumber">11</context> </context-group> <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> @@ -1086,7 +1086,7 @@ <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">18</context> + <context context-type="linenumber">16</context> </context-group> <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> </trans-unit> diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index 9542c2b9b..dd1a65888 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 20:36\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -226,7 +226,7 @@ msgstr "záznam" msgid "logs" msgstr "záznamy" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "uložený pohled" @@ -326,25 +326,33 @@ msgstr "upraveno po" msgid "does not have tag" msgstr "nemá tag" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "typ pravidla" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "hodnota" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "filtrovací pravidlo" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "filtrovací pravidla" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Heslo" msgid "Sign in" msgstr "Přihlásit se" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Němčina" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Holandština" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Francouzština" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 8f196fb98..d7936bed4 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-07 10:08\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -226,7 +226,7 @@ msgstr "Protokoll" msgid "logs" msgstr "Protokoll" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "Gespeicherte Ansicht" @@ -326,25 +326,33 @@ msgstr "Geändert nach" msgid "does not have tag" msgstr "Hat nicht folgendes Tag" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "Dokument hat keine ASN" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "Titel oder Inhalt enthält" + +#: documents/models.py:400 msgid "rule type" msgstr "Regeltyp" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "Wert" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "Filterregel" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "Filterregeln" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Ungültiger regulärer Ausdruck: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Passwort" msgid "Sign in" msgstr "Anmelden" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Englisch (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Englisch (UK)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Niederländisch" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Französisch" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italienisch" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Rumänisch" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "Russisch" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 767c24105..238d0444d 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "logs" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "saved view" @@ -326,26 +326,34 @@ msgstr "modified after" msgid "does not have tag" msgstr "does not have tag" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "does not have ASN" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "title or content contains" + +#: documents/models.py:400 msgid "rule type" msgstr "rule type" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "value" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "filter rule" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "filter rules" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" -msgstr "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" +msgstr "Invalid regular expression: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." @@ -396,38 +404,42 @@ msgstr "Password" msgid "Sign in" msgstr "Sign in" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "English (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "German" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Dutch" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "French" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Romanian" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "Russian" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 69211d62f..b4c2bf1e0 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "logs" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "vista guardada" @@ -326,25 +326,33 @@ msgstr "modificado antes de" msgid "does not have tag" msgstr "no tiene la etiqueta" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "tipo de regla" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "valor" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Expresión irregular inválida: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Contraseña" msgid "Sign in" msgstr "Iniciar sesión" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Inglés (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Inglés (Gran Bretaña)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Alemán" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Alemán" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Francés" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portugués (Brasil)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Rumano" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administración" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index 9ed2a51ac..4ef979677 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -226,7 +226,7 @@ msgstr "rapport" msgid "logs" msgstr "rapports" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "vue enregistrée" @@ -326,25 +326,33 @@ msgstr "modifié après" msgid "does not have tag" msgstr "ne porte pas d'étiquette" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "type de règle" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "valeur" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "règle de filtrage" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "règles de filtrage" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Expression régulière incorrecte : %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Mot de passe" msgid "Sign in" msgstr "S'identifier" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Anglais (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Anglais (GB)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Allemand" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Néerlandais" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Français" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italien" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Roumain" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index eb4e89e46..abaaa8a01 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 20:36\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -226,7 +226,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "" @@ -326,25 +326,33 @@ msgstr "" msgid "does not have tag" msgstr "" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Angol (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Német" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index e1a7e461f..a0f20c112 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "log" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "vista salvata" @@ -326,25 +326,33 @@ msgstr "modificato dopo" msgid "does not have tag" msgstr "non ha tag" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "tipo di regola" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "valore" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "regola filtro" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "regole filtro" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Espressione regolare non valida: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Password" msgid "Sign in" msgstr "Accedi" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Inglese (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Inglese (GB)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Tedesco" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Olandese" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Francese" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Rumeno" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "Russo" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 549ba4842..6fda6e664 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -226,7 +226,7 @@ msgstr "bericht" msgid "logs" msgstr "berichten" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "opgeslagen view" @@ -326,25 +326,33 @@ msgstr "gewijzigd na" msgid "does not have tag" msgstr "heeft geen etiket" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "type regel" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "waarde" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "filterregel" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "filterregels" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Ongeldige reguliere expressie: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Wachtwoord" msgid "Sign in" msgstr "Aanmelden" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Engels (US)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Engels (Brits)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Duits" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Nederlands" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Frans" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italiaans" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Roemeens" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "Russisch" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 117caebdd..c0c7e822d 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "logs" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "visualização" @@ -326,25 +326,33 @@ msgstr "modificado depois de" msgid "does not have tag" msgstr "não tem etiqueta" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "tipo de regra" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "valor" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "regra de filtragem" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "regras de filtragem" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Expressão regular inválida: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Senha" msgid "Sign in" msgstr "Entrar" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Inglês (GB)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Alemão" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Holandês" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Francês" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Romeno" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 478a4bbd3..8f6538fdf 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 20:36\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -226,7 +226,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "" @@ -326,25 +326,33 @@ msgstr "" msgid "does not have tag" msgstr "" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Nederlandse" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Français" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index daf063920..719fb230c 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -226,7 +226,7 @@ msgstr "jurnal" msgid "logs" msgstr "jurnale" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "vizualizare" @@ -326,25 +326,33 @@ msgstr "modificat dupa" msgid "does not have tag" msgstr "nu are eticheta" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "tip de regula" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "valoare" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "regula de filtrare" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "reguli de filtrare" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "Expresie regulata invalida: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Parola" msgid "Sign in" msgstr "Conectare" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Engleza (SUA)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Engleza (UK)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Germana" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Olandeza" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Franceza" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portugheza (Brazilia)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italiana" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Romana" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administrare Paperless-ng" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index 0494f0daa..8f84da8c5 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-07 01:58\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 21:35\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -226,7 +226,7 @@ msgstr "журнал" msgid "logs" msgstr "логи" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "сохранённое представление" @@ -326,25 +326,33 @@ msgstr "изменен после" msgid "does not have tag" msgstr "не имеет тега" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "Тип правила" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "значение" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "Правило фильтрации" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "правила фильтрации" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "неверное регулярное выражение: %(error)s" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "Пароль" msgid "Sign in" msgstr "Вход" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "Английский (США)" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "Английский (Великобритании)" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "Немецкий" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "Датский" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "Французский" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "Romanian" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Администрирование Paperless-ng" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index 3939f9d52..b43006137 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 21:39\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 20:36\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -226,7 +226,7 @@ msgstr "crwdns2628:0crwdne2628:0" msgid "logs" msgstr "crwdns2630:0crwdne2630:0" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "crwdns2632:0crwdne2632:0" @@ -326,26 +326,34 @@ msgstr "crwdns2678:0crwdne2678:0" msgid "does not have tag" msgstr "crwdns2680:0crwdne2680:0" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "crwdns3408:0crwdne3408:0" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "crwdns3410:0crwdne3410:0" + +#: documents/models.py:400 msgid "rule type" msgstr "crwdns2682:0crwdne2682:0" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "crwdns2684:0crwdne2684:0" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "crwdns2686:0crwdne2686:0" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "crwdns2688:0crwdne2688:0" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" -msgstr "crwdns2690:0%(error)scrwdne2690:0" +msgid "Invalid regular expression: %(error)s" +msgstr "crwdns3412:0%(error)scrwdne3412:0" #: documents/serialisers.py:177 msgid "Invalid color." @@ -396,38 +404,42 @@ msgstr "crwdns2712:0crwdne2712:0" msgid "Sign in" msgstr "crwdns2714:0crwdne2714:0" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "crwdns2716:0crwdne2716:0" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "crwdns2718:0crwdne2718:0" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "crwdns2720:0crwdne2720:0" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "crwdns2722:0crwdne2722:0" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "crwdns2724:0crwdne2724:0" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "crwdns2726:0crwdne2726:0" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "crwdns2728:0crwdne2728:0" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "crwdns2730:0crwdne2730:0" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "crwdns3414:0crwdne3414:0" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "crwdns2732:0crwdne2732:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 93af25211..254b75843 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-28 12:40+0100\n" -"PO-Revision-Date: 2021-03-06 22:56\n" +"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"PO-Revision-Date: 2021-03-07 20:36\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -226,7 +226,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:394 +#: documents/models.py:344 documents/models.py:396 msgid "saved view" msgstr "" @@ -326,25 +326,33 @@ msgstr "" msgid "does not have tag" msgstr "" -#: documents/models.py:398 +#: documents/models.py:388 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:389 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:400 msgid "rule type" msgstr "" -#: documents/models.py:402 +#: documents/models.py:404 msgid "value" msgstr "" -#: documents/models.py:408 +#: documents/models.py:410 msgid "filter rule" msgstr "" -#: documents/models.py:409 +#: documents/models.py:411 msgid "filter rules" msgstr "" #: documents/serialisers.py:53 #, python-format -msgid "Invalid regular expresssion: %(error)s" +msgid "Invalid regular expression: %(error)s" msgstr "" #: documents/serialisers.py:177 @@ -396,38 +404,42 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:297 +#: paperless/settings.py:298 msgid "English (US)" msgstr "" -#: paperless/settings.py:298 +#: paperless/settings.py:299 msgid "English (GB)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:300 msgid "German" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:301 msgid "Dutch" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:302 msgid "French" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:303 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:304 msgid "Italian" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:305 msgid "Romanian" msgstr "" +#: paperless/settings.py:306 +msgid "Russian" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From c2e06db69ebc2ae2572b304ef21d8e1ae2f9ead7 Mon Sep 17 00:00:00 2001 From: Robert <RobertStreitfeld@gmx.de> Date: Sun, 7 Mar 2021 16:04:45 +0100 Subject: [PATCH 583/898] fix writable check for NFS mounts For some reason, os.access(directory, os.W_OK | os.X_OK) does not work correctly on NFS mounts. After some research, found out that the only secure and portable way to check for write access, is to touch a file. --- src/paperless/checks.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/paperless/checks.py b/src/paperless/checks.py index df4d45e38..0d11d8a90 100644 --- a/src/paperless/checks.py +++ b/src/paperless/checks.py @@ -1,5 +1,6 @@ import os import shutil +import stat from django.conf import settings from django.core.checks import Error, Warning, register @@ -16,16 +17,25 @@ writeable_hint = ( def path_check(var, directory): messages = [] if directory: - if not os.path.exists(directory): + if not os.path.isdir(directory): messages.append(Error( exists_message.format(var), exists_hint.format(directory) )) - elif not os.access(directory, os.W_OK | os.X_OK): - messages.append(Warning( - writeable_message.format(var), - writeable_hint.format(directory) - )) + else: + test_file = os.path.join(directory, '__paperless_write_test__') + try: + open(test_file, 'w') + except PermissionError: + messages.append(Error( + writeable_message.format(var), + writeable_hint.format( + f'\n{stat.filemode(os.stat(directory).st_mode)} ' + f'{directory}\n') + )) + else: + os.remove(test_file) + return messages From 20bb1aff3ee809c0f3f68bc844580726f98dde93 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 8 Mar 2021 10:04:03 +0100 Subject: [PATCH 584/898] New Crowdin updates (#719) New translations --- src-ui/src/locale/messages.fr_FR.xlf | 2 +- src/locale/fr_FR/LC_MESSAGES/django.po | 6 +++--- src/locale/it_IT/LC_MESSAGES/django.po | 6 +++--- src/locale/nl_NL/LC_MESSAGES/django.po | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 8cdc1b6f0..13d19841c 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -584,7 +584,7 @@ <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Rapports</target> + <target state="translated">Journaux</target> </trans-unit> <trans-unit id="5610279464668232148" datatype="html"> <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index 4ef979677..e5966e597 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-08 08:06\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -220,11 +220,11 @@ msgstr "niveau" #: documents/models.py:332 msgid "log" -msgstr "rapport" +msgstr "journal" #: documents/models.py:333 msgid "logs" -msgstr "rapports" +msgstr "journaux" #: documents/models.py:344 documents/models.py:396 msgid "saved view" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index a0f20c112..3f6f7fed2 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-07 23:26\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -328,11 +328,11 @@ msgstr "non ha tag" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "non ha ASN" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "il titolo o il contenuto contiene" #: documents/models.py:400 msgid "rule type" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 6fda6e664..714b01deb 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-08 06:44\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -328,11 +328,11 @@ msgstr "heeft geen etiket" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "heeft geen ASN" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "titel of inhoud bevat" #: documents/models.py:400 msgid "rule type" From b73b33f150058f8714ebe8ba78275782b6ec0799 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 8 Mar 2021 12:31:37 +0100 Subject: [PATCH 585/898] New Crowdin updates (#722) --- src-ui/src/locale/messages.ro_RO.xlf | 304 ++++++++++++------------- src/locale/ro_RO/LC_MESSAGES/django.po | 190 ++++++++-------- 2 files changed, 247 insertions(+), 247 deletions(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index f2f5870b9..0247cca61 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -8,7 +8,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Document adaugat</target> + <target state="translated">Document adăugat</target> </trans-unit> <trans-unit id="9204248378636247318" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> @@ -16,7 +16,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Documentul <x id="PH" equiv-text="status.filename"/> a fost adaugat</target> + <target state="translated">Documentul <x id="PH" equiv-text="status.filename"/> a fost adăugat.</target> </trans-unit> <trans-unit id="1931214133925051574" datatype="html"> <source>Open document</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">Nu s-a putut adauga <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + <target state="translated">Nu s-a putut adăuga <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -48,7 +48,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">65</context> </context-group> - <target state="translated">Documentul <x id="PH" equiv-text="status.filename"/> este in procesare</target> + <target state="translated">Documentul <x id="PH" equiv-text="status.filename"/> este în procesare.</target> </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> @@ -64,7 +64,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Vizualizarea "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" a fost salvata</target> + <target state="translated">Vizualizarea "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" a fost salvată.</target> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> @@ -72,7 +72,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> <context context-type="linenumber">136</context> </context-group> - <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost creata</target> + <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost creată.</target> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> <source>Select</source> @@ -80,7 +80,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">Selecteaza</target> + <target state="translated">Selectează</target> </trans-unit> <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> <source>Select none</source> @@ -88,7 +88,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Deselecteaza tot</target> + <target state="translated">Deselectează tot</target> </trans-unit> <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> <source>Select page</source> @@ -96,7 +96,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Selecteaza pagina</target> + <target state="translated">Selectează pagina</target> </trans-unit> <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> <source>Select all</source> @@ -104,7 +104,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">Selecteaza tot</target> + <target state="translated">Selectează tot</target> </trans-unit> <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> <source>Sort</source> @@ -112,7 +112,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Sorteaza</target> + <target state="translated">Sortează</target> </trans-unit> <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> <source>Views</source> @@ -120,7 +120,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">64</context> </context-group> - <target state="translated">Vizualizari</target> + <target state="translated">Vizualizări</target> </trans-unit> <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> <source>Save as...</source> @@ -128,7 +128,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="translated">Salveaza ca...</target> + <target state="translated">Salvează ca...</target> </trans-unit> <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> @@ -136,7 +136,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">71</context> </context-group> - <target state="translated">Salveaza "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + <target state="translated">Salvează "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> </trans-unit> <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="translated">ASN</target> + <target state="translated">Aviz prealabil de expediție</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -208,7 +208,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Adaugat</target> + <target state="translated">Adăugat</target> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> @@ -216,7 +216,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="translated">Confirma stergerea</target> + <target state="translated">Confirmă ștergerea</target> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> @@ -224,7 +224,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">204</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti documentul "<x id="PH" equiv-text="this.document.title"/>"?</target> + <target state="translated">Sunteţi sigur că doriţi să ştergeţi documentul "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> @@ -232,7 +232,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="translated">Fisierele pentru acest document vor fi sterse permanent. Operatiunea este ireversibila.</target> + <target state="translated">Fișierele pentru acest document vor fi șterse permanent. Operațiunea este ireversibila.</target> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> @@ -240,7 +240,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">207</context> </context-group> - <target state="translated">Sterge document</target> + <target state="translated">Șterge document</target> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> @@ -248,7 +248,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="linenumber">214</context> </context-group> - <target state="translated">Eroare la stergerea documentului: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + <target state="translated">Eroare la ștergerea documentului: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> <source>Delete</source> @@ -256,7 +256,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="translated">Sterge</target> + <target state="translated">Şterge</target> </trans-unit> <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> <source>Download</source> @@ -264,7 +264,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">23</context> </context-group> - <target state="translated">Descarca</target> + <target state="translated">Descarcă</target> </trans-unit> <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> <source>More like this</source> @@ -280,7 +280,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="translated">Inchide</target> + <target state="translated">Închide</target> </trans-unit> <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> <source>Details</source> @@ -296,7 +296,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">72</context> </context-group> - <target state="translated">Continut</target> + <target state="translated">Conținut</target> </trans-unit> <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> <source>Metadata</source> @@ -312,7 +312,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Renunta</target> + <target state="translated">Renunță</target> </trans-unit> <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> <source>Save</source> @@ -320,7 +320,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Salveaza</target> + <target state="translated">Salvează</target> </trans-unit> <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> <source>Page</source> @@ -344,7 +344,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">29</context> </context-group> - <target state="translated">Descarca originalul</target> + <target state="translated">Descarcă originalul</target> </trans-unit> <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> <source>Archive serial number</source> @@ -352,7 +352,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">60</context> </context-group> - <target state="translated">Numar de arhiva</target> + <target state="translated">Număr serial în arhivă</target> </trans-unit> <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> <source>Date created</source> @@ -360,7 +360,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">61</context> </context-group> - <target state="translated">Data crearii</target> + <target state="translated">Data creării</target> </trans-unit> <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> <source>Date modified</source> @@ -368,7 +368,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Data ultimei modificari</target> + <target state="translated">Data ultimei modificări</target> </trans-unit> <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> <source>Date added</source> @@ -376,7 +376,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">91</context> </context-group> - <target state="translated">Data adaugarii</target> + <target state="translated">Data adăugării</target> </trans-unit> <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> <source>Media filename</source> @@ -384,7 +384,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">95</context> </context-group> - <target state="translated">Numele fisierului media</target> + <target state="translated">Numele fișierului media</target> </trans-unit> <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> <source>Original MD5 checksum</source> @@ -400,7 +400,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="translated">Marimea fisierului original</target> + <target state="translated">Dimensiunea fișierului original</target> </trans-unit> <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> <source>Original mime type</source> @@ -408,7 +408,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="translated">Tipul fisierului original</target> + <target state="translated">Tip MIME original</target> </trans-unit> <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> <source>Archive MD5 checksum</source> @@ -416,7 +416,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="translated">MD5 arhiva</target> + <target state="translated">MD5 arhivă</target> </trans-unit> <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> <source>Archive file size</source> @@ -424,7 +424,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">115</context> </context-group> - <target state="translated">Marimea arhivei</target> + <target state="translated">Mărimea arhivei</target> </trans-unit> <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> <source>Original document metadata</source> @@ -448,7 +448,7 @@ <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="linenumber">131</context> </context-group> - <target state="translated">Salveaza si continua</target> + <target state="translated">Salvează și continuă</target> </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> @@ -456,7 +456,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="translated">Salut, <x id="PH" equiv-text="this.displayName"/>, bine ai venit la Paperless-ng!</target> + <target state="translated">Salut, <x id="PH" equiv-text="this.displayName"/>, bun venit la Paperless-ng!</target> </trans-unit> <trans-unit id="7016571167317583872" datatype="html"> <source>Welcome to Paperless-ng!</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Bine ai venit la Paperless-ng!</target> + <target state="translated">Bun venit la Paperless-ng!</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti eticheta "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Sunteți sigur că doriți să ștergeți documentul "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -496,7 +496,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">2</context> </context-group> - <target state="translated">Creeaza</target> + <target state="translated">Creează</target> </trans-unit> <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> <source>Filter by:</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">Filtreaza dupa:</target> + <target state="translated">Filtrează după:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -536,7 +536,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Numar de documente</target> + <target state="translated">Număr de documente</target> </trans-unit> <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> <source>Actions</source> @@ -568,7 +568,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti tipul de document "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Sunteți sigur că doriți să ștergeți tipul de document "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> <source>Document types</source> @@ -592,7 +592,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost stearsa.</target> + <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost ștearsă.</target> </trans-unit> <trans-unit id="5647210819299459618" datatype="html"> <source>Settings saved successfully.</source> @@ -600,7 +600,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">89</context> </context-group> - <target state="translated">Setarile au fost salvate.</target> + <target state="translated">Setările au fost salvate.</target> </trans-unit> <trans-unit id="6839066544204061364" datatype="html"> <source>Use system language</source> @@ -608,7 +608,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="translated">Foloseste limba sistemului</target> + <target state="translated">Utilizați limba sistemului</target> </trans-unit> <trans-unit id="7729897675462249787" datatype="html"> <source>Use date format of display language</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="translated">Foloseste formatul datei corespunzator limbii de afisare</target> + <target state="translated">Folosiți formatul datei corespunzător limbii de afișare</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -624,7 +624,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Eroare la stocarea setarilor pe server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Eroare la stocarea setărilor pe server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> <source>Settings</source> @@ -632,7 +632,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Setari</target> + <target state="translated">Setări</target> </trans-unit> <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> <source>General settings</source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Setari generale</target> + <target state="translated">Setări generale</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -648,7 +648,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">116</context> </context-group> - <target state="translated">Notificari</target> + <target state="translated">Notificări</target> </trans-unit> <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> <source>Saved views</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="translated">Vizualizari</target> + <target state="translated">Vizualizări</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -664,7 +664,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Afisare</target> + <target state="translated">Afișare</target> </trans-unit> <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> <source>Display language</source> @@ -672,7 +672,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">17</context> </context-group> - <target state="translated">Limba de afisare</target> + <target state="translated">Limba de afișare</target> </trans-unit> <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> <source>You need to reload the page after applying a new language.</source> @@ -680,7 +680,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">25</context> </context-group> - <target state="translated">Trebuie sa reincarcati pagina dupa schimbarea limbii.</target> + <target state="translated">Trebuie să reîncărcați pagina după aplicarea unei noi limbi.</target> </trans-unit> <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> <source>Date display</source> @@ -688,7 +688,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">Afisarea datei</target> + <target state="translated">Afișarea datei</target> </trans-unit> <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> <source>Date format</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Folositi browserul pentru a deschide PDF-uri</target> + <target state="translated">Utilizați vizualizatorul PDF furnizat de browser</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Aceasta optiune este mai rapida pentru PDF-uri mari, dar nu este compatibila cu toate browserele.</target> + <target state="translated">Această opțiune este mai rapidă pentru PDF-uri mari, dar nu este compatibilă cu toate browserele.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -760,7 +760,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">94</context> </context-group> - <target state="translated">Mod intunecat</target> + <target state="translated">Mod întunecat</target> </trans-unit> <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> <source>Use system settings</source> @@ -768,7 +768,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">97</context> </context-group> - <target state="translated">Folositi setarile sistemului</target> + <target state="translated">Folosește setările sistemului</target> </trans-unit> <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> <source>Enable dark mode</source> @@ -776,7 +776,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">98</context> </context-group> - <target state="translated">Activati modul intunecat</target> + <target state="translated">Activează modul întunecat</target> </trans-unit> <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> <source>Invert thumbnails in dark mode</source> @@ -784,7 +784,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="translated">Inverseaza miniaturile in modul intunecat</target> + <target state="translated">Inversează miniaturile în modul întunecat</target> </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> @@ -792,7 +792,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">103</context> </context-group> - <target state="translated">Editare in bloc</target> + <target state="translated">Editare în bloc</target> </trans-unit> <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> <source>Show confirmation dialogs</source> @@ -800,7 +800,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="translated">Afisati dialoguri de confirmare</target> + <target state="translated">Afișare dialoguri de confirmare</target> </trans-unit> <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> <source>Deleting documents will always ask for confirmation.</source> @@ -808,7 +808,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">107</context> </context-group> - <target state="translated">Stergerea documentelor necesita intotdeauna confirmare.</target> + <target state="translated">Ștergerea documentelor va necesita întotdeauna confirmare.</target> </trans-unit> <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> <source>Apply on close</source> @@ -816,7 +816,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">108</context> </context-group> - <target state="translated">Aplica la iesire</target> + <target state="translated">Aplică la ieșire</target> </trans-unit> <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> <source>Document processing</source> @@ -832,7 +832,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="translated">Afisati notificari cand sunt detectate documente noi</target> + <target state="translated">Arată notificări atunci când sunt detectate documente noi</target> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> @@ -840,7 +840,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> - <target state="translated">Afisati notificari cand procesarea unui document este completa</target> + <target state="translated">Arată notificări atunci când procesarea documentului se termină cu succes</target> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> @@ -848,7 +848,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> - <target state="translated">Afisati notificari cand procesarea unui document esueaza</target> + <target state="translated">Arată notificări atunci când procesarea documentului eșuează</target> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Ascundeti notificarile pe tabloul de bord</target> + <target state="translated">Ascunde notificările pe tabloul de bord</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Aceasta setare va opri mesajele despre procesarea documentelor pe tabloul de bord</target> + <target state="translated">Această setare va opri mesajele despre procesarea documentelor pe tabloul de bord.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="translated">Afiseaza pe tabloul de bord</target> + <target state="translated">Afișează pe tabloul de bord</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -888,7 +888,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">153</context> </context-group> - <target state="translated">Afiseaza in bara laterala</target> + <target state="translated">Afișează in bara laterala</target> </trans-unit> <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> <source>No saved views defined.</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="translated">Nu sunt definite vizualizari.</target> + <target state="translated">Nu sunt definite vizualizări.</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -904,7 +904,7 @@ <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> <context context-type="linenumber">7</context> </context-group> - <target state="translated">404 Pagina nu a fost gasita</target> + <target state="translated">404 Pagina nu a fost gasită</target> </trans-unit> <trans-unit id="7427874343955308724" datatype="html"> <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti corespondentul "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Sunteți sigur că doriți să ștergeți corespondentul "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Corespondenti</target> + <target state="translated">Corespondenți</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Ultima corespondenta</target> + <target state="translated">Ultima corespondență</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -944,7 +944,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> <context context-type="linenumber">29</context> </context-group> - <target state="translated">Confirma</target> + <target state="translated">Confirmă</target> </trans-unit> <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> <source>Cancel</source> @@ -952,7 +952,7 @@ <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">Anuleaza</target> + <target state="translated">Anulează</target> </trans-unit> <trans-unit id="6457471243969293847" datatype="html"> <source>Create new correspondent</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="translated">Creeaza un nou corespondent</target> + <target state="translated">Creare corespondent nou</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="translated">Modifica un corespondent</target> + <target state="translated">Modifică un corespondent</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -992,7 +992,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">Ignora majusculele</target> + <target state="translated">Ignoră majusculele</target> </trans-unit> <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Creeaza o noua eticheta</target> + <target state="translated">Crează o etichetă nouă</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1008,7 +1008,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Modifica o eticheta</target> + <target state="translated">Modifică o etichetă</target> </trans-unit> <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> <source>Inbox tag</source> @@ -1032,7 +1032,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="translated">Creeaza un nou tip de document</target> + <target state="translated">Crează un nou tip de document</target> </trans-unit> <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> @@ -1040,7 +1040,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="translated">Modifica un tip de document</target> + <target state="translated">Modifică un tip de document</target> </trans-unit> <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> @@ -1048,7 +1048,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Rezultatele cautarii</target> + <target state="translated">Rezultatele căutarii</target> </trans-unit> <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> @@ -1056,7 +1056,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">4</context> </context-group> - <target state="translated">Interogare invalida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> + <target state="translated">Interogare invalidă: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> </trans-unit> <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> @@ -1080,7 +1080,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Ati vrut sa scrieti "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> + <target state="translated">Ați vrut să scrieți "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> </trans-unit> <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> @@ -1105,7 +1105,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">15</context> </context-group> - <target state="translated">Cauta documente</target> + <target state="translated">Caută documente</target> </trans-unit> <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> <source>Logout</source> @@ -1121,7 +1121,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> - <target state="translated">Administreaza</target> + <target state="translated">Administrează</target> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="translated">Informatii</target> + <target state="translated">Informații</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="translated">Documentatie</target> + <target state="translated">Documentație</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">106</context> </context-group> - <target state="translated">Inchide tot</target> + <target state="translated">Închide tot</target> </trans-unit> <trans-unit id="5701618810648052610" datatype="html"> <source>Title</source> @@ -1201,7 +1201,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Titlu si continut</target> + <target state="translated">Titlu si conținut</target> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> @@ -1217,7 +1217,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">34</context> </context-group> - <target state="translated">Fara corespondent</target> + <target state="translated">Fără corespondent</target> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">41</context> </context-group> - <target state="translated">Fara tip</target> + <target state="translated">Fară tip</target> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> @@ -1249,7 +1249,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">49</context> </context-group> - <target state="translated">Fara etichete</target> + <target state="translated">Fară etichete</target> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="translated">Filtreaza etichete</target> + <target state="translated">Filtrează etichete</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> - <target state="translated">Filtreaza corespondenti</target> + <target state="translated">Filtrează corespondenți</target> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> @@ -1281,7 +1281,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Filtreaza tipuri de documente</target> + <target state="translated">Filtrează tipuri de documente</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1289,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> - <target state="translated">Resetati filtrele</target> + <target state="translated">Resetare filtre</target> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> @@ -1298,7 +1298,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="translated">Neasignate</target> + <target state="translated">Nealocate</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1306,7 +1306,7 @@ <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Aplica</target> + <target state="translated">Aplică</target> </trans-unit> <trans-unit id="4873149362496451858" datatype="html"> <source>Last 7 days</source> @@ -1322,7 +1322,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Ultima luna</target> + <target state="translated">Ultima lună</target> </trans-unit> <trans-unit id="8697368973702409683" datatype="html"> <source>Last 3 months</source> @@ -1346,7 +1346,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Dupa</target> + <target state="translated">După</target> </trans-unit> <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> <source>Before</source> @@ -1354,7 +1354,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Inainte</target> + <target state="translated">Înainte</target> </trans-unit> <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> <source>Clear</source> @@ -1362,7 +1362,7 @@ <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> <context context-type="linenumber">18</context> </context-group> - <target state="translated">Goleste</target> + <target state="translated">Curăță</target> </trans-unit> <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> <source>View</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="translated">Filtreaza dupa corespondent</target> + <target state="translated">Filtrează dupa corespondent</target> </trans-unit> <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="translated">Filtreaza dupa eticheta</target> + <target state="translated">Filtrează dupa etichetă</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1410,7 +1410,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> - <target state="translated">Vizualizeaza in browser</target> + <target state="translated">Vizualizează în browser</target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1418,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">74</context> </context-group> - <target state="translated">Eroare la executarea operatiunii in bloc: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Eroare la executarea operațiunii în bloc: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="7894972847287473517" datatype="html"> <source>"<x id="PH" equiv-text="items[0].name"/>"</source> @@ -1435,7 +1435,7 @@ <context context-type="linenumber">115</context> </context-group> <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> - <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" si "<x id="PH_1" equiv-text="items[1].name"/>"</target> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" și "<x id="PH_1" equiv-text="items[1].name"/>"</target> </trans-unit> <trans-unit id="760986369763309193" datatype="html"> <source>, </source> @@ -1453,7 +1453,7 @@ <context context-type="linenumber">118</context> </context-group> <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> - <target state="translated"><x id="PH" equiv-text="list"/> si "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + <target state="translated"><x id="PH" equiv-text="list"/> și "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> </trans-unit> <trans-unit id="4137232459980262849" datatype="html"> <source>Confirm tags assignment</source> @@ -1461,7 +1461,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="translated">Confirmati atribuirea etichetelor</target> + <target state="translated">Confirmați atribuirea etichetelor</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Va fi adaugata eticheta "<x id="PH" equiv-text="tag.name"/>" la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> + <target state="translated">Va fi adăugată eticheta "<x id="PH" equiv-text="tag.name"/>" la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">Vor fi adaugate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> + <target state="translated">Vor fi adăugate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Va fi eliminata eticheta "<x id="PH" equiv-text="tag.name"/>" din <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> + <target state="translated">Va fi eliminată eticheta "<x id="PH" equiv-text="tag.name"/>" din <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">Vor fi adaugate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> si vor fi eliminate etichetele <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> pentru <x id="PH_2" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> + <target state="translated">Vor fi adăugate etichetele <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> și vor fi eliminate etichetele <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> pentru <x id="PH_2" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1509,7 +1509,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="translated">Confirmati atribuirea corespondentului</target> + <target state="translated">Confirmați atribuirea corespondentului</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1517,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="translated">Va fi adaugat corespondentul "<x id="PH" equiv-text="correspondent.name"/>" la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> + <target state="translated">Va fi adăugat corespondentul "<x id="PH" equiv-text="correspondent.name"/>" la <x id="PH_1" equiv-text="this.list.selected.size"/> document(e) selectat(e).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1533,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> - <target state="translated">Confirmati atribuirea tipului de document</target> + <target state="translated">Confirmați atribuirea tipului de document</target> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1557,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> - <target state="translated">Confirmati stergerea</target> + <target state="translated">Confirmați stergerea</target> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1565,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="translated"><x id="PH" equiv-text="this.list.selected.size"/> document(e) selectat(e) vor fi sterse permanent.</target> + <target state="translated"><x id="PH" equiv-text="this.list.selected.size"/> document(e) selectat(e) vor fi șterse permanent.</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1573,7 +1573,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="translated">Aceasta operatiune este ireversibila.</target> + <target state="translated">Această operațiune este ireversibilă.</target> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> @@ -1581,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">205</context> </context-group> - <target state="translated">Sterge document(e)</target> + <target state="translated">Șterge document(e)</target> </trans-unit> <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> <source>Select:</source> @@ -1589,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Selecteaza:</target> + <target state="translated">Selectează:</target> </trans-unit> <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> <source>All</source> @@ -1605,7 +1605,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">27</context> </context-group> - <target state="translated">Editeaza:</target> + <target state="translated">Editează:</target> </trans-unit> <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> <source>Download originals</source> @@ -1613,7 +1613,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="linenumber">68</context> </context-group> - <target state="translated">Descarca originalele</target> + <target state="translated">Descarcă originalele</target> </trans-unit> <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> <source>Suggestions:</source> @@ -1629,7 +1629,7 @@ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Salveaza vizualizarea curenta</target> + <target state="translated">Salvează vizualizarea curenta</target> </trans-unit> <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> @@ -1637,7 +1637,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Arata tot</target> + <target state="translated">Arată tot</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">32</context> </context-group> - <target state="translated">In procesare: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + <target state="translated">În procesare: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> </trans-unit> <trans-unit id="9182918211699394982" datatype="html"> <source>Failed: <x id="PH" equiv-text="countFailed"/></source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Esuate: <x id="PH" equiv-text="countFailed"/></target> + <target state="translated">Eșuate: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1685,7 +1685,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">38</context> </context-group> - <target state="translated">Adaugate: <x id="PH" equiv-text="countSuccess"/></target> + <target state="translated">Adăugate: <x id="PH" equiv-text="countSuccess"/></target> </trans-unit> <trans-unit id="3852289441366561594" datatype="html"> <source>Connecting...</source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> - <target state="translated">Incarcare...</target> + <target state="translated">Încarcare...</target> </trans-unit> <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> @@ -1709,7 +1709,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Incarcare completa, in asteptare...</target> + <target state="translated">Încarcare completa, în așteptare...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1725,7 +1725,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Incarca documente noi</target> + <target state="translated">Încarcă documente noi</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1733,7 +1733,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Trageti documentele aici sau</target> + <target state="translated">Trage documentele aici sau</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Rasfoiti fisiere</target> + <target state="translated">Caută fișiere</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1750,7 +1750,7 @@ <context context-type="linenumber">4</context> </context-group> <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> - <target state="translated">Inlatura operatiunile finalizate</target> + <target state="translated">Înlătură operațiunile finalizate</target> </trans-unit> <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> @@ -1759,7 +1759,7 @@ <context context-type="linenumber">25</context> </context-group> <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> - <target state="translated">{VAR_PLURAL, plural, =1 {Inca un document} other {Inca <x id="INTERPOLATION"/> documente}}</target> + <target state="translated">{VAR_PLURAL, plural, =1 {Încă un document} other {Încă <x id="INTERPOLATION"/> documente}}</target> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> @@ -1775,7 +1775,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Primii pasi</target> + <target state="translated">Primii pași</target> </trans-unit> <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">5</context> </context-group> - <target state="translated">Paperless ruleaza! :)</target> + <target state="translated">Paperless rulează! :)</target> </trans-unit> <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> @@ -1791,7 +1791,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="translated">Puteti incepe sa incarcati fisiere tragandu-le in casuta din dreapta sau in directorul configurat de consum, si vor incepe sa apara in lista de documente. Dupa ce ati adaugat metadate documentelor, folositi mecanismele de filtrare pentru a crea vizualizari personalizate (cum ar fi "Adaugate recent", "Etichetate URGENT"), ce vor aparea in locul acestui mesaj.</target> + <target state="translated">Puteți începe să încărcați fișiere trăgându-le în căsuța din dreapta sau în directorul configurat de consum, și vor începe să apară în lista de documente. După ce ați adăugat metadate documentelor, folosiți mecanismele de filtrare pentru a crea vizualizări personalizate (cum ar fi "Adăugate recent", "Etichetate URGENT"), ce vor apărea în locul acestui mesaj.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">Paperless mai ofera urmatoarele functii pentru a va face viata mai usoara:</target> + <target state="translated">Paperless mai oferă următoarele funcții pentru a vă face viata mai ușoară:</target> </trans-unit> <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> @@ -1807,7 +1807,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Dupa ce aveti cateva documente si le adaugati metadate, Paperless poate atribui acele metadate in mod automat pentru documente noi.</target> + <target state="translated">După ce aveți câteva documente și le adăugați metadate, Paperless poate atribui acele metadate în mod automat pentru documente noi.</target> </trans-unit> <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> @@ -1815,7 +1815,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Puteti configura Paperless sa va citeasca email-urile si sa adauge documentele atasate.</target> + <target state="translated">Puteți configura Paperless să vă citească email-urile și să adauge documentele atașate.</target> </trans-unit> <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> @@ -1951,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Rusă</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -2091,7 +2091,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="translated">ASN</target> + <target state="translated">Aviz prealabil de expediție</target> </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 719fb230c..e7366feb6 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-08 09:37\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -23,7 +23,7 @@ msgstr "Documente" #: documents/models.py:32 msgid "Any word" -msgstr "Orice cuvant" +msgstr "Orice cuvânt" #: documents/models.py:33 msgid "All words" @@ -31,15 +31,15 @@ msgstr "Toate cuvintele" #: documents/models.py:34 msgid "Exact match" -msgstr "Potrivire exacta" +msgstr "Potrivire exactă" #: documents/models.py:35 msgid "Regular expression" -msgstr "Expresie regulata" +msgstr "Expresie regulată" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "Cuvant neclar" +msgstr "Mod neatent" #: documents/models.py:37 msgid "Automatic" @@ -60,7 +60,7 @@ msgstr "algoritm de potrivire" #: documents/models.py:55 msgid "is insensitive" -msgstr "ignora majusculele" +msgstr "nu ține cont de majuscule" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" @@ -68,7 +68,7 @@ msgstr "corespondent" #: documents/models.py:75 msgid "correspondents" -msgstr "corespondenti" +msgstr "corespondenți" #: documents/models.py:81 msgid "color" @@ -76,15 +76,15 @@ msgstr "culoare" #: documents/models.py:87 msgid "is inbox tag" -msgstr "este eticheta inbox" +msgstr "este etichetă inbox" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "Marcheaza aceasta eticheta ca eticheta inbox: Toate documentele nou consumate primesc aceasta eticheta." +msgstr "Marchează aceasta eticheta ca etichetă inbox: Toate documentele nou consumate primesc aceasta eticheta." #: documents/models.py:94 msgid "tag" -msgstr "eticheta" +msgstr "etichetă" #: documents/models.py:95 documents/models.py:151 msgid "tags" @@ -112,19 +112,19 @@ msgstr "titlu" #: documents/models.py:137 msgid "content" -msgstr "continut" +msgstr "conținut" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "Textul brut al documentului. Acest camp este folosit in principal pentru cautare." +msgstr "Textul brut al documentului. Acest camp este folosit in principal pentru căutare." #: documents/models.py:144 msgid "mime type" -msgstr "tip mime" +msgstr "tip MIME" #: documents/models.py:155 msgid "checksum" -msgstr "suma de control" +msgstr "sumă de control" #: documents/models.py:159 msgid "The checksum of the original document." @@ -152,19 +152,19 @@ msgstr "tip de stocare" #: documents/models.py:188 msgid "added" -msgstr "adaugat" +msgstr "adăugat" #: documents/models.py:192 msgid "filename" -msgstr "nume fisier" +msgstr "nume fișier" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "Numele curent al fisierului stocat" +msgstr "Numele curent al fișierului stocat" #: documents/models.py:202 msgid "archive filename" -msgstr "nume fisier arhiva" +msgstr "nume fișier arhiva" #: documents/models.py:208 msgid "Current archive filename in storage" @@ -172,11 +172,11 @@ msgstr "Numele curent al arhivei stocate" #: documents/models.py:212 msgid "archive serial number" -msgstr "numar serial in arhiva" +msgstr "număr serial in arhiva" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "Pozitia acestui document in arhiva fizica." +msgstr "Poziția acestui document in arhiva fizica." #: documents/models.py:223 msgid "document" @@ -192,7 +192,7 @@ msgstr "depanare" #: documents/models.py:312 msgid "information" -msgstr "informatii" +msgstr "informații" #: documents/models.py:313 msgid "warning" @@ -232,7 +232,7 @@ msgstr "vizualizare" #: documents/models.py:345 msgid "saved views" -msgstr "vizualizari" +msgstr "vizualizări" #: documents/models.py:348 msgid "user" @@ -240,31 +240,31 @@ msgstr "utilizator" #: documents/models.py:354 msgid "show on dashboard" -msgstr "afiseaza pe tabloul de bord" +msgstr "afișează pe tabloul de bord" #: documents/models.py:357 msgid "show in sidebar" -msgstr "afiseaza in bara laterala" +msgstr "afișează in bara laterala" #: documents/models.py:361 msgid "sort field" -msgstr "sorteaza camp" +msgstr "sortează camp" #: documents/models.py:364 msgid "sort reverse" -msgstr "sorteaza invers" +msgstr "sortează invers" #: documents/models.py:370 msgid "title contains" -msgstr "titlul contine" +msgstr "titlul conține" #: documents/models.py:371 msgid "content contains" -msgstr "continutul contine" +msgstr "conținutul conține" #: documents/models.py:372 msgid "ASN is" -msgstr "ASN-ul este" +msgstr "Avizul prealabil de expediție este" #: documents/models.py:373 msgid "correspondent is" @@ -276,7 +276,7 @@ msgstr "tipul documentului este" #: documents/models.py:375 msgid "is in inbox" -msgstr "este in inbox" +msgstr "este în inbox" #: documents/models.py:376 msgid "has tag" @@ -288,51 +288,51 @@ msgstr "are orice eticheta" #: documents/models.py:378 msgid "created before" -msgstr "creat inainte de" +msgstr "creat înainte de" #: documents/models.py:379 msgid "created after" -msgstr "creat dupa" +msgstr "creat după" #: documents/models.py:380 msgid "created year is" -msgstr "anul crearii este" +msgstr "anul creării este" #: documents/models.py:381 msgid "created month is" -msgstr "luna crearii este" +msgstr "luna creării este" #: documents/models.py:382 msgid "created day is" -msgstr "ziua crearii este" +msgstr "ziua creării este" #: documents/models.py:383 msgid "added before" -msgstr "adaugat inainte de" +msgstr "adăugat înainte de" #: documents/models.py:384 msgid "added after" -msgstr "adaugat dupa" +msgstr "adăugat după" #: documents/models.py:385 msgid "modified before" -msgstr "modificat inainte de" +msgstr "modificat înainte de" #: documents/models.py:386 msgid "modified after" -msgstr "modificat dupa" +msgstr "modificat după" #: documents/models.py:387 msgid "does not have tag" -msgstr "nu are eticheta" +msgstr "nu are etichetă" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "nu are aviz prealabil de expediție" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "titlul sau conținutul conține" #: documents/models.py:400 msgid "rule type" @@ -344,7 +344,7 @@ msgstr "valoare" #: documents/models.py:410 msgid "filter rule" -msgstr "regula de filtrare" +msgstr "regulă de filtrare" #: documents/models.py:411 msgid "filter rules" @@ -353,20 +353,20 @@ msgstr "reguli de filtrare" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expression: %(error)s" -msgstr "Expresie regulata invalida: %(error)s" +msgstr "Expresie regulată invalida: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." -msgstr "Culoare invalida." +msgstr "Culoare invalidă." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "Tip de fisier %(type)s nesuportat " +msgstr "Tip de fișier %(type)s nesuportat" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "Paperless-ng se incarca..." +msgstr "Paperless-ng se încarca..." #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" @@ -374,11 +374,11 @@ msgstr "Paperless-ng s-a deconectat" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "Ati fost deconectat cu succes. La revedere !" +msgstr "Ați fost deconectat cu succes. La revedere!" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "Conectati-va din nou" +msgstr "Conectați-vă din nou" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" @@ -386,11 +386,11 @@ msgstr "Conectare Paperless-ng" #: documents/templates/registration/login.html:42 msgid "Please sign in." -msgstr "Va rugam conectati-va." +msgstr "Vă rugăm conectați-vă." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "Numele si parola nu sunt corecte. Va rugam incercati din nou." +msgstr "Numele si parola nu sunt corecte. Vă rugăm incercați din nou." #: documents/templates/registration/login.html:48 msgid "Username" @@ -398,7 +398,7 @@ msgstr "Nume" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "Parola" +msgstr "Parolă" #: documents/templates/registration/login.html:54 msgid "Sign in" @@ -406,39 +406,39 @@ msgstr "Conectare" #: paperless/settings.py:298 msgid "English (US)" -msgstr "Engleza (SUA)" +msgstr "Engleză (Americană)" #: paperless/settings.py:299 msgid "English (GB)" -msgstr "Engleza (UK)" +msgstr "Engleză (Britanică)" #: paperless/settings.py:300 msgid "German" -msgstr "Germana" +msgstr "Germană" #: paperless/settings.py:301 msgid "Dutch" -msgstr "Olandeza" +msgstr "Olandeză" #: paperless/settings.py:302 msgid "French" -msgstr "Franceza" +msgstr "Franceză" #: paperless/settings.py:303 msgid "Portuguese (Brazil)" -msgstr "Portugheza (Brazilia)" +msgstr "Portugheză (Brazilia)" #: paperless/settings.py:304 msgid "Italian" -msgstr "Italiana" +msgstr "Italiană" #: paperless/settings.py:305 msgid "Romanian" -msgstr "Romana" +msgstr "Romană" #: paperless/settings.py:306 msgid "Russian" -msgstr "" +msgstr "Rusă" #: paperless/urls.py:118 msgid "Paperless-ng administration" @@ -450,7 +450,7 @@ msgstr "Filtru" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "Paperless va procesa numai email-urile care se potrivesc cu TOATE filtrele de mai jos." +msgstr "Paperless va procesa doar mail-urile care corespund TUTUROR filtrelor date mai jos." #: paperless_mail/admin.py:37 msgid "Actions" @@ -458,7 +458,7 @@ msgstr "Acțiuni" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "Actiunea aplicata tuturol email-urilor. Aceasta este realizata doar cand sunt consumate documente din email. Cele fara atasamente nu vor fi procesate." +msgstr "Acțiunea aplicată tuturor email-urilor. Aceasta este realizată doar când sunt consumate documente din email. Cele fara atașamente nu vor fi procesate." #: paperless_mail/admin.py:46 msgid "Metadata" @@ -466,7 +466,7 @@ msgstr "Metadate" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "Atribuie metadate documentelor consumate prin aceasta regula in mod automat. Chiar daca nu sunt atribuite etichete, tipuri sau corespondenti, Paperless va procesa toate regulile definite care se potrivesc." +msgstr "Atribuie metadate documentelor consumate prin aceasta regula în mod automat. Chiar dacă nu sunt atribuite etichete, tipuri sau corespondenți, Paperless va procesa toate regulile definite care se potrivesc." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -482,15 +482,15 @@ msgstr "conturi de email" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "Fara criptare" +msgstr "Fără criptare" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "Foloseste SSL" +msgstr "Folosește SSL" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "Foloseste STARTTLS" +msgstr "Folosește STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" @@ -502,7 +502,7 @@ msgstr "port IMAP" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "De obicei este 143 pentru conexiuni necriptate si STARTTLS, sau 993 pentru conexiuni SSL." +msgstr "De obicei este 143 pentru conexiuni necriptate și STARTTLS, sau 993 pentru conexiuni SSL." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -514,11 +514,11 @@ msgstr "nume" #: paperless_mail/models.py:50 msgid "password" -msgstr "parola" +msgstr "parolă" #: paperless_mail/models.py:60 msgid "mail rule" -msgstr "regula email" +msgstr "regulă email" #: paperless_mail/models.py:61 msgid "mail rules" @@ -526,35 +526,35 @@ msgstr "reguli email" #: paperless_mail/models.py:67 msgid "Only process attachments." -msgstr "Proceseaza doar atasamentele." +msgstr "Procesează doar atașamentele." #: paperless_mail/models.py:68 msgid "Process all files, including 'inline' attachments." -msgstr "Proceseaza toate fisierele, inclusiv atasamentele \"inline\"." +msgstr "Procesează toate fișierele, inclusiv atașamentele „inline”." #: paperless_mail/models.py:78 msgid "Mark as read, don't process read mails" -msgstr "Marcheaza ca citit, nu procesa email-uri citite" +msgstr "Marchează ca citit, nu procesa email-uri citite" #: paperless_mail/models.py:79 msgid "Flag the mail, don't process flagged mails" -msgstr "Semnalizeaza, nu procesa email-uri semnalizate" +msgstr "Marchează, nu procesa email-uri marcate" #: paperless_mail/models.py:80 msgid "Move to specified folder" -msgstr "Muta in directorul specificat" +msgstr "Mută în directorul specificat" #: paperless_mail/models.py:81 msgid "Delete" -msgstr "Sterge" +msgstr "Șterge" #: paperless_mail/models.py:88 msgid "Use subject as title" -msgstr "Foloseste subiectul ca titlu" +msgstr "Utilizează subiectul ca titlu" #: paperless_mail/models.py:89 msgid "Use attachment filename as title" -msgstr "Foloseste numele atasamentului ca titlu" +msgstr "Utilizează numele fișierului atașat ca titlu" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" @@ -562,19 +562,19 @@ msgstr "Nu atribui un corespondent" #: paperless_mail/models.py:101 msgid "Use mail address" -msgstr "Foloseste adresa de email" +msgstr "Folosește adresa de email" #: paperless_mail/models.py:103 msgid "Use name (or mail address if not available)" -msgstr "Foloseste numele (daca nu exista, foloseste adresa de email)" +msgstr "Folosește numele (dacă nu exista, folosește adresa de email)" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" -msgstr "Foloseste corespondentul selectat mai jos" +msgstr "Folosește corespondentul selectat mai jos" #: paperless_mail/models.py:113 msgid "order" -msgstr "ordoneaza" +msgstr "ordonează" #: paperless_mail/models.py:120 msgid "account" @@ -586,51 +586,51 @@ msgstr "director" #: paperless_mail/models.py:128 msgid "filter from" -msgstr "filtreaza de la" +msgstr "filtrează de la" #: paperless_mail/models.py:131 msgid "filter subject" -msgstr "filtreaza subiect" +msgstr "filtrează subiect" #: paperless_mail/models.py:134 msgid "filter body" -msgstr "filtreaza corpul email-ului" +msgstr "filtrează corpul email-ului" #: paperless_mail/models.py:138 msgid "filter attachment filename" -msgstr "filtreaza numele atasamentului" +msgstr "filtrează numele fișierului atașat" #: paperless_mail/models.py:140 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "Consuma doar documentele care se potrivesc in intregime cu acest nume de fisier, daca este specificat. Simbolul * tine locul oricarui sir de caractere. Majusculele nu conteaza." +msgstr "Consumă doar documentele care se potrivesc în întregime cu acest nume de fișier, dacă este specificat. Simbolul * ține locul oricărui șir de caractere. Majusculele nu contează." #: paperless_mail/models.py:146 msgid "maximum age" -msgstr "varsta maxima" +msgstr "vârsta maximă" #: paperless_mail/models.py:148 msgid "Specified in days." -msgstr "Specificata in zile." +msgstr "Specificată in zile." #: paperless_mail/models.py:151 msgid "attachment type" -msgstr "tipul atasamentului" +msgstr "tip atașament" #: paperless_mail/models.py:154 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "Atasamentele \"inline\" includ si imaginile incorporate, deci aceasta optiune functioneaza cel mai bine combinata cu un filtru pentru numele fisierului." +msgstr "Atașamentele \"inline\" includ și imaginile încorporate, deci această opțiune funcționează cel mai bine combinată cu un filtru pentru numele fișierului." #: paperless_mail/models.py:159 msgid "action" -msgstr "actiune" +msgstr "acţiune" #: paperless_mail/models.py:165 msgid "action parameter" -msgstr "parametru al actiunii" +msgstr "parametru acțiune" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Parametru aditional pentru actiunea definita mai sus (ex. directorul in care sa se realizeze o mutare)" +msgstr "Parametru adițional pentru acțiunea definită mai sus (ex. directorul în care să se realizeze o mutare)." #: paperless_mail/models.py:173 msgid "assign title from" @@ -638,7 +638,7 @@ msgstr "atribuie titlu din" #: paperless_mail/models.py:183 msgid "assign this tag" -msgstr "atribuie aceasta eticheta" +msgstr "atribuie această etichetă" #: paperless_mail/models.py:191 msgid "assign this document type" From b2bb3d9eba4a53fd573352fe5404825d7dc80dbd Mon Sep 17 00:00:00 2001 From: darmiel <71837281+darmiel@users.noreply.github.com> Date: Mon, 8 Mar 2021 17:11:25 +0100 Subject: [PATCH 586/898] Implemented 'Filter by: ASN' --- .../filter-editor/filter-editor.component.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 3ac9df1ff..43387c08f 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -8,12 +8,13 @@ import { DocumentTypeService } from 'src/app/services/rest/document-type.service import { TagService } from 'src/app/services/rest/tag.service'; import { CorrespondentService } from 'src/app/services/rest/correspondent.service'; import { FilterRule } from 'src/app/data/filter-rule'; -import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE, FILTER_TITLE_CONTENT } from 'src/app/data/filter-rule-type'; +import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_ASN, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE, FILTER_TITLE_CONTENT } from 'src/app/data/filter-rule-type'; import { FilterableDropdownSelectionModel } from '../../common/filterable-dropdown/filterable-dropdown.component'; import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'; const TEXT_FILTER_TARGET_TITLE = "title" const TEXT_FILTER_TARGET_TITLE_CONTENT = "title-content" +const TEXT_FILTER_TARGET_ASN = "asn" @Component({ selector: 'app-filter-editor', @@ -51,6 +52,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { case FILTER_TITLE: return $localize`Title: ${rule.value}` + + case FILTER_ASN: + return $localize`ASN: ${rule.value}` } } @@ -71,7 +75,8 @@ export class FilterEditorComponent implements OnInit, OnDestroy { textFilterTargets = [ {id: TEXT_FILTER_TARGET_TITLE, name: $localize`Title`}, - {id: TEXT_FILTER_TARGET_TITLE_CONTENT, name: $localize`Title & content`} + {id: TEXT_FILTER_TARGET_TITLE_CONTENT, name: $localize`Title & content`}, + {id: TEXT_FILTER_TARGET_ASN, name: $localize`ASN`} ] textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT @@ -111,6 +116,10 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this._textFilter = rule.value this.textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT break + case FILTER_ASN: + this._textFilter = rule.value + this.textFilterTarget = TEXT_FILTER_TARGET_ASN + break case FILTER_CREATED_AFTER: this.dateCreatedAfter = rule.value break @@ -147,6 +156,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { if (this._textFilter && this.textFilterTarget == TEXT_FILTER_TARGET_TITLE) { filterRules.push({rule_type: FILTER_TITLE, value: this._textFilter}) } + if (this._textFilter && this.textFilterTarget == TEXT_FILTER_TARGET_ASN) { + filterRules.push({rule_type: FILTER_ASN, value: this._textFilter}) + } if (this.tagSelectionModel.isNoneSelected()) { filterRules.push({rule_type: FILTER_HAS_ANY_TAG, value: "false"}) } else { From 85dbe62e7eb80570a7f021ecfb853d9b5302244a Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 8 Mar 2021 19:41:25 +0100 Subject: [PATCH 587/898] New Crowdin updates (#725) --- src-ui/src/locale/messages.ro_RO.xlf | 82 +++++++++++++------------- src/locale/ro_RO/LC_MESSAGES/django.po | 4 +- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 0247cca61..f6855f020 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1823,7 +1823,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Consultati documentatia pentru a afla cum sa folositi aceste functii. Sectiunea de baza contine informatii despre cum sa folositi Paperless in general.</target> + <target state="translated">Consultați documentația pentru a afla cum să folosiți aceste funcții. Secțiunea de baza conține informații despre cum să folosiți Paperless în general.</target> </trans-unit> <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> @@ -1839,7 +1839,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="translated">Selecteaza</target> + <target state="translated">Selectează</target> </trans-unit> <trans-unit id="7103181924469214926" datatype="html"> <source>Please select an object</source> @@ -1847,7 +1847,7 @@ <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="translated">Selectati un obiect</target> + <target state="translated">Selectați un obiect</target> </trans-unit> <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> <source>Invalid date.</source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> - <target state="translated">Data invalida.</target> + <target state="translated">Data invalidă.</target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1879,7 +1879,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">(fara titlu)</target> + <target state="translated">(fără titlu)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">90</context> </context-group> - <target state="translated">Engleza (SUA)</target> + <target state="translated">Engleză (Americană)</target> </trans-unit> <trans-unit id="6987083569809053351" datatype="html"> <source>English (GB)</source> @@ -1895,7 +1895,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="translated">Engleza (UK)</target> + <target state="translated">Engleză (Britanică)</target> </trans-unit> <trans-unit id="1858110241312746425" datatype="html"> <source>German</source> @@ -1903,7 +1903,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">92</context> </context-group> - <target state="translated">Germana</target> + <target state="translated">Germană</target> </trans-unit> <trans-unit id="3071065188816255493" datatype="html"> <source>Dutch</source> @@ -1911,7 +1911,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">93</context> </context-group> - <target state="translated">Olandeza</target> + <target state="translated">Olandeză</target> </trans-unit> <trans-unit id="7633754075223722162" datatype="html"> <source>French</source> @@ -1919,7 +1919,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="translated">Franceza</target> + <target state="translated">Franceză</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="translated">Portugheza (Brazilia)</target> + <target state="translated">Portugheză (Brazilia)</target> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> @@ -1935,7 +1935,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> - <target state="translated">Italiana</target> + <target state="translated">Italiană</target> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> @@ -1943,7 +1943,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="translated">Romana</target> + <target state="translated">Română</target> </trans-unit> <trans-unit id="7137419789978325708" datatype="html"> <source>Russian</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="translated">Documentul exista deja.</target> + <target state="translated">Documentul există deja.</target> </trans-unit> <trans-unit id="148389968432135849" datatype="html"> <source>File not found.</source> @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="translated">Fisierul nu a fost gasit.</target> + <target state="translated">Fișierul nu a fost găsit.</target> </trans-unit> <trans-unit id="1520671543092565667" datatype="html"> <source>Pre-consume script does not exist.</source> @@ -1984,7 +1984,7 @@ <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="translated">Scriptul pre-consum nu exista.</target> + <target state="translated">Scriptul pre-consum nu există.</target> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -1993,7 +1993,7 @@ <context context-type="linenumber">18</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="translated">Eroare la executia scriptului pre-consum.</target> + <target state="translated">Eroare la execuția scriptului pre-consum.</target> </trans-unit> <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> @@ -2002,7 +2002,7 @@ <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="translated">Scriptul post-consum nu exista.</target> + <target state="translated">Scriptul post-consum nu există.</target> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> @@ -2011,7 +2011,7 @@ <context context-type="linenumber">20</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="translated">Eroare la executia scriptului post-consum.</target> + <target state="translated">Eroare la execuția scriptului post-consum.</target> </trans-unit> <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> @@ -2019,7 +2019,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="translated">Fisier nou primit.</target> + <target state="translated">Fișier nou primit.</target> </trans-unit> <trans-unit id="7337565919209746135" datatype="html"> <source>File type not supported.</source> @@ -2027,7 +2027,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Tip de fisier nesuportat.</target> + <target state="translated">Tip de fișier nesuportat.</target> </trans-unit> <trans-unit id="5002399167376099234" datatype="html"> <source>Processing document...</source> @@ -2035,7 +2035,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">23</context> </context-group> - <target state="translated">Se proceseaza documentul...</target> + <target state="translated">Se procesează documentul...</target> </trans-unit> <trans-unit id="1085975194762600381" datatype="html"> <source>Generating thumbnail...</source> @@ -2043,7 +2043,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">24</context> </context-group> - <target state="translated">Se genereaza miniatura...</target> + <target state="translated">Se generează miniatura...</target> </trans-unit> <trans-unit id="3280851677698431426" datatype="html"> <source>Retrieving date from document...</source> @@ -2059,7 +2059,7 @@ <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Se salveaza documentul...</target> + <target state="translated">Se salvează documentul...</target> </trans-unit> <trans-unit id="4550450765009165976" datatype="html"> <source>Finished.</source> @@ -2083,7 +2083,7 @@ <context context-type="sourcefile">src/app/services/toast.service.ts</context> <context context-type="linenumber">39</context> </context-group> - <target state="translated">Informatii</target> + <target state="translated">Informații</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -2123,7 +2123,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Adaugat</target> + <target state="translated">Adăugat</target> </trans-unit> <trans-unit id="3553216189604488439" datatype="html"> <source>Modified</source> @@ -2139,7 +2139,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="translated">Creeaza articol nou</target> + <target state="translated">Crează articol nou</target> </trans-unit> <trans-unit id="5324147361912094446" datatype="html"> <source>Edit item</source> @@ -2147,7 +2147,7 @@ <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="translated">Modifica articol</target> + <target state="translated">Modifică articol</target> </trans-unit> <trans-unit id="1699589597032579396" datatype="html"> <source>Could not save element: <x id="PH" equiv-text="error"/></source> @@ -2171,7 +2171,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="translated">Sunteti sigur ca doriti sa stergeti acest element?</target> + <target state="translated">Sunteți sigur că doriți să ștergeți acest element?</target> </trans-unit> <trans-unit id="8371896857609524947" datatype="html"> <source>Associated documents will not be deleted.</source> @@ -2179,7 +2179,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="translated">Documentele asociate nu vor fi sterse.</target> + <target state="translated">Documentele asociate nu vor fi șterse.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2187,7 +2187,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">106</context> </context-group> - <target state="translated">Sterge</target> + <target state="translated">Șterge</target> </trans-unit> <trans-unit id="5467489005440577210" datatype="html"> <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">114</context> </context-group> - <target state="translated">Eroare la stergerea elementului: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + <target state="translated">Eroare la ștergerea elementului: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> </trans-unit> <trans-unit id="5851669019930456395" datatype="html"> <source>Any word</source> @@ -2203,7 +2203,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">Oricare cuvant</target> + <target state="translated">Oricare cuvânt</target> </trans-unit> <trans-unit id="7517655726614958140" datatype="html"> <source>Any: Document contains any of these words (space separated)</source> @@ -2211,7 +2211,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">Oricare: Documentul contine oricare dintre aceste cuvinte (separate prin spatiu)</target> + <target state="translated">Oricare: Documentul conține oricare dintre aceste cuvinte (separate prin spațiu)</target> </trans-unit> <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Toate: Documentul contine toate aceste cuvinte (separate prin spatiu)</target> + <target state="translated">Toate: Documentul conține toate aceste cuvinte (separate prin spațiu)</target> </trans-unit> <trans-unit id="9180173992399180575" datatype="html"> <source>Exact match</source> @@ -2243,7 +2243,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">14</context> </context-group> - <target state="translated">Exact: Documentul contine acest sir de caractere</target> + <target state="translated">Exact: Documentul conține acest șir de caractere</target> </trans-unit> <trans-unit id="1338733395833138319" datatype="html"> <source>Regular expression</source> @@ -2251,7 +2251,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="translated">Expresie regulata</target> + <target state="translated">Expresie regulată</target> </trans-unit> <trans-unit id="7548151332424148033" datatype="html"> <source>Regular expression: Document matches this regular expression</source> @@ -2259,7 +2259,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">15</context> </context-group> - <target state="translated">Expresie regulata: Documentul se potriveste cu aceasta expresie regulata</target> + <target state="translated">Expresie regulată: Documentul se potrivește cu această expresie regulată</target> </trans-unit> <trans-unit id="1856513373880048959" datatype="html"> <source>Fuzzy word</source> @@ -2267,7 +2267,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="translated">Cuvant neclar</target> + <target state="translated">Cuvânt neclar</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> @@ -2275,7 +2275,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="translated">Neclar: Documentul contine un cuvant similar cu acesta</target> + <target state="translated">Neclar: Documentul conține un cuvânt similar cu acesta</target> </trans-unit> <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> @@ -2283,7 +2283,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="translated">Auto: Invata potrivirile automat</target> + <target state="translated">Auto: Învață potrivirea automat</target> </trans-unit> </body> </file> diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index e7366feb6..2adfe6f4d 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 09:37\n" +"PO-Revision-Date: 2021-03-08 11:58\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -434,7 +434,7 @@ msgstr "Italiană" #: paperless/settings.py:305 msgid "Romanian" -msgstr "Romană" +msgstr "Română" #: paperless/settings.py:306 msgid "Russian" From 36f9a179f933f241dba58529d7e12468e94f30d6 Mon Sep 17 00:00:00 2001 From: darmiel <71837281+darmiel@users.noreply.github.com> Date: Mon, 8 Mar 2021 20:40:18 +0100 Subject: [PATCH 588/898] Updated messages.xlf --- src-ui/messages.xlf | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 329399584..d8da167fe 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1043,63 +1043,77 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> + </context-group> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> </context-group> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> + </context-group> + </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> </context-group> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> @@ -1819,13 +1833,6 @@ <context context-type="linenumber">39</context> </context-group> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> From 43d2d1e367d35ba47c1005d98159f487aa332c62 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 10 Mar 2021 13:55:03 +0100 Subject: [PATCH 589/898] New Crowdin updates (#727) --- src-ui/src/locale/messages.cs_CZ.xlf | 42 ++++--- src-ui/src/locale/messages.de_DE.xlf | 42 ++++--- src-ui/src/locale/messages.en_GB.xlf | 42 ++++--- src-ui/src/locale/messages.es_ES.xlf | 44 ++++--- src-ui/src/locale/messages.fr_FR.xlf | 44 ++++--- src-ui/src/locale/messages.hu_HU.xlf | 42 ++++--- src-ui/src/locale/messages.it_IT.xlf | 42 ++++--- src-ui/src/locale/messages.nl_NL.xlf | 42 ++++--- src-ui/src/locale/messages.pt_BR.xlf | 42 ++++--- src-ui/src/locale/messages.pt_PT.xlf | 154 +++++++++++++------------ src-ui/src/locale/messages.ro_RO.xlf | 42 ++++--- src-ui/src/locale/messages.ru_RU.xlf | 42 ++++--- src-ui/src/locale/messages.xh_ZA.xlf | 42 ++++--- src-ui/src/locale/messages.zh_CN.xlf | 42 ++++--- src/locale/es_ES/LC_MESSAGES/django.po | 22 ++-- src/locale/fr_FR/LC_MESSAGES/django.po | 8 +- src/locale/pt_BR/LC_MESSAGES/django.po | 4 +- src/locale/pt_PT/LC_MESSAGES/django.po | 72 ++++++------ 18 files changed, 461 insertions(+), 349 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index a6efd60ff..7b56a1ec3 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="needs-translation">Title</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="needs-translation">Title & content</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="needs-translation">Without document type</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="needs-translation">Without any tag</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="needs-translation">Information</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="needs-translation">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 13c5c6652..67a7b3b9f 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Titel</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Titel & Inhalt</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Korrespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Ohne Korrespondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Typ: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Ohne Dokumenttyp</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Ohne Tag</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Information</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 8d0ebc007..29413f2b3 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Title</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Title & content</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Without correspondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Without document type</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Without any tag</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Information</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index f5d79815b..9f32f214c 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Titulo y contenido</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">NSF</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Sin tipo de documento</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Sin ninguna etiqueta</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Información</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">NSF</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> @@ -2267,7 +2275,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy word</target> + <target state="translated">Palabra borrosa</target> </trans-unit> <trans-unit id="8419167206585286450" datatype="html"> <source>Fuzzy: Document contains a word similar to this word</source> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 13d19841c..a5752de1b 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Titre</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Titre & contenu</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">NSA</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Correspondant : <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Sans correspondant</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Type : <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Sans type de document</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Étiquette : <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Sans étiquette</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Titre : <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">NSA : <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1951,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Russe</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Information</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">NSA</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 729ffc632..a947d5b73 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Cím</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="needs-translation">Title & content</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Partner: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Típus: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="needs-translation">Without document type</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Cimke: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="needs-translation">Without any tag</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Információ</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index d582bfd72..7088230dd 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Titolo</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Titolo & contenuto</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Corrispondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Senza corrispondente</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Senza tipo di documento</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Senza alcun tag</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Titolo: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Informazione</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index a425f7e7c..7f9dca0ef 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Titel</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Titel en inhoud</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Zonder correspondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Zonder documenttype</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Etiket: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Zonder enig etiket</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Informatie</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 5f65706c5..d8a49f82b 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Título & conteúdo</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">NSA</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Correspondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Sem correspondente</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Sem tipo de documento</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Sem etiquetas</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Informação</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">NSA</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 724500581..83c62dcc3 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -144,7 +144,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">85</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, one {} =1 {Selecionado <x id="INTERPOLATION"/> de um documento} other {Selecionados <x id="INTERPOLATION"/> de <x id="INTERPOLATION_1"/> documentos}}</target> </trans-unit> <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> @@ -152,7 +152,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">86</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</target> + <target state="translated">{VAR_PLURAL, plural, one {} =1 {Um documento} other {<x id="INTERPOLATION"/> documentos}}</target> </trans-unit> <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> <source>(filtered)</source> @@ -784,7 +784,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Invert thumbnails in dark mode</target> + <target state="translated">Inverter miniaturas no modo escuro</target> </trans-unit> <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> <source>Bulk editing</source> @@ -896,7 +896,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">No saved views defined.</target> + <target state="translated">Nenhuma vista gravada definida.</target> </trans-unit> <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> <source>404 Not Found</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Tem a certeza que deseja eliminar a correspondência "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="needs-translation">Matching algorithm</target> + <target state="translated">Algoritmo correspondente</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -984,7 +984,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="needs-translation">Matching pattern</target> + <target state="translated">Padrão correspondente</target> </trans-unit> <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> @@ -992,7 +992,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">12</context> </context-group> - <target state="needs-translation">Case insensitive</target> + <target state="translated">Não distingue maiúsculas de minúsculas</target> </trans-unit> <trans-unit id="9153094873118985366" datatype="html"> <source>Create new tag</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tag</target> + <target state="translated">Etiqueta de novo</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + <target state="translated">As etiquetas de novo são automaticamente adicionadas a todos os documentos consumidos.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1032,7 +1032,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new document type</target> + <target state="translated">Criar novo tipo de documento</target> </trans-unit> <trans-unit id="36335016091244220" datatype="html"> <source>Edit document type</source> @@ -1040,7 +1040,7 @@ <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit document type</target> + <target state="translated">Editar tipo de documento</target> </trans-unit> <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> <source>Search results</source> @@ -1048,7 +1048,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Search results</target> + <target state="translated">Resultados da pesquisa</target> </trans-unit> <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> @@ -1064,7 +1064,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">6</context> </context-group> - <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> + <target state="translated">Mostrar documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> </trans-unit> <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> @@ -1088,7 +1088,7 @@ <context context-type="sourcefile">src/app/components/search/search.component.html</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> + <target state="translated">{VAR_PLURAL, plural, one {} =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> @@ -1121,7 +1121,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">112</context> </context-group> - <target state="needs-translation">Manage</target> + <target state="translated">Gerir</target> </trans-unit> <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> <source>Admin</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="needs-translation">Admin</target> + <target state="translated">Administrador</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1137,7 +1137,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">160</context> </context-group> - <target state="needs-translation">Info</target> + <target state="translated">Informação</target> </trans-unit> <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> <source>Documentation</source> @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -1199,47 +1199,55 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> - <target state="needs-translation">Title & content</target> + <target state="translated">Título & conteúdo</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">NSA</target> </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> - <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + <target state="translated">Correspondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Without correspondent</target> + <target state="translated">Sem correspondente</target> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> - <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> - <target state="needs-translation">Without document type</target> + <target state="translated">Sem tipo de documento</target> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Sem etiquetas</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">NSA: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1273,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> - <target state="needs-translation">Filter correspondents</target> + <target state="translated">Filtrar correspondentes</target> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> @@ -1281,7 +1297,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Filter document types</target> + <target state="translated">Filtrar tipos de documentos</target> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> @@ -1289,7 +1305,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">58</context> </context-group> - <target state="needs-translation">Reset filters</target> + <target state="translated">Limpar filtros</target> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> <source>Not assigned</source> @@ -1298,7 +1314,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="needs-translation">Not assigned</target> + <target state="translated">Não atribuído</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1386,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter by correspondent</target> + <target state="translated">Filtrar por correspondente</target> </trans-unit> <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> @@ -1402,7 +1418,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">62</context> </context-group> - <target state="needs-translation">Score:</target> + <target state="translated">Pontuação:</target> </trans-unit> <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> <source>View in browser</source> @@ -1410,7 +1426,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">40</context> </context-group> - <target state="needs-translation">View in browser</target> + <target state="translated">Ver no navegador</target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1461,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="needs-translation">Confirm tags assignment</target> + <target state="translated">Confirmar atribuição de etiquetas</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1469,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="needs-translation">This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá adicionar a etiqueta "<x id="PH" equiv-text="tag.name"/>" ao(s) <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá adicionar as etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> ao(s) <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1501,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="needs-translation">This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá remover a etiqueta "<x id="PH" equiv-text="tag.name"/>" do(s) <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1509,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="needs-translation">This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá remover as etiquetas <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> do(s) <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1501,7 +1517,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="needs-translation">This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá adicionar a(s) etiqueta(s) <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> e remover a(s) <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> no(s) <x id="PH_2" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1509,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="needs-translation">Confirm correspondent assignment</target> + <target state="translated">Confirmar atribuição correspondente</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1517,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá adicionar a correspondência <x id="PH" equiv-text="correspondent.name"/> aos <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1525,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá remover a correspondência do(s) <x id="PH" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1533,7 +1549,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">182</context> </context-group> - <target state="needs-translation">Confirm document type assignment</target> + <target state="translated">Confirmar atribuição de tipo de documentos</target> </trans-unit> <trans-unit id="332180123895325027" datatype="html"> <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1541,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">184</context> </context-group> - <target state="needs-translation">This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">A operação irá associar o tipo de documento "<x id="PH" equiv-text="documentType.name"/>" ao(s) <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="2236642492594872779" datatype="html"> <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1549,7 +1565,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="needs-translation">This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá remover o tipo de documento do(s) <x id="PH" equiv-text="this.list.selected.size"/> documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1557,7 +1573,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">201</context> </context-group> - <target state="needs-translation">Delete confirm</target> + <target state="translated">Confirmar eliminação</target> </trans-unit> <trans-unit id="4303174930844518780" datatype="html"> <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1565,7 +1581,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">202</context> </context-group> - <target state="needs-translation">This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operação irá apagar permanentemente <x id="PH" equiv-text="this.list.selected.size"/> o(s) documento(s) selecionado(s).</target> </trans-unit> <trans-unit id="5641451190833696892" datatype="html"> <source>This operation cannot be undone.</source> @@ -1573,7 +1589,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">203</context> </context-group> - <target state="needs-translation">This operation cannot be undone.</target> + <target state="translated">Esta operação não pode ser desfeita.</target> </trans-unit> <trans-unit id="6734339521247847366" datatype="html"> <source>Delete document(s)</source> @@ -1629,7 +1645,7 @@ <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Save current view</target> + <target state="translated">Guardar a vista atual</target> </trans-unit> <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> <source>Show all</source> @@ -1637,7 +1653,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Show all</target> + <target state="translated">Mostrar tudo</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1661,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Documentos na caixa de entrada: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + <target state="translated">Documentos novos: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1750,7 +1766,7 @@ <context context-type="linenumber">4</context> </context-group> <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> - <target state="needs-translation">Dismiss completed</target> + <target state="translated">Descartar concluído</target> </trans-unit> <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> @@ -1759,7 +1775,7 @@ <context context-type="linenumber">25</context> </context-group> <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> - <target state="needs-translation">{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</target> + <target state="translated">{VAR_PLURAL, plural, one {} =1 {Mais um documento} other {mais <x id="INTERPOLATION"/> documentos}}</target> </trans-unit> <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> <source>Open document</source> @@ -1775,7 +1791,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">First steps</target> + <target state="translated">Primeiros passos</target> </trans-unit> <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> <source>Paperless is running! :)</source> @@ -1855,7 +1871,7 @@ <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="linenumber">14</context> </context-group> - <target state="needs-translation">Invalid date.</target> + <target state="translated">Data inválida.</target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1927,7 +1943,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Portuguese (Brazil)</target> + <target state="translated">Português (Brasil)</target> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> @@ -1935,7 +1951,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">96</context> </context-group> - <target state="needs-translation">Italian</target> + <target state="translated">Italiano</target> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> @@ -1943,7 +1959,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">97</context> </context-group> - <target state="needs-translation">Romanian</target> + <target state="translated">Romeno</target> </trans-unit> <trans-unit id="7137419789978325708" datatype="html"> <source>Russian</source> @@ -1951,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Russo</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Informação</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">NSA</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index f6855f020..a9be02808 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Titlu</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Titlu si conținut</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">Aviz prealabil de expediție</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Corespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Fără corespondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Tip: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Fară tip</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Eticheta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Fară etichete</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Titlu: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">Aviz prealabil de expediție: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Informații</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">Aviz prealabil de expediție</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 298d91cb0..0c73d051c 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="translated">Заголовок</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="translated">Заголовок и содержимое</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="translated">АН</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="translated">Корреспондент: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="translated">Без корреспондента</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="translated">Тип: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="translated">Без типа документа</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Тег: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Без тегов</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Заголовок: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="translated">Информация</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="translated">АН</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index aa5dd8165..781e5ec72 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target>crwdns3134:0crwdne3134:0</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target>crwdns3136:0crwdne3136:0</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target>crwdns3354:0crwdne3354:0</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target>crwdns3138:0crwdne3138:0</target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target>crwdns3140:0crwdne3140:0</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target>crwdns3142:0crwdne3142:0</target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target>crwdns3144:0crwdne3144:0</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target>crwdns3146:0crwdne3146:0</target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target>crwdns3148:0crwdne3148:0</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target>crwdns3150:0crwdne3150:0</target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target>crwdns3416:0crwdne3416:0</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target>crwdns3352:0crwdne3352:0</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target>crwdns3354:0crwdne3354:0</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index b5f263396..0942b3773 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1191,7 +1191,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">73</context> + <context context-type="linenumber">77</context> </context-group> <target state="needs-translation">Title</target> </trans-unit> @@ -1199,15 +1199,23 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">74</context> + <context context-type="linenumber">78</context> </context-group> <target state="needs-translation">Title & content</target> </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">79</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">32</context> + <context context-type="linenumber">33</context> </context-group> <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1215,7 +1223,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">34</context> + <context context-type="linenumber">35</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1223,7 +1231,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">39</context> + <context context-type="linenumber">40</context> </context-group> <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1231,7 +1239,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">41</context> + <context context-type="linenumber">42</context> </context-group> <target state="needs-translation">Without document type</target> </trans-unit> @@ -1239,7 +1247,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">45</context> + <context context-type="linenumber">46</context> </context-group> <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1247,7 +1255,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">50</context> </context-group> <target state="needs-translation">Without any tag</target> </trans-unit> @@ -1255,10 +1263,18 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">53</context> + <context context-type="linenumber">54</context> </context-group> <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -2085,14 +2101,6 @@ </context-group> <target state="needs-translation">Information</target> </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">17</context> - </context-group> - <target state="needs-translation">ASN</target> - </trans-unit> <trans-unit id="2691296884221415710" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index b4c2bf1e0..74418eca3 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-09 23:16\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -39,7 +39,7 @@ msgstr "Expresión regular" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "Palabra borrosa" #: documents/models.py:37 msgid "Automatic" @@ -52,15 +52,15 @@ msgstr "nombre" #: documents/models.py:45 msgid "match" -msgstr "" +msgstr "coincidencia" #: documents/models.py:49 msgid "matching algorithm" -msgstr "" +msgstr "Algoritmo de coincidencia" #: documents/models.py:55 msgid "is insensitive" -msgstr "" +msgstr "es insensible" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" @@ -152,7 +152,7 @@ msgstr "tipo de almacenamiento" #: documents/models.py:188 msgid "added" -msgstr "" +msgstr "añadido" #: documents/models.py:192 msgid "filename" @@ -164,7 +164,7 @@ msgstr "" #: documents/models.py:202 msgid "archive filename" -msgstr "" +msgstr "nombre de archivo" #: documents/models.py:208 msgid "Current archive filename in storage" @@ -344,11 +344,11 @@ msgstr "valor" #: documents/models.py:410 msgid "filter rule" -msgstr "" +msgstr "regla de filtrado" #: documents/models.py:411 msgid "filter rules" -msgstr "" +msgstr "reglas de filtrado" #: documents/serialisers.py:53 #, python-format @@ -438,7 +438,7 @@ msgstr "Rumano" #: paperless/settings.py:306 msgid "Russian" -msgstr "" +msgstr "Ruso" #: paperless/urls.py:118 msgid "Paperless-ng administration" @@ -458,7 +458,7 @@ msgstr "Acciones" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "La acción aplicada al correo. Esta acción solo se realiza cuando los documentos se consumen del correo. Los correos sin archivos adjuntos permanecerán totalmente intactos." #: paperless_mail/admin.py:46 msgid "Metadata" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index e5966e597..b8f79e03b 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 08:06\n" +"PO-Revision-Date: 2021-03-08 21:07\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -328,11 +328,11 @@ msgstr "ne porte pas d'étiquette" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "ne porte pas de NSA" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "le titre ou le contenu contient" #: documents/models.py:400 msgid "rule type" @@ -438,7 +438,7 @@ msgstr "Roumain" #: paperless/settings.py:306 msgid "Russian" -msgstr "" +msgstr "Russe" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index c0c7e822d..354780b4e 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-08 20:02\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -332,7 +332,7 @@ msgstr "" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "título ou conteúdo contém" #: documents/models.py:400 msgid "rule type" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 8f6538fdf..e015d377d 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 20:36\n" +"PO-Revision-Date: 2021-03-08 23:34\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -48,15 +48,15 @@ msgstr "Automático" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:109 msgid "name" -msgstr "" +msgstr "nome" #: documents/models.py:45 msgid "match" -msgstr "" +msgstr "correspondência" #: documents/models.py:49 msgid "matching algorithm" -msgstr "" +msgstr "algoritmo correspondente" #: documents/models.py:55 msgid "is insensitive" @@ -64,19 +64,19 @@ msgstr "" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "" +msgstr "correspondente" #: documents/models.py:75 msgid "correspondents" -msgstr "" +msgstr "correspondentes" #: documents/models.py:81 msgid "color" -msgstr "" +msgstr "cor" #: documents/models.py:87 msgid "is inbox tag" -msgstr "" +msgstr "é etiqueta de novo" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." @@ -84,35 +84,35 @@ msgstr "" #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "etiqueta" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "" +msgstr "etiquetas" #: documents/models.py:101 documents/models.py:133 msgid "document type" -msgstr "" +msgstr "tipo de documento" #: documents/models.py:102 msgid "document types" -msgstr "" +msgstr "tipos de documento" #: documents/models.py:110 msgid "Unencrypted" -msgstr "" +msgstr "Não encriptado" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "Encriptado com GNU Privacy Guard" #: documents/models.py:124 msgid "title" -msgstr "" +msgstr "título" #: documents/models.py:137 msgid "content" -msgstr "" +msgstr "conteúdo" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." @@ -140,23 +140,23 @@ msgstr "" #: documents/models.py:172 documents/models.py:328 msgid "created" -msgstr "" +msgstr "criado" #: documents/models.py:176 msgid "modified" -msgstr "" +msgstr "modificado" #: documents/models.py:180 msgid "storage type" -msgstr "" +msgstr "tipo de armazenamento" #: documents/models.py:188 msgid "added" -msgstr "" +msgstr "adicionado" #: documents/models.py:192 msgid "filename" -msgstr "" +msgstr "nome de ficheiro" #: documents/models.py:198 msgid "Current filename in storage" @@ -180,51 +180,51 @@ msgstr "" #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "documento" #: documents/models.py:224 msgid "documents" -msgstr "" +msgstr "documentos" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "depurar" #: documents/models.py:312 msgid "information" -msgstr "" +msgstr "informação" #: documents/models.py:313 msgid "warning" -msgstr "" +msgstr "aviso" #: documents/models.py:314 msgid "error" -msgstr "" +msgstr "erro" #: documents/models.py:315 msgid "critical" -msgstr "" +msgstr "crítico" #: documents/models.py:319 msgid "group" -msgstr "" +msgstr "grupo" #: documents/models.py:322 msgid "message" -msgstr "" +msgstr "mensagem" #: documents/models.py:325 msgid "level" -msgstr "" +msgstr "nível" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "registo" #: documents/models.py:333 msgid "logs" -msgstr "" +msgstr "registos" #: documents/models.py:344 documents/models.py:396 msgid "saved view" @@ -236,11 +236,11 @@ msgstr "" #: documents/models.py:348 msgid "user" -msgstr "" +msgstr "utilizador" #: documents/models.py:354 msgid "show on dashboard" -msgstr "" +msgstr "exibir no painel de controlo" #: documents/models.py:357 msgid "show in sidebar" @@ -438,7 +438,7 @@ msgstr "" #: paperless/settings.py:306 msgid "Russian" -msgstr "" +msgstr "Russo" #: paperless/urls.py:118 msgid "Paperless-ng administration" From 0ef414cc5c5502c8be523b5ac2054c9e33840321 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 10 Mar 2021 18:15:23 +0100 Subject: [PATCH 590/898] change ISO date to always display 4 digit years #736 --- src-ui/src/app/pipes/custom-date.pipe.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/pipes/custom-date.pipe.ts b/src-ui/src/app/pipes/custom-date.pipe.ts index 6587c157a..34aaaf1b7 100644 --- a/src-ui/src/app/pipes/custom-date.pipe.ts +++ b/src-ui/src/app/pipes/custom-date.pipe.ts @@ -4,8 +4,8 @@ import { SettingsService, SETTINGS_KEYS } from '../services/settings.service'; const FORMAT_TO_ISO_FORMAT = { "longDate": "y-MM-dd", - "mediumDate": "yy-MM-dd", - "shortDate": "yy-MM-dd" + "mediumDate": "y-MM-dd", + "shortDate": "y-MM-dd" } @Pipe({ From 8151b73c1d493d9dc957f9648a02a287e00e7324 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 10 Mar 2021 18:32:57 +0100 Subject: [PATCH 591/898] fix #735 --- .../upload-file-widget/upload-file-widget.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss index b37606ff3..c13a7bd47 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scss @@ -23,7 +23,7 @@ form { } } -::ng-deep .progress { +.progress { position: absolute; top: 0; right: 0; From b82e3f8aa29f12b11155b4e8051299ca82f3ef8d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 10 Mar 2021 22:31:49 +0100 Subject: [PATCH 592/898] changelog --- docs/changelog.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 11223265d..316cb2281 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,20 @@ Changelog ********* +paperless-ng 1.3.1 +################## + +* Added Russian locale. + +* ISO-8601 date format will now always show years with 4 digits. + +* Fixed an issue with the search results score indicator. + +* Added the ability to search for a document with a specific ASN. + +* The startup check for write permissions now works properly on NFS shares. + + paperless-ng 1.3.0 ################## From c5848fc07732de3a67706d1420d919ac2e5ba85d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 10 Mar 2021 22:38:33 +0100 Subject: [PATCH 593/898] keep the ng2-pdf-viewer; this might come in handy for splitting documents at specific pages #706 --- src-ui/package.json | 1 + src-ui/src/app/app.module.ts | 2 ++ .../document-detail.component.html | 17 ++++++++++++++++- .../document-detail.component.ts | 12 ++++++++++++ .../document-card-large.component.html | 2 +- .../document-card-small.component.html | 2 +- .../manage/settings/settings.component.html | 11 +++++++++++ .../manage/settings/settings.component.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 2 ++ 9 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src-ui/package.json b/src-ui/package.json index b005d843a..595228501 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -25,6 +25,7 @@ "bootstrap": "^4.5.0", "file-saver": "^2.0.5", "ng-bootstrap": "^1.6.3", + "ng2-pdf-viewer": "^6.3.2", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^10.0.0", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index f12f08b6d..ebf24a327 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -47,6 +47,7 @@ import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-v import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component'; import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component'; import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component'; +import { PdfViewerModule } from 'ng2-pdf-viewer'; import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component'; import { YesNoPipe } from './pipes/yes-no.pipe'; import { FileSizePipe } from './pipes/file-size.pipe'; @@ -145,6 +146,7 @@ registerLocaleData(localeRu) ReactiveFormsModule, NgxFileDropModule, InfiniteScrollModule, + PdfViewerModule, NgSelectModule, ColorSliderModule ], diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 79215c51c..f9b87aee3 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -1,4 +1,14 @@ <app-page-header [(title)]="title"> + <div class="input-group input-group-sm mr-5 d-none d-md-flex" *ngIf="getContentType() == 'application/pdf' && !useNativePdfViewer"> + <div class="input-group-prepend"> + <div class="input-group-text" i18n>Page</div> + </div> + <input class="form-control flex-grow-0 w-auto" type="number" min="1" [max]="previewNumPages" [(ngModel)]="previewCurrentPage" /> + <div class="input-group-append"> + <div class="input-group-text" i18n>of {{previewNumPages}}</div> + </div> + </div> + <button type="button" class="btn btn-sm btn-outline-danger mr-2 ml-auto" (click)="delete()"> <svg class="buttonicon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#trash" /> @@ -125,7 +135,12 @@ <div class="col-md-6 col-xl-8 mb-3"> <ng-container *ngIf="getContentType() == 'application/pdf'"> - <object [data]="previewUrl | safe" class="preview-sticky" width="100%"></object> + <div class="preview-sticky pdf-viewer-container" *ngIf="!useNativePdfViewer ; else nativePdfViewer"> + <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> + </div> + <ng-template #nativePdfViewer> + <object [data]="previewUrl | safe" type="application/pdf" class="preview-sticky" width="100%"></object> + </ng-template> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> <object [data]="previewUrl | safe" type="text/plain" class="preview-sticky" width="100%"></object> diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 27360a811..af98a6f7f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -15,6 +15,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; import { ConfirmDialogComponent } from '../common/confirm-dialog/confirm-dialog.component'; import { CorrespondentEditDialogComponent } from '../manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component'; import { DocumentTypeEditDialogComponent } from '../manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component'; +import { PDFDocumentProxy } from 'ng2-pdf-viewer'; import { ToastService } from 'src/app/services/toast.service'; import { TextComponent } from '../common/input/text/text.component'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; @@ -60,6 +61,9 @@ export class DocumentDetailComponent implements OnInit { tags: new FormControl([]) }) + previewCurrentPage: number = 1 + previewNumPages: number = 1 + constructor( private documentsService: DocumentService, private route: ActivatedRoute, @@ -73,6 +77,10 @@ export class DocumentDetailComponent implements OnInit { private toastService: ToastService, private settings: SettingsService) { } + get useNativePdfViewer(): boolean { + return this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER) + } + getContentType() { return this.metadata?.has_archive_version ? 'application/pdf' : this.metadata?.original_mime_type } @@ -218,4 +226,8 @@ export class DocumentDetailComponent implements OnInit { return this.documentListViewService.hasNext(this.documentId) } + pdfPreviewLoaded(pdf: PDFDocumentProxy) { + this.previewNumPages = pdf.numPages + } + } diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index cf969ddbe..c7f688bc4 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -43,7 +43,7 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> <span class="d-block d-md-inline" i18n>Edit</span> </a> - <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" title="Click to view in browser" i18n-title + <a class="btn btn-sm btn-outline-secondary" [href]="previewUrl" [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index aa0aa9225..eca5abb97 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -37,7 +37,7 @@ <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> </svg> </a> - <a [href]="previewUrl" target="_blank" class="btn btn-sm btn-outline-secondary" title="Click to view in browser" i18n-title + <a [href]="previewUrl" target="_blank" class="btn btn-sm btn-outline-secondary" [ngbPopover]="previewContent" [popoverTitle]="document.title | documentTitle" autoClose="true" popoverClass="shadow" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16"> diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 73b3b2b0d..c2a32906e 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -78,6 +78,17 @@ </div> </div> + <div class="form-row form-group"> + <div class="col-md-3 col-form-label"> + <span i18n>Document editor</span> + </div> + <div class="col"> + + <app-input-check i18n-title title="Use PDF viewer provided by the browser" i18n-hint hint="This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName="useNativePdfViewer"></app-input-check> + + </div> + </div> + <div class="form-row form-group"> <div class="col-md-3 col-form-label"> <span i18n>Dark mode</span> diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 0933c2714..ab71b1028 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -22,6 +22,7 @@ export class SettingsComponent implements OnInit { 'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), 'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), 'darkModeInvertThumbs': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)), + 'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), 'savedViews': this.savedViewGroup, 'displayLanguage': new FormControl(this.settings.getLanguage()), 'dateLocale': new FormControl(this.settings.get(SETTINGS_KEYS.DATE_LOCALE)), @@ -75,6 +76,7 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) this.settings.set(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, (this.settingsForm.value.darkModeInvertThumbs == true).toString()) + this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) this.settings.set(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, this.settingsForm.value.notificationsConsumerNewDocument) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 2285c1343..bc5725bab 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -27,6 +27,7 @@ export const SETTINGS_KEYS = { DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system', DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', DARK_MODE_THUMB_INVERTED: 'general-settings:dark-mode:thumb-inverted', + USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', DATE_LOCALE: 'general-settings:date-display:date-locale', DATE_FORMAT: 'general-settings:date-display:date-format', NOTIFICATIONS_CONSUMER_NEW_DOCUMENT: 'general-settings:notifications:consumer-new-documents', @@ -42,6 +43,7 @@ const SETTINGS: PaperlessSettings[] = [ {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: true}, + {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, {key: SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT, type: "boolean", default: true}, From 93dcbb756458af46a819617f15ad5f9837284969 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 11 Mar 2021 15:54:30 -0800 Subject: [PATCH 594/898] Additional metadata for small cards --- .../document-card-small.component.html | 34 +++++++++++++++---- .../document-card-small.component.scss | 27 ++++++++++++++- .../document-card-small.component.ts | 3 ++ .../document-list.component.html | 2 +- src-ui/src/theme_dark.scss | 2 +- 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index eca5abb97..96c41091d 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -25,13 +25,35 @@ <ng-container *ngIf="document.correspondent"> <a [routerLink]="" title="Filter by correspondent" i18n-title (click)="clickCorrespondent.emit(document.correspondent);$event.stopPropagation()" class="font-weight-bold">{{(document.correspondent$ | async)?.name}}</a>: </ng-container> - {{document.title | documentTitle}} <span *ngIf="document.archive_serial_number">(#{{document.archive_serial_number}})</span> + {{document.title | documentTitle}} </p> </div> - <div class="card-footer"> - - <div class="d-flex justify-content-between align-items-center mx-n2"> - <div class="btn-group"> + <div class="card-footer pt-0 pb-2 px-2"> + <div class="list-group list-group-flush border-0 pt-0 pb-2 card-metadata"> + <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action text-left pl-0 p-1 border-0" + placement="left" ngbTooltip="Filter by document type" + (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> + <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> + <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> + </svg> + <small>{{(document.document_type$ | async)?.name}}</small> + </button> + <button *ngIf="document.archive_serial_number" type="button" disabled="disabled" class="list-group-item list-group-item-action text-left pl-0 p-1 border-0"> + <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> + <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> + </svg> + <small>#{{document.archive_serial_number}}</small> + </button> + <button type="button" class="list-group-item list-group-item-action text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> + <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> + <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> + </svg> + <small>{{document.created | customDate:'shortDate'}}</small> + </button> + </div> + <div class="d-flex justify-content-between align-items-center"> + <div class="btn-group w-100"> <a routerLink="/documents/{{document.id}}" class="btn btn-sm btn-outline-secondary" title="Edit" i18n-title> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-pencil" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5L13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175l-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/> @@ -55,9 +77,7 @@ </svg> </a> </div> - <small class="text-muted pl-1">{{document.created | customDate:'shortDate'}}</small> </div> - </div> </div> </div> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index cbe8fa6f6..410481569 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -1,9 +1,13 @@ @import "/src/theme"; +.card-text { + font-size: 90%; +} + .doc-img { object-fit: cover; object-position: top left; - height: 200px; + height: 190px; mix-blend-mode: multiply; } @@ -34,3 +38,24 @@ .doc-img-background-selected { background-color: $primaryFaded; } + +.card-metadata { + line-height: 1; + + .btn { + line-height: 1; + } + + .metadata-icon { + width: 0.8rem; + height: 0.8rem; + } +} + +.card-footer .btn { + padding-top: .10rem; +} + +::ng-deep .tooltip-inner { + text-align: left !important; +} diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts index e025e4e25..10c2c5d23 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts @@ -29,6 +29,9 @@ export class DocumentCardSmallComponent implements OnInit { @Output() clickCorrespondent = new EventEmitter<number>() + @Output() + clickDocumentType = new EventEmitter<number>() + moreTags: number = null @ViewChild('popover') popover: NgbPopover diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index e289c607e..c8bf8a9cd 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -170,5 +170,5 @@ </table> <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> - <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small> + <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)"></app-document-card-small> </div> diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index f3336cc1a..8b6e6aab5 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -226,7 +226,7 @@ $border-color-dark-mode: #47494f; } .btn-outline-secondary { - border-color: $text-color-dark-mode; + border-color: darken($text-color-dark-mode, 30%); color: $text-color-dark-mode; &:not(:disabled):not(.disabled):hover { From 6a20d36ad087fcca8b29417ed305895eba00de8a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 11 Mar 2021 16:03:00 -0800 Subject: [PATCH 595/898] Fix illegible logged in as in dark mode --- src-ui/src/app/components/app-frame/app-frame.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index e17e21e03..96ca1382c 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -31,7 +31,7 @@ </button> <div ngbDropdownMenu class="dropdown-menu-right shadow mr-2" aria-labelledby="userDropdown"> <div *ngIf="displayName" class="d-sm-none"> - <p class="small mb-0 px-3" i18n>Logged in as {{displayName}}</p> + <p class="small mb-0 px-3 text-muted" i18n>Logged in as {{displayName}}</p> <div class="dropdown-divider"></div> </div> <a ngbDropdownItem class="nav-link" routerLink="settings" (click)="closeMenu()"> From 8503f09edae5ea56369739c01859e15922d0fc91 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 11 Mar 2021 16:03:17 -0800 Subject: [PATCH 596/898] Fix log lines hidden on narrow screens --- .../src/app/components/manage/logs/logs.component.html | 2 +- .../src/app/components/manage/logs/logs.component.scss | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index 56ffd25bb..5b2d198c9 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -14,5 +14,5 @@ <div class="bg-dark p-3 mb-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" - *ngFor="let log of logs" style="white-space: pre;">{{log}}</p> + *ngFor="let log of logs">{{log}}</p> </div> diff --git a/src-ui/src/app/components/manage/logs/logs.component.scss b/src-ui/src/app/components/manage/logs/logs.component.scss index a99506c12..aae238167 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.scss +++ b/src-ui/src/app/components/manage/logs/logs.component.scss @@ -16,9 +16,11 @@ } .log-container { - - overflow: scroll; - + overflow-y: scroll; height: calc(100vh - 190px); top: 70px; -} \ No newline at end of file + + p { + white-space: pre-wrap; + } +} From 7c529bacc14107241fc55492172183b8efe43349 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 06:02:39 -0800 Subject: [PATCH 597/898] Use medium date --- .../document-card-small/document-card-small.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 96c41091d..a8dea01fe 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -49,7 +49,7 @@ <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> </svg> - <small>{{document.created | customDate:'shortDate'}}</small> + <small>{{document.created | customDate:'mediumDate'}}</small> </button> </div> <div class="d-flex justify-content-between align-items-center"> From a73ab74e2604e99be55ca067d92acc17958176e5 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 06:11:53 -0800 Subject: [PATCH 598/898] Slightly shorter thumbnail --- .../document-card-small/document-card-small.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 410481569..3f9183074 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -7,7 +7,7 @@ .doc-img { object-fit: cover; object-position: top left; - height: 190px; + height: 180px; mix-blend-mode: multiply; } From 54480b0cc08d7e4f23f9e83d44c199216ea0099b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 06:30:03 -0800 Subject: [PATCH 599/898] Light mode fixes --- .../document-card-small.component.html | 8 ++++---- .../document-card-small.component.scss | 9 +++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index a8dea01fe..7de26bf0f 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -29,8 +29,8 @@ </p> </div> <div class="card-footer pt-0 pb-2 px-2"> - <div class="list-group list-group-flush border-0 pt-0 pb-2 card-metadata"> - <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action text-left pl-0 p-1 border-0" + <div class="list-group list-group-flush border-0 pt-1 pb-2 card-metadata"> + <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> @@ -38,13 +38,13 @@ </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <button *ngIf="document.archive_serial_number" type="button" disabled="disabled" class="list-group-item list-group-item-action text-left pl-0 p-1 border-0"> + <button *ngIf="document.archive_serial_number" type="button" disabled="disabled" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0"> <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> </svg> <small>#{{document.archive_serial_number}}</small> </button> - <button type="button" class="list-group-item list-group-item-action text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <button type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 3f9183074..46f0f9be8 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -7,7 +7,7 @@ .doc-img { object-fit: cover; object-position: top left; - height: 180px; + height: 175px; mix-blend-mode: multiply; } @@ -42,8 +42,13 @@ .card-metadata { line-height: 1; - .btn { + button { line-height: 1; + + &:hover, + &:focus { + background-color: transparent !important; + } } .metadata-icon { From f394636dc0a9cbd17da86f836e74c1ffbb161103 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 12 Mar 2021 15:53:37 +0100 Subject: [PATCH 600/898] New Crowdin updates (#738) --- src-ui/src/locale/messages.en_GB.xlf | 2 +- src/locale/de_DE/LC_MESSAGES/django.po | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 29413f2b3..659479b63 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">57</context> </context-group> - <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index d7936bed4..4757275b3 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"PO-Revision-Date: 2021-03-10 23:00\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -390,7 +390,7 @@ msgstr "Bitte melden Sie sich an." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "Ihr Benutzername und Passwort stimmen nicht überein. Bitte versuchen Sie es erneut." +msgstr "Ihr Benutzername und Kennwort stimmen nicht überein. Bitte versuchen Sie es erneut." #: documents/templates/registration/login.html:48 msgid "Username" @@ -398,7 +398,7 @@ msgstr "Benutzername" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "Passwort" +msgstr "Kennwort" #: documents/templates/registration/login.html:54 msgid "Sign in" @@ -514,7 +514,7 @@ msgstr "Benutzername" #: paperless_mail/models.py:50 msgid "password" -msgstr "Passwort" +msgstr "Kennwort" #: paperless_mail/models.py:60 msgid "mail rule" From 4f2e22125a77b89809528bcc4ef18ffef04405eb Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 06:54:22 -0800 Subject: [PATCH 601/898] Support large cards --- .../document-card-large.component.html | 33 +++++++++++++++---- .../document-card-large.component.scss | 18 ++++++++++ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index c7f688bc4..6580fc27d 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -23,7 +23,6 @@ {{document.title | documentTitle}} <app-tag [tag]="t" linkTitle="Filter by tag" i18n-linkTitle *ngFor="let t of document.tags$ | async" class="ml-1" (click)="clickTag.emit(t.id);$event.stopPropagation()" [clickable]="clickTag.observers.length"></app-tag> </h5> - <h5 class="card-title" *ngIf="document.archive_serial_number">#{{document.archive_serial_number}}</h5> </div> <p class="card-text"> <app-result-highlight *ngIf="getDetailsAsHighlight()" class="result-content" [highlights]="getDetailsAsHighlight()"></app-result-highlight> @@ -62,13 +61,33 @@ </a> </div> - <div *ngIf="searchScore" class="d-flex align-items-center ml-md-auto mt-2 mt-md-0"> - <small class="text-muted" i18n>Score:</small> - - <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2" [max]="1"></ngb-progressbar> + <div class="btn-group border-0 card-metadata ml-md-auto text-light"> + <button *ngIf="searchScore" type="button" class="btn btn-sm bg-light text-light pl-0 p-1 pt-2 mr-2 border-0 d-flex" disabled="disabled"> + <small class="text-muted" i18n>Score:</small> + <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> + </button> + <button *ngIf="document.document_type" type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" + placement="top" ngbTooltip="Filter by document type" + (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> + <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> + <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> + </svg> + <small>{{(document.document_type$ | async)?.name}}</small> + </button> + <button *ngIf="document.archive_serial_number" type="button" disabled="disabled" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0"> + <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> + <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> + </svg> + <small>#{{document.archive_serial_number}}</small> + </button> + <button type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> + <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> + <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> + </svg> + <small>{{document.created | customDate:'mediumDate'}}</small> + </button> </div> - - <small class="text-muted" [class.ml-auto]="!searchScore" i18n>Created: {{document.created | customDate}}</small> </div> </div> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index c49de93b5..9caaabf5c 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -37,3 +37,21 @@ .doc-img-background-selected { background-color: $primaryFaded; } + +.card-metadata { + line-height: 1; + + button { + line-height: 1; + + &:hover, + &:focus { + background-color: transparent !important; + } + } + + .metadata-icon { + width: 0.8rem; + height: 0.8rem; + } +} From 6395d17f76c91e4c8fd97dfa0273d9946db77a0f Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 07:15:00 -0800 Subject: [PATCH 602/898] Refactor --- .../document-card-large/document-card-large.component.html | 2 +- .../document-card-large/document-card-large.component.scss | 2 +- .../document-card-small/document-card-small.component.html | 2 +- .../document-card-small/document-card-small.component.scss | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 6580fc27d..1518acba7 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -61,7 +61,7 @@ </a> </div> - <div class="btn-group border-0 card-metadata ml-md-auto text-light"> + <div class="btn-group border-0 card-info ml-md-auto text-light"> <button *ngIf="searchScore" type="button" class="btn btn-sm bg-light text-light pl-0 p-1 pt-2 mr-2 border-0 d-flex" disabled="disabled"> <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 9caaabf5c..340b302f9 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -38,7 +38,7 @@ background-color: $primaryFaded; } -.card-metadata { +.card-info { line-height: 1; button { diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 7de26bf0f..56192d1f0 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -29,7 +29,7 @@ </p> </div> <div class="card-footer pt-0 pb-2 px-2"> - <div class="list-group list-group-flush border-0 pt-1 pb-2 card-metadata"> + <div class="list-group list-group-flush border-0 pt-1 pb-2 card-info"> <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 46f0f9be8..c712de017 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -39,7 +39,7 @@ background-color: $primaryFaded; } -.card-metadata { +.card-info { line-height: 1; button { From 06375265e8cffe6bddfaac89decec1ed81683b55 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 07:19:14 -0800 Subject: [PATCH 603/898] Tooltip consistency --- .../document-card-large/document-card-large.component.html | 5 ++--- .../document-card-large/document-card-large.component.scss | 4 ++++ .../document-card-small/document-card-small.component.html | 5 ++--- .../document-card-small/document-card-small.component.scss | 4 ++++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 1518acba7..9e02d32ef 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -66,8 +66,7 @@ <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> </button> - <button *ngIf="document.document_type" type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" - placement="top" ngbTooltip="Filter by document type" + <button *ngIf="document.document_type" type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> @@ -80,7 +79,7 @@ </svg> <small>#{{document.archive_serial_number}}</small> </button> - <button type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <button type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0 no-click" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 340b302f9..911e3c254 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -50,6 +50,10 @@ } } + .no-click { + cursor: default; + } + .metadata-icon { width: 0.8rem; height: 0.8rem; diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 56192d1f0..a211bc043 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -30,8 +30,7 @@ </div> <div class="card-footer pt-0 pb-2 px-2"> <div class="list-group list-group-flush border-0 pt-1 pb-2 card-info"> - <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" - placement="left" ngbTooltip="Filter by document type" + <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> @@ -44,7 +43,7 @@ </svg> <small>#{{document.archive_serial_number}}</small> </button> - <button type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <button type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0 no-click" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index c712de017..1f1e2fc46 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -51,6 +51,10 @@ } } + .no-click { + cursor: default; + } + .metadata-icon { width: 0.8rem; height: 0.8rem; From c4fd83dde1195020ff08fdb0e4366f785503c70a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 07:21:00 -0800 Subject: [PATCH 604/898] Fix incomplete doc type clicking for large cards --- .../document-card-large/document-card-large.component.ts | 3 +++ .../app/components/document-list/document-list.component.html | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index 10457054f..da147c07b 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -39,6 +39,9 @@ export class DocumentCardLargeComponent implements OnInit { @Output() clickCorrespondent = new EventEmitter<number>() + @Output() + clickDocumentType = new EventEmitter<number>() + @Input() searchScore: number diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index c8bf8a9cd..53f3e662c 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -90,7 +90,7 @@ </div> <div *ngIf="displayMode == 'largeCards'"> - <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" [details]="d.content" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"> + <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" [details]="d.content" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)"> </app-document-card-large> </div> From 76560f4409f75ae6042dfbe3b07d72cc391a771e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 07:58:37 -0800 Subject: [PATCH 605/898] More semantically correct elements --- .../document-card-large.component.html | 16 ++++++++-------- .../document-card-large.component.scss | 4 ---- .../document-card-small.component.html | 8 ++++---- .../document-card-small.component.scss | 4 ---- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 9e02d32ef..f4ba713ea 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -61,31 +61,31 @@ </a> </div> - <div class="btn-group border-0 card-info ml-md-auto text-light"> - <button *ngIf="searchScore" type="button" class="btn btn-sm bg-light text-light pl-0 p-1 pt-2 mr-2 border-0 d-flex" disabled="disabled"> + <div class="list-group list-group-horizontal border-0 card-info ml-md-auto text-light"> + <li *ngIf="searchScore" class="list-group-item bg-light text-light pl-0 p-1 pt-2 mr-2 border-0 d-flex"> <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> - </button> - <button *ngIf="document.document_type" type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" title="Filter by document type" + </li> + <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <button *ngIf="document.archive_serial_number" type="button" disabled="disabled" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0"> + <li *ngIf="document.archive_serial_number" class="list-group-item ml-2 bg-light text-light pl-0 p-1 border-0"> <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> </svg> <small>#{{document.archive_serial_number}}</small> - </button> - <button type="button" class="btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0 no-click" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + </li> + <li class="list-group-item ml-2 bg-light text-light pl-0 p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> </svg> <small>{{document.created | customDate:'mediumDate'}}</small> - </button> + </li> </div> </div> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 911e3c254..340b302f9 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -50,10 +50,6 @@ } } - .no-click { - cursor: default; - } - .metadata-icon { width: 0.8rem; height: 0.8rem; diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index a211bc043..b388a4bff 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -37,19 +37,19 @@ </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <button *ngIf="document.archive_serial_number" type="button" disabled="disabled" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0"> + <li *ngIf="document.archive_serial_number" disabled="disabled" class="list-group-item bg-light text-left pl-0 p-1 border-0"> <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> </svg> <small>#{{document.archive_serial_number}}</small> - </button> - <button type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0 no-click" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + </li> + <li class="list-group-item bg-light text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> </svg> <small>{{document.created | customDate:'mediumDate'}}</small> - </button> + </li> </div> <div class="d-flex justify-content-between align-items-center"> <div class="btn-group w-100"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 1f1e2fc46..c712de017 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -51,10 +51,6 @@ } } - .no-click { - cursor: default; - } - .metadata-icon { width: 0.8rem; height: 0.8rem; From ae57370c12363304540b685a2c35af4d1f3d5935 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 08:12:36 -0800 Subject: [PATCH 606/898] Visual tweaks for responsive --- .../document-card-large.component.html | 10 +++++----- .../document-card-large.component.scss | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index f4ba713ea..419f57a44 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -61,25 +61,25 @@ </a> </div> - <div class="list-group list-group-horizontal border-0 card-info ml-md-auto text-light"> - <li *ngIf="searchScore" class="list-group-item bg-light text-light pl-0 p-1 pt-2 mr-2 border-0 d-flex"> + <div class="list-group list-group-horizontal border-0 card-info ml-md-auto mt-2 mt-md-0 text-light"> + <li *ngIf="searchScore" class="list-group-item bg-light text-light p-1 mr-5 border-0 d-flex search-score"> <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> </li> - <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm ml-2 bg-light text-light pl-0 p-1 border-0" title="Filter by document type" + <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-light p-1 border-0 mr-2" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <li *ngIf="document.archive_serial_number" class="list-group-item ml-2 bg-light text-light pl-0 p-1 border-0"> + <li *ngIf="document.archive_serial_number" class="list-group-item mr-2 bg-light text-light p-1 border-0"> <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> </svg> <small>#{{document.archive_serial_number}}</small> </li> - <li class="list-group-item ml-2 bg-light text-light pl-0 p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <li class="list-group-item bg-light text-light p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 340b302f9..c3a358a2b 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -54,4 +54,8 @@ width: 0.8rem; height: 0.8rem; } + + .search-score { + padding-top: 0.35rem !important; + } } From a898934c366af7437a28af08f595186e885ac0ef Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 09:17:49 -0800 Subject: [PATCH 607/898] fix text not visible in light mode on large card --- .../document-card-large.component.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 419f57a44..2d74129c5 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -61,25 +61,25 @@ </a> </div> - <div class="list-group list-group-horizontal border-0 card-info ml-md-auto mt-2 mt-md-0 text-light"> - <li *ngIf="searchScore" class="list-group-item bg-light text-light p-1 mr-5 border-0 d-flex search-score"> + <div class="list-group list-group-horizontal border-0 card-info ml-md-auto mt-2 mt-md-0"> + <li *ngIf="searchScore" class="list-group-item bg-light text-dark p-1 mr-5 border-0 d-flex search-score"> <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> </li> - <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-light p-1 border-0 mr-2" title="Filter by document type" + <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 mr-2" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <li *ngIf="document.archive_serial_number" class="list-group-item mr-2 bg-light text-light p-1 border-0"> + <li *ngIf="document.archive_serial_number" class="list-group-item mr-2 bg-light text-dark p-1 border-0"> <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> </svg> <small>#{{document.archive_serial_number}}</small> </li> - <li class="list-group-item bg-light text-light p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <li class="list-group-item bg-light text-dark p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> From ea3a83a8d1fe792fd6004a33b6d7f89daf5db18e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 19:35:25 -0800 Subject: [PATCH 608/898] div instead of li --- .../document-card-large.component.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 2d74129c5..7e4408312 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -62,10 +62,10 @@ </div> <div class="list-group list-group-horizontal border-0 card-info ml-md-auto mt-2 mt-md-0"> - <li *ngIf="searchScore" class="list-group-item bg-light text-dark p-1 mr-5 border-0 d-flex search-score"> + <div *ngIf="searchScore" class="list-group-item bg-light text-dark p-1 mr-5 border-0 d-flex search-score"> <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> - </li> + </div> <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 mr-2" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> @@ -73,19 +73,19 @@ </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <li *ngIf="document.archive_serial_number" class="list-group-item mr-2 bg-light text-dark p-1 border-0"> + <div *ngIf="document.archive_serial_number" class="list-group-item mr-2 bg-light text-dark p-1 border-0"> <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> </svg> <small>#{{document.archive_serial_number}}</small> - </li> - <li class="list-group-item bg-light text-dark p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + </div> + <div class="list-group-item bg-light text-dark p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> </svg> <small>{{document.created | customDate:'mediumDate'}}</small> - </li> + </div> </div> </div> From ea567ca99ad2cbcbc1d55e108cf0e93075715dd4 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 19:52:31 -0800 Subject: [PATCH 609/898] Fix pager color in dark mode --- src-ui/src/theme_dark.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 8b6e6aab5..bf8b5064a 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -76,6 +76,10 @@ $border-color-dark-mode: #47494f; } } + .page-item.active .page-link { + background-color: darken($primary-dark-mode, 10%); + } + .nav-tabs { border-color: $border-color-dark-mode; From 0fb39fd433c96c11396133d1a36e346b4e73a63d Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 19:59:45 -0800 Subject: [PATCH 610/898] hover color for card footer buttons --- .../document-card-small/document-card-small.component.scss | 1 + src-ui/src/theme_dark.scss | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index c712de017..6bd7e64c7 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -48,6 +48,7 @@ &:hover, &:focus { background-color: transparent !important; + color: $primary; } } diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index bf8b5064a..996f9da3d 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -283,6 +283,10 @@ $border-color-dark-mode: #47494f; background-color: $bg-dark-mode !important; } + .card-footer button:hover { + color: $primary-dark-mode !important; + } + .form-control:not(.is-invalid):not(.btn), input:not(.is-invalid), textarea:not(.is-invalid) { From 2d3b6b5a72a9d203e57387062ddb9933a5ae26f2 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 20:00:23 -0800 Subject: [PATCH 611/898] Display date & ASN on one line if fits --- .../document-card-small.component.html | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index b388a4bff..667fd8618 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -30,26 +30,28 @@ </div> <div class="card-footer pt-0 pb-2 px-2"> <div class="list-group list-group-flush border-0 pt-1 pb-2 card-info"> - <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light text-left pl-0 p-1 border-0" title="Filter by document type" + <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light pl-0 p-1 border-0" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <li *ngIf="document.archive_serial_number" disabled="disabled" class="list-group-item bg-light text-left pl-0 p-1 border-0"> - <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> - <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> - </svg> - <small>#{{document.archive_serial_number}}</small> - </li> - <li class="list-group-item bg-light text-left pl-0 p-1 border-0" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> - <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> - <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> - <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> - </svg> - <small>{{document.created | customDate:'mediumDate'}}</small> - </li> + <div class="list-group-item bg-light p-0 border-0 d-flex flex-wrap-reverse justify-content-between"> + <div class="pl-0 p-1" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> + <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> + <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> + </svg> + <small>{{document.created | customDate:'mediumDate'}}</small> + </div> + <div *ngIf="document.archive_serial_number" class="pl-0 p-1"> + <svg class="metadata-icon mr-2 text-muted bi bi-upc-scan" viewBox="0 0 16 16" fill="currentColor"> + <path d="M1.5 1a.5.5 0 0 0-.5.5v3a.5.5 0 0 1-1 0v-3A1.5 1.5 0 0 1 1.5 0h3a.5.5 0 0 1 0 1h-3zM11 .5a.5.5 0 0 1 .5-.5h3A1.5 1.5 0 0 1 16 1.5v3a.5.5 0 0 1-1 0v-3a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 1-.5-.5zM.5 11a.5.5 0 0 1 .5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 1 0 1h-3A1.5 1.5 0 0 1 0 14.5v-3a.5.5 0 0 1 .5-.5zm15 0a.5.5 0 0 1 .5.5v3a1.5 1.5 0 0 1-1.5 1.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 1 .5-.5zM3 4.5a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7zm2 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-7zm3 0a.5.5 0 0 1 1 0v7a.5.5 0 0 1-1 0v-7z"/> + </svg> + <small>#{{document.archive_serial_number}}</small> + </div> + </div> </div> <div class="d-flex justify-content-between align-items-center"> <div class="btn-group w-100"> From af39fab824c02031998fcbb9d36690d3d56f6002 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 20:12:00 -0800 Subject: [PATCH 612/898] dark mode background color --- .../document-card-small/document-card-small.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 667fd8618..45673660c 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -30,15 +30,15 @@ </div> <div class="card-footer pt-0 pb-2 px-2"> <div class="list-group list-group-flush border-0 pt-1 pb-2 card-info"> - <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-light pl-0 p-1 border-0" title="Filter by document type" + <button *ngIf="document.document_type" type="button" class="list-group-item list-group-item-action bg-transparent pl-0 p-1 border-0" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/> </svg> <small>{{(document.document_type$ | async)?.name}}</small> </button> - <div class="list-group-item bg-light p-0 border-0 d-flex flex-wrap-reverse justify-content-between"> - <div class="pl-0 p-1" placement="left" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <div class="list-group-item bg-transparent p-0 border-0 d-flex flex-wrap-reverse justify-content-between"> + <div class="pl-0 p-1" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> From 4a910d5d08756599846727f6f40f82f67825fec7 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 20:12:05 -0800 Subject: [PATCH 613/898] tooltip placement --- .../document-card-large/document-card-large.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 7e4408312..119960386 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -79,7 +79,7 @@ </svg> <small>#{{document.archive_serial_number}}</small> </div> - <div class="list-group-item bg-light text-dark p-1 border-0" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <div class="list-group-item bg-light text-dark p-1 border-0" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> From 51e3005bb960659a7fe961f3dd10324e97ccef91 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Mar 2021 20:15:18 -0800 Subject: [PATCH 614/898] Small card tooltip tweaks, medium date --- .../document-card-small/document-card-small.component.html | 2 +- .../document-card-small/document-card-small.component.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 45673660c..0c66419e8 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -38,7 +38,7 @@ <small>{{(document.document_type$ | async)?.name}}</small> </button> <div class="list-group-item bg-transparent p-0 border-0 d-flex flex-wrap-reverse justify-content-between"> - <div class="pl-0 p-1" placement="top" ngbTooltip="Added: {{document.added | customDate:'shortDate'}} Created: {{document.created | customDate:'shortDate'}}"> + <div class="pl-0 p-1" placement="top" ngbTooltip="Added: {{document.added | customDate:'mediumDate'}} Created: {{document.created | customDate:'mediumDate'}}"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 6bd7e64c7..2daa97337 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -64,4 +64,5 @@ ::ng-deep .tooltip-inner { text-align: left !important; + font-size: 90%; } From 91627bd1b8dfe6e88cb330015dbf5609bbf6372a Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 13 Mar 2021 23:19:03 +0100 Subject: [PATCH 615/898] New Crowdin updates (#752) --- src-ui/src/locale/messages.es_ES.xlf | 54 ++++++++++++------------- src/locale/es_ES/LC_MESSAGES/django.po | 56 +++++++++++++------------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 9f32f214c..4e780e7df 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -8,7 +8,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">51</context> </context-group> - <target state="translated">Documento agregado</target> + <target state="translated">Documento añadido</target> </trans-unit> <trans-unit id="9204248378636247318" datatype="html"> <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> @@ -32,7 +32,7 @@ <context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="linenumber">59</context> </context-group> - <target state="translated">No se pudo agregar<x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + <target state="translated">No se pudo añadir<x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> </trans-unit> <trans-unit id="1710712016675379662" datatype="html"> <source>New document detected</source> @@ -176,7 +176,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">111</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Tipo de documento</target> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> @@ -912,7 +912,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="needs-translation">Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">¿Estás seguro de querer borrar el tipo de documento "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> <source>Correspondents</source> @@ -920,7 +920,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Correspondents</target> + <target state="translated">Tipos de documento</target> </trans-unit> <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> <source>Last correspondence</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="needs-translation">Last correspondence</target> + <target state="translated">Último tipo de documento</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -960,7 +960,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">21</context> </context-group> - <target state="needs-translation">Create new correspondent</target> + <target state="translated">Crear nuevo tipo de documento</target> </trans-unit> <trans-unit id="2059822531169388684" datatype="html"> <source>Edit correspondent</source> @@ -968,7 +968,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> <context context-type="linenumber">25</context> </context-group> - <target state="needs-translation">Edit correspondent</target> + <target state="translated">Editar tipo de documento</target> </trans-unit> <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> <source>Matching algorithm</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Inbox tags are automatically assigned to all consumed documents.</target> + <target state="translated">Las etiquetas de la bandeja son asignadas automáticamente a todos los documentos consumidos.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1217,7 +1217,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">33</context> </context-group> - <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + <target state="translated">Tipo: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> @@ -1225,7 +1225,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="needs-translation">Without correspondent</target> + <target state="translated">Sin tipo de documento</target> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">57</context> </context-group> - <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1289,7 +1289,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">28</context> </context-group> - <target state="needs-translation">Filter correspondents</target> + <target state="translated">Filtrar tipos de documento</target> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">20</context> </context-group> - <target state="needs-translation">Filter by correspondent</target> + <target state="translated">Filtrar por tipo de documento</target> </trans-unit> <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> <source>Filter by tag</source> @@ -1525,7 +1525,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">159</context> </context-group> - <target state="needs-translation">Confirm correspondent assignment</target> + <target state="translated">Confirmar asignación correspondiente</target> </trans-unit> <trans-unit id="6900893559485781849" datatype="html"> <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1533,7 +1533,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">161</context> </context-group> - <target state="needs-translation">This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operacion asignará el tipo de documento "<x id="PH" equiv-text="correspondent.name"/>" a <x id="PH_1" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="1257522660364398440" datatype="html"> <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1541,7 +1541,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">163</context> </context-group> - <target state="needs-translation">This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</target> + <target state="translated">Esta operación eliminará el tipo de documento de <x id="PH" equiv-text="this.list.selected.size"/> documento(s) seleccionado(s).</target> </trans-unit> <trans-unit id="5393409374423140648" datatype="html"> <source>Confirm document type assignment</source> @@ -1677,7 +1677,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="needs-translation">Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + <target state="translated">Documentos en la bandeja de entrada: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> </trans-unit> <trans-unit id="6443586946875325554" datatype="html"> <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> @@ -1749,7 +1749,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="needs-translation">Drop documents here or</target> + <target state="translated">Arrastra aquí los doumentos o</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1807,7 +1807,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="needs-translation">You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</target> + <target state="translated">Puede empezar a subir documentos soltándolos en la caja de subida de archivos a la derecha o colocándolos en la carpeta de consumo configurada y comenzarán a aparecer en la lista de documentos. Después de añadir algunos metadatos a sus documentos, utilice los mecanismos de filtrado de paperless para crear vistas personalizadas (como 'Añadidas recientes', 'Pendiente de etiquetar') y aparecerán en el panel de control en lugar de este mensaje.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Ruso</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -2000,7 +2000,7 @@ <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Pre-consume script does not exist.</target> + <target state="translated">No existe script pre-consumo.</target> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -2009,7 +2009,7 @@ <context context-type="linenumber">18</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing pre-consume script.</target> + <target state="translated">Error al ejecutar el script pre-consumo.</target> </trans-unit> <trans-unit id="8995193730018060346" datatype="html"> <source>Post-consume script does not exist.</source> @@ -2018,7 +2018,7 @@ <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Post-consume script does not exist.</target> + <target state="translated">No existe script post-consumo.</target> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> @@ -2027,7 +2027,7 @@ <context context-type="linenumber">20</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="needs-translation">Error while executing post-consume script.</target> + <target state="translated">Error al ejecutar el script post-consumo.</target> </trans-unit> <trans-unit id="6252258095055634191" datatype="html"> <source>Received new file.</source> @@ -2107,7 +2107,7 @@ <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> <context context-type="linenumber">18</context> </context-group> - <target state="needs-translation">Correspondent</target> + <target state="translated">Correspondencia</target> </trans-unit> <trans-unit id="5066119607229701477" datatype="html"> <source>Document type</source> @@ -2283,7 +2283,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">16</context> </context-group> - <target state="needs-translation">Fuzzy: Document contains a word similar to this word</target> + <target state="translated">Difuso: El documento contiene una palabra similar a esta</target> </trans-unit> <trans-unit id="2167862279705099846" datatype="html"> <source>Auto: Learn matching automatically</source> diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 74418eca3..06eff8829 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-09 23:16\n" +"PO-Revision-Date: 2021-03-13 19:05\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -64,11 +64,11 @@ msgstr "es insensible" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "" +msgstr "Tipo de documento" #: documents/models.py:75 msgid "correspondents" -msgstr "" +msgstr "Tipos de documento" #: documents/models.py:81 msgid "color" @@ -76,11 +76,11 @@ msgstr "color" #: documents/models.py:87 msgid "is inbox tag" -msgstr "" +msgstr "es etiqueta de bandeja" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "Marca esta etiqueta como una etiqueta de bandeja: todos los documentos recién consumidos serán etiquetados con las etiquetas de bandeja." #: documents/models.py:94 msgid "tag" @@ -116,7 +116,7 @@ msgstr "contenido" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "Los datos de texto en bruto del documento. Este campo se utiliza principalmente para las búsquedas." #: documents/models.py:144 msgid "mime type" @@ -124,19 +124,19 @@ msgstr "tipo MIME" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "Cadena de verificación" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "" +msgstr "La cadena de verificación del documento original." #: documents/models.py:163 msgid "archive checksum" -msgstr "" +msgstr "cadena de comprobación del archivo" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "" +msgstr "La cadena de verificación del documento archivado." #: documents/models.py:172 documents/models.py:328 msgid "created" @@ -156,11 +156,11 @@ msgstr "añadido" #: documents/models.py:192 msgid "filename" -msgstr "" +msgstr "nombre del archivo" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "" +msgstr "Nombre de archivo actual en disco" #: documents/models.py:202 msgid "archive filename" @@ -168,11 +168,11 @@ msgstr "nombre de archivo" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "" +msgstr "Nombre de archivo actual en disco" #: documents/models.py:212 msgid "archive serial number" -msgstr "" +msgstr "número de serie del archivo" #: documents/models.py:217 msgid "The position of this document in your physical document archive." @@ -240,7 +240,7 @@ msgstr "usuario" #: documents/models.py:354 msgid "show on dashboard" -msgstr "" +msgstr "mostrar en el panel de control" #: documents/models.py:357 msgid "show in sidebar" @@ -264,11 +264,11 @@ msgstr "el contenido contiene" #: documents/models.py:372 msgid "ASN is" -msgstr "" +msgstr "ASN es" #: documents/models.py:373 msgid "correspondent is" -msgstr "" +msgstr "tipo de documento es" #: documents/models.py:374 msgid "document type is" @@ -276,7 +276,7 @@ msgstr "el tipo de documento es" #: documents/models.py:375 msgid "is in inbox" -msgstr "" +msgstr "está en la bandeja de entrada" #: documents/models.py:376 msgid "has tag" @@ -328,11 +328,11 @@ msgstr "no tiene la etiqueta" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "no tiene ASN" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "el título o cuerpo contiene" #: documents/models.py:400 msgid "rule type" @@ -466,11 +466,11 @@ msgstr "Metadatos" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "Asignar metadatos a documentos consumidos por esta regla automáticamente. Si no asigna etiquetas, o ipos aquí, paperless procesará igualmente todas las reglas que haya definido." #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "" +msgstr "Correo Paperless" #: paperless_mail/models.py:11 msgid "mail account" @@ -558,7 +558,7 @@ msgstr "Usar nombre del fichero adjunto como título" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" -msgstr "" +msgstr "No asignar un tipo de documento" #: paperless_mail/models.py:101 msgid "Use mail address" @@ -570,7 +570,7 @@ msgstr "Usar nombre (o dirección de correo si no está disponible)" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" -msgstr "" +msgstr "Usar el tipo seleccionado debajo" #: paperless_mail/models.py:113 msgid "order" @@ -586,7 +586,7 @@ msgstr "carpeta" #: paperless_mail/models.py:128 msgid "filter from" -msgstr "" +msgstr "filtrar desde" #: paperless_mail/models.py:131 msgid "filter subject" @@ -602,7 +602,7 @@ msgstr "filtrar nombre del fichero adjunto" #: paperless_mail/models.py:140 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "Sólo consumirá documentos que coincidan completamente con este nombre de archivo si se especifica. Se permiten comodines como *.pdf o *factura*. No diferencia mayúsculas." #: paperless_mail/models.py:146 msgid "maximum age" @@ -646,9 +646,9 @@ msgstr "asignar este tipo de documento" #: paperless_mail/models.py:195 msgid "assign correspondent from" -msgstr "" +msgstr "Asignar tipo de documento desde" #: paperless_mail/models.py:205 msgid "assign this correspondent" -msgstr "" +msgstr "asignar este tipo de documento" From 75500bf370506118a7228b1b8d72e0e7b2a70c15 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 13:28:12 +0100 Subject: [PATCH 616/898] New Crowdin updates (#757) * New translations django.po (Spanish) [ci skip] * New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 2 +- src/locale/es_ES/LC_MESSAGES/django.po | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 4e780e7df..508e78ebb 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1749,7 +1749,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Arrastra aquí los doumentos o</target> + <target state="translated">Arrastra aquí los documentos o</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 06eff8829..456a76465 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-13 19:05\n" +"PO-Revision-Date: 2021-03-14 01:49\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -366,7 +366,7 @@ msgstr "Tipo de fichero %(type)s no suportado" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "Paperless-ng está cargándose…" +msgstr "Paperless-ng está cargándose..." #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" From 959f39d843f0a49ac2a61ec261f1047e6a22b085 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 13:34:14 +0100 Subject: [PATCH 617/898] Add spanish locale --- src-ui/angular.json | 3 ++- src-ui/messages.xlf | 22 ++++++++++----------- src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 2 ++ src/locale/en_US/LC_MESSAGES/django.po | 6 +++++- src/paperless/settings.py | 3 ++- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 8b5804521..1e4403f79 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -23,7 +23,8 @@ "pt-BR": "src/locale/messages.pt_BR.xlf", "it-IT": "src/locale/messages.it_IT.xlf", "ro-RO": "src/locale/messages.ro_RO.xlf", - "ru-RU": "src/locale/messages.ru_RU.xlf" + "ru-RU": "src/locale/messages.ru_RU.xlf", + "es-ES": "src/locale/messages.es_ES.xlf" } }, "architect": { diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 4b0456899..b0c64256a 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1212,14 +1212,14 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> </trans-unit> <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> @@ -1240,14 +1240,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> - </context-group> - </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">66</context> </context-group> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> @@ -1724,11 +1717,18 @@ <context context-type="linenumber">98</context> </context-group> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index ebf24a327..c364424ad 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -74,6 +74,7 @@ import localeIt from '@angular/common/locales/it'; import localeEnGb from '@angular/common/locales/en-GB'; import localeRo from '@angular/common/locales/ro'; import localeRu from '@angular/common/locales/ru'; +import localeEs from '@angular/common/locales/es'; registerLocaleData(localeFr) @@ -84,6 +85,7 @@ registerLocaleData(localeIt) registerLocaleData(localeEnGb) registerLocaleData(localeRo) registerLocaleData(localeRu) +registerLocaleData(localeEs) @NgModule({ declarations: [ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index bc5725bab..dcc0a3148 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -96,6 +96,8 @@ export class SettingsService { {code: "it-it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"}, {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"}, {code: "ru-ru", name: $localize`Russian`, englishName: "Russian", dateInputFormat: "dd.mm.yyyy"}, + {code: "es-es", name: $localize`Spanish`, englishName: "Spanish", dateInputFormat: "dd/mm/yyyy"}, + ] } diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 36359709a..42fac1586 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" +"POT-Creation-Date: 2021-03-14 13:33+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" @@ -444,6 +444,10 @@ msgstr "" msgid "Russian" msgstr "" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 909a38a84..014f2e95d 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -303,7 +303,8 @@ LANGUAGES = [ ("pt-br", _("Portuguese (Brazil)")), ("it-it", _("Italian")), ("ro-ro", _("Romanian")), - ("ru-ru", _("Russian")) + ("ru-ru", _("Russian")), + ("es-es", _("Spanish")) ] LOCALE_PATHS = [ From adac39ece11ac3ee0a1a5a0a746682870ec95460 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 14:01:43 +0100 Subject: [PATCH 618/898] changelog --- docs/changelog.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 316cb2281..8712ce7f6 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,7 +8,7 @@ Changelog paperless-ng 1.3.1 ################## -* Added Russian locale. +* Added translation into Spanish and Russian. * ISO-8601 date format will now always show years with 4 digits. @@ -18,6 +18,10 @@ paperless-ng 1.3.1 * The startup check for write permissions now works properly on NFS shares. +* The document cards now display ASN, types and dates in a more organized way. + +* Added document previews when hovering over the preview button. + paperless-ng 1.3.0 ################## From 759d4f06fa2b2d63159465e62626b1d5f297efbb Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 14:17:21 +0100 Subject: [PATCH 619/898] fixes #745 --- src/paperless/auth.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/paperless/auth.py b/src/paperless/auth.py index 3bc6344cd..79deb5c37 100644 --- a/src/paperless/auth.py +++ b/src/paperless/auth.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.contrib import auth from django.contrib.auth.models import User from django.utils.deprecation import MiddlewareMixin from rest_framework import authentication @@ -11,6 +12,7 @@ class AutoLoginMiddleware(MiddlewareMixin): try: request.user = User.objects.get( username=settings.AUTO_LOGIN_USERNAME) + auth.login(request, request.user) except User.DoesNotExist: pass From 3a67462396802622ead8fd768d09f482b3a223b7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 14:42:48 +0100 Subject: [PATCH 620/898] fixes #631 --- src/documents/parsers.py | 67 +++++++++++------- src/documents/resources/document.png | Bin 0 -> 10498 bytes src/paperless_tesseract/parsers.py | 1 + .../tests/samples/encrypted.pdf | Bin 81455 -> 46594 bytes .../tests/samples/signed.pdf | Bin 0 -> 81455 bytes src/paperless_tesseract/tests/test_parser.py | 25 +++++-- 6 files changed, 63 insertions(+), 30 deletions(-) create mode 100644 src/documents/resources/document.png create mode 100644 src/paperless_tesseract/tests/samples/signed.pdf diff --git a/src/documents/parsers.py b/src/documents/parsers.py index b2714f6a3..8cb8f5399 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -143,6 +143,46 @@ def run_convert(input_file, raise ParseError("Convert failed at {}".format(args)) +def get_default_thumbnail(): + return os.path.join(os.path.dirname(__file__), "resources", "document.png") + + +def make_thumbnail_from_pdf_gs_fallback(in_path, temp_dir, logging_group=None): + out_path = os.path.join(temp_dir, "convert_gs.png") + + # if convert fails, fall back to extracting + # the first PDF page as a PNG using Ghostscript + logger.warning( + "Thumbnail generation with ImageMagick failed, falling back " + "to ghostscript. Check your /etc/ImageMagick-x/policy.xml!", + extra={'group': logging_group} + ) + gs_out_path = os.path.join(temp_dir, "gs_out.png") + cmd = [settings.GS_BINARY, + "-q", + "-sDEVICE=pngalpha", + "-o", gs_out_path, + in_path] + try: + if not subprocess.Popen(cmd).wait() == 0: + raise ParseError("Thumbnail (gs) failed at {}".format(cmd)) + # then run convert on the output from gs + run_convert(density=300, + scale="500x5000>", + alpha="remove", + strip=True, + trim=False, + auto_orient=True, + input_file=gs_out_path, + output_file=out_path, + logging_group=logging_group) + + return out_path + + except ParseError: + return get_default_thumbnail() + + def make_thumbnail_from_pdf(in_path, temp_dir, logging_group=None): """ The thumbnail of a PDF is just a 500px wide image of the first page. @@ -161,31 +201,8 @@ def make_thumbnail_from_pdf(in_path, temp_dir, logging_group=None): output_file=out_path, logging_group=logging_group) except ParseError: - # if convert fails, fall back to extracting - # the first PDF page as a PNG using Ghostscript - logger.warning( - "Thumbnail generation with ImageMagick failed, falling back " - "to ghostscript. Check your /etc/ImageMagick-x/policy.xml!", - extra={'group': logging_group} - ) - gs_out_path = os.path.join(temp_dir, "gs_out.png") - cmd = [settings.GS_BINARY, - "-q", - "-sDEVICE=pngalpha", - "-o", gs_out_path, - in_path] - if not subprocess.Popen(cmd).wait() == 0: - raise ParseError("Thumbnail (gs) failed at {}".format(cmd)) - # then run convert on the output from gs - run_convert(density=300, - scale="500x5000>", - alpha="remove", - strip=True, - trim=False, - auto_orient=True, - input_file=gs_out_path, - output_file=out_path, - logging_group=logging_group) + out_path = make_thumbnail_from_pdf_gs_fallback( + in_path, temp_dir, logging_group) return out_path diff --git a/src/documents/resources/document.png b/src/documents/resources/document.png new file mode 100644 index 0000000000000000000000000000000000000000..8c24f9d6ed83af535d3ba5e2d7e396c2addde855 GIT binary patch literal 10498 zcmeHMcT|(vw#RW4rHMGm01AkJB7}s5me4db=|~X)1w#r_gGnHCEEEex=`A=&QxT9( zK)^Cc386@rrW8XHkSc=uzM#(Fb?(fa_1=Ad4QqXCW$*plzkSX=d!KW@kE<p|I-G0* zY%DA+oVv#~O<7pBEV8itK;7{ppc#4llMD+B>lGjKQzTOqS;U=y$2q!SMM&Q6SP`t3 zBaVf|>&2S{t0-wnF0D^iTHr0eik#xIhfMA7m|uG-bTd{1(?`3vazdCF^~$T_GRr`Y z)J?Y!Z-?G|e5#|z8(-M<T<@))slFjXv2*BFz?sX&-AnJM7t7g&Zz((5<|)5AkrBRf z-Fikr<(B$(mA+OgZI+|+trtqzu9#G2s?P6Y@KejRW}eqiO?-d8MyT1bYwL%>IB@Rd z8mOnDukKwR=XyU?v#M-GZhmz(!wZiS(!R;7v3Od%vFd`?htt!HS`Sy!Vz>XOMI>CU zEJ(w4wV}o)b}j7Mgbia?%g~J4MIPFR{<kmFVKkeydGGps%B&1uO)@;9EKyy}a!3u& zSncyYS+-I^?lyazIaY9&aWYRCAs`dk{osk^Dt2b+y+U>8<H0S6_FZ^CopZ<LK5|Jm zwLayVa?<%(TDE~Flb4?--$DMK96xIbcl&AxNWdng;8G9EV7-~QjehxS*KX25bBWZ8 zsXUOqT)h3%^@!QBkY%-)U5~r_j9V{xG#ofUQ>v#(Rk4UoABvnGd&yW?V7wGK2C;L? zb9vxfX?TijmmBqZ6YKc#Is@NOt=3h@h3g5*MG4%;9>sGL4?oVi5^_OU>K%#0;;Jsk z4rDXbDl_9}_Lt^xB24>fr)6P(WSjJb`U1^uNqdz~i3f3hJa^Ci4kN*=nTnyym-XvQ z-yJo*7I!e<Ou7W!+PuW6-4<;q-)&lQ($eOQp|$2dqLiVHYwl8W#(o;5jlxxxe5x4J zd+n};a~JC(zvJkMkcdfbLI1|EJ(L9O<ozOg^^;3_Qn?QspIcbk_-mBxC%^EH&#jy( zT@!SAd<Ml=?H9PeWKPpiCc{X_Un4y2p7EYn^}1>a7ZWmAhJCm%v=Sf-@)=??N6C-{ z!z<UM??Z*%aY|P%p0z$U&xP;#aJ8Sc|Fm8pyP~%!gNszN6;A$TZ96r;yy~cHste4I z#D_e@5ozWxw%&E5ME}j9><>Ou0f?7&8i7wuB3&Kd>=7^%->uh)b9(6dP^fz1f<k6q zOh;tFaH&;Qap{Vr6)9<^;6Qxeo1W9Wji63L6&ESNh@(y6V$UOYNG@=MIXBt{>m7P> zvV(gjoaFOt96>NueEV~buoUkwJ?0Vpz}Vd7E`RSdl+0c2rk|Ei;f}j1{IJ)We9-ku z!nPls8Rt*-B5Bzk#LTMaR<2fNq0>mVr89An4QEyQl6Ac2wCmq;9B6nQz$w%h-~J-6 z{Y~vi;^Fst@2dr?WbpnAT<kLmCJp*eV$^o%?hz?8)hSD;kBD-%xyj4>Loc{*FS{&f zz|*W>U+;XyQzRw0`--ow!mg~UIo9_j_6}vR-8E7=*Ej|;4a_m)+M!W;r-<S918$<! znrBCI5U~>{R8?&{UMCE#l-NG37~E&E`^MepucUZ6eWXlSt2Acb7k8K|&v<+^@#Kta znpx1Qps1Q>M$Jl&x6N1FX||j|JN2mE_vCqhi38nuJUZ;rHL=7aLdUM8ov8QEZyPy( zS0Lv$Pg3e*W#O{eH;l=-+}l$~_=OR|<5Zl3K;?c)OMNaUTP_E;R4q0K`%Xz;FNizy z^o!vJ{%RHt@slC9Ah?O9(s<>fV?SQk1l?At2gBm_i${u-G$-DHa>d%zg=Z-yJ8t3J znmgcjKkpM)&)h}doiBXr5fcX&<9hF|*7CT-mdpFnGi_+>Ly(@O)NxaWQY?-$R@$s& zpWwjr7l(uC@E46cv&9Q1C1^*)#D$mm$qK)OJ+fmhalK5<sHix3W#Pg;;}pU39fwDr z^js)rJzb|-zTK8?mFE5P&n1b;SCbt<qW3xc`W}|FneMCF{mZ~%zht7Z;W+tW=& zy`!!gXZqZZkqbj~r1p2U9=~_#$6=AY2iYQ*Yww#R?P%~93OJ@xIb1#H+RMRz8J#?N zvry_i*l<l(KLLF3S4rmwPM0~$lM3DqYtg$;Q}0e&%hTCHr>2h^>C^Jvi+3NGf^>$+ zSt{vr9PaZm+Jg{a2)xtE^iVjOn?CVE&t^oAMUS03=%uLgw31-)V9}OO4bmp%LydK% zifxO-{DUR4;mQfJJk62M&X<QDxjJ%0=gy6ZhsYgq#)M0u$_3zD7aWgT=F&pTC6L1U zd1^aJWl`X!nT~B;5vj2sT+UPJ861`Zd$aI5z7KqLyjdec+9E$bXm_%KOMHpwPHx*7 zIG+=DSc;hQSh`>0mFEu#;o5tPkH)`J%1SYlW*|-NDl@VSOvM;2dCt4^>a;A5iuWAf zmH|Hl%R8Mw9uWkw^J*^byUK`GdH6g<U-;V2;N`5+D`H^MTnuk2OL$b4a`AO_?6Tlf zshu}9Bm>SzTQu%7my<O2Qti%7@WdLCwzM7a6FhXYx7EUk(3yN(*SyJci6^qdh;=__ zVp34qA^)?3Hx#DEn|F&BsIQeO>rTZ!d?n;t=Cy~A2y<!O`J!w+(ABTR{aFns+3s1W zE$*1M>pr@3hPx^?vM}q^iSoX&A5TG`cFX&u((}ht(3eU}@)w4#9v3oL=DQ~?Gn2jb zqx_<=V$jPcTAEXV0U7cM#z|b)fkRr%QA5K-S3~3LnGBr7DU=%pdQVM$3aK$aAz5*U zWD?3Te9~PuTHj*FC1e=yeIv&xd)cc8bS0}V;&1P2KgR9%!>yx_dp~KjvKD#0nhV_5 zy!y!(Ts$piKwCX?yy%|$hryQwcPzNN4HwImJpCgoaYbb|=-I;RHSA)h^TQ;@M-}!H zr$e469${a&{e!dJv_Ve)gKJBD)q#ftxcg2dX$>EG>lvdRLeIM;5j|Je-j9Pf%QPF> zl?2mdv%Pva5+M?4x25PE@FytaNmFijW8K4sS2~lOvWB(I8ym)scJNIoaC!@Rq-MvY zsXUv9?j&c-%Xue!`e3`Jl%ts2EWPX6FK+a^*6F(+sy}ID=}JxWAGlGnxaP_UGg4h> zQ4H9^QENiJP;z#eg@xP35xB#gGBiM-@vbr`4Bj3q<K^lO+;Lb~RMfrPQD|o@NyHxO z;OM3*I$K#ID&mMy6}6N%gc!POV9z-o_aR`-e2mP|KF(-3MpRvmO~nfV5V&GVC=oAL z7dIlpOI37(7Xkccs==Zn8xWGSs^}?06A=wO0V^UWBPRm^X?Zz%LPgcsL{tbE9Kuvn z`wImisfwN>k=zkrFqur2A;V<w1P8Dz91aIVpkOEz1Ry{}Z#NRk3*<&T$fWqpp@}7; z36Ab0N4%Q|lM`i+_aLc?iUM|#FXVs~t>pzMzXV{)8}vjH2CNGRa=?5502m5^D1jhQ z5EKsH><?HC4S(}?BYw#ukWa7|${j2#0|C3be&azTX?gx0?+-nQ=D<}FY>Fk~JqT#5 zmM7MYbZ~P}cNY)h=9nHtEK{{HZWjy=3=C=`@@5|$T|<-Ke3)r;aCCLw@L-}hBQfaT zaPA%imkkUC4aT})U4elR0cP26@FYjv?+f(Je3+K+1_FfpjsF|;*L-b^Wh1W$O+4Cz z8B|wORg^hi1O|_G#2_|)qHs8S7*r7jvRAZ6f#e`490+BvfCXV7_VPG53@xh!LvNze zbt95cZfGo%3Luwp1b8qCI5{PIdo&29h?57&LFFMJds$f&2yU+cFvuy$qGS~}Q5X{( zflffVY#tSp3IkAKv5HV7lsyh4FAEf-91e;DDam1EK^P@DSr`<jD6fQ(-JoKw1LBy8 zuBs?h2J*Yc#05pd;R&v)q6Us`9$vp2%pF~^W+W6dX|f6s7zB6}VNfMG2vp&B&`B(T z2oyP!Qx+lvg>G0dXoNPvhyseu(G}%@1-rXBY#5l!f&eB1Bo@W&4S;z=56lIjLBOI& zc!D_|@1iQo9IFVEa-*e0RK7F|!T^unaNGc6G0cAZ(s4+X19(GJ0sk5JJ0`Ppc(U7n z#`8P$H<n`r5*bf$HYOO`J7LkJKj--)@NZ0}z+Oir5xjN(Vp9KtQ~6x3#{pkF!FyAD zGwk`#(&r7y#c?B5A|e}`00M>noPHw86N}kc0w9l{P3UtdHwP@R+kR=auX@KnC}W%= zL=mnCl>=cF?6Dv@C71#Tt|W&Ap=8lmEX>{>BBucRmYs;lk;o_l_Lu`u1Hd{1t+lbv zB8NAsPx4zd`5YFg5h(~10fC5qUfwUu{ok1n90!+^MJb>_idY30NDdBkBudsE3c^9` zVG8yNif|>R&u#fzw*L3?Q2{d#h_B0~!rVd)4H26cRE4?4B6OLZWai=S?&63ge7n$J z3;*BXHu-;PvcGcQ4EyY@fp_-?HlcGQW3t<yhW`WLX9fdDG}euX|FfZQhI~%TrgIb+ z^Jg7!J_E-+__y=^OPMowg8$;*m-hKDMgXY)3G%n{`%k+5N!Q=Xz~2J@Q(gb0>u+V? zZ-M`*uK%-ivHkwV0P6-^T*<)qfW5_8OTf2;AMEvYG+91{MmE&|(oXl|RzwyS_C3sJ z3rkYU&w!GZq-&_fI?BegS494Zs{RuemR;v`HIJDC|4AA6K>jJXs_w0^*nusYsoNUS zqM@vyQ;S`xPQEj5``3(D`khouPW@=T`(Ax?f|SUC-C|-vH(Z_zi{6&QkfZ6-)6-K+ z$pd#s{2Yc76aAA?)#<Ev%HzXWg1C0<=SGN-j*eew-IBHy$;x~-E029Od{usf{;d2L ziXg6UDYm3t{>=TAf*I_uc{igshV~!uZkotf_wUC0)$nhp{0HOxj`zDM@7VvByx&dv z==fjr{%b0?PRL&xHW)o7F%Q|}9o1_<ZVg;DiNNOWKTL{)#uxNAQw%(&_o_4>^0u5r zGPH!SN{Wcd@v8DQQ$ED?<ffATdOxjFZNQ}7K{#lK$usQ}TWTJ&Sg|+{79O>)g$5?Q z-&1KhF1E0W2&7}Q%8VwFhjc-Vd2ehUEmMZHS2h_&wOY-Msc5ZKSumrv^V%HoNF(P` zQ|MKBz1DZxtMn<eQR&o<;KAAuSieV~G+<49n=;$@CJu0^_fyMx8H&!Z6<7PA?}txA zqu1T13dOfhy!oZ3u-(IS<?*RB%faZ=E?&K^{7uXEr^;O)ny%cD@kq1$=%v=)N)TM| z39xvz#|wz_1V^N%jSV)P^*IudE3-5|Z{N@6-~CAcg#W5W$PvnFdq<V@p~Y+Ovu1dl z=j*1&uUQ>GGtMiYSWrQG7;Sh4whQ2hn&~<-e9F_KQ!_(mkxd|X!7Gr<W556qt|jKI z$;a7|$NB_J`Fv{gTAe*27`~MxC?Ex^+*^2eQAQ}gBiNRIkB87uTW9;tidL!N^OQQf ziTPC^PAsHyG`)&{{QXW{K-g6^bOGQza_YVOiu`slkF<jxK@lCh5vDrh$M*w5+U1U5 zE?|8CN0D!g8!}*w$iCVUY?N&?V3!?V(JC3Nc4!Wn{a&H`Bp;%)tonin;8@)I0_pYv z$aXufwtwAf5}D181h9@dxxI%y(#-rr*=(W#j=pKooP-$=%k_D(BHQU?K$Se*qHvd; za&M}^CU_8G3V4ESn{9&gjG4cd_xfZ4>2H?^C7uH0_k;E40qmr5jQUUS@+vmG>(_dL zDVTXo%^MBU_A;4#<v&qY3J<B8f~mF#&x-rZJK54n&!BN_D$*iL<f5*g;6YWP*S10q zh${a2EEmVA2CKkjjB%8;kb^==$H_&!U~>~sq-~3=vfcQ=Ss6tld{520q4&_3ZZ>~$ zKUrt%c~}%5w0ac5?ZfwTORp9(p<(QF3%;=B0=ExCupt|)BAZI5hB1~d*$Sjbdv#W& z_qR+Sx@#;6wF%rlhmxCzV3y>&V3@u6jw<3AI!S|e=G@DcEy(PcEJE&M@k0b!Ik%64 zK!e{?+Mt|F&|u<>+>#FJ*(1Q$r}fvug+wSMXwW;!ko=;a8?l4JGud#|jJ6`kkDS${ z52X1~E*@Ak>SzkTPR?p!`n>4<wa_<=J&l~T<emFUd_{l{Icpv&xV}4cPe96+G;-d> z^}LI-Nx}^?d-KcU>Z&E$U#-t+>hz`#z3z`{<1Bs0*Xcx!a!xc141tb1@CO^oE@S+g zN88wqT8uCcGM$s@iNZAlY7~8H(n0=3pXyf0CvofekcCd7Fu`Avl~`Uoo2pJ*pHL6H znFCMSnyP?wSjufM*}kALgFO=29)HoLxioIJkpZ)t6XPSm>k5b10|3YphIVg|%kgc~ z!ieMgs$c9uxX5zED+}^o`nn6nF4Z@sWr4xrD{nhaBD@Y?Z>mjShY7#7DFCViSN#&z zJO-u?{MvH*l>mi{=J(i3jUKm;Zd4Y*jj*8mJ^rw++DDL9=4iXC%oJBvZPXf8wohC! z^6osDuzKlc7{)RJTXd0)0>uSnZA%1~M=SRxr}v(_kIcRYNQue4$!PCh_h2InSm55Z zi~Ab3A9Pa&KWp%dh1x+<KG76Iq)BlOYGw21-R{4;d?Y7%^-17_e<kg%GEFwI1r~*o zRwNR(bwAFz1xGq0>eLHT-?cMnb@QkQ#>+yrXbEDPnQ8kfgLuA+pf>b6H!E@qN)9*D z4S#)EYh+zbc+}dg8_;NG$2d`Aa=?Bh89w5nLxO%%`mZC#W1gEEfo`t0k9@c#h{&V$ z@1~dv&=Nytywu{aQ_nDb&M+~petBafAyE9NPgNX|$>fqcDr^|KIy~i}L)0PZol_A8 z!J2CGy7$xfw@Ie;!Q)>Pei~}A%kL)0lyP?Mra%*E@vEe5iRyt>GE4_AY(QS~>^((t zRe*{e!jTVwt%Rym8uor%(_TnRW1|qL7K~^0B8yy#xAdtl96PESar0Jg{9BRvg$*gq z<+2ZsJghn?V2O$N*K2^fl}#^bs*D)iY}Q%D823@O99JoM8h2pPP3iV*&Zy@bav&*f zfrvMsbMh3)?<+tu7+qsk9Olvs<f7&XUPMi?<SgSXw)FMc!4?VSlArv9t4MW^qTz7` z2A+#8x>Yfpy|x8Kd(ztHdsYN~FdF!?TZlNr`JOmQJw36>MMphX0i#pe6N_{>KeDQV z=IxDp;|<I2$ut`99vtv9Pi%@V@QbPRyw|##849OZXO`ZHYxh1^$40reW?2ihJO1JJ zekoF__YLLP{=A!EeN-f)mp2!rF&?XE(F^j$FxV*BuU+|(`PGwy74@#s!Og~{z0e?A z|75B6H`{V&Y9vUh6Af1vdyWLzde|&@j+IWh+PO+@vvZP+_2;j5NW5R)^)My6*Dafk z@~QaXr|3%lhNn%Wxs!`nv?nfmk9OLEsB@umW%!ovjT_c?SESEZgNsoM@|`^Q#sadS zWsQNa)`~i3_z-Voqo=5*t*Sk?jV4^#L#@F^1ro%HN6NAEF>AN6m4M7nd4!fvlrdY) zfmh~6RBTkM<nv5}VpMKB9KVRnE=NywyIL<C4}b)unT53}<oW*k4%k#AUX;(AAK^pP zCb*7NIE2}a|CCOdb;yS?L7s!@P2u6eMyLYLVn@1jVLRY(g8HGt&{=H~{Q#M*v<B@6 zDVb?Lke;t{%L5#{hrd2PIPY!A!&muLt&%5=BQVBpqd1}b_Z3|@V=i1#8au_)3tmT5 zDau)|_Q^j3CN(}lPYYPrjq!hXv)X(E$}Ge+=s0gLHYk!xKp^qd%o^E`Js0AzYVG=J zgASTVu-Ul$T`-MAAs$e#Kd^YIv$E!@auTTSGOyA8w6dNML}a8u8#FA>eR4-tZCAIq zpAs>oBf~nxQpqD|aQ>hVo{~eybKcceT*zqVt!NFleK$8bP&9qLbdZC((9~7sUn^s5 zmBxqHq10s)={J(xOJ<aLl{s|BYkf;*c;e?Nvhw4Vew~-D9$d62*Bi1WCl+}OK}2<h zMqRc#nB=tv5AJ21k~u-EqdJ>-^waGG-?h$dxy<9^JMH#za2N)Uok~=^&zC@3N^yFL zrG1=MkWMSp!E-4V_Xqpk=(D%`^_*H`a7diW@JPOtS85@Wl|XIwtzj2>-R?p^TUyz? z-j*KrI=SE3eWIink3r&ZRqtz27dX9aJ0ortZ)kOEFi(||L~{`u3zeu@BtBW`3L3Os zgQgTn#NBF)Nt1W9Sr)kDytq8ski4CGuWJ<J6LxI;&9a`6z>_10#PAT2MQG2^Bjriy zmb1(Jms)AVhO_f|*C=qe9Y}Ed;ZIUF;c2y{WBb)vB^L=3bl+Yq2S_#P)1aUR5{#al zEl+hx^k1c{G}|mUWn^}ZzHy;%6ZSk)Fyc+OaYBOgQ#r8u&DbZ0<6O~$&3n=3#){^R zxm0s*$Guvo4Oqu{$a~9$K4f8B8I;VP)98(LUVWkK7ww=C>NiohyK2E;EV=&<G5SDM zhWcgr_%a7__B3%-t&DgmGR*$ORFPCoqXK@*&ME<k1q}&U>eVJpR!-#nhY5W<1sqxd zQ{<apuALvpnfko=YLWQge`h#0uFbN!P?>L2|E8tCyvs1_{JUEJe|wAg=S6SxuB$gZ aWY_xR{TtWKynxqm7F{hP%{=7UOaB8k>|me( literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index deadf2234..589b25e37 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -291,6 +291,7 @@ class RasterisedDocumentParser(DocumentParser): f"No text was found in {document_path}, the content will " f"be empty." ) + self.text = "" def strip_excess_whitespace(text): diff --git a/src/paperless_tesseract/tests/samples/encrypted.pdf b/src/paperless_tesseract/tests/samples/encrypted.pdf index 5996edeea62b1509a42a7087d75f3770f4be4beb..12c5a3070216299f93664882841748b9fb17da87 100644 GIT binary patch literal 46594 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 F{2$0kd)5E| literal 81455 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 bdG(8uBBP=sHN7|rW+<_EojUFvJc|E6HwKH> diff --git a/src/paperless_tesseract/tests/samples/signed.pdf b/src/paperless_tesseract/tests/samples/signed.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5996edeea62b1509a42a7087d75f3770f4be4beb GIT binary patch literal 81455 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 bdG(8uBBP=sHN7|rW+<_EojUFvJc|E6HwKH> literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 21f1e140c..fe4e4733b 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -81,8 +81,8 @@ class TestParser(DirectoriesMixin, TestCase): def test_thumbnail(self): parser = RasterisedDocumentParser(uuid.uuid4()) - parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf'), "application/pdf") - # dont really know how to test it, just call it and assert that it does not raise anything. + thumb = parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf'), "application/pdf") + self.assertTrue(os.path.isfile(thumb)) @mock.patch("documents.parsers.run_convert") def test_thumbnail_fallback(self, m): @@ -96,8 +96,13 @@ class TestParser(DirectoriesMixin, TestCase): m.side_effect = call_convert parser = RasterisedDocumentParser(uuid.uuid4()) - parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf'), "application/pdf") - # dont really know how to test it, just call it and assert that it does not raise anything. + thumb = parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf'), "application/pdf") + self.assertTrue(os.path.isfile(thumb)) + + def test_thumbnail_encrypted(self): + parser = RasterisedDocumentParser(uuid.uuid4()) + thumb = parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'encrypted.pdf'), "application/pdf") + self.assertTrue(os.path.isfile(thumb)) def test_get_dpi(self): parser = RasterisedDocumentParser(None) @@ -135,6 +140,15 @@ class TestParser(DirectoriesMixin, TestCase): self.assertIsNone(parser.archive_path) self.assertContainsStrings(parser.get_text(), ["Please enter your name in here:", "This is a PDF document with a form."]) + @override_settings(OCR_MODE="skip") + def test_signed(self): + parser = RasterisedDocumentParser(None) + + parser.parse(os.path.join(self.SAMPLE_FILES, "signed.pdf"), "application/pdf") + + self.assertIsNone(parser.archive_path) + self.assertContainsStrings(parser.get_text(), ["This is a digitally signed PDF, created with Acrobat Pro for the Paperless project to enable", "automated testing of signed/encrypted PDFs"]) + @override_settings(OCR_MODE="skip") def test_encrypted(self): parser = RasterisedDocumentParser(None) @@ -142,7 +156,8 @@ class TestParser(DirectoriesMixin, TestCase): parser.parse(os.path.join(self.SAMPLE_FILES, "encrypted.pdf"), "application/pdf") self.assertIsNone(parser.archive_path) - self.assertContainsStrings(parser.get_text(), ["This is a digitally signed PDF, created with Acrobat Pro for the Paperless project to enable", "automated testing of signed/encrypted PDFs"]) + self.assertEqual(parser.get_text(), "") + @override_settings(OCR_MODE="redo") def test_with_form_error_notext(self): From da7e0720406423c8cbaaa672f4e67711576ca861 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 14:45:29 +0100 Subject: [PATCH 621/898] optimized default thumbnail --- src/documents/resources/document.png | Bin 10498 -> 10885 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/documents/resources/document.png b/src/documents/resources/document.png index 8c24f9d6ed83af535d3ba5e2d7e396c2addde855..164afd14d0f56fdd27962ff5dafffd73d387ef65 100644 GIT binary patch literal 10885 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 literal 10498 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 aWY_xR{TtWKynxqm7F{hP%{=7UOaB8k>|me( From 9dcd87d084447127d992f827076e40ae5d9144e4 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 14:49:38 +0100 Subject: [PATCH 622/898] changelog --- docs/changelog.rst | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 8712ce7f6..bf083e8b7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,18 +10,25 @@ paperless-ng 1.3.1 * Added translation into Spanish and Russian. -* ISO-8601 date format will now always show years with 4 digits. +* Other changes -* Fixed an issue with the search results score indicator. + * ISO-8601 date format will now always show years with 4 digits. -* Added the ability to search for a document with a specific ASN. + * Added the ability to search for a document with a specific ASN. -* The startup check for write permissions now works properly on NFS shares. + * The document cards now display ASN, types and dates in a more organized way. -* The document cards now display ASN, types and dates in a more organized way. + * Added document previews when hovering over the preview button. -* Added document previews when hovering over the preview button. +* Fixes + * The startup check for write permissions now works properly on NFS shares. + + * Fixed an issue with the search results score indicator. + + * Paperless was unable to generate thumbnails for encrypted PDF files and failed. Paperless will now generate a default thumbnail for these files. + + * Fixed ``AUTO_LOGIN_USERNAME``: Unable to perform POST/PUT/DELETE requests and unable to receive WebSocket messages. paperless-ng 1.3.0 ################## From 020e5561463b24079a872290ad9f3b39659fdf6c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 15:12:10 +0100 Subject: [PATCH 623/898] New Crowdin updates (#763) --- src-ui/src/locale/messages.cs_CZ.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.de_DE.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.en_GB.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.es_ES.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.fr_FR.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.hu_HU.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.it_IT.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.nl_NL.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.pt_BR.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.pt_PT.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.ro_RO.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.ru_RU.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.xh_ZA.xlf | 24 ++++++++++++------------ src-ui/src/locale/messages.zh_CN.xlf | 24 ++++++++++++------------ src/locale/cs_CZ/LC_MESSAGES/django.po | 8 ++++++-- src/locale/de_DE/LC_MESSAGES/django.po | 8 ++++++-- src/locale/en_GB/LC_MESSAGES/django.po | 8 ++++++-- src/locale/es_ES/LC_MESSAGES/django.po | 8 ++++++-- src/locale/fr_FR/LC_MESSAGES/django.po | 8 ++++++-- src/locale/hu_HU/LC_MESSAGES/django.po | 8 ++++++-- src/locale/it_IT/LC_MESSAGES/django.po | 8 ++++++-- src/locale/nl_NL/LC_MESSAGES/django.po | 8 ++++++-- src/locale/pt_BR/LC_MESSAGES/django.po | 8 ++++++-- src/locale/pt_PT/LC_MESSAGES/django.po | 8 ++++++-- src/locale/ro_RO/LC_MESSAGES/django.po | 8 ++++++-- src/locale/ru_RU/LC_MESSAGES/django.po | 8 ++++++-- src/locale/xh_ZA/LC_MESSAGES/django.po | 8 ++++++-- src/locale/zh_CN/LC_MESSAGES/django.po | 8 ++++++-- 28 files changed, 252 insertions(+), 196 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 7b56a1ec3..d0f519a70 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="needs-translation">View</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="needs-translation">Score:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="needs-translation">View in browser</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="needs-translation">Russian</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 67a7b3b9f..e9f8ddbc5 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Anzeigen</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Erstellt: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Relevanz:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Im Browser anzeigen</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Russisch</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">Spanisch</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 659479b63..d5faf1be4 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">View</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Score:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">View in browser</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Russian</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 508e78ebb..b47f696e8 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Vista</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Creado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Puntuación:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Ver en navegador</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Ruso</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index a5752de1b..c88ece3c5 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Vue</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Créé le : <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Score :</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Afficher dans le navigateur</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Russe</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index a947d5b73..1411bcdba 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Megtekint</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Létrehozva: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Pont:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Megtekintés böngészőben</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="needs-translation">Russian</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 7088230dd..50e851625 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Mostra</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Creato il: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Punteggio:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Apri nel browser</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Russo</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 7f9dca0ef..2c4a6e543 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Bekijken</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Aangemaakt op: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Score:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">In uw browser bekijken</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Russisch</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index d8a49f82b..70994baef 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Ver</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Criado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Nota:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Visualizar no navegador</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="needs-translation">Russian</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 83c62dcc3..cfa13a0ad 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Ver</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Criado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Pontuação:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Ver no navegador</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Russo</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index a9be02808..f942b52d9 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Vizualizare</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Creat: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Scor:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Vizualizează în browser</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="translated">Rusă</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 0c73d051c..1ec2b178f 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="translated">Представление</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="translated">Создано: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="translated">Оценка:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="translated">Просмотреть в браузере</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="needs-translation">Russian</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index 781e5ec72..8b4bd47f3 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target>crwdns3178:0crwdne3178:0</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target>crwdns3180:0{{document.created | customDate}}crwdne3180:0</target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target>crwdns3186:0crwdne3186:0</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target>crwdns3188:0crwdne3188:0</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target>crwdns3404:0crwdne3404:0</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target>crwdns3418:0crwdne3418:0</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target>crwdns3322:0crwdne3322:0</target> </trans-unit> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index 0942b3773..87916ccc5 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1384,7 +1384,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">52</context> </context-group> <target state="needs-translation">View</target> </trans-unit> @@ -1392,7 +1392,7 @@ <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">67</context> + <context context-type="linenumber">71</context> </context-group> <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> </trans-unit> @@ -1416,18 +1416,10 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">62</context> + <context context-type="linenumber">66</context> </context-group> <target state="needs-translation">Score:</target> </trans-unit> - <trans-unit id="2840db547019ce8c76b2cdbe3a1653c5b68b06af" datatype="html"> - <source>View in browser</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> - <context context-type="linenumber">40</context> - </context-group> - <target state="needs-translation">View in browser</target> - </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1969,11 +1961,19 @@ </context-group> <target state="needs-translation">Russian</target> </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="needs-translation">Spanish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">103</context> + <context context-type="linenumber">105</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index dd1a65888..a869dfffe 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 20:36\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:58\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -440,6 +440,10 @@ msgstr "" msgid "Russian" msgstr "" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 4757275b3..5f681f78f 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-10 23:00\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:58\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -440,6 +440,10 @@ msgstr "Rumänisch" msgid "Russian" msgstr "Russisch" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "Spanisch" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 238d0444d..4880f22cc 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -440,6 +440,10 @@ msgstr "Romanian" msgid "Russian" msgstr "Russian" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 456a76465..167a2d321 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-14 01:49\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:58\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -440,6 +440,10 @@ msgstr "Rumano" msgid "Russian" msgstr "Ruso" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng Administración" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index b8f79e03b..2c1afc042 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 21:07\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:58\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -440,6 +440,10 @@ msgstr "Roumain" msgid "Russian" msgstr "Russe" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index abaaa8a01..a0aeaa31b 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 20:36\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -440,6 +440,10 @@ msgstr "" msgid "Russian" msgstr "" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 3f6f7fed2..b5025ede3 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 23:26\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -440,6 +440,10 @@ msgstr "Rumeno" msgid "Russian" msgstr "Russo" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 714b01deb..3f7c14464 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 06:44\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -440,6 +440,10 @@ msgstr "Roemeens" msgid "Russian" msgstr "Russisch" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 354780b4e..2f2e9c875 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 20:02\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -440,6 +440,10 @@ msgstr "Romeno" msgid "Russian" msgstr "" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index e015d377d..c65e0356a 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 23:34\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -440,6 +440,10 @@ msgstr "" msgid "Russian" msgstr "Russo" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 2adfe6f4d..20918db1d 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-08 11:58\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -440,6 +440,10 @@ msgstr "Română" msgid "Russian" msgstr "Rusă" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Administrare Paperless-ng" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index 8f84da8c5..cbc5a4a60 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 21:35\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -440,6 +440,10 @@ msgstr "Romanian" msgid "Russian" msgstr "" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "Администрирование Paperless-ng" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index b43006137..5b3f83e84 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 20:36\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -440,6 +440,10 @@ msgstr "crwdns2730:0crwdne2730:0" msgid "Russian" msgstr "crwdns3414:0crwdne3414:0" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "crwdns3420:0crwdne3420:0" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "crwdns2732:0crwdne2732:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 254b75843..c6c59ecf7 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-07 21:34+0100\n" -"PO-Revision-Date: 2021-03-07 20:36\n" +"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"PO-Revision-Date: 2021-03-14 13:57\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -440,6 +440,10 @@ msgstr "" msgid "Russian" msgstr "" +#: paperless/settings.py:307 +msgid "Spanish" +msgstr "" + #: paperless/urls.py:118 msgid "Paperless-ng administration" msgstr "" From 5b69dbd5c500be99969db46a643d20aae8c45d00 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 14 Mar 2021 15:22:25 +0100 Subject: [PATCH 624/898] bump version --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index d48b0bebe..82a55b979 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -3,7 +3,7 @@ export const environment = { apiBaseUrl: "/api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.3.0", + version: "1.3.1", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 3be2947f7..cb3d5bf5f 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 3, 0) +__version__ = (1, 3, 1) From d4c2f7e32fb28906e566139facaa73d6f1cf7b99 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 14 Mar 2021 09:33:57 -0700 Subject: [PATCH 625/898] Fix icons sometimes cut off in certain browsers --- .../document-card-large/document-card-large.component.scss | 5 +++-- .../document-card-small/document-card-small.component.scss | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index c3a358a2b..b60240c70 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -51,8 +51,9 @@ } .metadata-icon { - width: 0.8rem; - height: 0.8rem; + width: 1.0rem; + height: 1.0rem; + padding: 0.05rem; } .search-score { diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 2daa97337..4997682a4 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -53,8 +53,9 @@ } .metadata-icon { - width: 0.8rem; - height: 0.8rem; + width: 1.0rem; + height: 1.0rem; + padding: 0.05rem; } } From b20f83dbe5e57a9d8b4bc97e199fa6f503077b1a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 14 Mar 2021 09:35:53 -0700 Subject: [PATCH 626/898] Dont change size overall --- .../document-card-large/document-card-large.component.scss | 4 ++-- .../document-card-small/document-card-small.component.scss | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index b60240c70..9507ab42a 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -51,8 +51,8 @@ } .metadata-icon { - width: 1.0rem; - height: 1.0rem; + width: 0.9rem; + height: 0.9rem; padding: 0.05rem; } diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss index 4997682a4..943df03b9 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.scss @@ -53,8 +53,8 @@ } .metadata-icon { - width: 1.0rem; - height: 1.0rem; + width: 0.9rem; + height: 0.9rem; padding: 0.05rem; } } From 271ca50930955b2ee3ecac54c88a8bdd884a8111 Mon Sep 17 00:00:00 2001 From: Chris Nagy <chris@chris-mbp.local> Date: Sun, 14 Mar 2021 19:43:22 +0100 Subject: [PATCH 627/898] Add superuser management script --- docker/docker-entrypoint.sh | 14 +++++++++ docker/install_management_commands.sh | 2 +- .../management/commands/manage_superuser.py | 30 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/documents/management/commands/manage_superuser.py diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 5919b14aa..95131699f 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -49,6 +49,19 @@ wait_for_postgres() { } +superuser() { + + if [[ -n "${PAPERLESS_DBHOST}" ]] + then + wait_for_postgres + fi + + if [[ ! -z "${PAPERLESS_ADMIN_PASSWORD}" ]] + then + sudo -HEu paperless python3 manage.py manage_superuser + fi + +} migrations() { @@ -86,6 +99,7 @@ initialize() { chown -R paperless:paperless /tmp/paperless migrations + superuser } diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh index 17fb8f277..468711d3c 100755 --- a/docker/install_management_commands.sh +++ b/docker/install_management_commands.sh @@ -1,4 +1,4 @@ -for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker; +for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker manage_superuser; do echo "installing $command..." sed "s/management_command/$command/g" management_script.sh > /usr/local/bin/$command diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py new file mode 100644 index 000000000..3c5341cb3 --- /dev/null +++ b/src/documents/management/commands/manage_superuser.py @@ -0,0 +1,30 @@ +import os + +from django.contrib.auth.models import User +from django.core.management.base import BaseCommand, CommandError + +class Command(BaseCommand): + + help = """ + Creates a Django superuser based on env variables. + """.replace(" ", "") + + def handle(self, *args, **options): + + # Get user details from env variables + PAPERLESS_ADMIN_USER=os.getenv('PAPERLESS_ADMIN_USER') + PAPERLESS_ADMIN_MAIL=os.getenv('PAPERLESS_ADMIN_MAIL', 'root@localhost') + PAPERLESS_ADMIN_PASSWORD=os.getenv('PAPERLESS_ADMIN_PASSWORD') + + # If PAPERLESS_ADMIN_USER env variable is set + if PAPERLESS_ADMIN_USER: + try: + # Check if user exists already, leave as is if it does + if User.objects.filter(username=PAPERLESS_ADMIN_USER).exists(): + self.stdout.write(f'The user "{PAPERLESS_ADMIN_USER}" already exists! Leaving user as is.') + elif PAPERLESS_ADMIN_PASSWORD: + # Create superuser based on env variables + User.objects.create_superuser(PAPERLESS_ADMIN_USER, PAPERLESS_ADMIN_MAIL, PAPERLESS_ADMIN_PASSWORD) + self.stdout.write(f'Created superuser "{PAPERLESS_ADMIN_USER}" with provided password.') + except Exception as error: + self.stdout.write(f'Exception occured while managing superuser: {error}') \ No newline at end of file From 17a4fdd4a430b034b5ae47d8584ed97666553e89 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 15 Mar 2021 10:48:25 +0100 Subject: [PATCH 628/898] New Crowdin updates (#764) --- src-ui/src/locale/messages.en_GB.xlf | 2 +- src-ui/src/locale/messages.es_ES.xlf | 2 +- src-ui/src/locale/messages.fr_FR.xlf | 2 +- src-ui/src/locale/messages.it_IT.xlf | 2 +- src-ui/src/locale/messages.nl_NL.xlf | 2 +- src-ui/src/locale/messages.pt_PT.xlf | 2 +- src-ui/src/locale/messages.ru_RU.xlf | 64 +++++++++++++------------- src/locale/en_GB/LC_MESSAGES/django.po | 4 +- src/locale/es_ES/LC_MESSAGES/django.po | 4 +- src/locale/fr_FR/LC_MESSAGES/django.po | 4 +- src/locale/it_IT/LC_MESSAGES/django.po | 4 +- src/locale/nl_NL/LC_MESSAGES/django.po | 4 +- src/locale/pt_PT/LC_MESSAGES/django.po | 6 +-- src/locale/ru_RU/LC_MESSAGES/django.po | 6 +-- 14 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index d5faf1be4..76b0c8ab6 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Spanish</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index b47f696e8..46b3e3d10 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Español</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index c88ece3c5..f0aaab1f9 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Espagnol</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 50e851625..a30ad7cae 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Spagnolo</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 2c4a6e543..796ba8f62 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Spaans</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index cfa13a0ad..9a12e56a7 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Espanhol</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 1ec2b178f..5b0ad2a2a 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -168,7 +168,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">105</context> </context-group> - <target state="translated">АН</target> + <target state="translated">Архивный номер</target> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> @@ -184,7 +184,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> <context context-type="linenumber">117</context> </context-group> - <target state="translated">Заголовок</target> + <target state="translated">Название</target> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> @@ -464,7 +464,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Добро пожаловать в Paperless-ng,</target> + <target state="translated">Добро пожаловать в Paperless-ng!</target> </trans-unit> <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> <source>Dashboard</source> @@ -472,7 +472,7 @@ <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Панель</target> + <target state="translated">Главная</target> </trans-unit> <trans-unit id="93754014749412887" datatype="html"> <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> @@ -504,7 +504,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">8</context> </context-group> - <target state="translated">Отфильтровать по:</target> + <target state="translated">Фильтр по:</target> </trans-unit> <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> <source>Name</source> @@ -616,7 +616,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="translated">Использовать формат даты, соответсвующий языку</target> + <target state="translated">Использовать формат даты, соответствующий языку</target> </trans-unit> <trans-unit id="8488620293789898901" datatype="html"> <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -640,7 +640,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Основные настройки</target> + <target state="translated">Основные</target> </trans-unit> <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> <source>Notifications</source> @@ -656,7 +656,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">134</context> </context-group> - <target state="translated">Сохраненные представления</target> + <target state="translated">Представления</target> </trans-unit> <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> <source>Appearance</source> @@ -744,7 +744,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Использовать просмоторщик PDF встроенный в браузер</target> + <target state="translated">Использовать просмотрщик PDF встроенный в браузер</target> </trans-unit> <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> @@ -752,7 +752,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">87</context> </context-group> - <target state="translated">Это, обычно, более быстрый способо отображения больших PDF документов, но он может не работать в некоторых браузерах.</target> + <target state="translated">Это, обычно, более быстрый способ отображения больших PDF документов, но он может не работать в некоторых браузерах.</target> </trans-unit> <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> <source>Dark mode</source> @@ -824,7 +824,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">119</context> </context-group> - <target state="translated">Документ обрабатывается</target> + <target state="translated">Обработка документа</target> </trans-unit> <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> <source>Show notifications when new documents are detected</source> @@ -832,7 +832,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">123</context> </context-group> - <target state="translated"> Показывать уведомления, когда новый документ удалён</target> + <target state="translated">Показывать уведомления, когда новый документ удалён</target> </trans-unit> <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> <source>Show notifications when document processing completes successfully</source> @@ -840,7 +840,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">124</context> </context-group> - <target state="translated"> Показывать уведомления, когда обработка документа успешна</target> + <target state="translated">Показывать уведомления, когда обработка документа успешна</target> </trans-unit> <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> <source>Show notifications when document processing fails</source> @@ -848,7 +848,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">125</context> </context-group> - <target state="translated"> Показывать уведомления, когда обработка документа не удалась</target> + <target state="translated">Показывать уведомления, когда обработка документа не удалась</target> </trans-unit> <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> <source>Suppress notifications on dashboard</source> @@ -856,7 +856,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Спрятать уведомления на панели</target> + <target state="translated">Спрятать уведомления на главной</target> </trans-unit> <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> <source>This will suppress all messages about document processing status on the dashboard.</source> @@ -864,7 +864,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Это отключит все сообщения о статусе обработки документов на панели.</target> + <target state="translated">Это отключит все сообщения о статусе обработки документов на главной.</target> </trans-unit> <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> <source>Appears on</source> @@ -880,7 +880,7 @@ <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="linenumber">149</context> </context-group> - <target state="translated">Показать на панели</target> + <target state="translated">Показать на главной</target> </trans-unit> <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> <source>Show in sidebar</source> @@ -1129,7 +1129,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">154</context> </context-group> - <target state="translated">Админ</target> + <target state="translated">Администрирование</target> </trans-unit> <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> <source>Info</source> @@ -1145,7 +1145,7 @@ <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="linenumber">167</context> </context-group> - <target state="translated">Документация </target> + <target state="translated">Документация</target> </trans-unit> <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> <source>GitHub</source> @@ -1201,7 +1201,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">78</context> </context-group> - <target state="translated">Заголовок и содержимое</target> + <target state="translated">Название и содержимое</target> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> @@ -1265,7 +1265,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="translated">Заголовок: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">Название: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="1872523635812236432" datatype="html"> <source>ASN: <x id="PH" equiv-text="rule.value"/></source> @@ -1273,7 +1273,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">57</context> </context-group> - <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> + <target state="translated">Архивный номер: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1314,7 +1314,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="translated"> Не назначено</target> + <target state="translated">Не назначено</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1557,7 +1557,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">186</context> </context-group> - <target state="translated">Эта операция удалит тип из <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов</target> + <target state="translated">Эта операция удалит тип из <x id="PH" equiv-text="this.list.selected.size"/> выбранных документов.</target> </trans-unit> <trans-unit id="749430623564850405" datatype="html"> <source>Delete confirm</source> @@ -1741,7 +1741,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Перетащите документы сюда или</target> + <target state="translated">Перетащите документы или</target> </trans-unit> <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> <source>Browse files</source> @@ -1749,7 +1749,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Загрузить файлы</target> + <target state="translated">Загрузите файлы</target> </trans-unit> <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> <source>Dismiss completed</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="translated">Вы можете загрузить документы, перетащив их на панель загрузки файлов справа, либо положив их в каталог, указанный в настройках. После обработки документы появятся в списке документов. После того, как вы добавите метаданные в свои документы, используйте безбумажные механизмы фильтрации для создания пользовательских представлений (таких как «Недавно добавленные», «Tagged TODO»), и они появятся на панели управления вместо этого сообщения.</target> + <target state="translated">Вы можете загрузить документы, перетащив их на панель загрузки файлов справа, либо положив их в каталог, указанный в настройках. После обработки документы появятся в списке документов. После того, как вы добавите метаданные в свои документы, используйте безбумажные механизмы фильтрации для создания пользовательских представлений (таких как «Недавно добавленные», «Tagged TODO»), и они появятся здесь вместо этого сообщения.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1887,7 +1887,7 @@ <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">(без заголовка)</target> + <target state="translated">(без названия)</target> </trans-unit> <trans-unit id="1206520795340730278" datatype="html"> <source>English (US)</source> @@ -1959,7 +1959,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">98</context> </context-group> - <target state="needs-translation">Russian</target> + <target state="translated">Русский</target> </trans-unit> <trans-unit id="5190825892106392539" datatype="html"> <source>Spanish</source> @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">99</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Испанский</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -2000,7 +2000,7 @@ <context context-type="linenumber">17</context> </context-group> <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="translated">скрипт предобработки не существует.</target> + <target state="translated">Скрипт предобработки не существует.</target> </trans-unit> <trans-unit id="7742915911032564889" datatype="html"> <source>Error while executing pre-consume script.</source> @@ -2018,7 +2018,7 @@ <context context-type="linenumber">19</context> </context-group> <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> - <target state="translated">скрипт постобработки не существует.</target> + <target state="translated">Скрипт постобработки не существует.</target> </trans-unit> <trans-unit id="256773668518189604" datatype="html"> <source>Error while executing post-consume script.</source> diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 4880f22cc..90a8d2a90 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"PO-Revision-Date: 2021-03-14 20:04\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -442,7 +442,7 @@ msgstr "Russian" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Spanish" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 167a2d321..9f1a8a8b3 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:58\n" +"PO-Revision-Date: 2021-03-14 20:04\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -442,7 +442,7 @@ msgstr "Ruso" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Español" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index 2c1afc042..b157c8857 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:58\n" +"PO-Revision-Date: 2021-03-14 20:04\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -442,7 +442,7 @@ msgstr "Russe" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Espagnol" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index b5025ede3..a7d02824b 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"PO-Revision-Date: 2021-03-14 18:56\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -442,7 +442,7 @@ msgstr "Russo" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Spagnolo" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 3f7c14464..72dc77e0c 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"PO-Revision-Date: 2021-03-14 15:58\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -442,7 +442,7 @@ msgstr "Russisch" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Spaans" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index c65e0356a..4201d63b2 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"PO-Revision-Date: 2021-03-14 14:58\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -60,7 +60,7 @@ msgstr "algoritmo correspondente" #: documents/models.py:55 msgid "is insensitive" -msgstr "" +msgstr "é insensível" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" @@ -442,7 +442,7 @@ msgstr "Russo" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Espanhol" #: paperless/urls.py:118 msgid "Paperless-ng administration" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index cbc5a4a60..bf4d6ea7d 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"PO-Revision-Date: 2021-03-14 22:17\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -438,11 +438,11 @@ msgstr "Romanian" #: paperless/settings.py:306 msgid "Russian" -msgstr "" +msgstr "Русский" #: paperless/settings.py:307 msgid "Spanish" -msgstr "" +msgstr "Испанский" #: paperless/urls.py:118 msgid "Paperless-ng administration" From 4ccf4c91d7baca9ae0bb4373b9654798a4ab0cc9 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Mar 2021 08:38:47 -0700 Subject: [PATCH 629/898] Fix log container taller than viewport --- src-ui/src/app/components/manage/logs/logs.component.html | 2 +- src-ui/src/app/components/manage/logs/logs.component.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index 5b2d198c9..e631ff46e 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -11,7 +11,7 @@ <div [ngbNavOutlet]="nav" class="mt-2"></div> -<div class="bg-dark p-3 mb-3 text-light text-monospace log-container"> +<div class="bg-dark p-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" *ngFor="let log of logs">{{log}}</p> diff --git a/src-ui/src/app/components/manage/logs/logs.component.scss b/src-ui/src/app/components/manage/logs/logs.component.scss index aae238167..834c8c1cb 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.scss +++ b/src-ui/src/app/components/manage/logs/logs.component.scss @@ -17,7 +17,7 @@ .log-container { overflow-y: scroll; - height: calc(100vh - 190px); + height: calc(100vh - 200px); top: 70px; p { From 0659a6c93b97c557b818508f8c77122c2895d594 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Mar 2021 08:38:55 -0700 Subject: [PATCH 630/898] Reverse log order --- src-ui/src/app/components/manage/logs/logs.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index e631ff46e..fceac0f78 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -14,5 +14,5 @@ <div class="bg-dark p-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" - *ngFor="let log of logs">{{log}}</p> + *ngFor="let log of logs.reverse()">{{log}}</p> </div> From 9b0c3e1d939df8df961ac1b5313d64fe0e63a799 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Mar 2021 08:42:10 -0700 Subject: [PATCH 631/898] Side effecting --- src-ui/src/app/components/manage/logs/logs.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index fceac0f78..caa4ca23b 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -14,5 +14,5 @@ <div class="bg-dark p-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" - *ngFor="let log of logs.reverse()">{{log}}</p> + *ngFor="let log of logs.slice().reverse()">{{log}}</p> </div> From 5839a84038ee71570a1d2c0b7c9e857f0e9d1678 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Mar 2021 08:45:30 -0700 Subject: [PATCH 632/898] Revert "Side effecting" This reverts commit 316a2469b82bc9311e9a56a0b30717a045e63584. --- src-ui/src/app/components/manage/logs/logs.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index caa4ca23b..fceac0f78 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -14,5 +14,5 @@ <div class="bg-dark p-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" - *ngFor="let log of logs.slice().reverse()">{{log}}</p> + *ngFor="let log of logs.reverse()">{{log}}</p> </div> From 2bbcf600da0472b2107f45efc4b72d36573025b6 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Mar 2021 08:45:33 -0700 Subject: [PATCH 633/898] Revert "Reverse log order" This reverts commit 2e21fbf61991a66be247f73fa2051d7f02206724. --- src-ui/src/app/components/manage/logs/logs.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index fceac0f78..e631ff46e 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -14,5 +14,5 @@ <div class="bg-dark p-3 text-light text-monospace log-container"> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" - *ngFor="let log of logs.reverse()">{{log}}</p> + *ngFor="let log of logs">{{log}}</p> </div> From 7d56b302a7c830452adda5eb75a6c4908c924646 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 15 Mar 2021 09:56:17 -0700 Subject: [PATCH 634/898] Automatically scroll log ouput --- .../manage/logs/logs.component.html | 2 +- .../components/manage/logs/logs.component.ts | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.html b/src-ui/src/app/components/manage/logs/logs.component.html index e631ff46e..0633daf32 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.html +++ b/src-ui/src/app/components/manage/logs/logs.component.html @@ -11,7 +11,7 @@ <div [ngbNavOutlet]="nav" class="mt-2"></div> -<div class="bg-dark p-3 text-light text-monospace log-container"> +<div class="bg-dark p-3 text-light text-monospace log-container" #logContainer> <p class="m-0 p-0 log-entry-{{getLogLevel(log)}}" *ngFor="let log of logs">{{log}}</p> diff --git a/src-ui/src/app/components/manage/logs/logs.component.ts b/src-ui/src/app/components/manage/logs/logs.component.ts index d77fcde4a..fd99abc2a 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.ts +++ b/src-ui/src/app/components/manage/logs/logs.component.ts @@ -1,4 +1,4 @@ -import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, AfterViewChecked, ViewChild } from '@angular/core'; import { LogService } from 'src/app/services/rest/log.service'; @Component({ @@ -6,7 +6,7 @@ import { LogService } from 'src/app/services/rest/log.service'; templateUrl: './logs.component.html', styleUrls: ['./logs.component.scss'] }) -export class LogsComponent implements OnInit { +export class LogsComponent implements AfterViewChecked { constructor(private logService: LogService) { } @@ -16,6 +16,8 @@ export class LogsComponent implements OnInit { activeLog: string + @ViewChild('logContainer') logContainer: ElementRef + ngOnInit(): void { this.logService.list().subscribe(result => { this.logFiles = result @@ -26,9 +28,14 @@ export class LogsComponent implements OnInit { }) } + ngAfterViewChecked() { + this.scrollToBottom(); + } + reloadLogs() { this.logService.get(this.activeLog).subscribe(result => { this.logs = result + this.scrollToBottom() }, error => { this.logs = [] }) @@ -48,4 +55,12 @@ export class LogsComponent implements OnInit { } } + scrollToBottom(): void { + this.logContainer?.nativeElement.scroll({ + top: this.logContainer.nativeElement.scrollHeight, + left: 0, + behavior: 'auto' + }); + } + } From bb74404ffabdb46d009ca5a747f7ac092e7c2f63 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 16 Mar 2021 10:40:38 +0100 Subject: [PATCH 635/898] New Crowdin updates (#776) --- src-ui/src/locale/messages.it_IT.xlf | 10 +++++----- src/locale/ru_RU/LC_MESSAGES/django.po | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index a30ad7cae..598d25095 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -528,7 +528,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">21</context> </context-group> - <target state="translated">Corrispondenza</target> + <target state="translated">Assegnazione</target> </trans-unit> <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> <source>Document count</source> @@ -928,7 +928,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Ultrima corrispondenza</target> + <target state="translated">Ultima assegnazione</target> </trans-unit> <trans-unit id="1234709746630139322" datatype="html"> <source>Confirmation</source> @@ -976,7 +976,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Algoritmo di corrispondenza</target> + <target state="translated">Algoritmo di assegnazione</target> </trans-unit> <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> <source>Matching pattern</source> @@ -984,7 +984,7 @@ <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> <context context-type="linenumber">11</context> </context-group> - <target state="translated">Criterio di corrispondenza</target> + <target state="translated">Criterio di assegnazione</target> </trans-unit> <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> <source>Case insensitive</source> @@ -2291,7 +2291,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">17</context> </context-group> - <target state="translated">Automatico: apprende automaticamente la corrispondenza</target> + <target state="translated">Automatico: apprende l'assegnazione automaticamente</target> </trans-unit> </body> </file> diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index bf4d6ea7d..628bbfa15 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 22:17\n" +"PO-Revision-Date: 2021-03-15 17:33\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -328,11 +328,11 @@ msgstr "не имеет тега" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "не имеет архивного номера" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "Название или содержимое включает" #: documents/models.py:400 msgid "rule type" From 0b5be965a61d3fcf59ea3b706c5023cdf1e80ba5 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 16 Mar 2021 03:06:20 -0700 Subject: [PATCH 636/898] =?UTF-8?q?Don=E2=80=99t=20remove=20OnInit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-ui/src/app/components/manage/logs/logs.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.ts b/src-ui/src/app/components/manage/logs/logs.component.ts index fd99abc2a..54f8294c9 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.ts +++ b/src-ui/src/app/components/manage/logs/logs.component.ts @@ -1,4 +1,4 @@ -import { Component, ElementRef, AfterViewChecked, ViewChild } from '@angular/core'; +import { Component, ElementRef, OnInit, AfterViewChecked, ViewChild } from '@angular/core'; import { LogService } from 'src/app/services/rest/log.service'; @Component({ @@ -6,7 +6,7 @@ import { LogService } from 'src/app/services/rest/log.service'; templateUrl: './logs.component.html', styleUrls: ['./logs.component.scss'] }) -export class LogsComponent implements AfterViewChecked { +export class LogsComponent implements OnInit, AfterViewChecked { constructor(private logService: LogService) { } From 2728f8eb9f86f944b3089808e40caf3e9b56b540 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 16 Mar 2021 03:08:48 -0700 Subject: [PATCH 637/898] Redundant call to scroll --- src-ui/src/app/components/manage/logs/logs.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src-ui/src/app/components/manage/logs/logs.component.ts b/src-ui/src/app/components/manage/logs/logs.component.ts index 54f8294c9..26ceb5c57 100644 --- a/src-ui/src/app/components/manage/logs/logs.component.ts +++ b/src-ui/src/app/components/manage/logs/logs.component.ts @@ -35,7 +35,6 @@ export class LogsComponent implements OnInit, AfterViewChecked { reloadLogs() { this.logService.get(this.activeLog).subscribe(result => { this.logs = result - this.scrollToBottom() }, error => { this.logs = [] }) From 536fdd7b449fa7955caf40bab99ebb08e779eadc Mon Sep 17 00:00:00 2001 From: isaacsando <isaac@sandofarms.com> Date: Tue, 16 Mar 2021 11:16:48 -0500 Subject: [PATCH 638/898] update advanced_usage.rst to remove wording regarding filename parsing --- docs/advanced_usage.rst | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst index c64df4317..b7d46e063 100644 --- a/docs/advanced_usage.rst +++ b/docs/advanced_usage.rst @@ -10,14 +10,13 @@ easier. Matching tags, correspondents and document types ################################################ -After the consumer has tried to figure out what it could from the file name, -it starts looking at the content of the document itself. It will compare the -matching algorithms defined by every tag and correspondent already set in your -database to see if they apply to the text in that document. In other words, -if you defined a tag called ``Home Utility`` that had a ``match`` property of -``bc hydro`` and a ``matching_algorithm`` of ``literal``, Paperless will -automatically tag your newly-consumed document with your ``Home Utility`` tag -so long as the text ``bc hydro`` appears in the body of the document somewhere. +Paperless will compare the matching algorithms defined by every tag and +correspondent already set in your database to see if they apply to the text in +a document. In other words, if you defined a tag called ``Home Utility`` +that had a ``match`` property of ``bc hydro`` and a ``matching_algorithm`` of +``literal``, Paperless will automatically tag your newly-consumed document with +your ``Home Utility`` tag so long as the text ``bc hydro`` appears in the body +of the document somewhere. The matching logic is quite powerful, and supports searching the text of your document with different algorithms, and as such, some experimentation may be From f5f09f07221cae01de293f4761f0eabf30781e6d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 16 Mar 2021 20:47:45 +0100 Subject: [PATCH 639/898] API refactoring --- src/documents/views.py | 53 ++++-------------------------------------- 1 file changed, 5 insertions(+), 48 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index a3f495d50..7b282dfb7 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -18,6 +18,7 @@ from django_q.tasks import async_task from rest_framework import parsers from rest_framework.decorators import action from rest_framework.filters import OrderingFilter, SearchFilter +from rest_framework.generics import GenericAPIView from rest_framework.mixins import ( DestroyModelMixin, ListModelMixin, @@ -366,23 +367,12 @@ class SavedViewViewSet(ModelViewSet): serializer.save(user=self.request.user) -class BulkEditView(APIView): +class BulkEditView(GenericAPIView): permission_classes = (IsAuthenticated,) serializer_class = BulkEditSerializer parser_classes = (parsers.JSONParser,) - def get_serializer_context(self): - return { - 'request': self.request, - 'format': self.format_kwarg, - 'view': self - } - - def get_serializer(self, *args, **kwargs): - kwargs['context'] = self.get_serializer_context() - return self.serializer_class(*args, **kwargs) - def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -399,23 +389,12 @@ class BulkEditView(APIView): return HttpResponseBadRequest(str(e)) -class PostDocumentView(APIView): +class PostDocumentView(GenericAPIView): permission_classes = (IsAuthenticated,) serializer_class = PostDocumentSerializer parser_classes = (parsers.MultiPartParser,) - def get_serializer_context(self): - return { - 'request': self.request, - 'format': self.format_kwarg, - 'view': self - } - - def get_serializer(self, *args, **kwargs): - kwargs['context'] = self.get_serializer_context() - return self.serializer_class(*args, **kwargs) - def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) @@ -453,23 +432,12 @@ class PostDocumentView(APIView): return Response("OK") -class SelectionDataView(APIView): +class SelectionDataView(GenericAPIView): permission_classes = (IsAuthenticated,) serializer_class = DocumentListSerializer parser_classes = (parsers.MultiPartParser, parsers.JSONParser) - def get_serializer_context(self): - return { - 'request': self.request, - 'format': self.format_kwarg, - 'view': self - } - - def get_serializer(self, *args, **kwargs): - kwargs['context'] = self.get_serializer_context() - return self.serializer_class(*args, **kwargs) - def post(self, request, format=None): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -620,23 +588,12 @@ class StatisticsView(APIView): }) -class BulkDownloadView(APIView): +class BulkDownloadView(GenericAPIView): permission_classes = (IsAuthenticated,) serializer_class = BulkDownloadSerializer parser_classes = (parsers.JSONParser,) - def get_serializer_context(self): - return { - 'request': self.request, - 'format': self.format_kwarg, - 'view': self - } - - def get_serializer(self, *args, **kwargs): - kwargs['context'] = self.get_serializer_context() - return self.serializer_class(*args, **kwargs) - def post(self, request, format=None): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) From 7aba0aa859606d3ec765a20045f1d67f1fc574b4 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 02:14:43 +0100 Subject: [PATCH 640/898] New Crowdin updates (#787) --- src/locale/pt_PT/LC_MESSAGES/django.po | 120 ++++++++++++------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 4201d63b2..8584309ec 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 14:58\n" +"PO-Revision-Date: 2021-03-16 22:35\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -124,19 +124,19 @@ msgstr "" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "soma de verificação" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "" +msgstr "A soma de verificação do documento original." #: documents/models.py:163 msgid "archive checksum" -msgstr "" +msgstr "arquivar soma de verificação" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "" +msgstr "A soma de verificação do documento arquivado." #: documents/models.py:172 documents/models.py:328 msgid "created" @@ -160,19 +160,19 @@ msgstr "nome de ficheiro" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "" +msgstr "Nome do arquivo atual no armazenamento" #: documents/models.py:202 msgid "archive filename" -msgstr "" +msgstr "nome do ficheiro de arquivo" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "" +msgstr "Nome do arquivo atual em no armazenamento" #: documents/models.py:212 msgid "archive serial number" -msgstr "" +msgstr "numero de série de arquivo" #: documents/models.py:217 msgid "The position of this document in your physical document archive." @@ -228,11 +228,11 @@ msgstr "registos" #: documents/models.py:344 documents/models.py:396 msgid "saved view" -msgstr "" +msgstr "vista guardada" #: documents/models.py:345 msgid "saved views" -msgstr "" +msgstr "vistas guardadas" #: documents/models.py:348 msgid "user" @@ -244,23 +244,23 @@ msgstr "exibir no painel de controlo" #: documents/models.py:357 msgid "show in sidebar" -msgstr "" +msgstr "mostrar na navegação lateral" #: documents/models.py:361 msgid "sort field" -msgstr "" +msgstr "ordenar campo" #: documents/models.py:364 msgid "sort reverse" -msgstr "" +msgstr "ordenar inversamente" #: documents/models.py:370 msgid "title contains" -msgstr "" +msgstr "o título contém" #: documents/models.py:371 msgid "content contains" -msgstr "" +msgstr "o conteúdo contém" #: documents/models.py:372 msgid "ASN is" @@ -268,11 +268,11 @@ msgstr "" #: documents/models.py:373 msgid "correspondent is" -msgstr "" +msgstr "o correspondente é" #: documents/models.py:374 msgid "document type is" -msgstr "" +msgstr "o tipo de documento é" #: documents/models.py:375 msgid "is in inbox" @@ -280,51 +280,51 @@ msgstr "" #: documents/models.py:376 msgid "has tag" -msgstr "" +msgstr "tem etiqueta" #: documents/models.py:377 msgid "has any tag" -msgstr "" +msgstr "tem qualquer etiqueta" #: documents/models.py:378 msgid "created before" -msgstr "" +msgstr "criado antes" #: documents/models.py:379 msgid "created after" -msgstr "" +msgstr "criado depois" #: documents/models.py:380 msgid "created year is" -msgstr "" +msgstr "ano criada é" #: documents/models.py:381 msgid "created month is" -msgstr "" +msgstr "mês criado é" #: documents/models.py:382 msgid "created day is" -msgstr "" +msgstr "dia criado é" #: documents/models.py:383 msgid "added before" -msgstr "" +msgstr "adicionada antes" #: documents/models.py:384 msgid "added after" -msgstr "" +msgstr "adicionado depois de" #: documents/models.py:385 msgid "modified before" -msgstr "" +msgstr "modificado antes de" #: documents/models.py:386 msgid "modified after" -msgstr "" +msgstr "modificado depois de" #: documents/models.py:387 msgid "does not have tag" -msgstr "" +msgstr "não tem etiqueta" #: documents/models.py:388 msgid "does not have ASN" @@ -332,61 +332,61 @@ msgstr "" #: documents/models.py:389 msgid "title or content contains" -msgstr "" +msgstr "título ou conteúdo contém" #: documents/models.py:400 msgid "rule type" -msgstr "" +msgstr "tipo de regra" #: documents/models.py:404 msgid "value" -msgstr "" +msgstr "valor" #: documents/models.py:410 msgid "filter rule" -msgstr "" +msgstr "regra de filtragem" #: documents/models.py:411 msgid "filter rules" -msgstr "" +msgstr "regras de filtragem" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expression: %(error)s" -msgstr "" +msgstr "Expressão regular inválida: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." -msgstr "" +msgstr "Cor invalida." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "Tipo de arquivo %(type)s não suportado" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "" +msgstr "O paperless-ng está a carregar..." #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" -msgstr "" +msgstr "Paperless-ng com sessão terminada" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "Terminou a sessão com sucesso. Adeus!" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "" +msgstr "Iniciar sessão novamente" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" -msgstr "" +msgstr "Inicio de sessão Paperless-ng" #: documents/templates/registration/login.html:42 msgid "Please sign in." -msgstr "" +msgstr "Por favor inicie sessão." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." @@ -394,15 +394,15 @@ msgstr "" #: documents/templates/registration/login.html:48 msgid "Username" -msgstr "" +msgstr "Nome de utilizador" #: documents/templates/registration/login.html:49 msgid "Password" -msgstr "" +msgstr "Palavra-passe" #: documents/templates/registration/login.html:54 msgid "Sign in" -msgstr "" +msgstr "Iniciar sessão" #: paperless/settings.py:298 msgid "English (US)" @@ -426,15 +426,15 @@ msgstr "Français" #: paperless/settings.py:303 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "Português (Brasil)" #: paperless/settings.py:304 msgid "Italian" -msgstr "" +msgstr "Italiano" #: paperless/settings.py:305 msgid "Romanian" -msgstr "" +msgstr "Romeno" #: paperless/settings.py:306 msgid "Russian" @@ -446,11 +446,11 @@ msgstr "Espanhol" #: paperless/urls.py:118 msgid "Paperless-ng administration" -msgstr "" +msgstr "Administração do Paperless-ng" #: paperless_mail/admin.py:25 msgid "Filter" -msgstr "" +msgstr "Filtro" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." @@ -602,35 +602,35 @@ msgstr "" #: paperless_mail/models.py:138 msgid "filter attachment filename" -msgstr "" +msgstr "filtrar nome do arquivo anexo" #: paperless_mail/models.py:140 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "Consumir apenas documentos que correspondam inteiramente ao nome de arquivo se especificado. Genéricos como *.pdf ou *fatura* são permitidos. Não é sensível a letras maiúsculas/minúsculas." #: paperless_mail/models.py:146 msgid "maximum age" -msgstr "" +msgstr "idade máxima" #: paperless_mail/models.py:148 msgid "Specified in days." -msgstr "" +msgstr "Especificado em dias." #: paperless_mail/models.py:151 msgid "attachment type" -msgstr "" +msgstr "tipo de anexo" #: paperless_mail/models.py:154 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "Anexos embutidos incluem imagens incorporadas, por isso é melhor combinar esta opção com um filtro de nome do arquivo." #: paperless_mail/models.py:159 msgid "action" -msgstr "" +msgstr "ação" #: paperless_mail/models.py:165 msgid "action parameter" -msgstr "" +msgstr "parâmetro de ação" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." From 5b49524d515742015a4e7285ca7fad42af9e7d1f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:25:22 +0100 Subject: [PATCH 641/898] lots of changes for the new unified search --- src-ui/src/app/app-routing.module.ts | 2 - src-ui/src/app/app.module.ts | 4 - .../app-frame/app-frame.component.ts | 5 +- .../document-detail.component.ts | 3 +- .../document-card-large.component.html | 10 +- .../document-card-large.component.scss | 5 + .../document-card-large.component.ts | 28 +- .../document-list.component.html | 2 +- .../document-list/document-list.component.ts | 7 + .../filter-editor.component.html | 4 +- .../filter-editor/filter-editor.component.ts | 47 ++- .../result-highlight.component.html | 3 - .../result-highlight.component.scss | 4 - .../result-highlight.component.spec.ts | 25 -- .../result-highlight.component.ts | 19 -- .../components/search/search.component.html | 26 -- .../components/search/search.component.scss | 15 - .../search/search.component.spec.ts | 25 -- .../app/components/search/search.component.ts | 95 ------ src-ui/src/app/data/filter-rule-type.ts | 9 +- src-ui/src/app/data/paperless-document.ts | 11 + src-ui/src/app/data/search-result.ts | 29 -- .../services/document-list-view.service.ts | 12 +- .../src/app/services/rest/search.service.ts | 27 +- src/documents/index.py | 289 ++++++++++-------- src/documents/models.py | 7 +- src/documents/tests/test_index.py | 10 - src/documents/views.py | 117 +++---- src/paperless/urls.py | 5 - 29 files changed, 302 insertions(+), 543 deletions(-) delete mode 100644 src-ui/src/app/components/search/result-highlight/result-highlight.component.html delete mode 100644 src-ui/src/app/components/search/result-highlight/result-highlight.component.scss delete mode 100644 src-ui/src/app/components/search/result-highlight/result-highlight.component.spec.ts delete mode 100644 src-ui/src/app/components/search/result-highlight/result-highlight.component.ts delete mode 100644 src-ui/src/app/components/search/search.component.html delete mode 100644 src-ui/src/app/components/search/search.component.scss delete mode 100644 src-ui/src/app/components/search/search.component.spec.ts delete mode 100644 src-ui/src/app/components/search/search.component.ts delete mode 100644 src-ui/src/app/data/search-result.ts diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index 27f0629b4..89fec9eac 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -10,7 +10,6 @@ import { LogsComponent } from './components/manage/logs/logs.component'; import { SettingsComponent } from './components/manage/settings/settings.component'; import { TagListComponent } from './components/manage/tag-list/tag-list.component'; import { NotFoundComponent } from './components/not-found/not-found.component'; -import { SearchComponent } from './components/search/search.component'; const routes: Routes = [ {path: '', redirectTo: 'dashboard', pathMatch: 'full'}, @@ -18,7 +17,6 @@ const routes: Routes = [ {path: 'dashboard', component: DashboardComponent }, {path: 'documents', component: DocumentListComponent }, {path: 'view/:id', component: DocumentListComponent }, - {path: 'search', component: SearchComponent }, {path: 'documents/:id', component: DocumentDetailComponent }, {path: 'tags', component: TagListComponent }, diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index c364424ad..cf149b785 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -21,8 +21,6 @@ import { CorrespondentEditDialogComponent } from './components/manage/correspond import { TagEditDialogComponent } from './components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component'; import { DocumentTypeEditDialogComponent } from './components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component'; import { TagComponent } from './components/common/tag/tag.component'; -import { SearchComponent } from './components/search/search.component'; -import { ResultHighlightComponent } from './components/search/result-highlight/result-highlight.component'; import { PageHeaderComponent } from './components/common/page-header/page-header.component'; import { AppFrameComponent } from './components/app-frame/app-frame.component'; import { ToastsComponent } from './components/common/toasts/toasts.component'; @@ -104,8 +102,6 @@ registerLocaleData(localeEs) TagEditDialogComponent, DocumentTypeEditDialogComponent, TagComponent, - SearchComponent, - ResultHighlightComponent, PageHeaderComponent, AppFrameComponent, ToastsComponent, diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index e360e7567..f8e76f0ae 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -10,6 +10,8 @@ import { SearchService } from 'src/app/services/rest/search.service'; import { environment } from 'src/environments/environment'; import { DocumentDetailComponent } from '../document-detail/document-detail.component'; import { Meta } from '@angular/platform-browser'; +import { DocumentListViewService } from 'src/app/services/document-list-view.service'; +import { FILTER_FULLTEXT_QUERY } from 'src/app/data/filter-rule-type'; @Component({ selector: 'app-app-frame', @@ -24,6 +26,7 @@ export class AppFrameComponent implements OnInit { private openDocumentsService: OpenDocumentsService, private searchService: SearchService, public savedViewService: SavedViewService, + private list: DocumentListViewService, private meta: Meta ) { @@ -74,7 +77,7 @@ export class AppFrameComponent implements OnInit { search() { this.closeMenu() - this.router.navigate(['search'], {queryParams: {query: this.searchField.value}}) + this.list.quickFilter([{rule_type: FILTER_FULLTEXT_QUERY, value: this.searchField.value}]) } closeDocument(d: PaperlessDocument) { diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index af98a6f7f..fee707b22 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -20,6 +20,7 @@ import { ToastService } from 'src/app/services/toast.service'; import { TextComponent } from '../common/input/text/text.component'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions'; +import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'; @Component({ selector: 'app-document-detail', @@ -219,7 +220,7 @@ export class DocumentDetailComponent implements OnInit { } moreLike() { - this.router.navigate(["search"], {queryParams: {more_like:this.document.id}}) + this.documentListViewService.quickFilter([{rule_type: FILTER_FULLTEXT_MORELIKE, value: this.documentId.toString()}]) } hasNext() { diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 119960386..f3037b4fc 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -25,14 +25,14 @@ </h5> </div> <p class="card-text"> - <app-result-highlight *ngIf="getDetailsAsHighlight()" class="result-content" [highlights]="getDetailsAsHighlight()"></app-result-highlight> - <span *ngIf="getDetailsAsString()" class="result-content">{{getDetailsAsString()}}</span> + <span *ngIf="document.__search_hit__" [innerHtml]="document.__search_hit__.highlights"></span> + <span *ngIf="!document.__search_hit__" class="result-content">{{contentTrimmed}}</span> </p> <div class="d-flex flex-column flex-md-row align-items-md-center"> <div class="btn-group"> - <a routerLink="/search" [queryParams]="{'more_like': document.id}" class="btn btn-sm btn-outline-secondary" *ngIf="moreLikeThis"> + <a class="btn btn-sm btn-outline-secondary" (click)="clickMoreLike.emit()"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-three-dots" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M3 9.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/> </svg> <span class="d-block d-md-inline" i18n>More like this</span> @@ -62,9 +62,9 @@ </div> <div class="list-group list-group-horizontal border-0 card-info ml-md-auto mt-2 mt-md-0"> - <div *ngIf="searchScore" class="list-group-item bg-light text-dark p-1 mr-5 border-0 d-flex search-score"> + <div *ngIf="document.__search_hit__" class="list-group-item bg-light text-dark p-1 mr-5 border-0 d-flex search-score"> <small class="text-muted" i18n>Score:</small> - <ngb-progressbar [type]="searchScoreClass" [value]="searchScore" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> + <ngb-progressbar [type]="searchScoreClass" [value]="document.__search_hit__.score" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> </div> <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 mr-2" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 9507ab42a..1074283e9 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -60,3 +60,8 @@ padding-top: 0.35rem !important; } } + +span ::ng-deep .match { + color: black; + background-color: rgb(255, 211, 66); +} \ No newline at end of file diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index da147c07b..0b7b7d793 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -4,6 +4,8 @@ import { PaperlessDocument } from 'src/app/data/paperless-document'; import { DocumentService } from 'src/app/services/rest/document.service'; import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; import { NgbPopover } from '@ng-bootstrap/ng-bootstrap'; +import { DocumentListViewService } from 'src/app/services/document-list-view.service'; +import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'; @Component({ selector: 'app-document-card-large', @@ -24,15 +26,9 @@ export class DocumentCardLargeComponent implements OnInit { return this.toggleSelected.observers.length > 0 } - @Input() - moreLikeThis: boolean = false - @Input() document: PaperlessDocument - @Input() - details: any - @Output() clickTag = new EventEmitter<number>() @@ -42,6 +38,9 @@ export class DocumentCardLargeComponent implements OnInit { @Output() clickDocumentType = new EventEmitter<number>() + @Output() + clickMoreLike= new EventEmitter() + @Input() searchScore: number @@ -67,19 +66,6 @@ export class DocumentCardLargeComponent implements OnInit { return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED) } - getDetailsAsString() { - if (typeof this.details === 'string') { - return this.details.substring(0, 500) - } - } - - getDetailsAsHighlight() { - //TODO: this is not an exact typecheck, can we do better - if (this.details instanceof Array) { - return this.details - } - } - getThumbUrl() { return this.documentService.getThumbUrl(this.document.id) } @@ -116,4 +102,8 @@ export class DocumentCardLargeComponent implements OnInit { mouseLeaveCard() { this.popover.close() } + + get contentTrimmed() { + return this.document.content.substr(0, 500) + } } diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 53f3e662c..63900b399 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -90,7 +90,7 @@ </div> <div *ngIf="displayMode == 'largeCards'"> - <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" [details]="d.content" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)"> + <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)" (clickMoreLike)="clickMoreLike(d.id)"> </app-document-card-large> </div> diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index cf7afb845..c0ad354ba 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -207,6 +207,13 @@ export class DocumentListComponent implements OnInit, OnDestroy { }) } + clickMoreLike(documentID: number) { + this.list.selectNone() + setTimeout(() => { + //this.filterEditor.moreLikeThis(doc) + }) + } + trackByDocumentId(index, item: PaperlessDocument) { return item.id } diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html index 7290354eb..490eed95d 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html @@ -1,7 +1,6 @@ <div class="row"> <div class="col mb-2 mb-xl-0"> <div class="form-inline d-flex align-items-center"> - <label class="text-muted mr-2 mb-0" i18n>Filter by:</label> <div class="input-group input-group-sm flex-fill w-auto"> <div class="input-group-prepend" ngbDropdown> <button class="btn btn-outline-primary" ngbDropdownToggle>{{textFilterTargetName}}</button> @@ -9,7 +8,8 @@ <button *ngFor="let t of textFilterTargets" ngbDropdownItem [class.active]="textFilterTarget == t.id" (click)="changeTextFilterTarget(t.id)">{{t.name}}</button> </div> </div> - <input class="form-control form-control-sm" type="text" [(ngModel)]="textFilter"> + <input class="form-control form-control-sm" type="text" [(ngModel)]="textFilter" *ngIf="textFilterTarget != 'fulltext-morelike'"> + <span class="form-control form-control-sm text-truncate" *ngIf="textFilterTarget == 'fulltext-morelike'">{{_moreLikeDoc?.title}}</span> </div> </div> </div> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 43387c08f..3b645ec97 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -8,13 +8,17 @@ import { DocumentTypeService } from 'src/app/services/rest/document-type.service import { TagService } from 'src/app/services/rest/tag.service'; import { CorrespondentService } from 'src/app/services/rest/correspondent.service'; import { FilterRule } from 'src/app/data/filter-rule'; -import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_ASN, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE, FILTER_TITLE_CONTENT } from 'src/app/data/filter-rule-type'; +import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_ASN, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_FULLTEXT_MORELIKE, FILTER_FULLTEXT_QUERY, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE, FILTER_TITLE_CONTENT } from 'src/app/data/filter-rule-type'; import { FilterableDropdownSelectionModel } from '../../common/filterable-dropdown/filterable-dropdown.component'; import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'; +import { DocumentService } from 'src/app/services/rest/document.service'; +import { PaperlessDocument } from 'src/app/data/paperless-document'; const TEXT_FILTER_TARGET_TITLE = "title" const TEXT_FILTER_TARGET_TITLE_CONTENT = "title-content" const TEXT_FILTER_TARGET_ASN = "asn" +const TEXT_FILTER_TARGET_FULLTEXT_QUERY = "fulltext-query" +const TEXT_FILTER_TARGET_FULLTEXT_MORELIKE = "fulltext-morelike" @Component({ selector: 'app-filter-editor', @@ -64,7 +68,8 @@ export class FilterEditorComponent implements OnInit, OnDestroy { constructor( private documentTypeService: DocumentTypeService, private tagService: TagService, - private correspondentService: CorrespondentService + private correspondentService: CorrespondentService, + private documentService: DocumentService ) { } tags: PaperlessTag[] = [] @@ -72,12 +77,21 @@ export class FilterEditorComponent implements OnInit, OnDestroy { documentTypes: PaperlessDocumentType[] = [] _textFilter = "" + _moreLikeId: number + _moreLikeDoc: PaperlessDocument - textFilterTargets = [ - {id: TEXT_FILTER_TARGET_TITLE, name: $localize`Title`}, - {id: TEXT_FILTER_TARGET_TITLE_CONTENT, name: $localize`Title & content`}, - {id: TEXT_FILTER_TARGET_ASN, name: $localize`ASN`} - ] + get textFilterTargets() { + let targets = [ + {id: TEXT_FILTER_TARGET_TITLE, name: $localize`Title`}, + {id: TEXT_FILTER_TARGET_TITLE_CONTENT, name: $localize`Title & content`}, + {id: TEXT_FILTER_TARGET_ASN, name: $localize`ASN`}, + {id: TEXT_FILTER_TARGET_FULLTEXT_QUERY, name: $localize`Fulltext search`} + ] + if (this.textFilterTarget == TEXT_FILTER_TARGET_FULLTEXT_MORELIKE) { + targets.push({id: TEXT_FILTER_TARGET_FULLTEXT_MORELIKE, name: $localize`More like`}) + } + return targets + } textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT @@ -101,6 +115,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this.tagSelectionModel.clear(false) this.correspondentSelectionModel.clear(false) this._textFilter = null + this._moreLikeId = null this.dateAddedBefore = null this.dateAddedAfter = null this.dateCreatedBefore = null @@ -120,6 +135,17 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this._textFilter = rule.value this.textFilterTarget = TEXT_FILTER_TARGET_ASN break + case FILTER_FULLTEXT_QUERY: + this._textFilter = rule.value + this.textFilterTarget = TEXT_FILTER_TARGET_FULLTEXT_QUERY + break + case FILTER_FULLTEXT_MORELIKE: + this._moreLikeId = +rule.value + this.textFilterTarget = TEXT_FILTER_TARGET_FULLTEXT_MORELIKE + this.documentService.get(this._moreLikeId).subscribe(result => { + this._moreLikeDoc = result + }) + break case FILTER_CREATED_AFTER: this.dateCreatedAfter = rule.value break @@ -159,6 +185,12 @@ export class FilterEditorComponent implements OnInit, OnDestroy { if (this._textFilter && this.textFilterTarget == TEXT_FILTER_TARGET_ASN) { filterRules.push({rule_type: FILTER_ASN, value: this._textFilter}) } + if (this._textFilter && this.textFilterTarget == TEXT_FILTER_TARGET_FULLTEXT_QUERY) { + filterRules.push({rule_type: FILTER_FULLTEXT_QUERY, value: this._textFilter}) + } + if (this._moreLikeId && this.textFilterTarget == TEXT_FILTER_TARGET_FULLTEXT_MORELIKE) { + filterRules.push({rule_type: FILTER_FULLTEXT_MORELIKE, value: this._moreLikeId?.toString()}) + } if (this.tagSelectionModel.isNoneSelected()) { filterRules.push({rule_type: FILTER_HAS_ANY_TAG, value: "false"}) } else { @@ -232,6 +264,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { } resetSelected() { + this.textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT this.reset.next() } diff --git a/src-ui/src/app/components/search/result-highlight/result-highlight.component.html b/src-ui/src/app/components/search/result-highlight/result-highlight.component.html deleted file mode 100644 index 5dc5baa94..000000000 --- a/src-ui/src/app/components/search/result-highlight/result-highlight.component.html +++ /dev/null @@ -1,3 +0,0 @@ -... <span *ngFor="let fragment of highlights"> - <span *ngFor="let token of fragment" [class.match]="token.highlight">{{token.text}}</span> ... -</span> \ No newline at end of file diff --git a/src-ui/src/app/components/search/result-highlight/result-highlight.component.scss b/src-ui/src/app/components/search/result-highlight/result-highlight.component.scss deleted file mode 100644 index e04dd13b2..000000000 --- a/src-ui/src/app/components/search/result-highlight/result-highlight.component.scss +++ /dev/null @@ -1,4 +0,0 @@ -.match { - color: black; - background-color: rgb(255, 211, 66); -} \ No newline at end of file diff --git a/src-ui/src/app/components/search/result-highlight/result-highlight.component.spec.ts b/src-ui/src/app/components/search/result-highlight/result-highlight.component.spec.ts deleted file mode 100644 index 8e00a9d0b..000000000 --- a/src-ui/src/app/components/search/result-highlight/result-highlight.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ResultHighlightComponent } from './result-highlight.component'; - -describe('ResultHighlightComponent', () => { - let component: ResultHighlightComponent; - let fixture: ComponentFixture<ResultHighlightComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ ResultHighlightComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ResultHighlightComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src-ui/src/app/components/search/result-highlight/result-highlight.component.ts b/src-ui/src/app/components/search/result-highlight/result-highlight.component.ts deleted file mode 100644 index d9a1a50b1..000000000 --- a/src-ui/src/app/components/search/result-highlight/result-highlight.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { SearchHitHighlight } from 'src/app/data/search-result'; - -@Component({ - selector: 'app-result-highlight', - templateUrl: './result-highlight.component.html', - styleUrls: ['./result-highlight.component.scss'] -}) -export class ResultHighlightComponent implements OnInit { - - constructor() { } - - @Input() - highlights: SearchHitHighlight[][] - - ngOnInit(): void { - } - -} diff --git a/src-ui/src/app/components/search/search.component.html b/src-ui/src/app/components/search/search.component.html deleted file mode 100644 index f794a0feb..000000000 --- a/src-ui/src/app/components/search/search.component.html +++ /dev/null @@ -1,26 +0,0 @@ -<app-page-header i18n-title title="Search results"> -</app-page-header> - -<div *ngIf="errorMessage" class="alert alert-danger" i18n>Invalid search query: {{errorMessage}}</div> - -<p *ngIf="more_like" i18n>Showing documents similar to <a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}</a></p> - -<p *ngIf="query"> - <ng-container i18n>Search query: <i>{{query}}</i></ng-container> - <ng-container *ngIf="correctedQuery"> - - <ng-container i18n>Did you mean "<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}</a>"?</ng-container> - </ng-container> -</p> - -<div *ngIf="!errorMessage" [class.result-content-searching]="searching" infiniteScroll (scrolled)="onScroll()"> - <p i18n>{resultCount, plural, =0 {No results} =1 {One result} other {{{resultCount}} results}}</p> - <ng-container *ngFor="let result of results"> - <app-document-card-large *ngIf="result.document" - [document]="result.document" - [details]="result.highlights" - [searchScore]="result.score / maxScore" - [moreLikeThis]="true"> - </app-document-card-large> - </ng-container> - -</div> diff --git a/src-ui/src/app/components/search/search.component.scss b/src-ui/src/app/components/search/search.component.scss deleted file mode 100644 index 40ca79a61..000000000 --- a/src-ui/src/app/components/search/search.component.scss +++ /dev/null @@ -1,15 +0,0 @@ -.result-content { - color: darkgray; -} - -.doc-img { - object-fit: cover; - object-position: top; - height: 100%; - position: absolute; - -} - -.result-content-searching { - opacity: 0.3; -} \ No newline at end of file diff --git a/src-ui/src/app/components/search/search.component.spec.ts b/src-ui/src/app/components/search/search.component.spec.ts deleted file mode 100644 index 918ce7071..000000000 --- a/src-ui/src/app/components/search/search.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { SearchComponent } from './search.component'; - -describe('SearchComponent', () => { - let component: SearchComponent; - let fixture: ComponentFixture<SearchComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ SearchComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(SearchComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src-ui/src/app/components/search/search.component.ts b/src-ui/src/app/components/search/search.component.ts deleted file mode 100644 index 4570ac3fa..000000000 --- a/src-ui/src/app/components/search/search.component.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'; -import { SearchHit } from 'src/app/data/search-result'; -import { DocumentService } from 'src/app/services/rest/document.service'; -import { SearchService } from 'src/app/services/rest/search.service'; - -@Component({ - selector: 'app-search', - templateUrl: './search.component.html', - styleUrls: ['./search.component.scss'] -}) -export class SearchComponent implements OnInit { - - results: SearchHit[] = [] - - query: string = "" - - more_like: number - - more_like_doc: PaperlessDocument - - searching = false - - currentPage = 1 - - pageCount = 1 - - resultCount - - correctedQuery: string = null - - errorMessage: string - - get maxScore() { - return this.results?.length > 0 ? this.results[0].score : 100 - } - - constructor(private searchService: SearchService, private route: ActivatedRoute, private router: Router, private documentService: DocumentService) { } - - ngOnInit(): void { - this.route.queryParamMap.subscribe(paramMap => { - window.scrollTo(0, 0) - this.query = paramMap.get('query') - this.more_like = paramMap.has('more_like') ? +paramMap.get('more_like') : null - if (this.more_like) { - this.documentService.get(this.more_like).subscribe(r => { - this.more_like_doc = r - }) - } else { - this.more_like_doc = null - } - this.searching = true - this.currentPage = 1 - this.loadPage() - }) - - } - - searchCorrectedQuery() { - this.router.navigate(["search"], {queryParams: {query: this.correctedQuery, more_like: this.more_like}}) - } - - loadPage(append: boolean = false) { - this.errorMessage = null - this.correctedQuery = null - - this.searchService.search(this.query, this.currentPage, this.more_like).subscribe(result => { - if (append) { - this.results.push(...result.results) - } else { - this.results = result.results - } - this.pageCount = result.page_count - this.searching = false - this.resultCount = result.count - this.correctedQuery = result.corrected_query - }, error => { - this.searching = false - this.resultCount = 1 - this.pageCount = 1 - this.results = [] - this.errorMessage = error.error - }) - } - - onScroll() { - if (this.currentPage < this.pageCount) { - this.currentPage += 1 - this.loadPage(true) - } - } - -} diff --git a/src-ui/src/app/data/filter-rule-type.ts b/src-ui/src/app/data/filter-rule-type.ts index 2c9f8a373..c215be84e 100644 --- a/src-ui/src/app/data/filter-rule-type.ts +++ b/src-ui/src/app/data/filter-rule-type.ts @@ -22,6 +22,9 @@ export const FILTER_ASN_ISNULL = 18 export const FILTER_TITLE_CONTENT = 19 +export const FILTER_FULLTEXT_QUERY = 20 +export const FILTER_FULLTEXT_MORELIKE = 21 + export const FILTER_RULE_TYPES: FilterRuleType[] = [ {id: FILTER_TITLE, filtervar: "title__icontains", datatype: "string", multi: false, default: ""}, @@ -51,7 +54,11 @@ export const FILTER_RULE_TYPES: FilterRuleType[] = [ {id: FILTER_MODIFIED_AFTER, filtervar: "modified__date__gt", datatype: "date", multi: false}, {id: FILTER_ASN_ISNULL, filtervar: "archive_serial_number__isnull", datatype: "boolean", multi: false}, - {id: FILTER_TITLE_CONTENT, filtervar: "title_content", datatype: "string", multi: false} + {id: FILTER_TITLE_CONTENT, filtervar: "title_content", datatype: "string", multi: false}, + + {id: FILTER_FULLTEXT_QUERY, filtervar: "query", datatype: "string", multi: false}, + + {id: FILTER_FULLTEXT_MORELIKE, filtervar: "more_like_id", datatype: "number", multi: false}, ] export interface FilterRuleType { diff --git a/src-ui/src/app/data/paperless-document.ts b/src-ui/src/app/data/paperless-document.ts index 9d0aeda88..e7412278b 100644 --- a/src-ui/src/app/data/paperless-document.ts +++ b/src-ui/src/app/data/paperless-document.ts @@ -4,6 +4,15 @@ import { PaperlessTag } from './paperless-tag' import { PaperlessDocumentType } from './paperless-document-type' import { Observable } from 'rxjs' +export interface SearchHit { + + score?: number + rank?: number + + highlights?: string + +} + export interface PaperlessDocument extends ObjectWithId { correspondent$?: Observable<PaperlessCorrespondent> @@ -40,4 +49,6 @@ export interface PaperlessDocument extends ObjectWithId { archive_serial_number?: number + __search_hit__?: SearchHit + } diff --git a/src-ui/src/app/data/search-result.ts b/src-ui/src/app/data/search-result.ts deleted file mode 100644 index a769a8351..000000000 --- a/src-ui/src/app/data/search-result.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { PaperlessDocument } from './paperless-document' - -export class SearchHitHighlight { - text?: string - term?: number -} - -export interface SearchHit { - id?: number - title?: string - score?: number - rank?: number - - highlights?: SearchHitHighlight[][] - document?: PaperlessDocument -} - -export interface SearchResult { - - count?: number - page?: number - page_count?: number - - corrected_query?: string - - results?: SearchHit[] - - -} diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 334706a3c..d844323f9 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -1,7 +1,9 @@ +import { Route } from '@angular/compiler/src/core'; import { Injectable } from '@angular/core'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { cloneFilterRules, FilterRule } from '../data/filter-rule'; +import { FILTER_FULLTEXT_MORELIKE, FILTER_FULLTEXT_QUERY } from '../data/filter-rule-type'; import { PaperlessDocument } from '../data/paperless-document'; import { PaperlessSavedView } from '../data/paperless-saved-view'; import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'; @@ -207,7 +209,11 @@ export class DocumentListViewService { this.activeListViewState.currentPage = 1 this.reduceSelectionToFilter() this.saveDocumentListView() - this.router.navigate(["documents"]) + if (this.router.url == "/documents") { + this.reload() + } else { + this.router.navigate(["documents"]) + } } getLastPage(): number { @@ -317,7 +323,7 @@ export class DocumentListViewService { return this.documents.map(d => d.id).indexOf(documentID) } - constructor(private documentService: DocumentService, private settings: SettingsService, private router: Router) { + constructor(private documentService: DocumentService, private settings: SettingsService, private router: Router, private route: ActivatedRoute) { let documentListViewConfigJson = sessionStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) if (documentListViewConfigJson) { try { diff --git a/src-ui/src/app/services/rest/search.service.ts b/src-ui/src/app/services/rest/search.service.ts index e750100fa..f10c53485 100644 --- a/src-ui/src/app/services/rest/search.service.ts +++ b/src-ui/src/app/services/rest/search.service.ts @@ -2,8 +2,6 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { PaperlessDocument } from 'src/app/data/paperless-document'; -import { SearchResult } from 'src/app/data/search-result'; import { environment } from 'src/environments/environment'; import { DocumentService } from './document.service'; @@ -13,30 +11,7 @@ import { DocumentService } from './document.service'; }) export class SearchService { - constructor(private http: HttpClient, private documentService: DocumentService) { } - - search(query: string, page?: number, more_like?: number): Observable<SearchResult> { - let httpParams = new HttpParams() - if (query) { - httpParams = httpParams.set('query', query) - } - if (page) { - httpParams = httpParams.set('page', page.toString()) - } - if (more_like) { - httpParams = httpParams.set('more_like', more_like.toString()) - } - return this.http.get<SearchResult>(`${environment.apiBaseUrl}search/`, {params: httpParams}).pipe( - map(result => { - result.results.forEach(hit => { - if (hit.document) { - this.documentService.addObservablesToDocument(hit.document) - } - }) - return result - }) - ) - } + constructor(private http: HttpClient) { } autocomplete(term: string): Observable<string[]> { return this.http.get<string[]>(`${environment.apiBaseUrl}search/autocomplete/`, {params: new HttpParams().set('term', term)}) diff --git a/src/documents/index.py b/src/documents/index.py index 2c851c9ea..a75534514 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -5,12 +5,12 @@ from contextlib import contextmanager import math from django.conf import settings from whoosh import highlight, classify, query -from whoosh.fields import Schema, TEXT, NUMERIC, KEYWORD, DATETIME -from whoosh.highlight import Formatter, get_text +from whoosh.fields import Schema, TEXT, NUMERIC, KEYWORD, DATETIME, BOOLEAN +from whoosh.highlight import Formatter, get_text, HtmlFormatter from whoosh.index import create_in, exists_in, open_dir from whoosh.qparser import MultifieldParser from whoosh.qparser.dateparse import DateParserPlugin -from whoosh.searching import ResultsPage +from whoosh.searching import ResultsPage, Searcher from whoosh.writing import AsyncWriter from documents.models import Document @@ -18,63 +18,53 @@ from documents.models import Document logger = logging.getLogger("paperless.index") -class JsonFormatter(Formatter): - def __init__(self): - self.seen = {} - - def format_token(self, text, token, replace=False): - ttext = self._text(get_text(text, token, replace)) - return {'text': ttext, 'highlight': 'true'} - - def format_fragment(self, fragment, replace=False): - output = [] - index = fragment.startchar - text = fragment.text - amend_token = None - for t in fragment.matches: - if t.startchar is None: - continue - if t.startchar < index: - continue - if t.startchar > index: - text_inbetween = text[index:t.startchar] - if amend_token and t.startchar - index < 10: - amend_token['text'] += text_inbetween - else: - output.append({'text': text_inbetween, - 'highlight': False}) - amend_token = None - token = self.format_token(text, t, replace) - if amend_token: - amend_token['text'] += token['text'] - else: - output.append(token) - amend_token = token - index = t.endchar - if index < fragment.endchar: - output.append({'text': text[index:fragment.endchar], - 'highlight': False}) - return output - - def format(self, fragments, replace=False): - output = [] - for fragment in fragments: - output.append(self.format_fragment(fragment, replace=replace)) - return output - - def get_schema(): return Schema( - id=NUMERIC(stored=True, unique=True, numtype=int), - title=TEXT(stored=True), + id=NUMERIC( + stored=True, + unique=True + ), + title=TEXT( + sortable=True + ), content=TEXT(), - correspondent=TEXT(stored=True), - correspondent_id=NUMERIC(stored=True, numtype=int), - tag=KEYWORD(stored=True, commas=True, scorable=True, lowercase=True), - type=TEXT(stored=True), - created=DATETIME(stored=True, sortable=True), - modified=DATETIME(stored=True, sortable=True), - added=DATETIME(stored=True, sortable=True), + archive_serial_number=NUMERIC( + sortable=True + ), + + correspondent=TEXT( + sortable=True + ), + correspondent_id=NUMERIC(), + has_correspondent=BOOLEAN(), + + tag=KEYWORD( + commas=True, + scorable=True, + lowercase=True + ), + tag_id=KEYWORD( + commas=True, + scorable=True + ), + has_tag=BOOLEAN(), + + type=TEXT( + sortable=True + ), + type_id=NUMERIC(), + has_type=BOOLEAN(), + + created=DATETIME( + sortable=True + ), + modified=DATETIME( + sortable=True + ), + added=DATETIME( + sortable=True + ), + ) @@ -106,18 +96,38 @@ def open_index_writer(ix=None, optimize=False): writer.commit(optimize=optimize) +@contextmanager +def open_index_searcher(ix=None): + if ix: + searcher = ix.searcher() + else: + searcher = open_index().searcher() + + try: + yield searcher + finally: + searcher.close() + + def update_document(writer, doc): tags = ",".join([t.name for t in doc.tags.all()]) + tags_ids = ",".join([str(t.id) for t in doc.tags.all()]) writer.update_document( id=doc.pk, title=doc.title, content=doc.content, correspondent=doc.correspondent.name if doc.correspondent else None, correspondent_id=doc.correspondent.id if doc.correspondent else None, + has_correspondent=doc.correspondent is not None, tag=tags if tags else None, + tag_id=tags_ids if tags_ids else None, + has_tag=len(tags) > 0, type=doc.document_type.name if doc.document_type else None, + type_id=doc.document_type.id if doc.document_type else None, + has_type=doc.document_type is not None, created=doc.created, added=doc.added, + archive_serial_number=doc.archive_serial_number, modified=doc.modified, ) @@ -140,78 +150,11 @@ def remove_document_from_index(document): remove_document(writer, document) -@contextmanager -def query_page(ix, page, querystring, more_like_doc_id, more_like_doc_content): - searcher = ix.searcher() - try: - if querystring: - qp = MultifieldParser( - ["content", "title", "correspondent", "tag", "type"], - ix.schema) - qp.add_plugin(DateParserPlugin()) - str_q = qp.parse(querystring) - corrected = searcher.correct_query(str_q, querystring) - else: - str_q = None - corrected = None - - if more_like_doc_id: - docnum = searcher.document_number(id=more_like_doc_id) - kts = searcher.key_terms_from_text( - 'content', more_like_doc_content, numterms=20, - model=classify.Bo1Model, normalize=False) - more_like_q = query.Or( - [query.Term('content', word, boost=weight) - for word, weight in kts]) - result_page = searcher.search_page( - more_like_q, page, filter=str_q, mask={docnum}) - elif str_q: - result_page = searcher.search_page(str_q, page) - else: - raise ValueError( - "Either querystring or more_like_doc_id is required." - ) - - result_page.results.fragmenter = highlight.ContextFragmenter( - surround=50) - result_page.results.formatter = JsonFormatter() - - if corrected and corrected.query != str_q: - corrected_query = corrected.string - else: - corrected_query = None - - yield result_page, corrected_query - finally: - searcher.close() - - class DelayedQuery: @property def _query(self): - if 'query' in self.query_params: - qp = MultifieldParser( - ["content", "title", "correspondent", "tag", "type"], - self.ix.schema) - qp.add_plugin(DateParserPlugin()) - q = qp.parse(self.query_params['query']) - elif 'more_like_id' in self.query_params: - more_like_doc_id = int(self.query_params['more_like_id']) - content = Document.objects.get(id=more_like_doc_id).content - - docnum = self.searcher.document_number(id=more_like_doc_id) - kts = self.searcher.key_terms_from_text( - 'content', content, numterms=20, - model=classify.Bo1Model, normalize=False) - q = query.Or( - [query.Term('content', word, boost=weight) - for word, weight in kts]) - else: - raise ValueError( - "Either query or more_like_id is required." - ) - return q + raise NotImplementedError() @property def _query_filter(self): @@ -219,32 +162,114 @@ class DelayedQuery: for k, v in self.query_params.items(): if k == 'correspondent__id': criterias.append(query.Term('correspondent_id', v)) + elif k == 'tags__id__all': + for tag_id in v.split(","): + criterias.append(query.Term('tag_id', tag_id)) + elif k == 'document_type__id': + criterias.append(query.Term('type_id', v)) + elif k == 'correspondent__isnull': + criterias.append(query.Term("has_correspondent", v == "false")) + elif k == 'is_tagged': + criterias.append(query.Term("has_tag", v == "true")) + elif k == 'document_type__isnull': + criterias.append(query.Term("has_type", v == "false")) + elif k == 'created__date__lt': + pass + elif k == 'created__date__gt': + pass + elif k == 'added__date__gt': + pass + elif k == 'added__date__lt': + pass if len(criterias) > 0: return query.And(criterias) else: return None - def __init__(self, ix, searcher, query_params, page_size): - self.ix = ix + @property + def _query_sortedby(self): + if not 'ordering' in self.query_params: + return None, False + + o: str = self.query_params['ordering'] + if o.startswith('-'): + return o[1:], True + else: + return o, False + + def __init__(self, searcher: Searcher, query_params, page_size): self.searcher = searcher self.query_params = query_params self.page_size = page_size + self.saved_results = dict() def __len__(self): - results = self.searcher.search(self._query, limit=1, filter=self._query_filter) - return len(results) - #return 1000 + page = self[0:1] + return len(page) def __getitem__(self, item): + if item.start in self.saved_results: + return self.saved_results[item.start] + + q, mask = self._query + sortedby, reverse = self._query_sortedby + + print("OY", self.page_size) page: ResultsPage = self.searcher.search_page( - self._query, + q, + mask=mask, filter=self._query_filter, pagenum=math.floor(item.start / self.page_size) + 1, - pagelen=self.page_size + pagelen=self.page_size, + sortedby=sortedby, + reverse=reverse ) + page.results.fragmenter = highlight.ContextFragmenter( + surround=50) + page.results.formatter = HtmlFormatter(tagname="span", between=" ... ") + + self.saved_results[item.start] = page + return page +class DelayedFullTextQuery(DelayedQuery): + + @property + def _query(self): + q_str = self.query_params['query'] + qp = MultifieldParser( + ["content", "title", "correspondent", "tag", "type"], + self.searcher.ixreader.schema) + qp.add_plugin(DateParserPlugin()) + q = qp.parse(q_str) + + corrected = self.searcher.correct_query(q, q_str) + if corrected.query != q: + corrected_query = corrected.string + + return q, None + + +class DelayedMoreLikeThisQuery(DelayedQuery): + + @property + def _query(self): + more_like_doc_id = int(self.query_params['more_like_id']) + content = Document.objects.get(id=more_like_doc_id).content + + docnum = self.searcher.document_number(id=more_like_doc_id) + kts = self.searcher.key_terms_from_text( + 'content', content, numterms=20, + model=classify.Bo1Model, normalize=False) + q = query.Or( + [query.Term('content', word, boost=weight) + for word, weight in kts]) + mask = {docnum} + + return q, mask + + def autocomplete(ix, term, limit=10): with ix.reader() as reader: terms = [] diff --git a/src/documents/models.py b/src/documents/models.py index 6ee93e3ad..cdd35a2f7 100755 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -359,7 +359,10 @@ class SavedView(models.Model): sort_field = models.CharField( _("sort field"), - max_length=128) + max_length=128, + null=True, + blank=True + ) sort_reverse = models.BooleanField( _("sort reverse"), default=False) @@ -387,6 +390,8 @@ class SavedViewFilterRule(models.Model): (17, _("does not have tag")), (18, _("does not have ASN")), (19, _("title or content contains")), + (20, _("fulltext query")), + (21, _("more like this")) ] saved_view = models.ForeignKey( diff --git a/src/documents/tests/test_index.py b/src/documents/tests/test_index.py index 2baa9621d..14304ab28 100644 --- a/src/documents/tests/test_index.py +++ b/src/documents/tests/test_index.py @@ -1,20 +1,10 @@ from django.test import TestCase from documents import index -from documents.index import JsonFormatter from documents.models import Document from documents.tests.utils import DirectoriesMixin -class JsonFormatterTest(TestCase): - - def setUp(self) -> None: - self.formatter = JsonFormatter() - - def test_empty_fragments(self): - self.assertListEqual(self.formatter.format([]), []) - - class TestAutoComplete(DirectoriesMixin, TestCase): def test_auto_complete(self): diff --git a/src/documents/views.py b/src/documents/views.py index a29983738..f61933e16 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -36,7 +36,6 @@ from rest_framework.viewsets import ( from paperless.db import GnuPG from paperless.views import StandardPagination -from . import index from .bulk_download import OriginalAndArchiveStrategy, OriginalsOnlyStrategy, \ ArchiveOnlyStrategy from .classifier import load_classifier @@ -332,15 +331,23 @@ class SearchResultSerializer(DocumentSerializer): def to_representation(self, instance): doc = Document.objects.get(id=instance['id']) - # repressentation = super(SearchResultSerializer, self).to_representation(doc) - # repressentation['__search_hit__'] = { - # "score": instance.score - # } - return super(SearchResultSerializer, self).to_representation(doc) + representation = super(SearchResultSerializer, self).to_representation(doc) + representation['__search_hit__'] = { + "score": instance.score, + "highlights": instance.highlights("content", + text=doc.content) if doc else None, # NOQA: E501 + "rank": instance.rank + } + + return representation class UnifiedSearchViewSet(DocumentViewSet): + def __init__(self, *args, **kwargs): + super(UnifiedSearchViewSet, self).__init__(*args, **kwargs) + self.searcher = None + def get_serializer_class(self): if self._is_search_request(): return SearchResultSerializer @@ -348,25 +355,39 @@ class UnifiedSearchViewSet(DocumentViewSet): return DocumentSerializer def _is_search_request(self): - return "query" in self.request.query_params + return "query" in self.request.query_params or "more_like_id" in self.request.query_params def filter_queryset(self, queryset): - if self._is_search_request(): - ix = index.open_index() - return index.DelayedQuery(ix, self.searcher, self.request.query_params, self.paginator.page_size) + from documents import index + + if "query" in self.request.query_params: + query_class = index.DelayedFullTextQuery + elif "more_like_id" in self.request.query_params: + query_class = index.DelayedMoreLikeThisQuery + else: + raise ValueError() + + return query_class( + self.searcher, + self.request.query_params, + self.paginator.get_page_size(self.request)) else: return super(UnifiedSearchViewSet, self).filter_queryset(queryset) def list(self, request, *args, **kwargs): if self._is_search_request(): - ix = index.open_index() - with ix.searcher() as s: - self.searcher = s - return super(UnifiedSearchViewSet, self).list(request) + from documents import index + try: + with index.open_index_searcher() as s: + self.searcher = s + return super(UnifiedSearchViewSet, self).list(request) + except Exception as e: + return HttpResponseBadRequest(str(e)) else: return super(UnifiedSearchViewSet, self).list(request) + class LogViewSet(ViewSet): permission_classes = (IsAuthenticated,) @@ -518,74 +539,6 @@ class SelectionDataView(GenericAPIView): return r -class SearchView(APIView): - - permission_classes = (IsAuthenticated,) - - def add_infos_to_hit(self, r): - try: - doc = Document.objects.get(id=r['id']) - except Document.DoesNotExist: - logger.warning( - f"Search index returned a non-existing document: " - f"id: {r['id']}, title: {r['title']}. " - f"Search index needs reindex." - ) - doc = None - - return {'id': r['id'], - 'highlights': r.highlights("content", text=doc.content) if doc else None, # NOQA: E501 - 'score': r.score, - 'rank': r.rank, - 'document': DocumentSerializer(doc).data if doc else None, - 'title': r['title'] - } - - def get(self, request, format=None): - from documents import index - - if 'query' in request.query_params: - query = request.query_params['query'] - else: - query = None - - if 'more_like' in request.query_params: - more_like_id = request.query_params['more_like'] - more_like_content = Document.objects.get(id=more_like_id).content - else: - more_like_id = None - more_like_content = None - - if not query and not more_like_id: - return Response({ - 'count': 0, - 'page': 0, - 'page_count': 0, - 'corrected_query': None, - 'results': []}) - - try: - page = int(request.query_params.get('page', 1)) - except (ValueError, TypeError): - page = 1 - - if page < 1: - page = 1 - - ix = index.open_index() - - try: - with index.query_page(ix, page, query, more_like_id, more_like_content) as (result_page, corrected_query): # NOQA: E501 - return Response( - {'count': len(result_page), - 'page': result_page.pagenum, - 'page_count': result_page.pagecount, - 'corrected_query': corrected_query, - 'results': list(map(self.add_infos_to_hit, result_page))}) - except Exception as e: - return HttpResponseBadRequest(str(e)) - - class SearchAutoCompleteView(APIView): permission_classes = (IsAuthenticated,) diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 176fce257..7521d49de 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -16,7 +16,6 @@ from documents.views import ( LogViewSet, TagViewSet, DocumentTypeViewSet, - SearchView, IndexView, SearchAutoCompleteView, StatisticsView, @@ -47,10 +46,6 @@ urlpatterns = [ SearchAutoCompleteView.as_view(), name="autocomplete"), - re_path(r"^search/", - SearchView.as_view(), - name="search"), - re_path(r"^statistics/", StatisticsView.as_view(), name="statistics"), From 4ff4ddc5784f2ea6542e6640626cf3f63f59ffb3 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:32:39 +0100 Subject: [PATCH 642/898] added pt-pt locale --- src-ui/angular.json | 1 + src-ui/messages.xlf | 28 ++++++++++----------- src-ui/src/app/app.module.ts | 1 + src-ui/src/app/services/settings.service.ts | 1 + src/locale/en_US/LC_MESSAGES/django.po | 12 ++++++--- src/paperless/settings.py | 1 + 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 1e4403f79..342172931 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -21,6 +21,7 @@ "fr-FR": "src/locale/messages.fr_FR.xlf", "en-GB": "src/locale/messages.en_GB.xlf", "pt-BR": "src/locale/messages.pt_BR.xlf", + "pt-PT": "src/locale/messages.pt_PT.xlf", "it-IT": "src/locale/messages.it_IT.xlf", "ro-RO": "src/locale/messages.ro_RO.xlf", "ru-RU": "src/locale/messages.ru_RU.xlf", diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index b0c64256a..959d90a1b 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1212,14 +1212,7 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> - </context-group> - </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> + <context context-type="linenumber">51</context> </context-group> </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> @@ -1689,46 +1682,53 @@ <context context-type="linenumber">94</context> </context-group> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> </trans-unit> <trans-unit id="2935232983274991580" datatype="html"> <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> </trans-unit> <trans-unit id="8118856427047826368" datatype="html"> <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> </trans-unit> <trans-unit id="7137419789978325708" datatype="html"> <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> </trans-unit> <trans-unit id="5190825892106392539" datatype="html"> <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index c364424ad..ca87d1a07 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -81,6 +81,7 @@ registerLocaleData(localeFr) registerLocaleData(localeNl) registerLocaleData(localeDe) registerLocaleData(localePt, "pt-BR") +registerLocaleData(localePt, "pt-PT") registerLocaleData(localeIt) registerLocaleData(localeEnGb) registerLocaleData(localeRo) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index dcc0a3148..ec07208dc 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -92,6 +92,7 @@ export class SettingsService { {code: "de-de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, {code: "nl-nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, {code: "fr-fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, + {code: "pt-pt", name: $localize`Portuguese`, englishName: "Portuguese", dateInputFormat: "dd/mm/yyyy"}, {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}, {code: "it-it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"}, {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"}, diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 42fac1586..2a17fd9ae 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" +"POT-Creation-Date: 2021-03-17 22:31+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" @@ -433,18 +433,22 @@ msgid "Portuguese (Brazil)" msgstr "" #: paperless/settings.py:304 -msgid "Italian" +msgid "Portuguese" msgstr "" #: paperless/settings.py:305 -msgid "Romanian" +msgid "Italian" msgstr "" #: paperless/settings.py:306 -msgid "Russian" +msgid "Romanian" msgstr "" #: paperless/settings.py:307 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:308 msgid "Spanish" msgstr "" diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 014f2e95d..1a033af38 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -301,6 +301,7 @@ LANGUAGES = [ ("nl-nl", _("Dutch")), ("fr-fr", _("French")), ("pt-br", _("Portuguese (Brazil)")), + ("pt-pt", _("Portuguese")), ("it-it", _("Italian")), ("ro-ro", _("Romanian")), ("ru-ru", _("Russian")), From b28c3b3e1f3a6eda7aada169e307e06d88ba8ca6 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:33:00 +0100 Subject: [PATCH 643/898] add migration --- .../migrations/1015_auto_20210317_1351.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/documents/migrations/1015_auto_20210317_1351.py diff --git a/src/documents/migrations/1015_auto_20210317_1351.py b/src/documents/migrations/1015_auto_20210317_1351.py new file mode 100644 index 000000000..b6dca444c --- /dev/null +++ b/src/documents/migrations/1015_auto_20210317_1351.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.7 on 2021-03-17 12:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1014_auto_20210228_1614'), + ] + + operations = [ + migrations.AlterField( + model_name='savedview', + name='sort_field', + field=models.CharField(blank=True, max_length=128, null=True, verbose_name='sort field'), + ), + migrations.AlterField( + model_name='savedviewfilterrule', + name='rule_type', + field=models.PositiveIntegerField(choices=[(0, 'title contains'), (1, 'content contains'), (2, 'ASN is'), (3, 'correspondent is'), (4, 'document type is'), (5, 'is in inbox'), (6, 'has tag'), (7, 'has any tag'), (8, 'created before'), (9, 'created after'), (10, 'created year is'), (11, 'created month is'), (12, 'created day is'), (13, 'added before'), (14, 'added after'), (15, 'modified before'), (16, 'modified after'), (17, 'does not have tag'), (18, 'does not have ASN'), (19, 'title or content contains'), (20, 'fulltext query'), (21, 'more like this')], verbose_name='rule type'), + ), + ] From 83ae3bd6605a9c5136700c71c1e8dfcecfc9ab11 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:44:18 +0100 Subject: [PATCH 644/898] fixes #668 (see https://github.com/the-paperless-project/paperless/pull/571) --- src/documents/matching.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/documents/matching.py b/src/documents/matching.py index 3b70930b6..a1f3896e5 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -90,7 +90,7 @@ def matches(matching_model, document): elif matching_model.matching_algorithm == MatchingModel.MATCH_LITERAL: result = bool(re.search( - rf"\b{matching_model.match}\b", + rf"\b{re.escape(matching_model.match)}\b", document_content, **search_kwargs )) @@ -161,6 +161,9 @@ def _split_match(matching_model): findterms = re.compile(r'"([^"]+)"|(\S+)').findall normspace = re.compile(r"\s+").sub return [ - normspace(" ", (t[0] or t[1]).strip()).replace(" ", r"\s+") + # normspace(" ", (t[0] or t[1]).strip()).replace(" ", r"\s+") + re.escape( + normspace(" ", (t[0] or t[1]).strip()) + ).replace(r"\ ", r"\s+") for t in findterms(matching_model.match) ] From 12e2e25be68898a74d201488e8195bc5b0cf90df Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:57:37 +0100 Subject: [PATCH 645/898] fixes #771 --- .../management/commands/document_exporter.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index d8f5861a5..286d862e3 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -6,15 +6,18 @@ import time import tqdm from django.conf import settings +from django.contrib.auth.models import User from django.core import serializers from django.core.management.base import BaseCommand, CommandError from django.db import transaction from filelock import FileLock -from documents.models import Document, Correspondent, Tag, DocumentType +from documents.models import Document, Correspondent, Tag, DocumentType, \ + SavedView, SavedViewFilterRule from documents.settings import EXPORTER_FILE_NAME, EXPORTER_THUMBNAIL_NAME, \ EXPORTER_ARCHIVE_NAME from paperless.db import GnuPG +from paperless_mail.models import MailAccount, MailRule from ...file_handling import generate_filename, delete_empty_directories @@ -105,6 +108,21 @@ class Command(BaseCommand): serializers.serialize("json", documents)) manifest += document_manifest + manifest += json.loads(serializers.serialize( + "json", MailAccount.objects.all())) + + manifest += json.loads(serializers.serialize( + "json", MailRule.objects.all())) + + manifest += json.loads(serializers.serialize( + "json", SavedView.objects.all())) + + manifest += json.loads(serializers.serialize( + "json", SavedViewFilterRule.objects.all())) + + manifest += json.loads(serializers.serialize( + "json", User.objects.all())) + # 3. Export files from each document for index, document_dict in tqdm.tqdm(enumerate(document_manifest), total=len(document_manifest)): From 94046c67bb7945155056af86c6c3899bf87279ee Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 17 Mar 2021 23:08:19 +0100 Subject: [PATCH 646/898] fix test case --- src/documents/tests/test_management_exporter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index cdc745305..9e2dd0804 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -69,7 +69,7 @@ class TestExportImport(DirectoriesMixin, TestCase): manifest = self._do_export(use_filename_format=use_filename_format) - self.assertEqual(len(manifest), 7) + self.assertEqual(len(manifest), 8) self.assertEqual(len(list(filter(lambda e: e['model'] == 'documents.document', manifest))), 4) self.assertTrue(os.path.exists(os.path.join(self.target, "manifest.json"))) From 8f0db65e4c1f1fbe12821b95dd52e6416e3a5150 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 18 Mar 2021 16:22:45 +0100 Subject: [PATCH 647/898] New Crowdin updates (#788) --- src-ui/src/locale/messages.cs_CZ.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.de_DE.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.en_GB.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.es_ES.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.fr_FR.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.hu_HU.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.it_IT.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.nl_NL.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.pt_BR.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.pt_PT.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.ro_RO.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.ru_RU.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.xh_ZA.xlf | 30 +++++++++++++------------- src-ui/src/locale/messages.zh_CN.xlf | 30 +++++++++++++------------- src/locale/cs_CZ/LC_MESSAGES/django.po | 14 +++++++----- src/locale/de_DE/LC_MESSAGES/django.po | 14 +++++++----- src/locale/en_GB/LC_MESSAGES/django.po | 14 +++++++----- src/locale/es_ES/LC_MESSAGES/django.po | 14 +++++++----- src/locale/fr_FR/LC_MESSAGES/django.po | 14 +++++++----- src/locale/hu_HU/LC_MESSAGES/django.po | 14 +++++++----- src/locale/it_IT/LC_MESSAGES/django.po | 14 +++++++----- src/locale/nl_NL/LC_MESSAGES/django.po | 14 +++++++----- src/locale/pt_BR/LC_MESSAGES/django.po | 14 +++++++----- src/locale/pt_PT/LC_MESSAGES/django.po | 14 +++++++----- src/locale/ro_RO/LC_MESSAGES/django.po | 14 +++++++----- src/locale/ru_RU/LC_MESSAGES/django.po | 14 +++++++----- src/locale/xh_ZA/LC_MESSAGES/django.po | 14 +++++++----- src/locale/zh_CN/LC_MESSAGES/django.po | 14 +++++++----- 28 files changed, 336 insertions(+), 280 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index d0f519a70..c24654569 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="needs-translation">View</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Francouzština</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="needs-translation">Portuguese (Brazil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="needs-translation">Italian</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="needs-translation">Romanian</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="needs-translation">Russian</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="needs-translation">Spanish</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index e9f8ddbc5..1d7a3e918 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Anzeigen</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Erstellt: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Französisch</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portugiesisch</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portugiesisch (Brasilien)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italienisch</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Rumänisch</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Russisch</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Spanisch</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 76b0c8ab6..060411de2 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">View</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">French</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portuguese (Brazil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italian</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Romanian</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Russian</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Spanish</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 46b3e3d10..b743b8a83 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Vista</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Creado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Francés</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portugués (Brasil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italiano</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Rumano</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Ruso</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Español</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index f0aaab1f9..d3103a6ad 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Vue</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Créé le : <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Français</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portugais</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portugais (Brésil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italien</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Roumain</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Russe</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Espagnol</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 1411bcdba..218e4fa98 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Megtekint</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Létrehozva: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="needs-translation">French</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="needs-translation">Portuguese (Brazil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="needs-translation">Italian</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="needs-translation">Romanian</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="needs-translation">Russian</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="needs-translation">Spanish</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 598d25095..c41ed083d 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Mostra</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Creato il: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Francese</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portoghese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portoghese (Brasile)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italiano</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Rumeno</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Russo</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Spagnolo</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 796ba8f62..647a8de2b 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Bekijken</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Aangemaakt op: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Frans</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portugees (Brazilië)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italiaans</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Roemeens</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Russisch</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Spaans</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 70994baef..c95ae9670 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Ver</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Criado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Francês</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Português (Brasil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italiano</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Romeno</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="needs-translation">Russian</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="needs-translation">Spanish</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 9a12e56a7..98de03004 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Ver</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Criado: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Francês</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Português (Brasil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italiano</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Romeno</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Russo</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Espanhol</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index f942b52d9..c434c30bf 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Vizualizare</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Creat: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">Franceză</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portugheză</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portugheză (Brazilia)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italiană</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Română</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Rusă</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="needs-translation">Spanish</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 5b0ad2a2a..c2736233c 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Представление</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="translated">Создано: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="translated">French</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Португальский</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="translated">Portuguese (Brazil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="translated">Italian</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="translated">Romanian</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="translated">Русский</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="translated">Испанский</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index 8b4bd47f3..2d759ed8a 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target>crwdns3178:0crwdne3178:0</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target>crwdns3180:0{{document.created | customDate}}crwdne3180:0</target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target>crwdns3314:0crwdne3314:0</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target>crwdns3422:0crwdne3422:0</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target>crwdns3316:0crwdne3316:0</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target>crwdns3318:0crwdne3318:0</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target>crwdns3320:0crwdne3320:0</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target>crwdns3404:0crwdne3404:0</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target>crwdns3418:0crwdne3418:0</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target>crwdns3322:0crwdne3322:0</target> </trans-unit> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index 87916ccc5..a40acabe4 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1384,18 +1384,10 @@ <source>View</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">52</context> + <context context-type="linenumber">51</context> </context-group> <target state="needs-translation">View</target> </trans-unit> - <trans-unit id="849b42384616374df49bd8b3711ec159cb10b845" datatype="html"> - <source>Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">71</context> - </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{document.created | customDate}}"/></target> - </trans-unit> <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> <source>Filter by correspondent</source> <context-group purpose="location"> @@ -1929,11 +1921,19 @@ </context-group> <target state="needs-translation">French</target> </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="needs-translation">Portuguese</target> + </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">95</context> + <context context-type="linenumber">96</context> </context-group> <target state="needs-translation">Portuguese (Brazil)</target> </trans-unit> @@ -1941,7 +1941,7 @@ <source>Italian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">96</context> + <context context-type="linenumber">97</context> </context-group> <target state="needs-translation">Italian</target> </trans-unit> @@ -1949,7 +1949,7 @@ <source>Romanian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">97</context> + <context context-type="linenumber">98</context> </context-group> <target state="needs-translation">Romanian</target> </trans-unit> @@ -1957,7 +1957,7 @@ <source>Russian</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">98</context> + <context context-type="linenumber">99</context> </context-group> <target state="needs-translation">Russian</target> </trans-unit> @@ -1965,7 +1965,7 @@ <source>Spanish</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">99</context> + <context context-type="linenumber">100</context> </context-group> <target state="needs-translation">Spanish</target> </trans-unit> @@ -1973,7 +1973,7 @@ <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">106</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index a869dfffe..81c089a9c 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:58\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:47\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "" #: paperless/settings.py:304 -msgid "Italian" +msgid "Portuguese" msgstr "" #: paperless/settings.py:305 -msgid "Romanian" +msgid "Italian" msgstr "" #: paperless/settings.py:306 -msgid "Russian" +msgid "Romanian" msgstr "" #: paperless/settings.py:307 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:308 msgid "Spanish" msgstr "" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 5f681f78f..fccea1562 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:58\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-18 13:43\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portugiesisch" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italienisch" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Rumänisch" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Russisch" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Spanisch" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 90a8d2a90..d33b4fc32 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 20:04\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 22:42\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portuguese" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Romanian" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Russian" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Spanish" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 9f1a8a8b3..8a157440b 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 20:04\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:47\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portugués (Brasil)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Rumano" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Ruso" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Español" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index b157c8857..c36430f34 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 20:04\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-18 07:48\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portugais" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italien" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Roumain" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Russe" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Espagnol" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index a0aeaa31b..7c3e637ee 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:47\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "" #: paperless/settings.py:304 -msgid "Italian" +msgid "Portuguese" msgstr "" #: paperless/settings.py:305 -msgid "Romanian" +msgid "Italian" msgstr "" #: paperless/settings.py:306 -msgid "Russian" +msgid "Romanian" msgstr "" #: paperless/settings.py:307 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:308 msgid "Spanish" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index a7d02824b..48dfe762e 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 18:56\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-18 00:34\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portoghese" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Rumeno" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Russo" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Spagnolo" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 72dc77e0c..fa57cd6aa 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 15:58\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:47\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italiaans" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Roemeens" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Russisch" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Spaans" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 2f2e9c875..84d1c2c54 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:47\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Romeno" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 8584309ec..a22858ce4 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-16 22:35\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:48\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Romeno" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Russo" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Espanhol" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 20918db1d..70194eff5 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 22:42\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portugheză (Brazilia)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portugheză" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italiană" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Română" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Rusă" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index 628bbfa15..bc5de736b 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-15 17:33\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 22:42\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Португальский" + +#: paperless/settings.py:305 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "Romanian" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "Русский" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "Испанский" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index 5b3f83e84..149e2b7ad 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:47\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "crwdns2726:0crwdne2726:0" #: paperless/settings.py:304 +msgid "Portuguese" +msgstr "crwdns3424:0crwdne3424:0" + +#: paperless/settings.py:305 msgid "Italian" msgstr "crwdns2728:0crwdne2728:0" -#: paperless/settings.py:305 +#: paperless/settings.py:306 msgid "Romanian" msgstr "crwdns2730:0crwdne2730:0" -#: paperless/settings.py:306 +#: paperless/settings.py:307 msgid "Russian" msgstr "crwdns3414:0crwdne3414:0" -#: paperless/settings.py:307 +#: paperless/settings.py:308 msgid "Spanish" msgstr "crwdns3420:0crwdne3420:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index c6c59ecf7..2c7ae4244 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-14 13:33+0100\n" -"PO-Revision-Date: 2021-03-14 13:57\n" +"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"PO-Revision-Date: 2021-03-17 21:48\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -429,18 +429,22 @@ msgid "Portuguese (Brazil)" msgstr "" #: paperless/settings.py:304 -msgid "Italian" +msgid "Portuguese" msgstr "" #: paperless/settings.py:305 -msgid "Romanian" +msgid "Italian" msgstr "" #: paperless/settings.py:306 -msgid "Russian" +msgid "Romanian" msgstr "" #: paperless/settings.py:307 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:308 msgid "Spanish" msgstr "" From 540d9480b8abc73a9171c311c33dd0c38c20661e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 18 Mar 2021 19:13:45 +0100 Subject: [PATCH 648/898] changelog and version bump --- docs/changelog.rst | 15 +++++++++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index bf083e8b7..7010350a8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,21 @@ Changelog ********* +paperless-ng 1.3.2 +################## + +* Added translation into Portuguese. + +* Changes + + * The exporter now exports user accounts, mail accounts, mail rules and saved views as well. + +* Fixes + + * Minor layout issues with document cards and the log viewer. + + * Fixed an issue with any/all/exact matching when characters used in regular expressions were used for the match. + paperless-ng 1.3.1 ################## diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 82a55b979..acc5843f8 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -3,7 +3,7 @@ export const environment = { apiBaseUrl: "/api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.3.1", + version: "1.3.2", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index cb3d5bf5f..183d98d3f 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 3, 1) +__version__ = (1, 3, 2) From b255834c467ea0f00cbf6308ed4b931d51ee640b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 18 Mar 2021 23:49:49 +0100 Subject: [PATCH 649/898] update requirements --- Pipfile | 5 +- Pipfile.lock | 487 +++++++++++++++++++++++------------------------ requirements.txt | 24 +-- 3 files changed, 257 insertions(+), 259 deletions(-) diff --git a/Pipfile b/Pipfile index 4d9836e68..587872860 100644 --- a/Pipfile +++ b/Pipfile @@ -24,9 +24,8 @@ langdetect = "*" # numpy 1.20.0 drops python 3.6 support numpy = "~=1.19.5" pathvalidate = "*" -# pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202 -pillow = "==8.1.0" -pikepdf = "~=2.5.0" +pillow = "~=8.1.0" +pikepdf = "~=2.5" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 98d8655eb..33fae8d40 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "49f8a0718a7982bc4ca7e1315c17849523b0d29c38f13cff88f8f883e0e9943a" + "sha256": "50d92219dc02e7b3fdc2cd769ee4d838ff69da45ed9b06b54990e7a937cc2e9d" }, "pipfile-spec": 6, "requires": {}, @@ -28,11 +28,11 @@ }, "arrow": { "hashes": [ - "sha256:7909d9fd30d32fa8fd173fdeb3f7125aaf6dedd1a837276fe1d8cea2c0e86d76", - "sha256:b1e106a0ab754e540f4aeb08747900830b688adef02d81240e65afc0e781a870" + "sha256:3515630f11a15c61dcb4cdd245883270dd334c83f3e639824e65a4b79cc48543", + "sha256:399c9c8ae732270e1aa58ead835a79a40d7be8aa109c579898eb41029b5a231d" ], "markers": "python_version >= '3.6'", - "version": "==1.0.1" + "version": "==1.0.3" }, "asgiref": { "hashes": [ @@ -60,11 +60,11 @@ }, "autobahn": { "hashes": [ - "sha256:884f79c50fdc55ade2c315946a9caa145e8b10075eee9d2c2594ea5e8f5226aa", - "sha256:bf7a9d302a34d0f719d43c57f65ca1f2f5c982dd6ea0c11e1e190ef6f43710fe" + "sha256:9195df8af03b0ff29ccd4b7f5abbde957ee90273465942205f9a1bad6c3f07ac", + "sha256:e126c1f583e872fb59e79d36977cfa1f2d0a8a79f90ae31f406faae7664b8e03" ], "markers": "python_version >= '3.7'", - "version": "==21.2.2" + "version": "==21.3.1" }, "automat": { "hashes": [ @@ -413,11 +413,11 @@ }, "imap-tools": { "hashes": [ - "sha256:44641716f0c5c07df78c5713405675fac50220d4f8e2906c9ed4aabd9c356fa8", - "sha256:bab9a6edf848a58bdd3959ba55e0eb75039ff188a3779371d0b8db674a4945e8" + "sha256:00fa5b5046c0437976ad7dd5e45b1847bfd5d14bb858c9b19a5cf2994bba96d9", + "sha256:3b4d0a911bc48ea7c0beac6a15b6f65b6fdf2b066a67cd3536253ec98e401e83" ], "index": "pypi", - "version": "==0.38.1" + "version": "==0.39.0" }, "img2pdf": { "hashes": [ @@ -428,10 +428,10 @@ }, "incremental": { "hashes": [ - "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", - "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + "sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57", + "sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321" ], - "version": "==17.5.0" + "version": "==21.3.0" }, "inotify-simple": { "hashes": [ @@ -589,11 +589,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:2fca4046e3a33e5902dd89c3003a3f31c7d584dc43f14c7c97f57fce20d2e469", - "sha256:5c386fcf2c0f2635533c2bad0edcd2d455f667a134d180dc61cbb3d4d5f0c8e2" + "sha256:2d2c9efd3443e3fc3e852aea572b8d82bcdf24081c7cc74d760ae4064859bb54", + "sha256:a403699d54d63ff32ebc117ce5dde4d3c870ab69d5ef3e63c24ef12bc7b9b7e9" ], "index": "pypi", - "version": "==11.7.0" + "version": "==11.7.1" }, "pathvalidate": { "hashes": [ @@ -613,71 +613,72 @@ }, "pikepdf": { "hashes": [ - "sha256:02815df9499d3a6dfac2e07e4d2fdbe25fcbefae208970e76bff90af4a402d49", - "sha256:06b0c3004cc9e9068ebc62bb59c3c3a54e7af13867f4a326690d79c69a1cf288", - "sha256:1a471c6ca288fbcd0e1b0e128ef12bb14c5e7db745786308ba292fc7cff30bb5", - "sha256:489ed0fd1281beb0343a34fe8b9d94407c440ed0419ab2e6f5ea297a41824a31", - "sha256:5106b27f7085ed449e057b9988f07c80a87292d2bf46c585a8635ac7a3ccf0d5", - "sha256:51acffba6f3d21674eea7a0432ce1adaf0743641d57844a5e3dc92b4a7e81c85", - "sha256:53d694d70dd072a47bd2dd71329dcef0f809dcd8084d1d11c31baf3b64cd345c", - "sha256:6a640fef52dc785abd354d6800a52ecc02656c98dbfc2ecde559323b001bd43f", - "sha256:7006ef95f847412605dea6e772019f637949eaeaf65363d5d6afd9aa96bf5623", - "sha256:81e13b62877dbc089095e7efa03c27834bdf6b49d404d064cb227b0e179ce049", - "sha256:8fc3e97b24dafbd4b1ac057c8f144c18467ce55d342a1a8c42688890ead58ef3", - "sha256:9158dc4d3ef4e2301fb1879d5825530fdb32143ced770d60fa8e5badeee70a35", - "sha256:961337a10b42bd656b59116ce1c574eafd515b45a513221df6ae1f11734bfb6c", - "sha256:994ccac972357a7b9b147217e1beea2f7688697944b862dbb2a3e64aa9a5ff14", - "sha256:a8e9abf7db0351357b55c3f935979e7dc14f3f259a25d15bcc86abce730955a7", - "sha256:b836eda7f70b9dd75ccdeaf4e78b38393118a66821a69a10054b1430f945d1fd", - "sha256:b859a225f6bd953472c50f4df612b4575df646e560189e3720310ad65b6805a0", - "sha256:cae106bd461cfad73c554c09f6db1d5f2c6a28f5b8cb0602b63046840f488226", - "sha256:cdc75b8fa5a650f4fc91214a315358fde7470e09b95a00981b73a7c4ac5ddb97", - "sha256:e2c28da4f37ad9a3efbedbbfc6f1084941bde43903d30dfdbb338d5ba94c9f50", - "sha256:e596bd8fdbf40bfb8dc8068cdbc7e5b72052188d1ad8ca84da9d6b77658a8b31", - "sha256:ee957b9c60b6def20cbdf656d35859ce211eec02dafa3abb9d5ca937d32a3c3b", - "sha256:f9428d4b1f70af4f4560be4dccbbc5ab5308c00c5b62ed2f1c44ce9e2591b3d2" + "sha256:02a5c06c386c09f513806a200765855936e02c6952a67eb5c62b13f36b047f2a", + "sha256:064b337f627d9907cbaf3c71b8615ad773dd9c21766c29e1ae6816f971ef03e0", + "sha256:0ad9d95739f41b563812fb01d061a8abd45fcc548722b5d9ca50ffe28ce68a1c", + "sha256:12f471bb9121bdd2cf3311a59ce85776e55382c351092ab5678d4a3f71909b05", + "sha256:1c27ac02436c9d2e4b5f4fd172803b66c4eff08e529b7aafae8a08bd3354efcf", + "sha256:25c55249ecb40172f4e90710e1713f8dc46c99f988bbd760381bc7f5a91fa4b1", + "sha256:4906716a42e52900c0004217f910f5315e7e1ad0ad0501d4b0eed074185a3b3c", + "sha256:72517071904cb7ccc370217f5273e6a05683367927c5655e41428bb48304367c", + "sha256:8926bb4fa179a84c92921bf06b36a6c2c96f0c97b433e093090cfdda448d6d22", + "sha256:9a710b194449e577844453e2a55a63fdeb93ace87e498f17b36ea0c056ad8338", + "sha256:9db001ffaaf809b4f5553e5b06c62a0b89ccae64909a36b560e50b191bca51c2", + "sha256:a9dbd2bb52fcdecb066c99cacf96f0ebb40edee50d8885502a5a22d7f723a8b7", + "sha256:af0b95a410ace5ce7e5026bbb55645e7a9a471a320df8794b72c99f721be66cc", + "sha256:b52d983c41f12b69ccb6b4589d73d37734a81883761338994f03f3692728f776", + "sha256:c5626e87568fa9008396783480985c142fe24a5cf92e6104a56acdca09ac7cb5", + "sha256:c8c8aab370a7e44e78b56dab7edbda5d1695ae2a78ec38a64d3ba8f042767d4a", + "sha256:cc5d090f99306807be6c81a8b5f1ed09cafa5d0aa8e1df98046650d7dc8518fa", + "sha256:d1afed38b72e6454dc54d609c507dd0f4ff6a071da43cd5b5d0c574608e5e686", + "sha256:e1ed96cd5dacb796af6e28b4272c1840a8073206c6f830172db1609be12bd5a0", + "sha256:e9d0a7ed96550c184c1a2411dbb7c0a67b507d3da46c1d10d745407875048a9e", + "sha256:f01ec3c29a1f8554ba1b1d83f907fb7d71d79f8e362643db7804ad46362dae51", + "sha256:f26b003d9d6d0d577d14f769199b7886492bc1d9115fb0cf127eec7f7d4347ac", + "sha256:f823f2ff40074fae0a52b4c7af120ec101a0a6c572f1717e5bf094e0196464e8" ], "index": "pypi", - "version": "==2.5.2" + "version": "==2.9.0" }, "pillow": { "hashes": [ - "sha256:165c88bc9d8dba670110c689e3cc5c71dbe4bfb984ffa7cbebf1fac9554071d6", - "sha256:1d208e670abfeb41b6143537a681299ef86e92d2a3dac299d3cd6830d5c7bded", - "sha256:22d070ca2e60c99929ef274cfced04294d2368193e935c5d6febfd8b601bf865", - "sha256:2353834b2c49b95e1313fb34edf18fca4d57446675d05298bb694bca4b194174", - "sha256:39725acf2d2e9c17356e6835dccebe7a697db55f25a09207e38b835d5e1bc032", - "sha256:3de6b2ee4f78c6b3d89d184ade5d8fa68af0848f9b6b6da2b9ab7943ec46971a", - "sha256:47c0d93ee9c8b181f353dbead6530b26980fe4f5485aa18be8f1fd3c3cbc685e", - "sha256:5e2fe3bb2363b862671eba632537cd3a823847db4d98be95690b7e382f3d6378", - "sha256:604815c55fd92e735f9738f65dabf4edc3e79f88541c221d292faec1904a4b17", - "sha256:6c5275bd82711cd3dcd0af8ce0bb99113ae8911fc2952805f1d012de7d600a4c", - "sha256:731ca5aabe9085160cf68b2dbef95fc1991015bc0a3a6ea46a371ab88f3d0913", - "sha256:7612520e5e1a371d77e1d1ca3a3ee6227eef00d0a9cddb4ef7ecb0b7396eddf7", - "sha256:7916cbc94f1c6b1301ac04510d0881b9e9feb20ae34094d3615a8a7c3db0dcc0", - "sha256:81c3fa9a75d9f1afafdb916d5995633f319db09bd773cb56b8e39f1e98d90820", - "sha256:887668e792b7edbfb1d3c9d8b5d8c859269a0f0eba4dda562adb95500f60dbba", - "sha256:8c183b5c60544b49e0a66f924b18c526dfd37774811b627f70836fe01711abd3", - "sha256:93a473b53cc6e0b3ce6bf51b1b95b7b1e7e6084be3a07e40f79b42e83503fbf2", - "sha256:96d4dc103d1a0fa6d47c6c55a47de5f5dafd5ef0114fa10c85a1fd8e0216284b", - "sha256:a3d3e086474ef12ef13d42e5f9b7bbf09d39cf6bd4940f982263d6954b13f6a9", - "sha256:b02a0b9f332086657852b1f7cb380f6a42403a6d9c42a4c34a561aa4530d5234", - "sha256:b09e10ec453de97f9a23a5aa5e30b334195e8d2ddd1ce76cc32e52ba63c8b31d", - "sha256:b6f00ad5ebe846cc91763b1d0c6d30a8042e02b2316e27b05de04fa6ec831ec5", - "sha256:bba80df38cfc17f490ec651c73bb37cd896bc2400cfba27d078c2135223c1206", - "sha256:c3d911614b008e8a576b8e5303e3db29224b455d3d66d1b2848ba6ca83f9ece9", - "sha256:ca20739e303254287138234485579b28cb0d524401f83d5129b5ff9d606cb0a8", - "sha256:cb192176b477d49b0a327b2a5a4979552b7a58cd42037034316b8018ac3ebb59", - "sha256:cdbbe7dff4a677fb555a54f9bc0450f2a21a93c5ba2b44e09e54fcb72d2bd13d", - "sha256:cf6e33d92b1526190a1de904df21663c46a456758c0424e4f947ae9aa6088bf7", - "sha256:d355502dce85ade85a2511b40b4c61a128902f246504f7de29bbeec1ae27933a", - "sha256:d673c4990acd016229a5c1c4ee8a9e6d8f481b27ade5fc3d95938697fa443ce0", - "sha256:dc577f4cfdda354db3ae37a572428a90ffdbe4e51eda7849bf442fb803f09c9b", - "sha256:dd9eef866c70d2cbbea1ae58134eaffda0d4bfea403025f4db6859724b18ab3d", - "sha256:f50e7a98b0453f39000619d845be8b06e611e56ee6e8186f7f60c3b1e2f0feae" + "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af", + "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1", + "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c", + "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55", + "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060", + "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e", + "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8", + "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e", + "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0", + "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328", + "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238", + "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733", + "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03", + "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06", + "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71", + "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b", + "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6", + "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910", + "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce", + "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28", + "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d", + "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb", + "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6", + "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09", + "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be", + "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0", + "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44", + "sha256:bd08a7e01d388c5e0b5b46b52081e01dc96ef226aeed13fa1d7af94b81d4e93b", + "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1", + "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341", + "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34", + "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2", + "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a", + "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5" ], "index": "pypi", - "version": "==8.1.0" + "version": "==8.1.2" }, "pluggy": { "hashes": [ @@ -808,11 +809,11 @@ }, "python-gnupg": { "hashes": [ - "sha256:3aa0884b3bd414652c2385b9df39e7b87272c2eca1b8fcc3089bc9e58652019a", - "sha256:cba3566e8a8fb7bb417d6897a6e17bfc7f9371052e57eb0057783c07d762a679" + "sha256:2061f56b1942c29b92727bf9aecbd3cea3893acc9cccbdc7eb4604285efe4ac7", + "sha256:3ff5b1bf5e397de6e1fe41a7c0f403dad4e242ac92b345f440eaecfb72a7ebae" ], "index": "pypi", - "version": "==0.4.6" + "version": "==0.4.7" }, "python-levenshtein": { "hashes": [ @@ -851,15 +852,23 @@ "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", + "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", + "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", + "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", + "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", + "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" + "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", + "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", + "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", + "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" ], "version": "==5.4.1" }, @@ -874,98 +883,87 @@ }, "regex": { "hashes": [ - "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538", - "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4", - "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc", - "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa", - "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444", - "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1", - "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af", - "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8", - "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9", - "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88", - "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba", - "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364", - "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e", - "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7", - "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0", - "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31", - "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683", - "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee", - "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b", - "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884", - "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c", - "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e", - "sha256:80ef188c0e47a6c964eed71c55a73c245f8daf9f0a4a9d804e91275afb468ca4", - "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562", - "sha256:842fb985b2b99a82a2b145b6bbd588c5f5cfd83693402920fcb985d515794666", - "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85", - "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c", - "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6", - "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d", - "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b", - "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70", - "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b", - "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b", - "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f", - "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0", - "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5", - "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5", - "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f", - "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e", - "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512", - "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d", - "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917", - "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f" + "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139", + "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5", + "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa", + "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3", + "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df", + "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f", + "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e", + "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd", + "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d", + "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e", + "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f", + "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa", + "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68", + "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643", + "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3", + "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be", + "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578", + "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c", + "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5", + "sha256:63f861afb575ee39fc42df919ca6c625b534cf51b2b95d54fc97f85d293a22a2", + "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba", + "sha256:808276b84e69346635da368f4b9d37ab8b27ce20a7b30e9cbb3717d1e81c78ec", + "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe", + "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c", + "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a", + "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb", + "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d", + "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38", + "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18", + "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce", + "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa", + "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6", + "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5", + "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90", + "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c", + "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106", + "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7", + "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0", + "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689", + "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd", + "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932", + "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf", + "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14" ], - "version": "==2020.11.13" + "version": "==2021.3.17" }, "reportlab": { "hashes": [ - "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1", - "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a", - "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935", - "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881", - "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd", - "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b", - "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8", - "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b", - "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d", - "sha256:1e484ce83dae26cb40fcbd312d45b8ba921de7856a00339d867dd4ecf145a1e7", - "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378", - "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06", - "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69", - "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0", - "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f", - "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f", - "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad", - "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491", - "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8", - "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53", - "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22", - "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb", - "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121", - "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c", - "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431", - "sha256:8850eba6de6eb813036eb8dce353e40d60c8af48bbce107de82770b10d3aa525", - "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef", - "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454", - "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a", - "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5", - "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057", - "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536", - "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c", - "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be", - "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75", - "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4", - "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2", - "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e", - "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16", - "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8", - "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc", - "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442" + "sha256:07f9d9c0360cb8fc780ca05264faa68b90583cd28dbdf2cda6bda34379b6e66c", + "sha256:27a831da0d17153e33c985bd7a88307e206c5a28778cddb755d5372598d12637", + "sha256:289539f7888239343ef7ebcd30c55e6204ef78d5f70e1547fdeb854a2da8bfa1", + "sha256:3ec70873d99c14570e2a9c44b86c8c01526871e7af5ee4b2855246db15cb0c9f", + "sha256:46745826657d35f86843487f4bc6f6f805f61260428f8ee13642bf6372f9df55", + "sha256:4a784ecdf3008f533e5a032b96c395e8592ed5e679baaf5ef4dcc136b01c72e9", + "sha256:4c42e85851f969e21fa4d6414587b7544e877ce685e2495d7d422589c70b6281", + "sha256:58bec163f727c1c60515fc4704a961b3b4ccf2c76b4e6ec1a457ea7ed0c2d756", + "sha256:6f007142f2b166f52cbb3e5d23319e3e496c429831e53b904e6db28c3370f279", + "sha256:81898de0a0be2c8318468ae0ae1590f828805e9b7fd68e5a50667dce8b942171", + "sha256:8707cc21a769150154bf4634dca6e9581ae24a05f0fb81a84fcc1143b1cbbfde", + "sha256:87546a129b36b50221172d3e42377eafbc2aae130ba9472953ac8f219fe119e4", + "sha256:99aeee49a61c85f1af1087e9e418f3d0c2352c4dd0f0abbfac17ae6c467185aa", + "sha256:9ec95808b742ce70c1dab28b2c5bef9093816b92315b948419c2c6968658f9cc", + "sha256:b2c7eedb4d19db63301c27ad1076086a099fd4c8ca0a6f62f6e9ed749fa5908f", + "sha256:b2cf692ae7af995b499a31a3f58f2001d98e310e03f74812bcb97a08078239c0", + "sha256:b9494986f35d82350b0ce0c29704a49a3945421b789dff92e93fbd3de554fa34", + "sha256:ba2d10f368c9ea1e76c84b3bb6b9982eb5a8f243c434e821c505b75ca8d85852", + "sha256:bc62187181582772688d65c557ad6a40a4c3bb8d1f74de463d35ea81983e9b75", + "sha256:bdf751289efee4891f4f354ce9122da8de8258a40f328b3f11540c4888363337", + "sha256:c12432575c793b8cd8552fddc219bbf2813541c64d02854ae345a108fb875b9d", + "sha256:cdf8ff72cd6fa9303744c8409fb81ef7720da2e034c369762c2fdf496462179e", + "sha256:d810bffd4bcd50fdcb2bab0d1fe9ea4e6187ed5237687e41c6ade6c884b00c1e", + "sha256:d8fefd07072bfae2715283a821fb1acf8fc4946cf925509d5cc2af791c611809", + "sha256:d92834993bf998853a04946729266a3276965e7b13f7423212f1c1abdfc4a1c7", + "sha256:ee711804acdaf3ea7f0f2cd27f19478af993e730df8c8d923a678eb0e2572fba", + "sha256:f0634740b099b69caed081acd89692996b5504c59f86f39781b6bebc82b267f5", + "sha256:f92388e30bf6b5d2eceb3d7b05ee2df856635f74ce7d950a8f45d2b70c685a5b", + "sha256:fd6712a8a6dca12181a3a12316f97810927861e77f2a98029efd2c5cfc8546dc", + "sha256:fe5d98cdac07dd702bcd49f5723aacdd0af8c84d70fc82a5cc3781e52aedad52" ], - "version": "==3.5.59" + "markers": "python_version >= '2.7' and python_version < '4'", + "version": "==3.5.65" }, "requests": { "hashes": [ @@ -1087,11 +1085,11 @@ }, "tqdm": { "hashes": [ - "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089", - "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba" + "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7", + "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33" ], "index": "pypi", - "version": "==4.58.0" + "version": "==4.59.0" }, "twisted": { "extras": [ @@ -1121,11 +1119,11 @@ }, "urllib3": { "hashes": [ - "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", - "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" + "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", + "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.3" + "version": "==1.26.4" }, "uvicorn": { "extras": [ @@ -1354,68 +1352,69 @@ }, "coverage": { "hashes": [ - "sha256:03ed2a641e412e42cc35c244508cf186015c217f0e4d496bf6d7078ebe837ae7", - "sha256:04b14e45d6a8e159c9767ae57ecb34563ad93440fc1b26516a89ceb5b33c1ad5", - "sha256:0cdde51bfcf6b6bd862ee9be324521ec619b20590787d1655d005c3fb175005f", - "sha256:0f48fc7dc82ee14aeaedb986e175a429d24129b7eada1b7e94a864e4f0644dde", - "sha256:107d327071061fd4f4a2587d14c389a27e4e5c93c7cba5f1f59987181903902f", - "sha256:1375bb8b88cb050a2d4e0da901001347a44302aeadb8ceb4b6e5aa373b8ea68f", - "sha256:14a9f1887591684fb59fdba8feef7123a0da2424b0652e1b58dd5b9a7bb1188c", - "sha256:16baa799ec09cc0dcb43a10680573269d407c159325972dd7114ee7649e56c66", - "sha256:1b811662ecf72eb2d08872731636aee6559cae21862c36f74703be727b45df90", - "sha256:1ccae21a076d3d5f471700f6d30eb486da1626c380b23c70ae32ab823e453337", - "sha256:2f2cf7a42d4b7654c9a67b9d091ec24374f7c58794858bff632a2039cb15984d", - "sha256:322549b880b2d746a7672bf6ff9ed3f895e9c9f108b714e7360292aa5c5d7cf4", - "sha256:32ab83016c24c5cf3db2943286b85b0a172dae08c58d0f53875235219b676409", - "sha256:3fe50f1cac369b02d34ad904dfe0771acc483f82a1b54c5e93632916ba847b37", - "sha256:4a780807e80479f281d47ee4af2eb2df3e4ccf4723484f77da0bb49d027e40a1", - "sha256:4a8eb7785bd23565b542b01fb39115a975fefb4a82f23d407503eee2c0106247", - "sha256:4b40b794775df10d7e3ea677108dd581bfec796235750c617d461874178a67f6", - "sha256:5bee3970617b3d74759b2d2df2f6a327d372f9732f9ccbf03fa591b5f7581e39", - "sha256:60a3307a84ec60578accd35d7f0c71a3a971430ed7eca6567399d2b50ef37b8c", - "sha256:6625e52b6f346a283c3d563d1fd8bae8956daafc64bb5bbd2b8f8a07608e3994", - "sha256:66a5aae8233d766a877c5ef293ec5ab9520929c2578fd2069308a98b7374ea8c", - "sha256:68fb816a5dd901c6aff352ce49e2a0ffadacdf9b6fae282a69e7a16a02dad5fb", - "sha256:6b588b5cf51dc0fd1c9e19f622457cc74b7d26fe295432e434525f1c0fae02bc", - "sha256:6c4d7165a4e8f41eca6b990c12ee7f44fef3932fac48ca32cecb3a1b2223c21f", - "sha256:6d2e262e5e8da6fa56e774fb8e2643417351427604c2b177f8e8c5f75fc928ca", - "sha256:6d9c88b787638a451f41f97446a1c9fd416e669b4d9717ae4615bd29de1ac135", - "sha256:755c56beeacac6a24c8e1074f89f34f4373abce8b662470d3aa719ae304931f3", - "sha256:7e40d3f8eb472c1509b12ac2a7e24158ec352fc8567b77ab02c0db053927e339", - "sha256:812eaf4939ef2284d29653bcfee9665f11f013724f07258928f849a2306ea9f9", - "sha256:84df004223fd0550d0ea7a37882e5c889f3c6d45535c639ce9802293b39cd5c9", - "sha256:859f0add98707b182b4867359e12bde806b82483fb12a9ae868a77880fc3b7af", - "sha256:87c4b38288f71acd2106f5d94f575bc2136ea2887fdb5dfe18003c881fa6b370", - "sha256:89fc12c6371bf963809abc46cced4a01ca4f99cba17be5e7d416ed7ef1245d19", - "sha256:9564ac7eb1652c3701ac691ca72934dd3009997c81266807aef924012df2f4b3", - "sha256:9754a5c265f991317de2bac0c70a746efc2b695cf4d49f5d2cddeac36544fb44", - "sha256:a565f48c4aae72d1d3d3f8e8fb7218f5609c964e9c6f68604608e5958b9c60c3", - "sha256:a636160680c6e526b84f85d304e2f0bb4e94f8284dd765a1911de9a40450b10a", - "sha256:a839e25f07e428a87d17d857d9935dd743130e77ff46524abb992b962eb2076c", - "sha256:ae9702c099546e72000d76758b5efec2dd937ba5d746ec8d0563d2fca0f9bc2e", - "sha256:b62046592b44263fa7570f1117d372ae3f310222af1fc1407416f037fb3af21b", - "sha256:b7f7421841f8db443855d2854e25914a79a1ff48ae92f70d0a5c2f8907ab98c9", - "sha256:ba7ca81b6d60a9f7a0b4b4e175dcc38e8fef4992673d9d6e6879fd6de00dd9b8", - "sha256:bb32ca14b4d04e172c541c69eec5f385f9a075b38fb22d765d8b0ce3af3a0c22", - "sha256:c0ff1c1b4d13e2240821ef23c1efb1f009207cb3f56e16986f713c2b0e7cd37f", - "sha256:c669b440ce46ae3abe9b2d44a913b5fd86bb19eb14a8701e88e3918902ecd345", - "sha256:c67734cff78383a1f23ceba3b3239c7deefc62ac2b05fa6a47bcd565771e5880", - "sha256:c6809ebcbf6c1049002b9ac09c127ae43929042ec1f1dbd8bb1615f7cd9f70a0", - "sha256:cd601187476c6bed26a0398353212684c427e10a903aeafa6da40c63309d438b", - "sha256:ebfa374067af240d079ef97b8064478f3bf71038b78b017eb6ec93ede1b6bcec", - "sha256:fbb17c0d0822684b7d6c09915677a32319f16ff1115df5ec05bdcaaee40b35f3", - "sha256:fff1f3a586246110f34dc762098b5afd2de88de507559e63553d7da643053786" + "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", + "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", + "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45", + "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a", + "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03", + "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529", + "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", + "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", + "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", + "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", + "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", + "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", + "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a", + "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4", + "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff", + "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502", + "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793", + "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb", + "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905", + "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821", + "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b", + "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81", + "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0", + "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b", + "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3", + "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184", + "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701", + "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a", + "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82", + "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638", + "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5", + "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083", + "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6", + "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90", + "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465", + "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a", + "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3", + "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e", + "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066", + "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf", + "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b", + "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae", + "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669", + "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873", + "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b", + "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6", + "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb", + "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160", + "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c", + "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079", + "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", + "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==5.4" + "version": "==5.5" }, "coveralls": { "hashes": [ - "sha256:5399c0565ab822a70a477f7031f6c88a9dd196b3de2877b3facb43b51bd13434", - "sha256:f8384968c57dee4b7133ae701ecdad88e85e30597d496dcba0d7fbb470dca41f" + "sha256:7bd173b3425733661ba3063c88f180127cc2b20e9740686f86d2622b31b41385", + "sha256:cbb942ae5ef3d2b55388cb5b43e93a269544911535f1e750e1c656aef019ce60" ], "index": "pypi", - "version": "==3.0.0" + "version": "==3.0.1" }, "distlib": { "hashes": [ @@ -1457,11 +1456,11 @@ }, "faker": { "hashes": [ - "sha256:90b69e9e05d622edb2fa5ebfda7bef41c88675cace85e72689fde5b8723d00a3", - "sha256:da395fe545f40d4366b82b1a02448847a4586bd2b28af393b3edbd1e45d1e0fc" + "sha256:60a7263104ef7a14ecfe2af1142d53924aa534ccec85cea82bb67b2b32f84421", + "sha256:f43ac743c34affb1c7fccca8b06450371cd482b6ddcb4110e420acb24356e70b" ], "markers": "python_version >= '3.6'", - "version": "==6.5.0" + "version": "==6.6.2" }, "filelock": { "hashes": [ @@ -1591,19 +1590,19 @@ }, "pycodestyle": { "hashes": [ - "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367", - "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e" + "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", + "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" ], "index": "pypi", - "version": "==2.6.0" + "version": "==2.7.0" }, "pygments": { "hashes": [ - "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0", - "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88" + "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94", + "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8" ], "markers": "python_version >= '3.5'", - "version": "==2.8.0" + "version": "==2.8.1" }, "pyparsing": { "hashes": [ @@ -1796,27 +1795,27 @@ }, "tox": { "hashes": [ - "sha256:89afa9c59c04beb55eda789c7a65feb1a70fde117f85f1bd1c27c66758456e60", - "sha256:ed1e650cf6368bcbc4a071eeeba363c480920e0ed8a9ad1793c7caaa5ad33d49" + "sha256:05a4dbd5e4d3d8269b72b55600f0b0303e2eb47ad5c6fe76d3576f4c58d93661", + "sha256:e007673f3595cede9b17a7c4962389e4305d4a3682a6c5a4159a1453b4f326aa" ], "index": "pypi", - "version": "==3.22.0" + "version": "==3.23.0" }, "urllib3": { "hashes": [ - "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", - "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" + "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", + "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.3" + "version": "==1.26.4" }, "virtualenv": { "hashes": [ - "sha256:147b43894e51dd6bba882cf9c282447f780e2251cd35172403745fc381a0a80d", - "sha256:2be72df684b74df0ea47679a7df93fd0e04e72520022c57b479d8f881485dbe3" + "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107", + "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.2" + "version": "==20.4.3" } } } diff --git a/requirements.txt b/requirements.txt index 947a30350..de268fc2e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,11 +8,11 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 -arrow==1.0.1; python_version >= '3.6' +arrow==1.0.3; python_version >= '3.6' asgiref==3.3.1; python_version >= '3.5' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -autobahn==21.2.2; python_version >= '3.7' +autobahn==21.3.1; python_version >= '3.7' automat==20.2.0 blessed==1.18.0 certifi==2020.12.5 @@ -43,9 +43,9 @@ httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.38.1 +imap-tools==0.39.0 img2pdf==0.4.0 -incremental==17.5.0 +incremental==21.3.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 joblib==1.0.1; python_version >= '3.6' @@ -53,11 +53,11 @@ langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.7.0 +ocrmypdf==11.7.1 pathvalidate==2.3.2 pdfminer.six==20201018 -pikepdf==2.5.2 -pillow==8.1.0 +pikepdf==2.9.0 +pillow==8.1.2 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.2.1; python_version >= '3' psycopg2-binary==2.8.6 @@ -67,14 +67,14 @@ pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3. pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 python-dotenv==0.15.0 -python-gnupg==0.4.6 +python-gnupg==0.4.7 python-levenshtein==0.12.2 python-magic==0.4.22 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 -regex==2020.11.13 -reportlab==3.5.59 +regex==2021.3.17 +reportlab==3.5.65; python_version >= '2.7' and python_version < '4' requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 scipy==1.5.4 @@ -84,11 +84,11 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.58.0 +tqdm==4.59.0 twisted[tls]==21.2.0; python_full_version >= '3.5.4' txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 -urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +urllib3==1.26.4; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.4 uvloop==0.14.0 watchdog==1.0.2 From 6d8ebf0baf907b01fc06cb588b907e5c812cdc68 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 18 Mar 2021 23:50:54 +0100 Subject: [PATCH 650/898] New Crowdin updates (#790) --- src-ui/src/locale/messages.nl_NL.xlf | 2 +- src-ui/src/locale/messages.pt_PT.xlf | 2 +- src/locale/nl_NL/LC_MESSAGES/django.po | 4 +- src/locale/pt_PT/LC_MESSAGES/django.po | 100 ++++++++++++------------- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 647a8de2b..c187fc531 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Portuguese</target> + <target state="translated">Portugees</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 98de03004..1059654f9 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1927,7 +1927,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">95</context> </context-group> - <target state="needs-translation">Portuguese</target> + <target state="translated">Português</target> </trans-unit> <trans-unit id="9184513005098760425" datatype="html"> <source>Portuguese (Brazil)</source> diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index fa57cd6aa..c07b3d521 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:47\n" +"PO-Revision-Date: 2021-03-18 20:12\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -430,7 +430,7 @@ msgstr "Portugees (Brazilië)" #: paperless/settings.py:304 msgid "Portuguese" -msgstr "" +msgstr "Portugees" #: paperless/settings.py:305 msgid "Italian" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index a22858ce4..6ed99d226 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:48\n" +"PO-Revision-Date: 2021-03-18 22:23\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -80,7 +80,7 @@ msgstr "é etiqueta de novo" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "Marca esta etiqueta como uma etiqueta de entrada. Todos os documentos recentemente consumidos serão etiquetados com a etiqueta de entrada." #: documents/models.py:94 msgid "tag" @@ -116,11 +116,11 @@ msgstr "conteúdo" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "Os dados de texto, em cru, do documento. Este campo é utilizado principalmente para pesquisar." #: documents/models.py:144 msgid "mime type" -msgstr "" +msgstr "tipo mime" #: documents/models.py:155 msgid "checksum" @@ -176,7 +176,7 @@ msgstr "numero de série de arquivo" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "" +msgstr "A posição do documento no seu arquivo físico de documentos." #: documents/models.py:223 msgid "document" @@ -264,7 +264,7 @@ msgstr "o conteúdo contém" #: documents/models.py:372 msgid "ASN is" -msgstr "" +msgstr "O NSA é" #: documents/models.py:373 msgid "correspondent is" @@ -276,7 +276,7 @@ msgstr "o tipo de documento é" #: documents/models.py:375 msgid "is in inbox" -msgstr "" +msgstr "está na entrada" #: documents/models.py:376 msgid "has tag" @@ -328,7 +328,7 @@ msgstr "não tem etiqueta" #: documents/models.py:388 msgid "does not have ASN" -msgstr "" +msgstr "não possui um NSA" #: documents/models.py:389 msgid "title or content contains" @@ -390,7 +390,7 @@ msgstr "Por favor inicie sessão." #: documents/templates/registration/login.html:45 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "O utilizador e a senha não correspondem. Tente novamente." #: documents/templates/registration/login.html:48 msgid "Username" @@ -430,7 +430,7 @@ msgstr "Português (Brasil)" #: paperless/settings.py:304 msgid "Portuguese" -msgstr "" +msgstr "Português" #: paperless/settings.py:305 msgid "Italian" @@ -458,7 +458,7 @@ msgstr "Filtro" #: paperless_mail/admin.py:27 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "O Paperless apenas irá processar emails que coincidem com TODOS os filtros dados abaixo." #: paperless_mail/admin.py:37 msgid "Actions" @@ -466,7 +466,7 @@ msgstr "Ações" #: paperless_mail/admin.py:39 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "A ação aplicada a correio. Esta ação apenas será efetuada com documentos que tenham sido consumidos através do correio. E-mails sem anexos permanecerão intactos." #: paperless_mail/admin.py:46 msgid "Metadata" @@ -474,83 +474,83 @@ msgstr "Metadados" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "Atribuir meta-dados aos documentos consumidos automaticamente através desta regra. Se você não atribuir etiquetas, tipos ou correspondentes aqui, o paperless ainda assim processará todas as regras correspondentes que tenha definido." #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "" +msgstr "Correio Paperless" #: paperless_mail/models.py:11 msgid "mail account" -msgstr "" +msgstr "conta de email" #: paperless_mail/models.py:12 msgid "mail accounts" -msgstr "" +msgstr "contas de email" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "" +msgstr "Sem encriptação" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "" +msgstr "Utilizar SSL" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "" +msgstr "Utilizar STARTTLS" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "" +msgstr "Servidor IMAP" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "" +msgstr "Porto IMAP" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "Por norma é o 143 sem encriptação e conexões STARTTLS, e o 993 para conexões com SSL." #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "" +msgstr "Segurança IMAP" #: paperless_mail/models.py:46 msgid "username" -msgstr "" +msgstr "nome de utilizador" #: paperless_mail/models.py:50 msgid "password" -msgstr "" +msgstr "palavra-passe" #: paperless_mail/models.py:60 msgid "mail rule" -msgstr "" +msgstr "regra de correio" #: paperless_mail/models.py:61 msgid "mail rules" -msgstr "" +msgstr "regras de correio" #: paperless_mail/models.py:67 msgid "Only process attachments." -msgstr "" +msgstr "Processar anexos apenas." #: paperless_mail/models.py:68 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "Processar todos os ficheiros, incluindo ficheiros 'embutidos (inline)'." #: paperless_mail/models.py:78 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "Marcar como lido, não processar emails lidos" #: paperless_mail/models.py:79 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "Marcar o email, não processar emails marcados" #: paperless_mail/models.py:80 msgid "Move to specified folder" -msgstr "" +msgstr "Mover para uma diretoria específica" #: paperless_mail/models.py:81 msgid "Delete" @@ -558,51 +558,51 @@ msgstr "Excluir" #: paperless_mail/models.py:88 msgid "Use subject as title" -msgstr "" +msgstr "Utilizar o assunto como título" #: paperless_mail/models.py:89 msgid "Use attachment filename as title" -msgstr "" +msgstr "Utilizar o nome do anexo como título" #: paperless_mail/models.py:99 msgid "Do not assign a correspondent" -msgstr "" +msgstr "Não atribuir um correspondente" #: paperless_mail/models.py:101 msgid "Use mail address" -msgstr "" +msgstr "Utilizar o endereço de email" #: paperless_mail/models.py:103 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "Utilizar nome (ou endereço de email se não disponível)" #: paperless_mail/models.py:105 msgid "Use correspondent selected below" -msgstr "" +msgstr "Utilizar o correspondente selecionado abaixo" #: paperless_mail/models.py:113 msgid "order" -msgstr "" +msgstr "ordem" #: paperless_mail/models.py:120 msgid "account" -msgstr "" +msgstr "conta" #: paperless_mail/models.py:124 msgid "folder" -msgstr "" +msgstr "directoria" #: paperless_mail/models.py:128 msgid "filter from" -msgstr "" +msgstr "filtrar de" #: paperless_mail/models.py:131 msgid "filter subject" -msgstr "" +msgstr "filtrar assunto" #: paperless_mail/models.py:134 msgid "filter body" -msgstr "" +msgstr "filtrar corpo" #: paperless_mail/models.py:138 msgid "filter attachment filename" @@ -638,25 +638,25 @@ msgstr "parâmetro de ação" #: paperless_mail/models.py:167 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "" +msgstr "Parâmetro adicional para a ação selecionada acima, isto é, a diretoria de destino do movimento da ação para a pasta." #: paperless_mail/models.py:173 msgid "assign title from" -msgstr "" +msgstr "atribuir titulo de" #: paperless_mail/models.py:183 msgid "assign this tag" -msgstr "" +msgstr "atribuir esta etiqueta" #: paperless_mail/models.py:191 msgid "assign this document type" -msgstr "" +msgstr "atribuir este tipo de documento" #: paperless_mail/models.py:195 msgid "assign correspondent from" -msgstr "" +msgstr "atribuir correspondente de" #: paperless_mail/models.py:205 msgid "assign this correspondent" -msgstr "" +msgstr "atribuir este correspondente" From 5af525cb5a8808b5230482f1c86f25cb36dacc7d Mon Sep 17 00:00:00 2001 From: HolzHannes <holzhannes@posteo.de> Date: Sat, 20 Mar 2021 11:10:05 +0100 Subject: [PATCH 651/898] Update scanners.rst Some new scanners and a new Support column SMTP for Scanner which can directly send mails via SMTP. Also one iOS App to scan documents --- docs/scanners.rst | 54 +++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index ad7566c71..04856bbfc 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -13,26 +13,35 @@ that works right for you based on recommendations from other Paperless users. Physical scanners ================= -+---------+----------------+-----+-----+-----+----------------+ -| Brand | Model | Supports | Recommended By | -+---------+----------------+-----+-----+-----+----------------+ -| | | FTP | NFS | SMB | | -+=========+================+=====+=====+=====+================+ -| Brother | `ADS-1500W`_ | yes | no | yes | `danielquinn`_ | -+---------+----------------+-----+-----+-----+----------------+ -| Brother | `MFC-J6930DW`_ | yes | | | `ayounggun`_ | -+---------+----------------+-----+-----+-----+----------------+ -| Brother | `MFC-J5910DW`_ | yes | | | `bmsleight`_ | -+---------+----------------+-----+-----+-----+----------------+ -| Brother | `MFC-9142CDN`_ | yes | | yes | `REOLDEV`_ | -+---------+----------------+-----+-----+-----+----------------+ -| Fujitsu | `ix500`_ | yes | | yes | `eonist`_ | -+---------+----------------+-----+-----+-----+----------------+ -| Epson | `WF-7710DWF`_ | yes | | yes | `Skylinar`_ | -+---------+----------------+-----+-----+-----+----------------+ -| Fujitsu | `S1300i`_ | yes | | yes | `jonaswinkler`_| -+---------+----------------+-----+-----+-----+----------------+ ++---------+----------------+-----+-----+-----+------+----------------+ +| Brand | Model | Supports | Recommended By | ++---------+----------------+-----+-----+-----+------+----------------+ +| | | FTP | NFS | SMB | SMTP | | ++=========+================+=====+=====+=====+======+================+ +| Brother | `ADS-1700W`_ | yes | no | yes | yes |`holzhannes`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `ADS-1600W`_ | yes | no | yes | yes |`holzhannes`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `ADS-1500W`_ | yes | no | yes | yes |`danielquinn`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `MFC-J6930DW`_ | yes | | | |`ayounggun`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `MFC-L5850DW`_ | yes | | | yes |`holzhannes`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `MFC-J5910DW`_ | yes | | | |`bmsleight`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `MFC-9142CDN`_ | yes | | yes | |`REOLDEV`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Fujitsu | `ix500`_ | yes | | yes | |`eonist`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Epson | `WF-7710DWF`_ | yes | | yes | |`Skylinar`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +| Fujitsu | `S1300i`_ | yes | | yes | |`jonaswinkler`_ | ++---------+----------------+-----+-----+-----+------+----------------+ +.. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw +.. _ADS-1700W: https://www.brother-usa.com/products/ads1700w +.. _ADS-1600W: https://www.brother-usa.com/products/ads1600w .. _ADS-1500W: https://www.brother.ca/en/p/ads1500w .. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW .. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw @@ -41,6 +50,7 @@ Physical scanners .. _WF-7710DWF: https://www.epson.de/en/products/printers/inkjet-printers/for-home/workforce-wf-7710dwf .. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/ + .. _danielquinn: https://github.com/danielquinn .. _ayounggun: https://github.com/ayounggun .. _bmsleight: https://github.com/bmsleight @@ -48,6 +58,7 @@ Physical scanners .. _REOLDEV: https://github.com/REOLDEV .. _Skylinar: https://github.com/Skylinar .. _jonaswinkler: https://github.com/jonaswinkler +.. _holzhannes: https://github.com/holzhannes Mobile phone software ===================== @@ -63,10 +74,13 @@ You can use your phone to "scan" documents. The regular camera app will work, bu +-------------------+----------------+-----+-----+-----+-------+--------+----------------+ | `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ | +-------------------+----------------+-----+-----+-----+-------+--------+----------------+ +| `Quick Scan`_ | iOS | no | no | no | no | no | `holzhannes`_ | ++-------------------+----------------+-----+-----+-----+-------+--------+----------------+ -On Android, you can use these applications in combination with one of the :ref:`Paperless-ng compatible apps <usage-mobile_upload>` to "Share" the documents produced by these scanner apps with paperless. +On Android, you can use these applications in combination with one of the :ref:`Paperless-ng compatible apps <usage-mobile_upload>` to "Share" the documents produced by these scanner apps with paperless. On iOS, you can share the scanned documents via iOS-Sharing to other mail, WebDav or FTP apps. .. _Office Lens: https://play.google.com/store/apps/details?id=com.microsoft.office.officelens .. _Genius Scan: https://play.google.com/store/apps/details?id=com.thegrizzlylabs.geniusscan.free +.. _Quick Scan: https://apps.apple.com/us/app/quickscan-scanner-text-ocr/id1513790291 .. _hannahswain: https://github.com/hannahswain From cf6662f670b766d86aca851c0505db7356335a70 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Mar 2021 11:43:16 +0100 Subject: [PATCH 652/898] Revert "update requirements" This reverts commit 8f6e1360 --- Pipfile | 5 +- Pipfile.lock | 487 ++++++++++++++++++++++++----------------------- requirements.txt | 24 +-- 3 files changed, 259 insertions(+), 257 deletions(-) diff --git a/Pipfile b/Pipfile index 587872860..4d9836e68 100644 --- a/Pipfile +++ b/Pipfile @@ -24,8 +24,9 @@ langdetect = "*" # numpy 1.20.0 drops python 3.6 support numpy = "~=1.19.5" pathvalidate = "*" -pillow = "~=8.1.0" -pikepdf = "~=2.5" +# pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202 +pillow = "==8.1.0" +pikepdf = "~=2.5.0" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 33fae8d40..98d8655eb 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "50d92219dc02e7b3fdc2cd769ee4d838ff69da45ed9b06b54990e7a937cc2e9d" + "sha256": "49f8a0718a7982bc4ca7e1315c17849523b0d29c38f13cff88f8f883e0e9943a" }, "pipfile-spec": 6, "requires": {}, @@ -28,11 +28,11 @@ }, "arrow": { "hashes": [ - "sha256:3515630f11a15c61dcb4cdd245883270dd334c83f3e639824e65a4b79cc48543", - "sha256:399c9c8ae732270e1aa58ead835a79a40d7be8aa109c579898eb41029b5a231d" + "sha256:7909d9fd30d32fa8fd173fdeb3f7125aaf6dedd1a837276fe1d8cea2c0e86d76", + "sha256:b1e106a0ab754e540f4aeb08747900830b688adef02d81240e65afc0e781a870" ], "markers": "python_version >= '3.6'", - "version": "==1.0.3" + "version": "==1.0.1" }, "asgiref": { "hashes": [ @@ -60,11 +60,11 @@ }, "autobahn": { "hashes": [ - "sha256:9195df8af03b0ff29ccd4b7f5abbde957ee90273465942205f9a1bad6c3f07ac", - "sha256:e126c1f583e872fb59e79d36977cfa1f2d0a8a79f90ae31f406faae7664b8e03" + "sha256:884f79c50fdc55ade2c315946a9caa145e8b10075eee9d2c2594ea5e8f5226aa", + "sha256:bf7a9d302a34d0f719d43c57f65ca1f2f5c982dd6ea0c11e1e190ef6f43710fe" ], "markers": "python_version >= '3.7'", - "version": "==21.3.1" + "version": "==21.2.2" }, "automat": { "hashes": [ @@ -413,11 +413,11 @@ }, "imap-tools": { "hashes": [ - "sha256:00fa5b5046c0437976ad7dd5e45b1847bfd5d14bb858c9b19a5cf2994bba96d9", - "sha256:3b4d0a911bc48ea7c0beac6a15b6f65b6fdf2b066a67cd3536253ec98e401e83" + "sha256:44641716f0c5c07df78c5713405675fac50220d4f8e2906c9ed4aabd9c356fa8", + "sha256:bab9a6edf848a58bdd3959ba55e0eb75039ff188a3779371d0b8db674a4945e8" ], "index": "pypi", - "version": "==0.39.0" + "version": "==0.38.1" }, "img2pdf": { "hashes": [ @@ -428,10 +428,10 @@ }, "incremental": { "hashes": [ - "sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57", - "sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321" + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" ], - "version": "==21.3.0" + "version": "==17.5.0" }, "inotify-simple": { "hashes": [ @@ -589,11 +589,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:2d2c9efd3443e3fc3e852aea572b8d82bcdf24081c7cc74d760ae4064859bb54", - "sha256:a403699d54d63ff32ebc117ce5dde4d3c870ab69d5ef3e63c24ef12bc7b9b7e9" + "sha256:2fca4046e3a33e5902dd89c3003a3f31c7d584dc43f14c7c97f57fce20d2e469", + "sha256:5c386fcf2c0f2635533c2bad0edcd2d455f667a134d180dc61cbb3d4d5f0c8e2" ], "index": "pypi", - "version": "==11.7.1" + "version": "==11.7.0" }, "pathvalidate": { "hashes": [ @@ -613,72 +613,71 @@ }, "pikepdf": { "hashes": [ - "sha256:02a5c06c386c09f513806a200765855936e02c6952a67eb5c62b13f36b047f2a", - "sha256:064b337f627d9907cbaf3c71b8615ad773dd9c21766c29e1ae6816f971ef03e0", - "sha256:0ad9d95739f41b563812fb01d061a8abd45fcc548722b5d9ca50ffe28ce68a1c", - "sha256:12f471bb9121bdd2cf3311a59ce85776e55382c351092ab5678d4a3f71909b05", - "sha256:1c27ac02436c9d2e4b5f4fd172803b66c4eff08e529b7aafae8a08bd3354efcf", - "sha256:25c55249ecb40172f4e90710e1713f8dc46c99f988bbd760381bc7f5a91fa4b1", - "sha256:4906716a42e52900c0004217f910f5315e7e1ad0ad0501d4b0eed074185a3b3c", - "sha256:72517071904cb7ccc370217f5273e6a05683367927c5655e41428bb48304367c", - "sha256:8926bb4fa179a84c92921bf06b36a6c2c96f0c97b433e093090cfdda448d6d22", - "sha256:9a710b194449e577844453e2a55a63fdeb93ace87e498f17b36ea0c056ad8338", - "sha256:9db001ffaaf809b4f5553e5b06c62a0b89ccae64909a36b560e50b191bca51c2", - "sha256:a9dbd2bb52fcdecb066c99cacf96f0ebb40edee50d8885502a5a22d7f723a8b7", - "sha256:af0b95a410ace5ce7e5026bbb55645e7a9a471a320df8794b72c99f721be66cc", - "sha256:b52d983c41f12b69ccb6b4589d73d37734a81883761338994f03f3692728f776", - "sha256:c5626e87568fa9008396783480985c142fe24a5cf92e6104a56acdca09ac7cb5", - "sha256:c8c8aab370a7e44e78b56dab7edbda5d1695ae2a78ec38a64d3ba8f042767d4a", - "sha256:cc5d090f99306807be6c81a8b5f1ed09cafa5d0aa8e1df98046650d7dc8518fa", - "sha256:d1afed38b72e6454dc54d609c507dd0f4ff6a071da43cd5b5d0c574608e5e686", - "sha256:e1ed96cd5dacb796af6e28b4272c1840a8073206c6f830172db1609be12bd5a0", - "sha256:e9d0a7ed96550c184c1a2411dbb7c0a67b507d3da46c1d10d745407875048a9e", - "sha256:f01ec3c29a1f8554ba1b1d83f907fb7d71d79f8e362643db7804ad46362dae51", - "sha256:f26b003d9d6d0d577d14f769199b7886492bc1d9115fb0cf127eec7f7d4347ac", - "sha256:f823f2ff40074fae0a52b4c7af120ec101a0a6c572f1717e5bf094e0196464e8" + "sha256:02815df9499d3a6dfac2e07e4d2fdbe25fcbefae208970e76bff90af4a402d49", + "sha256:06b0c3004cc9e9068ebc62bb59c3c3a54e7af13867f4a326690d79c69a1cf288", + "sha256:1a471c6ca288fbcd0e1b0e128ef12bb14c5e7db745786308ba292fc7cff30bb5", + "sha256:489ed0fd1281beb0343a34fe8b9d94407c440ed0419ab2e6f5ea297a41824a31", + "sha256:5106b27f7085ed449e057b9988f07c80a87292d2bf46c585a8635ac7a3ccf0d5", + "sha256:51acffba6f3d21674eea7a0432ce1adaf0743641d57844a5e3dc92b4a7e81c85", + "sha256:53d694d70dd072a47bd2dd71329dcef0f809dcd8084d1d11c31baf3b64cd345c", + "sha256:6a640fef52dc785abd354d6800a52ecc02656c98dbfc2ecde559323b001bd43f", + "sha256:7006ef95f847412605dea6e772019f637949eaeaf65363d5d6afd9aa96bf5623", + "sha256:81e13b62877dbc089095e7efa03c27834bdf6b49d404d064cb227b0e179ce049", + "sha256:8fc3e97b24dafbd4b1ac057c8f144c18467ce55d342a1a8c42688890ead58ef3", + "sha256:9158dc4d3ef4e2301fb1879d5825530fdb32143ced770d60fa8e5badeee70a35", + "sha256:961337a10b42bd656b59116ce1c574eafd515b45a513221df6ae1f11734bfb6c", + "sha256:994ccac972357a7b9b147217e1beea2f7688697944b862dbb2a3e64aa9a5ff14", + "sha256:a8e9abf7db0351357b55c3f935979e7dc14f3f259a25d15bcc86abce730955a7", + "sha256:b836eda7f70b9dd75ccdeaf4e78b38393118a66821a69a10054b1430f945d1fd", + "sha256:b859a225f6bd953472c50f4df612b4575df646e560189e3720310ad65b6805a0", + "sha256:cae106bd461cfad73c554c09f6db1d5f2c6a28f5b8cb0602b63046840f488226", + "sha256:cdc75b8fa5a650f4fc91214a315358fde7470e09b95a00981b73a7c4ac5ddb97", + "sha256:e2c28da4f37ad9a3efbedbbfc6f1084941bde43903d30dfdbb338d5ba94c9f50", + "sha256:e596bd8fdbf40bfb8dc8068cdbc7e5b72052188d1ad8ca84da9d6b77658a8b31", + "sha256:ee957b9c60b6def20cbdf656d35859ce211eec02dafa3abb9d5ca937d32a3c3b", + "sha256:f9428d4b1f70af4f4560be4dccbbc5ab5308c00c5b62ed2f1c44ce9e2591b3d2" ], "index": "pypi", - "version": "==2.9.0" + "version": "==2.5.2" }, "pillow": { "hashes": [ - "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af", - "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1", - "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c", - "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55", - "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060", - "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e", - "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8", - "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e", - "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0", - "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328", - "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238", - "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733", - "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03", - "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06", - "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71", - "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b", - "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6", - "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910", - "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce", - "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28", - "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d", - "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb", - "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6", - "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09", - "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be", - "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0", - "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44", - "sha256:bd08a7e01d388c5e0b5b46b52081e01dc96ef226aeed13fa1d7af94b81d4e93b", - "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1", - "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341", - "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34", - "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2", - "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a", - "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5" + "sha256:165c88bc9d8dba670110c689e3cc5c71dbe4bfb984ffa7cbebf1fac9554071d6", + "sha256:1d208e670abfeb41b6143537a681299ef86e92d2a3dac299d3cd6830d5c7bded", + "sha256:22d070ca2e60c99929ef274cfced04294d2368193e935c5d6febfd8b601bf865", + "sha256:2353834b2c49b95e1313fb34edf18fca4d57446675d05298bb694bca4b194174", + "sha256:39725acf2d2e9c17356e6835dccebe7a697db55f25a09207e38b835d5e1bc032", + "sha256:3de6b2ee4f78c6b3d89d184ade5d8fa68af0848f9b6b6da2b9ab7943ec46971a", + "sha256:47c0d93ee9c8b181f353dbead6530b26980fe4f5485aa18be8f1fd3c3cbc685e", + "sha256:5e2fe3bb2363b862671eba632537cd3a823847db4d98be95690b7e382f3d6378", + "sha256:604815c55fd92e735f9738f65dabf4edc3e79f88541c221d292faec1904a4b17", + "sha256:6c5275bd82711cd3dcd0af8ce0bb99113ae8911fc2952805f1d012de7d600a4c", + "sha256:731ca5aabe9085160cf68b2dbef95fc1991015bc0a3a6ea46a371ab88f3d0913", + "sha256:7612520e5e1a371d77e1d1ca3a3ee6227eef00d0a9cddb4ef7ecb0b7396eddf7", + "sha256:7916cbc94f1c6b1301ac04510d0881b9e9feb20ae34094d3615a8a7c3db0dcc0", + "sha256:81c3fa9a75d9f1afafdb916d5995633f319db09bd773cb56b8e39f1e98d90820", + "sha256:887668e792b7edbfb1d3c9d8b5d8c859269a0f0eba4dda562adb95500f60dbba", + "sha256:8c183b5c60544b49e0a66f924b18c526dfd37774811b627f70836fe01711abd3", + "sha256:93a473b53cc6e0b3ce6bf51b1b95b7b1e7e6084be3a07e40f79b42e83503fbf2", + "sha256:96d4dc103d1a0fa6d47c6c55a47de5f5dafd5ef0114fa10c85a1fd8e0216284b", + "sha256:a3d3e086474ef12ef13d42e5f9b7bbf09d39cf6bd4940f982263d6954b13f6a9", + "sha256:b02a0b9f332086657852b1f7cb380f6a42403a6d9c42a4c34a561aa4530d5234", + "sha256:b09e10ec453de97f9a23a5aa5e30b334195e8d2ddd1ce76cc32e52ba63c8b31d", + "sha256:b6f00ad5ebe846cc91763b1d0c6d30a8042e02b2316e27b05de04fa6ec831ec5", + "sha256:bba80df38cfc17f490ec651c73bb37cd896bc2400cfba27d078c2135223c1206", + "sha256:c3d911614b008e8a576b8e5303e3db29224b455d3d66d1b2848ba6ca83f9ece9", + "sha256:ca20739e303254287138234485579b28cb0d524401f83d5129b5ff9d606cb0a8", + "sha256:cb192176b477d49b0a327b2a5a4979552b7a58cd42037034316b8018ac3ebb59", + "sha256:cdbbe7dff4a677fb555a54f9bc0450f2a21a93c5ba2b44e09e54fcb72d2bd13d", + "sha256:cf6e33d92b1526190a1de904df21663c46a456758c0424e4f947ae9aa6088bf7", + "sha256:d355502dce85ade85a2511b40b4c61a128902f246504f7de29bbeec1ae27933a", + "sha256:d673c4990acd016229a5c1c4ee8a9e6d8f481b27ade5fc3d95938697fa443ce0", + "sha256:dc577f4cfdda354db3ae37a572428a90ffdbe4e51eda7849bf442fb803f09c9b", + "sha256:dd9eef866c70d2cbbea1ae58134eaffda0d4bfea403025f4db6859724b18ab3d", + "sha256:f50e7a98b0453f39000619d845be8b06e611e56ee6e8186f7f60c3b1e2f0feae" ], "index": "pypi", - "version": "==8.1.2" + "version": "==8.1.0" }, "pluggy": { "hashes": [ @@ -809,11 +808,11 @@ }, "python-gnupg": { "hashes": [ - "sha256:2061f56b1942c29b92727bf9aecbd3cea3893acc9cccbdc7eb4604285efe4ac7", - "sha256:3ff5b1bf5e397de6e1fe41a7c0f403dad4e242ac92b345f440eaecfb72a7ebae" + "sha256:3aa0884b3bd414652c2385b9df39e7b87272c2eca1b8fcc3089bc9e58652019a", + "sha256:cba3566e8a8fb7bb417d6897a6e17bfc7f9371052e57eb0057783c07d762a679" ], "index": "pypi", - "version": "==0.4.7" + "version": "==0.4.6" }, "python-levenshtein": { "hashes": [ @@ -852,23 +851,15 @@ "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", - "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", - "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", - "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", - "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", - "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", - "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", - "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", - "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" + "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" ], "version": "==5.4.1" }, @@ -883,87 +874,98 @@ }, "regex": { "hashes": [ - "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139", - "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5", - "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa", - "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3", - "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df", - "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f", - "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e", - "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd", - "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d", - "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e", - "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f", - "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa", - "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68", - "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643", - "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3", - "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be", - "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578", - "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c", - "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5", - "sha256:63f861afb575ee39fc42df919ca6c625b534cf51b2b95d54fc97f85d293a22a2", - "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba", - "sha256:808276b84e69346635da368f4b9d37ab8b27ce20a7b30e9cbb3717d1e81c78ec", - "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe", - "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c", - "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a", - "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb", - "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d", - "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38", - "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18", - "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce", - "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa", - "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6", - "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5", - "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90", - "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c", - "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106", - "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7", - "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0", - "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689", - "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd", - "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932", - "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf", - "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14" + "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538", + "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4", + "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc", + "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa", + "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444", + "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1", + "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af", + "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8", + "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9", + "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88", + "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba", + "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364", + "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e", + "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7", + "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0", + "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31", + "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683", + "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee", + "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b", + "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884", + "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c", + "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e", + "sha256:80ef188c0e47a6c964eed71c55a73c245f8daf9f0a4a9d804e91275afb468ca4", + "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562", + "sha256:842fb985b2b99a82a2b145b6bbd588c5f5cfd83693402920fcb985d515794666", + "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85", + "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c", + "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6", + "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d", + "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b", + "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70", + "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b", + "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b", + "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f", + "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0", + "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5", + "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5", + "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f", + "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e", + "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512", + "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d", + "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917", + "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f" ], - "version": "==2021.3.17" + "version": "==2020.11.13" }, "reportlab": { "hashes": [ - "sha256:07f9d9c0360cb8fc780ca05264faa68b90583cd28dbdf2cda6bda34379b6e66c", - "sha256:27a831da0d17153e33c985bd7a88307e206c5a28778cddb755d5372598d12637", - "sha256:289539f7888239343ef7ebcd30c55e6204ef78d5f70e1547fdeb854a2da8bfa1", - "sha256:3ec70873d99c14570e2a9c44b86c8c01526871e7af5ee4b2855246db15cb0c9f", - "sha256:46745826657d35f86843487f4bc6f6f805f61260428f8ee13642bf6372f9df55", - "sha256:4a784ecdf3008f533e5a032b96c395e8592ed5e679baaf5ef4dcc136b01c72e9", - "sha256:4c42e85851f969e21fa4d6414587b7544e877ce685e2495d7d422589c70b6281", - "sha256:58bec163f727c1c60515fc4704a961b3b4ccf2c76b4e6ec1a457ea7ed0c2d756", - "sha256:6f007142f2b166f52cbb3e5d23319e3e496c429831e53b904e6db28c3370f279", - "sha256:81898de0a0be2c8318468ae0ae1590f828805e9b7fd68e5a50667dce8b942171", - "sha256:8707cc21a769150154bf4634dca6e9581ae24a05f0fb81a84fcc1143b1cbbfde", - "sha256:87546a129b36b50221172d3e42377eafbc2aae130ba9472953ac8f219fe119e4", - "sha256:99aeee49a61c85f1af1087e9e418f3d0c2352c4dd0f0abbfac17ae6c467185aa", - "sha256:9ec95808b742ce70c1dab28b2c5bef9093816b92315b948419c2c6968658f9cc", - "sha256:b2c7eedb4d19db63301c27ad1076086a099fd4c8ca0a6f62f6e9ed749fa5908f", - "sha256:b2cf692ae7af995b499a31a3f58f2001d98e310e03f74812bcb97a08078239c0", - "sha256:b9494986f35d82350b0ce0c29704a49a3945421b789dff92e93fbd3de554fa34", - "sha256:ba2d10f368c9ea1e76c84b3bb6b9982eb5a8f243c434e821c505b75ca8d85852", - "sha256:bc62187181582772688d65c557ad6a40a4c3bb8d1f74de463d35ea81983e9b75", - "sha256:bdf751289efee4891f4f354ce9122da8de8258a40f328b3f11540c4888363337", - "sha256:c12432575c793b8cd8552fddc219bbf2813541c64d02854ae345a108fb875b9d", - "sha256:cdf8ff72cd6fa9303744c8409fb81ef7720da2e034c369762c2fdf496462179e", - "sha256:d810bffd4bcd50fdcb2bab0d1fe9ea4e6187ed5237687e41c6ade6c884b00c1e", - "sha256:d8fefd07072bfae2715283a821fb1acf8fc4946cf925509d5cc2af791c611809", - "sha256:d92834993bf998853a04946729266a3276965e7b13f7423212f1c1abdfc4a1c7", - "sha256:ee711804acdaf3ea7f0f2cd27f19478af993e730df8c8d923a678eb0e2572fba", - "sha256:f0634740b099b69caed081acd89692996b5504c59f86f39781b6bebc82b267f5", - "sha256:f92388e30bf6b5d2eceb3d7b05ee2df856635f74ce7d950a8f45d2b70c685a5b", - "sha256:fd6712a8a6dca12181a3a12316f97810927861e77f2a98029efd2c5cfc8546dc", - "sha256:fe5d98cdac07dd702bcd49f5723aacdd0af8c84d70fc82a5cc3781e52aedad52" + "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1", + "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a", + "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935", + "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881", + "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd", + "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b", + "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8", + "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b", + "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d", + "sha256:1e484ce83dae26cb40fcbd312d45b8ba921de7856a00339d867dd4ecf145a1e7", + "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378", + "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06", + "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69", + "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0", + "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f", + "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f", + "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad", + "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491", + "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8", + "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53", + "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22", + "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb", + "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121", + "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c", + "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431", + "sha256:8850eba6de6eb813036eb8dce353e40d60c8af48bbce107de82770b10d3aa525", + "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef", + "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454", + "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a", + "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5", + "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057", + "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536", + "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c", + "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be", + "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75", + "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4", + "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2", + "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e", + "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16", + "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8", + "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc", + "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442" ], - "markers": "python_version >= '2.7' and python_version < '4'", - "version": "==3.5.65" + "version": "==3.5.59" }, "requests": { "hashes": [ @@ -1085,11 +1087,11 @@ }, "tqdm": { "hashes": [ - "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7", - "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33" + "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089", + "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba" ], "index": "pypi", - "version": "==4.59.0" + "version": "==4.58.0" }, "twisted": { "extras": [ @@ -1119,11 +1121,11 @@ }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", + "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.4" + "version": "==1.26.3" }, "uvicorn": { "extras": [ @@ -1352,69 +1354,68 @@ }, "coverage": { "hashes": [ - "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", - "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", - "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45", - "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a", - "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03", - "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529", - "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", - "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", - "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", - "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", - "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", - "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", - "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a", - "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4", - "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff", - "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502", - "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793", - "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb", - "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905", - "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821", - "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b", - "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81", - "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0", - "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b", - "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3", - "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184", - "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701", - "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a", - "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82", - "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638", - "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5", - "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083", - "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6", - "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90", - "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465", - "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a", - "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3", - "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e", - "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066", - "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf", - "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b", - "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae", - "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669", - "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873", - "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b", - "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6", - "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb", - "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160", - "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c", - "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079", - "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", - "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6" + "sha256:03ed2a641e412e42cc35c244508cf186015c217f0e4d496bf6d7078ebe837ae7", + "sha256:04b14e45d6a8e159c9767ae57ecb34563ad93440fc1b26516a89ceb5b33c1ad5", + "sha256:0cdde51bfcf6b6bd862ee9be324521ec619b20590787d1655d005c3fb175005f", + "sha256:0f48fc7dc82ee14aeaedb986e175a429d24129b7eada1b7e94a864e4f0644dde", + "sha256:107d327071061fd4f4a2587d14c389a27e4e5c93c7cba5f1f59987181903902f", + "sha256:1375bb8b88cb050a2d4e0da901001347a44302aeadb8ceb4b6e5aa373b8ea68f", + "sha256:14a9f1887591684fb59fdba8feef7123a0da2424b0652e1b58dd5b9a7bb1188c", + "sha256:16baa799ec09cc0dcb43a10680573269d407c159325972dd7114ee7649e56c66", + "sha256:1b811662ecf72eb2d08872731636aee6559cae21862c36f74703be727b45df90", + "sha256:1ccae21a076d3d5f471700f6d30eb486da1626c380b23c70ae32ab823e453337", + "sha256:2f2cf7a42d4b7654c9a67b9d091ec24374f7c58794858bff632a2039cb15984d", + "sha256:322549b880b2d746a7672bf6ff9ed3f895e9c9f108b714e7360292aa5c5d7cf4", + "sha256:32ab83016c24c5cf3db2943286b85b0a172dae08c58d0f53875235219b676409", + "sha256:3fe50f1cac369b02d34ad904dfe0771acc483f82a1b54c5e93632916ba847b37", + "sha256:4a780807e80479f281d47ee4af2eb2df3e4ccf4723484f77da0bb49d027e40a1", + "sha256:4a8eb7785bd23565b542b01fb39115a975fefb4a82f23d407503eee2c0106247", + "sha256:4b40b794775df10d7e3ea677108dd581bfec796235750c617d461874178a67f6", + "sha256:5bee3970617b3d74759b2d2df2f6a327d372f9732f9ccbf03fa591b5f7581e39", + "sha256:60a3307a84ec60578accd35d7f0c71a3a971430ed7eca6567399d2b50ef37b8c", + "sha256:6625e52b6f346a283c3d563d1fd8bae8956daafc64bb5bbd2b8f8a07608e3994", + "sha256:66a5aae8233d766a877c5ef293ec5ab9520929c2578fd2069308a98b7374ea8c", + "sha256:68fb816a5dd901c6aff352ce49e2a0ffadacdf9b6fae282a69e7a16a02dad5fb", + "sha256:6b588b5cf51dc0fd1c9e19f622457cc74b7d26fe295432e434525f1c0fae02bc", + "sha256:6c4d7165a4e8f41eca6b990c12ee7f44fef3932fac48ca32cecb3a1b2223c21f", + "sha256:6d2e262e5e8da6fa56e774fb8e2643417351427604c2b177f8e8c5f75fc928ca", + "sha256:6d9c88b787638a451f41f97446a1c9fd416e669b4d9717ae4615bd29de1ac135", + "sha256:755c56beeacac6a24c8e1074f89f34f4373abce8b662470d3aa719ae304931f3", + "sha256:7e40d3f8eb472c1509b12ac2a7e24158ec352fc8567b77ab02c0db053927e339", + "sha256:812eaf4939ef2284d29653bcfee9665f11f013724f07258928f849a2306ea9f9", + "sha256:84df004223fd0550d0ea7a37882e5c889f3c6d45535c639ce9802293b39cd5c9", + "sha256:859f0add98707b182b4867359e12bde806b82483fb12a9ae868a77880fc3b7af", + "sha256:87c4b38288f71acd2106f5d94f575bc2136ea2887fdb5dfe18003c881fa6b370", + "sha256:89fc12c6371bf963809abc46cced4a01ca4f99cba17be5e7d416ed7ef1245d19", + "sha256:9564ac7eb1652c3701ac691ca72934dd3009997c81266807aef924012df2f4b3", + "sha256:9754a5c265f991317de2bac0c70a746efc2b695cf4d49f5d2cddeac36544fb44", + "sha256:a565f48c4aae72d1d3d3f8e8fb7218f5609c964e9c6f68604608e5958b9c60c3", + "sha256:a636160680c6e526b84f85d304e2f0bb4e94f8284dd765a1911de9a40450b10a", + "sha256:a839e25f07e428a87d17d857d9935dd743130e77ff46524abb992b962eb2076c", + "sha256:ae9702c099546e72000d76758b5efec2dd937ba5d746ec8d0563d2fca0f9bc2e", + "sha256:b62046592b44263fa7570f1117d372ae3f310222af1fc1407416f037fb3af21b", + "sha256:b7f7421841f8db443855d2854e25914a79a1ff48ae92f70d0a5c2f8907ab98c9", + "sha256:ba7ca81b6d60a9f7a0b4b4e175dcc38e8fef4992673d9d6e6879fd6de00dd9b8", + "sha256:bb32ca14b4d04e172c541c69eec5f385f9a075b38fb22d765d8b0ce3af3a0c22", + "sha256:c0ff1c1b4d13e2240821ef23c1efb1f009207cb3f56e16986f713c2b0e7cd37f", + "sha256:c669b440ce46ae3abe9b2d44a913b5fd86bb19eb14a8701e88e3918902ecd345", + "sha256:c67734cff78383a1f23ceba3b3239c7deefc62ac2b05fa6a47bcd565771e5880", + "sha256:c6809ebcbf6c1049002b9ac09c127ae43929042ec1f1dbd8bb1615f7cd9f70a0", + "sha256:cd601187476c6bed26a0398353212684c427e10a903aeafa6da40c63309d438b", + "sha256:ebfa374067af240d079ef97b8064478f3bf71038b78b017eb6ec93ede1b6bcec", + "sha256:fbb17c0d0822684b7d6c09915677a32319f16ff1115df5ec05bdcaaee40b35f3", + "sha256:fff1f3a586246110f34dc762098b5afd2de88de507559e63553d7da643053786" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==5.5" + "version": "==5.4" }, "coveralls": { "hashes": [ - "sha256:7bd173b3425733661ba3063c88f180127cc2b20e9740686f86d2622b31b41385", - "sha256:cbb942ae5ef3d2b55388cb5b43e93a269544911535f1e750e1c656aef019ce60" + "sha256:5399c0565ab822a70a477f7031f6c88a9dd196b3de2877b3facb43b51bd13434", + "sha256:f8384968c57dee4b7133ae701ecdad88e85e30597d496dcba0d7fbb470dca41f" ], "index": "pypi", - "version": "==3.0.1" + "version": "==3.0.0" }, "distlib": { "hashes": [ @@ -1456,11 +1457,11 @@ }, "faker": { "hashes": [ - "sha256:60a7263104ef7a14ecfe2af1142d53924aa534ccec85cea82bb67b2b32f84421", - "sha256:f43ac743c34affb1c7fccca8b06450371cd482b6ddcb4110e420acb24356e70b" + "sha256:90b69e9e05d622edb2fa5ebfda7bef41c88675cace85e72689fde5b8723d00a3", + "sha256:da395fe545f40d4366b82b1a02448847a4586bd2b28af393b3edbd1e45d1e0fc" ], "markers": "python_version >= '3.6'", - "version": "==6.6.2" + "version": "==6.5.0" }, "filelock": { "hashes": [ @@ -1590,19 +1591,19 @@ }, "pycodestyle": { "hashes": [ - "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", - "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" + "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367", + "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e" ], "index": "pypi", - "version": "==2.7.0" + "version": "==2.6.0" }, "pygments": { "hashes": [ - "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94", - "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8" + "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0", + "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88" ], "markers": "python_version >= '3.5'", - "version": "==2.8.1" + "version": "==2.8.0" }, "pyparsing": { "hashes": [ @@ -1795,27 +1796,27 @@ }, "tox": { "hashes": [ - "sha256:05a4dbd5e4d3d8269b72b55600f0b0303e2eb47ad5c6fe76d3576f4c58d93661", - "sha256:e007673f3595cede9b17a7c4962389e4305d4a3682a6c5a4159a1453b4f326aa" + "sha256:89afa9c59c04beb55eda789c7a65feb1a70fde117f85f1bd1c27c66758456e60", + "sha256:ed1e650cf6368bcbc4a071eeeba363c480920e0ed8a9ad1793c7caaa5ad33d49" ], "index": "pypi", - "version": "==3.23.0" + "version": "==3.22.0" }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", + "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.4" + "version": "==1.26.3" }, "virtualenv": { "hashes": [ - "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107", - "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c" + "sha256:147b43894e51dd6bba882cf9c282447f780e2251cd35172403745fc381a0a80d", + "sha256:2be72df684b74df0ea47679a7df93fd0e04e72520022c57b479d8f881485dbe3" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.3" + "version": "==20.4.2" } } } diff --git a/requirements.txt b/requirements.txt index de268fc2e..947a30350 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,11 +8,11 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 -arrow==1.0.3; python_version >= '3.6' +arrow==1.0.1; python_version >= '3.6' asgiref==3.3.1; python_version >= '3.5' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -autobahn==21.3.1; python_version >= '3.7' +autobahn==21.2.2; python_version >= '3.7' automat==20.2.0 blessed==1.18.0 certifi==2020.12.5 @@ -43,9 +43,9 @@ httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.39.0 +imap-tools==0.38.1 img2pdf==0.4.0 -incremental==21.3.0 +incremental==17.5.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 joblib==1.0.1; python_version >= '3.6' @@ -53,11 +53,11 @@ langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.7.1 +ocrmypdf==11.7.0 pathvalidate==2.3.2 pdfminer.six==20201018 -pikepdf==2.9.0 -pillow==8.1.2 +pikepdf==2.5.2 +pillow==8.1.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.2.1; python_version >= '3' psycopg2-binary==2.8.6 @@ -67,14 +67,14 @@ pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3. pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 python-dotenv==0.15.0 -python-gnupg==0.4.7 +python-gnupg==0.4.6 python-levenshtein==0.12.2 python-magic==0.4.22 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 -regex==2021.3.17 -reportlab==3.5.65; python_version >= '2.7' and python_version < '4' +regex==2020.11.13 +reportlab==3.5.59 requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 scipy==1.5.4 @@ -84,11 +84,11 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.59.0 +tqdm==4.58.0 twisted[tls]==21.2.0; python_full_version >= '3.5.4' txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 -urllib3==1.26.4; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.4 uvloop==0.14.0 watchdog==1.0.2 From 69f8941dd70a627a12c3bcd01abc459730ee3138 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Mar 2021 12:20:10 +0100 Subject: [PATCH 653/898] update dependencies --- Dockerfile | 29 +-- Pipfile | 6 +- Pipfile.lock | 594 +++++++++++++++++++++++------------------------ requirements.txt | 26 +-- 4 files changed, 322 insertions(+), 333 deletions(-) diff --git a/Dockerfile b/Dockerfile index c94b7030f..9e7a34aa4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,25 +11,27 @@ RUN ./configure && make FROM python:3.7-slim # Binary dependencies -RUN apt-get update \ +RUN echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ + && apt-get update \ && apt-get -y --no-install-recommends install \ # Basic dependencies curl \ - file \ - # fonts for text file thumbnail generation - fonts-liberation \ - # for making translations further down - gettext \ gnupg \ imagemagick \ + gettext \ + sudo \ + tzdata \ + # fonts for text file thumbnail generation + fonts-liberation \ # for Numpy libatlas-base-dev \ libxslt1-dev \ - mime-support \ # thumbnail size reduction optipng \ - sudo \ - tzdata \ + # Mime type detection + file \ + libmagic-dev \ + mime-support \ # OCRmyPDF dependencies ghostscript \ icc-profiles-free \ @@ -45,14 +47,7 @@ RUN apt-get update \ tesseract-ocr-spa \ unpaper \ zlib1g \ - -# This pulls in updated dependencies from bullseye to fix some issues with file type detection. -# TODO: Remove this once bullseye releases. - && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ - && apt-get update \ - && apt-get install --no-install-recommends -y file libmagic-dev \ - && rm -rf /var/lib/apt/lists/* \ - && rm /etc/apt/sources.list.d/bullseye.list + && rm -rf /var/lib/apt/lists/* # copy jbig2enc COPY --from=jbig2enc /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/ diff --git a/Pipfile b/Pipfile index 4d9836e68..c80f734f2 100644 --- a/Pipfile +++ b/Pipfile @@ -24,9 +24,8 @@ langdetect = "*" # numpy 1.20.0 drops python 3.6 support numpy = "~=1.19.5" pathvalidate = "*" -# pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202 -pillow = "==8.1.0" -pikepdf = "~=2.5.0" +pillow = "~=8.1" +pikepdf = "~=2.5" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" @@ -52,7 +51,6 @@ uvicorn = {extras = ["standard"], version = "*"} concurrent-log-handler = "*" # uvloop 0.15+ incompatible with python 3.6 uvloop = "~=0.14.0" -# TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/) cryptography = "~=3.4" "pdfminer.six" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 98d8655eb..7b036e19a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "49f8a0718a7982bc4ca7e1315c17849523b0d29c38f13cff88f8f883e0e9943a" + "sha256": "e1b8a4e731cfb66e6e4cb43aa9160eeccdaf4c459710b197f7c7bf3e95825f6a" }, "pipfile-spec": 6, "requires": {}, @@ -28,11 +28,11 @@ }, "arrow": { "hashes": [ - "sha256:7909d9fd30d32fa8fd173fdeb3f7125aaf6dedd1a837276fe1d8cea2c0e86d76", - "sha256:b1e106a0ab754e540f4aeb08747900830b688adef02d81240e65afc0e781a870" + "sha256:3515630f11a15c61dcb4cdd245883270dd334c83f3e639824e65a4b79cc48543", + "sha256:399c9c8ae732270e1aa58ead835a79a40d7be8aa109c579898eb41029b5a231d" ], "markers": "python_version >= '3.6'", - "version": "==1.0.1" + "version": "==1.0.3" }, "asgiref": { "hashes": [ @@ -60,11 +60,11 @@ }, "autobahn": { "hashes": [ - "sha256:884f79c50fdc55ade2c315946a9caa145e8b10075eee9d2c2594ea5e8f5226aa", - "sha256:bf7a9d302a34d0f719d43c57f65ca1f2f5c982dd6ea0c11e1e190ef6f43710fe" + "sha256:9195df8af03b0ff29ccd4b7f5abbde957ee90273465942205f9a1bad6c3f07ac", + "sha256:e126c1f583e872fb59e79d36977cfa1f2d0a8a79f90ae31f406faae7664b8e03" ], "markers": "python_version >= '3.7'", - "version": "==21.2.2" + "version": "==21.3.1" }, "automat": { "hashes": [ @@ -413,11 +413,11 @@ }, "imap-tools": { "hashes": [ - "sha256:44641716f0c5c07df78c5713405675fac50220d4f8e2906c9ed4aabd9c356fa8", - "sha256:bab9a6edf848a58bdd3959ba55e0eb75039ff188a3779371d0b8db674a4945e8" + "sha256:00fa5b5046c0437976ad7dd5e45b1847bfd5d14bb858c9b19a5cf2994bba96d9", + "sha256:3b4d0a911bc48ea7c0beac6a15b6f65b6fdf2b066a67cd3536253ec98e401e83" ], "index": "pypi", - "version": "==0.38.1" + "version": "==0.39.0" }, "img2pdf": { "hashes": [ @@ -428,10 +428,10 @@ }, "incremental": { "hashes": [ - "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", - "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + "sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57", + "sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321" ], - "version": "==17.5.0" + "version": "==21.3.0" }, "inotify-simple": { "hashes": [ @@ -589,11 +589,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:2fca4046e3a33e5902dd89c3003a3f31c7d584dc43f14c7c97f57fce20d2e469", - "sha256:5c386fcf2c0f2635533c2bad0edcd2d455f667a134d180dc61cbb3d4d5f0c8e2" + "sha256:2eda9aeef0c6326af8af9605a8b5903ed6ae4a4537d4046d16ad8bb7ff021ec2", + "sha256:4befdf50b6ed3fe3bb9d0ab1801b213e56138e21ba5b4b3f3cada51c72b7a314" ], "index": "pypi", - "version": "==11.7.0" + "version": "==11.7.2" }, "pathvalidate": { "hashes": [ @@ -613,71 +613,72 @@ }, "pikepdf": { "hashes": [ - "sha256:02815df9499d3a6dfac2e07e4d2fdbe25fcbefae208970e76bff90af4a402d49", - "sha256:06b0c3004cc9e9068ebc62bb59c3c3a54e7af13867f4a326690d79c69a1cf288", - "sha256:1a471c6ca288fbcd0e1b0e128ef12bb14c5e7db745786308ba292fc7cff30bb5", - "sha256:489ed0fd1281beb0343a34fe8b9d94407c440ed0419ab2e6f5ea297a41824a31", - "sha256:5106b27f7085ed449e057b9988f07c80a87292d2bf46c585a8635ac7a3ccf0d5", - "sha256:51acffba6f3d21674eea7a0432ce1adaf0743641d57844a5e3dc92b4a7e81c85", - "sha256:53d694d70dd072a47bd2dd71329dcef0f809dcd8084d1d11c31baf3b64cd345c", - "sha256:6a640fef52dc785abd354d6800a52ecc02656c98dbfc2ecde559323b001bd43f", - "sha256:7006ef95f847412605dea6e772019f637949eaeaf65363d5d6afd9aa96bf5623", - "sha256:81e13b62877dbc089095e7efa03c27834bdf6b49d404d064cb227b0e179ce049", - "sha256:8fc3e97b24dafbd4b1ac057c8f144c18467ce55d342a1a8c42688890ead58ef3", - "sha256:9158dc4d3ef4e2301fb1879d5825530fdb32143ced770d60fa8e5badeee70a35", - "sha256:961337a10b42bd656b59116ce1c574eafd515b45a513221df6ae1f11734bfb6c", - "sha256:994ccac972357a7b9b147217e1beea2f7688697944b862dbb2a3e64aa9a5ff14", - "sha256:a8e9abf7db0351357b55c3f935979e7dc14f3f259a25d15bcc86abce730955a7", - "sha256:b836eda7f70b9dd75ccdeaf4e78b38393118a66821a69a10054b1430f945d1fd", - "sha256:b859a225f6bd953472c50f4df612b4575df646e560189e3720310ad65b6805a0", - "sha256:cae106bd461cfad73c554c09f6db1d5f2c6a28f5b8cb0602b63046840f488226", - "sha256:cdc75b8fa5a650f4fc91214a315358fde7470e09b95a00981b73a7c4ac5ddb97", - "sha256:e2c28da4f37ad9a3efbedbbfc6f1084941bde43903d30dfdbb338d5ba94c9f50", - "sha256:e596bd8fdbf40bfb8dc8068cdbc7e5b72052188d1ad8ca84da9d6b77658a8b31", - "sha256:ee957b9c60b6def20cbdf656d35859ce211eec02dafa3abb9d5ca937d32a3c3b", - "sha256:f9428d4b1f70af4f4560be4dccbbc5ab5308c00c5b62ed2f1c44ce9e2591b3d2" + "sha256:00372f75f630b1eedd22022cad622c7313b7a42c76b6aa9a91cabaa93915cbf0", + "sha256:0168b05e020f8ac3f027c61841bb222bb0876fdc21e1b0e44cfca8c7f188b17a", + "sha256:07a3b156766a45ef04b6919116468456c7d1fa05ac1a5a5999f08fd6213a7ada", + "sha256:087edf03ef41f76c84d7f65cfd325fbea6e684a134463f0d43f57c3e787c57f1", + "sha256:0f2f2dcf3ceab6572cb6f3dc893b49e5db65232a13de03ae87a66aa220e47d96", + "sha256:27ef5649d4a0d511bdffa5752b9a014441d8c09bf955479db53c41ffb94ee1ca", + "sha256:3096d128df599d48a69bbe6a32ecd3c4b8b2219dfb94c91509c781e94c20abb9", + "sha256:45a5988f7db8c428beae7dd648df30431e1d7892f3901f4c20bb618ed3e29244", + "sha256:5e9d5789ace2ac4007916848a5cc59bc4a1aa020a794cb384538ca0f0b9b9fe6", + "sha256:63b0a1b4c43deb618f3ebaed0e5861bff658916ea02ac2f6adacf8912b702628", + "sha256:68523f606575aef92a1f6d6de030d5e82f7e3e8712f53e36c9fa5c635e15794e", + "sha256:6bea9cf387709dd478a85f737f972a910bb0dbfa055ee636a41f0c425a769057", + "sha256:71fe23a61607ac85cf357baef42be55d525f5d5c9f560482862beaf59e5dc2bc", + "sha256:780082b54e502fb76af082dc6a1cbed635205a319aa54a9e0f0570bed20c9edf", + "sha256:7a816f4bb461366dad0165a1c81294d5e9a60009cbb5c803e2519eb0d250e757", + "sha256:88373178c1020b9f391f929e5f86056a9d920301f82e5489146af629fa4654d0", + "sha256:96c8bf46ac27482a9ca00565f41ddde546fff35c50db61eefaeb88849bcb9895", + "sha256:99c19cf0dd0fc89fc9e6a0de61e974e34d4111dd69802aeaee3e61fb1a74a3d8", + "sha256:bad118d9104fffc06664d51c8716a905e5d712b85ed65edc56a708486803f70f", + "sha256:bae06503ed36167b2ea5ea25003692d3edbf95bea2e67a1d595984c91d783eb4", + "sha256:cd73a1e82cfa5d378adccf9c44b0060c2d3c5e36958f0b5ecedb3f8e81742582", + "sha256:dd65214e23e2cc883af8c2341e6fe7ae71225fa644517ac25110d6ad2b31f026", + "sha256:fd1e339322c94b0c398aaa37d517c24a3db7bbda4fdc6bf57af3894293b8e1a6" ], "index": "pypi", - "version": "==2.5.2" + "version": "==2.9.1" }, "pillow": { "hashes": [ - "sha256:165c88bc9d8dba670110c689e3cc5c71dbe4bfb984ffa7cbebf1fac9554071d6", - "sha256:1d208e670abfeb41b6143537a681299ef86e92d2a3dac299d3cd6830d5c7bded", - "sha256:22d070ca2e60c99929ef274cfced04294d2368193e935c5d6febfd8b601bf865", - "sha256:2353834b2c49b95e1313fb34edf18fca4d57446675d05298bb694bca4b194174", - "sha256:39725acf2d2e9c17356e6835dccebe7a697db55f25a09207e38b835d5e1bc032", - "sha256:3de6b2ee4f78c6b3d89d184ade5d8fa68af0848f9b6b6da2b9ab7943ec46971a", - "sha256:47c0d93ee9c8b181f353dbead6530b26980fe4f5485aa18be8f1fd3c3cbc685e", - "sha256:5e2fe3bb2363b862671eba632537cd3a823847db4d98be95690b7e382f3d6378", - "sha256:604815c55fd92e735f9738f65dabf4edc3e79f88541c221d292faec1904a4b17", - "sha256:6c5275bd82711cd3dcd0af8ce0bb99113ae8911fc2952805f1d012de7d600a4c", - "sha256:731ca5aabe9085160cf68b2dbef95fc1991015bc0a3a6ea46a371ab88f3d0913", - "sha256:7612520e5e1a371d77e1d1ca3a3ee6227eef00d0a9cddb4ef7ecb0b7396eddf7", - "sha256:7916cbc94f1c6b1301ac04510d0881b9e9feb20ae34094d3615a8a7c3db0dcc0", - "sha256:81c3fa9a75d9f1afafdb916d5995633f319db09bd773cb56b8e39f1e98d90820", - "sha256:887668e792b7edbfb1d3c9d8b5d8c859269a0f0eba4dda562adb95500f60dbba", - "sha256:8c183b5c60544b49e0a66f924b18c526dfd37774811b627f70836fe01711abd3", - "sha256:93a473b53cc6e0b3ce6bf51b1b95b7b1e7e6084be3a07e40f79b42e83503fbf2", - "sha256:96d4dc103d1a0fa6d47c6c55a47de5f5dafd5ef0114fa10c85a1fd8e0216284b", - "sha256:a3d3e086474ef12ef13d42e5f9b7bbf09d39cf6bd4940f982263d6954b13f6a9", - "sha256:b02a0b9f332086657852b1f7cb380f6a42403a6d9c42a4c34a561aa4530d5234", - "sha256:b09e10ec453de97f9a23a5aa5e30b334195e8d2ddd1ce76cc32e52ba63c8b31d", - "sha256:b6f00ad5ebe846cc91763b1d0c6d30a8042e02b2316e27b05de04fa6ec831ec5", - "sha256:bba80df38cfc17f490ec651c73bb37cd896bc2400cfba27d078c2135223c1206", - "sha256:c3d911614b008e8a576b8e5303e3db29224b455d3d66d1b2848ba6ca83f9ece9", - "sha256:ca20739e303254287138234485579b28cb0d524401f83d5129b5ff9d606cb0a8", - "sha256:cb192176b477d49b0a327b2a5a4979552b7a58cd42037034316b8018ac3ebb59", - "sha256:cdbbe7dff4a677fb555a54f9bc0450f2a21a93c5ba2b44e09e54fcb72d2bd13d", - "sha256:cf6e33d92b1526190a1de904df21663c46a456758c0424e4f947ae9aa6088bf7", - "sha256:d355502dce85ade85a2511b40b4c61a128902f246504f7de29bbeec1ae27933a", - "sha256:d673c4990acd016229a5c1c4ee8a9e6d8f481b27ade5fc3d95938697fa443ce0", - "sha256:dc577f4cfdda354db3ae37a572428a90ffdbe4e51eda7849bf442fb803f09c9b", - "sha256:dd9eef866c70d2cbbea1ae58134eaffda0d4bfea403025f4db6859724b18ab3d", - "sha256:f50e7a98b0453f39000619d845be8b06e611e56ee6e8186f7f60c3b1e2f0feae" + "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af", + "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1", + "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c", + "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55", + "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060", + "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e", + "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8", + "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e", + "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0", + "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328", + "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238", + "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733", + "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03", + "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06", + "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71", + "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b", + "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6", + "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910", + "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce", + "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28", + "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d", + "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb", + "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6", + "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09", + "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be", + "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0", + "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44", + "sha256:bd08a7e01d388c5e0b5b46b52081e01dc96ef226aeed13fa1d7af94b81d4e93b", + "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1", + "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341", + "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34", + "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2", + "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a", + "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5" ], "index": "pypi", - "version": "==8.1.0" + "version": "==8.1.2" }, "pluggy": { "hashes": [ @@ -808,11 +809,11 @@ }, "python-gnupg": { "hashes": [ - "sha256:3aa0884b3bd414652c2385b9df39e7b87272c2eca1b8fcc3089bc9e58652019a", - "sha256:cba3566e8a8fb7bb417d6897a6e17bfc7f9371052e57eb0057783c07d762a679" + "sha256:2061f56b1942c29b92727bf9aecbd3cea3893acc9cccbdc7eb4604285efe4ac7", + "sha256:3ff5b1bf5e397de6e1fe41a7c0f403dad4e242ac92b345f440eaecfb72a7ebae" ], "index": "pypi", - "version": "==0.4.6" + "version": "==0.4.7" }, "python-levenshtein": { "hashes": [ @@ -851,15 +852,23 @@ "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", + "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", + "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", + "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", + "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", + "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc" + "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", + "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", + "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", + "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" ], "version": "==5.4.1" }, @@ -874,98 +883,87 @@ }, "regex": { "hashes": [ - "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538", - "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4", - "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc", - "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa", - "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444", - "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1", - "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af", - "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8", - "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9", - "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88", - "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba", - "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364", - "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e", - "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7", - "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0", - "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31", - "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683", - "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee", - "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b", - "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884", - "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c", - "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e", - "sha256:80ef188c0e47a6c964eed71c55a73c245f8daf9f0a4a9d804e91275afb468ca4", - "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562", - "sha256:842fb985b2b99a82a2b145b6bbd588c5f5cfd83693402920fcb985d515794666", - "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85", - "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c", - "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6", - "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d", - "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b", - "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70", - "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b", - "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b", - "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f", - "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0", - "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5", - "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5", - "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f", - "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e", - "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512", - "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d", - "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917", - "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f" + "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139", + "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5", + "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa", + "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3", + "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df", + "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f", + "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e", + "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd", + "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d", + "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e", + "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f", + "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa", + "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68", + "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643", + "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3", + "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be", + "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578", + "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c", + "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5", + "sha256:63f861afb575ee39fc42df919ca6c625b534cf51b2b95d54fc97f85d293a22a2", + "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba", + "sha256:808276b84e69346635da368f4b9d37ab8b27ce20a7b30e9cbb3717d1e81c78ec", + "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe", + "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c", + "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a", + "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb", + "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d", + "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38", + "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18", + "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce", + "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa", + "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6", + "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5", + "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90", + "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c", + "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106", + "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7", + "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0", + "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689", + "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd", + "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932", + "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf", + "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14" ], - "version": "==2020.11.13" + "version": "==2021.3.17" }, "reportlab": { "hashes": [ - "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1", - "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a", - "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935", - "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881", - "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd", - "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b", - "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8", - "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b", - "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d", - "sha256:1e484ce83dae26cb40fcbd312d45b8ba921de7856a00339d867dd4ecf145a1e7", - "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378", - "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06", - "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69", - "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0", - "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f", - "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f", - "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad", - "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491", - "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8", - "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53", - "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22", - "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb", - "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121", - "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c", - "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431", - "sha256:8850eba6de6eb813036eb8dce353e40d60c8af48bbce107de82770b10d3aa525", - "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef", - "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454", - "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a", - "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5", - "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057", - "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536", - "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c", - "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be", - "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75", - "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4", - "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2", - "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e", - "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16", - "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8", - "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc", - "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442" + "sha256:13ac281c8d5c904089022377bd9646c910deae63e7342dd9552088d330d73e89", + "sha256:14f38792176e41642f9ea7a83678df156d8abb3a90bbe396425a200614eed03d", + "sha256:15aeb8f8bdad5fa666d18a7d229bc7eb8f4e5a1dc8423931b3e690b6ce5021bc", + "sha256:1db86072b0ec3e5f9c5ab2980c61658ae3acee86e204b0d4c48112bc5cffd2f5", + "sha256:202109018f40d620812cf30dc300ea73385aed305d1de63c42229cb881821ffb", + "sha256:30e82ec00c566c4d8bfdcca0b93131749cc51ea0884395054d2afedf266f3f29", + "sha256:374252d118719e7b9b1bd0e5ce3f7083b5aaaeb1a9422983aa63b116621d34ae", + "sha256:3c1be70cf168ed29a449a009d7cad6dcc3e45d129f7ddb07b3854b8cee8d125b", + "sha256:45fe94e90c6b48c4ae877339b777fcc4f822795c1d4c7a0d6cffaf24987199b1", + "sha256:536f1ebf951cd48623974ba160c95e7c7219d4aa5664cdae17dffa2f19cf1cf3", + "sha256:54827fa29843b15834e5bc618508f245f3addee7bf980eebacfebb74f150e611", + "sha256:55c903f8aea4fbfca26f9f821c77c576c9791ce487ddfa3ffa1f2c44c5af79e2", + "sha256:63fba51babad0047def4ffaa41d0065248ca39d680e98dc9e3010de5425539b4", + "sha256:6fc3f01e9005ac53d639eafe22b3852937e42161d74a7d0681bc83f48cff1b30", + "sha256:6ff269ea41daa5cfd6124b13da1481fc40db2539fa82107dd9675f6670d95c25", + "sha256:7711fcdb0c1edfb48dcffd7e73430e9b5ceba0816a37fd269a327cd13088bcaf", + "sha256:7d4a59975a743eddc15895014d738bb38cbdecdd2496f651fb05779486bcb536", + "sha256:879e1123d49e0df76c478cccdacd4a9f4a2b4b445beec3d72a05f8b3775daa84", + "sha256:aa1ec9557c0d9dbe3eceb6581220aa1d77c404b8ff3decb40eae0bf075512142", + "sha256:ad0d3f657addd9c4215faf2699eafd54e89e404e35d696dda9dbe3c126132900", + "sha256:b784685141fe3fc26d8f703b21f89073a0ce46a800d06b7d58f2ceb481a65644", + "sha256:bd0870c840d47a6639df17c54f0c5676a06ab6798bb92ed8ef9b983c0326c2d0", + "sha256:bdb0781d1d4d1ed0745f5f22c06ed60760865511e65046432d145f55fd908f60", + "sha256:ce04f4bf9d15895bbfee6d53eb168cffd9fcedc625f0fcb5c343d809d0b37271", + "sha256:cf76145a89bb0ebf562c3252ce4d254547fe59daeb80ce2076d89867e9c03735", + "sha256:e8ebb34f30a11ac4196ae83d0b4f1f87bbe326c0f8a6eb4b768e622ec7f017f5", + "sha256:ed4b80c24a4e5e91927aa95901cce3f6fef7551e94a72ac5a2fa22740708cbff", + "sha256:f8a8f8b62cc150f71310e444ded4e32e7136c75aced6738877c3328e84338c94", + "sha256:fdd08e1ef7bcf1dc92868bc527587286c89d92c141fed5ed89ccacc1e8f26ee8", + "sha256:fdf604246a5318157a581a483ceb0aab858582b478b24016768fdaff1c190f50" ], - "version": "==3.5.59" + "markers": "python_version >= '2.7' and python_version < '4'", + "version": "==3.5.66" }, "requests": { "hashes": [ @@ -1087,11 +1085,11 @@ }, "tqdm": { "hashes": [ - "sha256:2c44efa73b8914dba7807aefd09653ac63c22b5b4ea34f7a80973f418f1a3089", - "sha256:c23ac707e8e8aabb825e4d91f8e17247f9cc14b0d64dd9e97be0781e9e525bba" + "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7", + "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33" ], "index": "pypi", - "version": "==4.58.0" + "version": "==4.59.0" }, "twisted": { "extras": [ @@ -1121,11 +1119,11 @@ }, "urllib3": { "hashes": [ - "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", - "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" + "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", + "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.3" + "version": "==1.26.4" }, "uvicorn": { "extras": [ @@ -1239,63 +1237,60 @@ }, "zope.interface": { "hashes": [ - "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", - "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", - "sha256:09fc3922f235703c0b76f8234867685eee68a24a49fffa2220975f6142db45f1", - "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", - "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", - "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", - "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", - "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", - "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", - "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", - "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", - "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", - "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", - "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", - "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", - "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", - "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", - "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", - "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", - "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", - "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", - "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", - "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", - "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", - "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", - "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", - "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", - "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", - "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", - "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", - "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", - "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", - "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", - "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", - "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", - "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", - "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", - "sha256:974f5957e66a7524ea81df7b2686a456bfaf0408dbb7353ddfbedb594eadfef6", - "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", - "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", - "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", - "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", - "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", - "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", - "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", - "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", - "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", - "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", - "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", - "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", - "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", - "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", - "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", - "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" + "sha256:02d3535aa18e34ce97c58d241120b7554f7d1cf4f8002fc9675cc7e7745d20e8", + "sha256:0378a42ec284b65706d9ef867600a4a31701a0d6773434e6537cfc744e3343f4", + "sha256:07d289358a8c565ea09e426590dd1179f93cf5ac3dd17d43fcc4fc63c1a9d275", + "sha256:0e6cdbdd94ae94d1433ab51f46a76df0f2cd041747c31baec1c1ffa4e76bd0c1", + "sha256:11354fb8b8bdc5cdd66358ed4f1f0ce739d78ff6d215d33b8f3ae282258c0f11", + "sha256:12588a46ae0a99f172c4524cbbc3bb870f32e0f8405e9fa11a5ef3fa3a808ad7", + "sha256:16caa44a06f6b0b2f7626ced4b193c1ae5d09c1b49c9b4962c93ae8aa2134f55", + "sha256:18c478b89b6505756f007dcf76a67224a23dcf0f365427742ed0c0473099caa4", + "sha256:221b41442cf4428fcda7fc958c9721c916709e2a3a9f584edd70f1493a09a762", + "sha256:26109c50ccbcc10f651f76277cfc05fba8418a907daccc300c9247f24b3158a2", + "sha256:28d8157f8c77662a1e0796a7d3cfa8910289131d4b4dd4e10b2686ab1309b67b", + "sha256:2c51689b7b40c7d9c7e8a678350e73dc647945a13b4e416e7a02bbf0c37bdb01", + "sha256:2ec58e1e1691dde4fbbd97f8610de0f8f1b1a38593653f7d3b8e931b9cd6d67f", + "sha256:416feb6500f7b6fc00d32271f6b8495e67188cb5eb51fc8e289b81fdf465a9cb", + "sha256:520352b18adea5478bbf387e9c77910a914985671fe36bc5ef19fdcb67a854bc", + "sha256:527415b5ca201b4add44026f70278fbc0b942cf0801a26ca5527cb0389b6151e", + "sha256:54243053316b5eec92affe43bbace7c8cd946bc0974a4aa39ff1371df0677b22", + "sha256:61b8454190b9cc87279232b6de28dee0bad040df879064bb2f0e505cda907918", + "sha256:672668729edcba0f2ee522ab177fcad91c81cfce991c24d8767765e2637d3515", + "sha256:67aa26097e194947d29f2b5a123830e03da1519bcce10cac034a51fcdb99c34f", + "sha256:6e7305e42b5f54e5ccf51820de46f0a7c951ba7cb9e3f519e908545b0f5628d0", + "sha256:7234ac6782ca43617de803735949f79b894f0c5d353fbc001d745503c69e6d1d", + "sha256:7426bea25bdf92f00fa52c7b30fcd2a2f71c21cf007178971b1f248b6c2d3145", + "sha256:74b331c5d5efdddf5bbd9e1f7d8cb91a0d6b9c4ba45ca3e9003047a84dca1a3b", + "sha256:79b6db1a18253db86e9bf1e99fa829d60fd3fc7ac04f4451c44e4bdcf6756a42", + "sha256:7d79cd354ae0a033ac7b86a2889c9e8bb0bb48243a6ed27fc5064ce49b842ada", + "sha256:823d1b4a6a028b8327e64865e2c81a8959ae9f4e7c9c8e0eec814f4f9b36b362", + "sha256:8715717a5861932b7fe7f3cbd498c82ff4132763e2fea182cc95e53850394ec1", + "sha256:89a6091f2d07936c8a96ce56f2000ecbef20fb420a94845e7d53913c558a6378", + "sha256:8af4b3116e4a37059bc8c7fe36d4a73d7c1d8802a1d8b6e549f1380d13a40160", + "sha256:8b4b0034e6c7f30133fa64a1cc276f8f1a155ef9529e7eb93a3c1728b40c0f5c", + "sha256:92195df3913c1de80062635bf64cd7bd0d0934a7fa1689b6d287d1cbbd16922c", + "sha256:96c2e68385f3848d58f19b2975a675532abdb65c8fa5f04d94b95b27b6b1ffa7", + "sha256:9c7044dbbf8c58420a9ef4ed6901f5a8b7698d90cd984d7f57a18c78474686f6", + "sha256:a1937efed7e3fe0ee74630e1960df887d8aa83c571e1cf4db9d15b9c181d457d", + "sha256:a38c10423a475a1658e2cb8f52cf84ec20a4c0adff724dd43a6b45183f499bc1", + "sha256:a413c424199bcbab71bf5fa7538246f27177fbd6dd74b2d9c5f34878658807f8", + "sha256:b18a855f8504743e0a2d8b75d008c7720d44e4c76687e13f959e35d9a13eb397", + "sha256:b4d59ab3608538e550a72cea13d3c209dd72b6e19e832688da7884081c01594e", + "sha256:b51d3f1cd87f488455f43046d72003689024b0fa9b2d53635db7523033b19996", + "sha256:c02105deda867d09cdd5088d08708f06d75759df6f83d8f7007b06f422908a30", + "sha256:c7b6032dc4490b0dcaf078f09f5b382dc35493cb7f473840368bf0de3196c2b6", + "sha256:c95b355dba2aaf5177dff943b25ded0529a7feb80021d5fdb114a99f0a1ef508", + "sha256:c980ae87863d76b1ea9a073d6d95554b4135032d34bc541be50c07d4a085821b", + "sha256:d12895cd083e35e9e032eb4b57645b91116f8979527381a8d864d1f6b8cb4a2e", + "sha256:d3cd9bad547a8e5fbe712a1dc1413aff1b917e8d39a2cd1389a6f933b7a21460", + "sha256:e8809b01f27f679e3023b9e2013051e0a3f17abff4228cb5197663afd8a0f2c7", + "sha256:f3c37b0dc1898e305aad4f7a1d75f6da83036588c28a9ce0afc681ff5245a601", + "sha256:f966765f54b536e791541458de84a737a6adba8467190f17a8fe7f85354ba908", + "sha256:fa939c2e2468142c9773443d4038e7c915b0cc1b670d3c9192bdc503f7ea73e9", + "sha256:fcc5c1f95102989d2e116ffc8467963554ce89f30a65a3ea86a4d06849c498d8" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.2.0" + "version": "==5.3.0" } }, "develop": { @@ -1354,68 +1349,69 @@ }, "coverage": { "hashes": [ - "sha256:03ed2a641e412e42cc35c244508cf186015c217f0e4d496bf6d7078ebe837ae7", - "sha256:04b14e45d6a8e159c9767ae57ecb34563ad93440fc1b26516a89ceb5b33c1ad5", - "sha256:0cdde51bfcf6b6bd862ee9be324521ec619b20590787d1655d005c3fb175005f", - "sha256:0f48fc7dc82ee14aeaedb986e175a429d24129b7eada1b7e94a864e4f0644dde", - "sha256:107d327071061fd4f4a2587d14c389a27e4e5c93c7cba5f1f59987181903902f", - "sha256:1375bb8b88cb050a2d4e0da901001347a44302aeadb8ceb4b6e5aa373b8ea68f", - "sha256:14a9f1887591684fb59fdba8feef7123a0da2424b0652e1b58dd5b9a7bb1188c", - "sha256:16baa799ec09cc0dcb43a10680573269d407c159325972dd7114ee7649e56c66", - "sha256:1b811662ecf72eb2d08872731636aee6559cae21862c36f74703be727b45df90", - "sha256:1ccae21a076d3d5f471700f6d30eb486da1626c380b23c70ae32ab823e453337", - "sha256:2f2cf7a42d4b7654c9a67b9d091ec24374f7c58794858bff632a2039cb15984d", - "sha256:322549b880b2d746a7672bf6ff9ed3f895e9c9f108b714e7360292aa5c5d7cf4", - "sha256:32ab83016c24c5cf3db2943286b85b0a172dae08c58d0f53875235219b676409", - "sha256:3fe50f1cac369b02d34ad904dfe0771acc483f82a1b54c5e93632916ba847b37", - "sha256:4a780807e80479f281d47ee4af2eb2df3e4ccf4723484f77da0bb49d027e40a1", - "sha256:4a8eb7785bd23565b542b01fb39115a975fefb4a82f23d407503eee2c0106247", - "sha256:4b40b794775df10d7e3ea677108dd581bfec796235750c617d461874178a67f6", - "sha256:5bee3970617b3d74759b2d2df2f6a327d372f9732f9ccbf03fa591b5f7581e39", - "sha256:60a3307a84ec60578accd35d7f0c71a3a971430ed7eca6567399d2b50ef37b8c", - "sha256:6625e52b6f346a283c3d563d1fd8bae8956daafc64bb5bbd2b8f8a07608e3994", - "sha256:66a5aae8233d766a877c5ef293ec5ab9520929c2578fd2069308a98b7374ea8c", - "sha256:68fb816a5dd901c6aff352ce49e2a0ffadacdf9b6fae282a69e7a16a02dad5fb", - "sha256:6b588b5cf51dc0fd1c9e19f622457cc74b7d26fe295432e434525f1c0fae02bc", - "sha256:6c4d7165a4e8f41eca6b990c12ee7f44fef3932fac48ca32cecb3a1b2223c21f", - "sha256:6d2e262e5e8da6fa56e774fb8e2643417351427604c2b177f8e8c5f75fc928ca", - "sha256:6d9c88b787638a451f41f97446a1c9fd416e669b4d9717ae4615bd29de1ac135", - "sha256:755c56beeacac6a24c8e1074f89f34f4373abce8b662470d3aa719ae304931f3", - "sha256:7e40d3f8eb472c1509b12ac2a7e24158ec352fc8567b77ab02c0db053927e339", - "sha256:812eaf4939ef2284d29653bcfee9665f11f013724f07258928f849a2306ea9f9", - "sha256:84df004223fd0550d0ea7a37882e5c889f3c6d45535c639ce9802293b39cd5c9", - "sha256:859f0add98707b182b4867359e12bde806b82483fb12a9ae868a77880fc3b7af", - "sha256:87c4b38288f71acd2106f5d94f575bc2136ea2887fdb5dfe18003c881fa6b370", - "sha256:89fc12c6371bf963809abc46cced4a01ca4f99cba17be5e7d416ed7ef1245d19", - "sha256:9564ac7eb1652c3701ac691ca72934dd3009997c81266807aef924012df2f4b3", - "sha256:9754a5c265f991317de2bac0c70a746efc2b695cf4d49f5d2cddeac36544fb44", - "sha256:a565f48c4aae72d1d3d3f8e8fb7218f5609c964e9c6f68604608e5958b9c60c3", - "sha256:a636160680c6e526b84f85d304e2f0bb4e94f8284dd765a1911de9a40450b10a", - "sha256:a839e25f07e428a87d17d857d9935dd743130e77ff46524abb992b962eb2076c", - "sha256:ae9702c099546e72000d76758b5efec2dd937ba5d746ec8d0563d2fca0f9bc2e", - "sha256:b62046592b44263fa7570f1117d372ae3f310222af1fc1407416f037fb3af21b", - "sha256:b7f7421841f8db443855d2854e25914a79a1ff48ae92f70d0a5c2f8907ab98c9", - "sha256:ba7ca81b6d60a9f7a0b4b4e175dcc38e8fef4992673d9d6e6879fd6de00dd9b8", - "sha256:bb32ca14b4d04e172c541c69eec5f385f9a075b38fb22d765d8b0ce3af3a0c22", - "sha256:c0ff1c1b4d13e2240821ef23c1efb1f009207cb3f56e16986f713c2b0e7cd37f", - "sha256:c669b440ce46ae3abe9b2d44a913b5fd86bb19eb14a8701e88e3918902ecd345", - "sha256:c67734cff78383a1f23ceba3b3239c7deefc62ac2b05fa6a47bcd565771e5880", - "sha256:c6809ebcbf6c1049002b9ac09c127ae43929042ec1f1dbd8bb1615f7cd9f70a0", - "sha256:cd601187476c6bed26a0398353212684c427e10a903aeafa6da40c63309d438b", - "sha256:ebfa374067af240d079ef97b8064478f3bf71038b78b017eb6ec93ede1b6bcec", - "sha256:fbb17c0d0822684b7d6c09915677a32319f16ff1115df5ec05bdcaaee40b35f3", - "sha256:fff1f3a586246110f34dc762098b5afd2de88de507559e63553d7da643053786" + "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", + "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", + "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45", + "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a", + "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03", + "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529", + "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", + "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", + "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", + "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", + "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", + "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", + "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a", + "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4", + "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff", + "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502", + "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793", + "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb", + "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905", + "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821", + "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b", + "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81", + "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0", + "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b", + "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3", + "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184", + "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701", + "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a", + "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82", + "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638", + "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5", + "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083", + "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6", + "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90", + "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465", + "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a", + "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3", + "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e", + "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066", + "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf", + "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b", + "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae", + "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669", + "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873", + "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b", + "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6", + "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb", + "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160", + "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c", + "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079", + "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d", + "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==5.4" + "version": "==5.5" }, "coveralls": { "hashes": [ - "sha256:5399c0565ab822a70a477f7031f6c88a9dd196b3de2877b3facb43b51bd13434", - "sha256:f8384968c57dee4b7133ae701ecdad88e85e30597d496dcba0d7fbb470dca41f" + "sha256:7bd173b3425733661ba3063c88f180127cc2b20e9740686f86d2622b31b41385", + "sha256:cbb942ae5ef3d2b55388cb5b43e93a269544911535f1e750e1c656aef019ce60" ], "index": "pypi", - "version": "==3.0.0" + "version": "==3.0.1" }, "distlib": { "hashes": [ @@ -1457,11 +1453,11 @@ }, "faker": { "hashes": [ - "sha256:90b69e9e05d622edb2fa5ebfda7bef41c88675cace85e72689fde5b8723d00a3", - "sha256:da395fe545f40d4366b82b1a02448847a4586bd2b28af393b3edbd1e45d1e0fc" + "sha256:60a7263104ef7a14ecfe2af1142d53924aa534ccec85cea82bb67b2b32f84421", + "sha256:f43ac743c34affb1c7fccca8b06450371cd482b6ddcb4110e420acb24356e70b" ], "markers": "python_version >= '3.6'", - "version": "==6.5.0" + "version": "==6.6.2" }, "filelock": { "hashes": [ @@ -1591,19 +1587,19 @@ }, "pycodestyle": { "hashes": [ - "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367", - "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e" + "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", + "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" ], "index": "pypi", - "version": "==2.6.0" + "version": "==2.7.0" }, "pygments": { "hashes": [ - "sha256:37a13ba168a02ac54cc5891a42b1caec333e59b66addb7fa633ea8a6d73445c0", - "sha256:b21b072d0ccdf29297a82a2363359d99623597b8a265b8081760e4d0f7153c88" + "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94", + "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8" ], "markers": "python_version >= '3.5'", - "version": "==2.8.0" + "version": "==2.8.1" }, "pyparsing": { "hashes": [ @@ -1796,27 +1792,27 @@ }, "tox": { "hashes": [ - "sha256:89afa9c59c04beb55eda789c7a65feb1a70fde117f85f1bd1c27c66758456e60", - "sha256:ed1e650cf6368bcbc4a071eeeba363c480920e0ed8a9ad1793c7caaa5ad33d49" + "sha256:05a4dbd5e4d3d8269b72b55600f0b0303e2eb47ad5c6fe76d3576f4c58d93661", + "sha256:e007673f3595cede9b17a7c4962389e4305d4a3682a6c5a4159a1453b4f326aa" ], "index": "pypi", - "version": "==3.22.0" + "version": "==3.23.0" }, "urllib3": { "hashes": [ - "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", - "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" + "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", + "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.3" + "version": "==1.26.4" }, "virtualenv": { "hashes": [ - "sha256:147b43894e51dd6bba882cf9c282447f780e2251cd35172403745fc381a0a80d", - "sha256:2be72df684b74df0ea47679a7df93fd0e04e72520022c57b479d8f881485dbe3" + "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107", + "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.2" + "version": "==20.4.3" } } } diff --git a/requirements.txt b/requirements.txt index 947a30350..33d44f136 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,11 +8,11 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 -arrow==1.0.1; python_version >= '3.6' +arrow==1.0.3; python_version >= '3.6' asgiref==3.3.1; python_version >= '3.5' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -autobahn==21.2.2; python_version >= '3.7' +autobahn==21.3.1; python_version >= '3.7' automat==20.2.0 blessed==1.18.0 certifi==2020.12.5 @@ -43,9 +43,9 @@ httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.38.1 +imap-tools==0.39.0 img2pdf==0.4.0 -incremental==17.5.0 +incremental==21.3.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 joblib==1.0.1; python_version >= '3.6' @@ -53,11 +53,11 @@ langdetect==1.0.8 lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.7.0 +ocrmypdf==11.7.2 pathvalidate==2.3.2 pdfminer.six==20201018 -pikepdf==2.5.2 -pillow==8.1.0 +pikepdf==2.9.1 +pillow==8.1.2 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.2.1; python_version >= '3' psycopg2-binary==2.8.6 @@ -67,14 +67,14 @@ pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3. pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 python-dotenv==0.15.0 -python-gnupg==0.4.6 +python-gnupg==0.4.7 python-levenshtein==0.12.2 python-magic==0.4.22 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 -regex==2020.11.13 -reportlab==3.5.59 +regex==2021.3.17 +reportlab==3.5.66; python_version >= '2.7' and python_version < '4' requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 scipy==1.5.4 @@ -84,11 +84,11 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.58.0 +tqdm==4.59.0 twisted[tls]==21.2.0; python_full_version >= '3.5.4' txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 -urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +urllib3==1.26.4; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.13.4 uvloop==0.14.0 watchdog==1.0.2 @@ -97,4 +97,4 @@ wcwidth==0.2.5 websockets==8.1 whitenoise==5.2.0 whoosh==2.7.4 -zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +zope.interface==5.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From 90b1394157c004cf9c517bbeac45fa883632c7c1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 21 Mar 2021 13:50:48 +0100 Subject: [PATCH 654/898] fix dependencies --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9e7a34aa4..e41aeb7ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ RUN echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.lis # Mime type detection file \ libmagic-dev \ - mime-support \ + media-types \ # OCRmyPDF dependencies ghostscript \ icc-profiles-free \ From 62f829ae827e27c598c94952a6bdf55745536f17 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Mar 2021 22:46:35 +0100 Subject: [PATCH 655/898] fixes #794 --- src/paperless_tesseract/parsers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 589b25e37..944bda601 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -119,6 +119,8 @@ class RasterisedDocumentParser(DocumentParser): try: text = extract_text(pdf_file) stripped = strip_excess_whitespace(text) + stripped = stripped.replace("\0", " ") + self.log("debug", f"Extracted text from PDF file {pdf_file}") return stripped except PDFException: From d85a0f950fea5749105cd9d774e41dc083251609 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Mar 2021 23:00:15 +0100 Subject: [PATCH 656/898] better exception logging --- src/documents/consumer.py | 16 ++++++++++------ src/paperless_tesseract/parsers.py | 6 +++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 3fd62fabc..3d7d98198 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -64,9 +64,9 @@ class Consumer(LoggingMixin): {'type': 'status_update', 'data': payload}) - def _fail(self, message, log_message=None): + def _fail(self, message, log_message=None, exc_info=None): self._send_progress(100, 100, 'FAILED', message) - self.log("error", log_message or message) + self.log("error", log_message or message, exc_info=exc_info) raise ConsumerError(f"{self.filename}: {log_message or message}") def __init__(self): @@ -120,7 +120,8 @@ class Consumer(LoggingMixin): except Exception as e: self._fail( MESSAGE_PRE_CONSUME_SCRIPT_ERROR, - f"Error while executing pre-consume script: {e}" + f"Error while executing pre-consume script: {e}", + exc_info=True ) def run_post_consume_script(self, document): @@ -150,7 +151,8 @@ class Consumer(LoggingMixin): except Exception as e: self._fail( MESSAGE_POST_CONSUME_SCRIPT_ERROR, - f"Error while executing post-consume script: {e}" + f"Error while executing post-consume script: {e}", + exc_info=True ) def try_consume_file(self, @@ -255,7 +257,8 @@ class Consumer(LoggingMixin): document_parser.cleanup() self._fail( str(e), - f"Error while consuming document {self.filename}: {e}" + f"Error while consuming document {self.filename}: {e}", + exc_info=True ) # Prepare the document classifier. @@ -326,7 +329,8 @@ class Consumer(LoggingMixin): self._fail( str(e), f"The following error occured while consuming " - f"{self.filename}: {e}" + f"{self.filename}: {e}", + exc_info=True ) finally: document_parser.cleanup() diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 944bda601..d381ed94f 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -246,9 +246,9 @@ class RasterisedDocumentParser(DocumentParser): if original_has_text: self.text = text_original except (NoTextFoundException, InputFileError) as e: - self.log("exception", - f"Encountered the following error while running OCR, " - f"attempting force OCR to get the text.") + self.log("warning", + f"Encountered an error while running OCR: {str(e)}. " + f"Attempting force OCR to get the text.") archive_path_fallback = os.path.join( self.tempdir, "archive-fallback.pdf") From cae3236f1da5b4c0150647494b828f5a3c4259de Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Mar 2021 23:03:01 +0100 Subject: [PATCH 657/898] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 45c71ab67..238955342 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,7 @@ The documentation for Paperless-ng is available on [ReadTheDocs](https://paperle # Translation -Paperless is currently available in English, German, Dutch, French, Portuguese, Italian, and Romanian. - -There's an active translation project at crowdin! If you want to help out by translating paperless into your language, please head over to https://github.com/jonaswinkler/paperless-ng/issues/212 for details. +Paperless is available in many different languages. Translation is coordinated at crowdin. If you want to help out by translating paperless into your language, please head over to https://github.com/jonaswinkler/paperless-ng/issues/212 for details! # Feature Requests From c9d76322ebfad424713c3284a5308d5d82c3b08e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 22 Mar 2021 23:08:34 +0100 Subject: [PATCH 658/898] also apply \0 removal to sidecar contents --- src/paperless_tesseract/parsers.py | 14 +++++++------- src/paperless_tesseract/tests/test_parser.py | 8 +++----- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index d381ed94f..be8f45e7b 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -104,7 +104,7 @@ class RasterisedDocumentParser(DocumentParser): # This happens when there's already text in the input file. # The sidecar file will only contain text for OCR'ed pages. self.log("debug", "Using text from sidecar file") - return text + return post_process_text(text) else: self.log("debug", "Incomplete sidecar file: discarding.") @@ -113,13 +113,11 @@ class RasterisedDocumentParser(DocumentParser): if not os.path.isfile(pdf_file): return None - from pdfminer.high_level import extract_text + from pdfminer.high_level import extract_text as pdfminer_extract_text from pdfminer.pdftypes import PDFException try: - text = extract_text(pdf_file) - stripped = strip_excess_whitespace(text) - stripped = stripped.replace("\0", " ") + stripped = post_process_text(pdfminer_extract_text(pdf_file)) self.log("debug", f"Extracted text from PDF file {pdf_file}") return stripped @@ -296,7 +294,7 @@ class RasterisedDocumentParser(DocumentParser): self.text = "" -def strip_excess_whitespace(text): +def post_process_text(text): if not text: return None @@ -307,4 +305,6 @@ def strip_excess_whitespace(text): r"([^\S\n\r]+)$", '', no_leading_whitespace) # TODO: this needs a rework - return no_trailing_whitespace.strip() + # replace \0 prevents issues with saving to postgres. + # text may contain \0 when this character is present in PDF files. + return no_trailing_whitespace.strip().replace("\0", " ") diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index fe4e4733b..e39f87017 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -7,7 +7,7 @@ from django.test import TestCase, override_settings from documents.parsers import ParseError, run_convert from documents.tests.utils import DirectoriesMixin -from paperless_tesseract.parsers import RasterisedDocumentParser, strip_excess_whitespace +from paperless_tesseract.parsers import RasterisedDocumentParser, post_process_text image_to_string_calls = [] @@ -32,8 +32,6 @@ class FakeImageFile(ContextManager): return os.path.basename(self.fname) - - class TestParser(DirectoriesMixin, TestCase): def assertContainsStrings(self, content, strings): @@ -58,9 +56,9 @@ class TestParser(DirectoriesMixin, TestCase): ) ] - def test_strip_excess_whitespace(self): + def test_post_process_text(self): for source, result in self.text_cases: - actual_result = strip_excess_whitespace(source) + actual_result = post_process_text(source) self.assertEqual( result, actual_result, From 0dedf97b311abc0474cdad5c2e1b83053ab8f2e2 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 24 Mar 2021 10:31:05 +0100 Subject: [PATCH 659/898] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 238955342..5cac22e55 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. These key points should help you decide whether Paperless-ng is something you would prefer over Paperless: -* Interface: The new front end is the main interface for paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed. +* Interface: The new front end is the main interface for Paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed.0 * Encryption: Paperless-ng does not support GnuPG anymore, since storing your data on encrypted file systems (that you optionally mount on demand) achieves about the same result. -* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. While adding documents, it requires about 300MB additional RAM, depending on the document. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. +* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. While adding documents, it requires about 300MB additional RAM, depending on the document. It still runs on Raspberry Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems. * API changes: If you rely on the REST API of paperless, some of its functionality has been changed. -For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation. +For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation, especially the section about the [0.9.0 release](https://paperless-ng.readthedocs.io/en/latest/changelog.html#paperless-ng-0-9-0). # How it Works @@ -25,7 +25,7 @@ Paperless does not control your scanner, it only helps you deal with what your s 1. Buy a document scanner that can write to a place on your network. If you need some inspiration, have a look at the [scanner recommendations](https://paperless-ng.readthedocs.io/en/latest/scanners.html) page. Set it up to "scan to FTP" or something similar. It should be able to push scanned images to a server without you having to do anything. Of course if your scanner doesn't know how to automatically upload the file somewhere, you can always do that manually. Paperless doesn't care how the documents get into its local consumption directory. - - Alternatively, you can use any of the mobile scanning apps out there. We have an app that allows you to share documents with paperless, if you're on Android. See the section on affiliated projects. + - Alternatively, you can use any of the mobile scanning apps out there. We have an app that allows you to share documents with paperless, if you're on Android. See the section on affiliated projects below. 2. Wait for paperless to process your files. OCR is expensive, and depending on the power of your machine, this might take a bit of time. 3. Use the web frontend to sift through the database and find what you want. @@ -35,6 +35,8 @@ Here's what you get: ![Dashboard](https://github.com/jonaswinkler/paperless-ng/raw/master/docs/_static/screenshots/dashboard.png) +If you want to see paperless-ng in action, [more screenshots are available in the documentation](https://paperless-ng.readthedocs.io/en/latest/screenshots.html). + # Features * Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents. @@ -58,19 +60,17 @@ Here's what you get: * Optimized for multi core systems: Paperless-ng consumes multiple documents in parallel. * The integrated sanity checker makes sure that your document archive is in good health. -If you want to see some screenshots of paperless-ng in action, [some are available in the documentation](https://paperless-ng.readthedocs.io/en/latest/screenshots.html). - # Getting started The recommended way to deploy paperless is docker-compose. The files in the /docker/hub directory are configured to pull the image from Docker Hub. Read the [documentation](https://paperless-ng.readthedocs.io/en/latest/setup.html#installation) on how to get started. -Alternatively, you can install the dependencies and setup apache and a database server yourself. The documenation has a step by step guide on how to do it. +Alternatively, you can install the dependencies and setup apache and a database server yourself. The documenation has a step by step guide on how to do it. Consider giving the Ansible role a shot, this essentially automates the entire bare metal installation process. -# Migrating to paperless-ng +# Migrating from Paperless to Paperless-ng -Read the section about [migration](https://paperless-ng.readthedocs.io/en/latest/setup.html#migration-to-paperless-ng) in the documentation. Its also entirely possible to go back to paperless by reverting the database migrations. +Read the section about [migration](https://paperless-ng.readthedocs.io/en/latest/setup.html#migration-to-paperless-ng) in the documentation. Its also entirely possible to go back to Paperless by reverting the database migrations. # Documentation @@ -92,7 +92,7 @@ For bugs please [open an issue](https://github.com/jonaswinkler/paperless-ng/iss There's still lots of things to be done, just have a look at open issues & discussions. If you feel like contributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome. The documentation has some basic information on how to get started. -If you want to implement something big: Please start a discussion about that in the issues! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. See the roadmap above. +If you want to implement something big: Please start a discussion about that! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. # Affiliated Projects From 8781ebbaddca8465f16bd0a2e2e92be605591411 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 12:13:37 -0700 Subject: [PATCH 660/898] Support passing current term from tag search to create dialog --- .../common/input/tags/tags.component.html | 7 ++++--- .../components/common/input/tags/tags.component.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 677b9f4d1..5500930bb 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -8,7 +8,8 @@ [clearSearchOnAdd]="true" [hideSelected]="true" (change)="onChange(value)" - (blur)="onTouched()"> + (search)="onSearch($event)" + (focus)="onFocus()"> <ng-template ng-label-tmp let-item="item"> <span class="tag-wrap tag-wrap-delete" (click)="removeTag(item.id)"> @@ -39,8 +40,8 @@ <ng-container *ngFor="let tag of getSuggestions()"> <a (click)="addTag(tag.id)" [routerLink]="">{{tag.name}}</a>  </ng-container> - - + + </small> </div> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index f77d0570d..336341bc3 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -56,6 +56,8 @@ export class TagsComponent implements OnInit, ControlValueAccessor { tags: PaperlessTag[] + private _lastSearchTerm: string + getTag(id) { if (this.tags) { return this.tags.find(tag => tag.id == id) @@ -77,6 +79,7 @@ export class TagsComponent implements OnInit, ControlValueAccessor { createTag() { var modal = this.modalService.open(TagEditDialogComponent, {backdrop: 'static'}) modal.componentInstance.dialogMode = 'create' + if (this._lastSearchTerm) modal.componentInstance.object = { name: this._lastSearchTerm } modal.componentInstance.success.subscribe(newTag => { this.tagService.listAll().subscribe(tags => { this.tags = tags.results @@ -84,6 +87,9 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this.onChange(this.value) }) }) + modal.result.then(() => { + this._lastSearchTerm = null + }) } getSuggestions() { @@ -99,4 +105,12 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this.onChange(this.value) } + onFocus() { + this._lastSearchTerm = null + } + + onSearch($event) { + this._lastSearchTerm = $event.term + } + } From 567161b2c02694b3f022f74a548b20a1c951e6f5 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 12:21:13 -0700 Subject: [PATCH 661/898] Support passing current term from input-select search to create dialog e.g. for doc type / correspondent --- .../common/input/select/select.component.html | 9 +++++---- .../common/input/select/select.component.ts | 17 ++++++++++++++++- .../document-detail.component.html | 4 ++-- .../document-detail.component.ts | 6 ++++-- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 540429e89..59d0f9ca3 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -10,11 +10,12 @@ bindLabel="name" bindValue="id" (change)="onChange(value)" - (blur)="onTouched()"> + (search)="onSearch($event)" + (focus)="onFocus()"> </ng-select> <div *ngIf="showPlusButton()" class="input-group-append"> - <button class="btn btn-outline-secondary" type="button" (click)="createNew.emit()"> + <button class="btn btn-outline-secondary" type="button" (click)="clickNew()"> <svg class="buttonicon" fill="currentColor"> <use xlink:href="assets/bootstrap-icons.svg#plus" /> </svg> @@ -27,7 +28,7 @@ <ng-container *ngFor="let s of getSuggestions()"> <a (click)="value = s.id; onChange(value)" [routerLink]="">{{s.name}}</a>  </ng-container> - - + + </small> </div> diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index e02aaab72..6eaf7795f 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -34,7 +34,9 @@ export class SelectComponent extends AbstractInputComponent<number> { suggestions: number[] @Output() - createNew = new EventEmitter() + createNew = new EventEmitter<string>() + + private _lastSearchTerm: string showPlusButton(): boolean { return this.createNew.observers.length > 0 @@ -48,4 +50,17 @@ export class SelectComponent extends AbstractInputComponent<number> { } } + clickNew() { + this.createNew.next(this._lastSearchTerm) + this._lastSearchTerm = null + } + + onFocus() { + this._lastSearchTerm = null + } + + onSearch($event) { + this._lastSearchTerm = $event.term + } + } diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index f9b87aee3..1286225fb 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -60,9 +60,9 @@ <app-input-number i18n-title title="Archive serial number" [error]="error?.archive_serial_number" formControlName='archive_serial_number'></app-input-number> <app-input-date i18n-title title="Date created" formControlName="created" [error]="error?.created"></app-input-date> <app-input-select [items]="correspondents" i18n-title title="Correspondent" formControlName="correspondent" [allowNull]="true" - (createNew)="createCorrespondent()" [suggestions]="suggestions?.correspondents"></app-input-select> + (createNew)="createCorrespondent($event)" [suggestions]="suggestions?.correspondents"></app-input-select> <app-input-select [items]="documentTypes" i18n-title title="Document type" formControlName="document_type" [allowNull]="true" - (createNew)="createDocumentType()" [suggestions]="suggestions?.document_types"></app-input-select> + (createNew)="createDocumentType($event)" [suggestions]="suggestions?.document_types"></app-input-select> <app-input-tags formControlName="tags" [suggestions]="suggestions?.tags"></app-input-tags> </ng-template> diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index af98a6f7f..7dd5dd80d 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -127,9 +127,10 @@ export class DocumentDetailComponent implements OnInit { this.documentForm.patchValue(doc) } - createDocumentType() { + createDocumentType(newName: string) { var modal = this.modalService.open(DocumentTypeEditDialogComponent, {backdrop: 'static'}) modal.componentInstance.dialogMode = 'create' + if (newName) modal.componentInstance.object = { name: newName } modal.componentInstance.success.subscribe(newDocumentType => { this.documentTypeService.listAll().subscribe(documentTypes => { this.documentTypes = documentTypes.results @@ -138,9 +139,10 @@ export class DocumentDetailComponent implements OnInit { }) } - createCorrespondent() { + createCorrespondent(newName: string) { var modal = this.modalService.open(CorrespondentEditDialogComponent, {backdrop: 'static'}) modal.componentInstance.dialogMode = 'create' + if (newName) modal.componentInstance.object = { name: newName } modal.componentInstance.success.subscribe(newCorrespondent => { this.correspondentService.listAll().subscribe(correspondents => { this.correspondents = correspondents.results From 904ff04f1d60d63e904c61c6dd21d91bd3a11a5e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 12:21:51 -0700 Subject: [PATCH 662/898] Add timeout for clearing last search term on select blur --- .../components/common/input/select/select.component.html | 3 ++- .../app/components/common/input/select/select.component.ts | 6 ++++++ .../app/components/common/input/tags/tags.component.html | 3 ++- .../src/app/components/common/input/tags/tags.component.ts | 6 ++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 59d0f9ca3..a2834a1c9 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -11,7 +11,8 @@ bindValue="id" (change)="onChange(value)" (search)="onSearch($event)" - (focus)="onFocus()"> + (focus)="onFocus()" + (blur)="onBlur()"> </ng-select> <div *ngIf="showPlusButton()" class="input-group-append"> diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 6eaf7795f..438925d32 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -63,4 +63,10 @@ export class SelectComponent extends AbstractInputComponent<number> { this._lastSearchTerm = $event.term } + onBlur() { + setTimeout(() => { + this._lastSearchTerm = null + }, 3000); + } + } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 5500930bb..df6621fb0 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -9,7 +9,8 @@ [hideSelected]="true" (change)="onChange(value)" (search)="onSearch($event)" - (focus)="onFocus()"> + (focus)="onFocus()" + (blur)="onBlur()"> <ng-template ng-label-tmp let-item="item"> <span class="tag-wrap tag-wrap-delete" (click)="removeTag(item.id)"> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 336341bc3..a1a803b61 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -113,4 +113,10 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this._lastSearchTerm = $event.term } + onBlur() { + setTimeout(() => { + this._lastSearchTerm = null + }, 3000); + } + } From f399458df8f6c205e9906acdb669a48dfcd0868b Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 12:37:26 -0700 Subject: [PATCH 663/898] Clear last search term when clear button clicked --- .../components/common/input/select/select.component.html | 3 ++- .../app/components/common/input/select/select.component.ts | 6 +++--- .../app/components/common/input/tags/tags.component.html | 3 ++- .../src/app/components/common/input/tags/tags.component.ts | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index a2834a1c9..f9f05b6fa 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -11,7 +11,8 @@ bindValue="id" (change)="onChange(value)" (search)="onSearch($event)" - (focus)="onFocus()" + (focus)="clearLastSearchTerm()" + (clear)="clearLastSearchTerm()" (blur)="onBlur()"> </ng-select> diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 438925d32..408b3a73a 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -52,10 +52,10 @@ export class SelectComponent extends AbstractInputComponent<number> { clickNew() { this.createNew.next(this._lastSearchTerm) - this._lastSearchTerm = null + this.clearLastSearchTerm() } - onFocus() { + clearLastSearchTerm() { this._lastSearchTerm = null } @@ -65,7 +65,7 @@ export class SelectComponent extends AbstractInputComponent<number> { onBlur() { setTimeout(() => { - this._lastSearchTerm = null + this.clearLastSearchTerm() }, 3000); } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index df6621fb0..6eda2a44d 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -9,7 +9,8 @@ [hideSelected]="true" (change)="onChange(value)" (search)="onSearch($event)" - (focus)="onFocus()" + (focus)="clearLastSearchTerm()" + (clear)="clearLastSearchTerm()" (blur)="onBlur()"> <ng-template ng-label-tmp let-item="item"> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index a1a803b61..5c413a7c6 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -105,7 +105,7 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this.onChange(this.value) } - onFocus() { + clearLastSearchTerm() { this._lastSearchTerm = null } @@ -115,7 +115,7 @@ export class TagsComponent implements OnInit, ControlValueAccessor { onBlur() { setTimeout(() => { - this._lastSearchTerm = null + this.clearLastSearchTerm() }, 3000); } From 9f8687bbe6032ae5493094c26542afd5cda36679 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 12:42:14 -0700 Subject: [PATCH 664/898] Not needed, clearing will be done by timeout --- src-ui/src/app/components/common/input/tags/tags.component.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 5c413a7c6..44b2e282e 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -87,9 +87,6 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this.onChange(this.value) }) }) - modal.result.then(() => { - this._lastSearchTerm = null - }) } getSuggestions() { From f2451cd03305f342df2b9edda58eba19a262b915 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 16:17:40 -0700 Subject: [PATCH 665/898] Remove all rem units on SVG elements See https://bugzilla.mozilla.org/show_bug.cgi?id=1231147 --- src-ui/src/app/components/app-frame/app-frame.component.html | 4 ++-- src-ui/src/app/components/dashboard/dashboard.component.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 96ca1382c..2ff58b104 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -5,7 +5,7 @@ <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand col-auto col-md-3 col-lg-2 mr-0 px-3 py-3 order-sm-0" routerLink="/dashboard"> - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 198.43 238.91" width="1rem" class="mr-2" fill="currentColor"> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 198.43 238.91" width="1em" class="mr-2" fill="currentColor"> <path d="M194.7,0C164.22,70.94,17.64,79.74,64.55,194.06c.58,1.47-10.85,17-18.47,29.9-1.76-6.45-3.81-13.48-3.52-14.07,38.11-45.14-27.26-70.65-30.78-107.58C-4.64,131.62-10.5,182.92,39,212.53c.3,0,2.64,11.14,3.81,16.71a58.55,58.55,0,0,0-2.93,6.45c-1.17,2.93,7.62,2.64,7.62,3.22.88-.29,21.7-36.93,22.28-37.23C187.67,174.72,208.48,68.6,194.7,0ZM134.61,74.75C79.5,124,70.12,160.64,71.88,178.53,53.41,134.85,107.64,86.77,134.61,74.75ZM28.2,145.11c10.55,9.67,28.14,39.28,13.19,56.57C44.91,193.77,46.08,175.89,28.2,145.11Z" transform="translate(0 0)"/> </svg> <ng-container i18n="app title">Paperless-ng</ng-container> @@ -175,7 +175,7 @@ </svg> <ng-container i18n>GitHub</ng-container> </a> <a class="nav-link-additional small text-muted ml-3" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> - <svg xmlns="http://www.w3.org/2000/svg" width=".9rem" height=".9rem" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> + <svg xmlns="http://www.w3.org/2000/svg" width="1.5em" height="1.5em" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> </svg> <ng-container i18n>Suggest an idea</ng-container> diff --git a/src-ui/src/app/components/dashboard/dashboard.component.html b/src-ui/src/app/components/dashboard/dashboard.component.html index ec2bbd85c..6b9ea950b 100644 --- a/src-ui/src/app/components/dashboard/dashboard.component.html +++ b/src-ui/src/app/components/dashboard/dashboard.component.html @@ -1,5 +1,5 @@ <app-page-header title="Dashboard" [subTitle]="subtitle" i18n-title> - <svg class="logo d-none d-md-block" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2897.4 896.64" height="5rem"> + <svg class="logo d-none d-md-block" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2897.4 896.64" height="6em"> <path class="leaf" d="M730.71,0C616.3,266.24,66.21,299.25,242.24,728.31c2.2,5.5-40.71,63.81-69.31,112.22-6.6-24.21-14.3-50.61-13.2-52.81C302.75,618.29,57.41,522.58,44.21,384-17.4,494-39.4,686.5,146.53,797.62c1.1,0,9.9,41.81,14.3,62.71-4.4,8.8-8.8,17.6-11,24.2-4.4,11,28.6,9.91,28.6,12.11,3.3-1.1,81.41-138.63,83.61-139.73C704.31,655.7,782.42,257.44,730.71,0ZM105.82,544.58C145.43,580.89,211.44,692,155.33,756.91,168.53,727.21,172.93,660.1,105.82,544.58ZM269.74,670C200.43,506.08,404,325.65,505.18,280.54,298.35,465.37,263.14,602.89,269.74,670Z" transform="translate(0)" style="fill:#17541f"/> <path class="text" style="fill:#000" d="M1169.27,231.44q.7,17.06.71,38.73t-.71,38a112,112,0,0,1-6.76,38A100.16,100.16,0,0,1,1142.25,380a93.87,93.87,0,0,1-33.76,23.46q-20.25,8.54-46.56,8.53h-36.25V597.5q0,9.94,2.85,14.57c1.89,3.08,3.79,4.86,5.68,5.33a10.54,10.54,0,0,0,9.24,0v18.48h-86V617.4q5.68,2.13,8.53,0,3.56-.71,7.1-5.33t3.56-14.57V166q0-10.66-3.56-15.28t-7.1-6q-2.85-1.42-8.53,0V127.66h104.48q26.31,0,46.56,8.53a93.75,93.75,0,0,1,33.76,23.46,101,101,0,0,1,20.26,33.4A111.05,111.05,0,0,1,1169.27,231.44ZM1118.8,215.8q0-18.48-6-32t-14.22-21.32a74.68,74.68,0,0,0-17.06-12.44q-8.88-4.62-15.28-4.62h-40.52V392.79h40.52q6.39,0,15.28-3.56t17.06-12.44a86,86,0,0,0,14.22-21.67q6-12.8,6-32Zm337.63,389.52a27.35,27.35,0,0,1-2.85,11.72,40.58,40.58,0,0,1-8.17,11.38,54.8,54.8,0,0,1-13.5,9.59,40.07,40.07,0,0,1-18.84,4.27,60,60,0,0,1-30.57-7.82q-13.5-7.82-18.48-20.61a56.12,56.12,0,0,1-6.39-16.35q-9.24,19.18-28.08,32a72.42,72.42,0,0,1-41.58,12.8q-28.44,0-49.76-20.61-12.07-10.67-19.9-27.73t-9.24-39.09q-.71-2.13-.71-8.53v-.71a124.43,124.43,0,0,1,4.26-25.23,113.22,113.22,0,0,1,11-26.3,149.46,149.46,0,0,1,17.77-24.88,128.6,128.6,0,0,1,22.39-20.26,17.39,17.39,0,0,0,4.62-3.2,28.53,28.53,0,0,1,5.33-3.91l2.13-1.06,2.14-1.07q12.8-7.81,22.39-14.22t17.41-12.08a97.25,97.25,0,0,0,8.53-6.4c2.84-2.37,5.93-4.73,9.24-7.1a79.43,79.43,0,0,0,12.09-10,36.51,36.51,0,0,0,8.53-13.5q4.26-7.11,4.26-17.06a67.74,67.74,0,0,0-2.13-17.77,49.09,49.09,0,0,0-14.57-27q-11.73-11.37-26-14.93a38.26,38.26,0,0,0-12.08-2.13q-19.9,0-34.12,7.11-9.24,4.26-13.51,9.59t-4.62,10a10.73,10.73,0,0,0,1.78,7.46,12.91,12.91,0,0,0,5.69,4.26,6,6,0,0,0,1.78.71,6.28,6.28,0,0,1,1.77.72,32.21,32.21,0,0,1,15.28,12.43,34,34,0,0,1,6,19.55,32.78,32.78,0,0,1-32.7,32.7,33.53,33.53,0,0,1-24.17-9.6,30.94,30.94,0,0,1-10-23.1,106.83,106.83,0,0,1,3.2-25.23,84.65,84.65,0,0,1,9.6-23.81q13.5-19.91,32.34-28.79a96.24,96.24,0,0,1,41.58-8.89,93.82,93.82,0,0,1,33.76,6.4,96.18,96.18,0,0,1,29.86,18.13,103.38,103.38,0,0,1,22,28.07q8.88,16.35,8.88,37.68v209q0,12.79.36,16.7t.36,5.34h0q0,9.24,5.68,14.92a18.45,18.45,0,0,0,13.51,5.69q9.24,0,14.92-5.33a20.62,20.62,0,0,0,6.4-13.86Zm-111.6-17.77a52.58,52.58,0,0,0,6.76-21.33q1.07-11.37,1.06-21.32V413.4a63.92,63.92,0,0,1-6,5.33,74,74,0,0,0-6.75,6q-20.62,14.93-35.19,27.37a164.06,164.06,0,0,0-24.52,25.59,113,113,0,0,0-15.64,28.07,121,121,0,0,0-7.11,34.12v10.67q.72,27,14.58,42.29t39.44,15.28a38.56,38.56,0,0,0,20.62-5.69q9.24-6.39,12.79-14.92Zm244.52-304.23q40.51.72,64.68,24.53t24.17,75.7V542.77q0,51.88-24.17,75.34T1589.35,643h-2.13a80.27,80.27,0,0,1-22-2.84h-.71a.63.63,0,0,1-.71-.71,91.74,91.74,0,0,1-28.43-15.64l-6.76-6.76-5.33-7.46v118q0,10,2.85,14.58c1.89,3.08,3.79,5.09,5.68,6a10.54,10.54,0,0,0,9.24,0V766h-86V748.19q5.68,2.13,8.53,0,3.56-1.43,6.75-6t3.2-14.58V326.68q0-9.94-3.2-14.57t-6.75-6q-2.85-1.43-8.53,0V289h68.23v27.72a68.68,68.68,0,0,1,12.09-14.21,75.62,75.62,0,0,1,28.43-15.64.63.63,0,0,1,.71-.71h.71a90.55,90.55,0,0,1,22-2.85Zm35.54,84.59v-.71q-.72-36.26-8.89-51.18t-26.65-16.35a63.12,63.12,0,0,0-24.17,3.2,48,48,0,0,0-19.9,13.15q-8.54,9.24-14.22,24.88t-7.82,37V548.45q2.13,22,7.82,37.32t14.22,24.17a53.23,53.23,0,0,0,19.9,13.15,58.92,58.92,0,0,0,24.17,3.55q18.48-1.42,26.65-16.35t8.89-51.18V367.91Zm179.83-84.59a105.36,105.36,0,0,1,33.41,5.69,86.38,86.38,0,0,1,30.56,17.77,88.06,88.06,0,0,1,21.68,30.57q8.18,18.48,8.18,44.06v90.28H1757.1V544.9q0,44.07,15.28,62.9t38,18.13a113.94,113.94,0,0,0,26.65-4.62,54.83,54.83,0,0,0,22.75-13.15q9.59-9.24,16-26.3t6.4-44.78h16.35V547a153.56,153.56,0,0,1-4.27,36.61A72,72,0,0,1,1852,634.1q-16.71,7.47-40.87,8.18a102.25,102.25,0,0,1-34.83-6.4,96,96,0,0,1-32-19.19,108.91,108.91,0,0,1-23.45-30.21q-9.24-17.41-9.25-39.45v-16.7s-.11-9.12-.35-27.37-.36-29.5-.36-33.76-.11-16-.35-35.19-.36-29.49-.36-30.92v-21q0-25.59,8.89-44.43t22-30.56A90.72,90.72,0,0,1,1771,289.37a98.55,98.55,0,0,1,33.76-6.05Zm46.2,169.89V397.05q0-27-3.55-45.13t-9.6-29.15q-6-11-14.57-15.28a42.36,42.36,0,0,0-19.19-4.26q-22.76,0-34.48,19.9t-11.72,73.92v56.16Zm279.35-113.73a42.31,42.31,0,0,0,.71,5.68,17.92,17.92,0,0,1,0,7.11q-.72,14.93-10.31,24.52a33,33,0,0,1-46.91-.35,33.52,33.52,0,0,1-9.6-24.17q0-17.76,13.51-27a8.33,8.33,0,0,0,1.77-1.06l1.07-1.07a16.22,16.22,0,0,0,6.4-10.31q1.41-6.75-8.53-11.73a26.26,26.26,0,0,0-12.8-3.55q-21.32-1.43-37.67,12.8t-22,49.75V597.5q0,9.94,2.84,14.57t5.69,5.33a10.54,10.54,0,0,0,9.24,0v18.48h-86V617.4q5.68,2.13,8.53,0,3.55-.71,7.11-5.33t3.55-14.57V326.68q0-9.94-3.55-14.57t-7.11-6q-2.85-1.43-8.53,0V288.3h68.24v29.14q5-7.81,9.95-14.57a48.44,48.44,0,0,1,11.72-11.37,59.79,59.79,0,0,1,15.64-7.46q8.89-2.85,22.39-2.85,20.61,0,38.39,14.93t26.3,43.36Zm95.95,258q0,9.94,3.2,14.57c2.13,3.08,4.15,4.86,6,5.33q3.55,2.13,9.24,0v18.48h-86V617.4q5.68,2.13,10,0,2.13-.71,5.69-5.33t3.55-14.57V166.75q0-10.65-3.55-15.28a28.82,28.82,0,0,0-5.69-6q-4.26-2.13-10,0V128.37h67.52V597.5Zm154.25-314.18a105.25,105.25,0,0,1,33.4,5.69,86.33,86.33,0,0,1,30.57,17.77,88.19,88.19,0,0,1,21.68,30.57q8.18,18.48,8.17,44.06v90.28H2332.84V544.9q0,44.07,15.29,62.9t38,18.13a113.93,113.93,0,0,0,26.66-4.62,54.79,54.79,0,0,0,22.74-13.15q9.6-9.24,16-26.3t6.39-44.78h16.35V547a153.56,153.56,0,0,1-4.26,36.61,72,72,0,0,1-42.29,50.46q-16.71,7.47-40.88,8.18a102.24,102.24,0,0,1-34.82-6.4,96,96,0,0,1-32-19.19,108.94,108.94,0,0,1-23.46-30.21q-9.24-17.41-9.24-39.45v-16.7s-.12-9.12-.35-27.37-.36-29.5-.36-33.76-.12-16-.35-35.19-.36-29.49-.36-30.92v-21q0-25.59,8.89-44.43t22-30.56a90.78,90.78,0,0,1,29.85-17.77,98.6,98.6,0,0,1,33.77-6.05Zm46.2,169.89V397.05q0-27-3.56-45.13t-9.59-29.15q-6-11-14.57-15.28a42.39,42.39,0,0,0-19.19-4.26q-22.76,0-34.48,19.9t-11.73,73.92v56.16Zm213.24,178.41c-.48.47-.83.71-1.07.71s-.59.23-1.06.71l-.71.71c-1,.47-2,1-3.2,1.42s-2.25,1-3.2,1.42q-14.93,6.4-34.83,6.4a48.79,48.79,0,0,1-22-5.33q-10.65-5.34-18.48-8.89t-13.15-3.2q-5.33.36-5.33,10.31h-13.5V550.59h17.06q-1.43,22.74,5,39.09,4.27,14.22,16.71,26.65t37.31,12.44q16.35,0,27-5.68,18.48-9.24,25.24-22A45.92,45.92,0,0,0,2657,574.4q-1.42-13.86-10.31-27.37A126,126,0,0,0,2625,522.15q-8.52-6.39-17.77-13.5t-18.48-14.93q-24.87-19.91-39.45-35.89T2526.89,428a98.76,98.76,0,0,1-10.66-26.3,119.09,119.09,0,0,1-2.84-26.65,106,106,0,0,1,1.06-15.64q1.07-7.11,2.49-12.79a102.69,102.69,0,0,1,7.11-23.46,63,63,0,0,1,14.21-20.26A73.7,73.7,0,0,1,2561,288.3q13.5-5.69,32.7-5.69a53.27,53.27,0,0,1,21.32,4.62q10.66,4.62,19.19,8.53t13.51,3.56q5-.36,5-11h13.51v88.14h-18.48q.7-21.33-5-38.38a67,67,0,0,0-17.41-27Q2612.89,299,2588.73,299q-19.18,0-31.27,8.53-6.4,5-11,14.57a55.84,55.84,0,0,0-5.33,21,66.08,66.08,0,0,0,3.55,24.52q4.26,13.15,17.06,24.53a21.32,21.32,0,0,0,3.91,4.26,26.5,26.5,0,0,0,5.33,3.56,23,23,0,0,1,3.56,2.84l2.84,2.84q7.82,6.41,16,12.8t16.71,12.79a449.06,449.06,0,0,1,33.05,30.92,276.13,276.13,0,0,1,22,25.94,104.57,104.57,0,0,1,13.15,22.75,69,69,0,0,1,5,20.61q7.11,32.7-2.49,55.09t-24.52,35.19h-.71a1.26,1.26,0,0,1-1.43,1.42,11,11,0,0,1-2.84,2.13l-4.26,2.84-4.27,2.13v.72a3.1,3.1,0,0,0-1.42.35,3.12,3.12,0,0,1-1.42.36Zm211.11,0c-.48.47-.83.71-1.07.71s-.59.23-1.07.71l-.71.71c-.94.47-2,1-3.2,1.42s-2.25,1-3.19,1.42Q2826.84,643,2807,643a48.76,48.76,0,0,1-22-5.33q-10.66-5.34-18.48-8.89t-13.15-3.2q-5.33.36-5.33,10.31h-13.51V550.59h17.06q-1.41,22.74,5,39.09,4.26,14.22,16.7,26.65t37.32,12.44q16.35,0,27-5.68,18.48-9.24,25.23-22a45.93,45.93,0,0,0,5.34-26.65q-1.42-13.86-10.31-27.37a126,126,0,0,0-21.68-24.88q-8.53-6.39-17.77-13.5t-18.48-14.93q-24.89-19.91-39.45-35.89T2738,428a98.76,98.76,0,0,1-10.66-26.3,119.08,119.08,0,0,1-2.85-26.65,105.9,105.9,0,0,1,1.07-15.64q1.07-7.11,2.49-12.79a102.69,102.69,0,0,1,7.11-23.46,62.83,62.83,0,0,1,14.21-20.26,73.58,73.58,0,0,1,22.75-14.57q13.5-5.69,32.69-5.69a53.28,53.28,0,0,1,21.33,4.62q10.67,4.62,19.19,8.53t13.5,3.56q5-.36,5-11h13.51v88.14h-18.49q.72-21.33-5-38.38a67,67,0,0,0-17.42-27Q2824,299,2799.84,299q-19.2,0-31.28,8.53-6.39,5-11,14.57a56,56,0,0,0-5.34,21,66.3,66.3,0,0,0,3.56,24.52q4.26,13.15,17.06,24.53a21.32,21.32,0,0,0,3.91,4.26,26.22,26.22,0,0,0,5.33,3.56,22.83,22.83,0,0,1,3.55,2.84l2.85,2.84q7.82,6.41,16,12.8t16.7,12.79a445,445,0,0,1,33.05,30.92,274.85,274.85,0,0,1,22,25.94,105,105,0,0,1,13.15,22.75,68.69,68.69,0,0,1,5,20.61q7.11,32.7-2.48,55.09t-24.53,35.19h-.71a1.26,1.26,0,0,1-1.42,1.42,11.2,11.2,0,0,1-2.84,2.13l-4.27,2.84-4.26,2.13v.72a3.1,3.1,0,0,0-1.42.35,3.15,3.15,0,0,1-1.42.36Z" transform="translate(0)"/> </svg> @@ -19,6 +19,6 @@ <app-statistics-widget></app-statistics-widget> <app-upload-file-widget></app-upload-file-widget> - + </div> </div> From 8361d24a4509aea8794b49860fbcb870f234a26e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 24 Mar 2021 16:21:08 -0700 Subject: [PATCH 666/898] 1.3em not 1.5em --- src-ui/src/app/components/app-frame/app-frame.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 2ff58b104..25d4a9dc7 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -175,7 +175,7 @@ </svg> <ng-container i18n>GitHub</ng-container> </a> <a class="nav-link-additional small text-muted ml-3" target="_blank" rel="noopener noreferrer" href="https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests" title="Suggest an idea"> - <svg xmlns="http://www.w3.org/2000/svg" width="1.5em" height="1.5em" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> + <svg xmlns="http://www.w3.org/2000/svg" width="1.3em" height="1.3em" fill="currentColor" class="bi bi-lightbulb pr-1" viewBox="0 0 16 16"> <path d="M2 6a6 6 0 1 1 10.174 4.31c-.203.196-.359.4-.453.619l-.762 1.769A.5.5 0 0 1 10.5 13a.5.5 0 0 1 0 1 .5.5 0 0 1 0 1l-.224.447a1 1 0 0 1-.894.553H6.618a1 1 0 0 1-.894-.553L5.5 15a.5.5 0 0 1 0-1 .5.5 0 0 1 0-1 .5.5 0 0 1-.46-.302l-.761-1.77a1.964 1.964 0 0 0-.453-.618A5.984 5.984 0 0 1 2 6zm6-5a5 5 0 0 0-3.479 8.592c.263.254.514.564.676.941L5.83 12h4.342l.632-1.467c.162-.377.413-.687.676-.941A5 5 0 0 0 8 1z"/> </svg> <ng-container i18n>Suggest an idea</ng-container> From 9db3b8b67dbfeb196e8e498144d537b02f3c94a3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 26 Mar 2021 23:12:36 +0100 Subject: [PATCH 667/898] New translations django.po (Italian) (#813) --- src/locale/it_IT/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 48dfe762e..a36ee9d9b 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-18 00:34\n" +"PO-Revision-Date: 2021-03-23 11:21\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -366,7 +366,7 @@ msgstr "Il tipo di file %(type)s non è supportato" #: documents/templates/index.html:21 msgid "Paperless-ng is loading..." -msgstr "Paperless-ng si sta caricando..." +msgstr "Paperless-ng è in caricamento..." #: documents/templates/registration/logged_out.html:13 msgid "Paperless-ng signed out" From 6d953aa015615c8ff6d3d16b86e9ec76d67241f5 Mon Sep 17 00:00:00 2001 From: benjaminfrank <ben+github@pipsfrank.de> Date: Sat, 27 Mar 2021 14:40:13 +0100 Subject: [PATCH 668/898] Update scanners.rst --- docs/scanners.rst | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index 04856bbfc..752063bb4 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -65,22 +65,26 @@ Mobile phone software You can use your phone to "scan" documents. The regular camera app will work, but may have too low contrast for OCR to work well. Apps specifically for scanning are recommended. -+-------------------+----------------+-----+-----+-----+-------+--------+----------------+ -| Name | OS | Supports | Recommended By | -+-------------------+----------------+-----+-----+-----+-------+--------+----------------+ -| | | FTP | NFS | SMB | Email | WebDav | | -+===================+================+=====+=====+=====+=======+========+================+ -| `Office Lens`_ | Android | ? | ? | ? | ? | ? | `jonaswinkler`_| -+-------------------+----------------+-----+-----+-----+-------+--------+----------------+ -| `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ | -+-------------------+----------------+-----+-----+-----+-------+--------+----------------+ -| `Quick Scan`_ | iOS | no | no | no | no | no | `holzhannes`_ | -+-------------------+----------------+-----+-----+-----+-------+--------+----------------+ ++-------------------+----------------+-----+-----+-----+-------+--------+------------------+ +| Name | OS | Supports | Recommended By | ++-------------------+----------------+-----+-----+-----+-------+--------+------------------+ +| | | FTP | NFS | SMB | Email | WebDav | | ++===================+================+=====+=====+=====+=======+========+==================+ +| `Office Lens`_ | Android | ? | ? | ? | ? | ? | `jonaswinkler`_ | ++-------------------+----------------+-----+-----+-----+-------+--------+------------------+ +| `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ | ++-------------------+----------------+-----+-----+-----+-------+--------+------------------+ +| `OpenScan`_ | Android | no | no | no | no | no | `benjaminfrank`_ | ++-------------------+----------------+-----+-----+-----+-------+--------+------------------+ +| `Quick Scan`_ | iOS | no | no | no | no | no | `holzhannes`_ | ++-------------------+----------------+-----+-----+-----+-------+--------+------------------+ On Android, you can use these applications in combination with one of the :ref:`Paperless-ng compatible apps <usage-mobile_upload>` to "Share" the documents produced by these scanner apps with paperless. On iOS, you can share the scanned documents via iOS-Sharing to other mail, WebDav or FTP apps. .. _Office Lens: https://play.google.com/store/apps/details?id=com.microsoft.office.officelens .. _Genius Scan: https://play.google.com/store/apps/details?id=com.thegrizzlylabs.geniusscan.free .. _Quick Scan: https://apps.apple.com/us/app/quickscan-scanner-text-ocr/id1513790291 +.. _OpenScan: https://github.com/Ethereal-Developers-Inc/OpenScan .. _hannahswain: https://github.com/hannahswain +.. _benjaminfrank: https://github.com/benjaminfrank From 5d8163d97c5a7075ce7534dd92f769360be34d9c Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 30 Mar 2021 00:42:06 +0200 Subject: [PATCH 669/898] New Crowdin updates (#837) --- src-ui/src/locale/messages.ro_RO.xlf | 2 +- src/locale/ro_RO/LC_MESSAGES/django.po | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index c434c30bf..4f45f3625 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1967,7 +1967,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">100</context> </context-group> - <target state="needs-translation">Spanish</target> + <target state="translated">Spaniolă</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 70194eff5..dcb505aba 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 22:42\n" +"PO-Revision-Date: 2021-03-28 09:07\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -446,7 +446,7 @@ msgstr "Rusă" #: paperless/settings.py:308 msgid "Spanish" -msgstr "" +msgstr "Spaniolă" #: paperless/urls.py:118 msgid "Paperless-ng administration" From 43e485eb1dd2d47a683922118cb053142b68a99c Mon Sep 17 00:00:00 2001 From: Tobi <Webmaster@bart19.de> Date: Tue, 30 Mar 2021 19:07:29 +0200 Subject: [PATCH 670/898] implements #807 --- src-ui/src/app/app-routing.module.ts | 6 ++- src-ui/src/app/app.module.ts | 4 +- .../document-asncomponent.component.html | 1 + .../document-asncomponent.component.scss | 0 .../document-asncomponent.component.spec.ts | 25 ++++++++++++ .../document-asncomponent.component.ts | 38 +++++++++++++++++++ 6 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src-ui/src/app/components/document-asncomponent/document-asncomponent.component.html create mode 100644 src-ui/src/app/components/document-asncomponent/document-asncomponent.component.scss create mode 100644 src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts create mode 100644 src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index 27f0629b4..8f9af68ca 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -11,6 +11,7 @@ import { SettingsComponent } from './components/manage/settings/settings.compone import { TagListComponent } from './components/manage/tag-list/tag-list.component'; import { NotFoundComponent } from './components/not-found/not-found.component'; import { SearchComponent } from './components/search/search.component'; +import {DocumentASNComponentComponent} from "./components/document-asncomponent/document-asncomponent.component"; const routes: Routes = [ {path: '', redirectTo: 'dashboard', pathMatch: 'full'}, @@ -20,13 +21,14 @@ const routes: Routes = [ {path: 'view/:id', component: DocumentListComponent }, {path: 'search', component: SearchComponent }, {path: 'documents/:id', component: DocumentDetailComponent }, - + {path: 'asn/:id', component: DocumentASNComponentComponent }, + {path: 'tags', component: TagListComponent }, {path: 'documenttypes', component: DocumentTypeListComponent }, {path: 'correspondents', component: CorrespondentListComponent }, {path: 'logs', component: LogsComponent }, {path: 'settings', component: SettingsComponent }, - ]}, + ]}, {path: '404', component: NotFoundComponent}, {path: '**', redirectTo: '/404', pathMatch: 'full'} diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index ca87d1a07..4645caf4b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -75,6 +75,7 @@ import localeEnGb from '@angular/common/locales/en-GB'; import localeRo from '@angular/common/locales/ro'; import localeRu from '@angular/common/locales/ru'; import localeEs from '@angular/common/locales/es'; +import { DocumentASNComponentComponent } from './components/document-asncomponent/document-asncomponent.component'; registerLocaleData(localeFr) @@ -138,7 +139,8 @@ registerLocaleData(localeEs) SafePipe, CustomDatePipe, DateComponent, - ColorComponent + ColorComponent, + DocumentASNComponentComponent ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.html b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.html new file mode 100644 index 000000000..aa0cdc641 --- /dev/null +++ b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.html @@ -0,0 +1 @@ +<p>Searching document with asn {{asn}}</p> diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.scss b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts new file mode 100644 index 000000000..9e1b6c059 --- /dev/null +++ b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocumentASNComponentComponent } from './document-asncomponent.component'; + +describe('DocumentASNComponentComponent', () => { + let component: DocumentASNComponentComponent; + let fixture: ComponentFixture<DocumentASNComponentComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocumentASNComponentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocumentASNComponentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts new file mode 100644 index 000000000..549cb8792 --- /dev/null +++ b/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts @@ -0,0 +1,38 @@ +import { Component, OnInit } from '@angular/core'; +import {DocumentService} from "../../services/rest/document.service"; +import {ActivatedRoute, Router} from "@angular/router"; +import {CorrespondentService} from "../../services/rest/correspondent.service"; +import {DocumentTypeService} from "../../services/rest/document-type.service"; +import {FILTER_ASN} from "../../data/filter-rule-type"; + +@Component({ + selector: 'app-document-asncomponent', + templateUrl: './document-asncomponent.component.html', + styleUrls: ['./document-asncomponent.component.scss'] +}) +export class DocumentASNComponentComponent implements OnInit { + + asn: string; + constructor( + private documentsService: DocumentService, + private route: ActivatedRoute, + private correspondentService: CorrespondentService, + private documentTypeService: DocumentTypeService, + private router: Router) { } + + + ngOnInit(): void { + + this.route.paramMap.subscribe(paramMap => { + this.asn = paramMap.get('id'); + this.documentsService.listAllFilteredIds([{rule_type: FILTER_ASN, value: this.asn}]).subscribe(documentId => { + if (documentId.length == 1) { + this.router.navigate(['documents', documentId[0]]) + } else { + this.router.navigate(['404']) + } + }) + }) + + } +} From 58b44f2122fac5ed1e74c2178cc7cf336440ddcc Mon Sep 17 00:00:00 2001 From: Tobi <Webmaster@bart19.de> Date: Tue, 30 Mar 2021 19:26:20 +0200 Subject: [PATCH 671/898] renames document-asn component --- src-ui/src/app/app-routing.module.ts | 4 ++-- src-ui/src/app/app.module.ts | 4 ++-- .../document-asn.component.html} | 0 .../document-asn.component.scss} | 0 .../document-asn.component.spec.ts} | 10 +++++----- .../document-asn.component.ts} | 6 +++--- 6 files changed, 12 insertions(+), 12 deletions(-) rename src-ui/src/app/components/{document-asncomponent/document-asncomponent.component.html => document-asn/document-asn.component.html} (100%) rename src-ui/src/app/components/{document-asncomponent/document-asncomponent.component.scss => document-asn/document-asn.component.scss} (100%) rename src-ui/src/app/components/{document-asncomponent/document-asncomponent.component.spec.ts => document-asn/document-asn.component.spec.ts} (56%) rename src-ui/src/app/components/{document-asncomponent/document-asncomponent.component.ts => document-asn/document-asn.component.ts} (86%) diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index 8f9af68ca..7658fc77d 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -11,7 +11,7 @@ import { SettingsComponent } from './components/manage/settings/settings.compone import { TagListComponent } from './components/manage/tag-list/tag-list.component'; import { NotFoundComponent } from './components/not-found/not-found.component'; import { SearchComponent } from './components/search/search.component'; -import {DocumentASNComponentComponent} from "./components/document-asncomponent/document-asncomponent.component"; +import {DocumentAsnComponent} from "./components/document-asn/document-asn.component"; const routes: Routes = [ {path: '', redirectTo: 'dashboard', pathMatch: 'full'}, @@ -21,7 +21,7 @@ const routes: Routes = [ {path: 'view/:id', component: DocumentListComponent }, {path: 'search', component: SearchComponent }, {path: 'documents/:id', component: DocumentDetailComponent }, - {path: 'asn/:id', component: DocumentASNComponentComponent }, + {path: 'asn/:id', component: DocumentAsnComponent }, {path: 'tags', component: TagListComponent }, {path: 'documenttypes', component: DocumentTypeListComponent }, diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 4645caf4b..346228b2d 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -75,7 +75,7 @@ import localeEnGb from '@angular/common/locales/en-GB'; import localeRo from '@angular/common/locales/ro'; import localeRu from '@angular/common/locales/ru'; import localeEs from '@angular/common/locales/es'; -import { DocumentASNComponentComponent } from './components/document-asncomponent/document-asncomponent.component'; +import { DocumentAsnComponent } from './components/document-asn/document-asn.component'; registerLocaleData(localeFr) @@ -140,7 +140,7 @@ registerLocaleData(localeEs) CustomDatePipe, DateComponent, ColorComponent, - DocumentASNComponentComponent + DocumentAsnComponent ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.html b/src-ui/src/app/components/document-asn/document-asn.component.html similarity index 100% rename from src-ui/src/app/components/document-asncomponent/document-asncomponent.component.html rename to src-ui/src/app/components/document-asn/document-asn.component.html diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.scss b/src-ui/src/app/components/document-asn/document-asn.component.scss similarity index 100% rename from src-ui/src/app/components/document-asncomponent/document-asncomponent.component.scss rename to src-ui/src/app/components/document-asn/document-asn.component.scss diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts b/src-ui/src/app/components/document-asn/document-asn.component.spec.ts similarity index 56% rename from src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts rename to src-ui/src/app/components/document-asn/document-asn.component.spec.ts index 9e1b6c059..5a9826f8d 100644 --- a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.spec.ts +++ b/src-ui/src/app/components/document-asn/document-asn.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { DocumentASNComponentComponent } from './document-asncomponent.component'; +import { DocumentAsnComponent } from './document-asn.component'; describe('DocumentASNComponentComponent', () => { - let component: DocumentASNComponentComponent; - let fixture: ComponentFixture<DocumentASNComponentComponent>; + let component: DocumentAsnComponent; + let fixture: ComponentFixture<DocumentAsnComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ DocumentASNComponentComponent ] + declarations: [ DocumentAsnComponent ] }) .compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(DocumentASNComponentComponent); + fixture = TestBed.createComponent(DocumentAsnComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts b/src-ui/src/app/components/document-asn/document-asn.component.ts similarity index 86% rename from src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts rename to src-ui/src/app/components/document-asn/document-asn.component.ts index 549cb8792..4c80cedd7 100644 --- a/src-ui/src/app/components/document-asncomponent/document-asncomponent.component.ts +++ b/src-ui/src/app/components/document-asn/document-asn.component.ts @@ -7,10 +7,10 @@ import {FILTER_ASN} from "../../data/filter-rule-type"; @Component({ selector: 'app-document-asncomponent', - templateUrl: './document-asncomponent.component.html', - styleUrls: ['./document-asncomponent.component.scss'] + templateUrl: './document-asn.component.html', + styleUrls: ['./document-asn.component.scss'] }) -export class DocumentASNComponentComponent implements OnInit { +export class DocumentAsnComponent implements OnInit { asn: string; constructor( From 74ddcfef289545091822d9979f039f80a11e207e Mon Sep 17 00:00:00 2001 From: Tobi <Webmaster@bart19.de> Date: Tue, 30 Mar 2021 20:51:49 +0200 Subject: [PATCH 672/898] refactoring --- src-ui/messages.xlf | 161 +++++++++--------- .../document-asn/document-asn.component.html | 2 +- .../document-asn/document-asn.component.ts | 6 +- 3 files changed, 86 insertions(+), 83 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 959d90a1b..4ffab896d 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -2,48 +2,6 @@ <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en-US" datatype="plaintext" original="ng2.template"> <body> - <trans-unit id="9103526311244275943" datatype="html"> - <source>Document added</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">51</context> - </context-group> - </trans-unit> - <trans-unit id="9204248378636247318" datatype="html"> - <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">51</context> - </context-group> - </trans-unit> - <trans-unit id="1931214133925051574" datatype="html"> - <source>Open document</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">51</context> - </context-group> - </trans-unit> - <trans-unit id="8582620835547864448" datatype="html"> - <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">59</context> - </context-group> - </trans-unit> - <trans-unit id="1710712016675379662" datatype="html"> - <source>New document detected</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">65</context> - </context-group> - </trans-unit> - <trans-unit id="587031278561344416" datatype="html"> - <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">65</context> - </context-group> - </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> <context-group purpose="location"> @@ -394,6 +352,48 @@ <context context-type="linenumber">131</context> </context-group> </trans-unit> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> @@ -1626,6 +1626,13 @@ <context context-type="linenumber">14</context> </context-group> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> @@ -1731,6 +1738,41 @@ <context context-type="linenumber">106</context> </context-group> </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> <context-group purpose="location"> @@ -1840,41 +1882,6 @@ <context context-type="linenumber">39</context> </context-group> </trans-unit> - <trans-unit id="2691296884221415710" datatype="html"> - <source>Correspondent</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> - <trans-unit id="5066119607229701477" datatype="html"> - <source>Document type</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">20</context> - </context-group> - </trans-unit> - <trans-unit id="4207916966377787111" datatype="html"> - <source>Created</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">21</context> - </context-group> - </trans-unit> - <trans-unit id="231679111972850796" datatype="html"> - <source>Added</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">22</context> - </context-group> - </trans-unit> - <trans-unit id="3553216189604488439" datatype="html"> - <source>Modified</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">23</context> - </context-group> - </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> <context-group purpose="location"> diff --git a/src-ui/src/app/components/document-asn/document-asn.component.html b/src-ui/src/app/components/document-asn/document-asn.component.html index aa0cdc641..8cb969ea0 100644 --- a/src-ui/src/app/components/document-asn/document-asn.component.html +++ b/src-ui/src/app/components/document-asn/document-asn.component.html @@ -1 +1 @@ -<p>Searching document with asn {{asn}}</p> +<p i18n>Searching document with asn {{asn}}</p> diff --git a/src-ui/src/app/components/document-asn/document-asn.component.ts b/src-ui/src/app/components/document-asn/document-asn.component.ts index 4c80cedd7..550c331b9 100644 --- a/src-ui/src/app/components/document-asn/document-asn.component.ts +++ b/src-ui/src/app/components/document-asn/document-asn.component.ts @@ -1,8 +1,6 @@ import { Component, OnInit } from '@angular/core'; import {DocumentService} from "../../services/rest/document.service"; import {ActivatedRoute, Router} from "@angular/router"; -import {CorrespondentService} from "../../services/rest/correspondent.service"; -import {DocumentTypeService} from "../../services/rest/document-type.service"; import {FILTER_ASN} from "../../data/filter-rule-type"; @Component({ @@ -12,12 +10,10 @@ import {FILTER_ASN} from "../../data/filter-rule-type"; }) export class DocumentAsnComponent implements OnInit { - asn: string; + asn: string constructor( private documentsService: DocumentService, private route: ActivatedRoute, - private correspondentService: CorrespondentService, - private documentTypeService: DocumentTypeService, private router: Router) { } From 22585c865eac385b27fe0954f609468a056af3c0 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 2 Apr 2021 10:47:11 +0200 Subject: [PATCH 673/898] New Crowdin updates (#847) --- src/locale/it_IT/LC_MESSAGES/django.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index a36ee9d9b..9c7cd71ef 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-23 11:21\n" +"PO-Revision-Date: 2021-04-01 11:51\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -374,11 +374,11 @@ msgstr "Paperless-ng è uscito" #: documents/templates/registration/logged_out.html:41 msgid "You have been successfully logged out. Bye!" -msgstr "Vi siete disconnessi. Ciao!" +msgstr "Ti sei disconnesso. A presto!" #: documents/templates/registration/logged_out.html:42 msgid "Sign in again" -msgstr "Rientra nuovamente" +msgstr "Accedi nuovamente" #: documents/templates/registration/login.html:13 msgid "Paperless-ng sign in" From 6c720a2efd4f2a37df2acbc67dd0ecb8d3c2d48b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 2 Apr 2021 14:21:05 +0200 Subject: [PATCH 674/898] update dependencies --- Pipfile.lock | 363 +++++++++++++++++++++++++-------------------------- 1 file changed, 179 insertions(+), 184 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 7b036e19a..bad0dbe79 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -190,22 +190,22 @@ }, "cryptography": { "hashes": [ - "sha256:066bc53f052dfeda2f2d7c195cf16fb3e5ff13e1b6b7415b468514b40b381a5b", - "sha256:0923ba600d00718d63a3976f23cab19aef10c1765038945628cd9be047ad0336", - "sha256:2d32223e5b0ee02943f32b19245b61a62db83a882f0e76cc564e1cec60d48f87", - "sha256:4169a27b818de4a1860720108b55a2801f32b6ae79e7f99c00d79f2a2822eeb7", - "sha256:57ad77d32917bc55299b16d3b996ffa42a1c73c6cfa829b14043c561288d2799", - "sha256:5ecf2bcb34d17415e89b546dbb44e73080f747e504273e4d4987630493cded1b", - "sha256:600cf9bfe75e96d965509a4c0b2b183f74a4fa6f5331dcb40fb7b77b7c2484df", - "sha256:66b57a9ca4b3221d51b237094b0303843b914b7d5afd4349970bb26518e350b0", - "sha256:926ae3dfd160050158b9ca25d419fb7ee658974564b01aa10c059a75dffab7e8", - "sha256:93cfe5b7ff006de13e1e89830810ecbd014791b042cbe5eec253be11ac2b28f3", - "sha256:9e98b452132963678e3ac6c73f7010fe53adf72209a32854d55690acac3f6724", - "sha256:df186fcbf86dc1ce56305becb8434e4b6b7504bc724b71ad7a3239e0c9d14ef2", - "sha256:fec7fb46b10da10d9e1d078d1ff8ed9e05ae14f431fdbd11145edd0550b9a964" + "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d", + "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959", + "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6", + "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873", + "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2", + "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713", + "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1", + "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177", + "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250", + "sha256:a79fef41233d4c535d28133627ce6c7ac73d5cc0eb7316331a5905bf01411f08", + "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca", + "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d", + "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" ], "index": "pypi", - "version": "==3.4.6" + "version": "==3.4.7" }, "daphne": { "hashes": [ @@ -273,11 +273,11 @@ }, "djangorestframework": { "hashes": [ - "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7", - "sha256:0898182b4737a7b584a2c73735d89816343369f259fea932d90dc78e35d8ac33" + "sha256:6d1d59f623a5ad0509fe0d6bfe93cbdfe17b8116ebc8eda86d45f6e16e819aaf", + "sha256:f747949a8ddac876e879190df194b925c177cdeb725a099db1460872f7c0a7f2" ], "index": "pypi", - "version": "==3.12.2" + "version": "==3.12.4" }, "filelock": { "hashes": [ @@ -300,11 +300,11 @@ }, "gunicorn": { "hashes": [ - "sha256:1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626", - "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c" + "sha256:8d737657cdd62f483d482ee65cf9cc6a64d5b2199674f8b174803be9065e5d60", + "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" ], "index": "pypi", - "version": "==20.0.4" + "version": "==20.1.0" }, "h11": { "hashes": [ @@ -316,57 +316,51 @@ }, "hiredis": { "hashes": [ - "sha256:06a039208f83744a702279b894c8cf24c14fd63c59cd917dcde168b79eef0680", - "sha256:0a909bf501459062aa1552be1461456518f367379fdc9fdb1f2ca5e4a1fdd7c0", - "sha256:18402d9e54fb278cb9a8c638df6f1550aca36a009d47ecf5aa263a38600f35b0", - "sha256:1e4cbbc3858ec7e680006e5ca590d89a5e083235988f26a004acf7244389ac01", - "sha256:23344e3c2177baf6975fbfa361ed92eb7d36d08f454636e5054b3faa7c2aff8a", - "sha256:289b31885b4996ce04cadfd5fc03d034dce8e2a8234479f7c9e23b9e245db06b", - "sha256:2c1c570ae7bf1bab304f29427e2475fe1856814312c4a1cf1cd0ee133f07a3c6", - "sha256:2c227c0ed371771ffda256034427320870e8ea2e4fd0c0a618c766e7c49aad73", - "sha256:3bb9b63d319402cead8bbd9dd55dca3b667d2997e9a0d8a1f9b6cc274db4baee", - "sha256:3ef2183de67b59930d2db8b8e8d4d58e00a50fcc5e92f4f678f6eed7a1c72d55", - "sha256:43b8ed3dbfd9171e44c554cb4acf4ee4505caa84c5e341858b50ea27dd2b6e12", - "sha256:47bcf3c5e6c1e87ceb86cdda2ee983fa0fe56a999e6185099b3c93a223f2fa9b", - "sha256:5263db1e2e1e8ae30500cdd75a979ff99dcc184201e6b4b820d0de74834d2323", - "sha256:5b1451727f02e7acbdf6aae4e06d75f66ee82966ff9114550381c3271a90f56c", - "sha256:6996883a8a6ff9117cbb3d6f5b0dcbbae6fb9e31e1a3e4e2f95e0214d9a1c655", - "sha256:6c96f64a54f030366657a54bb90b3093afc9c16c8e0dfa29fc0d6dbe169103a5", - "sha256:7332d5c3e35154cd234fd79573736ddcf7a0ade7a986db35b6196b9171493e75", - "sha256:7885b6f32c4a898e825bb7f56f36a02781ac4a951c63e4169f0afcf9c8c30dfb", - "sha256:7b0f63f10a166583ab744a58baad04e0f52cfea1ac27bfa1b0c21a48d1003c23", - "sha256:819f95d4eba3f9e484dd115ab7ab72845cf766b84286a00d4ecf76d33f1edca1", - "sha256:8968eeaa4d37a38f8ca1f9dbe53526b69628edc9c42229a5b2f56d98bb828c1f", - "sha256:89ebf69cb19a33d625db72d2ac589d26e936b8f7628531269accf4a3196e7872", - "sha256:8daecd778c1da45b8bd54fd41ffcd471a86beed3d8e57a43acf7a8d63bba4058", - "sha256:955ba8ea73cf3ed8bd2f963b4cb9f8f0dcb27becd2f4b3dd536fd24c45533454", - "sha256:964f18a59f5a64c0170f684c417f4fe3e695a536612e13074c4dd5d1c6d7c882", - "sha256:969843fbdfbf56cdb71da6f0bdf50f9985b8b8aeb630102945306cf10a9c6af2", - "sha256:996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132", - "sha256:9e9c9078a7ce07e6fce366bd818be89365a35d2e4b163268f0ca9ba7e13bb2f6", - "sha256:9f4e67f87e072de981570eaf7cb41444bbac7e92b05c8651dbab6eb1fb8d5a14", - "sha256:a04901757cb0fb0f5602ac11dda48f5510f94372144d06c2563ba56c480b467c", - "sha256:a7bf1492429f18d205f3a818da3ff1f242f60aa59006e53dee00b4ef592a3363", - "sha256:aa0af2deb166a5e26e0d554b824605e660039b161e37ed4f01b8d04beec184f3", - "sha256:abfb15a6a7822f0fae681785cb38860e7a2cb1616a708d53df557b3d76c5bfd4", - "sha256:b253fe4df2afea4dfa6b1fa8c5fef212aff8bcaaeb4207e81eed05cb5e4a7919", - "sha256:b27f082f47d23cffc4cf1388b84fdc45c4ef6015f906cd7e0d988d9e35d36349", - "sha256:b33aea449e7f46738811fbc6f0b3177c6777a572207412bbbf6f525ffed001ae", - "sha256:b39989b49e8aca9d224324d2650029eda410a4faf43f6afb0eb4f9acb7be6097", - "sha256:b44f9421c4505c548435244d74037618f452844c5d3c67719d8a55e2613549da", - "sha256:bcc371151d1512201d0214c36c0c150b1dc64f19c2b1a8c9cb1d7c7c15ebd93f", - "sha256:c2851deeabd96d3f6283e9c6b26e0bfed4de2dc6fb15edf913e78b79fc5909ed", - "sha256:cdfd501c7ac5b198c15df800a3a34c38345f5182e5f80770caf362bccca65628", - "sha256:d2c0caffa47606d6d7c8af94ba42547bd2a441f06c74fd90a1ffe328524a6c64", - "sha256:dcb2db95e629962db5a355047fb8aefb012df6c8ae608930d391619dbd96fd86", - "sha256:e0eeb9c112fec2031927a1745788a181d0eecbacbed941fc5c4f7bc3f7b273bf", - "sha256:e154891263306200260d7f3051982774d7b9ef35af3509d5adbbe539afd2610c", - "sha256:e2e023a42dcbab8ed31f97c2bcdb980b7fbe0ada34037d87ba9d799664b58ded", - "sha256:e64be68255234bb489a574c4f2f8df7029c98c81ec4d160d6cd836e7f0679390", - "sha256:e82d6b930e02e80e5109b678c663a9ed210680ded81c1abaf54635d88d1da298" + "sha256:04026461eae67fdefa1949b7332e488224eac9e8f2b5c58c98b54d29af22093e", + "sha256:04927a4c651a0e9ec11c68e4427d917e44ff101f761cd3b5bc76f86aaa431d27", + "sha256:07bbf9bdcb82239f319b1f09e8ef4bdfaec50ed7d7ea51a56438f39193271163", + "sha256:09004096e953d7ebd508cded79f6b21e05dff5d7361771f59269425108e703bc", + "sha256:0adea425b764a08270820531ec2218d0508f8ae15a448568109ffcae050fee26", + "sha256:0b39ec237459922c6544d071cdcf92cbb5bc6685a30e7c6d985d8a3e3a75326e", + "sha256:0d5109337e1db373a892fdcf78eb145ffb6bbd66bb51989ec36117b9f7f9b579", + "sha256:0f41827028901814c709e744060843c77e78a3aca1e0d6875d2562372fcb405a", + "sha256:11d119507bb54e81f375e638225a2c057dda748f2b1deef05c2b1a5d42686048", + "sha256:1233e303645f468e399ec906b6b48ab7cd8391aae2d08daadbb5cad6ace4bd87", + "sha256:139705ce59d94eef2ceae9fd2ad58710b02aee91e7fa0ccb485665ca0ecbec63", + "sha256:1f03d4dadd595f7a69a75709bc81902673fa31964c75f93af74feac2f134cc54", + "sha256:240ce6dc19835971f38caf94b5738092cb1e641f8150a9ef9251b7825506cb05", + "sha256:294a6697dfa41a8cba4c365dd3715abc54d29a86a40ec6405d677ca853307cfb", + "sha256:3d55e36715ff06cdc0ab62f9591607c4324297b6b6ce5b58cb9928b3defe30ea", + "sha256:3dddf681284fe16d047d3ad37415b2e9ccdc6c8986c8062dbe51ab9a358b50a5", + "sha256:3f5f7e3a4ab824e3de1e1700f05ad76ee465f5f11f5db61c4b297ec29e692b2e", + "sha256:508999bec4422e646b05c95c598b64bdbef1edf0d2b715450a078ba21b385bcc", + "sha256:5d2a48c80cf5a338d58aae3c16872f4d452345e18350143b3bf7216d33ba7b99", + "sha256:5dc7a94bb11096bc4bffd41a3c4f2b958257085c01522aa81140c68b8bf1630a", + "sha256:65d653df249a2f95673976e4e9dd7ce10de61cfc6e64fa7eeaa6891a9559c581", + "sha256:7492af15f71f75ee93d2a618ca53fea8be85e7b625e323315169977fae752426", + "sha256:7f0055f1809b911ab347a25d786deff5e10e9cf083c3c3fd2dd04e8612e8d9db", + "sha256:807b3096205c7cec861c8803a6738e33ed86c9aae76cac0e19454245a6bbbc0a", + "sha256:81d6d8e39695f2c37954d1011c0480ef7cf444d4e3ae24bc5e89ee5de360139a", + "sha256:87c7c10d186f1743a8fd6a971ab6525d60abd5d5d200f31e073cd5e94d7e7a9d", + "sha256:8b42c0dc927b8d7c0eb59f97e6e34408e53bc489f9f90e66e568f329bff3e443", + "sha256:a00514362df15af041cc06e97aebabf2895e0a7c42c83c21894be12b84402d79", + "sha256:a39efc3ade8c1fb27c097fd112baf09d7fd70b8cb10ef1de4da6efbe066d381d", + "sha256:a4ee8000454ad4486fb9f28b0cab7fa1cd796fc36d639882d0b34109b5b3aec9", + "sha256:a7928283143a401e72a4fad43ecc85b35c27ae699cf5d54d39e1e72d97460e1d", + "sha256:adf4dd19d8875ac147bf926c727215a0faf21490b22c053db464e0bf0deb0485", + "sha256:ae8427a5e9062ba66fc2c62fb19a72276cf12c780e8db2b0956ea909c48acff5", + "sha256:b4c8b0bc5841e578d5fb32a16e0c305359b987b850a06964bd5a62739d688048", + "sha256:b84f29971f0ad4adaee391c6364e6f780d5aae7e9226d41964b26b49376071d0", + "sha256:c39c46d9e44447181cd502a35aad2bb178dbf1b1f86cf4db639d7b9614f837c6", + "sha256:cb2126603091902767d96bcb74093bd8b14982f41809f85c9b96e519c7e1dc41", + "sha256:dcef843f8de4e2ff5e35e96ec2a4abbdf403bd0f732ead127bd27e51f38ac298", + "sha256:de22905c5920f6a2af2fccc54a7897cf52f1d0a4b9de87f546c6fb70d13e4e0b", + "sha256:e3447d9e074abf0e3cd85aef8131e01ab93f9f0e86654db7ac8a3f73c63706ce", + "sha256:f52010e0a44e3d8530437e7da38d11fb822acfb0d5b12e9cd5ba655509937ca0", + "sha256:f8196f739092a78e4f6b1b2172679ed3343c39c61a3e9d722ce6fcf1dac2824a" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.1.0" + "markers": "python_version >= '3.6'", + "version": "==2.0.0" }, "httptools": { "hashes": [ @@ -468,48 +462,47 @@ }, "lxml": { "hashes": [ - "sha256:0448576c148c129594d890265b1a83b9cd76fd1f0a6a04620753d9a6bcfd0a4d", - "sha256:127f76864468d6630e1b453d3ffbbd04b024c674f55cf0a30dc2595137892d37", - "sha256:1471cee35eba321827d7d53d104e7b8c593ea3ad376aa2df89533ce8e1b24a01", - "sha256:2363c35637d2d9d6f26f60a208819e7eafc4305ce39dc1d5005eccc4593331c2", - "sha256:2e5cc908fe43fe1aa299e58046ad66981131a66aea3129aac7770c37f590a644", - "sha256:2e6fd1b8acd005bd71e6c94f30c055594bbd0aa02ef51a22bbfa961ab63b2d75", - "sha256:366cb750140f221523fa062d641393092813b81e15d0e25d9f7c6025f910ee80", - "sha256:42ebca24ba2a21065fb546f3e6bd0c58c3fe9ac298f3a320147029a4850f51a2", - "sha256:4e751e77006da34643ab782e4a5cc21ea7b755551db202bc4d3a423b307db780", - "sha256:4fb85c447e288df535b17ebdebf0ec1cf3a3f1a8eba7e79169f4f37af43c6b98", - "sha256:50c348995b47b5a4e330362cf39fc503b4a43b14a91c34c83b955e1805c8e308", - "sha256:535332fe9d00c3cd455bd3dd7d4bacab86e2d564bdf7606079160fa6251caacf", - "sha256:535f067002b0fd1a4e5296a8f1bf88193080ff992a195e66964ef2a6cfec5388", - "sha256:5be4a2e212bb6aa045e37f7d48e3e1e4b6fd259882ed5a00786f82e8c37ce77d", - "sha256:60a20bfc3bd234d54d49c388950195d23a5583d4108e1a1d47c9eef8d8c042b3", - "sha256:648914abafe67f11be7d93c1a546068f8eff3c5fa938e1f94509e4a5d682b2d8", - "sha256:681d75e1a38a69f1e64ab82fe4b1ed3fd758717bed735fb9aeaa124143f051af", - "sha256:68a5d77e440df94011214b7db907ec8f19e439507a70c958f750c18d88f995d2", - "sha256:69a63f83e88138ab7642d8f61418cf3180a4d8cd13995df87725cb8b893e950e", - "sha256:6e4183800f16f3679076dfa8abf2db3083919d7e30764a069fb66b2b9eff9939", - "sha256:6fd8d5903c2e53f49e99359b063df27fdf7acb89a52b6a12494208bf61345a03", - "sha256:791394449e98243839fa822a637177dd42a95f4883ad3dec2a0ce6ac99fb0a9d", - "sha256:7a7669ff50f41225ca5d6ee0a1ec8413f3a0d8aa2b109f86d540887b7ec0d72a", - "sha256:7e9eac1e526386df7c70ef253b792a0a12dd86d833b1d329e038c7a235dfceb5", - "sha256:7ee8af0b9f7de635c61cdd5b8534b76c52cd03536f29f51151b377f76e214a1a", - "sha256:8246f30ca34dc712ab07e51dc34fea883c00b7ccb0e614651e49da2c49a30711", - "sha256:8c88b599e226994ad4db29d93bc149aa1aff3dc3a4355dd5757569ba78632bdf", - "sha256:91d6dace31b07ab47eeadd3f4384ded2f77b94b30446410cb2c3e660e047f7a7", - "sha256:923963e989ffbceaa210ac37afc9b906acebe945d2723e9679b643513837b089", - "sha256:94d55bd03d8671686e3f012577d9caa5421a07286dd351dfef64791cf7c6c505", - "sha256:97db258793d193c7b62d4e2586c6ed98d51086e93f9a3af2b2034af01450a74b", - "sha256:a9d6bc8642e2c67db33f1247a77c53476f3a166e09067c0474facb045756087f", - "sha256:cd11c7e8d21af997ee8079037fff88f16fda188a9776eb4b81c7e4c9c0a7d7fc", - "sha256:d8d3d4713f0c28bdc6c806a278d998546e8efc3498949e3ace6e117462ac0a5e", - "sha256:e0bfe9bb028974a481410432dbe1b182e8191d5d40382e5b8ff39cdd2e5c5931", - "sha256:e1dbb88a937126ab14d219a000728224702e0ec0fc7ceb7131c53606b7a76772", - "sha256:f4822c0660c3754f1a41a655e37cb4dbbc9be3d35b125a37fab6f82d47674ebc", - "sha256:f83d281bb2a6217cd806f4cf0ddded436790e66f393e124dfe9731f6b3fb9afe", - "sha256:fc37870d6716b137e80d19241d0e2cff7a7643b925dfa49b4c8ebd1295eb506e" + "sha256:079f3ae844f38982d156efce585bc540c16a926d4436712cf4baee0cce487a3d", + "sha256:0fbcf5565ac01dff87cbfc0ff323515c823081c5777a9fc7703ff58388c258c3", + "sha256:122fba10466c7bd4178b07dba427aa516286b846b2cbd6f6169141917283aae2", + "sha256:1822d16e5ac9061749955d099ff50c6cbc068f8cbfde28dfbeea845f7fbe6e09", + "sha256:1b7584d421d254ab86d4f0b13ec662a9014397678a7c4265a02a6d7c2b18a75f", + "sha256:26e761ab5b07adf5f555ee82fb4bfc35bf93750499c6c7614bd64d12aaa67927", + "sha256:289e9ca1a9287f08daaf796d96e06cb2bc2958891d7911ac7cae1c5f9e1e0ee3", + "sha256:2a9d50e69aac3ebee695424f7dbd7b8c6d6eb7de2a2eb6b0f6c7db6aa41e02b7", + "sha256:33bb934a044cf32157c12bfcfbb6649807da20aa92c062ef51903415c704704f", + "sha256:3439c71103ef0e904ea0a1901611863e51f50b5cd5e8654a151740fde5e1cade", + "sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468", + "sha256:4289728b5e2000a4ad4ab8da6e1db2e093c63c08bdc0414799ee776a3f78da4b", + "sha256:4bff24dfeea62f2e56f5bab929b4428ae6caba2d1eea0c2d6eb618e30a71e6d4", + "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83", + "sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04", + "sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791", + "sha256:74f69060f98a70e3654de3021cd8162859e0f30b9e69aed76ef2b7a2e3b84212", + "sha256:74f7d8d439b18fa4c385f3f5dfd11144bb87c1da034a466c5b5577d23a1d9b51", + "sha256:7610b8c31688f0b1be0ef882889817939490a36d0ee880ea562a4e1399c447a1", + "sha256:76fa7b1362d19f8fbd3e75fe2fb7c79359b0af8747e6f7141c338f0bee2f871a", + "sha256:7728e05c35412ba36d3e9795ae8995e3c86958179c9770e65558ec3fdfd3724f", + "sha256:8157dadbb09a34a6bd95a50690595e1fa0af1a99445e2744110e3dca7831c4ee", + "sha256:820628b7b3135403540202e60551e741f9b6d3304371712521be939470b454ec", + "sha256:884ab9b29feaca361f7f88d811b1eea9bfca36cf3da27768d28ad45c3ee6f969", + "sha256:89b8b22a5ff72d89d48d0e62abb14340d9e99fd637d046c27b8b257a01ffbe28", + "sha256:92e821e43ad382332eade6812e298dc9701c75fe289f2a2d39c7960b43d1e92a", + "sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa", + "sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106", + "sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d", + "sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4", + "sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0", + "sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4", + "sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2", + "sha256:efac139c3f0bf4f0939f9375af4b02c5ad83a622de52d6dfa8e438e8e01d0eb0", + "sha256:efd7a09678fd8b53117f6bae4fa3825e0a22b03ef0a932e070c0bdbb3a35e654", + "sha256:f2380a6376dfa090227b663f9678150ef27543483055cc327555fb592c5967e2", + "sha256:f8380c03e45cf09f8557bdaa41e1fa7c81f3ae22828e1db470ab2a6c96d8bc23", + "sha256:f90ba11136bfdd25cae3951af8da2e95121c9b9b93727b1b896e3fa105b2f586" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==4.6.2" + "version": "==4.6.3" }, "msgpack": { "hashes": [ @@ -589,19 +582,19 @@ }, "ocrmypdf": { "hashes": [ - "sha256:2eda9aeef0c6326af8af9605a8b5903ed6ae4a4537d4046d16ad8bb7ff021ec2", - "sha256:4befdf50b6ed3fe3bb9d0ab1801b213e56138e21ba5b4b3f3cada51c72b7a314" + "sha256:329b070959731c277f0df91cfe011dd4da0d6534f23a739a3aa77bdab00fbc2f", + "sha256:b63df1b6bf37f29b41cb07f0328240a235d84c3dffc3a32299c71fa94c92d419" ], "index": "pypi", - "version": "==11.7.2" + "version": "==11.7.3" }, "pathvalidate": { "hashes": [ - "sha256:378c8b319838a255c00ab37f664686b75f0aabea4444d6c5a34effbec6738285", - "sha256:cae8ad5cd9223c5c1f4bc4e2ef0cd4c5e89acd2d698fdb7610ee108b9be654d2" + "sha256:5263a75d6335b2e9ac2010f38fbd85225b8dff274ded63e5ac21d94ce6b130c8", + "sha256:d0dab13e121628829f5aeb01220ca7af00c3b3b2fe5d83dc81fa0612ad58ade9" ], "index": "pypi", - "version": "==2.3.2" + "version": "==2.4.0" }, "pdfminer.six": { "hashes": [ @@ -613,72 +606,72 @@ }, "pikepdf": { "hashes": [ - "sha256:00372f75f630b1eedd22022cad622c7313b7a42c76b6aa9a91cabaa93915cbf0", - "sha256:0168b05e020f8ac3f027c61841bb222bb0876fdc21e1b0e44cfca8c7f188b17a", - "sha256:07a3b156766a45ef04b6919116468456c7d1fa05ac1a5a5999f08fd6213a7ada", - "sha256:087edf03ef41f76c84d7f65cfd325fbea6e684a134463f0d43f57c3e787c57f1", - "sha256:0f2f2dcf3ceab6572cb6f3dc893b49e5db65232a13de03ae87a66aa220e47d96", - "sha256:27ef5649d4a0d511bdffa5752b9a014441d8c09bf955479db53c41ffb94ee1ca", - "sha256:3096d128df599d48a69bbe6a32ecd3c4b8b2219dfb94c91509c781e94c20abb9", - "sha256:45a5988f7db8c428beae7dd648df30431e1d7892f3901f4c20bb618ed3e29244", - "sha256:5e9d5789ace2ac4007916848a5cc59bc4a1aa020a794cb384538ca0f0b9b9fe6", - "sha256:63b0a1b4c43deb618f3ebaed0e5861bff658916ea02ac2f6adacf8912b702628", - "sha256:68523f606575aef92a1f6d6de030d5e82f7e3e8712f53e36c9fa5c635e15794e", - "sha256:6bea9cf387709dd478a85f737f972a910bb0dbfa055ee636a41f0c425a769057", - "sha256:71fe23a61607ac85cf357baef42be55d525f5d5c9f560482862beaf59e5dc2bc", - "sha256:780082b54e502fb76af082dc6a1cbed635205a319aa54a9e0f0570bed20c9edf", - "sha256:7a816f4bb461366dad0165a1c81294d5e9a60009cbb5c803e2519eb0d250e757", - "sha256:88373178c1020b9f391f929e5f86056a9d920301f82e5489146af629fa4654d0", - "sha256:96c8bf46ac27482a9ca00565f41ddde546fff35c50db61eefaeb88849bcb9895", - "sha256:99c19cf0dd0fc89fc9e6a0de61e974e34d4111dd69802aeaee3e61fb1a74a3d8", - "sha256:bad118d9104fffc06664d51c8716a905e5d712b85ed65edc56a708486803f70f", - "sha256:bae06503ed36167b2ea5ea25003692d3edbf95bea2e67a1d595984c91d783eb4", - "sha256:cd73a1e82cfa5d378adccf9c44b0060c2d3c5e36958f0b5ecedb3f8e81742582", - "sha256:dd65214e23e2cc883af8c2341e6fe7ae71225fa644517ac25110d6ad2b31f026", - "sha256:fd1e339322c94b0c398aaa37d517c24a3db7bbda4fdc6bf57af3894293b8e1a6" + "sha256:018ee534527debd2cfcde0dd856a454a218ddb57e5ba1240810489e50be70a6e", + "sha256:19e4fdafb66b2093b42cd81230122f4789d0ef90d85d451bcb0249739295303d", + "sha256:232789113d6044816e5eeff0061e9014febfc889cf24be9fb17d172c504c1b53", + "sha256:6637f1895e5e93b2032077ded757846c9a90147fb9195bb73dd4b8a2f333e888", + "sha256:7a804515942049f846d548d3b817317f8136e06938737ff64b79c82d61908e27", + "sha256:7c90ae70684efad9477c4ada293187a4542afd685029f82b478f011d4f8cdcc0", + "sha256:7dea84178ebfb35195eedca47a38d99ca8264e1c6e8ff6f37ccb5d7b2ca903d3", + "sha256:95f36bd3920159320547c61c7aa753b9a423e43fedb350617c7eb9925bf48618", + "sha256:a5b57f1b5d5df49b0269e8039b1ba08abb42fdd6f5b6c4b49635be754a77472a", + "sha256:ae8ead8f975864aaf97b24cd916d1bf2e536eb64e7afb65ca679ed29b1ca5b89", + "sha256:b11e1bbc38eb90bfbf2eb0f2f50b300c4142732c148802d6e5f4caa5727fc81e", + "sha256:b192cb3f087509075febb28652d48800da1f3fc1842f94cea25a49fba7350a06", + "sha256:c024de7e57329353f82d287ca13e118e1438b6fd94b33475a474cd7fd16fbb8d", + "sha256:d05a5d22f1bec0979678388c453644f83f74348ab821815b9f1ccb947d4a21e4", + "sha256:d124e11eaacf5fe1bf77ca4c1b6b1a8d5285d00d3593c5cb6eba53058cdf9dae", + "sha256:dde6fde7a32c31aa515782ea967e32dbea97a19ef3fbbde45a93c5f65cabb36f", + "sha256:e03dd2131eba5c966fbb46b675006753945a251e9e9ad44ef141257db37b9c1a", + "sha256:e345206fe51b862022ece4e4e7468bbb955eacda9a9684387ff2f1c91c1def03", + "sha256:e7295619ea4b0fa714bfff24aaf865f7e6c298e82e77ce127b6a76f47377f7f3", + "sha256:f0cdb331b585074a50e9c8a967f68b905aa8674cc3d6577f004a93414f70f211", + "sha256:f3bd63e6db4a105074f6b5951a71313bc0ca8530b0050e3a03680639d05b5500", + "sha256:f6aaf410174ba10df545ccb6fe9b42fa5fd34b1bb4df366722af640275f3406a", + "sha256:ff48af76f461f40f36917baad52918f9afcb45762a7f4c07b6a7ec7e976d558d" ], "index": "pypi", - "version": "==2.9.1" + "version": "==2.10.0" }, "pillow": { "hashes": [ - "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af", - "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1", - "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c", - "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55", - "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060", - "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e", - "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8", - "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e", - "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0", - "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328", - "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238", - "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733", - "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03", - "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06", - "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71", - "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b", - "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6", - "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910", - "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce", - "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28", - "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d", - "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb", - "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6", - "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09", - "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be", - "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0", - "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44", - "sha256:bd08a7e01d388c5e0b5b46b52081e01dc96ef226aeed13fa1d7af94b81d4e93b", - "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1", - "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341", - "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34", - "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2", - "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a", - "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5" + "sha256:01425106e4e8cee195a411f729cff2a7d61813b0b11737c12bd5991f5f14bcd5", + "sha256:031a6c88c77d08aab84fecc05c3cde8414cd6f8406f4d2b16fed1e97634cc8a4", + "sha256:083781abd261bdabf090ad07bb69f8f5599943ddb539d64497ed021b2a67e5a9", + "sha256:0d19d70ee7c2ba97631bae1e7d4725cdb2ecf238178096e8c82ee481e189168a", + "sha256:0e04d61f0064b545b989126197930807c86bcbd4534d39168f4aa5fda39bb8f9", + "sha256:12e5e7471f9b637762453da74e390e56cc43e486a88289995c1f4c1dc0bfe727", + "sha256:22fd0f42ad15dfdde6c581347eaa4adb9a6fc4b865f90b23378aa7914895e120", + "sha256:238c197fc275b475e87c1453b05b467d2d02c2915fdfdd4af126145ff2e4610c", + "sha256:3b570f84a6161cf8865c4e08adf629441f56e32f180f7aa4ccbd2e0a5a02cba2", + "sha256:3da86987a323708512d4d35939b29854286ad88940ee10f2eac48bfec9dba678", + "sha256:463822e2f0d81459e113372a168f2ff59723e78528f91f0bd25680ac185cf797", + "sha256:4d98abdd6b1e3bf1a1cbb14c3895226816e666749ac040c4e2554231068c639b", + "sha256:5afe6b237a0b81bd54b53f835a153770802f164c5570bab5e005aad693dab87f", + "sha256:5b70110acb39f3aff6b74cf09bb4169b167e2660dabc304c1e25b6555fa781ef", + "sha256:5cbf3e3b1014dddc45496e8cf38b9f099c95a326275885199f427825c6522232", + "sha256:624b977355cde8b065f6d51b98497d6cd5fbdd4f36405f7a8790e3376125e2bb", + "sha256:63728564c1410d99e6d1ae8e3b810fe012bc440952168af0a2877e8ff5ab96b9", + "sha256:66cc56579fd91f517290ab02c51e3a80f581aba45fd924fcdee01fa06e635812", + "sha256:6c32cc3145928c4305d142ebec682419a6c0a8ce9e33db900027ddca1ec39178", + "sha256:8bb1e155a74e1bfbacd84555ea62fa21c58e0b4e7e6b20e4447b8d07990ac78b", + "sha256:95d5ef984eff897850f3a83883363da64aae1000e79cb3c321915468e8c6add5", + "sha256:a013cbe25d20c2e0c4e85a9daf438f85121a4d0344ddc76e33fd7e3965d9af4b", + "sha256:a787ab10d7bb5494e5f76536ac460741788f1fbce851068d73a87ca7c35fc3e1", + "sha256:a7d5e9fad90eff8f6f6106d3b98b553a88b6f976e51fce287192a5d2d5363713", + "sha256:aac00e4bc94d1b7813fe882c28990c1bc2f9d0e1aa765a5f2b516e8a6a16a9e4", + "sha256:b91c36492a4bbb1ee855b7d16fe51379e5f96b85692dc8210831fbb24c43e484", + "sha256:c03c07ed32c5324939b19e36ae5f75c660c81461e312a41aea30acdd46f93a7c", + "sha256:c5236606e8570542ed424849f7852a0ff0bce2c4c8d0ba05cc202a5a9c97dee9", + "sha256:c6b39294464b03457f9064e98c124e09008b35a62e3189d3513e5148611c9388", + "sha256:cb7a09e173903541fa888ba010c345893cd9fc1b5891aaf060f6ca77b6a3722d", + "sha256:d68cb92c408261f806b15923834203f024110a2e2872ecb0bd2a110f89d3c602", + "sha256:dc38f57d8f20f06dd7c3161c59ca2c86893632623f33a42d592f097b00f720a9", + "sha256:e98eca29a05913e82177b3ba3d198b1728e164869c613d76d0de4bde6768a50e", + "sha256:f217c3954ce5fd88303fc0c317af55d5e0204106d86dea17eb8205700d47dec2" ], "index": "pypi", - "version": "==8.1.2" + "version": "==8.2.0" }, "pluggy": { "hashes": [ @@ -690,11 +683,11 @@ }, "portalocker": { "hashes": [ - "sha256:afa66c85041d7bac1532acb74ff26cc2406472dcf7145c90c31ff8ca4f1cc146", - "sha256:e5f6ffb2f360e9aef615a7c284143d2a93bb640c62e8e45a703e6083fc5aa114" + "sha256:1d43fd8223e1743f5725e8910f69e7a45858ffd298e19252633ac903eafd83bc", + "sha256:4e913d807aa6598c320e8a50c50e2ee0602bc45240b485e3f8bc06f13060084c" ], "markers": "python_version >= '3'", - "version": "==2.2.1" + "version": "==2.3.0" }, "psycopg2-binary": { "hashes": [ @@ -801,11 +794,11 @@ }, "python-dotenv": { "hashes": [ - "sha256:0c8d1b80d1a1e91717ea7d526178e3882732420b03f08afea0406db6402e220e", - "sha256:587825ed60b1711daea4832cf37524dfd404325b7db5e25ebe88c495c9f807a0" + "sha256:31d752f5b748f4e292448c9a0cac6a08ed5e6f4cefab85044462dcad56905cec", + "sha256:9fa413c37d4652d3fa02fea0ff465c384f5db75eab259c4fc5d0c5b8bf20edd4" ], "index": "pypi", - "version": "==0.15.0" + "version": "==0.16.0" }, "python-gnupg": { "hashes": [ @@ -1245,6 +1238,7 @@ "sha256:12588a46ae0a99f172c4524cbbc3bb870f32e0f8405e9fa11a5ef3fa3a808ad7", "sha256:16caa44a06f6b0b2f7626ced4b193c1ae5d09c1b49c9b4962c93ae8aa2134f55", "sha256:18c478b89b6505756f007dcf76a67224a23dcf0f365427742ed0c0473099caa4", + "sha256:1bbb0bca8a3556a21f7b66c0a18876d8c617ddeda00982204b6218170b39526a", "sha256:221b41442cf4428fcda7fc958c9721c916709e2a3a9f584edd70f1493a09a762", "sha256:26109c50ccbcc10f651f76277cfc05fba8418a907daccc300c9247f24b3158a2", "sha256:28d8157f8c77662a1e0796a7d3cfa8910289131d4b4dd4e10b2686ab1309b67b", @@ -1284,6 +1278,7 @@ "sha256:d12895cd083e35e9e032eb4b57645b91116f8979527381a8d864d1f6b8cb4a2e", "sha256:d3cd9bad547a8e5fbe712a1dc1413aff1b917e8d39a2cd1389a6f933b7a21460", "sha256:e8809b01f27f679e3023b9e2013051e0a3f17abff4228cb5197663afd8a0f2c7", + "sha256:e8d49011baa7ce7765db46e53cfc8d125463a58e3eb478111b2c0c00ca098a33", "sha256:f3c37b0dc1898e305aad4f7a1d75f6da83036588c28a9ce0afc681ff5245a601", "sha256:f966765f54b536e791541458de84a737a6adba8467190f17a8fe7f85354ba908", "sha256:fa939c2e2468142c9773443d4038e7c915b0cc1b670d3c9192bdc503f7ea73e9", @@ -1453,11 +1448,11 @@ }, "faker": { "hashes": [ - "sha256:60a7263104ef7a14ecfe2af1142d53924aa534ccec85cea82bb67b2b32f84421", - "sha256:f43ac743c34affb1c7fccca8b06450371cd482b6ddcb4110e420acb24356e70b" + "sha256:08c4cfbfd498c0e90aff6741771c01803d894013df858db6a573182c6a47951f", + "sha256:20c6e4253b73ef2a783d38e085e7c8d8916295fff31c7403116d2af8f908f7ca" ], "markers": "python_version >= '3.6'", - "version": "==6.6.2" + "version": "==7.0.1" }, "filelock": { "hashes": [ From 7e6340e003e135e1ad0bc4ab6678f35df5fb66cc Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 2 Apr 2021 14:26:20 +0200 Subject: [PATCH 675/898] update dependencies --- requirements.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/requirements.txt b/requirements.txt index 33d44f136..853cd6f77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.19 constantly==15.1.0 -cryptography==3.4.6 +cryptography==3.4.7 daphne==3.0.1; python_version >= '3.6' dateparser==1.0.0 django-cors-headers==3.7.0 @@ -33,12 +33,12 @@ django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 django==3.1.7 -djangorestframework==3.12.2 +djangorestframework==3.12.4 filelock==3.0.12 fuzzywuzzy[speedup]==0.18.0 -gunicorn==20.0.4 +gunicorn==20.1.0 h11==0.12.0; python_version >= '3.6' -hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +hiredis==2.0.0; python_version >= '3.6' httptools==0.1.1 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 @@ -50,23 +50,23 @@ inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3 inotifyrecursive==0.3.5 joblib==1.0.1; python_version >= '3.6' langdetect==1.0.8 -lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +lxml==4.6.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.7.2 -pathvalidate==2.3.2 +ocrmypdf==11.7.3 +pathvalidate==2.4.0 pdfminer.six==20201018 -pikepdf==2.9.1 -pillow==8.1.2 +pikepdf==2.10.0 +pillow==8.2.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -portalocker==2.2.1; python_version >= '3' +portalocker==2.3.0; python_version >= '3' psycopg2-binary==2.8.6 pyasn1-modules==0.2.8 pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 -python-dotenv==0.15.0 +python-dotenv==0.16.0 python-gnupg==0.4.7 python-levenshtein==0.12.2 python-magic==0.4.22 From 07a64724295be8f08f7da1cc196d73235c1657cd Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 2 Apr 2021 14:46:45 +0200 Subject: [PATCH 676/898] Save list view state across sessions --- src-ui/src/app/services/document-list-view.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 334706a3c..4745ffcea 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -197,7 +197,7 @@ export class DocumentListViewService { sortField: this.activeListViewState.sortField, sortReverse: this.activeListViewState.sortReverse } - sessionStorage.setItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG, JSON.stringify(savedState)) + localStorage.setItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG, JSON.stringify(savedState)) } } @@ -318,7 +318,7 @@ export class DocumentListViewService { } constructor(private documentService: DocumentService, private settings: SettingsService, private router: Router) { - let documentListViewConfigJson = sessionStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) + let documentListViewConfigJson = localStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) if (documentListViewConfigJson) { try { let savedState: ListViewState = JSON.parse(documentListViewConfigJson) @@ -332,7 +332,7 @@ export class DocumentListViewService { let newState = Object.assign(this.defaultListViewState(), savedState) this.listViewStates.set(null, newState) } catch (e) { - sessionStorage.removeItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) + localStorage.removeItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) } } } From 4cfb987c2f0699902b979cf204ade5e8e3366816 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 2 Apr 2021 14:59:02 +0200 Subject: [PATCH 677/898] update tooltips and messages --- src-ui/messages.xlf | 175 ++++++++++-------- .../document-card-small.component.html | 10 +- 2 files changed, 107 insertions(+), 78 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 4ffab896d..880a32b1b 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -2,6 +2,48 @@ <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en-US" datatype="plaintext" original="ng2.template"> <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + </trans-unit> <trans-unit id="4733307402565258070" datatype="html"> <source>Documents</source> <context-group purpose="location"> @@ -352,48 +394,6 @@ <context context-type="linenumber">131</context> </context-group> </trans-unit> - <trans-unit id="9103526311244275943" datatype="html"> - <source>Document added</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">51</context> - </context-group> - </trans-unit> - <trans-unit id="9204248378636247318" datatype="html"> - <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">51</context> - </context-group> - </trans-unit> - <trans-unit id="1931214133925051574" datatype="html"> - <source>Open document</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">51</context> - </context-group> - </trans-unit> - <trans-unit id="8582620835547864448" datatype="html"> - <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">59</context> - </context-group> - </trans-unit> - <trans-unit id="1710712016675379662" datatype="html"> - <source>New document detected</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">65</context> - </context-group> - </trans-unit> - <trans-unit id="587031278561344416" datatype="html"> - <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/app.component.ts</context> - <context context-type="linenumber">65</context> - </context-group> - </trans-unit> <trans-unit id="8765497970646365998" datatype="html"> <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> <context-group purpose="location"> @@ -1236,6 +1236,27 @@ <context context-type="linenumber">66</context> </context-group> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1738,41 +1759,6 @@ <context context-type="linenumber">106</context> </context-group> </trans-unit> - <trans-unit id="2691296884221415710" datatype="html"> - <source>Correspondent</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">18</context> - </context-group> - </trans-unit> - <trans-unit id="5066119607229701477" datatype="html"> - <source>Document type</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">20</context> - </context-group> - </trans-unit> - <trans-unit id="4207916966377787111" datatype="html"> - <source>Created</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">21</context> - </context-group> - </trans-unit> - <trans-unit id="231679111972850796" datatype="html"> - <source>Added</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">22</context> - </context-group> - </trans-unit> - <trans-unit id="3553216189604488439" datatype="html"> - <source>Modified</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> - <context context-type="linenumber">23</context> - </context-group> - </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> <source>Document already exists.</source> <context-group purpose="location"> @@ -1882,6 +1868,41 @@ <context context-type="linenumber">39</context> </context-group> </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + </trans-unit> <trans-unit id="4561076822163447092" datatype="html"> <source>Create new item</source> <context-group purpose="location"> diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index 0c66419e8..abe9f5299 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -38,7 +38,15 @@ <small>{{(document.document_type$ | async)?.name}}</small> </button> <div class="list-group-item bg-transparent p-0 border-0 d-flex flex-wrap-reverse justify-content-between"> - <div class="pl-0 p-1" placement="top" ngbTooltip="Added: {{document.added | customDate:'mediumDate'}} Created: {{document.created | customDate:'mediumDate'}}"> + <ng-template #dateTooltip> + <div class="d-flex flex-column"> + <span i18n>Created: {{ document.created | customDate}}</span> + <span i18n>Added: {{ document.added | customDate}}</span> + <span i18n>Modified: {{ document.modified | customDate}}</span> + </div> + </ng-template> + + <div class="pl-0 p-1" placement="top" [ngbTooltip]="dateTooltip"> <svg class="metadata-icon mr-2 text-muted bi bi-calendar-event" viewBox="0 0 16 16" fill="currentColor"> <path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z"/> <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/> From 46fe2da56379926d73696574fd4ea0904f5298bd Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 3 Apr 2021 09:30:29 -0700 Subject: [PATCH 678/898] Refactor to use ng-select addTag function --- .../common/input/select/select.component.html | 31 ++++++++++--------- .../common/input/select/select.component.ts | 24 +++----------- .../common/input/tags/tags.component.html | 17 +++------- .../common/input/tags/tags.component.ts | 27 +++++----------- src-ui/src/styles.scss | 2 -- 5 files changed, 32 insertions(+), 69 deletions(-) diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index f9f05b6fa..b5fb6f2ed 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -1,28 +1,29 @@ <div class="form-group paperless-input-select"> <label [for]="inputId">{{title}}</label> - <div [class.input-group]="showPlusButton()"> - <ng-select name="inputId" [(ngModel)]="value" + <div> + <ng-select *ngIf="allowCreateNew; else noAddTag" name="inputId" [(ngModel)]="value" [disabled]="disabled" [style.color]="textColor" [style.background]="backgroundColor" [clearable]="allowNull" [items]="items" + [addTag]="addItemRef" bindLabel="name" bindValue="id" - (change)="onChange(value)" - (search)="onSearch($event)" - (focus)="clearLastSearchTerm()" - (clear)="clearLastSearchTerm()" - (blur)="onBlur()"> + (blur)="onTouched()"> </ng-select> - - <div *ngIf="showPlusButton()" class="input-group-append"> - <button class="btn btn-outline-secondary" type="button" (click)="clickNew()"> - <svg class="buttonicon" fill="currentColor"> - <use xlink:href="assets/bootstrap-icons.svg#plus" /> - </svg> - </button> - </div> + <ng-template #noAddTag> + <ng-select name="inputId" [(ngModel)]="value" + [disabled]="disabled" + [style.color]="textColor" + [style.background]="backgroundColor" + [clearable]="allowNull" + [items]="items" + bindLabel="name" + bindValue="id" + (blur)="onTouched()"> + </ng-select> + </ng-template> </div> <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> <small *ngIf="getSuggestions().length > 0"> diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 408b3a73a..878254318 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -16,6 +16,7 @@ export class SelectComponent extends AbstractInputComponent<number> { constructor() { super() + this.addItemRef = this.addItem.bind(this) } @Input() @@ -36,9 +37,9 @@ export class SelectComponent extends AbstractInputComponent<number> { @Output() createNew = new EventEmitter<string>() - private _lastSearchTerm: string + public addItemRef: (name) => void - showPlusButton(): boolean { + get allowCreateNew(): boolean { return this.createNew.observers.length > 0 } @@ -50,23 +51,8 @@ export class SelectComponent extends AbstractInputComponent<number> { } } - clickNew() { - this.createNew.next(this._lastSearchTerm) - this.clearLastSearchTerm() - } - - clearLastSearchTerm() { - this._lastSearchTerm = null - } - - onSearch($event) { - this._lastSearchTerm = $event.term - } - - onBlur() { - setTimeout(() => { - this.clearLastSearchTerm() - }, 3000); + addItem(name: string) { + this.createNew.next(name) } } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 6eda2a44d..b8d4f074e 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -1,17 +1,16 @@ <div class="form-group paperless-input-select paperless-input-tags"> <label for="tags" i18n>Tags</label> - <div class="input-group flex-nowrap"> + <div class="flex-nowrap"> <ng-select name="tags" [items]="tags" bindLabel="name" bindValue="id" [(ngModel)]="value" [multiple]="true" [closeOnSelect]="false" [clearSearchOnAdd]="true" [hideSelected]="true" + [addTag]="createTagRef" + addTagText="Add tag" (change)="onChange(value)" - (search)="onSearch($event)" - (focus)="clearLastSearchTerm()" - (clear)="clearLastSearchTerm()" - (blur)="onBlur()"> + (blur)="onTouched()"> <ng-template ng-label-tmp let-item="item"> <span class="tag-wrap tag-wrap-delete" (click)="removeTag(item.id)"> @@ -27,14 +26,6 @@ </div> </ng-template> </ng-select> - - <div class="input-group-append"> - <button class="btn btn-outline-secondary" type="button" (click)="createTag()"> - <svg class="buttonicon" fill="currentColor"> - <use xlink:href="assets/bootstrap-icons.svg#plus" /> - </svg> - </button> - </div> </div> <small class="form-text text-muted" *ngIf="hint">{{hint}}</small> <small *ngIf="getSuggestions().length > 0"> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 44b2e282e..2ab6a02b5 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -17,8 +17,9 @@ import { TagService } from 'src/app/services/rest/tag.service'; }) export class TagsComponent implements OnInit, ControlValueAccessor { - constructor(private tagService: TagService, private modalService: NgbModal) { } - + constructor(private tagService: TagService, private modalService: NgbModal) { + this.createTagRef = this.createTag.bind(this) + } onChange = (newValue: number[]) => {}; @@ -55,8 +56,8 @@ export class TagsComponent implements OnInit, ControlValueAccessor { value: number[] tags: PaperlessTag[] - - private _lastSearchTerm: string + + public createTagRef: (name) => void getTag(id) { if (this.tags) { @@ -76,10 +77,10 @@ export class TagsComponent implements OnInit, ControlValueAccessor { } } - createTag() { + createTag(name: string = null) { var modal = this.modalService.open(TagEditDialogComponent, {backdrop: 'static'}) modal.componentInstance.dialogMode = 'create' - if (this._lastSearchTerm) modal.componentInstance.object = { name: this._lastSearchTerm } + if (name) modal.componentInstance.object = { name: name } modal.componentInstance.success.subscribe(newTag => { this.tagService.listAll().subscribe(tags => { this.tags = tags.results @@ -102,18 +103,4 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this.onChange(this.value) } - clearLastSearchTerm() { - this._lastSearchTerm = null - } - - onSearch($event) { - this._lastSearchTerm = $event.term - } - - onBlur() { - setTimeout(() => { - this.clearLastSearchTerm() - }, 3000); - } - } diff --git a/src-ui/src/styles.scss b/src-ui/src/styles.scss index 34f575a05..8c48dcddc 100644 --- a/src-ui/src/styles.scss +++ b/src-ui/src/styles.scss @@ -77,8 +77,6 @@ body { .ng-select-container { height: 100%; - border-top-right-radius: 0; - border-bottom-right-radius: 0; .ng-value-container .ng-input { top: 10px; From 9c97c6902c4229f0faf67d221db1a4bbfda00127 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:02:13 +0200 Subject: [PATCH 679/898] fix date filtering for full text search --- src/documents/index.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index a75534514..ec8057403 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -3,6 +3,7 @@ import os from contextlib import contextmanager import math +from dateutil.parser import isoparse from django.conf import settings from whoosh import highlight, classify, query from whoosh.fields import Schema, TEXT, NUMERIC, KEYWORD, DATETIME, BOOLEAN @@ -174,13 +175,17 @@ class DelayedQuery: elif k == 'document_type__isnull': criterias.append(query.Term("has_type", v == "false")) elif k == 'created__date__lt': - pass + criterias.append( + query.DateRange("created", start=None, end=isoparse(v))) elif k == 'created__date__gt': - pass + criterias.append( + query.DateRange("created", start=isoparse(v), end=None)) elif k == 'added__date__gt': - pass + criterias.append( + query.DateRange("added", start=isoparse(v), end=None)) elif k == 'added__date__lt': - pass + criterias.append( + query.DateRange("added", start=None, end=isoparse(v))) if len(criterias) > 0: return query.And(criterias) else: From 630f638b82f8c28350f4518f499e844cd8ea5bac Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:02:33 +0200 Subject: [PATCH 680/898] error messages for invalid search queries --- .../document-list.component.html | 171 +++++++++--------- .../services/document-list-view.service.ts | 6 +- 2 files changed, 94 insertions(+), 83 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 63900b399..f1f21b19c 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -89,86 +89,95 @@ [rotate]="true" aria-label="Default pagination"></ngb-pagination> </div> -<div *ngIf="displayMode == 'largeCards'"> - <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)" (clickMoreLike)="clickMoreLike(d.id)"> - </app-document-card-large> -</div> +<ng-container *ngIf="list.error ; else documentListNoError"> + <div class="alert alert-danger" role="alert">Error while loading documents: {{list.error}}</div> +</ng-container> -<table class="table table-sm border shadow-sm" *ngIf="displayMode == 'details'"> - <thead> - <th></th> - <th class="d-none d-lg-table-cell" - sortable="archive_serial_number" - [currentSortField]="list.sortField" - [currentSortReverse]="list.sortReverse" - (sort)="onSort($event)" - i18n>ASN</th> - <th class="d-none d-md-table-cell" - sortable="correspondent__name" - [currentSortField]="list.sortField" - [currentSortReverse]="list.sortReverse" - (sort)="onSort($event)" - i18n>Correspondent</th> - <th - sortable="title" - [currentSortField]="list.sortField" - [currentSortReverse]="list.sortReverse" - (sort)="onSort($event)" - i18n>Title</th> - <th class="d-none d-xl-table-cell" - sortable="document_type__name" - [currentSortField]="list.sortField" - [currentSortReverse]="list.sortReverse" - (sort)="onSort($event)" - i18n>Document type</th> - <th - sortable="created" - [currentSortField]="list.sortField" - [currentSortReverse]="list.sortReverse" - (sort)="onSort($event)" - i18n>Created</th> - <th class="d-none d-xl-table-cell" - sortable="added" - [currentSortField]="list.sortField" - [currentSortReverse]="list.sortReverse" - (sort)="onSort($event)" - i18n>Added</th> - </thead> - <tbody> - <tr *ngFor="let d of list.documents; trackBy: trackByDocumentId" (click)="toggleSelected(d, $event)" [ngClass]="list.isSelected(d) ? 'table-row-selected' : ''"> - <td> - <div class="custom-control custom-checkbox"> - <input type="checkbox" class="custom-control-input" id="docCheck{{d.id}}" [checked]="list.isSelected(d)" (click)="toggleSelected(d, $event)"> - <label class="custom-control-label" for="docCheck{{d.id}}"></label> - </div> - </td> - <td class="d-none d-lg-table-cell"> - {{d.archive_serial_number}} - </td> - <td class="d-none d-md-table-cell"> - <ng-container *ngIf="d.correspondent"> - <a [routerLink]="" (click)="clickCorrespondent(d.correspondent);$event.stopPropagation()" title="Filter by correspondent">{{(d.correspondent$ | async)?.name}}</a> - </ng-container> - </td> - <td> - <a routerLink="/documents/{{d.id}}" title="Edit document" style="overflow-wrap: anywhere;">{{d.title | documentTitle}}</a> - <app-tag [tag]="t" *ngFor="let t of d.tags$ | async" class="ml-1" clickable="true" linkTitle="Filter by tag" (click)="clickTag(t.id);$event.stopPropagation()"></app-tag> - </td> - <td class="d-none d-xl-table-cell"> - <ng-container *ngIf="d.document_type"> - <a [routerLink]="" (click)="clickDocumentType(d.document_type);$event.stopPropagation()" title="Filter by document type">{{(d.document_type$ | async)?.name}}</a> - </ng-container> - </td> - <td> - {{d.created | customDate}} - </td> - <td class="d-none d-xl-table-cell"> - {{d.added | customDate}} - </td> - </tr> - </tbody> -</table> +<ng-template #documentListNoError> -<div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> - <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)"></app-document-card-small> -</div> + <div *ngIf="displayMode == 'largeCards'"> + <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)" (clickMoreLike)="clickMoreLike(d.id)"> + </app-document-card-large> + </div> + + <table class="table table-sm border shadow-sm" *ngIf="displayMode == 'details'"> + <thead> + <th></th> + <th class="d-none d-lg-table-cell" + sortable="archive_serial_number" + [currentSortField]="list.sortField" + [currentSortReverse]="list.sortReverse" + (sort)="onSort($event)" + i18n>ASN</th> + <th class="d-none d-md-table-cell" + sortable="correspondent__name" + [currentSortField]="list.sortField" + [currentSortReverse]="list.sortReverse" + (sort)="onSort($event)" + i18n>Correspondent</th> + <th + sortable="title" + [currentSortField]="list.sortField" + [currentSortReverse]="list.sortReverse" + (sort)="onSort($event)" + i18n>Title</th> + <th class="d-none d-xl-table-cell" + sortable="document_type__name" + [currentSortField]="list.sortField" + [currentSortReverse]="list.sortReverse" + (sort)="onSort($event)" + i18n>Document type</th> + <th + sortable="created" + [currentSortField]="list.sortField" + [currentSortReverse]="list.sortReverse" + (sort)="onSort($event)" + i18n>Created</th> + <th class="d-none d-xl-table-cell" + sortable="added" + [currentSortField]="list.sortField" + [currentSortReverse]="list.sortReverse" + (sort)="onSort($event)" + i18n>Added</th> + </thead> + <tbody> + <tr *ngFor="let d of list.documents; trackBy: trackByDocumentId" (click)="toggleSelected(d, $event)" [ngClass]="list.isSelected(d) ? 'table-row-selected' : ''"> + <td> + <div class="custom-control custom-checkbox"> + <input type="checkbox" class="custom-control-input" id="docCheck{{d.id}}" [checked]="list.isSelected(d)" (click)="toggleSelected(d, $event)"> + <label class="custom-control-label" for="docCheck{{d.id}}"></label> + </div> + </td> + <td class="d-none d-lg-table-cell"> + {{d.archive_serial_number}} + </td> + <td class="d-none d-md-table-cell"> + <ng-container *ngIf="d.correspondent"> + <a [routerLink]="" (click)="clickCorrespondent(d.correspondent);$event.stopPropagation()" title="Filter by correspondent">{{(d.correspondent$ | async)?.name}}</a> + </ng-container> + </td> + <td> + <a routerLink="/documents/{{d.id}}" title="Edit document" style="overflow-wrap: anywhere;">{{d.title | documentTitle}}</a> + <app-tag [tag]="t" *ngFor="let t of d.tags$ | async" class="ml-1" clickable="true" linkTitle="Filter by tag" (click)="clickTag(t.id);$event.stopPropagation()"></app-tag> + </td> + <td class="d-none d-xl-table-cell"> + <ng-container *ngIf="d.document_type"> + <a [routerLink]="" (click)="clickDocumentType(d.document_type);$event.stopPropagation()" title="Filter by document type">{{(d.document_type$ | async)?.name}}</a> + </ng-container> + </td> + <td> + {{d.created | customDate}} + </td> + <td class="d-none d-xl-table-cell"> + {{d.added | customDate}} + </td> + </tr> + </tbody> + </table> + + <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> + <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)"></app-document-card-small> + </div> + + +</ng-template> diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 91c2c870a..b542358c7 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -1,9 +1,7 @@ -import { Route } from '@angular/compiler/src/core'; import { Injectable } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { cloneFilterRules, FilterRule } from '../data/filter-rule'; -import { FILTER_FULLTEXT_MORELIKE, FILTER_FULLTEXT_QUERY } from '../data/filter-rule-type'; import { PaperlessDocument } from '../data/paperless-document'; import { PaperlessSavedView } from '../data/paperless-saved-view'; import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'; @@ -40,6 +38,7 @@ interface ListViewState { export class DocumentListViewService { isReloading: boolean = false + error: string = null rangeSelectionAnchorIndex: number lastRangeSelectionToIndex: number @@ -103,6 +102,7 @@ export class DocumentListViewService { reload(onFinish?) { this.isReloading = true + this.error = null let activeListViewState = this.activeListViewState this.documentService.listFiltered( @@ -126,6 +126,8 @@ export class DocumentListViewService { // this happens when applying a filter: the current page might not be available anymore due to the reduced result set. activeListViewState.currentPage = 1 this.reload() + } else { + this.error = error.error } }) } From 47919ab65c877a92b1dd44d55a72a9397daefcab Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:07:36 +0200 Subject: [PATCH 681/898] fixed more like this --- .../app/components/document-list/document-list.component.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index c0ad354ba..aa534e23e 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -2,6 +2,7 @@ import { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Subscription } from 'rxjs'; +import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { PaperlessSavedView } from 'src/app/data/paperless-saved-view'; import { SortableDirective, SortEvent } from 'src/app/directives/sortable.directive'; @@ -208,10 +209,7 @@ export class DocumentListComponent implements OnInit, OnDestroy { } clickMoreLike(documentID: number) { - this.list.selectNone() - setTimeout(() => { - //this.filterEditor.moreLikeThis(doc) - }) + this.list.quickFilter([{rule_type: FILTER_FULLTEXT_MORELIKE, value: documentID.toString()}]) } trackByDocumentId(index, item: PaperlessDocument) { From 3d88f16e8f2f9b01d0402f1bb2456361f684574f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:49:31 +0200 Subject: [PATCH 682/898] disable sorting for now --- src/documents/index.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index ec8057403..e17c82daa 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -193,20 +193,21 @@ class DelayedQuery: @property def _query_sortedby(self): - if not 'ordering' in self.query_params: - return None, False + # if not 'ordering' in self.query_params: + return None, False - o: str = self.query_params['ordering'] - if o.startswith('-'): - return o[1:], True - else: - return o, False + # o: str = self.query_params['ordering'] + # if o.startswith('-'): + # return o[1:], True + # else: + # return o, False def __init__(self, searcher: Searcher, query_params, page_size): self.searcher = searcher self.query_params = query_params self.page_size = page_size self.saved_results = dict() + self.first_score = None def __len__(self): page = self[0:1] @@ -219,7 +220,6 @@ class DelayedQuery: q, mask = self._query sortedby, reverse = self._query_sortedby - print("OY", self.page_size) page: ResultsPage = self.searcher.search_page( q, mask=mask, @@ -233,6 +233,15 @@ class DelayedQuery: surround=50) page.results.formatter = HtmlFormatter(tagname="span", between=" ... ") + if not self.first_score and len(page.results) > 0: + self.first_score = page.results[0].score + + if self.first_score: + page.results.top_n = list(map( + lambda hit: (hit[0] / self.first_score, hit[1]), + page.results.top_n + )) + self.saved_results[item.start] = page return page From edf43c5f6f5f0ac494ceac0007dec8b61848f505 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:50:05 +0200 Subject: [PATCH 683/898] fix search scores --- .../document-card-large.component.html | 8 ++++---- .../document-card-large.component.ts | 17 ++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index f3037b4fc..3a552eb4e 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -62,10 +62,6 @@ </div> <div class="list-group list-group-horizontal border-0 card-info ml-md-auto mt-2 mt-md-0"> - <div *ngIf="document.__search_hit__" class="list-group-item bg-light text-dark p-1 mr-5 border-0 d-flex search-score"> - <small class="text-muted" i18n>Score:</small> - <ngb-progressbar [type]="searchScoreClass" [value]="document.__search_hit__.score" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> - </div> <button *ngIf="document.document_type" type="button" class="list-group-item btn btn-sm bg-light text-dark p-1 border-0 mr-2" title="Filter by document type" (click)="clickDocumentType.emit(document.document_type);$event.stopPropagation()"> <svg class="metadata-icon mr-2 text-muted bi bi-file-earmark" viewBox="0 0 16 16" fill="currentColor"> @@ -86,6 +82,10 @@ </svg> <small>{{document.created | customDate:'mediumDate'}}</small> </div> + <div *ngIf="document.__search_hit__" class="list-group-item bg-light text-dark border-0 d-flex search-score"> + <small class="text-muted" i18n>Score:</small> + <ngb-progressbar [type]="searchScoreClass" [value]="document.__search_hit__.score" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> + </div> </div> </div> diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts index 0b7b7d793..d8f29ef5a 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts @@ -41,21 +41,20 @@ export class DocumentCardLargeComponent implements OnInit { @Output() clickMoreLike= new EventEmitter() - @Input() - searchScore: number - @ViewChild('popover') popover: NgbPopover mouseOnPreview = false popoverHidden = true get searchScoreClass() { - if (this.searchScore > 0.7) { - return "success" - } else if (this.searchScore > 0.3) { - return "warning" - } else { - return "danger" + if (this.document.__search_hit__) { + if (this.document.__search_hit__.score > 0.7) { + return "success" + } else if (this.document.__search_hit__.score > 0.3) { + return "warning" + } else { + return "danger" + } } } From 9f35f162ce2fa378d092410af69e51276802b15d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:50:23 +0200 Subject: [PATCH 684/898] fix page out of range with full text --- src/documents/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/documents/views.py b/src/documents/views.py index f61933e16..71b01cdd6 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -17,6 +17,7 @@ from django_filters.rest_framework import DjangoFilterBackend from django_q.tasks import async_task from rest_framework import parsers from rest_framework.decorators import action +from rest_framework.exceptions import NotFound from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.generics import GenericAPIView from rest_framework.mixins import ( @@ -382,6 +383,8 @@ class UnifiedSearchViewSet(DocumentViewSet): with index.open_index_searcher() as s: self.searcher = s return super(UnifiedSearchViewSet, self).list(request) + except NotFound: + raise except Exception as e: return HttpResponseBadRequest(str(e)) else: From 5a9c944eab887cafd5486bfd6f6d8124d7602a41 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 21:56:33 +0200 Subject: [PATCH 685/898] rename search --- .../document-list/filter-editor/filter-editor.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 3b645ec97..16c342308 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -85,7 +85,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { {id: TEXT_FILTER_TARGET_TITLE, name: $localize`Title`}, {id: TEXT_FILTER_TARGET_TITLE_CONTENT, name: $localize`Title & content`}, {id: TEXT_FILTER_TARGET_ASN, name: $localize`ASN`}, - {id: TEXT_FILTER_TARGET_FULLTEXT_QUERY, name: $localize`Fulltext search`} + {id: TEXT_FILTER_TARGET_FULLTEXT_QUERY, name: $localize`Advanced search`} ] if (this.textFilterTarget == TEXT_FILTER_TARGET_FULLTEXT_MORELIKE) { targets.push({id: TEXT_FILTER_TARGET_FULLTEXT_MORELIKE, name: $localize`More like`}) From f7aa351bc9beceebbd53b9fdba7d707ded64faee Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 3 Apr 2021 13:10:39 -0700 Subject: [PATCH 686/898] Suppport search term PDF open parameter --- .../filter-editor/filter-editor.component.ts | 5 ++++- src-ui/src/app/services/rest/document.service.ts | 14 +++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 43387c08f..c1b0f509a 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -11,6 +11,7 @@ import { FilterRule } from 'src/app/data/filter-rule'; import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_ASN, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_ANY_TAG, FILTER_HAS_TAG, FILTER_TITLE, FILTER_TITLE_CONTENT } from 'src/app/data/filter-rule-type'; import { FilterableDropdownSelectionModel } from '../../common/filterable-dropdown/filterable-dropdown.component'; import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component'; +import { DocumentService } from 'src/app/services/rest/document.service'; const TEXT_FILTER_TARGET_TITLE = "title" const TEXT_FILTER_TARGET_TITLE_CONTENT = "title-content" @@ -64,7 +65,8 @@ export class FilterEditorComponent implements OnInit, OnDestroy { constructor( private documentTypeService: DocumentTypeService, private tagService: TagService, - private correspondentService: CorrespondentService + private correspondentService: CorrespondentService, + private documentService: DocumentService ) { } tags: PaperlessTag[] = [] @@ -223,6 +225,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { distinctUntilChanged() ).subscribe(text => { this._textFilter = text + this.documentService.setSearchQuery(text) this.updateRules() }) } diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index 40dbc64f7..40a400f0c 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -12,6 +12,7 @@ import { DocumentTypeService } from './document-type.service'; import { TagService } from './tag.service'; import { FILTER_RULE_TYPES } from 'src/app/data/filter-rule-type'; import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions'; +import { ActivatedRoute } from '@angular/router'; export const DOCUMENT_SORT_FIELDS = [ { field: 'archive_serial_number', name: $localize`ASN` }, @@ -39,8 +40,14 @@ export interface SelectionData { }) export class DocumentService extends AbstractPaperlessService<PaperlessDocument> { - constructor(http: HttpClient, private correspondentService: CorrespondentService, private documentTypeService: DocumentTypeService, private tagService: TagService) { + private searchQuery: string + + constructor(http: HttpClient, private correspondentService: CorrespondentService, private documentTypeService: DocumentTypeService, private tagService: TagService, private route: ActivatedRoute) { super(http, 'documents') + + this.route.queryParamMap.subscribe(paramMap => { + this.searchQuery = paramMap.get('query') + }) } private filterRulesToQueryParams(filterRules: FilterRule[]) { @@ -92,6 +99,7 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> getPreviewUrl(id: number, original: boolean = false): string { let url = this.getResourceUrl(id, 'preview') + if (this.searchQuery) url += `#search="${this.searchQuery}"` if (original) { url += "?original=true" } @@ -138,4 +146,8 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> return this.http.post(this.getResourceUrl(null, 'bulk_download'), {"documents": ids, "content": content}, { responseType: 'blob' }) } + public setSearchQuery(query: string) { + this.searchQuery = query + } + } From 94ed2c4ea3e6e861e2a6f4e2b43ddbd0e8be8df8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 3 Apr 2021 22:19:12 +0200 Subject: [PATCH 687/898] reset page when doing full text search --- src-ui/src/app/services/document-list-view.service.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index b542358c7..aa82190d7 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { cloneFilterRules, FilterRule } from '../data/filter-rule'; +import { FILTER_FULLTEXT_MORELIKE, FILTER_FULLTEXT_QUERY } from '../data/filter-rule-type'; import { PaperlessDocument } from '../data/paperless-document'; import { PaperlessSavedView } from '../data/paperless-saved-view'; import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'; @@ -134,6 +135,9 @@ export class DocumentListViewService { set filterRules(filterRules: FilterRule[]) { this.activeListViewState.filterRules = filterRules + if (filterRules.find(r => (r.rule_type == FILTER_FULLTEXT_QUERY || r.rule_type == FILTER_FULLTEXT_MORELIKE))) { + this.activeListViewState.currentPage = 1 + } this.reload() this.reduceSelectionToFilter() this.saveDocumentListView() From 1bb9205fdcac56fdd3e889e88c4b68736b0c5443 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 00:03:51 +0200 Subject: [PATCH 688/898] refactor filter reset --- .../document-list.component.html | 2 +- .../document-list/document-list.component.ts | 48 ++----------------- .../filter-editor/filter-editor.component.ts | 42 ++++++++++++++-- 3 files changed, 42 insertions(+), 50 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index f1f21b19c..45b6fad37 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -76,7 +76,7 @@ </app-page-header> <div class="w-100 mb-2 mb-sm-4"> - <app-filter-editor [hidden]="isBulkEditing" [(filterRules)]="list.filterRules" [rulesModified]="filterRulesModified" (filterRulesChange)="rulesChanged()" (reset)="resetFilters()" #filterEditor></app-filter-editor> + <app-filter-editor [hidden]="isBulkEditing" [(filterRules)]="list.filterRules" [unmodifiedFilterRules]="unmodifiedFilterRules" #filterEditor></app-filter-editor> <app-bulk-editor [hidden]="!isBulkEditing"></app-bulk-editor> </div> diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index aa534e23e..020b38e78 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -2,6 +2,7 @@ import { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Subscription } from 'rxjs'; +import { FilterRule } from 'src/app/data/filter-rule'; import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { PaperlessSavedView } from 'src/app/data/paperless-saved-view'; @@ -38,7 +39,7 @@ export class DocumentListComponent implements OnInit, OnDestroy { displayMode = 'smallCards' // largeCards, smallCards, details - filterRulesModified: boolean = false + unmodifiedFilterRules: FilterRule[] = [] private consumptionFinishedSubscription: Subscription @@ -82,12 +83,12 @@ export class DocumentListComponent implements OnInit, OnDestroy { } this.list.activateSavedView(view) this.list.reload() - this.rulesChanged() + this.unmodifiedFilterRules = view.filter_rules }) } else { this.list.activateSavedView(null) this.list.reload() - this.rulesChanged() + this.unmodifiedFilterRules = [] } }) } @@ -101,7 +102,6 @@ export class DocumentListComponent implements OnInit, OnDestroy { loadViewConfig(view: PaperlessSavedView) { this.list.loadSavedView(view) this.list.reload() - this.rulesChanged() } saveViewConfig() { @@ -142,46 +142,6 @@ export class DocumentListComponent implements OnInit, OnDestroy { }) } - resetFilters(): void { - this.filterRulesModified = false - if (this.list.activeSavedViewId) { - this.savedViewService.getCached(this.list.activeSavedViewId).subscribe(viewUntouched => { - this.list.filterRules = viewUntouched.filter_rules - this.list.reload() - }) - } else { - this.list.filterRules = [] - this.list.reload() - } - } - - rulesChanged() { - let modified = false - if (this.list.activeSavedViewId == null) { - modified = this.list.filterRules.length > 0 // documents list is modified if it has any filters - } else { - // compare savedView current filters vs original - this.savedViewService.getCached(this.list.activeSavedViewId).subscribe(view => { - let filterRulesInitial = view.filter_rules - - if (this.list.filterRules.length !== filterRulesInitial.length) modified = true - else { - modified = this.list.filterRules.some(rule => { - return (filterRulesInitial.find(fri => fri.rule_type == rule.rule_type && fri.value == rule.value) == undefined) - }) - - if (!modified) { - // only check other direction if we havent already determined is modified - modified = filterRulesInitial.some(rule => { - this.list.filterRules.find(fr => fr.rule_type == rule.rule_type && fr.value == rule.value) == undefined - }) - } - } - }) - } - this.filterRulesModified = modified - } - toggleSelected(document: PaperlessDocument, event: MouseEvent): void { if (!event.shiftKey) this.list.toggleSelected(document) else this.list.selectRangeTo(document) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 16c342308..c1fd8536f 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -109,8 +109,23 @@ export class FilterEditorComponent implements OnInit, OnDestroy { dateAddedBefore: string dateAddedAfter: string + _unmodifiedFilterRules: FilterRule[] = [] + _filterRules: FilterRule[] = [] + + @Input() + set unmodifiedFilterRules(value: FilterRule[]) { + this._unmodifiedFilterRules = value + this.checkIfRulesHaveChanged() + } + + get unmodifiedFilterRules(): FilterRule[] { + return this._unmodifiedFilterRules + } + @Input() set filterRules (value: FilterRule[]) { + this._filterRules = value + this.documentTypeSelectionModel.clear(false) this.tagSelectionModel.clear(false) this.correspondentSelectionModel.clear(false) @@ -172,6 +187,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { break } }) + this.checkIfRulesHaveChanged() } get filterRules(): FilterRule[] { @@ -222,12 +238,27 @@ export class FilterEditorComponent implements OnInit, OnDestroy { @Output() filterRulesChange = new EventEmitter<FilterRule[]>() - @Output() - reset = new EventEmitter() - - @Input() rulesModified: boolean = false + private checkIfRulesHaveChanged() { + let modified = false + if (this._unmodifiedFilterRules.length != this._filterRules.length) { + modified = true + } else { + modified = this._unmodifiedFilterRules.some(rule => { + return (this._filterRules.find(fri => fri.rule_type == rule.rule_type && fri.value == rule.value) == undefined) + }) + + if (!modified) { + // only check other direction if we havent already determined is modified + modified = this._filterRules.some(rule => { + this._unmodifiedFilterRules.find(fr => fr.rule_type == rule.rule_type && fr.value == rule.value) == undefined + }) + } + } + this.rulesModified = modified + } + updateRules() { this.filterRulesChange.next(this.filterRules) } @@ -265,7 +296,8 @@ export class FilterEditorComponent implements OnInit, OnDestroy { resetSelected() { this.textFilterTarget = TEXT_FILTER_TARGET_TITLE_CONTENT - this.reset.next() + this.filterRules = this._unmodifiedFilterRules + this.updateRules() } toggleTag(tagId: number) { From f9d9ac75ead02ba329fd91df6b7c93ce55f8f537 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 00:04:00 +0200 Subject: [PATCH 689/898] pycodestyle --- src/documents/views.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index 71b01cdd6..d8fcca2a9 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -332,15 +332,15 @@ class SearchResultSerializer(DocumentSerializer): def to_representation(self, instance): doc = Document.objects.get(id=instance['id']) - representation = super(SearchResultSerializer, self).to_representation(doc) - representation['__search_hit__'] = { + r = super(SearchResultSerializer, self).to_representation(doc) + r['__search_hit__'] = { "score": instance.score, "highlights": instance.highlights("content", text=doc.content) if doc else None, # NOQA: E501 "rank": instance.rank } - return representation + return r class UnifiedSearchViewSet(DocumentViewSet): @@ -356,7 +356,8 @@ class UnifiedSearchViewSet(DocumentViewSet): return DocumentSerializer def _is_search_request(self): - return "query" in self.request.query_params or "more_like_id" in self.request.query_params + return ("query" in self.request.query_params or + "more_like_id" in self.request.query_params) def filter_queryset(self, queryset): if self._is_search_request(): From 8c147f8b62dfda0b28048193960732693158c455 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 00:29:40 +0200 Subject: [PATCH 690/898] fixed the test cases --- src/documents/tests/test_admin.py | 2 +- src/documents/tests/test_api.py | 60 ++++++++----------------------- 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/src/documents/tests/test_admin.py b/src/documents/tests/test_admin.py index ce00a0698..fc1d7ffaf 100644 --- a/src/documents/tests/test_admin.py +++ b/src/documents/tests/test_admin.py @@ -27,7 +27,7 @@ class TestDocumentAdmin(DirectoriesMixin, TestCase): doc.title = "new title" self.doc_admin.save_model(None, doc, None, None) self.assertEqual(Document.objects.get(id=doc.id).title, "new title") - self.assertEqual(self.get_document_from_index(doc)['title'], "new title") + self.assertEqual(self.get_document_from_index(doc)['id'], doc.id) def test_delete_model(self): doc = Document.objects.create(title="test") diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 853131db2..5c54a8d74 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -7,6 +7,7 @@ import tempfile import zipfile from unittest import mock +import pytest from django.conf import settings from django.contrib.auth.models import User from django.test import override_settings @@ -294,12 +295,6 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): results = response.data['results'] self.assertEqual(len(results), 0) - def test_search_no_query(self): - response = self.client.get("/api/search/") - results = response.data['results'] - - self.assertEqual(len(results), 0) - def test_search(self): d1=Document.objects.create(title="invoice", content="the thing i bought at a shop and paid with bank account", checksum="A", pk=1) d2=Document.objects.create(title="bank statement 1", content="things i paid for in august", pk=2, checksum="B") @@ -311,32 +306,24 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): index.update_document(writer, d1) index.update_document(writer, d2) index.update_document(writer, d3) - response = self.client.get("/api/search/?query=bank") + response = self.client.get("/api/documents/?query=bank") results = response.data['results'] self.assertEqual(response.data['count'], 3) - self.assertEqual(response.data['page'], 1) - self.assertEqual(response.data['page_count'], 1) self.assertEqual(len(results), 3) - response = self.client.get("/api/search/?query=september") + response = self.client.get("/api/documents/?query=september") results = response.data['results'] self.assertEqual(response.data['count'], 1) - self.assertEqual(response.data['page'], 1) - self.assertEqual(response.data['page_count'], 1) self.assertEqual(len(results), 1) - response = self.client.get("/api/search/?query=statement") + response = self.client.get("/api/documents/?query=statement") results = response.data['results'] self.assertEqual(response.data['count'], 2) - self.assertEqual(response.data['page'], 1) - self.assertEqual(response.data['page_count'], 1) self.assertEqual(len(results), 2) - response = self.client.get("/api/search/?query=sfegdfg") + response = self.client.get("/api/documents/?query=sfegdfg") results = response.data['results'] self.assertEqual(response.data['count'], 0) - self.assertEqual(response.data['page'], 0) - self.assertEqual(response.data['page_count'], 0) self.assertEqual(len(results), 0) def test_search_multi_page(self): @@ -349,53 +336,34 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): seen_ids = [] for i in range(1, 6): - response = self.client.get(f"/api/search/?query=content&page={i}") + response = self.client.get(f"/api/documents/?query=content&page={i}&page_size=10") results = response.data['results'] self.assertEqual(response.data['count'], 55) - self.assertEqual(response.data['page'], i) - self.assertEqual(response.data['page_count'], 6) self.assertEqual(len(results), 10) for result in results: self.assertNotIn(result['id'], seen_ids) seen_ids.append(result['id']) - response = self.client.get(f"/api/search/?query=content&page=6") + response = self.client.get(f"/api/documents/?query=content&page=6&page_size=10") results = response.data['results'] self.assertEqual(response.data['count'], 55) - self.assertEqual(response.data['page'], 6) - self.assertEqual(response.data['page_count'], 6) self.assertEqual(len(results), 5) for result in results: self.assertNotIn(result['id'], seen_ids) seen_ids.append(result['id']) - response = self.client.get(f"/api/search/?query=content&page=7") - results = response.data['results'] - self.assertEqual(response.data['count'], 55) - self.assertEqual(response.data['page'], 6) - self.assertEqual(response.data['page_count'], 6) - self.assertEqual(len(results), 5) - def test_search_invalid_page(self): with AsyncWriter(index.open_index()) as writer: for i in range(15): doc = Document.objects.create(checksum=str(i), pk=i+1, title=f"Document {i+1}", content="content") index.update_document(writer, doc) - first_page = self.client.get(f"/api/search/?query=content&page=1").data - second_page = self.client.get(f"/api/search/?query=content&page=2").data - should_be_first_page_1 = self.client.get(f"/api/search/?query=content&page=0").data - should_be_first_page_2 = self.client.get(f"/api/search/?query=content&page=dgfd").data - should_be_first_page_3 = self.client.get(f"/api/search/?query=content&page=").data - should_be_first_page_4 = self.client.get(f"/api/search/?query=content&page=-7868").data - - self.assertDictEqual(first_page, should_be_first_page_1) - self.assertDictEqual(first_page, should_be_first_page_2) - self.assertDictEqual(first_page, should_be_first_page_3) - self.assertDictEqual(first_page, should_be_first_page_4) - self.assertNotEqual(len(first_page['results']), len(second_page['results'])) + response = self.client.get(f"/api/documents/?query=content&page=0&page_size=10") + self.assertEqual(response.status_code, 404) + response = self.client.get(f"/api/documents/?query=content&page=3&page_size=10") + self.assertEqual(response.status_code, 404) @mock.patch("documents.index.autocomplete") def test_search_autocomplete(self, m): @@ -419,6 +387,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 10) + @pytest.mark.skip(reason="Not implemented yet") def test_search_spelling_correction(self): with AsyncWriter(index.open_index()) as writer: for i in range(55): @@ -444,7 +413,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): index.update_document(writer, d2) index.update_document(writer, d3) - response = self.client.get(f"/api/search/?more_like={d2.id}") + response = self.client.get(f"/api/documents/?more_like_id={d2.id}") self.assertEqual(response.status_code, 200) @@ -1375,8 +1344,7 @@ class TestApiAuth(APITestCase): self.assertEqual(self.client.get("/api/logs/").status_code, 401) self.assertEqual(self.client.get("/api/saved_views/").status_code, 401) - self.assertEqual(self.client.get("/api/search/").status_code, 401) - self.assertEqual(self.client.get("/api/search/auto_complete/").status_code, 401) + self.assertEqual(self.client.get("/api/search/autocomplete/").status_code, 401) self.assertEqual(self.client.get("/api/documents/bulk_edit/").status_code, 401) self.assertEqual(self.client.get("/api/documents/bulk_download/").status_code, 401) self.assertEqual(self.client.get("/api/documents/selection_data/").status_code, 401) From f36b1c2b9d5df0b9ee306ac9220b8994918725a8 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 01:19:07 +0200 Subject: [PATCH 691/898] more testing --- src/documents/index.py | 14 +++------- src/documents/tests/test_api.py | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index e17c82daa..6fdcff42f 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -82,11 +82,8 @@ def open_index(recreate=False): @contextmanager -def open_index_writer(ix=None, optimize=False): - if ix: - writer = AsyncWriter(ix) - else: - writer = AsyncWriter(open_index()) +def open_index_writer(optimize=False): + writer = AsyncWriter(open_index()) try: yield writer @@ -98,11 +95,8 @@ def open_index_writer(ix=None, optimize=False): @contextmanager -def open_index_searcher(ix=None): - if ix: - searcher = ix.searcher() - else: - searcher = open_index().searcher() +def open_index_searcher(): + searcher = open_index().searcher() try: yield searcher diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 5c54a8d74..cfde28e2d 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -423,6 +423,54 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(results[0]['id'], d3.id) self.assertEqual(results[1]['id'], d1.id) + def test_search_filtering(self): + t = Tag.objects.create(name="tag") + t2 = Tag.objects.create(name="tag2") + c = Correspondent.objects.create(name="correspondent") + dt = DocumentType.objects.create(name="type") + + d1 = Document.objects.create(checksum="1", correspondent=c, content="test") + d2 = Document.objects.create(checksum="2", document_type=dt, content="test") + d3 = Document.objects.create(checksum="3", content="test") + d3.tags.add(t) + d3.tags.add(t2) + d4 = Document.objects.create(checksum="4", created=datetime.datetime(2020, 7, 13), content="test") + d4.tags.add(t2) + d5 = Document.objects.create(checksum="5", added=datetime.datetime(2020, 7, 13), content="test") + d6 = Document.objects.create(checksum="6", content="test2") + + with AsyncWriter(index.open_index()) as writer: + for doc in Document.objects.all(): + index.update_document(writer, doc) + + def search_query(q): + r = self.client.get("/api/documents/?query=test" + q) + self.assertEqual(r.status_code, 200) + return [hit['id'] for hit in r.data['results']] + + self.assertCountEqual(search_query(""), [d1.id, d2.id, d3.id, d4.id, d5.id]) + self.assertCountEqual(search_query("&is_tagged=true"), [d3.id, d4.id]) + self.assertCountEqual(search_query("&is_tagged=false"), [d1.id, d2.id, d5.id]) + self.assertCountEqual(search_query("&correspondent__id=" + str(c.id)), [d1.id]) + self.assertCountEqual(search_query("&document_type__id=" + str(dt.id)), [d2.id]) + self.assertCountEqual(search_query("&correspondent__isnull"), [d2.id, d3.id, d4.id, d5.id]) + self.assertCountEqual(search_query("&document_type__isnull"), [d1.id, d3.id, d4.id, d5.id]) + self.assertCountEqual(search_query("&tags__id__all=" + str(t.id) + "," + str(t2.id)), [d3.id]) + self.assertCountEqual(search_query("&tags__id__all=" + str(t.id)), [d3.id]) + self.assertCountEqual(search_query("&tags__id__all=" + str(t2.id)), [d3.id, d4.id]) + + self.assertIn(d4.id, search_query("&created__date__lt=" + datetime.datetime(2020, 9, 2).strftime("%Y-%m-%d"))) + self.assertNotIn(d4.id, search_query("&created__date__gt=" + datetime.datetime(2020, 9, 2).strftime("%Y-%m-%d"))) + + self.assertNotIn(d4.id, search_query("&created__date__lt=" + datetime.datetime(2020, 1, 2).strftime("%Y-%m-%d"))) + self.assertIn(d4.id, search_query("&created__date__gt=" + datetime.datetime(2020, 1, 2).strftime("%Y-%m-%d"))) + + self.assertIn(d5.id, search_query("&added__date__lt=" + datetime.datetime(2020, 9, 2).strftime("%Y-%m-%d"))) + self.assertNotIn(d5.id, search_query("&added__date__gt=" + datetime.datetime(2020, 9, 2).strftime("%Y-%m-%d"))) + + self.assertNotIn(d5.id, search_query("&added__date__lt=" + datetime.datetime(2020, 1, 2).strftime("%Y-%m-%d"))) + self.assertIn(d5.id, search_query("&added__date__gt=" + datetime.datetime(2020, 1, 2).strftime("%Y-%m-%d"))) + def test_statistics(self): doc1 = Document.objects.create(title="none1", checksum="A") From 9014c8b883ed10dea95857c268ff5c66c3dbf703 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 01:25:54 +0200 Subject: [PATCH 692/898] bugfix --- .../src/app/components/document-list/document-list.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 020b38e78..13a827e97 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -114,6 +114,7 @@ export class DocumentListComponent implements OnInit, OnDestroy { } this.savedViewService.patch(savedView).subscribe(result => { this.toastService.showInfo($localize`View "${this.list.activeSavedViewTitle}" saved successfully.`) + this.unmodifiedFilterRules = this.list.filterRules }) } } From e14ce435de8af01d3425bdf9256e64ffe48cc0e4 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 20:41:08 +0200 Subject: [PATCH 693/898] add migration to fix null characters in document contents --- .../migrations/1015_remove_null_characters.py | 29 +++++++++++++++++++ .../test_migration_remove_null_characters.py | 15 ++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/documents/migrations/1015_remove_null_characters.py create mode 100644 src/documents/tests/test_migration_remove_null_characters.py diff --git a/src/documents/migrations/1015_remove_null_characters.py b/src/documents/migrations/1015_remove_null_characters.py new file mode 100644 index 000000000..2f7ee99b6 --- /dev/null +++ b/src/documents/migrations/1015_remove_null_characters.py @@ -0,0 +1,29 @@ +# Generated by Django 3.1.7 on 2021-04-04 18:28 +import logging + +from django.db import migrations + + +logger = logging.getLogger("paperless.migrations") + + +def remove_null_characters(apps, schema_editor): + Document = apps.get_model('documents', 'Document') + + for doc in Document.objects.all(): + content: str = doc.content + if '\0' in content: + logger.info(f"Removing null characters from document {doc}...") + doc.content = content.replace('\0', ' ') + doc.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1014_auto_20210228_1614'), + ] + + operations = [ + migrations.RunPython(remove_null_characters, migrations.RunPython.noop) + ] diff --git a/src/documents/tests/test_migration_remove_null_characters.py b/src/documents/tests/test_migration_remove_null_characters.py new file mode 100644 index 000000000..ba6f18539 --- /dev/null +++ b/src/documents/tests/test_migration_remove_null_characters.py @@ -0,0 +1,15 @@ +from documents.tests.utils import DirectoriesMixin, TestMigrations + + +class TestMigrateNullCharacters(DirectoriesMixin, TestMigrations): + + migrate_from = '1014_auto_20210228_1614' + migrate_to = '1015_remove_null_characters' + + def setUpBeforeMigration(self, apps): + Document = apps.get_model("documents", "Document") + self.doc = Document.objects.create(content="aaa\0bbb") + + def testMimeTypesMigrated(self): + Document = self.apps.get_model('documents', 'Document') + self.assertNotIn("\0", Document.objects.get(id=self.doc.id).content) From ddd305a92acb2ac062af7df3862f4c0e9d364e1e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 4 Apr 2021 20:46:25 +0200 Subject: [PATCH 694/898] update messages --- src-ui/messages.xlf | 144 ++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 86 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 880a32b1b..6a956512f 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -48,21 +48,21 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> </trans-unit> <trans-unit id="2155249406916744630" datatype="html"> <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> </trans-unit> <trans-unit id="6837554170707123455" datatype="html"> <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> </trans-unit> <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> @@ -146,77 +146,77 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> </trans-unit> <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> </trans-unit> <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> </trans-unit> <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> </trans-unit> <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> </trans-unit> <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> </trans-unit> <trans-unit id="9021887951960049161" datatype="html"> <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> @@ -912,48 +912,6 @@ <context context-type="linenumber">25</context> </context-group> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1039,81 +997,95 @@ <context context-type="linenumber">106</context> </context-group> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> </trans-unit> <trans-unit id="8170755470576301659" datatype="html"> <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> </trans-unit> <trans-unit id="8705701325879965907" datatype="html"> <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> </trans-unit> <trans-unit id="4362173610367509215" datatype="html"> <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> </trans-unit> <trans-unit id="8180755793012580465" datatype="html"> <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> </trans-unit> <trans-unit id="1872523635812236432" datatype="html"> <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> + </context-group> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> @@ -1233,7 +1205,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> </trans-unit> <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> From d3aa1eb66d53283dd1e5436dc896f900161d87ec Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 00:16:50 +0200 Subject: [PATCH 695/898] fix migration --- .../{1015_auto_20210317_1351.py => 1016_auto_20210317_1351.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/documents/migrations/{1015_auto_20210317_1351.py => 1016_auto_20210317_1351.py} (95%) diff --git a/src/documents/migrations/1015_auto_20210317_1351.py b/src/documents/migrations/1016_auto_20210317_1351.py similarity index 95% rename from src/documents/migrations/1015_auto_20210317_1351.py rename to src/documents/migrations/1016_auto_20210317_1351.py index b6dca444c..733c1bb33 100644 --- a/src/documents/migrations/1015_auto_20210317_1351.py +++ b/src/documents/migrations/1016_auto_20210317_1351.py @@ -6,7 +6,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('documents', '1014_auto_20210228_1614'), + ('documents', '1015_remove_null_characters'), ] operations = [ From d7bf3bb14123d084041e82cded97aefad6088e22 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 00:22:11 +0200 Subject: [PATCH 696/898] logging before executing pre and post consume scripts --- src/documents/consumer.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 3d7d98198..8c888259f 100755 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -115,6 +115,9 @@ class Consumer(LoggingMixin): f"Configured pre-consume script " f"{settings.PRE_CONSUME_SCRIPT} does not exist.") + self.log("info", + f"Executing pre-consume script {settings.PRE_CONSUME_SCRIPT}") + try: Popen((settings.PRE_CONSUME_SCRIPT, self.path)).wait() except Exception as e: @@ -135,6 +138,11 @@ class Consumer(LoggingMixin): f"{settings.POST_CONSUME_SCRIPT} does not exist." ) + self.log( + "info", + f"Executing post-consume script {settings.POST_CONSUME_SCRIPT}" + ) + try: Popen(( settings.POST_CONSUME_SCRIPT, From 0817d5155bfee88e9e4075142240344e74cb7115 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 00:36:44 +0200 Subject: [PATCH 697/898] changelog and version bump --- docs/changelog.rst | 22 +++++++++++++++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 7010350a8..ba2bddc25 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,28 @@ Changelog ********* +paperless-ng 1.4.0 +################## + +* Docker images now use tesseract 4.1.1, which should fix a series of issues with OCR. + +* The full text search now displays results using the default document list. This enables + selection, filtering and bulk edit on search results. + +* Changes + + * New URL pattern for accessing documents by ASN directly (http://<paperless>/asn/123) + + * Added logging when executing pre- and post-consume scripts. + + * Better error logging during document consumption. + + * Updated python dependencies. + +* Fixes + + * Fixed an issue with null characters in the document content. + paperless-ng 1.3.2 ################## diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index acc5843f8..63789a9d4 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -3,7 +3,7 @@ export const environment = { apiBaseUrl: "/api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.3.2", + version: "1.4.0", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 183d98d3f..532acc3df 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 3, 2) +__version__ = (1, 4, 0) From fd9a871f81eb2c95985ae1f268598a51d14a49ae Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 4 Apr 2021 17:05:27 -0700 Subject: [PATCH 698/898] Add back plus button which retains filter text --- .../common/input/select/select.component.html | 49 ++++++++++++------- .../common/input/select/select.component.ts | 25 +++++++++- .../common/input/tags/tags.component.html | 15 +++++- .../common/input/tags/tags.component.ts | 19 ++++++- src-ui/src/styles.scss | 2 + 5 files changed, 89 insertions(+), 21 deletions(-) diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index b5fb6f2ed..1bcdeda84 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -1,30 +1,45 @@ <div class="form-group paperless-input-select"> <label [for]="inputId">{{title}}</label> - <div> - <ng-select *ngIf="allowCreateNew; else noAddTag" name="inputId" [(ngModel)]="value" - [disabled]="disabled" - [style.color]="textColor" - [style.background]="backgroundColor" - [clearable]="allowNull" - [items]="items" - [addTag]="addItemRef" - bindLabel="name" - bindValue="id" - (blur)="onTouched()"> - </ng-select> - <ng-template #noAddTag> - <ng-select name="inputId" [(ngModel)]="value" + <div [class.input-group]="allowCreateNew"> + <ng-select *ngIf="allowCreateNew; else noAddTag" name="inputId" [(ngModel)]="value" [disabled]="disabled" [style.color]="textColor" [style.background]="backgroundColor" [clearable]="allowNull" [items]="items" + [addTag]="addItemRef" bindLabel="name" bindValue="id" - (blur)="onTouched()"> + (change)="onChange(value)" + (search)="onSearch($event)" + (focus)="clearLastSearchTerm()" + (clear)="clearLastSearchTerm()" + (blur)="onBlur()"> </ng-select> - </ng-template> - </div> + <ng-template #noAddTag> + <ng-select name="inputId" [(ngModel)]="value" + [disabled]="disabled" + [style.color]="textColor" + [style.background]="backgroundColor" + [clearable]="allowNull" + [items]="items" + bindLabel="name" + bindValue="id" + (change)="onChange(value)" + (search)="onSearch($event)" + (focus)="clearLastSearchTerm()" + (clear)="clearLastSearchTerm()" + (blur)="onBlur()"> + </ng-select> + </ng-template> + <div *ngIf="allowCreateNew" class="input-group-append"> + <button class="btn btn-outline-secondary" type="button" (click)="addItem()"> + <svg class="buttonicon" fill="currentColor"> + <use xlink:href="assets/bootstrap-icons.svg#plus" /> + </svg> + </button> + </div> + </div> <small *ngIf="hint" class="form-text text-muted">{{hint}}</small> <small *ngIf="getSuggestions().length > 0"> <span i18n>Suggestions:</span>  diff --git a/src-ui/src/app/components/common/input/select/select.component.ts b/src-ui/src/app/components/common/input/select/select.component.ts index 878254318..921e3606c 100644 --- a/src-ui/src/app/components/common/input/select/select.component.ts +++ b/src-ui/src/app/components/common/input/select/select.component.ts @@ -39,6 +39,8 @@ export class SelectComponent extends AbstractInputComponent<number> { public addItemRef: (name) => void + private _lastSearchTerm: string + get allowCreateNew(): boolean { return this.createNew.observers.length > 0 } @@ -52,7 +54,28 @@ export class SelectComponent extends AbstractInputComponent<number> { } addItem(name: string) { - this.createNew.next(name) + if (name) this.createNew.next(name) + else this.createNew.next(this._lastSearchTerm) + this.clearLastSearchTerm() + } + + clickNew() { + this.createNew.next(this._lastSearchTerm) + this.clearLastSearchTerm() + } + + clearLastSearchTerm() { + this._lastSearchTerm = null + } + + onSearch($event) { + this._lastSearchTerm = $event.term + } + + onBlur() { + setTimeout(() => { + this.clearLastSearchTerm() + }, 3000); } } diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index b8d4f074e..72c2cf1a5 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -1,7 +1,7 @@ <div class="form-group paperless-input-select paperless-input-tags"> <label for="tags" i18n>Tags</label> - <div class="flex-nowrap"> + <div class="input-group flex-nowrap"> <ng-select name="tags" [items]="tags" bindLabel="name" bindValue="id" [(ngModel)]="value" [multiple]="true" [closeOnSelect]="false" @@ -10,7 +10,10 @@ [addTag]="createTagRef" addTagText="Add tag" (change)="onChange(value)" - (blur)="onTouched()"> + (search)="onSearch($event)" + (focus)="clearLastSearchTerm()" + (clear)="clearLastSearchTerm()" + (blur)="onBlur()"> <ng-template ng-label-tmp let-item="item"> <span class="tag-wrap tag-wrap-delete" (click)="removeTag(item.id)"> @@ -26,6 +29,14 @@ </div> </ng-template> </ng-select> + + <div class="input-group-append"> + <button class="btn btn-outline-secondary" type="button" (click)="createTag()"> + <svg class="buttonicon" fill="currentColor"> + <use xlink:href="assets/bootstrap-icons.svg#plus" /> + </svg> + </button> + </div> </div> <small class="form-text text-muted" *ngIf="hint">{{hint}}</small> <small *ngIf="getSuggestions().length > 0"> diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index 2ab6a02b5..8db444ba3 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -56,9 +56,11 @@ export class TagsComponent implements OnInit, ControlValueAccessor { value: number[] tags: PaperlessTag[] - + public createTagRef: (name) => void + private _lastSearchTerm: string + getTag(id) { if (this.tags) { return this.tags.find(tag => tag.id == id) @@ -81,6 +83,7 @@ export class TagsComponent implements OnInit, ControlValueAccessor { var modal = this.modalService.open(TagEditDialogComponent, {backdrop: 'static'}) modal.componentInstance.dialogMode = 'create' if (name) modal.componentInstance.object = { name: name } + else if (this._lastSearchTerm) modal.componentInstance.object = { name: this._lastSearchTerm } modal.componentInstance.success.subscribe(newTag => { this.tagService.listAll().subscribe(tags => { this.tags = tags.results @@ -103,4 +106,18 @@ export class TagsComponent implements OnInit, ControlValueAccessor { this.onChange(this.value) } + clearLastSearchTerm() { + this._lastSearchTerm = null + } + + onSearch($event) { + this._lastSearchTerm = $event.term + } + + onBlur() { + setTimeout(() => { + this.clearLastSearchTerm() + }, 3000); + } + } diff --git a/src-ui/src/styles.scss b/src-ui/src/styles.scss index 8c48dcddc..34f575a05 100644 --- a/src-ui/src/styles.scss +++ b/src-ui/src/styles.scss @@ -77,6 +77,8 @@ body { .ng-select-container { height: 100%; + border-top-right-radius: 0; + border-bottom-right-radius: 0; .ng-value-container .ng-input { top: 10px; From f86c50023978db3fe0c625193b39b5b644f94a48 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 4 Apr 2021 19:57:16 -0700 Subject: [PATCH 699/898] Refactor unneeded ngIf --- .../common/input/select/select.component.html | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 1bcdeda84..0ae3009ea 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -1,13 +1,13 @@ <div class="form-group paperless-input-select"> <label [for]="inputId">{{title}}</label> <div [class.input-group]="allowCreateNew"> - <ng-select *ngIf="allowCreateNew; else noAddTag" name="inputId" [(ngModel)]="value" + <ng-select name="inputId" [(ngModel)]="value" [disabled]="disabled" [style.color]="textColor" [style.background]="backgroundColor" [clearable]="allowNull" [items]="items" - [addTag]="addItemRef" + [addTag]="allowCreateNew && addItemRef" bindLabel="name" bindValue="id" (change)="onChange(value)" @@ -16,22 +16,6 @@ (clear)="clearLastSearchTerm()" (blur)="onBlur()"> </ng-select> - <ng-template #noAddTag> - <ng-select name="inputId" [(ngModel)]="value" - [disabled]="disabled" - [style.color]="textColor" - [style.background]="backgroundColor" - [clearable]="allowNull" - [items]="items" - bindLabel="name" - bindValue="id" - (change)="onChange(value)" - (search)="onSearch($event)" - (focus)="clearLastSearchTerm()" - (clear)="clearLastSearchTerm()" - (blur)="onBlur()"> - </ng-select> - </ng-template> <div *ngIf="allowCreateNew" class="input-group-append"> <button class="btn btn-outline-secondary" type="button" (click)="addItem()"> <svg class="buttonicon" fill="currentColor"> From 5ba48c1ac53b4555478d82c9df71f3d04b9ad008 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:05:32 +0200 Subject: [PATCH 700/898] bugfix --- .../document-list/filter-editor/filter-editor.component.html | 3 +-- .../document-list/filter-editor/filter-editor.component.ts | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html index 490eed95d..1fbe53d67 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html @@ -8,8 +8,7 @@ <button *ngFor="let t of textFilterTargets" ngbDropdownItem [class.active]="textFilterTarget == t.id" (click)="changeTextFilterTarget(t.id)">{{t.name}}</button> </div> </div> - <input class="form-control form-control-sm" type="text" [(ngModel)]="textFilter" *ngIf="textFilterTarget != 'fulltext-morelike'"> - <span class="form-control form-control-sm text-truncate" *ngIf="textFilterTarget == 'fulltext-morelike'">{{_moreLikeDoc?.title}}</span> + <input class="form-control form-control-sm" type="text" [(ngModel)]="textFilter" [readonly]="textFilterTarget == 'fulltext-morelike'"> </div> </div> </div> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index c1fd8536f..a4463a64b 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -159,6 +159,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this.textFilterTarget = TEXT_FILTER_TARGET_FULLTEXT_MORELIKE this.documentService.get(this._moreLikeId).subscribe(result => { this._moreLikeDoc = result + this._textFilter = result.title }) break case FILTER_CREATED_AFTER: @@ -325,6 +326,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { } changeTextFilterTarget(target) { + if (this.textFilterTarget == TEXT_FILTER_TARGET_FULLTEXT_MORELIKE && target != TEXT_FILTER_TARGET_FULLTEXT_MORELIKE) { + this._textFilter = "" + } this.textFilterTarget = target this.updateRules() } From f78a8761dfa96d55c64f1d9573931d8686141235 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:33:04 +0200 Subject: [PATCH 701/898] fixed the write permission check --- src/paperless/checks.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/paperless/checks.py b/src/paperless/checks.py index 0d11d8a90..1b19f1a72 100644 --- a/src/paperless/checks.py +++ b/src/paperless/checks.py @@ -23,9 +23,12 @@ def path_check(var, directory): exists_hint.format(directory) )) else: - test_file = os.path.join(directory, '__paperless_write_test__') + test_file = os.path.join( + directory, f'__paperless_write_test_{os.getpid()}__' + ) try: - open(test_file, 'w') + with open(test_file, 'w'): + pass except PermissionError: messages.append(Error( writeable_message.format(var), @@ -33,8 +36,9 @@ def path_check(var, directory): f'\n{stat.filemode(os.stat(directory).st_mode)} ' f'{directory}\n') )) - else: - os.remove(test_file) + finally: + if os.path.isfile(test_file): + os.remove(test_file) return messages From 05545aa59be34a9c04ed5dec61604e81087877f7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:33:17 +0200 Subject: [PATCH 702/898] force update of search index if out of date --- docker/docker-entrypoint.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 5919b14aa..cf6129438 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -68,6 +68,17 @@ migrations() { } +search_index() { + index_version=1 + index_version_file=/usr/src/paperless/data/.index_version + + if [[ (! -f "$index_version_file") || $(< $index_version_file) != "$index_version" ]]; then + echo "Search index out of date. Updating..." + sudo -HEu paperless python3 manage.py document_index reindex + echo $index_version | sudo -HEu paperless tee $index_version_file >/dev/null + fi +} + initialize() { map_uidgid @@ -87,6 +98,7 @@ initialize() { migrations + search_index } install_languages() { From 7b809ae8c1b31a8e2ec3888a73d73024454c524f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:42:41 +0200 Subject: [PATCH 703/898] focus text filter input automatically --- .../filter-editor/filter-editor.component.html | 2 +- .../document-list/filter-editor/filter-editor.component.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html index 1fbe53d67..c61f36c3f 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html @@ -8,7 +8,7 @@ <button *ngFor="let t of textFilterTargets" ngbDropdownItem [class.active]="textFilterTarget == t.id" (click)="changeTextFilterTarget(t.id)">{{t.name}}</button> </div> </div> - <input class="form-control form-control-sm" type="text" [(ngModel)]="textFilter" [readonly]="textFilterTarget == 'fulltext-morelike'"> + <input #textFilterInput class="form-control form-control-sm" type="text" [(ngModel)]="textFilter" [readonly]="textFilterTarget == 'fulltext-morelike'"> </div> </div> </div> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index a4463a64b..777c92e07 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, Output, OnInit, OnDestroy } from '@angular/core'; +import { Component, EventEmitter, Input, Output, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import { PaperlessTag } from 'src/app/data/paperless-tag'; import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'; import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'; @@ -72,6 +72,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { private documentService: DocumentService ) { } + @ViewChild("textFilterInput") + textFilterInput: ElementRef + tags: PaperlessTag[] = [] correspondents: PaperlessCorrespondent[] = [] documentTypes: PaperlessDocumentType[] = [] @@ -330,6 +333,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy { this._textFilter = "" } this.textFilterTarget = target + this.textFilterInput.nativeElement.focus() this.updateRules() } } From b251b0e455127e862d358079b7ba5ab63ec552db Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:44:14 +0200 Subject: [PATCH 704/898] New Crowdin updates (#855) --- src-ui/src/locale/messages.cs_CZ.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.de_DE.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.en_GB.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.es_ES.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.fr_FR.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.hu_HU.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.it_IT.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.nl_NL.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.pt_BR.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.pt_PT.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.ro_RO.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.ru_RU.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.xh_ZA.xlf | 190 +++++++++++++-------------- src-ui/src/locale/messages.zh_CN.xlf | 190 +++++++++++++-------------- 14 files changed, 1330 insertions(+), 1330 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index c24654569..335046a73 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Dokumenty</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="needs-translation">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="needs-translation">Correspondent</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="needs-translation">Title</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="needs-translation">Document type</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="needs-translation">Created</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="needs-translation">Added</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="needs-translation">Confirm delete</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="needs-translation">Delete document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="needs-translation">Edit document type</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="needs-translation">Search results</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="needs-translation">Close all</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="needs-translation">Title</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="needs-translation">Title & content</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="needs-translation">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="needs-translation">Without document type</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="needs-translation">Without any tag</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="needs-translation">Score:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="needs-translation">Invalid date.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 1d7a3e918..9047251ef 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Dokumente</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Ansicht "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" erfolgreich gespeichert.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Ansicht "<x id="PH" equiv-text="savedView.name"/>" erfolgreich erstellt.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Korrespondent</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Titel</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Dokumenttyp</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Ausgestellt</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Hinzugefügt</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Löschen bestätigen</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Möchten Sie das Dokument "<x id="PH" equiv-text="this.document.title"/>" wirklich löschen?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Dokument löschen</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Fehler beim Löschen des Dokuments: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Dokumenttyp bearbeiten</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Suchergebnisse</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Ungültige Suchanfrage: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Zeige ähnliche Dokumente zu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Suchanfrage: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Meinten Sie "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Keine Ergebnisse} =1 {Ein Ergebnis} other {<x id="INTERPOLATION"/> Ergebnisse}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Alle schließen</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Titel</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Titel & Inhalt</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Korrespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Ohne Korrespondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Typ: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Ohne Dokumenttyp</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Ohne Tag</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Titel</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Titel & Inhalt</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="translated">Erweiterte Suche</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Ähnlich zu</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Relevanz:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Ausgestellt: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Hinzugefügt: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Geändert: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Ungültiges Datum.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Dokument mit ASN <x id="INTERPOLATION" equiv-text="{{asn}}"/> wird gesucht</target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 060411de2..a8d967b9e 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documents</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Correspondent</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Title</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Document type</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Created</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Added</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Confirm delete</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Delete document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Edit document type</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Search results</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Close all</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Title</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Title & content</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Without correspondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Without document type</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Without any tag</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Title & content</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Score:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Invalid date.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index b743b8a83..f0ba5e8a6 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documentos</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Ver "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" guardado satisfactoriamente.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Ver "<x id="PH" equiv-text="savedView.name"/>" creado satisfactoriamente.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Tipo de documento</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Tipo de documento</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Creado</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Aggregado</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Confirmar borrado</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">¿Estás seguro de querer borrar el documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Los archivos para este documento serán borrados permanentemente. Esta operación no se puede deshacer.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Borrar documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Error borrando el documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Editar tipo de documento</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Resultados de la busqueda</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Cadena de búsqueda no valida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Mostrando documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Cadena de búsqueda: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">¿Quizás quisiste decir "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Sin resultados} =1 {Un resultado} other {<x id="INTERPOLATION"/> resultados}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Cerrar todos</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Título</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Titulo y contenido</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">NSF</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Sin tipo de documento</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Sin tipo de documento</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Sin ninguna etiqueta</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Título</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Titulo y contenido</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">NSF</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Puntuación:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Fecha no válida.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index d3103a6ad..6d325e6d4 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documents</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Vue "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" enregistrée avec succès.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Vue "<x id="PH" equiv-text="savedView.name"/>" créée avec succès.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Correspondant</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Titre</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Type de document</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Date de création</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Date d'ajout</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Confirmer la suppression</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Voulez-vous vraiment supprimer le document "<x id="PH" equiv-text="this.document.title"/>" ?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Les fichiers liés à ce document seront supprimés définitivement. Cette action est irréversible.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Supprimer le document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Une erreur s'est produite lors de la suppression du document : <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Éditer le type de document</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Résultats de la recherche</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Requête de recherche invalide : <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Présentation des documents similaires à <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Requête de recherche : <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Vouliez-vous dire "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>" ?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Aucun résultat} =1 {Un résultat} other {<x id="INTERPOLATION"/> résultats}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Fermer tout</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Titre</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Titre & contenu</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">NSA</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Correspondant : <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Sans correspondant</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Type : <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Sans type de document</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Étiquette : <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Sans étiquette</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Titre : <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">NSA : <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Titre</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Titre & contenu</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">NSA</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Score :</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Date incorrecte.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 218e4fa98..57a95252b 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Dokumentumok</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Nézet "<x id="PH" equiv-text="savedView.name"/>" sikeresen létrehozva.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Partner</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Cím</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Dokumentum típus</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Létrehozva</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Hozzáadva</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Törlés megerősítése</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">A dokumentumhoz tartozó fájlok véglegesen törlésre kerülnek. Ez a művelet nem visszafordítható.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Dokumentum törlése</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Dokumentum típus szerkesztése</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Találatok</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Érvénytelen keresési kifejezés: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Keresés: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Úgy értetted, hogy "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Összes bezárása</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Cím</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="needs-translation">Title & content</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Partner: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Típus: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="needs-translation">Without document type</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Cimke: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="needs-translation">Without any tag</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Cím</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Pont:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="needs-translation">Invalid date.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index c41ed083d..51ad7370f 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documenti</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">La vista "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" è stata salvata.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">La vista "<x id="PH" equiv-text="savedView.name"/>" è stata creata.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Corrispondente</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Titolo</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Tipo di documento</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Creato</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Aggiunto</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Conferma eliminazione</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Vuoi eliminare il documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">I file di questo documento saranno eliminati permanentemente. Questa operazione è irreversibile.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Elimina documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Errore nell'eliminazione del documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Modifica tipo di documento</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Risultati della ricerca</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Query di ricerca non valida: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Documenti simili a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Query di ricerca: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Forse intendevi "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Nessun risultato} =1 {Un risultato} other {<x id="INTERPOLATION"/> risultati}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Chiudi tutti</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Titolo</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Titolo & contenuto</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Corrispondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Senza corrispondente</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Senza tipo di documento</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Senza alcun tag</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Titolo: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Titolo</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Titolo & contenuto</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="translated">Ricerca avanzata</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Più come</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Punteggio:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Creato il: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Aggiunto il: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Modificato il: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Data non valida.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Cercando documento con asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index c187fc531..cf67a9c80 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documenten</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" met succes opgeslagen.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">View "<x id="PH" equiv-text="savedView.name"/>" met succes gemaakt.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Correspondent</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Titel</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Documenttype</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Aangemaakt</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Toegevoegd</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Bevestig het verwijderen</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Wilt u het document echt verwijderen "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">De bestanden voor dit document worden definitief verwijderd. Deze bewerking kan niet ongedaan worden gemaakt.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Verwijder document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Fout bij het verwijderen van het document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Documenttype bewerken</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Zoekresultaten</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Ongeldige zoekopdracht: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Toon documenten die lijken op <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Zoekopdracht: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Bedoelde u "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Geen resultaten} =1 {Eén resultaat} other {<x id="INTERPOLATION"/> resultaten}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Alles sluiten</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Titel</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Titel en inhoud</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Zonder correspondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Zonder documenttype</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Etiket: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Zonder enig etiket</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Titel</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Titel en inhoud</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Score:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Ongeldige datum.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index c95ae9670..946173aad 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documentos</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Visualização "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" salva com sucesso.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Visualização "<x id="PH" equiv-text="savedView.name"/>" criada com sucesso.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Correspondente</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Tipo de Documento</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Criado</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Adicionado</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Confirmar exclusão</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Você realmente deseja excluir o documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Excluir documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Erro ao excluir documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Editar tipo de documento</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Resultados da busca</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Termo de pesquisa inválido: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Exibindo documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Termo de pesquisa: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Você quis dizer "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Fechar todos</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Título</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Título & conteúdo</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">NSA</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Correspondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Sem correspondente</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Sem tipo de documento</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Sem etiquetas</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Título</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Título & conteúdo</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">NSA</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Nota:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Data inválida.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 1059654f9..2c4d6d543 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documentos</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Visualização "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" salva com sucesso.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Visualização "<x id="PH" equiv-text="savedView.name"/>" criada com sucesso.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Correspondente</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Tipo de Documento</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Criado</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Adicionado</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Confirmar exclusão</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Você realmente deseja excluir o documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Excluir documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Erro ao excluir documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Editar tipo de documento</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Resultados da pesquisa</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Termo de pesquisa inválido: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Mostrar documentos similares a <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Termo de pesquisa: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Será que quer dizer "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, one {} =0 {Sem resultados} =1 {Um resultado} other {<x id="INTERPOLATION"/> resultados}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Fechar todos</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Título</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Título & conteúdo</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">NSA</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Correspondente: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Sem correspondente</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Tipo: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Sem tipo de documento</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Etiqueta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Sem etiquetas</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Título: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">NSA: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Título</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Título & conteúdo</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">NSA</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="translated">Pesquisa avançada</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Mais semelhante</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Pontuação:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Criado em: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Adicionado a: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Modificado a: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Data inválida.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">À procura do documento com nsa <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 4f45f3625..0eb8c72ac 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Documente</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Vizualizarea "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" a fost salvată.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Vizualizarea "<x id="PH" equiv-text="savedView.name"/>" a fost creată.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">Aviz prealabil de expediție</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Corespondent</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Titlu</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Tipul documentului</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Creat</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Adăugat</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Confirmă ștergerea</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Sunteţi sigur că doriţi să ştergeţi documentul "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Fișierele pentru acest document vor fi șterse permanent. Operațiunea este ireversibila.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Șterge document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Eroare la ștergerea documentului: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Modifică un tip de document</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Rezultatele căutarii</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Interogare invalidă: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Documente similare cu <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Interogare: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Ați vrut să scrieți "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Niciun rezultat} =1 {Un rezultat} other {<x id="INTERPOLATION"/> rezultate}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Închide tot</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Titlu</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Titlu si conținut</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">Aviz prealabil de expediție</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Corespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Fără corespondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Tip: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Fară tip</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Eticheta: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Fară etichete</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Titlu: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">Aviz prealabil de expediție: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Titlu</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Titlu si conținut</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Aviz prealabil de expediție</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Scor:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Data invalidă.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index c2736233c..c0b9f8eff 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">Документы</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="translated">Представление "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" успешно сохранено.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="translated">Представление "<x id="PH" equiv-text="savedView.name"/>" успешно создано.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="translated">Архивный номер</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="translated">Корреспондент</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="translated">Название</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="translated">Тип документа</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="translated">Создано</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="translated">Добавлено</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="translated">Подтвердите удаление</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="translated">Вы действительно хотите удалить документ "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Файлы из этого документа будут удалены незамедлительно. Это операцию нельзя отменить.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Удалить документ</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="translated">Ошибка удаления документа: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="translated">Редактировать тип документа</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="translated">Результаты поиска</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="translated">Неверный поисковой запрос: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="translated">Показываю документы похожие на <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="translated">Поисковый запрос: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="translated">Может вы имели ввиду "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="translated">{VAR_PLURAL, plural, =0 {Нет результатов} =1 {Один результат} other {Результаты: <x id="INTERPOLATION"/>}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="translated">Закрыть всё</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="translated">Заголовок</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="translated">Название и содержимое</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="translated">АН</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="translated">Корреспондент: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="translated">Без корреспондента</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="translated">Тип: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="translated">Без типа документа</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="translated">Тег: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="translated">Без тегов</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="translated">Название: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="translated">Архивный номер: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Заголовок</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Название и содержимое</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">АН</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="translated">Расширенный поиск</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Больше похожих</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="translated">Оценка:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Создано: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Добавлено: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Изменено: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="translated">Неверная дата.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Поиск документа с asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index 2d759ed8a..d9f1f631c 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target>crwdns2850:0crwdne2850:0</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target>crwdns2852:0crwdne2852:0</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target>crwdns2854:0crwdne2854:0</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target>crwdns2878:0crwdne2878:0</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target>crwdns2880:0crwdne2880:0</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target>crwdns2882:0crwdne2882:0</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target>crwdns2884:0crwdne2884:0</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target>crwdns2886:0crwdne2886:0</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target>crwdns2888:0crwdne2888:0</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target>crwdns2890:0crwdne2890:0</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target>crwdns2892:0crwdne2892:0</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target>crwdns2894:0crwdne2894:0</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target>crwdns2896:0crwdne2896:0</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target>crwdns2898:0crwdne2898:0</target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target>crwdns3096:0crwdne3096:0</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target>crwdns3098:0crwdne3098:0</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target>crwdns3100:0{{errorMessage}}crwdne3100:0</target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target>crwdns3406:0{{more_like}}crwdnd3406:0{{more_like_doc?.original_file_name}}crwdnd3406:0{{more_like_doc?.original_file_name}}crwdne3406:0</target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target>crwdns3104:0{{query}}crwdnd3104:0{{query}}crwdne3104:0</target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target>crwdns3106:0[routerLink]crwdnd3106:0{{correctedQuery}}crwdnd3106:0{{correctedQuery}}crwdne3106:0</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target>crwdns3108:0VAR_PLURAL={VAR_PLURAL}crwdne3108:0</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target>crwdns3132:0crwdne3132:0</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target>crwdns3134:0crwdne3134:0</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target>crwdns3136:0crwdne3136:0</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target>crwdns3354:0crwdne3354:0</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target>crwdns3138:0crwdne3138:0</target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target>crwdns3140:0crwdne3140:0</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target>crwdns3142:0crwdne3142:0</target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target>crwdns3144:0crwdne3144:0</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target>crwdns3146:0crwdne3146:0</target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target>crwdns3148:0crwdne3148:0</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target>crwdns3150:0crwdne3150:0</target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target>crwdns3416:0crwdne3416:0</target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target>crwdns3134:0crwdne3134:0</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target>crwdns3136:0crwdne3136:0</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target>crwdns3354:0crwdne3354:0</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target>crwdns3434:0crwdne3434:0</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target>crwdns3436:0crwdne3436:0</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target>crwdns3186:0crwdne3186:0</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target>crwdns3426:0{{ document.created | customDate}}crwdne3426:0</target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target>crwdns3428:0{{ document.added | customDate}}crwdne3428:0</target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target>crwdns3430:0{{ document.modified | customDate}}crwdne3430:0</target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target>crwdns3298:0crwdne3298:0</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target>crwdns3432:0{{asn}}crwdne3432:0</target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index a40acabe4..5f21489b4 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -54,7 +54,7 @@ <source>Documents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">49</context> + <context context-type="linenumber">51</context> </context-group> <target state="translated">文件</target> </trans-unit> @@ -62,7 +62,7 @@ <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">115</context> + <context context-type="linenumber">116</context> </context-group> <target state="needs-translation">View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</target> </trans-unit> @@ -70,7 +70,7 @@ <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> - <context context-type="linenumber">136</context> + <context context-type="linenumber">138</context> </context-group> <target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</target> </trans-unit> @@ -166,7 +166,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">105</context> + <context context-type="linenumber">111</context> </context-group> <target state="needs-translation">ASN</target> </trans-unit> @@ -174,7 +174,7 @@ <source>Correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">111</context> + <context context-type="linenumber">117</context> </context-group> <target state="needs-translation">Correspondent</target> </trans-unit> @@ -182,7 +182,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">117</context> + <context context-type="linenumber">123</context> </context-group> <target state="needs-translation">Title</target> </trans-unit> @@ -190,7 +190,7 @@ <source>Document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">123</context> + <context context-type="linenumber">129</context> </context-group> <target state="needs-translation">Document type</target> </trans-unit> @@ -198,7 +198,7 @@ <source>Created</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">129</context> + <context context-type="linenumber">135</context> </context-group> <target state="needs-translation">Created</target> </trans-unit> @@ -206,7 +206,7 @@ <source>Added</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> - <context context-type="linenumber">135</context> + <context context-type="linenumber">141</context> </context-group> <target state="needs-translation">Added</target> </trans-unit> @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">203</context> + <context context-type="linenumber">204</context> </context-group> <target state="needs-translation">Confirm delete</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">205</context> </context-group> <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">206</context> </context-group> <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">207</context> + <context context-type="linenumber">208</context> </context-group> <target state="needs-translation">Delete document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">214</context> + <context context-type="linenumber">215</context> </context-group> <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1042,54 +1042,6 @@ </context-group> <target state="needs-translation">Edit document type</target> </trans-unit> - <trans-unit id="49c9ede51100b454f7841b24cd02355c6622bf44" datatype="html"> - <source>Search results</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">1</context> - </context-group> - <target state="needs-translation">Search results</target> - </trans-unit> - <trans-unit id="31976d04f98e8a38098f66ac3a83ad33b576e5db" datatype="html"> - <source>Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">4</context> - </context-group> - <target state="needs-translation">Invalid search query: <x id="INTERPOLATION" equiv-text="{{errorMessage}}"/></target> - </trans-unit> - <trans-unit id="f7f2e30106223a69bcf0f8e586e6be9dc4e72226" datatype="html"> - <source>Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">6</context> - </context-group> - <target state="needs-translation">Showing documents similar to <x id="START_LINK" equiv-text="<a routerLink="/documents/{{more_like}}">{{more_like_doc?.original_file_name}}"/><x id="INTERPOLATION" equiv-text="{{more_like_doc?.original_file_name}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/></target> - </trans-unit> - <trans-unit id="6e0b0a1ea16f18f2fb1586c53d99d2f22e1aee2e" datatype="html"> - <source>Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">9</context> - </context-group> - <target state="needs-translation">Search query: <x id="START_ITALIC_TEXT" equiv-text="<i>{{query}}"/><x id="INTERPOLATION" equiv-text="{{query}}</i>"/><x id="CLOSE_ITALIC_TEXT" equiv-text="</i>"/></target> - </trans-unit> - <trans-unit id="afa760e48c97d64d19c1455d18b7834a2256e23f" datatype="html"> - <source>Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">11</context> - </context-group> - <target state="needs-translation">Did you mean "<x id="START_LINK" equiv-text="<a [routerLink]="" (click)="searchCorrectedQuery()">{{correctedQuery}}"/><x id="INTERPOLATION" equiv-text="{{correctedQuery}}</a>"/><x id="CLOSE_LINK" equiv-text="</a>"/>"?</target> - </trans-unit> - <trans-unit id="fe6ced3fcc803bba5a2e6c1a067b9ce62542500e" datatype="html"> - <source>{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/search/search.component.html</context> - <context context-type="linenumber">16</context> - </context-group> - <target state="needs-translation">{VAR_PLURAL, plural, =0 {No results} =1 {One result} other {<x id="INTERPOLATION"/> results}}</target> - </trans-unit> <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> <source>Paperless-ng</source> <context-group purpose="location"> @@ -1187,35 +1139,11 @@ </context-group> <target state="needs-translation">Close all</target> </trans-unit> - <trans-unit id="5701618810648052610" datatype="html"> - <source>Title</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">77</context> - </context-group> - <target state="needs-translation">Title</target> - </trans-unit> - <trans-unit id="3100631071441658964" datatype="html"> - <source>Title & content</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">78</context> - </context-group> - <target state="needs-translation">Title & content</target> - </trans-unit> - <trans-unit id="7517688192215738656" datatype="html"> - <source>ASN</source> - <context-group purpose="location"> - <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">79</context> - </context-group> - <target state="needs-translation">ASN</target> - </trans-unit> <trans-unit id="5195932016807797291" datatype="html"> <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">33</context> + <context context-type="linenumber">37</context> </context-group> <target state="needs-translation">Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> </trans-unit> @@ -1223,7 +1151,7 @@ <source>Without correspondent</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">39</context> </context-group> <target state="needs-translation">Without correspondent</target> </trans-unit> @@ -1231,7 +1159,7 @@ <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">40</context> + <context context-type="linenumber">44</context> </context-group> <target state="needs-translation">Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> </trans-unit> @@ -1239,7 +1167,7 @@ <source>Without document type</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">42</context> + <context context-type="linenumber">46</context> </context-group> <target state="needs-translation">Without document type</target> </trans-unit> @@ -1247,7 +1175,7 @@ <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">46</context> + <context context-type="linenumber">50</context> </context-group> <target state="needs-translation">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> @@ -1255,7 +1183,7 @@ <source>Without any tag</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">50</context> + <context context-type="linenumber">54</context> </context-group> <target state="needs-translation">Without any tag</target> </trans-unit> @@ -1263,7 +1191,7 @@ <source>Title: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">54</context> + <context context-type="linenumber">58</context> </context-group> <target state="needs-translation">Title: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> @@ -1271,10 +1199,50 @@ <source>ASN: <x id="PH" equiv-text="rule.value"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">57</context> + <context context-type="linenumber">61</context> </context-group> <target state="needs-translation">ASN: <x id="PH" equiv-text="rule.value"/></target> </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="needs-translation">Title</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="needs-translation">Title & content</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="needs-translation">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="needs-translation">Advanced search</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="needs-translation">More like</target> + </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> @@ -1408,10 +1376,34 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">66</context> + <context context-type="linenumber">86</context> </context-group> <target state="needs-translation">Score:</target> </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> <context-group purpose="location"> @@ -1857,6 +1849,14 @@ </context-group> <target state="needs-translation">Invalid date.</target> </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> <context-group purpose="location"> From 1a376dbc41d68628ff3bc57b5ccc7f1d1f4b650c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:53:07 +0200 Subject: [PATCH 705/898] fix some issues with the search index --- src/documents/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index 6fdcff42f..6cd136d80 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -29,7 +29,7 @@ def get_schema(): sortable=True ), content=TEXT(), - archive_serial_number=NUMERIC( + asn=NUMERIC( sortable=True ), @@ -122,7 +122,7 @@ def update_document(writer, doc): has_type=doc.document_type is not None, created=doc.created, added=doc.added, - archive_serial_number=doc.archive_serial_number, + asn=doc.archive_serial_number, modified=doc.modified, ) From 8ee502a134fba87adcc94ee3f9bcd8fd28dcb2d4 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 22:05:26 +0200 Subject: [PATCH 706/898] update messages --- src/locale/en_US/LC_MESSAGES/django.po | 64 +++++++++++++++----------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 2a17fd9ae..1c7cc5977 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\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" @@ -230,7 +230,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "" @@ -254,103 +254,111 @@ msgstr "" msgid "sort field" msgstr "" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "" @@ -452,7 +460,7 @@ msgstr "" msgid "Spanish" msgstr "" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" From f31fb127a6aedf2d34d65ef03aee764946bccb48 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 22:19:42 +0200 Subject: [PATCH 707/898] API search documentation --- docs/api.rst | 112 ++++++++++++++-------------------------- docs/usage_overview.rst | 2 + 2 files changed, 40 insertions(+), 74 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index c2120b20f..3a9d244c5 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -147,93 +147,57 @@ The REST api provides three different forms of authentication. Searching for documents ####################### -Paperless-ng offers API endpoints for full text search. These are as follows: +Full text searching is available on the ``/api/documents/`` endpoint. Two specific +query parameters cause the API to return full text search results: -``/api/search/`` -================ +* ``/api/documents/?query=your%20search%20query``: Search for a document using a full text query. + For details on the syntax, see :ref:`basic-usage_searching`. -Get search results based on a query. +* ``/api/documents/?more_like=1234``: Search for documents similar to the document with id 1234. -Query parameters: +Pagination works exactly the same as it does for normal requests on this endpoint. -* ``query``: The query string. See - `here <https://whoosh.readthedocs.io/en/latest/querylang.html>`_ - for details on the syntax. -* ``page``: Specify the page you want to retrieve. Each page - contains 10 search results and the first page is ``page=1``, which - is the default if this is omitted. +Certain limitations apply to full text queries: -Result list object returned by the endpoint: +* Results are always sorted by search score. The results matching the query best will show up first. -.. code:: json +* Only a small subset of filtering parameters are supported. + +Furthermore, each returned document has an additional ``__search_hit__`` attribute with various information +about the search results: + +.. code:: { - "count": 1, - "page": 1, - "page_count": 1, - "corrected_query": "", + "count": 31, + "next": "http://localhost:8000/api/documents/?page=2&query=test", + "previous": null, "results": [ + ... + + { + "id": 123, + "title": "title", + "content": "content", + + ... + + "__search_hit__": { + "score": 0.343, + "highlights": "text <span class=\"match\">Test</span> text", + "rank": 23 + } + }, + + ... + ] } -* ``count``: The approximate total number of results. -* ``page``: The page returned to you. This might be different from - the page you requested, if you requested a page that is behind - the last page. In that case, the last page is returned. -* ``page_count``: The total number of pages. -* ``corrected_query``: Corrected version of the query string. Can be null. - If not null, can be used verbatim to start a new query. -* ``results``: A list of result objects on the current page. - -Result object: - -.. code:: json - - { - "id": 1, - "highlights": [ - - ], - "score": 6.34234, - "rank": 23, - "document": { - - } - } - -* ``id``: the primary key of the found document -* ``highlights``: an object containing parsable highlights for the result. - See below. -* ``score``: The score assigned to the document. A higher score indicates a - better match with the query. Search results are sorted descending by score. -* ``rank``: the position of the document within the entire search results list. -* ``document``: The full json of the document, as returned by - ``/api/documents/<id>/``. - -Highlights object: - -Highlights are provided as a list of fragments. A fragment is a longer section of -text from the original document. -Each fragment contains a list of strings, and some of them are marked as a highlight. - -.. code:: json - - [ - [ - {"text": "This is a sample text with a ", "highlight": false}, - {"text": "highlighted", "highlight": true}, - {"text": " word.", "highlight": false} - ], - [ - {"text": "Another", "highlight": true}, - {"text": " fragment with a highlight.", "highlight": false} - ] - ] - -A client may use this example to produce the following output: - -... This is a sample text with a **highlighted** word. ... **Another** fragment with a highlight. ... +* ``score`` is an indication how well this document matches the query relative to the other search results. +* ``highlights`` is an excerpt from the document content and highlights the search terms with ``<span>`` tags as shown above. +* ``rank`` is the index of the search results. The first result will have rank 0. ``/api/search/autocomplete/`` ============================= diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst index 2c7093b99..7283db02f 100644 --- a/docs/usage_overview.rst +++ b/docs/usage_overview.rst @@ -255,6 +255,8 @@ Here are a couple examples of tags and types that you could use in your collecti * A tag ``missing_metadata`` when you still need to add some metadata to a document, but can't or don't want to do this right now. +.. _basic-usage_searching: + Searching ######### From c85a66c9c35e95c2c28286711c7746f8a8801a76 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Apr 2021 22:23:11 +0200 Subject: [PATCH 708/898] changelog --- docs/changelog.rst | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index ba2bddc25..454f912f5 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -23,10 +23,30 @@ paperless-ng 1.4.0 * Updated python dependencies. + * Automatically inserts typed text when opening "Create new" dialogs on the document details page. + * Fixes * Fixed an issue with null characters in the document content. +.. note:: + + The changed to the full text searching require you to reindex your documents. + *The docker image does this automatically, you don't need to do anything.* + To do this, execute the ``document_index reindex`` management command + (see :ref:`administration-index`). + +.. note:: + + Some packages that paperless depends on are slowly dropping Python 3.6 + support one after another, including the web server. Supporting Python + 3.6 means that I cannot update these packages anymore. + + At some point, paperless will drop Python 3.6 support. If using a bare + metal installation and you're still on Python 3.6, upgrade to 3.7 or newer. + + If using docker, this does not affect you. + paperless-ng 1.3.2 ################## @@ -130,17 +150,6 @@ paperless-ng 1.2.0 * Paperless no longer depends on ``libpoppler-cpp-dev``. -.. note:: - - Some packages that paperless depends on are slowly dropping Python 3.6 - support one after another, including the web server. Supporting Python - 3.6 means that I cannot update these packages anymore. - - At some point, paperless will drop Python 3.6 support. If using a bare - metal installation and you're still on Python 3.6, upgrade to 3.7 or newer. - - If using docker, this does not affect you. - paperless-ng 1.1.4 ################## From 65ac2c08eaef7f48f3743af6c1fcdbd474a5ea2d Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 5 Apr 2021 16:35:15 -0700 Subject: [PATCH 709/898] Updated to work with new unified search interface --- .../filter-editor/filter-editor.component.ts | 5 ++++- src-ui/src/app/services/rest/document.service.ts | 15 +++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index b693c55ec..23c3d810a 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -290,9 +290,12 @@ export class FilterEditorComponent implements OnInit, OnDestroy { distinctUntilChanged() ).subscribe(text => { this._textFilter = text - this.documentService.setSearchQuery(text) + this.documentService.searchQuery = text this.updateRules() }) + + if (this._textFilter) this.documentService.searchQuery = this._textFilter + } ngOnDestroy() { diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index 40a400f0c..712b0492f 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -12,7 +12,6 @@ import { DocumentTypeService } from './document-type.service'; import { TagService } from './tag.service'; import { FILTER_RULE_TYPES } from 'src/app/data/filter-rule-type'; import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions'; -import { ActivatedRoute } from '@angular/router'; export const DOCUMENT_SORT_FIELDS = [ { field: 'archive_serial_number', name: $localize`ASN` }, @@ -40,14 +39,10 @@ export interface SelectionData { }) export class DocumentService extends AbstractPaperlessService<PaperlessDocument> { - private searchQuery: string + private _searchQuery: string - constructor(http: HttpClient, private correspondentService: CorrespondentService, private documentTypeService: DocumentTypeService, private tagService: TagService, private route: ActivatedRoute) { + constructor(http: HttpClient, private correspondentService: CorrespondentService, private documentTypeService: DocumentTypeService, private tagService: TagService) { super(http, 'documents') - - this.route.queryParamMap.subscribe(paramMap => { - this.searchQuery = paramMap.get('query') - }) } private filterRulesToQueryParams(filterRules: FilterRule[]) { @@ -99,7 +94,7 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> getPreviewUrl(id: number, original: boolean = false): string { let url = this.getResourceUrl(id, 'preview') - if (this.searchQuery) url += `#search="${this.searchQuery}"` + if (this._searchQuery) url += `#search="${this._searchQuery}"` if (original) { url += "?original=true" } @@ -146,8 +141,8 @@ export class DocumentService extends AbstractPaperlessService<PaperlessDocument> return this.http.post(this.getResourceUrl(null, 'bulk_download'), {"documents": ids, "content": content}, { responseType: 'blob' }) } - public setSearchQuery(query: string) { - this.searchQuery = query + public set searchQuery(query: string) { + this._searchQuery = query } } From 84c0cc69761784258036bd1754771adceecb543d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 6 Apr 2021 20:23:18 +0200 Subject: [PATCH 710/898] New Crowdin updates (#871) --- src-ui/src/locale/messages.fr_FR.xlf | 12 ++--- src-ui/src/locale/messages.nl_NL.xlf | 14 +++--- src/locale/cs_CZ/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/de_DE/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/en_GB/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/es_ES/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/fr_FR/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/hu_HU/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/it_IT/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/nl_NL/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/pt_BR/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/pt_PT/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/ro_RO/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/ru_RU/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/xh_ZA/LC_MESSAGES/django.po | 66 +++++++++++++++----------- src/locale/zh_CN/LC_MESSAGES/django.po | 66 +++++++++++++++----------- 16 files changed, 531 insertions(+), 419 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 6d325e6d4..8ea2adb60 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">88</context> </context-group> - <target state="needs-translation">Advanced search</target> + <target state="translated">Recherche avancée</target> </trans-unit> <trans-unit id="2649431021108393503" datatype="html"> <source>More like</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">More like</target> + <target state="translated">Plus comme</target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + <target state="translated">Date de création : <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> </trans-unit> <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + <target state="translated">Date d'ajout : <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> </trans-unit> <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + <target state="translated">Date de modification : <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + <target state="translated">Recherche de document avec NSA <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index cf67a9c80..21d3e746d 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">88</context> </context-group> - <target state="needs-translation">Advanced search</target> + <target state="translated">Geavanceerd zoeken</target> </trans-unit> <trans-unit id="2649431021108393503" datatype="html"> <source>More like</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">More like</target> + <target state="translated">Meer zoals</target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + <target state="translated">Aangemaakt op: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> </trans-unit> <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + <target state="translated">Toegevoegd op: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> </trans-unit> <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + <target state="translated">Gewijzigd op: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Upload voltooid, klaar voor meer...</target> + <target state="translated">Upload voltooid, wachten om te verwerken...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + <target state="translated">Document zoeken met asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index 81c089a9c..f1721aec9 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:47\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -226,7 +226,7 @@ msgstr "záznam" msgid "logs" msgstr "záznamy" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "uložený pohled" @@ -250,103 +250,111 @@ msgstr "zobrazit v postranním menu" msgid "sort field" msgstr "pole na řazení" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "třídit opačně" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "titulek obsahuje" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "obsah obsahuje" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "ASN je" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "korespondent je" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "typ dokumentu je" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "je v příchozích" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "má tag" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "má jakýkoliv tag" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "vytvořeno před" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "vytvořeno po" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "rok vytvoření je" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "měsíc vytvoření je" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "den vytvoření je" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "přidáno před" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "přidáno po" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "upraveno před" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "upraveno po" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "nemá tag" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "typ pravidla" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "hodnota" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "filtrovací pravidlo" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "filtrovací pravidla" @@ -448,7 +456,7 @@ msgstr "" msgid "Spanish" msgstr "" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index fccea1562..125d2dc39 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-18 13:43\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -226,7 +226,7 @@ msgstr "Protokoll" msgid "logs" msgstr "Protokoll" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "Gespeicherte Ansicht" @@ -250,103 +250,111 @@ msgstr "In Seitenleiste zeigen" msgid "sort field" msgstr "Sortierfeld" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "Umgekehrte Sortierung" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "Titel enthält" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "Inhalt enthält" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "ASN ist" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "Korrespondent ist" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "Dokumenttyp ist" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "Ist im Posteingang" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "Hat Tag" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "Hat irgendein Tag" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "Ausgestellt vor" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "Ausgestellt nach" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "Ausgestellt im Jahr" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "Ausgestellt im Monat" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "Ausgestellt am Tag" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "Hinzugefügt vor" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "Hinzugefügt nach" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "Geändert vor" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "Geändert nach" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "Hat nicht folgendes Tag" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "Dokument hat keine ASN" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "Titel oder Inhalt enthält" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "Regeltyp" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "Wert" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "Filterregel" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "Filterregeln" @@ -448,7 +456,7 @@ msgstr "Russisch" msgid "Spanish" msgstr "Spanisch" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index d33b4fc32..927cc7990 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 22:42\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "logs" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "saved view" @@ -250,103 +250,111 @@ msgstr "show in sidebar" msgid "sort field" msgstr "sort field" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "sort reverse" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "title contains" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "content contains" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "document type is" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "is in inbox" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "has tag" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "has any tag" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "created before" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "created after" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "created year is" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "created month is" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "created day is" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "added before" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "added after" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modified before" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modified after" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "does not have tag" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "does not have ASN" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "title or content contains" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "rule type" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "value" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "filter rule" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "filter rules" @@ -448,7 +456,7 @@ msgstr "Russian" msgid "Spanish" msgstr "Spanish" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 8a157440b..8ae873b73 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:47\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "logs" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "vista guardada" @@ -250,103 +250,111 @@ msgstr "mostrar en barra lateral" msgid "sort field" msgstr "campo de ordenación" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "ordenar al revés" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "el titulo contiene" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "el contenido contiene" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "ASN es" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "tipo de documento es" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "el tipo de documento es" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "está en la bandeja de entrada" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "tiene la etiqueta" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "tiene cualquier etiqueta" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "creado antes" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "creado después" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "el año de creación es" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "el mes de creación es" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "creado el día" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "agregado antes de" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "agregado después de" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modificado después de" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modificado antes de" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "no tiene la etiqueta" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "no tiene ASN" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "el título o cuerpo contiene" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "tipo de regla" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "valor" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "regla de filtrado" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "reglas de filtrado" @@ -448,7 +456,7 @@ msgstr "Ruso" msgid "Spanish" msgstr "Español" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng Administración" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index c36430f34..c6169d5d2 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-18 07:48\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-06 12:03\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -226,7 +226,7 @@ msgstr "journal" msgid "logs" msgstr "journaux" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "vue enregistrée" @@ -250,103 +250,111 @@ msgstr "montrer dans la barre latérale" msgid "sort field" msgstr "champ de tri" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "tri inverse" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "le titre contient" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "le contenu contient" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "le NSA est" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "le correspondant est" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "le type de document est" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "est dans la boîte de réception" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "porte l'étiquette" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "porte l'une des étiquettes" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "créé avant" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "créé après" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "l'année de création est" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "le mois de création est" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "le jour de création est" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "ajouté avant" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "ajouté après" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modifié avant" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modifié après" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "ne porte pas d'étiquette" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "ne porte pas de NSA" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "le titre ou le contenu contient" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "recherche en texte intégral" + +#: documents/models.py:394 +msgid "more like this" +msgstr "documents relatifs" + +#: documents/models.py:405 msgid "rule type" msgstr "type de règle" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "valeur" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "règle de filtrage" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "règles de filtrage" @@ -448,7 +456,7 @@ msgstr "Russe" msgid "Spanish" msgstr "Espagnol" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index 7c3e637ee..1ff2ac38c 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:47\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -226,7 +226,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "" @@ -250,103 +250,111 @@ msgstr "" msgid "sort field" msgstr "" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "" @@ -448,7 +456,7 @@ msgstr "" msgid "Spanish" msgstr "" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 9c7cd71ef..cb7ee6711 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-04-01 11:51\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 21:31\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "log" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "vista salvata" @@ -250,103 +250,111 @@ msgstr "mostra nella barra laterale" msgid "sort field" msgstr "campo di ordinamento" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "ordine invertito" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "il titolo contiene" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "il contenuto contiene" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "ASN è" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "la corrispondenza è" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "il tipo di documento è" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "è in arrivo" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "ha etichetta" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "ha qualsiasi etichetta" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "creato prima del" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "creato dopo il" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "l'anno di creazione è" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "il mese di creazione è" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "il giorno di creazione è" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "aggiunto prima del" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "aggiunto dopo il" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modificato prima del" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modificato dopo" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "non ha tag" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "non ha ASN" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "il titolo o il contenuto contiene" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "query fulltext" + +#: documents/models.py:394 +msgid "more like this" +msgstr "altro come questo" + +#: documents/models.py:405 msgid "rule type" msgstr "tipo di regola" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "valore" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "regola filtro" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "regole filtro" @@ -448,7 +456,7 @@ msgstr "Russo" msgid "Spanish" msgstr "Spagnolo" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index c07b3d521..dba3a5760 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-18 20:12\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-06 12:03\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -226,7 +226,7 @@ msgstr "bericht" msgid "logs" msgstr "berichten" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "opgeslagen view" @@ -250,103 +250,111 @@ msgstr "weergeven in zijbalk" msgid "sort field" msgstr "sorteerveld" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "omgekeerd sorteren" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "titel bevat" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "inhoud bevat" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "ASN is" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "correspondent is" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "documenttype is" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "zit in \"Postvak in\"" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "heeft etiket" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "heeft één van de etiketten" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "aangemaakt voor" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "aangemaakt na" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "aangemaakt jaar is" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "aangemaakte maand is" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "aangemaakte dag is" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "toegevoegd voor" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "toegevoegd na" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "gewijzigd voor" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "gewijzigd na" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "heeft geen etiket" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "heeft geen ASN" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "titel of inhoud bevat" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "inhoud doorzoeken" + +#: documents/models.py:394 +msgid "more like this" +msgstr "meer zoals dit" + +#: documents/models.py:405 msgid "rule type" msgstr "type regel" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "waarde" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "filterregel" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "filterregels" @@ -448,7 +456,7 @@ msgstr "Russisch" msgid "Spanish" msgstr "Spaans" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 84d1c2c54..315f72672 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:47\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -226,7 +226,7 @@ msgstr "log" msgid "logs" msgstr "logs" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "visualização" @@ -250,103 +250,111 @@ msgstr "exibir no painel lateral" msgid "sort field" msgstr "ordenar campo" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "odernar reverso" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "título contém" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "conteúdo contém" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "NSA é" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "correspondente é" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "tipo de documento é" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "é caixa de entrada" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "contém etiqueta" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "contém qualquer etiqueta" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "criado antes de" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "criado depois de" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "ano de criação é" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "mês de criação é" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "dia de criação é" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "adicionado antes de" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "adicionado depois de" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modificado antes de" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modificado depois de" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "não tem etiqueta" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "título ou conteúdo contém" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "tipo de regra" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "valor" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "regra de filtragem" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "regras de filtragem" @@ -448,7 +456,7 @@ msgstr "" msgid "Spanish" msgstr "" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 6ed99d226..70eb58d77 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-18 22:23\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 21:31\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -226,7 +226,7 @@ msgstr "registo" msgid "logs" msgstr "registos" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "vista guardada" @@ -250,103 +250,111 @@ msgstr "mostrar na navegação lateral" msgid "sort field" msgstr "ordenar campo" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "ordenar inversamente" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "o título contém" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "o conteúdo contém" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "O NSA é" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "o correspondente é" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "o tipo de documento é" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "está na entrada" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "tem etiqueta" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "tem qualquer etiqueta" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "criado antes" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "criado depois" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "ano criada é" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "mês criado é" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "dia criado é" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "adicionada antes" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "adicionado depois de" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modificado antes de" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modificado depois de" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "não tem etiqueta" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "não possui um NSA" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "título ou conteúdo contém" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "consulta de texto completo" + +#: documents/models.py:394 +msgid "more like this" +msgstr "mais como este" + +#: documents/models.py:405 msgid "rule type" msgstr "tipo de regra" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "valor" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "regra de filtragem" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "regras de filtragem" @@ -448,7 +456,7 @@ msgstr "Russo" msgid "Spanish" msgstr "Espanhol" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index dcb505aba..2e7eeda65 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-28 09:07\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:19\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -226,7 +226,7 @@ msgstr "jurnal" msgid "logs" msgstr "jurnale" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "vizualizare" @@ -250,103 +250,111 @@ msgstr "afișează in bara laterala" msgid "sort field" msgstr "sortează camp" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "sortează invers" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "titlul conține" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "conținutul conține" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "Avizul prealabil de expediție este" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "corespondentul este" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "tipul documentului este" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "este în inbox" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "are eticheta" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "are orice eticheta" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "creat înainte de" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "creat după" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "anul creării este" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "luna creării este" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "ziua creării este" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "adăugat înainte de" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "adăugat după" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "modificat înainte de" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "modificat după" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "nu are etichetă" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "nu are aviz prealabil de expediție" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "titlul sau conținutul conține" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "tip de regula" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "valoare" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "regulă de filtrare" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "reguli de filtrare" @@ -448,7 +456,7 @@ msgstr "Rusă" msgid "Spanish" msgstr "Spaniolă" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administrare Paperless-ng" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index bc5de736b..ef61d2aa3 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 22:42\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 21:31\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -226,7 +226,7 @@ msgstr "журнал" msgid "logs" msgstr "логи" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "сохранённое представление" @@ -250,103 +250,111 @@ msgstr "показать в боковой панели" msgid "sort field" msgstr "Поле сортировки" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "обратная сортировка" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "заголовок содержит" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "содержимое содержит" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "АН" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "корреспондент" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "тип документа" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "во входящих" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "есть тег" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "есть любой тег" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "создан до" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "создан после" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "год создания" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "месяц создания" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "день создания" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "добавлен до" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "добавлен после" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "изменен до" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "изменен после" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "не имеет тега" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "не имеет архивного номера" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "Название или содержимое включает" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "полнотекстовый запрос" + +#: documents/models.py:394 +msgid "more like this" +msgstr "больше похожих" + +#: documents/models.py:405 msgid "rule type" msgstr "Тип правила" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "значение" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "Правило фильтрации" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "правила фильтрации" @@ -448,7 +456,7 @@ msgstr "Русский" msgid "Spanish" msgstr "Испанский" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Администрирование Paperless-ng" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index 149e2b7ad..3bdc5631f 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:47\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -226,7 +226,7 @@ msgstr "crwdns2628:0crwdne2628:0" msgid "logs" msgstr "crwdns2630:0crwdne2630:0" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "crwdns2632:0crwdne2632:0" @@ -250,103 +250,111 @@ msgstr "crwdns2640:0crwdne2640:0" msgid "sort field" msgstr "crwdns2642:0crwdne2642:0" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "crwdns2644:0crwdne2644:0" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "crwdns2646:0crwdne2646:0" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "crwdns2648:0crwdne2648:0" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "crwdns2650:0crwdne2650:0" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "crwdns2652:0crwdne2652:0" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "crwdns2654:0crwdne2654:0" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "crwdns2656:0crwdne2656:0" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "crwdns2658:0crwdne2658:0" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "crwdns2660:0crwdne2660:0" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "crwdns2662:0crwdne2662:0" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "crwdns2664:0crwdne2664:0" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "crwdns2666:0crwdne2666:0" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "crwdns2668:0crwdne2668:0" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "crwdns2670:0crwdne2670:0" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "crwdns2672:0crwdne2672:0" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "crwdns2674:0crwdne2674:0" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "crwdns2676:0crwdne2676:0" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "crwdns2678:0crwdne2678:0" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "crwdns2680:0crwdne2680:0" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "crwdns3408:0crwdne3408:0" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "crwdns3410:0crwdne3410:0" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "crwdns3438:0crwdne3438:0" + +#: documents/models.py:394 +msgid "more like this" +msgstr "crwdns3440:0crwdne3440:0" + +#: documents/models.py:405 msgid "rule type" msgstr "crwdns2682:0crwdne2682:0" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "crwdns2684:0crwdne2684:0" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "crwdns2686:0crwdne2686:0" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "crwdns2688:0crwdne2688:0" @@ -448,7 +456,7 @@ msgstr "crwdns3414:0crwdne3414:0" msgid "Spanish" msgstr "crwdns3420:0crwdne3420:0" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "crwdns2732:0crwdne2732:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 2c7ae4244..17d9d5ffc 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-17 22:31+0100\n" -"PO-Revision-Date: 2021-03-17 21:48\n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-05 20:20\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -226,7 +226,7 @@ msgstr "" msgid "logs" msgstr "" -#: documents/models.py:344 documents/models.py:396 +#: documents/models.py:344 documents/models.py:401 msgid "saved view" msgstr "" @@ -250,103 +250,111 @@ msgstr "" msgid "sort field" msgstr "" -#: documents/models.py:364 +#: documents/models.py:367 msgid "sort reverse" msgstr "" -#: documents/models.py:370 +#: documents/models.py:373 msgid "title contains" msgstr "" -#: documents/models.py:371 +#: documents/models.py:374 msgid "content contains" msgstr "" -#: documents/models.py:372 +#: documents/models.py:375 msgid "ASN is" msgstr "" -#: documents/models.py:373 +#: documents/models.py:376 msgid "correspondent is" msgstr "" -#: documents/models.py:374 +#: documents/models.py:377 msgid "document type is" msgstr "" -#: documents/models.py:375 +#: documents/models.py:378 msgid "is in inbox" msgstr "" -#: documents/models.py:376 +#: documents/models.py:379 msgid "has tag" msgstr "" -#: documents/models.py:377 +#: documents/models.py:380 msgid "has any tag" msgstr "" -#: documents/models.py:378 +#: documents/models.py:381 msgid "created before" msgstr "" -#: documents/models.py:379 +#: documents/models.py:382 msgid "created after" msgstr "" -#: documents/models.py:380 +#: documents/models.py:383 msgid "created year is" msgstr "" -#: documents/models.py:381 +#: documents/models.py:384 msgid "created month is" msgstr "" -#: documents/models.py:382 +#: documents/models.py:385 msgid "created day is" msgstr "" -#: documents/models.py:383 +#: documents/models.py:386 msgid "added before" msgstr "" -#: documents/models.py:384 +#: documents/models.py:387 msgid "added after" msgstr "" -#: documents/models.py:385 +#: documents/models.py:388 msgid "modified before" msgstr "" -#: documents/models.py:386 +#: documents/models.py:389 msgid "modified after" msgstr "" -#: documents/models.py:387 +#: documents/models.py:390 msgid "does not have tag" msgstr "" -#: documents/models.py:388 +#: documents/models.py:391 msgid "does not have ASN" msgstr "" -#: documents/models.py:389 +#: documents/models.py:392 msgid "title or content contains" msgstr "" -#: documents/models.py:400 +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 msgid "rule type" msgstr "" -#: documents/models.py:404 +#: documents/models.py:409 msgid "value" msgstr "" -#: documents/models.py:410 +#: documents/models.py:415 msgid "filter rule" msgstr "" -#: documents/models.py:411 +#: documents/models.py:416 msgid "filter rules" msgstr "" @@ -448,7 +456,7 @@ msgstr "" msgid "Spanish" msgstr "" -#: paperless/urls.py:118 +#: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" From 72b0541f20b62f842b28416a15ee231eb5cc750e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 6 Apr 2021 21:31:30 +0200 Subject: [PATCH 711/898] documentation --- docs/administration.rst | 4 +++- docs/changelog.rst | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/administration.rst b/docs/administration.rst index 5d6367277..c9a5650f0 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -193,7 +193,9 @@ This table lists the compatible versions for each database migration number. +------------------+-----------------+ | 1012 | 1.1.0 - 1.2.1 | +------------------+-----------------+ -| 1014 | 1.3.0 - current | +| 1014 | 1.3.0 - 1.3.1 | ++------------------+-----------------+ +| 1016 | 1.3.2 - current | +------------------+-----------------+ Execute the following management command to migrate your database: diff --git a/docs/changelog.rst b/docs/changelog.rst index 454f912f5..b08fd17e8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -15,6 +15,8 @@ paperless-ng 1.4.0 * Changes + * Firefox only: Highlight search query in PDF previews. + * New URL pattern for accessing documents by ASN directly (http://<paperless>/asn/123) * Added logging when executing pre- and post-consume scripts. From c9655b7d2a59a1bc7734ac4b82a90bbfc0f2373e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 6 Apr 2021 21:31:42 +0200 Subject: [PATCH 712/898] install script: configure time zone --- install-paperless-ng.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index c550d253c..39541dcc3 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -62,7 +62,7 @@ if [[ -z $(which docker-compose) ]] ; then exit 1 fi -# Check if user has permissions to run Docker by trying to get the status of Docker (docker status). +# Check if user has permissions to run Docker by trying to get the status of Docker (docker status). # If this fails, the user probably does not have permissions for Docker. docker stats --no-stream 2>/dev/null 1>&2 if [ $? -ne 0 ] ; then @@ -73,6 +73,8 @@ if [ $? -ne 0 ] ; then sleep 3 fi +default_time_zone=$(timedatectl show -p Timezone --value) + set -e echo "" @@ -145,6 +147,15 @@ echo "" ask "Port" "8000" PORT=$ask_result +echo "" +echo "Paperless requires you to configure the current time zone correctly." +echo "Otherwise, the dates of your documents may appear off by one day," +echo "depending on where you are on earth." +echo "" + +ask "Current time zone" "$default_time_zone" +TIME_ZONE=$ask_result + echo "" echo "Database backend: PostgreSQL and SQLite are available. Use PostgreSQL" echo "if unsure. If you're running on a low-power device such as Raspberry" @@ -280,6 +291,7 @@ DEFAULT_LANGUAGES="deu eng fra ita spa" if [[ ! $USERMAP_GID == "1000" ]] ; then echo "USERMAP_GID=$USERMAP_GID" fi + echo "PAPERLESS_ZIME_ZONE=$TIME_ZONE" echo "PAPERLESS_OCR_LANGUAGE=$OCR_LANGUAGE" echo "PAPERLESS_SECRET_KEY=$SECRET_KEY" if [[ ! " ${DEFAULT_LANGUAGES[@]} " =~ " ${OCR_LANGUAGE} " ]] ; then From 9072838b1fabdfd817eb41c090ce0fa1bce70183 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 6 Apr 2021 14:25:59 -0700 Subject: [PATCH 713/898] Fix alignment of card info on large cards --- .../document-card-large/document-card-large.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 3a552eb4e..cabf4af41 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -82,7 +82,8 @@ </svg> <small>{{document.created | customDate:'mediumDate'}}</small> </div> - <div *ngIf="document.__search_hit__" class="list-group-item bg-light text-dark border-0 d-flex search-score"> + + <div *ngIf="document.__search_hit__" class="list-group-item bg-light text-dark border-0 d-flex p-0 pl-4 search-score"> <small class="text-muted" i18n>Score:</small> <ngb-progressbar [type]="searchScoreClass" [value]="document.__search_hit__.score" class="search-score-bar mx-2 mt-1" [max]="1"></ngb-progressbar> </div> From bc78e7f4f982e8155c2f758377da55f9520e0acf Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs <sbrl@starbeamrainbowlabs.com> Date: Wed, 7 Apr 2021 23:19:06 +0100 Subject: [PATCH 714/898] docker: mark scripts as executable --- docker/docker-entrypoint.sh | 0 docker/management_script.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docker/docker-entrypoint.sh mode change 100644 => 100755 docker/management_script.sh diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh old mode 100644 new mode 100755 diff --git a/docker/management_script.sh b/docker/management_script.sh old mode 100644 new mode 100755 From 9ede9010c75fe37829df3b59e98d71dd85d44b9b Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs <sbrl@starbeamrainbowlabs.com> Date: Thu, 8 Apr 2021 00:03:55 +0100 Subject: [PATCH 715/898] docker-entrypoint.sh: split non-root tasks into docker-prepare.sh --- Dockerfile | 1 + docker/docker-entrypoint.sh | 75 +++---------------------------------- docker/docker-prepare.sh | 68 +++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 70 deletions(-) create mode 100755 docker/docker-prepare.sh diff --git a/Dockerfile b/Dockerfile index e41aeb7ac..332a56aba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -78,6 +78,7 @@ RUN cd docker \ && mkdir /var/log/supervisord /var/run/supervisord \ && cp supervisord.conf /etc/supervisord.conf \ && cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \ + && cp docker-prepare.sh /sbin/docker-prepare.sh \ && chmod 755 /sbin/docker-entrypoint.sh \ && chmod +x install_management_commands.sh \ && ./install_management_commands.sh \ diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index cf6129438..5b0389b96 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -15,70 +15,6 @@ map_uidgid() { fi } - -wait_for_postgres() { - attempt_num=1 - max_attempts=5 - - echo "Waiting for PostgreSQL to start..." - - host="${PAPERLESS_DBHOST}" - port="${PAPERLESS_DBPORT}" - - if [[ -z $port ]] ; - then - port="5432" - fi - - while !</dev/tcp/$host/$port ; - do - - if [ $attempt_num -eq $max_attempts ] - then - echo "Unable to connect to database." - exit 1 - else - echo "Attempt $attempt_num failed! Trying again in 5 seconds..." - - fi - - attempt_num=$(expr "$attempt_num" + 1) - sleep 5 - done - - -} - - -migrations() { - - if [[ -n "${PAPERLESS_DBHOST}" ]] - then - wait_for_postgres - fi - - ( - # flock is in place to prevent multiple containers from doing migrations - # simultaneously. This also ensures that the db is ready when the command - # of the current container starts. - flock 200 - echo "Apply database migrations..." - sudo -HEu paperless python3 manage.py migrate - ) 200>/usr/src/paperless/data/migration_lock - -} - -search_index() { - index_version=1 - index_version_file=/usr/src/paperless/data/.index_version - - if [[ (! -f "$index_version_file") || $(< $index_version_file) != "$index_version" ]]; then - echo "Search index out of date. Updating..." - sudo -HEu paperless python3 manage.py document_index reindex - echo $index_version | sudo -HEu paperless tee $index_version_file >/dev/null - fi -} - initialize() { map_uidgid @@ -92,13 +28,13 @@ initialize() { echo "creating directory /tmp/paperless" mkdir -p /tmp/paperless - + + set +e chown -R paperless:paperless ../ chown -R paperless:paperless /tmp/paperless - - migrations - - search_index + set -e + + sudo -HEu paperless /sbin/docker-prepare.sh } install_languages() { @@ -154,4 +90,3 @@ else echo Executing "$@" exec "$@" fi - diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh new file mode 100755 index 000000000..fd32d0a7e --- /dev/null +++ b/docker/docker-prepare.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +wait_for_postgres() { + attempt_num=1 + max_attempts=5 + + echo "Waiting for PostgreSQL to start..." + + host="${PAPERLESS_DBHOST}" + port="${PAPERLESS_DBPORT}" + + if [[ -z $port ]] ; + then + port="5432" + fi + + while !</dev/tcp/$host/$port ; + do + + if [ $attempt_num -eq $max_attempts ] + then + echo "Unable to connect to database." + exit 1 + else + echo "Attempt $attempt_num failed! Trying again in 5 seconds..." + + fi + + attempt_num=$(expr "$attempt_num" + 1) + sleep 5 + done +} + + +migrations() { + if [[ -n "${PAPERLESS_DBHOST}" ]] + then + wait_for_postgres + fi + + ( + # flock is in place to prevent multiple containers from doing migrations + # simultaneously. This also ensures that the db is ready when the command + # of the current container starts. + flock 200 + echo "Apply database migrations..." + sudo -HEu paperless python3 manage.py migrate + ) 200>/usr/src/paperless/data/migration_lock +} + +search_index() { + index_version=1 + index_version_file=/usr/src/paperless/data/.index_version + + if [[ (! -f "$index_version_file") || $(< $index_version_file) != "$index_version" ]]; then + echo "Search index out of date. Updating..." + python3 manage.py document_index reindex + echo $index_version | sudo -HEu paperless tee $index_version_file >/dev/null + fi +} + +do_work() { + migrations; + + search_index; +} + +do_work; From 1badd1a7748de74a1a2fe5f506735c3531749e7c Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs <sbrl@starbeamrainbowlabs.com> Date: Thu, 8 Apr 2021 03:06:01 +0100 Subject: [PATCH 716/898] docker-prepare.sh: remove rogue instances of sudo This is being done by calling the script as the correct user in the first place. --- docker/docker-prepare.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index fd32d0a7e..53f5201e4 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -44,7 +44,7 @@ migrations() { # of the current container starts. flock 200 echo "Apply database migrations..." - sudo -HEu paperless python3 manage.py migrate + python3 manage.py migrate ) 200>/usr/src/paperless/data/migration_lock } @@ -55,7 +55,7 @@ search_index() { if [[ (! -f "$index_version_file") || $(< $index_version_file) != "$index_version" ]]; then echo "Search index out of date. Updating..." python3 manage.py document_index reindex - echo $index_version | sudo -HEu paperless tee $index_version_file >/dev/null + echo $index_version | tee $index_version_file >/dev/null fi } From d207f7a2161cd34a381317ba1c4e6ca17a243bd7 Mon Sep 17 00:00:00 2001 From: Alex Povel <48824213+alexpovel@users.noreply.github.com> Date: Fri, 9 Apr 2021 22:14:09 +0200 Subject: [PATCH 717/898] Fix typo See also https://github.com/jonaswinkler/paperless-ng/blob/a3c4e4c6b65086f9c1af9569b9a771ef8320d917/docker/compose/docker-compose.env#L30 --- install-paperless-ng.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index 39541dcc3..a31c9203f 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -291,7 +291,7 @@ DEFAULT_LANGUAGES="deu eng fra ita spa" if [[ ! $USERMAP_GID == "1000" ]] ; then echo "USERMAP_GID=$USERMAP_GID" fi - echo "PAPERLESS_ZIME_ZONE=$TIME_ZONE" + echo "PAPERLESS_TIME_ZONE=$TIME_ZONE" echo "PAPERLESS_OCR_LANGUAGE=$OCR_LANGUAGE" echo "PAPERLESS_SECRET_KEY=$SECRET_KEY" if [[ ! " ${DEFAULT_LANGUAGES[@]} " =~ " ${OCR_LANGUAGE} " ]] ; then From 6822eaf791cd0d79cf8976c8a3b925071262f4ea Mon Sep 17 00:00:00 2001 From: Chris Nagy <chris.nagy@protonmail.com> Date: Sat, 10 Apr 2021 13:47:31 +0200 Subject: [PATCH 718/898] Extend docs with superuser --- docs/configuration.rst | 24 +++++++++++++++++++ .../management/commands/manage_superuser.py | 5 +++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 48b09213d..3534750b1 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -177,6 +177,30 @@ PAPERLESS_AUTO_LOGIN_USERNAME=<username> Defaults to none, which disables this feature. +PAPERLESS_ADMIN_USER=<username> + If this environment variable is specified, Paperless automatically creates + a superuser with the provided username at start. This is useful in cases + where you can not run the `create-superuser` command seperately, such as Kubernetes + or AWS ECS. + + Requires `PAPERLESS_ADMIN_PASSWORD` to be set. + + .. note:: + + This will not change an existing [super]user's password, nor will + it recreate a user that already exists. You can leave this throughout + the lifecycle of the containers. + +PAPERLESS_ADMIN_MAIL=<email> + (Optional) Specify superuser email address. Only used when + `PAPERLESS_ADMIN_USER` is set. + + Defaults to ``root@localhost``. + +PAPERLESS_ADMIN_PASSWORD=<password> + Only used when `PAPERLESS_ADMIN_USER` is set. + This will be the password of the automatically created superuser. + PAPERLESS_COOKIE_PREFIX=<str> Specify a prefix that is added to the cookies used by paperless to identify diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py index 3c5341cb3..ee3fbc8ef 100644 --- a/src/documents/management/commands/manage_superuser.py +++ b/src/documents/management/commands/manage_superuser.py @@ -26,5 +26,8 @@ class Command(BaseCommand): # Create superuser based on env variables User.objects.create_superuser(PAPERLESS_ADMIN_USER, PAPERLESS_ADMIN_MAIL, PAPERLESS_ADMIN_PASSWORD) self.stdout.write(f'Created superuser "{PAPERLESS_ADMIN_USER}" with provided password.') + else: + self.stdout.write(f'Did not create superuser "{PAPERLESS_ADMIN_USER}".') + self.stdout.write('Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') except Exception as error: - self.stdout.write(f'Exception occured while managing superuser: {error}') \ No newline at end of file + self.stdout.write(f'Exception occured while creating superuser: {error}') \ No newline at end of file From 128f31e21bb44678909152d7557d8c851c753881 Mon Sep 17 00:00:00 2001 From: Chris Nagy <chris.nagy@protonmail.com> Date: Sat, 10 Apr 2021 13:50:52 +0200 Subject: [PATCH 719/898] Fix env variable in docker entrypoint --- docker/docker-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 95131699f..fe9618c25 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -56,7 +56,7 @@ superuser() { wait_for_postgres fi - if [[ ! -z "${PAPERLESS_ADMIN_PASSWORD}" ]] + if [[ ! -z "${PAPERLESS_ADMIN_USER}" ]] then sudo -HEu paperless python3 manage.py manage_superuser fi From 78cb2c1a818d55464d4f004c5f783aeafe9ed0f7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 10 Apr 2021 14:38:19 +0200 Subject: [PATCH 720/898] install sudo from stable --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index e41aeb7ac..2b06ded0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,9 @@ RUN ./configure && make FROM python:3.7-slim # Binary dependencies -RUN echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ +RUN apt-get update \ + && apt-get -y --no-install-recommends install sudo \ + && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ && apt-get update \ && apt-get -y --no-install-recommends install \ # Basic dependencies @@ -19,7 +21,6 @@ RUN echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.lis gnupg \ imagemagick \ gettext \ - sudo \ tzdata \ # fonts for text file thumbnail generation fonts-liberation \ From 1aba755d6fdcc3e1ff2681f60d139f22326d8498 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 10 Apr 2021 14:38:39 +0200 Subject: [PATCH 721/898] better logging for the retagger --- src/documents/management/commands/document_retagger.py | 5 ++--- src/documents/signals/handlers.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py index 854117fdd..4a23faa86 100755 --- a/src/documents/management/commands/document_retagger.py +++ b/src/documents/management/commands/document_retagger.py @@ -1,5 +1,6 @@ import logging +import tqdm from django.core.management.base import BaseCommand from documents.classifier import load_classifier @@ -67,9 +68,7 @@ class Command(BaseCommand): classifier = load_classifier() - for document in documents: - logger.info( - f"Processing document {document.title}") + for document in tqdm.tqdm(documents): if options['correspondent']: set_correspondent( diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index ad63bf301..f46adbb16 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -46,13 +46,13 @@ def set_correspondent(sender, selected = None if potential_count > 1: if use_first: - logger.info( + logger.debug( f"Detected {potential_count} potential correspondents, " f"so we've opted for {selected}", extra={'group': logging_group} ) else: - logger.info( + logger.debug( f"Detected {potential_count} potential correspondents, " f"not assigning any correspondent", extra={'group': logging_group} From f687271440e96a364879034b0742df5841efa028 Mon Sep 17 00:00:00 2001 From: Chris Nagy <chris.nagy@protonmail.com> Date: Sat, 10 Apr 2021 15:08:33 +0200 Subject: [PATCH 722/898] Minor docs change --- docs/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 3534750b1..7502cef40 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -180,7 +180,7 @@ PAPERLESS_AUTO_LOGIN_USERNAME=<username> PAPERLESS_ADMIN_USER=<username> If this environment variable is specified, Paperless automatically creates a superuser with the provided username at start. This is useful in cases - where you can not run the `create-superuser` command seperately, such as Kubernetes + where you can not run the `createsuperuser` command seperately, such as Kubernetes or AWS ECS. Requires `PAPERLESS_ADMIN_PASSWORD` to be set. From 79ca66fa1473a03e10e7e47233f51102f9a5268d Mon Sep 17 00:00:00 2001 From: Chris Nagy <chris.nagy@protonmail.com> Date: Sat, 10 Apr 2021 16:02:48 +0200 Subject: [PATCH 723/898] Add newline end of file --- src/documents/management/commands/manage_superuser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py index ee3fbc8ef..0762ab001 100644 --- a/src/documents/management/commands/manage_superuser.py +++ b/src/documents/management/commands/manage_superuser.py @@ -30,4 +30,4 @@ class Command(BaseCommand): self.stdout.write(f'Did not create superuser "{PAPERLESS_ADMIN_USER}".') self.stdout.write('Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') except Exception as error: - self.stdout.write(f'Exception occured while creating superuser: {error}') \ No newline at end of file + self.stdout.write(f'Exception occured while creating superuser: {error}') From 38dc806b434dfd05d1534ccfbbc7a7e4852fdf8c Mon Sep 17 00:00:00 2001 From: Chris Nagy <chris.nagy@protonmail.com> Date: Sat, 10 Apr 2021 16:10:45 +0200 Subject: [PATCH 724/898] Fix code guidelines --- .../management/commands/manage_superuser.py | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py index 0762ab001..81732e7d9 100644 --- a/src/documents/management/commands/manage_superuser.py +++ b/src/documents/management/commands/manage_superuser.py @@ -3,6 +3,7 @@ import os from django.contrib.auth.models import User from django.core.management.base import BaseCommand, CommandError + class Command(BaseCommand): help = """ @@ -11,23 +12,29 @@ class Command(BaseCommand): def handle(self, *args, **options): - # Get user details from env variables - PAPERLESS_ADMIN_USER=os.getenv('PAPERLESS_ADMIN_USER') - PAPERLESS_ADMIN_MAIL=os.getenv('PAPERLESS_ADMIN_MAIL', 'root@localhost') - PAPERLESS_ADMIN_PASSWORD=os.getenv('PAPERLESS_ADMIN_PASSWORD') + PAPERLESS_ADMIN_USER = os.getenv('PAPERLESS_ADMIN_USER') + PAPERLESS_ADMIN_MAIL = os.getenv('PAPERLESS_ADMIN_MAIL', 'root@localhost') + PAPERLESS_ADMIN_PASSWORD = os.getenv('PAPERLESS_ADMIN_PASSWORD') # If PAPERLESS_ADMIN_USER env variable is set if PAPERLESS_ADMIN_USER: try: # Check if user exists already, leave as is if it does - if User.objects.filter(username=PAPERLESS_ADMIN_USER).exists(): - self.stdout.write(f'The user "{PAPERLESS_ADMIN_USER}" already exists! Leaving user as is.') + if User.objects.filter( + username=PAPERLESS_ADMIN_USER).exists(): + self.stdout.write( + f'The user "{PAPERLESS_ADMIN_USER}" already exists! Leaving user as is.') elif PAPERLESS_ADMIN_PASSWORD: # Create superuser based on env variables - User.objects.create_superuser(PAPERLESS_ADMIN_USER, PAPERLESS_ADMIN_MAIL, PAPERLESS_ADMIN_PASSWORD) - self.stdout.write(f'Created superuser "{PAPERLESS_ADMIN_USER}" with provided password.') + User.objects.create_superuser( + PAPERLESS_ADMIN_USER, PAPERLESS_ADMIN_MAIL, PAPERLESS_ADMIN_PASSWORD) + self.stdout.write( + f'Created superuser "{PAPERLESS_ADMIN_USER}" with provided password.') else: - self.stdout.write(f'Did not create superuser "{PAPERLESS_ADMIN_USER}".') - self.stdout.write('Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') + self.stdout.write( + f'Did not create superuser "{PAPERLESS_ADMIN_USER}".') + self.stdout.write( + 'Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') except Exception as error: - self.stdout.write(f'Exception occured while creating superuser: {error}') + self.stdout.write( + f'Exception occured while creating superuser: {error}') From 91abf687081d77e68f3a61b329dfd7e54bb9ecd0 Mon Sep 17 00:00:00 2001 From: Lukasz Knop <nikitis.net@gmail.com> Date: Sun, 11 Apr 2021 15:16:04 +0200 Subject: [PATCH 725/898] add single compose file for usage in portainer environments --- docker/compose/docker-compose.portainer.yml | 77 +++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 docker/compose/docker-compose.portainer.yml diff --git a/docker/compose/docker-compose.portainer.yml b/docker/compose/docker-compose.portainer.yml new file mode 100644 index 000000000..e2f299f5d --- /dev/null +++ b/docker/compose/docker-compose.portainer.yml @@ -0,0 +1,77 @@ +# docker-compose file for running paperless from the Docker Hub. +# This file contains everything paperless needs to run. +# Paperless supports amd64, arm and arm64 hardware. +# +# All compose files of paperless configure paperless in the following way: +# +# - Paperless is (re)started on system boot, if it was running before shutdown. +# - Docker volumes for storing data are managed by Docker. +# - Folders for importing and exporting files are created in the same directory +# as this file and mounted to the correct folders inside the container. +# - Paperless listens on port 8010. +# +# In addition to that, this docker-compose file adds the following optional +# configurations: +# +# - Instead of SQLite (default), PostgreSQL is used as the database server. +# +# To install and update paperless with this file, do the following: +# +# - Open portainer Stacks list and click 'Add stack' +# - Paste the contents of this file and assign a name, e.g. 'Paperless' +# - Click 'Deploy the stack' and wait for it to be deployed +# - Open the list of containers, select paperless_webserver_1 +# - Click 'Console' and then 'Connect' to open the command line inside the container +# - Run 'python3 manage.py createsuperuser' to create a user +# - Exit the console +# +# For more extensive installation and update instructions, refer to the +# documentation. + +version: "3.4" +services: + broker: + image: redis:6.0 + restart: unless-stopped + + db: + image: postgres:13 + restart: unless-stopped + volumes: + - pgdata:/var/lib/postgresql/data + environment: + POSTGRES_DB: paperless + POSTGRES_USER: paperless + POSTGRES_PASSWORD: paperless + + webserver: + image: jonaswinkler/paperless-ng:latest + restart: unless-stopped + depends_on: + - db + - broker + ports: + - 8010:8000 + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - data:/usr/src/paperless/data + - media:/usr/src/paperless/media + - ./export:/usr/src/paperless/export + - ./consume:/usr/src/paperless/consume + environment: + PAPERLESS_REDIS: redis://broker:6379 + PAPERLESS_DBHOST: db + PAPERLESS_OCR_LANGUAGES: tur ces + PAPERLESS_SECRET_KEY: change-me + PAPERLESS_TIME_ZONE: America/Los_Angeles + PAPERLESS_OCR_LANGUAGE: eng + USERMAP_UID: 1000 + USERMAP_GID: 100 +volumes: + data: + media: + pgdata: From 6ea4055877b23d35ee1a0fd59b76c32b7c526036 Mon Sep 17 00:00:00 2001 From: Lukasz Knop <nikitis.net@gmail.com> Date: Sun, 11 Apr 2021 21:48:50 +0200 Subject: [PATCH 726/898] disabled unnecessary overrides, copied variable comments --- docker/compose/docker-compose.portainer.yml | 25 +++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/docker/compose/docker-compose.portainer.yml b/docker/compose/docker-compose.portainer.yml index e2f299f5d..12988c636 100644 --- a/docker/compose/docker-compose.portainer.yml +++ b/docker/compose/docker-compose.portainer.yml @@ -65,12 +65,29 @@ services: environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db - PAPERLESS_OCR_LANGUAGES: tur ces - PAPERLESS_SECRET_KEY: change-me - PAPERLESS_TIME_ZONE: America/Los_Angeles - PAPERLESS_OCR_LANGUAGE: eng +# The UID and GID of the user used to run paperless in the container. Set this +# to your UID and GID on the host so that you have write access to the +# consumption directory. USERMAP_UID: 1000 USERMAP_GID: 100 +# Additional languages to install for text recognition, separated by a +# whitespace. Note that this is +# different from PAPERLESS_OCR_LANGUAGE (default=eng), which defines the +# language used for OCR. +# The container installs English, German, Italian, Spanish and French by +# default. +# See https://packages.debian.org/search?keywords=tesseract-ocr-&searchon=names&suite=buster +# for available languages. + #PAPERLESS_OCR_LANGUAGES: tur ces +# Adjust this key if you plan to make paperless available publicly. It should +# be a very long sequence of random characters. You don't need to remember it. + #PAPERLESS_SECRET_KEY: change-me +# Use this variable to set a timezone for the Paperless Docker containers. If not specified, defaults to UTC. + #PAPERLESS_TIME_ZONE: America/Los_Angeles +# The default language to use for OCR. Set this to the language most of your +# documents are written in. + #PAPERLESS_OCR_LANGUAGE: eng + volumes: data: media: From 51eaa09696d08582b7ec853c487a1e57b510115e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 14 Apr 2021 09:00:30 -0700 Subject: [PATCH 727/898] Make filter editor / bulk editor 'sticky' on scroll --- .../document-list/document-list.component.html | 8 ++++---- .../document-list/document-list.component.scss | 9 +++++++++ src-ui/src/theme.scss | 6 +++++- src-ui/src/theme_dark.scss | 4 ++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 45b6fad37..8b91949a8 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -75,7 +75,7 @@ </app-page-header> -<div class="w-100 mb-2 mb-sm-4"> +<div class="w-100 sticky-top py-2 mt-n3 py-sm-4 bg-body"> <app-filter-editor [hidden]="isBulkEditing" [(filterRules)]="list.filterRules" [unmodifiedFilterRules]="unmodifiedFilterRules" #filterEditor></app-filter-editor> <app-bulk-editor [hidden]="!isBulkEditing"></app-bulk-editor> </div> @@ -99,7 +99,7 @@ <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)" (clickMoreLike)="clickMoreLike(d.id)"> </app-document-card-large> </div> - + <table class="table table-sm border shadow-sm" *ngIf="displayMode == 'details'"> <thead> <th></th> @@ -174,10 +174,10 @@ </tr> </tbody> </table> - + <div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'"> <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)" (clickDocumentType)="clickDocumentType($event)"></app-document-card-small> </div> - + </ng-template> diff --git a/src-ui/src/app/components/document-list/document-list.component.scss b/src-ui/src/app/components/document-list/document-list.component.scss index 28f765e29..ab67d9572 100644 --- a/src-ui/src/app/components/document-list/document-list.component.scss +++ b/src-ui/src/app/components/document-list/document-list.component.scss @@ -34,3 +34,12 @@ $paperless-card-breakpoints: ( right: 0 !important; left: auto !important; } + +.sticky-top { + z-index: 1000; // below main navbar + top: calc(7rem - 2px); // height of navbar (mobile) + + @media (min-width: 768px) { + top: 3.5rem; // height of navbar + } +} diff --git a/src-ui/src/theme.scss b/src-ui/src/theme.scss index df2aea003..113968a9f 100644 --- a/src-ui/src/theme.scss +++ b/src-ui/src/theme.scss @@ -4,4 +4,8 @@ $primaryFaded: #d1ddd2; $theme-colors: ( "primary": $primary -); \ No newline at end of file +); + +.bg-body { + background-color: #fff; +} diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss index 996f9da3d..25abac773 100644 --- a/src-ui/src/theme_dark.scss +++ b/src-ui/src/theme_dark.scss @@ -37,6 +37,10 @@ $border-color-dark-mode: #47494f; } } + .bg-body { + background-color: $bg-dark-mode !important; + } + .text-light { color: $text-color-dark-mode !important; } From f230f007e618bb0fbd6febc90a8d5e4a8d18ed26 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 14 Apr 2021 09:00:57 -0700 Subject: [PATCH 728/898] Hide visible underlying shadows on filter / bulk editor --- .../app/components/document-list/document-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 8b91949a8..d11eb7f90 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -75,7 +75,7 @@ </app-page-header> -<div class="w-100 sticky-top py-2 mt-n3 py-sm-4 bg-body"> +<div class="sticky-top py-2 mt-n3 py-sm-4 bg-body mx-n3 px-3"> <app-filter-editor [hidden]="isBulkEditing" [(filterRules)]="list.filterRules" [unmodifiedFilterRules]="unmodifiedFilterRules" #filterEditor></app-filter-editor> <app-bulk-editor [hidden]="!isBulkEditing"></app-bulk-editor> </div> From 30d69c6d76a4afa2f591dac6754653dc52567a18 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 14 Apr 2021 09:34:39 -0700 Subject: [PATCH 729/898] Spacing tweaks, mobile breakpoint --- .../app/components/document-list/document-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index d11eb7f90..1b805bb2e 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -75,7 +75,7 @@ </app-page-header> -<div class="sticky-top py-2 mt-n3 py-sm-4 bg-body mx-n3 px-3"> +<div class="sticky-top py-2 mt-n2 mt-sm-n3 py-sm-4 bg-body mx-n3 px-3"> <app-filter-editor [hidden]="isBulkEditing" [(filterRules)]="list.filterRules" [unmodifiedFilterRules]="unmodifiedFilterRules" #filterEditor></app-filter-editor> <app-bulk-editor [hidden]="!isBulkEditing"></app-bulk-editor> </div> From b7352ebea7059870da588259a65a0a74de989e25 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 14 Apr 2021 13:24:03 -0700 Subject: [PATCH 730/898] Fix breakpoint File missing from last commit --- .../app/components/document-list/document-list.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.scss b/src-ui/src/app/components/document-list/document-list.component.scss index ab67d9572..ee50852f0 100644 --- a/src-ui/src/app/components/document-list/document-list.component.scss +++ b/src-ui/src/app/components/document-list/document-list.component.scss @@ -39,7 +39,7 @@ $paperless-card-breakpoints: ( z-index: 1000; // below main navbar top: calc(7rem - 2px); // height of navbar (mobile) - @media (min-width: 768px) { + @media (min-width: 580px) { top: 3.5rem; // height of navbar } } From c2f7e74a8c24baca9492bc0cb2ab91e705fb29b7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 13:34:42 +0200 Subject: [PATCH 731/898] New Crowdin updates (#874) --- src-ui/src/locale/messages.pl_PL.xlf | 2298 ++++++++++++++++++++++++ src/locale/de_DE/LC_MESSAGES/django.po | 6 +- src/locale/pl_PL/LC_MESSAGES/django.po | 670 +++++++ 3 files changed, 2971 insertions(+), 3 deletions(-) create mode 100644 src-ui/src/locale/messages.pl_PL.xlf create mode 100644 src/locale/pl_PL/LC_MESSAGES/django.po diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf new file mode 100644 index 000000000..ff14fe12d --- /dev/null +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -0,0 +1,2298 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="pl"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Dokument dodano</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> został dodany do paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Otwórz dokument</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="translated">Nie można dodać <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="translated">Wykryto nowy dokument</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> jest przetwarzany przez paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Dokumenty</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="translated">Widok "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" został zapisany.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">138</context> + </context-group> + <target state="translated">Widok "<x id="PH" equiv-text="savedView.name"/>" został utworzony pomyślnie.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="translated">Wybierz</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Odznacz wszystko</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="translated">Zaznacz wszystko na tej stronie</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Zaznacz wszystko</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Sortowanie</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="translated">Widoki</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="translated">Zapisz jako...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="translated">Zapisz "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">{VAR_PLURAL, plural, one {} few {Wybrano <x id="INTERPOLATION"/> z <x id="INTERPOLATION_1"/> dokumentów} many {Wybrano <x id="INTERPOLATION"/> z <x id="INTERPOLATION_1"/> dokumentów} =1 {Wybrano <x id="INTERPOLATION"/> z jednego dokumentu} other {Wybrano <x id="INTERPOLATION"/> z <x id="INTERPOLATION_1"/> dokumentów}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">{VAR_PLURAL, plural, one {} few {<x id="INTERPOLATION"/> dokumenty} many {<x id="INTERPOLATION"/> dokumentów} =1 {Jeden dokument} other {<x id="INTERPOLATION"/> dokumenty}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Filtrowane</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="translated">Korespondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="translated">Tytuł</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="translated">Typ dokumentu</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="translated">Utworzony</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">141</context> + </context-group> + <target state="translated">Dodano</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">204</context> + </context-group> + <target state="translated">Potwierdź usunięcie</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="translated">Czy na pewno chcesz usunąć dokument"<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">206</context> + </context-group> + <target state="translated">Pliki tego dokumentu zostaną trwale usunięte. Tej operacji nie można cofnąć.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">208</context> + </context-group> + <target state="translated">Usuń dokument</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">215</context> + </context-group> + <target state="translated">Błąd podczas usuwania dokumentu: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Usuń</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Pobierz</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Podobne dokumenty</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Zamknij</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="translated">Szczegóły</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="translated">Zawartość</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="translated">Metadane</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="translated">Zaniechaj</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="translated">Zapisz</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="translated">Strona</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="translated">z <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="translated">Pobierz oryginał</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="translated">Numer seryjny archiwum</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="translated">Data utworzenia</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Data modyfikacji</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Data dodania</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Nazwa pliku</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">MD5 - Suma kontrolna Oryginału</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="translated">Rozmiar oryginalnego pliku</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="translated">Typ mime oryginału</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="translated">Suma kontrolna archiwum</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="translated">Rozmiar pliku archiwalnego</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="translated">Metadane oryginalnego dokumentu</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="translated">Metadane zarchiwizowanego dokumentu</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="translated">Zapisz & następny</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="translated">Cześć <x id="PH" equiv-text="this.displayName"/>, witaj w Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Witaj w Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Kokpit</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Czy na pewno chcesz usunąć tag <x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Tagi</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="translated">Utwórz</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="translated">Filtruj według:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="translated">Nazwa</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Kolor</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Dopasowanie</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Liczba dokumentów</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Akcje</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Dokumenty</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Edytuj</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Czy na pewno chcesz usunąć typ dokumentu "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Typy dokumentów</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Logi</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="translated">Zapisany widok "<x id="PH" equiv-text="savedView.name"/>" został usunięty.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="translated">Ustawienia zostały zapisane.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Użyj języka systemowego</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="translated">Użyj formatu daty według wyświetlanego języka</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="translated">Błąd podczas zapisywania ustawień na serwerze: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Ustawienia</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Ustawienia ogólne</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="translated">Powiadomienia</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="translated">Zapisane widoki</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Wygląd</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="translated">Język</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Musisz przeładować stronę po wybraniu nowego języka.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="translated">Wyświetlanie daty</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Format daty</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Krótki: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="translated">Średni: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="translated">Długi: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="translated">Ilość elementów na stronie</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="translated">Edytor dokumentów</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Wyświetl PDF przez wbudowaną przeglądarkę</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Zazwyczaj działa szybciej przy wyświetlaniu dużych dokumentów w formacie PDF, ale może nie działać na niektórych przeglądarkach.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Tryb ciemny</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="translated">Użyj ustawień systemowych</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="translated">Użyj ciemnego motywu</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">Odwróć kolory miniaturki w trybie ciemnym</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="translated">Masowa edycja</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="translated">Używaj dialogów potwierdzenia</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="translated">Usuwanie dokumentów zawsze będzie wymagało potwierdzenia.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="translated">Zamknięcie zapisuje zmiany</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="translated">Przetwarzanie dokumentów</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="translated">Pokaż powiadomienia, gdy zostaną wykryte nowe dokumenty</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="translated">Pokaż powiadomienia, gdy przetwarzanie dokumentu zakończy się pomyślnie</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="translated">Pokaż powiadomienia, gdy przetwarzanie dokumentu nie powiedzie się</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="translated">Wyłącz powiadomienia na pulpicie</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="translated">Wyłącz pokazywanie wszystkich wiadomości o statusie przetwarzania dokumentów na pulpicie.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="translated">Wyświetlanie</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="translated">Pokaż na pulpicie</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="translated">Pokaż w panelu bocznym</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="translated">Nie zdefiniowano zapisanych widoków.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="translated">404 Nie znaleziono</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Czy na pewno chcesz usunąć nadawcę <x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Nadawcy</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Ostatnia korespondencja</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="translated">Potwierdzenie</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="translated">Potwierdź</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Anuluj</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Dodaj nowego nadawcę</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Edytuj nadawcę</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Algorytm dopasowania</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="translated">Wzorzec dopasowania</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">(Nieuwzględniający wielkości liter)</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Utwórz tag</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Edytuj tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Tag skrzynki odbiorczej</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Tagi skrzynki odbiorczej są automatycznie przypisane do wszystkich przetworzonych dokumentów.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Utwórz nowy dokument</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Edytuj typ dokumentu</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="translated">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Szukaj dokumentów</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Wyloguj</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="translated">Zarządzaj</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="translated">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="translated">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="translated">Dokumentacja</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="translated">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="translated">Zaproponuj pomysł</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="translated">Zalogowano jako <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Otwarte dokumenty</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="translated">Zamknij wszystkie</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="translated">Nadawca: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Bez nadawcy</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Rodzaj: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">46</context> + </context-group> + <target state="translated">Bez typu dokumentu</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="translated">Bez żadnego tagu</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="translated">Tytuł: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="translated">Numer archiwum: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">Tytuł</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Tytuł & treść</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="translated">Wyszukiwanie zaawansowane</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Podobne do</target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Filtruj tagi</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">28</context> + </context-group> + <target state="translated">Filtruj nadawców</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Filtruj typy dokumentów</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="translated">Zresetuj filtry</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Nieprzypisane</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Zastosuj</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="translated">Ostatnie 7 dni</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Ostatni miesiąc</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="translated">Ostatnie 3 miesiące</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="translated">Ostatni rok</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Po</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Przed</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Wyczyść</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Pokaż</target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Filtruj według nadawcy</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="translated">Filtruj po tagach</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">Wynik:</target> + </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Utworzony: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Dodany: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Zmodyfikowany: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="translated">Błąd podczas wykonywania operacji zbiorczej: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" i "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="translated">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x id="PH" equiv-text="list"/> i "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="translated">Potwierdź przypisanie tagów</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="translated">Ta operacja doda tag "<x id="PH" equiv-text="tag.name"/>" do <x id="PH_1" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="translated">Ta operacja doda tagi <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> do <x id="PH_1" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="translated">Ta operacja usunie tag "<x id="PH" equiv-text="tag.name"/>" z <x id="PH_1" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="translated">Ta operacja usunie tagi <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> z <x id="PH_1" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="translated">Ta operacja doda tagi <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> i usunie tagi <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> w <x id="PH_2" equiv-text="this.list.selected.size"/> wybranych dokumentach.</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="translated">Potwierdź przypisanie nadawcy</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="translated">Ta operacja przypisze nadawcę "<x id="PH" equiv-text="correspondent.name"/>" do <x id="PH_1" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="translated">Ta operacja usunie nadawcę z <x id="PH" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="translated">Potwierdź przypisanie typu dokumentu</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="translated">Ta operacja przypisze typ dokumentu "<x id="PH" equiv-text="documentType.name"/>" do <x id="PH_1" equiv-text="this.list.selected.size"/> zaznaczonych dokumentów.</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="translated">Ta operacja usunie typ dokumentu z <x id="PH" equiv-text="this.list.selected.size"/> wybranych dokumentów.</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="translated">Potwierdź Usunięcie</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="translated">Ta operacja trwale usunie <x id="PH" equiv-text="this.list.selected.size"/> zaznaczonych dokumentów.</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="translated">Ta czynność nie może być cofnięta.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="translated">Usuń dokument(y)</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Wybierz:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Wszystkie</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="translated">Edycja:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="translated">Pobierz oryginały</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Sugestie:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="translated">Zapisz bieżący widok</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="translated">Pokaż wszystkie</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Statystyki</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="translated">Łącznie dokumentów: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="translated">Dokumenty w skrzynce odbiorczej: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="translated">Przetwarzane: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Błąd: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Dodano: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="translated">Łączenie...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="translated">Wysyłanie...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="translated">Przesyłanie zakończone, oczekuje...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="translated">Błąd HTTP: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Wgraj nowe dokumenty</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Upuść dokumenty tutaj lub</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Wybierz pliki</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Odrzuć zakończone</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, one {} few {Jeszcze <x id="INTERPOLATION"/> dokumenty} many {Jeszcze <x id="INTERPOLATION"/> dokumentów} =1 {Jeszcze jeden dokument} other {Jeszcze <x id="INTERPOLATION"/> dokumentów}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Otwórz dokument</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Pierwsze kroki</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="translated">Paperless jest uruchomiony! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="translated">Możesz rozpocząć przesyłanie dokumentów, upuszczając je w polu przesyłania plików po prawej stronie lub umieszczając je w skonfigurowanym folderze przetwarzania i zaczną wyświetlać się na liście dokumentów. Po dodaniu metadanych do dokumentów użyj mechanizmów filtrowania Paperless do tworzenia niestandardowych widoków (takich jak "Ostatnio dodane", 'Otagowany TODO') i pojawią się na pulpicie zamiast tej wiadomości.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="translated">Paperless oferuje więcej funkcji, które starają się ułatwić Ci życie:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Po zaimportowaniu kilku dokumentów do Paperless i przypisaniu do nich metadanych takich jak Korespondenci, Tagi i Typ dokumentu Paperless może automatycznie przypisać takie same metadane do nowych dokumentów.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="translated">Możesz skonfigurować Paperless, aby sprawdzał Twoje konto e-mail i dodawał dokumenty z załączonych plików.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Sprawdź w dokumentacji jak korzystać z tych funkcji. Sekcja o podstawowym użytkowaniu zawiera również ogólne informacje jak używać Paperless.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Metadane</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Wybierz</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Wybierz obiekt</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="translated">Niepoprawna data.</target> + </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Wyszukiwanie dokumentu z ASN <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="translated">Tak</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="translated">Nie</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">(bez tytułu)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="translated">Angielski (USA)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Angielski (Wielka Brytania)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="translated">Niemiecki</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="translated">Holenderski</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Francuski</target> + </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portugalski</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="translated">Portugalski (Brazylia)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="translated">Włoski</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="translated">Rumuński</target> + </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">Rosyjski</target> + </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="translated">Hiszpański</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="translated">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Dokument już istnieje.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="translated">Nie znaleziono pliku.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Skrypt wstępnego przetwarzania nie istnieje.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Wystąpił błąd podczas wykonywania skryptu wstępnego przetwarzania.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Skrypt przetwarzania końcowego nie istnieje.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Wystąpił błąd podczas wykonywania skryptu końcowego przetwarzania.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Otrzymano nowy plik.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Ten typ pliku nie jest obsługiwany.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Przetwarzanie dokumentu...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="translated">Generowanie miniaturki...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Pobieranie daty z dokumentu...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Zapisywanie dokumentu...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="translated">Ukończono.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Błąd</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Informacje</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Korespondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Typ dokumentu</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Utworzony</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Dodano</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Zmodyfikowano</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="translated">Utwórz nowy element</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="translated">Edytuj element</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="translated">Nie można zapisać elementu: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Automatyczny</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="translated">Czy na pewno chcesz usunąć ten element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="translated">Powiązane dokumenty nie będą usunięte.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="translated">Usuń</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="translated">Błąd podczas usuwania elementu: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Dowolne słowo</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Dowolny: Dokument zawiera dowolne z tych słów (oddzielone spacją)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Wszystkie słowa</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Wszystkie: Dokument zawiera wszystkie poniższe słowa (oddzielone spacją)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="translated">Dokładne dopasowanie</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="translated">Dokładne: Dokument zawiera ten ciąg znaków</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Wyrażenie regularne</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Wyrażenie regularne: Dokument pasuje do tego wyrażenia regularnego</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="translated">Dopasowanie rozmyte</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="translated">Rozmyte: Dokument zawiera słowo podobne do tego słowa</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="translated">Auto: ucz się dopasowywać automatycznie</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 125d2dc39..1e346b8af 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"PO-Revision-Date: 2021-04-11 15:29\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -336,11 +336,11 @@ msgstr "Titel oder Inhalt enthält" #: documents/models.py:393 msgid "fulltext query" -msgstr "" +msgstr "Volltextsuche" #: documents/models.py:394 msgid "more like this" -msgstr "" +msgstr "Ähnliche Dokumente" #: documents/models.py:405 msgid "rule type" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po new file mode 100644 index 000000000..d979c8af9 --- /dev/null +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -0,0 +1,670 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"PO-Revision-Date: 2021-04-11 21:03\n" +"Last-Translator: \n" +"Language-Team: Polish\n" +"Language: pl_PL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: pl\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Dokumenty" + +#: documents/models.py:32 +msgid "Any word" +msgstr "Dowolne słowo" + +#: documents/models.py:33 +msgid "All words" +msgstr "Wszystkie słowa" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "Dokładne dopasowanie" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "Wyrażenie regularne" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "Dopasowanie rozmyte" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "Automatyczny" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "nazwa" + +#: documents/models.py:45 +msgid "match" +msgstr "dopasowanie" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "algorytm dopasowania" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "bez rozróżniania wielkości liter" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "korespondent" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "korespondenci" + +#: documents/models.py:81 +msgid "color" +msgstr "kolor" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "jest tagiem skrzynki odbiorczej" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Zaznacza ten tag jako tag skrzynki odbiorczej: Wszystkie nowo przetworzone dokumenty będą oznaczone tagami skrzynki odbiorczej." + +#: documents/models.py:94 +msgid "tag" +msgstr "tag" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "tagi" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "typ dokumentu" + +#: documents/models.py:102 +msgid "document types" +msgstr "typy dokumentów" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "Niezaszyfrowane" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Zaszyfrowane przy użyciu GNU Privacy Guard" + +#: documents/models.py:124 +msgid "title" +msgstr "tytuł" + +#: documents/models.py:137 +msgid "content" +msgstr "zawartość" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Surowe, tekstowe dane dokumentu. To pole jest używane głównie do wyszukiwania." + +#: documents/models.py:144 +msgid "mime type" +msgstr "typ mime" + +#: documents/models.py:155 +msgid "checksum" +msgstr "suma kontrolna" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "Suma kontrolna oryginalnego dokumentu." + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "suma kontrolna archiwum" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "Suma kontrolna zarchiwizowanego dokumentu." + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "utworzono" + +#: documents/models.py:176 +msgid "modified" +msgstr "zmodyfikowano" + +#: documents/models.py:180 +msgid "storage type" +msgstr "typ przechowywania" + +#: documents/models.py:188 +msgid "added" +msgstr "dodano" + +#: documents/models.py:192 +msgid "filename" +msgstr "nazwa pliku" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "Aktualna nazwa pliku w pamięci" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "nazwa pliku archiwum" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "Aktualna nazwa pliku archiwum w pamięci" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "numer seryjny archiwum" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "Pozycja tego dokumentu w archiwum dokumentów fizycznych." + +#: documents/models.py:223 +msgid "document" +msgstr "dokument" + +#: documents/models.py:224 +msgid "documents" +msgstr "dokumenty" + +#: documents/models.py:311 +msgid "debug" +msgstr "debug" + +#: documents/models.py:312 +msgid "information" +msgstr "informacja" + +#: documents/models.py:313 +msgid "warning" +msgstr "ostrzeżenie" + +#: documents/models.py:314 +msgid "error" +msgstr "błąd" + +#: documents/models.py:315 +msgid "critical" +msgstr "krytyczne" + +#: documents/models.py:319 +msgid "group" +msgstr "grupa" + +#: documents/models.py:322 +msgid "message" +msgstr "wiadomość" + +#: documents/models.py:325 +msgid "level" +msgstr "poziom" + +#: documents/models.py:332 +msgid "log" +msgstr "log" + +#: documents/models.py:333 +msgid "logs" +msgstr "logi" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "zapisany widok" + +#: documents/models.py:345 +msgid "saved views" +msgstr "zapisane widoki" + +#: documents/models.py:348 +msgid "user" +msgstr "użytkownik" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "pokaż na pulpicie" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "pokaż na pasku bocznym" + +#: documents/models.py:361 +msgid "sort field" +msgstr "pole sortowania" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "sortuj malejąco" + +#: documents/models.py:373 +msgid "title contains" +msgstr "tytuł zawiera" + +#: documents/models.py:374 +msgid "content contains" +msgstr "zawartość zawiera" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "numer archiwum jest" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "korespondentem jest" + +#: documents/models.py:377 +msgid "document type is" +msgstr "typ dokumentu jest" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "jest w skrzynce odbiorczej" + +#: documents/models.py:379 +msgid "has tag" +msgstr "ma tag" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "ma dowolny tag" + +#: documents/models.py:381 +msgid "created before" +msgstr "utworzony przed" + +#: documents/models.py:382 +msgid "created after" +msgstr "utworzony po" + +#: documents/models.py:383 +msgid "created year is" +msgstr "rok utworzenia to" + +#: documents/models.py:384 +msgid "created month is" +msgstr "miesiąc utworzenia to" + +#: documents/models.py:385 +msgid "created day is" +msgstr "dzień utworzenia to" + +#: documents/models.py:386 +msgid "added before" +msgstr "dodany przed" + +#: documents/models.py:387 +msgid "added after" +msgstr "dodany po" + +#: documents/models.py:388 +msgid "modified before" +msgstr "zmodyfikowany przed" + +#: documents/models.py:389 +msgid "modified after" +msgstr "zmodyfikowany po" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "nie ma tagu" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "nie ma numeru archiwum" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "tytuł lub zawartość zawiera" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "zapytanie pełnotekstowe" + +#: documents/models.py:394 +msgid "more like this" +msgstr "podobne dokumenty" + +#: documents/models.py:405 +msgid "rule type" +msgstr "typ reguły" + +#: documents/models.py:409 +msgid "value" +msgstr "wartość" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "reguła filtrowania" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "reguły filtrowania" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "Nieprawidłowe wyrażenie regularne: %(error)s" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Nieprawidłowy kolor." + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Typ pliku %(type)s nie jest obsługiwany" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "Ładowanie Paperless-ng..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Wylogowano z Paperless-ng" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "Poprawnie wylogowano. Do zobaczenia!" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Zaloguj się ponownie" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Logowanie do Paperless-ng" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Proszę się zalogować." + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Twoja nazwa użytkownika i hasło nie są zgodne. Spróbuj ponownie." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Użytkownik" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Hasło" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Zaloguj się" + +#: paperless/settings.py:298 +msgid "English (US)" +msgstr "Angielski (USA)" + +#: paperless/settings.py:299 +msgid "English (GB)" +msgstr "Angielski (Wielka Brytania)" + +#: paperless/settings.py:300 +msgid "German" +msgstr "Niemiecki" + +#: paperless/settings.py:301 +msgid "Dutch" +msgstr "Holenderski" + +#: paperless/settings.py:302 +msgid "French" +msgstr "Francuski" + +#: paperless/settings.py:303 +msgid "Portuguese (Brazil)" +msgstr "Portugalski (Brazylia)" + +#: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portugalski" + +#: paperless/settings.py:305 +msgid "Italian" +msgstr "Włoski" + +#: paperless/settings.py:306 +msgid "Romanian" +msgstr "Rumuński" + +#: paperless/settings.py:307 +msgid "Russian" +msgstr "Rosyjski" + +#: paperless/settings.py:308 +msgid "Spanish" +msgstr "Hiszpański" + +#: paperless/urls.py:113 +msgid "Paperless-ng administration" +msgstr "Administracja Paperless-ng" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filtry" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless przetworzy tylko wiadomości pasujące do WSZYSTKICH filtrów podanych poniżej." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Akcje" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Akcja zastosowana do wiadomości. Ta akcja jest wykonywana tylko wtedy, gdy dokumenty zostały przetworzone z wiadomości. Poczta bez załączników pozostanie całkowicie niezmieniona." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadane" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Przypisz metadane do dokumentów zużywanych z tej reguły automatycznie. Jeśli nie przypisujesz tutaj tagów, typów lub korespondentów, Paperless będzie nadal przetwarzał wszystkie zdefiniowane przez Ciebie reguły." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Poczta Paperless" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "konto pocztowe" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "konta pocztowe" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Brak szyfrowania" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Użyj SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Użyj STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "Serwer IMAP" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "Port IMAP" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Zwykle jest to 143 dla połączeń niezaszyfrowanych i STARTTLS oraz 993 dla połączeń SSL." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "Zabezpieczenia IMAP" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "nazwa użytkownika" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "hasło" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "reguła wiadomości" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "reguły wiadomości" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Przetwarzaj tylko załączniki." + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Przetwarzaj wszystkie pliki, łącznie z załącznikami „inline”." + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Oznacz jako przeczytane, nie przetwarzaj przeczytanych wiadomości" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Oznacz wiadomość, nie przetwarzaj oznaczonych wiadomości" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Przenieś do określonego folderu" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Usuń" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Użyj tematu jako tytułu" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Użyj nazwy pliku załącznika jako tytułu" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Nie przypisuj korespondenta" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Użyj adresu e-mail" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Użyj nazwy nadawcy (lub adresu e-mail, jeśli jest niedostępna)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Użyj korespondenta wybranego poniżej" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "kolejność" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "konto" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "folder" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filtruj po nadawcy" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "filtruj po temacie" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "filtruj po treści" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "filtruj po nazwie pliku załącznika" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Przetwarzaj tylko dokumenty, które całkowicie pasują do tej nazwy pliku, jeśli jest podana. Wzorce dopasowania jak *.pdf lub *faktura* są dozwolone. Wielkość liter nie jest rozróżniana." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "nie starsze niż" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "dni." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "typ załącznika" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Załączniki typu \"inline\" zawierają osadzone obrazy, więc najlepiej połączyć tę opcję z filtrem nazwy pliku." + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "akcja" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "parametr akcji" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Dodatkowy parametr dla akcji wybranej powyżej, tj. docelowy folder akcji \"Przenieś do określonego folderu\"." + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "przypisz tytuł" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "przypisz ten tag" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "przypisz ten typ dokumentu" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "przypisz korespondenta z" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "przypisz tego korespondenta" + From 131a897453e73d73a7dc64c053a218e41bf02a2f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 13:41:26 +0200 Subject: [PATCH 732/898] add pl-PL locale --- src-ui/angular.json | 3 +- src-ui/messages.xlf | 39 ++++++++++++--------- src-ui/src/app/app.module.ts | 4 ++- src-ui/src/app/services/settings.service.ts | 2 +- src/locale/en_US/LC_MESSAGES/django.po | 6 +++- src/paperless/settings.py | 3 +- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 342172931..bd269ea1e 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -25,7 +25,8 @@ "it-IT": "src/locale/messages.it_IT.xlf", "ro-RO": "src/locale/messages.ro_RO.xlf", "ru-RU": "src/locale/messages.ru_RU.xlf", - "es-ES": "src/locale/messages.es_ES.xlf" + "es-ES": "src/locale/messages.es_ES.xlf", + "pl-PL": "src/locale/messages.pl_PL.xlf" } }, "architect": { diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 6a956512f..99f959d0e 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -188,35 +188,35 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> </trans-unit> <trans-unit id="5382975254277698192" datatype="html"> <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> </trans-unit> <trans-unit id="6691075929777935948" datatype="html"> <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> </trans-unit> <trans-unit id="719892092227206532" datatype="html"> <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> </trans-unit> <trans-unit id="1844801255494293730" datatype="html"> <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> </trans-unit> <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> @@ -1057,63 +1057,63 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> </trans-unit> <trans-unit id="3100631071441658964" datatype="html"> <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> </trans-unit> <trans-unit id="7517688192215738656" datatype="html"> <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> </trans-unit> <trans-unit id="1010505078885609376" datatype="html"> <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> </trans-unit> <trans-unit id="2649431021108393503" datatype="html"> <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> </trans-unit> <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> </trans-unit> <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> </trans-unit> <trans-unit id="7593728289020204896" datatype="html"> @@ -1205,7 +1205,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> </trans-unit> <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> @@ -1411,7 +1411,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> </trans-unit> <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> @@ -1724,6 +1724,13 @@ <context context-type="linenumber">100</context> </context-group> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index e6209a9e3..7a38d512b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -63,6 +63,7 @@ import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter' import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'; import { ColorSliderModule } from 'ngx-color/slider'; import { ColorComponent } from './components/common/input/color/color.component'; +import { DocumentAsnComponent } from './components/document-asn/document-asn.component'; import localeFr from '@angular/common/locales/fr'; import localeNl from '@angular/common/locales/nl'; @@ -73,7 +74,7 @@ import localeEnGb from '@angular/common/locales/en-GB'; import localeRo from '@angular/common/locales/ro'; import localeRu from '@angular/common/locales/ru'; import localeEs from '@angular/common/locales/es'; -import { DocumentAsnComponent } from './components/document-asn/document-asn.component'; +import localePl from '@angular/common/locales/pl'; registerLocaleData(localeFr) @@ -86,6 +87,7 @@ registerLocaleData(localeEnGb) registerLocaleData(localeRo) registerLocaleData(localeRu) registerLocaleData(localeEs) +registerLocaleData(localePl) @NgModule({ declarations: [ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index ec07208dc..c8c10e930 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -98,7 +98,7 @@ export class SettingsService { {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"}, {code: "ru-ru", name: $localize`Russian`, englishName: "Russian", dateInputFormat: "dd.mm.yyyy"}, {code: "es-es", name: $localize`Spanish`, englishName: "Spanish", dateInputFormat: "dd/mm/yyyy"}, - + {code: "pl-pl", name: $localize`Polish`, englishName: "Polish", dateInputFormat: "dd.mm.yyyy"} ] } diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 1c7cc5977..6022286f0 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\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" @@ -460,6 +460,10 @@ msgstr "" msgid "Spanish" msgstr "" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 1a033af38..94809933d 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -305,7 +305,8 @@ LANGUAGES = [ ("it-it", _("Italian")), ("ro-ro", _("Romanian")), ("ru-ru", _("Russian")), - ("es-es", _("Spanish")) + ("es-es", _("Spanish")), + ("pl-pl", _("Polish")) ] LOCALE_PATHS = [ From 670bc0331d66b2dc16776157ba8ed71392232ceb Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 14:33:07 +0200 Subject: [PATCH 733/898] add test case, update password if changed --- docker/docker-prepare.sh | 42 ++++++------ .../management/commands/manage_superuser.py | 50 +++++++------- .../tests/test_management_superuser.py | 66 +++++++++++++++++++ 3 files changed, 114 insertions(+), 44 deletions(-) create mode 100644 src/documents/tests/test_management_superuser.py diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index 53f5201e4..6ea4247b7 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -9,16 +9,13 @@ wait_for_postgres() { host="${PAPERLESS_DBHOST}" port="${PAPERLESS_DBPORT}" - if [[ -z $port ]] ; - then + if [[ -z $port ]]; then port="5432" fi - while !</dev/tcp/$host/$port ; - do + while ! </dev/tcp/$host/$port; do - if [ $attempt_num -eq $max_attempts ] - then + if [ $attempt_num -eq $max_attempts ]; then echo "Unable to connect to database." exit 1 else @@ -31,13 +28,7 @@ wait_for_postgres() { done } - migrations() { - if [[ -n "${PAPERLESS_DBHOST}" ]] - then - wait_for_postgres - fi - ( # flock is in place to prevent multiple containers from doing migrations # simultaneously. This also ensures that the db is ready when the command @@ -45,24 +36,37 @@ migrations() { flock 200 echo "Apply database migrations..." python3 manage.py migrate - ) 200>/usr/src/paperless/data/migration_lock + ) 200>/usr/src/paperless/data/migration_lock } search_index() { index_version=1 index_version_file=/usr/src/paperless/data/.index_version - if [[ (! -f "$index_version_file") || $(< $index_version_file) != "$index_version" ]]; then + if [[ (! -f "$index_version_file") || $(<$index_version_file) != "$index_version" ]]; then echo "Search index out of date. Updating..." python3 manage.py document_index reindex echo $index_version | tee $index_version_file >/dev/null fi } -do_work() { - migrations; - - search_index; +superuser() { + if [[ -n "${PAPERLESS_ADMIN_USER}" ]]; then + sudo -HEu paperless python3 manage.py manage_superuser + fi } -do_work; +do_work() { + if [[ -n "${PAPERLESS_DBHOST}" ]]; then + wait_for_postgres + fi + + migrations + + search_index + + superuser + +} + +do_work diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py index 81732e7d9..d967eab81 100644 --- a/src/documents/management/commands/manage_superuser.py +++ b/src/documents/management/commands/manage_superuser.py @@ -1,9 +1,13 @@ +import logging import os from django.contrib.auth.models import User from django.core.management.base import BaseCommand, CommandError +logger = logging.getLogger("paperless.management.superuser") + + class Command(BaseCommand): help = """ @@ -12,29 +16,25 @@ class Command(BaseCommand): def handle(self, *args, **options): - PAPERLESS_ADMIN_USER = os.getenv('PAPERLESS_ADMIN_USER') - PAPERLESS_ADMIN_MAIL = os.getenv('PAPERLESS_ADMIN_MAIL', 'root@localhost') - PAPERLESS_ADMIN_PASSWORD = os.getenv('PAPERLESS_ADMIN_PASSWORD') + username = os.getenv('PAPERLESS_ADMIN_USER') + if not username: + return - # If PAPERLESS_ADMIN_USER env variable is set - if PAPERLESS_ADMIN_USER: - try: - # Check if user exists already, leave as is if it does - if User.objects.filter( - username=PAPERLESS_ADMIN_USER).exists(): - self.stdout.write( - f'The user "{PAPERLESS_ADMIN_USER}" already exists! Leaving user as is.') - elif PAPERLESS_ADMIN_PASSWORD: - # Create superuser based on env variables - User.objects.create_superuser( - PAPERLESS_ADMIN_USER, PAPERLESS_ADMIN_MAIL, PAPERLESS_ADMIN_PASSWORD) - self.stdout.write( - f'Created superuser "{PAPERLESS_ADMIN_USER}" with provided password.') - else: - self.stdout.write( - f'Did not create superuser "{PAPERLESS_ADMIN_USER}".') - self.stdout.write( - 'Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') - except Exception as error: - self.stdout.write( - f'Exception occured while creating superuser: {error}') + mail = os.getenv('PAPERLESS_ADMIN_MAIL', 'root@localhost') + password = os.getenv('PAPERLESS_ADMIN_PASSWORD') + + # Check if user exists already, leave as is if it does + if User.objects.filter(username=username).exists(): + user: User = User.objects.get_by_natural_key(username) + user.set_password(password) + user.save() + elif password: + # Create superuser based on env variables + User.objects.create_superuser(username, mail, password) + self.stdout.write( + f'Created superuser "{username}" with provided password.') + else: + self.stdout.write( + f'Did not create superuser "{username}".') + self.stdout.write( + 'Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') diff --git a/src/documents/tests/test_management_superuser.py b/src/documents/tests/test_management_superuser.py new file mode 100644 index 000000000..ca28db89c --- /dev/null +++ b/src/documents/tests/test_management_superuser.py @@ -0,0 +1,66 @@ +import os +import shutil +from unittest import mock + +from django.contrib.auth.models import User +from django.core.management import call_command +from django.test import TestCase + +from documents.management.commands.document_thumbnails import _process_document +from documents.models import Document, Tag, Correspondent, DocumentType +from documents.tests.utils import DirectoriesMixin + + +class TestManageSuperUser(DirectoriesMixin, TestCase): + + def reset_environment(self): + if "PAPERLESS_ADMIN_USER" in os.environ: + del os.environ["PAPERLESS_ADMIN_USER"] + if "PAPERLESS_ADMIN_PASSWORD" in os.environ: + del os.environ["PAPERLESS_ADMIN_PASSWORD"] + + def setUp(self) -> None: + super().setUp() + self.reset_environment() + + def tearDown(self) -> None: + super().tearDown() + self.reset_environment() + + def test_no_user(self): + call_command("manage_superuser") + + # just the consumer user. + self.assertEqual(User.objects.count(), 1) + self.assertTrue(User.objects.filter(username="consumer").exists()) + + def test_create(self): + os.environ["PAPERLESS_ADMIN_USER"] = "new_user" + os.environ["PAPERLESS_ADMIN_PASSWORD"] = "123456" + + call_command("manage_superuser") + + user: User = User.objects.get_by_natural_key("new_user") + self.assertTrue(user.check_password("123456")) + + def test_update(self): + os.environ["PAPERLESS_ADMIN_USER"] = "new_user" + os.environ["PAPERLESS_ADMIN_PASSWORD"] = "123456" + + call_command("manage_superuser") + + os.environ["PAPERLESS_ADMIN_USER"] = "new_user" + os.environ["PAPERLESS_ADMIN_PASSWORD"] = "more_secure_pwd_7645" + + call_command("manage_superuser") + + user: User = User.objects.get_by_natural_key("new_user") + self.assertTrue(user.check_password("more_secure_pwd_7645")) + + def test_no_password(self): + os.environ["PAPERLESS_ADMIN_USER"] = "new_user" + + call_command("manage_superuser") + + with self.assertRaises(User.DoesNotExist): + User.objects.get_by_natural_key("new_user") From 651378e7a988996aa4cd31c57fa800d2e52c03af Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 14:36:04 +0200 Subject: [PATCH 734/898] pycodestyle --- src/documents/management/commands/manage_superuser.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/documents/management/commands/manage_superuser.py b/src/documents/management/commands/manage_superuser.py index d967eab81..ef3635e52 100644 --- a/src/documents/management/commands/manage_superuser.py +++ b/src/documents/management/commands/manage_superuser.py @@ -28,6 +28,7 @@ class Command(BaseCommand): user: User = User.objects.get_by_natural_key(username) user.set_password(password) user.save() + self.stdout.write(f"Changed password of user {username}.") elif password: # Create superuser based on env variables User.objects.create_superuser(username, mail, password) @@ -37,4 +38,5 @@ class Command(BaseCommand): self.stdout.write( f'Did not create superuser "{username}".') self.stdout.write( - 'Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your "docker-compose.env" file.') + 'Make sure you specified "PAPERLESS_ADMIN_PASSWORD" in your ' + '"docker-compose.env" file.') From 024e3e4b811feb1280e0dd2cbd68c3d6f5277388 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 14:37:31 +0200 Subject: [PATCH 735/898] New Crowdin updates (#928) --- src-ui/src/locale/messages.cs_CZ.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.de_DE.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.en_GB.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.es_ES.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.fr_FR.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.hu_HU.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.it_IT.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.nl_NL.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.pl_PL.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.pt_BR.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.pt_PT.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.ro_RO.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.ru_RU.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.xh_ZA.xlf | 40 +++++++++++++++----------- src-ui/src/locale/messages.zh_CN.xlf | 40 +++++++++++++++----------- src/locale/cs_CZ/LC_MESSAGES/django.po | 8 ++++-- src/locale/de_DE/LC_MESSAGES/django.po | 8 ++++-- src/locale/en_GB/LC_MESSAGES/django.po | 8 ++++-- src/locale/es_ES/LC_MESSAGES/django.po | 8 ++++-- src/locale/fr_FR/LC_MESSAGES/django.po | 8 ++++-- src/locale/hu_HU/LC_MESSAGES/django.po | 8 ++++-- src/locale/it_IT/LC_MESSAGES/django.po | 8 ++++-- src/locale/nl_NL/LC_MESSAGES/django.po | 8 ++++-- src/locale/pl_PL/LC_MESSAGES/django.po | 8 ++++-- src/locale/pt_BR/LC_MESSAGES/django.po | 8 ++++-- src/locale/pt_PT/LC_MESSAGES/django.po | 8 ++++-- src/locale/ro_RO/LC_MESSAGES/django.po | 8 ++++-- src/locale/ru_RU/LC_MESSAGES/django.po | 8 ++++-- src/locale/xh_ZA/LC_MESSAGES/django.po | 8 ++++-- src/locale/zh_CN/LC_MESSAGES/django.po | 8 ++++-- 30 files changed, 450 insertions(+), 270 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 335046a73..f678176a6 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="needs-translation">Confirm delete</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="needs-translation">Delete document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="needs-translation">Title</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="needs-translation">Title & content</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="needs-translation">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="needs-translation">Filter tags</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="needs-translation">Filter correspondents</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="needs-translation">Filter document types</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="needs-translation">Reset filters</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="needs-translation">Score:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="needs-translation">Suggestions:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="needs-translation">Spanish</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 9047251ef..34a8570e7 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Löschen bestätigen</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Möchten Sie das Dokument "<x id="PH" equiv-text="this.document.title"/>" wirklich löschen?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Dokument löschen</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Fehler beim Löschen des Dokuments: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Titel</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Titel & Inhalt</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Erweiterte Suche</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Ähnlich zu</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Tags filtern</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Korrespondenten filtern</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Dokumenttypen filtern</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Filter zurücksetzen</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Relevanz:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Vorschläge:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Spanisch</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index a8d967b9e..802a35216 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Confirm delete</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Delete document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Title</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Title & content</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filter tags</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filter correspondents</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filter document types</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Reset filters</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Score:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Suggestions:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Spanish</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index f0ba5e8a6..85ca0ec98 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Confirmar borrado</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">¿Estás seguro de querer borrar el documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Los archivos para este documento serán borrados permanentemente. Esta operación no se puede deshacer.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Borrar documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Error borrando el documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Titulo y contenido</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">NSF</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtrar etiquetas</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtrar tipos de documento</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtrar tipos de documento</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Quitar filtros</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Puntuación:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Sugerencias:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Español</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 8ea2adb60..1ac342a90 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Confirmer la suppression</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Voulez-vous vraiment supprimer le document "<x id="PH" equiv-text="this.document.title"/>" ?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Les fichiers liés à ce document seront supprimés définitivement. Cette action est irréversible.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Supprimer le document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Une erreur s'est produite lors de la suppression du document : <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Titre</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Titre & contenu</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Recherche avancée</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Plus comme</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtrer les étiquettes</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtrer les correspondants</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtrer les types de documents</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Réinitialiser les filtres</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Score :</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Suggestions : </target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Espagnol</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 57a95252b..2d419f0c0 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Törlés megerősítése</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">A dokumentumhoz tartozó fájlok véglegesen törlésre kerülnek. Ez a művelet nem visszafordítható.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Dokumentum törlése</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Cím</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="needs-translation">Title & content</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Cimkék szerinti szűrés</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Partnerek szerinti szűrés</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Dokumentum típus szerinti szűrés</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="needs-translation">Reset filters</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Pont:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="needs-translation">Suggestions:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="needs-translation">Spanish</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 51ad7370f..8b2960dfd 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Conferma eliminazione</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Vuoi eliminare il documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">I file di questo documento saranno eliminati permanentemente. Questa operazione è irreversibile.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Elimina documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Errore nell'eliminazione del documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Titolo</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Titolo & contenuto</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Ricerca avanzata</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Più come</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtra tag</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtra corrispondenti</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtra tipi di documento</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Ripristina filtri</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Punteggio:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Suggerimenti:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Spagnolo</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 21d3e746d..c0143ab1f 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Bevestig het verwijderen</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Wilt u het document echt verwijderen "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">De bestanden voor dit document worden definitief verwijderd. Deze bewerking kan niet ongedaan worden gemaakt.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Verwijder document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Fout bij het verwijderen van het document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Titel</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Titel en inhoud</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Geavanceerd zoeken</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Meer zoals</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Etiketten filteren</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Correspondenten filteren</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Documenttypes filteren</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Filters terug zetten</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Score:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Suggesties:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Spaans</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index ff14fe12d..0e93841d8 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Potwierdź usunięcie</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Czy na pewno chcesz usunąć dokument"<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Pliki tego dokumentu zostaną trwale usunięte. Tej operacji nie można cofnąć.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Usuń dokument</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Błąd podczas usuwania dokumentu: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Tytuł</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Tytuł & treść</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Wyszukiwanie zaawansowane</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Podobne do</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtruj tagi</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtruj nadawców</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtruj typy dokumentów</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Zresetuj filtry</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Wynik:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Sugestie:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Hiszpański</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 946173aad..f68d7a583 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Confirmar exclusão</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Você realmente deseja excluir o documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Excluir documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Erro ao excluir documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Título & conteúdo</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtrar etiquetas</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtrar correspondentes</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtrar tipos de documento</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Limpar filtros</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Nota:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Sugestões:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="needs-translation">Spanish</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 2c4d6d543..01107a2f3 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Confirmar exclusão</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Você realmente deseja excluir o documento "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Os arquivos desse documento serão excluídos permanentemente. Essa operação não pode ser revertida.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Excluir documento</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Erro ao excluir documento: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Título</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Título & conteúdo</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">NSA</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Pesquisa avançada</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Mais semelhante</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtrar etiquetas</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtrar correspondentes</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtrar tipos de documentos</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Limpar filtros</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Pontuação:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Sugestões:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Espanhol</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 0eb8c72ac..1e7459cd1 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Confirmă ștergerea</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Sunteţi sigur că doriţi să ştergeţi documentul "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Fișierele pentru acest document vor fi șterse permanent. Operațiunea este ireversibila.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Șterge document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Eroare la ștergerea documentului: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Titlu</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Titlu si conținut</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">Aviz prealabil de expediție</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Filtrează etichete</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Filtrează corespondenți</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Filtrează tipuri de documente</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Resetare filtre</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Scor:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Sugestii:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Spaniolă</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index c0b9f8eff..585ba859a 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="translated">Подтвердите удаление</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="translated">Вы действительно хотите удалить документ "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="translated">Файлы из этого документа будут удалены незамедлительно. Это операцию нельзя отменить.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="translated">Удалить документ</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="translated">Ошибка удаления документа: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="translated">Заголовок</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="translated">Название и содержимое</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="translated">АН</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="translated">Расширенный поиск</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="translated">Больше похожих</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="translated">Фильтр тегов</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="translated">Фильтр корреспондентов</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="translated">Фильтр типа документов</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="translated">Сбросить фильтры</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="translated">Оценка:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="translated">Рекомендации:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="translated">Испанский</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index d9f1f631c..e287bf805 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target>crwdns2890:0crwdne2890:0</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target>crwdns2892:0crwdne2892:0</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target>crwdns2894:0crwdne2894:0</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target>crwdns2896:0crwdne2896:0</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target>crwdns2898:0crwdne2898:0</target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target>crwdns3134:0crwdne3134:0</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target>crwdns3136:0crwdne3136:0</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target>crwdns3354:0crwdne3354:0</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target>crwdns3434:0crwdne3434:0</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target>crwdns3436:0crwdne3436:0</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target>crwdns3152:0crwdne3152:0</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target>crwdns3154:0crwdne3154:0</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target>crwdns3156:0crwdne3156:0</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target>crwdns3158:0crwdne3158:0</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target>crwdns3186:0crwdne3186:0</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target>crwdns3240:0crwdne3240:0</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target>crwdns3418:0crwdne3418:0</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target>crwdns3442:0crwdne3442:0</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index 5f21489b4..a640ee859 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -214,7 +214,7 @@ <source>Confirm delete</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">204</context> + <context context-type="linenumber">206</context> </context-group> <target state="needs-translation">Confirm delete</target> </trans-unit> @@ -222,7 +222,7 @@ <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">205</context> + <context context-type="linenumber">207</context> </context-group> <target state="needs-translation">Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</target> </trans-unit> @@ -230,7 +230,7 @@ <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">206</context> + <context context-type="linenumber">208</context> </context-group> <target state="needs-translation">The files for this document will be deleted permanently. This operation cannot be undone.</target> </trans-unit> @@ -238,7 +238,7 @@ <source>Delete document</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">208</context> + <context context-type="linenumber">210</context> </context-group> <target state="needs-translation">Delete document</target> </trans-unit> @@ -246,7 +246,7 @@ <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> - <context context-type="linenumber">215</context> + <context context-type="linenumber">217</context> </context-group> <target state="needs-translation">Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></target> </trans-unit> @@ -1207,7 +1207,7 @@ <source>Title</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">85</context> + <context context-type="linenumber">88</context> </context-group> <target state="needs-translation">Title</target> </trans-unit> @@ -1215,7 +1215,7 @@ <source>Title & content</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">89</context> </context-group> <target state="needs-translation">Title & content</target> </trans-unit> @@ -1223,7 +1223,7 @@ <source>ASN</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">87</context> + <context context-type="linenumber">90</context> </context-group> <target state="needs-translation">ASN</target> </trans-unit> @@ -1231,7 +1231,7 @@ <source>Advanced search</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">88</context> + <context context-type="linenumber">91</context> </context-group> <target state="needs-translation">Advanced search</target> </trans-unit> @@ -1239,7 +1239,7 @@ <source>More like</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> - <context context-type="linenumber">91</context> + <context context-type="linenumber">94</context> </context-group> <target state="needs-translation">More like</target> </trans-unit> @@ -1247,7 +1247,7 @@ <source>Filter tags</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">20</context> + <context context-type="linenumber">19</context> </context-group> <target state="needs-translation">Filter tags</target> </trans-unit> @@ -1255,7 +1255,7 @@ <source>Filter correspondents</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">28</context> + <context context-type="linenumber">27</context> </context-group> <target state="needs-translation">Filter correspondents</target> </trans-unit> @@ -1263,7 +1263,7 @@ <source>Filter document types</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">35</context> + <context context-type="linenumber">34</context> </context-group> <target state="needs-translation">Filter document types</target> </trans-unit> @@ -1271,7 +1271,7 @@ <source>Reset filters</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> - <context context-type="linenumber">58</context> + <context context-type="linenumber">57</context> </context-group> <target state="needs-translation">Reset filters</target> </trans-unit> @@ -1376,7 +1376,7 @@ <source>Score:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> - <context context-type="linenumber">86</context> + <context context-type="linenumber">87</context> </context-group> <target state="needs-translation">Score:</target> </trans-unit> @@ -1611,7 +1611,7 @@ <source>Suggestions:</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> - <context context-type="linenumber">26</context> + <context context-type="linenumber">29</context> </context-group> <target state="needs-translation">Suggestions:</target> </trans-unit> @@ -1969,6 +1969,14 @@ </context-group> <target state="needs-translation">Spanish</target> </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="needs-translation">Polish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index f1721aec9..a77087cfb 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -456,6 +456,10 @@ msgstr "" msgid "Spanish" msgstr "" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 1e346b8af..6ed7577fe 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-11 15:29\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -456,6 +456,10 @@ msgstr "Russisch" msgid "Spanish" msgstr "Spanisch" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 927cc7990..8ccee9c09 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -456,6 +456,10 @@ msgstr "Russian" msgid "Spanish" msgstr "Spanish" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 8ae873b73..f82e654ef 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -456,6 +456,10 @@ msgstr "Ruso" msgid "Spanish" msgstr "Español" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng Administración" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index c6169d5d2..7286330cc 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-06 12:03\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -456,6 +456,10 @@ msgstr "Russe" msgid "Spanish" msgstr "Espagnol" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index 1ff2ac38c..8a496c723 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -456,6 +456,10 @@ msgstr "" msgid "Spanish" msgstr "" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index cb7ee6711..c6c41803e 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 21:31\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -456,6 +456,10 @@ msgstr "Russo" msgid "Spanish" msgstr "Spagnolo" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index dba3a5760..fea183e6c 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-06 12:03\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -456,6 +456,10 @@ msgstr "Russisch" msgid "Spanish" msgstr "Spaans" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po index d979c8af9..40a9140de 100644 --- a/src/locale/pl_PL/LC_MESSAGES/django.po +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-11 21:03\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:46\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -456,6 +456,10 @@ msgstr "Rosyjski" msgid "Spanish" msgstr "Hiszpański" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administracja Paperless-ng" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 315f72672..2e07540a1 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -456,6 +456,10 @@ msgstr "" msgid "Spanish" msgstr "" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 70eb58d77..39bee93f9 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 21:31\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:46\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -456,6 +456,10 @@ msgstr "Russo" msgid "Spanish" msgstr "Espanhol" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 2e7eeda65..00a83d366 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:19\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:46\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -456,6 +456,10 @@ msgstr "Rusă" msgid "Spanish" msgstr "Spaniolă" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administrare Paperless-ng" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index ef61d2aa3..a33c8d4a4 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 21:31\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -456,6 +456,10 @@ msgstr "Русский" msgid "Spanish" msgstr "Испанский" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Администрирование Paperless-ng" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index 3bdc5631f..b30b40a0e 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:46\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -456,6 +456,10 @@ msgstr "crwdns3414:0crwdne3414:0" msgid "Spanish" msgstr "crwdns3420:0crwdne3420:0" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "crwdns3444:0crwdne3444:0" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "crwdns2732:0crwdne2732:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 17d9d5ffc..356e1ab19 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-05 22:05+0200\n" -"PO-Revision-Date: 2021-04-05 20:20\n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-04-17 11:47\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -456,6 +456,10 @@ msgstr "" msgid "Spanish" msgstr "" +#: paperless/settings.py:309 +msgid "Polish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" From ab1955c09ebbf467baac807cf8a70e7eb00b2488 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 14:56:25 +0200 Subject: [PATCH 736/898] update dependencies --- Pipfile | 2 +- Pipfile.lock | 375 +++++++++++++++++++++++------------------------ requirements.txt | 22 +-- 3 files changed, 199 insertions(+), 200 deletions(-) diff --git a/Pipfile b/Pipfile index c80f734f2..8a33e577f 100644 --- a/Pipfile +++ b/Pipfile @@ -10,7 +10,7 @@ name = "piwheels" [packages] dateparser = "~=1.0.0" -django = "~=3.1.3" +django = "~=3.2" django-cors-headers = "*" django-extensions = "*" django-filter = "~=2.4.0" diff --git a/Pipfile.lock b/Pipfile.lock index bad0dbe79..cc2ae3124 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e1b8a4e731cfb66e6e4cb43aa9160eeccdaf4c459710b197f7c7bf3e95825f6a" + "sha256": "6dd5af1c2a4025ca82cf6092121f4571fda57df7c47e028b8c25da20ef7e16cd" }, "pipfile-spec": 6, "requires": {}, @@ -36,11 +36,11 @@ }, "asgiref": { "hashes": [ - "sha256:5ee950735509d04eb673bd7f7120f8fa1c9e2df495394992c73234d526907e17", - "sha256:7162a3cb30ab0609f1a4c95938fd73e8604f63bdba516a7f7d64b83ff09478f0" + "sha256:92906c611ce6c967347bbfea733f13d6313901d54dcca88195eaeb52b2a8e8ee", + "sha256:d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78" ], - "markers": "python_version >= '3.5'", - "version": "==3.3.1" + "markers": "python_version >= '3.6'", + "version": "==3.3.4" }, "async-timeout": { "hashes": [ @@ -209,11 +209,11 @@ }, "daphne": { "hashes": [ - "sha256:0052c9887600c57054a5867d4b0240159fa009faa3bcf6a1627271d9cdcb005a", - "sha256:c22b692707f514de9013651ecb687f2abe4f35cf6fe292ece634e9f1737bc7e3" + "sha256:76ffae916ba3aa66b46996c14fa713e46004788167a4873d647544e750e0e99f", + "sha256:a9af943c79717bc52fe64a3c236ae5d3adccc8b5be19c881b442d2c3db233393" ], "markers": "python_version >= '3.6'", - "version": "==3.0.1" + "version": "==3.0.2" }, "dateparser": { "hashes": [ @@ -225,11 +225,11 @@ }, "django": { "hashes": [ - "sha256:32ce792ee9b6a0cbbec340123e229ac9f765dff8c2a4ae9247a14b2ba3a365a7", - "sha256:baf099db36ad31f970775d0be5587cc58a6256a6771a44eb795b554d45f211b8" + "sha256:0604e84c4fb698a5e53e5857b5aea945b2f19a18f25f10b8748dbdf935788927", + "sha256:21f0f9643722675976004eb683c55d33c05486f94506672df3d6a141546f389d" ], "index": "pypi", - "version": "==3.1.7" + "version": "==3.2" }, "django-cors-headers": { "hashes": [ @@ -241,11 +241,11 @@ }, "django-extensions": { "hashes": [ - "sha256:674ad4c3b1587a884881824f40212d51829e662e52f85b012cd83d83fe1271d9", - "sha256:9507f8761ee760748938fd8af766d0608fb2738cf368adfa1b2451f61c15ae35" + "sha256:081828e985485662f62a22340c1506e37989d14b927652079a5b7cd84a82368b", + "sha256:17f85f4dcdd5eea09b8c4f0bad8f0370bf2db6d03e61b431fa7103fee29888de" ], "index": "pypi", - "version": "==3.1.1" + "version": "==3.1.2" }, "django-filter": { "hashes": [ @@ -590,11 +590,11 @@ }, "pathvalidate": { "hashes": [ - "sha256:5263a75d6335b2e9ac2010f38fbd85225b8dff274ded63e5ac21d94ce6b130c8", - "sha256:d0dab13e121628829f5aeb01220ca7af00c3b3b2fe5d83dc81fa0612ad58ade9" + "sha256:3c9bd94c7ec23e9cfb211ffbe356ae75f979d6c099a2c745ee9490f524f32468", + "sha256:f5dde7efeeb4262784c5e1331e02752d07c1ec3ee5ea42683fe211155652b808" ], "index": "pypi", - "version": "==2.4.0" + "version": "==2.4.1" }, "pdfminer.six": { "hashes": [ @@ -606,32 +606,32 @@ }, "pikepdf": { "hashes": [ - "sha256:018ee534527debd2cfcde0dd856a454a218ddb57e5ba1240810489e50be70a6e", - "sha256:19e4fdafb66b2093b42cd81230122f4789d0ef90d85d451bcb0249739295303d", - "sha256:232789113d6044816e5eeff0061e9014febfc889cf24be9fb17d172c504c1b53", - "sha256:6637f1895e5e93b2032077ded757846c9a90147fb9195bb73dd4b8a2f333e888", - "sha256:7a804515942049f846d548d3b817317f8136e06938737ff64b79c82d61908e27", - "sha256:7c90ae70684efad9477c4ada293187a4542afd685029f82b478f011d4f8cdcc0", - "sha256:7dea84178ebfb35195eedca47a38d99ca8264e1c6e8ff6f37ccb5d7b2ca903d3", - "sha256:95f36bd3920159320547c61c7aa753b9a423e43fedb350617c7eb9925bf48618", - "sha256:a5b57f1b5d5df49b0269e8039b1ba08abb42fdd6f5b6c4b49635be754a77472a", - "sha256:ae8ead8f975864aaf97b24cd916d1bf2e536eb64e7afb65ca679ed29b1ca5b89", - "sha256:b11e1bbc38eb90bfbf2eb0f2f50b300c4142732c148802d6e5f4caa5727fc81e", - "sha256:b192cb3f087509075febb28652d48800da1f3fc1842f94cea25a49fba7350a06", - "sha256:c024de7e57329353f82d287ca13e118e1438b6fd94b33475a474cd7fd16fbb8d", - "sha256:d05a5d22f1bec0979678388c453644f83f74348ab821815b9f1ccb947d4a21e4", - "sha256:d124e11eaacf5fe1bf77ca4c1b6b1a8d5285d00d3593c5cb6eba53058cdf9dae", - "sha256:dde6fde7a32c31aa515782ea967e32dbea97a19ef3fbbde45a93c5f65cabb36f", - "sha256:e03dd2131eba5c966fbb46b675006753945a251e9e9ad44ef141257db37b9c1a", - "sha256:e345206fe51b862022ece4e4e7468bbb955eacda9a9684387ff2f1c91c1def03", - "sha256:e7295619ea4b0fa714bfff24aaf865f7e6c298e82e77ce127b6a76f47377f7f3", - "sha256:f0cdb331b585074a50e9c8a967f68b905aa8674cc3d6577f004a93414f70f211", - "sha256:f3bd63e6db4a105074f6b5951a71313bc0ca8530b0050e3a03680639d05b5500", - "sha256:f6aaf410174ba10df545ccb6fe9b42fa5fd34b1bb4df366722af640275f3406a", - "sha256:ff48af76f461f40f36917baad52918f9afcb45762a7f4c07b6a7ec7e976d558d" + "sha256:14a93f2b61adc975453dfc9edf3335be704732a8750a009ba3d12913ff043abe", + "sha256:25ba3bf96eae3a7c897db5bf6a60b26ebde1c161145af73a044950901b754bcb", + "sha256:29742273f80e75c48e700c5438636fe78a856e1706e353ea57715732fb75fcd6", + "sha256:3790ed5b9d0db8c8bd28d96cb10b91649179eac04873ed23e6dc474515892cc3", + "sha256:3a76702b12f78abe591a6270756a56225a63a26c5a00aad8bc3ffd8680178ab2", + "sha256:56ce22cd134c96035abf984aa167a16e7c658c3ccc0cd626a7002f911eba7452", + "sha256:578e80adcd4703b752c381517853a074633baa219be4bd36d6752fb742a0f8b4", + "sha256:5b286e9862a21bbe9dfb0da827818f710a303d9b78f821710c37e8059839c7da", + "sha256:6b12c8835f52d07cb68f30d115e1361cd1143f1aa2c70f49ded6d69d9c4fcdd2", + "sha256:6e6dd17783c6cf038b179dcf662982d1cca891a3e30232aec0221cc69821b7f1", + "sha256:7e4e7e53781d85a609bdf899d585a39a69e9eedf2b9ac75261685a1aff0072ea", + "sha256:810488f80a1d93652498222f9d1391d9287b3b842971d7a8878e69a287c2476f", + "sha256:85ab867102d7c2182acf852c61ca60c90790bfbb4a939dc096054d904318ba37", + "sha256:8babd800331978d20d82ed1494868d15f5b953266c2b943a7d34e4826016e0b8", + "sha256:94f20e08cdfcba011440204fd9df381af1c423a9888dfd3287b66d9e7e1421bf", + "sha256:9d4a1cc8da1860d8772e831b03ea05386ae6a805718cd8621de736725d52a901", + "sha256:9f67e2c57413ac8be4eec5344c2bcaeb1a18c59fe348afd589d9b95bd4dfc077", + "sha256:b4c64ddc8fe9b11dc52f81d38076bd560ce97abf4695151d2eab390ae760fcac", + "sha256:b5d4431e77f32fd1edc10d214db89b33f2c7f8ceb7152a6651192ef90945db17", + "sha256:d3a0cf2dcc10cd7a7b877e955cfac7ddee6050860a39375f46218f7f1c02e903", + "sha256:dd551d5ff0e4c95537a366fb2281152c7293e60d60bf6ba909faba7d0ee669ad", + "sha256:dea790ae9809ab0ed0f5e32c938d36441f5ab3e74a884692ce84902e8ed1187b", + "sha256:fe47949abbf9f67416e545b0c61c8e75546f1ad8f4cfbe5ee608824258cdaa3e" ], "index": "pypi", - "version": "==2.10.0" + "version": "==2.11.1" }, "pillow": { "hashes": [ @@ -794,11 +794,11 @@ }, "python-dotenv": { "hashes": [ - "sha256:31d752f5b748f4e292448c9a0cac6a08ed5e6f4cefab85044462dcad56905cec", - "sha256:9fa413c37d4652d3fa02fea0ff465c384f5db75eab259c4fc5d0c5b8bf20edd4" + "sha256:471b782da0af10da1a80341e8438fca5fadeba2881c54360d5fd8d03d03a4f4a", + "sha256:49782a97c9d641e8a09ae1d9af0856cc587c8d2474919342d5104d85be9890b2" ], "index": "pypi", - "version": "==0.16.0" + "version": "==0.17.0" }, "python-gnupg": { "hashes": [ @@ -876,87 +876,87 @@ }, "regex": { "hashes": [ - "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139", - "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5", - "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa", - "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3", - "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df", - "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f", - "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e", - "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd", - "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d", - "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e", - "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f", - "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa", - "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68", - "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643", - "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3", - "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be", - "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578", - "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c", - "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5", - "sha256:63f861afb575ee39fc42df919ca6c625b534cf51b2b95d54fc97f85d293a22a2", - "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba", - "sha256:808276b84e69346635da368f4b9d37ab8b27ce20a7b30e9cbb3717d1e81c78ec", - "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe", - "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c", - "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a", - "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb", - "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d", - "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38", - "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18", - "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce", - "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa", - "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6", - "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5", - "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90", - "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c", - "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106", - "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7", - "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0", - "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689", - "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd", - "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932", - "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf", - "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14" + "sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5", + "sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79", + "sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31", + "sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500", + "sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11", + "sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14", + "sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3", + "sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439", + "sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c", + "sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82", + "sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711", + "sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093", + "sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a", + "sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb", + "sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8", + "sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17", + "sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000", + "sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d", + "sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480", + "sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc", + "sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0", + "sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9", + "sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765", + "sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e", + "sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a", + "sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07", + "sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f", + "sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac", + "sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7", + "sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed", + "sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968", + "sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7", + "sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2", + "sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4", + "sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87", + "sha256:d2c4616a9a56a6ecc39eeab09ecfed4dbc051b9200fb5c9f35b2a98ae6f99a96", + "sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8", + "sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10", + "sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29", + "sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605", + "sha256:f153be3ed31a48e47cc32cf0ffb14d27ccdefacac04f9eaf7fae1a59643ea9ef", + "sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6", + "sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042" ], - "version": "==2021.3.17" + "version": "==2021.4.4" }, "reportlab": { "hashes": [ - "sha256:13ac281c8d5c904089022377bd9646c910deae63e7342dd9552088d330d73e89", - "sha256:14f38792176e41642f9ea7a83678df156d8abb3a90bbe396425a200614eed03d", - "sha256:15aeb8f8bdad5fa666d18a7d229bc7eb8f4e5a1dc8423931b3e690b6ce5021bc", - "sha256:1db86072b0ec3e5f9c5ab2980c61658ae3acee86e204b0d4c48112bc5cffd2f5", - "sha256:202109018f40d620812cf30dc300ea73385aed305d1de63c42229cb881821ffb", - "sha256:30e82ec00c566c4d8bfdcca0b93131749cc51ea0884395054d2afedf266f3f29", - "sha256:374252d118719e7b9b1bd0e5ce3f7083b5aaaeb1a9422983aa63b116621d34ae", - "sha256:3c1be70cf168ed29a449a009d7cad6dcc3e45d129f7ddb07b3854b8cee8d125b", - "sha256:45fe94e90c6b48c4ae877339b777fcc4f822795c1d4c7a0d6cffaf24987199b1", - "sha256:536f1ebf951cd48623974ba160c95e7c7219d4aa5664cdae17dffa2f19cf1cf3", - "sha256:54827fa29843b15834e5bc618508f245f3addee7bf980eebacfebb74f150e611", - "sha256:55c903f8aea4fbfca26f9f821c77c576c9791ce487ddfa3ffa1f2c44c5af79e2", - "sha256:63fba51babad0047def4ffaa41d0065248ca39d680e98dc9e3010de5425539b4", - "sha256:6fc3f01e9005ac53d639eafe22b3852937e42161d74a7d0681bc83f48cff1b30", - "sha256:6ff269ea41daa5cfd6124b13da1481fc40db2539fa82107dd9675f6670d95c25", - "sha256:7711fcdb0c1edfb48dcffd7e73430e9b5ceba0816a37fd269a327cd13088bcaf", - "sha256:7d4a59975a743eddc15895014d738bb38cbdecdd2496f651fb05779486bcb536", - "sha256:879e1123d49e0df76c478cccdacd4a9f4a2b4b445beec3d72a05f8b3775daa84", - "sha256:aa1ec9557c0d9dbe3eceb6581220aa1d77c404b8ff3decb40eae0bf075512142", - "sha256:ad0d3f657addd9c4215faf2699eafd54e89e404e35d696dda9dbe3c126132900", - "sha256:b784685141fe3fc26d8f703b21f89073a0ce46a800d06b7d58f2ceb481a65644", - "sha256:bd0870c840d47a6639df17c54f0c5676a06ab6798bb92ed8ef9b983c0326c2d0", - "sha256:bdb0781d1d4d1ed0745f5f22c06ed60760865511e65046432d145f55fd908f60", - "sha256:ce04f4bf9d15895bbfee6d53eb168cffd9fcedc625f0fcb5c343d809d0b37271", - "sha256:cf76145a89bb0ebf562c3252ce4d254547fe59daeb80ce2076d89867e9c03735", - "sha256:e8ebb34f30a11ac4196ae83d0b4f1f87bbe326c0f8a6eb4b768e622ec7f017f5", - "sha256:ed4b80c24a4e5e91927aa95901cce3f6fef7551e94a72ac5a2fa22740708cbff", - "sha256:f8a8f8b62cc150f71310e444ded4e32e7136c75aced6738877c3328e84338c94", - "sha256:fdd08e1ef7bcf1dc92868bc527587286c89d92c141fed5ed89ccacc1e8f26ee8", - "sha256:fdf604246a5318157a581a483ceb0aab858582b478b24016768fdaff1c190f50" + "sha256:0cf2206c73fbca752c8bd39e12bb9ad7f2d01e6fcb2b25b9eaf94ea042fe86c9", + "sha256:0d670e119d7f7a68a1136de024464999e8e3d5d1491f23cdd39d5d72481af88f", + "sha256:1656722530b3bbce012b093abf6290ab76dcba39d21f9e703310b008ddc7ffe9", + "sha256:1e41b441542881e007420530bbc028f08c0f546ecaaebdf9f065f901acdac106", + "sha256:34d827c771d6b4d7b45f7fc49a638c97fbd8a0fab6c9d3838ff04d307420b739", + "sha256:370c5225f0c395a9f1482ac8d4f974d2073548f186eaf49ceb91414f534ad4d8", + "sha256:42b90b0cb3556f4d1cc1c538345abc249b6ff58939d3af5e37f5fa8421d9ae07", + "sha256:492bd47aabeaa3215cde7a8d3c0d88c909bf7e6b63f0b511a645f1ffc1e948f6", + "sha256:4c5785b018ed6f48e762737deaa6b7528b0ba43ad67fca566bf10d0337a76dcd", + "sha256:519ef25d49fe807c6c0402abb5fe4d14b47a8e2358050d8d7673beecfbe116b2", + "sha256:51a2d5de2c605117cd25dfb3f51d1d14caf1cbed4ef6db582f085eeb0a0c922f", + "sha256:55ef4476b2cdecfa643ae4d7591aa157568f903c378c83ea544650b33b2d856d", + "sha256:5b4acfb15ca028bbc652a6c8d63073dec2a3c8c0db7585d68b96b52940f65899", + "sha256:5c483c96d4cbeb4919ad9fcf2f262e8e08e34dcbcf8d2bda16263ef002c890d4", + "sha256:5c931032aa955431c808e469eb0780ca7d12b39228a02ae7ea09f63d47b1e260", + "sha256:6a3119d0e985e5c7dadfcf29fb79bbab19806b08ad901622b23f5868c0221fce", + "sha256:6b77f763af25cb609896c9355fcd42f59266a7a1fab6c37dfe59ba1e0b689022", + "sha256:72bb5417f198eb059f01d5a9e1ef80f2fbaf3eaa4cd63e9a681bbbd0ed9fcdf9", + "sha256:8cd355f8a4c7c126a246f4b4a9803c80498939709bb37d3db4f8dbee1eb7d8f0", + "sha256:9517f26a512a62d49fc4800222b306e21a14ceec8bd82c93182313ef1eefaa7a", + "sha256:9945e80a0a6e370f90a23907cc70a0811e808f79420fb9051e26d9c79eb8e26b", + "sha256:9989737a409235a734ec783b0545f2966247b26ff555e847f3d0f945e5a11493", + "sha256:9c0d71aef4fb5d30dc6ebd08a2bce317a7eaf37d468f85320947eb580daea90a", + "sha256:9d48fd4a1c2d98ec6686511717f0980d36f5590e038d5afe4e5241f328f06e38", + "sha256:af12fbff15a9652ef117456d1d6a4d6fade8fdc02670d6fd31212402e9d03559", + "sha256:b2b72a0742a493979c348dc3c9a329bd5b87e4243ffecf837b1c8739d58410ba", + "sha256:bda784ebb116d56d3e7133c8e0942cf68cb7fd58bdccf57231dbe56b6430eb01", + "sha256:df2784a474028b15a723f6b347625f1f91740de418bed4a0a2694c954de34dd7", + "sha256:e2b47a8e0126ec0a3820a2e299a94a6fc29ba132249957dd32c447d380eaae5f", + "sha256:e4b9b443e88735be4927529d66d9e1164b4fbd6a882e90114967eedc6ad608e7" ], "markers": "python_version >= '2.7' and python_version < '4'", - "version": "==3.5.66" + "version": "==3.5.67" }, "requests": { "hashes": [ @@ -1078,11 +1078,11 @@ }, "tqdm": { "hashes": [ - "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7", - "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33" + "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3", + "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae" ], "index": "pypi", - "version": "==4.59.0" + "version": "==4.60.0" }, "twisted": { "extras": [ @@ -1230,62 +1230,61 @@ }, "zope.interface": { "hashes": [ - "sha256:02d3535aa18e34ce97c58d241120b7554f7d1cf4f8002fc9675cc7e7745d20e8", - "sha256:0378a42ec284b65706d9ef867600a4a31701a0d6773434e6537cfc744e3343f4", - "sha256:07d289358a8c565ea09e426590dd1179f93cf5ac3dd17d43fcc4fc63c1a9d275", - "sha256:0e6cdbdd94ae94d1433ab51f46a76df0f2cd041747c31baec1c1ffa4e76bd0c1", - "sha256:11354fb8b8bdc5cdd66358ed4f1f0ce739d78ff6d215d33b8f3ae282258c0f11", - "sha256:12588a46ae0a99f172c4524cbbc3bb870f32e0f8405e9fa11a5ef3fa3a808ad7", - "sha256:16caa44a06f6b0b2f7626ced4b193c1ae5d09c1b49c9b4962c93ae8aa2134f55", - "sha256:18c478b89b6505756f007dcf76a67224a23dcf0f365427742ed0c0473099caa4", - "sha256:1bbb0bca8a3556a21f7b66c0a18876d8c617ddeda00982204b6218170b39526a", - "sha256:221b41442cf4428fcda7fc958c9721c916709e2a3a9f584edd70f1493a09a762", - "sha256:26109c50ccbcc10f651f76277cfc05fba8418a907daccc300c9247f24b3158a2", - "sha256:28d8157f8c77662a1e0796a7d3cfa8910289131d4b4dd4e10b2686ab1309b67b", - "sha256:2c51689b7b40c7d9c7e8a678350e73dc647945a13b4e416e7a02bbf0c37bdb01", - "sha256:2ec58e1e1691dde4fbbd97f8610de0f8f1b1a38593653f7d3b8e931b9cd6d67f", - "sha256:416feb6500f7b6fc00d32271f6b8495e67188cb5eb51fc8e289b81fdf465a9cb", - "sha256:520352b18adea5478bbf387e9c77910a914985671fe36bc5ef19fdcb67a854bc", - "sha256:527415b5ca201b4add44026f70278fbc0b942cf0801a26ca5527cb0389b6151e", - "sha256:54243053316b5eec92affe43bbace7c8cd946bc0974a4aa39ff1371df0677b22", - "sha256:61b8454190b9cc87279232b6de28dee0bad040df879064bb2f0e505cda907918", - "sha256:672668729edcba0f2ee522ab177fcad91c81cfce991c24d8767765e2637d3515", - "sha256:67aa26097e194947d29f2b5a123830e03da1519bcce10cac034a51fcdb99c34f", - "sha256:6e7305e42b5f54e5ccf51820de46f0a7c951ba7cb9e3f519e908545b0f5628d0", - "sha256:7234ac6782ca43617de803735949f79b894f0c5d353fbc001d745503c69e6d1d", - "sha256:7426bea25bdf92f00fa52c7b30fcd2a2f71c21cf007178971b1f248b6c2d3145", - "sha256:74b331c5d5efdddf5bbd9e1f7d8cb91a0d6b9c4ba45ca3e9003047a84dca1a3b", - "sha256:79b6db1a18253db86e9bf1e99fa829d60fd3fc7ac04f4451c44e4bdcf6756a42", - "sha256:7d79cd354ae0a033ac7b86a2889c9e8bb0bb48243a6ed27fc5064ce49b842ada", - "sha256:823d1b4a6a028b8327e64865e2c81a8959ae9f4e7c9c8e0eec814f4f9b36b362", - "sha256:8715717a5861932b7fe7f3cbd498c82ff4132763e2fea182cc95e53850394ec1", - "sha256:89a6091f2d07936c8a96ce56f2000ecbef20fb420a94845e7d53913c558a6378", - "sha256:8af4b3116e4a37059bc8c7fe36d4a73d7c1d8802a1d8b6e549f1380d13a40160", - "sha256:8b4b0034e6c7f30133fa64a1cc276f8f1a155ef9529e7eb93a3c1728b40c0f5c", - "sha256:92195df3913c1de80062635bf64cd7bd0d0934a7fa1689b6d287d1cbbd16922c", - "sha256:96c2e68385f3848d58f19b2975a675532abdb65c8fa5f04d94b95b27b6b1ffa7", - "sha256:9c7044dbbf8c58420a9ef4ed6901f5a8b7698d90cd984d7f57a18c78474686f6", - "sha256:a1937efed7e3fe0ee74630e1960df887d8aa83c571e1cf4db9d15b9c181d457d", - "sha256:a38c10423a475a1658e2cb8f52cf84ec20a4c0adff724dd43a6b45183f499bc1", - "sha256:a413c424199bcbab71bf5fa7538246f27177fbd6dd74b2d9c5f34878658807f8", - "sha256:b18a855f8504743e0a2d8b75d008c7720d44e4c76687e13f959e35d9a13eb397", - "sha256:b4d59ab3608538e550a72cea13d3c209dd72b6e19e832688da7884081c01594e", - "sha256:b51d3f1cd87f488455f43046d72003689024b0fa9b2d53635db7523033b19996", - "sha256:c02105deda867d09cdd5088d08708f06d75759df6f83d8f7007b06f422908a30", - "sha256:c7b6032dc4490b0dcaf078f09f5b382dc35493cb7f473840368bf0de3196c2b6", - "sha256:c95b355dba2aaf5177dff943b25ded0529a7feb80021d5fdb114a99f0a1ef508", - "sha256:c980ae87863d76b1ea9a073d6d95554b4135032d34bc541be50c07d4a085821b", - "sha256:d12895cd083e35e9e032eb4b57645b91116f8979527381a8d864d1f6b8cb4a2e", - "sha256:d3cd9bad547a8e5fbe712a1dc1413aff1b917e8d39a2cd1389a6f933b7a21460", - "sha256:e8809b01f27f679e3023b9e2013051e0a3f17abff4228cb5197663afd8a0f2c7", - "sha256:e8d49011baa7ce7765db46e53cfc8d125463a58e3eb478111b2c0c00ca098a33", - "sha256:f3c37b0dc1898e305aad4f7a1d75f6da83036588c28a9ce0afc681ff5245a601", - "sha256:f966765f54b536e791541458de84a737a6adba8467190f17a8fe7f85354ba908", - "sha256:fa939c2e2468142c9773443d4038e7c915b0cc1b670d3c9192bdc503f7ea73e9", - "sha256:fcc5c1f95102989d2e116ffc8467963554ce89f30a65a3ea86a4d06849c498d8" + "sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192", + "sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702", + "sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09", + "sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4", + "sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a", + "sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3", + "sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf", + "sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c", + "sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d", + "sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78", + "sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83", + "sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531", + "sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46", + "sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021", + "sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94", + "sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc", + "sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63", + "sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54", + "sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117", + "sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25", + "sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05", + "sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e", + "sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1", + "sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004", + "sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2", + "sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e", + "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f", + "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f", + "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120", + "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f", + "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1", + "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9", + "sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e", + "sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7", + "sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8", + "sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b", + "sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155", + "sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7", + "sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c", + "sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325", + "sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d", + "sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb", + "sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e", + "sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959", + "sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7", + "sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920", + "sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e", + "sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48", + "sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8", + "sha256:e0653479008a6118d2deec9ea3461d79331c65973ab4b25434ddc1018a982188", + "sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4", + "sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==5.3.0" + "version": "==5.4.0" } }, "develop": { @@ -1448,11 +1447,11 @@ }, "faker": { "hashes": [ - "sha256:08c4cfbfd498c0e90aff6741771c01803d894013df858db6a573182c6a47951f", - "sha256:20c6e4253b73ef2a783d38e085e7c8d8916295fff31c7403116d2af8f908f7ca" + "sha256:26c7c3df8d46f1db595a34962f8967021dd90bbd38cc6e27461a3fb16cd413ae", + "sha256:44eb060fad3015690ff3fec6564d7171be393021e820ad1851d96cb968fbfcd4" ], "markers": "python_version >= '3.6'", - "version": "==7.0.1" + "version": "==8.1.0" }, "filelock": { "hashes": [ @@ -1606,11 +1605,11 @@ }, "pytest": { "hashes": [ - "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9", - "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839" + "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634", + "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc" ], "index": "pypi", - "version": "==6.2.2" + "version": "==6.2.3" }, "pytest-cov": { "hashes": [ @@ -1622,11 +1621,11 @@ }, "pytest-django": { "hashes": [ - "sha256:10e384e6b8912ded92db64c58be8139d9ae23fb8361e5fc139d8e4f8fc601bc2", - "sha256:26f02c16d36fd4c8672390deebe3413678d89f30720c16efb8b2a6bf63b9041f" + "sha256:80f8875226ec4dc0b205f0578072034563879d98d9b1bec143a80b9045716cb0", + "sha256:a51150d8962200250e850c6adcab670779b9c2aa07271471059d1fb92a843fa9" ], "index": "pypi", - "version": "==4.1.0" + "version": "==4.2.0" }, "pytest-env": { "hashes": [ @@ -1709,11 +1708,11 @@ }, "sphinx-rtd-theme": { "hashes": [ - "sha256:eda689eda0c7301a80cf122dad28b1861e5605cbf455558f3775e1e8200e83a5", - "sha256:fa6bebd5ab9a73da8e102509a86f3fcc36dec04a0b52ea80e5a033b2aba00113" + "sha256:32bd3b5d13dc8186d7a42fc816a23d32e83a4827d7d9882948e7b837c232da5a", + "sha256:4a05bdbe8b1446d77a01e20a23ebc6777c74f43237035e76be89699308987d6f" ], "index": "pypi", - "version": "==0.5.1" + "version": "==0.5.2" }, "sphinxcontrib-applehelp": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 853cd6f77..91e343d51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 arrow==1.0.3; python_version >= '3.6' -asgiref==3.3.1; python_version >= '3.5' +asgiref==3.3.4; python_version >= '3.6' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' autobahn==21.3.1; python_version >= '3.7' @@ -25,14 +25,14 @@ coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, concurrent-log-handler==0.9.19 constantly==15.1.0 cryptography==3.4.7 -daphne==3.0.1; python_version >= '3.6' +daphne==3.0.2; python_version >= '3.6' dateparser==1.0.0 django-cors-headers==3.7.0 -django-extensions==3.1.1 +django-extensions==3.1.2 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 -django==3.1.7 +django==3.2 djangorestframework==3.12.4 filelock==3.0.12 fuzzywuzzy[speedup]==0.18.0 @@ -54,9 +54,9 @@ lxml==4.6.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3 msgpack==1.0.2 numpy==1.19.5 ocrmypdf==11.7.3 -pathvalidate==2.4.0 +pathvalidate==2.4.1 pdfminer.six==20201018 -pikepdf==2.10.0 +pikepdf==2.11.1 pillow==8.2.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.3.0; python_version >= '3' @@ -66,15 +66,15 @@ pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 -python-dotenv==0.16.0 +python-dotenv==0.17.0 python-gnupg==0.4.7 python-levenshtein==0.12.2 python-magic==0.4.22 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 -regex==2021.3.17 -reportlab==3.5.66; python_version >= '2.7' and python_version < '4' +regex==2021.4.4 +reportlab==3.5.67; python_version >= '2.7' and python_version < '4' requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 scipy==1.5.4 @@ -84,7 +84,7 @@ sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.59.0 +tqdm==4.60.0 twisted[tls]==21.2.0; python_full_version >= '3.5.4' txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 @@ -97,4 +97,4 @@ wcwidth==0.2.5 websockets==8.1 whitenoise==5.2.0 whoosh==2.7.4 -zope.interface==5.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +zope.interface==5.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From 3ca62be8e86f1deb9740c52900613d2233714024 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 16:00:29 +0200 Subject: [PATCH 737/898] changes for django 3.2 --- src/paperless/settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 94809933d..6a50a99a3 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -288,6 +288,8 @@ if os.getenv("PAPERLESS_DBHOST"): if os.getenv("PAPERLESS_DBPORT"): DATABASES["default"]["PORT"] = os.getenv("PAPERLESS_DBPORT") +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' + ############################################################################### # Internationalization # ############################################################################### From 571a8029ef40222d053c68d75a7869fe0f6a2d0d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 20:34:57 +0200 Subject: [PATCH 738/898] New Crowdin updates (#929) --- src-ui/src/locale/messages.fr_FR.xlf | 2 +- src-ui/src/locale/messages.pl_PL.xlf | 2 +- src/locale/fr_FR/LC_MESSAGES/django.po | 4 ++-- src/locale/pl_PL/LC_MESSAGES/django.po | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 1ac342a90..38f9474f3 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Polonais</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index 0e93841d8..daecaef1d 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Polski</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index 7286330cc..dd2c506f4 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"PO-Revision-Date: 2021-04-17 13:47\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -458,7 +458,7 @@ msgstr "Espagnol" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Polonais" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po index 40a9140de..7e5bf130f 100644 --- a/src/locale/pl_PL/LC_MESSAGES/django.po +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:46\n" +"PO-Revision-Date: 2021-04-17 14:46\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -458,7 +458,7 @@ msgstr "Hiszpański" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Polski" #: paperless/urls.py:113 msgid "Paperless-ng administration" From 8d33948e8e356ac7ae87420f0da515f67867900b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 22:29:24 +0200 Subject: [PATCH 739/898] update FAQ --- docs/troubleshooting.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index d2a76e7b3..155f60bbd 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -208,3 +208,16 @@ This might have multiple reasons. SENDFILE=0 to your `docker-compose.env` file. + +Error while reading metadata +############################ + +You might find messages like these in your log files: + +.. code:: + + [WARNING] [paperless.parsing.tesseract] Error while reading metadata + +This indicates that paperless failed to read PDF metadata from one of your documents. This happens when you +open the affected documents in paperless for editing. Paperless will continue to work, and will simply not +show the invalid metadata. From 62f9eb01c4c3be2853c134ebc51ea04a538bacce Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 22:29:54 +0200 Subject: [PATCH 740/898] lets hope this works --- Dockerfile | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 48e48dec6..324983a0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,16 +12,14 @@ FROM python:3.7-slim # Binary dependencies RUN apt-get update \ - && apt-get -y --no-install-recommends install sudo \ - && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ - && apt-get update \ - && apt-get -y --no-install-recommends install \ + && apt-get -y --no-install-recommends install \ # Basic dependencies curl \ gnupg \ imagemagick \ gettext \ tzdata \ + sudo \ # fonts for text file thumbnail generation fonts-liberation \ # for Numpy @@ -29,16 +27,21 @@ RUN apt-get update \ libxslt1-dev \ # thumbnail size reduction optipng \ + libxml2 \ + pngquant \ + unpaper \ + zlib1g \ + ghostscript \ + icc-profiles-free \ + && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ + && apt-get update \ + && apt-get -y --no-install-recommends install \ # Mime type detection file \ libmagic-dev \ media-types \ # OCRmyPDF dependencies - ghostscript \ - icc-profiles-free \ liblept5 \ - libxml2 \ - pngquant \ qpdf \ tesseract-ocr \ tesseract-ocr-eng \ @@ -46,8 +49,6 @@ RUN apt-get update \ tesseract-ocr-fra \ tesseract-ocr-ita \ tesseract-ocr-spa \ - unpaper \ - zlib1g \ && rm -rf /var/lib/apt/lists/* # copy jbig2enc From fd0823c4556103d249d3b0456b2a4d6a4d7589da Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 22:33:06 +0200 Subject: [PATCH 741/898] fix minor issue --- .../app/components/document-list/document-list.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.scss b/src-ui/src/app/components/document-list/document-list.component.scss index ee50852f0..34c8aed5e 100644 --- a/src-ui/src/app/components/document-list/document-list.component.scss +++ b/src-ui/src/app/components/document-list/document-list.component.scss @@ -36,7 +36,7 @@ $paperless-card-breakpoints: ( } .sticky-top { - z-index: 1000; // below main navbar + z-index: 990; // below main navbar top: calc(7rem - 2px); // height of navbar (mobile) @media (min-width: 580px) { From a39616cea40b747d3a2e77d9a302e3fd6386e451 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 17 Apr 2021 22:33:42 +0200 Subject: [PATCH 742/898] New Crowdin updates (#930) --- src-ui/src/locale/messages.de_DE.xlf | 2 +- src-ui/src/locale/messages.it_IT.xlf | 2 +- src/locale/de_DE/LC_MESSAGES/django.po | 4 ++-- src/locale/it_IT/LC_MESSAGES/django.po | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 34a8570e7..5de1dd342 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Polnisch</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 8b2960dfd..def5dcec1 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Polacco</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 6ed7577fe..f4b90232e 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"PO-Revision-Date: 2021-04-17 19:51\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -458,7 +458,7 @@ msgstr "Spanisch" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Polnisch" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index c6c41803e..e0ce2596f 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"PO-Revision-Date: 2021-04-17 18:50\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -458,7 +458,7 @@ msgstr "Spagnolo" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Polacco" #: paperless/urls.py:113 msgid "Paperless-ng administration" From 8d317e7a7ba9e2b9166fbd1d995ff417388c4d68 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 18 Apr 2021 10:49:22 +0200 Subject: [PATCH 743/898] New Crowdin updates (#931) --- src-ui/src/locale/messages.pt_PT.xlf | 2 +- src/locale/pt_PT/LC_MESSAGES/django.po | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 01107a2f3..2203451e6 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Polaco</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 39bee93f9..750342a1f 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:46\n" +"PO-Revision-Date: 2021-04-17 21:56\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -458,7 +458,7 @@ msgstr "Espanhol" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Polaco" #: paperless/urls.py:113 msgid "Paperless-ng administration" From 29657b0bdf58c45f54cbee615f5dd15960f8e65e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 18 Apr 2021 11:25:11 +0200 Subject: [PATCH 744/898] changelog, version bump --- docs/changelog.rst | 18 ++++++++++++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index b08fd17e8..0e5502501 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,22 @@ Changelog ********* +paperless-ng 1.4.1 +################## + +* Added Polish locale. + +* Changed some parts of the Dockerfile to hopefully restore functionality on certain ARM devices. + +* Updated python dependencies. + +* `Michael Shamoon`_ added a sticky filter / bulk edit bar. + +* `sbrl`_ changed the docker-entrypoint.sh script to increase compatibility with NFS shares. + +* `Chris Nagy`_ added support for creating a super user by passing ``PAPERLESS_ADMIN_USER`` and + ``PAPERLESS_ADMIN_PASSWORD`` as environment variables to the docker container. + paperless-ng 1.4.0 ################## @@ -1345,6 +1361,8 @@ bulk of the work on this big change. * Initial release +.. _Chris Nagy: https://github.com/what-name +.. _sbrl: https://github.com/sbrl .. _slorenz: https://github.com/sisao .. _Jo Vandeginste: https://github.com/jovandeginste .. _zjean: https://github.com/zjean diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 63789a9d4..851cf9e71 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -3,7 +3,7 @@ export const environment = { apiBaseUrl: "/api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.4.0", + version: "1.4.1", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 532acc3df..71bf75b3d 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 4, 0) +__version__ = (1, 4, 1) From ef924017ade1ab0557e5c87b877c167d45449bbe Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 18 Apr 2021 11:29:12 +0200 Subject: [PATCH 745/898] bugfix --- docker/docker-prepare.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index 6ea4247b7..28ddda55a 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -52,7 +52,7 @@ search_index() { superuser() { if [[ -n "${PAPERLESS_ADMIN_USER}" ]]; then - sudo -HEu paperless python3 manage.py manage_superuser + python3 manage.py manage_superuser fi } From dc410ff5669f96ad668a193e703a21696d820eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Brunner?= <stephane.brunner@camptocamp.com> Date: Sun, 18 Apr 2021 15:56:00 +0200 Subject: [PATCH 746/898] Add --no-progress-bar option to commands --- .../management/commands/document_archiver.py | 9 ++++++++- .../management/commands/document_exporter.py | 17 +++++++++++++---- .../management/commands/document_importer.py | 15 ++++++++++++--- .../management/commands/document_index.py | 8 +++++++- .../management/commands/document_renamer.py | 13 ++++++++++++- .../management/commands/document_retagger.py | 11 ++++++++++- .../commands/document_sanity_checker.py | 10 +++++++++- .../management/commands/document_thumbnails.py | 10 +++++++++- src/documents/sanity_checker.py | 7 +------ src/documents/tasks.py | 4 ++-- 10 files changed, 83 insertions(+), 21 deletions(-) diff --git a/src/documents/management/commands/document_archiver.py b/src/documents/management/commands/document_archiver.py index 6a6056ed7..96ddebe77 100644 --- a/src/documents/management/commands/document_archiver.py +++ b/src/documents/management/commands/document_archiver.py @@ -106,6 +106,12 @@ class Command(BaseCommand): help="Specify the ID of a document, and this command will only " "run on this specific document." ) + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) def handle(self, *args, **options): @@ -140,7 +146,8 @@ class Command(BaseCommand): handle_document, document_ids ), - total=len(document_ids) + total=len(document_ids), + disable=options['no_progress_bar'] )) except KeyboardInterrupt: print("Aborting...") diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index 286d862e3..217877397 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -57,6 +57,12 @@ class Command(BaseCommand): "do not belong to the current export, such as files from " "deleted documents." ) + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) def __init__(self, *args, **kwargs): BaseCommand.__init__(self, *args, **kwargs) @@ -81,9 +87,9 @@ class Command(BaseCommand): raise CommandError("That path doesn't appear to be writable") with FileLock(settings.MEDIA_LOCK): - self.dump() + self.dump(options['no_progress_bar']) - def dump(self): + def dump(self, progress_bar_disable=False): # 1. Take a snapshot of what files exist in the current export folder for root, dirs, files in os.walk(self.target): self.files_in_export_dir.extend( @@ -124,8 +130,11 @@ class Command(BaseCommand): "json", User.objects.all())) # 3. Export files from each document - for index, document_dict in tqdm.tqdm(enumerate(document_manifest), - total=len(document_manifest)): + for index, document_dict in tqdm.tqdm( + enumerate(document_manifest), + total=len(document_manifest), + disable=progress_bar_disable + ): # 3.1. store files unencrypted document_dict["fields"]["storage_type"] = Document.STORAGE_TYPE_UNENCRYPTED # NOQA: E501 diff --git a/src/documents/management/commands/document_importer.py b/src/documents/management/commands/document_importer.py index 9347b0d4c..4606b91fe 100644 --- a/src/documents/management/commands/document_importer.py +++ b/src/documents/management/commands/document_importer.py @@ -36,6 +36,12 @@ class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument("source") + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) def __init__(self, *args, **kwargs): BaseCommand.__init__(self, *args, **kwargs) @@ -70,7 +76,7 @@ class Command(BaseCommand): # Fill up the database with whatever is in the manifest call_command("loaddata", manifest_path) - self._import_files_from_manifest() + self._import_files_from_manifest(options['no_progress_bar']) print("Updating search index...") call_command('document_index', 'reindex') @@ -111,7 +117,7 @@ class Command(BaseCommand): f"does not appear to be in the source directory." ) - def _import_files_from_manifest(self): + def _import_files_from_manifest(self, progress_bar_disable): os.makedirs(settings.ORIGINALS_DIR, exist_ok=True) os.makedirs(settings.THUMBNAIL_DIR, exist_ok=True) @@ -123,7 +129,10 @@ class Command(BaseCommand): lambda r: r["model"] == "documents.document", self.manifest)) - for record in tqdm.tqdm(manifest_documents): + for record in tqdm.tqdm( + manifest_documents, + disable=progress_bar_disable + ): document = Document.objects.get(pk=record["pk"]) diff --git a/src/documents/management/commands/document_index.py b/src/documents/management/commands/document_index.py index 5faa70b9f..d76f48293 100644 --- a/src/documents/management/commands/document_index.py +++ b/src/documents/management/commands/document_index.py @@ -10,10 +10,16 @@ class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument("command", choices=['reindex', 'optimize']) + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) def handle(self, *args, **options): with transaction.atomic(): if options['command'] == 'reindex': - index_reindex() + index_reindex(progress_bar_disable=options['no_progress_bar']) elif options['command'] == 'optimize': index_optimize() diff --git a/src/documents/management/commands/document_renamer.py b/src/documents/management/commands/document_renamer.py index f311715c6..682705c2d 100644 --- a/src/documents/management/commands/document_renamer.py +++ b/src/documents/management/commands/document_renamer.py @@ -13,9 +13,20 @@ class Command(BaseCommand): This will rename all documents to match the latest filename format. """.replace(" ", "") + def add_arguments(self, parser): + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) + def handle(self, *args, **options): logging.getLogger().handlers[0].level = logging.ERROR - for document in tqdm.tqdm(Document.objects.all()): + for document in tqdm.tqdm( + Document.objects.all(), + disable=options['no_progress_bar'] + ): post_save.send(Document, instance=document) diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py index 4a23faa86..ce3f94bf2 100755 --- a/src/documents/management/commands/document_retagger.py +++ b/src/documents/management/commands/document_retagger.py @@ -57,6 +57,12 @@ class Command(BaseCommand): "set correspondent, document and remove correspondents, types" "and tags that do not match anymore due to changed rules." ) + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) def handle(self, *args, **options): @@ -68,7 +74,10 @@ class Command(BaseCommand): classifier = load_classifier() - for document in tqdm.tqdm(documents): + for document in tqdm.tqdm( + documents, + disable=options['no_progress_bar'] + ): if options['correspondent']: set_correspondent( diff --git a/src/documents/management/commands/document_sanity_checker.py b/src/documents/management/commands/document_sanity_checker.py index c04a5efef..fbbb8d600 100644 --- a/src/documents/management/commands/document_sanity_checker.py +++ b/src/documents/management/commands/document_sanity_checker.py @@ -8,8 +8,16 @@ class Command(BaseCommand): This command checks your document archive for issues. """.replace(" ", "") + def add_arguments(self, parser): + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) + def handle(self, *args, **options): - messages = check_sanity(progress=True) + messages = check_sanity(progress=not options['no_progress_bar']) messages.log_messages() diff --git a/src/documents/management/commands/document_thumbnails.py b/src/documents/management/commands/document_thumbnails.py index b7f935e3b..05f059039 100644 --- a/src/documents/management/commands/document_thumbnails.py +++ b/src/documents/management/commands/document_thumbnails.py @@ -47,6 +47,12 @@ class Command(BaseCommand): help="Specify the ID of a document, and this command will only " "run on this specific document." ) + parser.add_argument( + "--no-progress-bar", + default=False, + action="store_true", + help="If set, the progress bar will not be shown" + ) def handle(self, *args, **options): logging.getLogger().handlers[0].level = logging.ERROR @@ -65,5 +71,7 @@ class Command(BaseCommand): with multiprocessing.Pool() as pool: list(tqdm.tqdm( - pool.imap_unordered(_process_document, ids), total=len(ids) + pool.imap_unordered(_process_document, ids), + total=len(ids), + disable=options['no_progress_bar'] )) diff --git a/src/documents/sanity_checker.py b/src/documents/sanity_checker.py index 2e1777841..26467d3cf 100644 --- a/src/documents/sanity_checker.py +++ b/src/documents/sanity_checker.py @@ -60,12 +60,7 @@ def check_sanity(progress=False): if lockfile in present_files: present_files.remove(lockfile) - if progress: - docs = tqdm(Document.objects.all()) - else: - docs = Document.objects.all() - - for doc in docs: + for doc in tqdm(Document.objects.all(), disable=not progress): # Check sanity of the thumbnail if not os.path.isfile(doc.thumbnail_path): messages.error(f"Thumbnail of document {doc.pk} does not exist.") diff --git a/src/documents/tasks.py b/src/documents/tasks.py index ddfd2eac3..f24be562f 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -20,13 +20,13 @@ def index_optimize(): writer.commit(optimize=True) -def index_reindex(): +def index_reindex(progress_bar_disable=False): documents = Document.objects.all() ix = index.open_index(recreate=True) with AsyncWriter(ix) as writer: - for document in tqdm.tqdm(documents): + for document in tqdm.tqdm(documents, disable=progress_bar_disable): index.update_document(writer, document) From b976d56ce899b8cfe72e420109b3c7c18b2533d1 Mon Sep 17 00:00:00 2001 From: Christopher Timm <WhiteHatTux@timmch.de> Date: Mon, 26 Apr 2021 19:06:30 -0500 Subject: [PATCH 747/898] Use gosu instead of sudo for easier configuration #879 --- Dockerfile | 6 +++--- docker/docker-entrypoint.sh | 4 ++-- docker/management_script.sh | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 324983a0b..1527ebde8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN apt-get update \ imagemagick \ gettext \ tzdata \ - sudo \ + gosu \ # fonts for text file thumbnail generation fonts-liberation \ # for Numpy @@ -96,8 +96,8 @@ COPY src/ ./ RUN addgroup --gid 1000 paperless \ && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ && chown -R paperless:paperless ../ \ - && sudo -HEu paperless python3 manage.py collectstatic --clear --no-input \ - && sudo -HEu paperless python3 manage.py compilemessages + && gosu paperless python3 manage.py collectstatic --clear --no-input \ + && gosu paperless python3 manage.py compilemessages VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/media", "/usr/src/paperless/consume", "/usr/src/paperless/export"] ENTRYPOINT ["/sbin/docker-entrypoint.sh"] diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index e9cfd2b7e..26df5f31a 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -34,7 +34,7 @@ initialize() { chown -R paperless:paperless /tmp/paperless set -e - sudo -HEu paperless /sbin/docker-prepare.sh + gosu paperless /sbin/docker-prepare.sh } install_languages() { @@ -85,7 +85,7 @@ initialize if [[ "$1" != "/"* ]]; then echo Executing management command "$@" - exec sudo -HEu paperless python3 manage.py "$@" + exec gosu paperless python3 manage.py "$@" else echo Executing "$@" exec "$@" diff --git a/docker/management_script.sh b/docker/management_script.sh index bffa26e98..a0d38f2bc 100755 --- a/docker/management_script.sh +++ b/docker/management_script.sh @@ -6,7 +6,7 @@ cd /usr/src/paperless/src/ if [[ $(id -u) == 0 ]] ; then - sudo -HEu paperless python3 manage.py management_command "$@" + gosu paperless python3 manage.py management_command "$@" elif [[ $(id -un) == "paperless" ]] ; then python3 manage.py management_command "$@" From 8c3fa96507c86c4a809d242ca33d86dc029a7ce8 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 27 Apr 2021 09:52:30 +0200 Subject: [PATCH 748/898] New Crowdin updates (#932) --- src-ui/src/locale/messages.nl_NL.xlf | 54 +++++++++++++------------- src/locale/nl_NL/LC_MESSAGES/django.po | 24 ++++++------ 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index c0143ab1f..97b7c020b 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -480,7 +480,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> <context context-type="linenumber">26</context> </context-group> - <target state="translated">Wil je het etiket echt verwijderen "<x id="PH" equiv-text="object.name"/>"?</target> + <target state="translated">Wil je dit label echt verwijderen "<x id="PH" equiv-text="object.name"/>"?</target> </trans-unit> <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> <source>Tags</source> @@ -488,7 +488,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Etiketten</target> + <target state="translated">Labels</target> </trans-unit> <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> <source>Create</source> @@ -1000,7 +1000,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> <context context-type="linenumber">22</context> </context-group> - <target state="translated">Nieuw etiket maken</target> + <target state="translated">Nieuw label aanmaken</target> </trans-unit> <trans-unit id="5872175735754226507" datatype="html"> <source>Edit tag</source> @@ -1016,7 +1016,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">"Postvak in"-etiket</target> + <target state="translated">"Postvak in"-label</target> </trans-unit> <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> <source>Inbox tags are automatically assigned to all consumed documents.</source> @@ -1024,7 +1024,7 @@ <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">"Postvak in"-etiketten worden automatisch toegewezen aan alle verwerkte documenten.</target> + <target state="translated">"Postvak in"-labels worden automatisch toegewezen aan alle verwerkte documenten.</target> </trans-unit> <trans-unit id="6672809941092516947" datatype="html"> <source>Create new document type</source> @@ -1177,7 +1177,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">50</context> </context-group> - <target state="translated">Etiket: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + <target state="translated">Label: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> </trans-unit> <trans-unit id="6494566478302448576" datatype="html"> <source>Without any tag</source> @@ -1185,7 +1185,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">54</context> </context-group> - <target state="translated">Zonder enig etiket</target> + <target state="translated">Zonder label</target> </trans-unit> <trans-unit id="6523384805359286307" datatype="html"> <source>Title: <x id="PH" equiv-text="rule.value"/></source> @@ -1249,7 +1249,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> <context context-type="linenumber">19</context> </context-group> - <target state="translated">Etiketten filteren</target> + <target state="translated">Labels filteren</target> </trans-unit> <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> <source>Filter correspondents</source> @@ -1282,7 +1282,7 @@ <context context-type="linenumber">166</context> </context-group> <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> - <target state="translated">Niet toegekend</target> + <target state="translated">Zonder toewijzing</target> </trans-unit> <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> <source>Apply</source> @@ -1370,7 +1370,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> <context context-type="linenumber">24</context> </context-group> - <target state="translated">Op etiket filteren</target> + <target state="translated">Op label filteren</target> </trans-unit> <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> <source>Score:</source> @@ -1453,7 +1453,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">127</context> </context-group> - <target state="translated">Bevestig toewijzen van etiketten</target> + <target state="translated">Bevestig toewijzen van labels</target> </trans-unit> <trans-unit id="6619516195038467207" datatype="html"> <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1461,7 +1461,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">130</context> </context-group> - <target state="translated">Het etiket "<x id="PH" equiv-text="tag.name"/>" zal aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> + <target state="translated">Het label "<x id="PH" equiv-text="tag.name"/>" zal aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> <trans-unit id="1894412783609570695" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1469,7 +1469,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">132</context> </context-group> - <target state="translated">De etiketten <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> zullen aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> + <target state="translated">De labels <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> zullen aan <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en) worden toegewezen.</target> </trans-unit> <trans-unit id="7181166515756808573" datatype="html"> <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1477,7 +1477,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">135</context> </context-group> - <target state="translated">Het etiket "<x id="PH" equiv-text="tag.name"/>" zal verwijderd worden van <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> + <target state="translated">Het label "<x id="PH" equiv-text="tag.name"/>" zal verwijderd worden van <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="3819792277998068944" datatype="html"> <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1485,7 +1485,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">137</context> </context-group> - <target state="translated">De etiketten <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> zullen verwijderd worden van <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> + <target state="translated">De labels <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> zullen verwijderd worden van <x id="PH_1" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="2739066218579571288" datatype="html"> <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> @@ -1493,7 +1493,7 @@ <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> <context context-type="linenumber">139</context> </context-group> - <target state="translated">De etiketten <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> zullen toegevoegd worden aan, en de etiketten <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> zullen verwijderd worden van <x id="PH_2" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> + <target state="translated">De labels <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> zullen toegevoegd worden aan, en de labels <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> zullen verwijderd worden van <x id="PH_2" equiv-text="this.list.selected.size"/> geselecteerd(e) document(en).</target> </trans-unit> <trans-unit id="2996713129519325161" datatype="html"> <source>Confirm correspondent assignment</source> @@ -1629,7 +1629,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> <context context-type="linenumber">3</context> </context-group> - <target state="translated">Toon alles</target> + <target state="translated">Alles weergeven</target> </trans-unit> <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> <source>Statistics</source> @@ -1669,7 +1669,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">35</context> </context-group> - <target state="translated">Gefaald: <x id="PH" equiv-text="countFailed"/></target> + <target state="translated">Mislukt: <x id="PH" equiv-text="countFailed"/></target> </trans-unit> <trans-unit id="534116346205124059" datatype="html"> <source>Added: <x id="PH" equiv-text="countSuccess"/></source> @@ -1693,7 +1693,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">123</context> </context-group> - <target state="translated">Bezig met opladen...</target> + <target state="translated">Bezig met uploaden...</target> </trans-unit> <trans-unit id="7446520539098045935" datatype="html"> <source>Upload complete, waiting...</source> @@ -1701,7 +1701,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> <context context-type="linenumber">126</context> </context-group> - <target state="translated">Upload voltooid, wachten om te verwerken...</target> + <target state="translated">Upload voltooid, wachten op verwerking...</target> </trans-unit> <trans-unit id="1405142710727603568" datatype="html"> <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> @@ -1717,7 +1717,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="translated">Nieuwe documenten opladen</target> + <target state="translated">Nieuwe documenten uploaden</target> </trans-unit> <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> <source>Drop documents here or</source> @@ -1783,7 +1783,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">6,7</context> </context-group> - <target state="translated">Je kunt documenten uploaden door bestanden in het oplaadvak rechts te slepen of door ze in de map te kopiëren die geconfigureerd werd als consumptiemap. Ze zullen vervolgens beginnen verschijnen in de lijst met documenten. Nadat je metadata hebt toegevoegd aan je documenten, kun je de filters in Paperless gebruiken om eigen views te maken (zoals 'Recent toegevoegd', 'Te bekijken'). Deze views zullen hier verschijnen in plaats van dit bericht.</target> + <target state="translated">Je kunt documenten uploaden door bestanden in het upload vak rechts te slepen of door ze in de map te kopiëren die geconfigureerd werd als consumptiemap. Ze zullen vervolgens verschijnen in de lijst met documenten. Nadat je metadata hebt toegevoegd aan je documenten, kun je de filters in Paperless gebruiken om eigen views te maken (zoals 'Recent toegevoegd', 'Te bekijken'). Deze views zullen hier verschijnen in plaats van dit bericht.</target> </trans-unit> <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> <source>Paperless offers some more features that try to make your life easier:</source> @@ -1799,7 +1799,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">10</context> </context-group> - <target state="translated">Eenmaal je documenten hebt toegevoegd en metadata hebt toegewezen, kan Paperless automatisch die metadata aan nieuwe documenten toewijzen.</target> + <target state="translated">Zodra je documenten hebt toegevoegd en metadata hebt toegewezen, kan Paperless die metadata automatisch aan nieuwe documenten toewijzen.</target> </trans-unit> <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> <source>You can configure paperless to read your mails and add documents from attached files.</source> @@ -1815,7 +1815,7 @@ <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> <context context-type="linenumber">13</context> </context-group> - <target state="translated">Lees de documentatie na om deze functies te ontdekken. Het hoofdstuk over basisgebruik biedt ook inzichten over het gebruik van Paperless in het algemeen.</target> + <target state="translated">Raadpleeg de documentatie over het gebruik van deze functies. De sectie over basisgebruik bevat ook enige informatie over het gebruik van Paperless in het algemeen.</target> </trans-unit> <trans-unit id="218403386307979629" datatype="html"> <source>Metadata</source> @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Pools</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> @@ -2195,7 +2195,7 @@ <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> <context context-type="linenumber">104</context> </context-group> - <target state="translated">Geassocieerde documenten zullen niet verwijderd worden.</target> + <target state="translated">Gekoppelde documenten zullen niet worden verwijderd.</target> </trans-unit> <trans-unit id="7022070615528435141" datatype="html"> <source>Delete</source> @@ -2227,7 +2227,7 @@ <context context-type="sourcefile">src/app/data/matching-model.ts</context> <context context-type="linenumber">12</context> </context-group> - <target state="translated">Eender welk: Documenten die eender welk van deze woorden bevatten (gescheiden door spaties)</target> + <target state="translated">Een of meer: Documenten die een of meer van deze woorden bevatten (gescheiden door spaties)</target> </trans-unit> <trans-unit id="700315718208181326" datatype="html"> <source>All words</source> diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index fea183e6c..0c9154f1e 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"PO-Revision-Date: 2021-04-18 13:19\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -23,7 +23,7 @@ msgstr "Documenten" #: documents/models.py:32 msgid "Any word" -msgstr "Eender welk woord" +msgstr "Elk woord" #: documents/models.py:33 msgid "All words" @@ -76,19 +76,19 @@ msgstr "Kleur" #: documents/models.py:87 msgid "is inbox tag" -msgstr "is \"Postvak in\"-etiket" +msgstr "is \"Postvak in\"-label" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "Markeer dit etiket als een \"Postvak in\"-etiket: alle nieuw verwerkte documenten krijgen de \"Postvak in\"-etiketten." +msgstr "Markeert dit label als een \"Postvak in\"-label: alle nieuw verwerkte documenten krijgen de \"Postvak in\"-labels." #: documents/models.py:94 msgid "tag" -msgstr "etiket" +msgstr "label" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "etiketten" +msgstr "labels" #: documents/models.py:101 documents/models.py:133 msgid "document type" @@ -128,7 +128,7 @@ msgstr "checksum" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "Het controlecijfer van het originele document." +msgstr "De checksum van het oorspronkelijke document." #: documents/models.py:163 msgid "archive checksum" @@ -280,11 +280,11 @@ msgstr "zit in \"Postvak in\"" #: documents/models.py:379 msgid "has tag" -msgstr "heeft etiket" +msgstr "heeft label" #: documents/models.py:380 msgid "has any tag" -msgstr "heeft één van de etiketten" +msgstr "heeft één van de labels" #: documents/models.py:381 msgid "created before" @@ -324,7 +324,7 @@ msgstr "gewijzigd na" #: documents/models.py:390 msgid "does not have tag" -msgstr "heeft geen etiket" +msgstr "heeft geen label" #: documents/models.py:391 msgid "does not have ASN" @@ -458,7 +458,7 @@ msgstr "Spaans" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Pools" #: paperless/urls.py:113 msgid "Paperless-ng administration" @@ -486,7 +486,7 @@ msgstr "Metadata" #: paperless_mail/admin.py:48 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "Automatisch metadata toewijzen aan documenten vanuit deze regel. Indien je geen etiketten, documenttypes of correspondenten toewijst, zal Paperless nog steeds alle regels verwerken die je hebt gedefinieerd." +msgstr "Automatisch metadata toewijzen aan documenten vanuit deze regel. Indien je geen labels, documenttypes of correspondenten toewijst, zal Paperless nog steeds alle regels verwerken die je hebt gedefinieerd." #: paperless_mail/apps.py:9 msgid "Paperless mail" From a79723165faaddb5ad8c39ef91a1f44c304ebb91 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@tu-berlin.de> Date: Tue, 27 Apr 2021 22:52:50 +0200 Subject: [PATCH 749/898] changelog, version bump --- docs/changelog.rst | 6 ++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 0e5502501..9acfed57e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,11 @@ Changelog ********* +paperless-ng 1.4.2 +################## + +* Fixed an issue with ``sudo`` that caused paperless to not start on many Raspberry Pi devices. Thank you `WhiteHatTux`_! + paperless-ng 1.4.1 ################## @@ -1361,6 +1366,7 @@ bulk of the work on this big change. * Initial release +.. _WhiteHatTux: https://github.com/WhiteHatTux .. _Chris Nagy: https://github.com/what-name .. _sbrl: https://github.com/sbrl .. _slorenz: https://github.com/sisao diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 851cf9e71..b60824248 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -3,7 +3,7 @@ export const environment = { apiBaseUrl: "/api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.4.1", + version: "1.4.2", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") }; diff --git a/src/paperless/version.py b/src/paperless/version.py index 71bf75b3d..ffb22f305 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 4, 1) +__version__ = (1, 4, 2) From a83608800c86d0bcf6fa7d668d46f9374e0d4c0b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 28 Apr 2021 02:12:55 +0200 Subject: [PATCH 750/898] update libseccomp2 --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1527ebde8..0c0efa532 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,11 +36,13 @@ RUN apt-get update \ && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ && apt-get update \ && apt-get -y --no-install-recommends install \ + # fixes sudo / gosu issues + libseccomp2 \ # Mime type detection file \ libmagic-dev \ media-types \ - # OCRmyPDF dependencies + # OCRmyPDF dependencies liblept5 \ qpdf \ tesseract-ocr \ From d59593c3f7300aaee11c4942bb0da0cac4e628be Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 28 Apr 2021 07:32:18 -0700 Subject: [PATCH 751/898] Remove type attribute of pdf object in document detail --- .../components/document-detail/document-detail.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 1286225fb..989c998f1 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -139,7 +139,7 @@ <pdf-viewer [src]="previewUrl" [original-size]="false" [show-borders]="true" [show-all]="true" [(page)]="previewCurrentPage" [render-text-mode]="2" (after-load-complete)="pdfPreviewLoaded($event)"></pdf-viewer> </div> <ng-template #nativePdfViewer> - <object [data]="previewUrl | safe" type="application/pdf" class="preview-sticky" width="100%"></object> + <object [data]="previewUrl | safe" class="preview-sticky" width="100%"></object> </ng-template> </ng-container> <ng-container *ngIf="getContentType() == 'text/plain'"> From 8720a76bec8efe84cc351de1c01f19bbb794e19e Mon Sep 17 00:00:00 2001 From: Jo Vandeginste <Jo.Vandeginste@kuleuven.be> Date: Fri, 30 Apr 2021 13:19:12 +0200 Subject: [PATCH 752/898] Add support for rtf Signed-off-by: Jo Vandeginste <Jo.Vandeginste@kuleuven.be> --- src/paperless_tika/signals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_tika/signals.py b/src/paperless_tika/signals.py index dbda377ca..6b1698f2d 100644 --- a/src/paperless_tika/signals.py +++ b/src/paperless_tika/signals.py @@ -1,4 +1,3 @@ - def get_parser(*args, **kwargs): from .parsers import TikaDocumentParser @@ -20,5 +19,6 @@ def tika_consumer_declaration(sender, **kwargs): "application/vnd.oasis.opendocument.presentation": ".odp", "application/vnd.oasis.opendocument.spreadsheet": ".ods", "application/vnd.oasis.opendocument.text": ".odt", + "text/rtf": ".rtf", }, } From f5c7c7af5459ea7d3f6c37eee7eda711ce8f0fe3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 4 May 2021 15:28:10 +0200 Subject: [PATCH 753/898] New Crowdin updates (#976) --- src-ui/src/locale/messages.en_GB.xlf | 14 +- src-ui/src/locale/messages.ro_RO.xlf | 10 +- src-ui/src/locale/messages.sv_SE.xlf | 2306 ++++++++++++++++++++++++ src/locale/en_GB/LC_MESSAGES/django.po | 8 +- src/locale/ro_RO/LC_MESSAGES/django.po | 6 +- src/locale/sv_SE/LC_MESSAGES/django.po | 674 +++++++ 6 files changed, 2999 insertions(+), 19 deletions(-) create mode 100644 src-ui/src/locale/messages.sv_SE.xlf create mode 100644 src/locale/sv_SE/LC_MESSAGES/django.po diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 802a35216..de6174202 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Advanced search</target> + <target state="translated">Advanced search</target> </trans-unit> <trans-unit id="2649431021108393503" datatype="html"> <source>More like</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">More like</target> + <target state="translated">More like</target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + <target state="translated">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> </trans-unit> <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + <target state="translated">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> </trans-unit> <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + <target state="translated">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + <target state="translated">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1975,7 +1975,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Polish</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 1e7459cd1..6134a74d9 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1233,7 +1233,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">91</context> </context-group> - <target state="needs-translation">Advanced search</target> + <target state="translated">Căutare avansată</target> </trans-unit> <trans-unit id="2649431021108393503" datatype="html"> <source>More like</source> @@ -1241,7 +1241,7 @@ <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="linenumber">94</context> </context-group> - <target state="needs-translation">More like</target> + <target state="translated">Asemănătoare</target> </trans-unit> <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> <source>Filter tags</source> @@ -1386,7 +1386,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">43</context> </context-group> - <target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + <target state="translated">S-a creat: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> </trans-unit> <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> @@ -1394,7 +1394,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">44</context> </context-group> - <target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + <target state="translated">S-a adăugat: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> </trans-unit> <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> @@ -1402,7 +1402,7 @@ <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> <context context-type="linenumber">45</context> </context-group> - <target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + <target state="translated">S-a modificat: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> </trans-unit> <trans-unit id="7985804062689412812" datatype="html"> <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> diff --git a/src-ui/src/locale/messages.sv_SE.xlf b/src-ui/src/locale/messages.sv_SE.xlf new file mode 100644 index 000000000..82cce8f4f --- /dev/null +++ b/src-ui/src/locale/messages.sv_SE.xlf @@ -0,0 +1,2306 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> + <file source-language="en" datatype="plaintext" original="ng2.template" target-language="sv-SE"> + <body> + <trans-unit id="9103526311244275943" datatype="html"> + <source>Document added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Dokument tillagt</target> + </trans-unit> + <trans-unit id="9204248378636247318" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> was added to paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> lades till i paperless.</target> + </trans-unit> + <trans-unit id="1931214133925051574" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Öppna dokument</target> + </trans-unit> + <trans-unit id="8582620835547864448" datatype="html"> + <source>Could not add <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="translated">Kunde inte lägga till <x id="PH" equiv-text="status.filename"/>: <x id="PH_1" equiv-text="status.message"/></target> + </trans-unit> + <trans-unit id="1710712016675379662" datatype="html"> + <source>New document detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="translated">Nytt dokument upptäckt</target> + </trans-unit> + <trans-unit id="587031278561344416" datatype="html"> + <source>Document <x id="PH" equiv-text="status.filename"/> is being processed by paperless.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/app.component.ts</context> + <context context-type="linenumber">65</context> + </context-group> + <target state="translated">Dokument <x id="PH" equiv-text="status.filename"/> behandlas av paperless.</target> + </trans-unit> + <trans-unit id="4733307402565258070" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Dokument</target> + </trans-unit> + <trans-unit id="2155249406916744630" datatype="html"> + <source>View "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="translated">Vy "<x id="PH" equiv-text="this.list.activeSavedViewTitle"/>" sparades.</target> + </trans-unit> + <trans-unit id="6837554170707123455" datatype="html"> + <source>View "<x id="PH" equiv-text="savedView.name"/>" created successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context> + <context context-type="linenumber">138</context> + </context-group> + <target state="translated">Vy "<x id="PH" equiv-text="savedView.name"/>" skapades.</target> + </trans-unit> + <trans-unit id="9ca82952a6bc860b5391d5975322d8af8ceddfa4" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="translated">Välj</target> + </trans-unit> + <trans-unit id="7e1f9a7054aff842832620c03dedae894787ba41" datatype="html"> + <source>Select none</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Markera ingen</target> + </trans-unit> + <trans-unit id="2ed8a0c2ce4968f8614151eefed20a0aa3daeeb9" datatype="html"> + <source>Select page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="translated">Välj sida</target> + </trans-unit> + <trans-unit id="b463541a7e303aa4d0b1102eaff8afbaf34e7a74" datatype="html"> + <source>Select all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Välj alla</target> + </trans-unit> + <trans-unit id="5d43539fc358c3a548b9d487be821db73e2702ff" datatype="html"> + <source>Sort</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Sortera</target> + </trans-unit> + <trans-unit id="b7641aed03492978b4ec6843b1e53f30464294d9" datatype="html"> + <source>Views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">64</context> + </context-group> + <target state="translated">Vyer</target> + </trans-unit> + <trans-unit id="b69d81ff62cdc22b6bf88fe0b72dc1f66ccfa44f" datatype="html"> + <source>Save as...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="translated">Spara som...</target> + </trans-unit> + <trans-unit id="5f5ce787c428d917c30c9bd70789a618e09743a7" datatype="html"> + <source>Save "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">71</context> + </context-group> + <target state="translated">Spara "<x id="INTERPOLATION" equiv-text="{{list.activeSavedViewTitle}}"/>"</target> + </trans-unit> + <trans-unit id="439e7cc3c1ecefded167ed4d37f7d22dad6a9159" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {Selected <x id="INTERPOLATION"/> of one document} other {Selected <x id="INTERPOLATION"/> of <x id="INTERPOLATION_1"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">85</context> + </context-group> + <target state="translated">{VAR_PLURAL, plural, one {} =1 {Vald <x id="INTERPOLATION"/> av ett dokument} other {Vald <x id="INTERPOLATION"/> av <x id="INTERPOLATION_1"/> dokument}}</target> + </trans-unit> + <trans-unit id="bb773fdeaad5e7fb8e6cd77e1cc558e1b194a0c9" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One document} other {<x id="INTERPOLATION"/> documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">{VAR_PLURAL, plural, one {} =1 {Ett dokument} other {<x id="INTERPOLATION"/> dokument}}</target> + </trans-unit> + <trans-unit id="bb91083b44e3f77dd68de773ceab467ca3d57507" datatype="html"> + <source>(filtered)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">86</context> + </context-group> + <target state="translated">(filtrerad)</target> + </trans-unit> + <trans-unit id="ca0b795795658155d44ddca02e95f1feeeb4a88f" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="7b5c6286aaded63fb279d6deb8aa8c704e085ced" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="translated">Korrespondent</target> + </trans-unit> + <trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="translated">Titel</target> + </trans-unit> + <trans-unit id="2bd5919e8098513664a89d5b7b52d61e3063950f" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">129</context> + </context-group> + <target state="translated">Dokumenttyp</target> + </trans-unit> + <trans-unit id="1b051734b0ee9021991c91b3ed4e81c244322462" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="translated">Skapad</target> + </trans-unit> + <trans-unit id="80e3b490720757978c99a7b5af3885faf202b955" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context> + <context context-type="linenumber">141</context> + </context-group> + <target state="translated">Tillagd</target> + </trans-unit> + <trans-unit id="9021887951960049161" datatype="html"> + <source>Confirm delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">206</context> + </context-group> + <target state="translated">Bekräfta borttagning</target> + </trans-unit> + <trans-unit id="5382975254277698192" datatype="html"> + <source>Do you really want to delete document "<x id="PH" equiv-text="this.document.title"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">207</context> + </context-group> + <target state="translated">Vill du verkligen ta bort dokumentet "<x id="PH" equiv-text="this.document.title"/>"?</target> + </trans-unit> + <trans-unit id="6691075929777935948" datatype="html"> + <source>The files for this document will be deleted permanently. This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">208</context> + </context-group> + <target state="translated">Filerna för detta dokument kommer att raderas permanent. Den här åtgärden kan inte ångras.</target> + </trans-unit> + <trans-unit id="719892092227206532" datatype="html"> + <source>Delete document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">210</context> + </context-group> + <target state="translated">Ta bort dokument</target> + </trans-unit> + <trans-unit id="1844801255494293730" datatype="html"> + <source>Error deleting document: <x id="PH" equiv-text="JSON.stringify(error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> + <context context-type="linenumber">217</context> + </context-group> + <target state="translated">Fel vid borttagning av dokument: <x id="PH" equiv-text="JSON.stringify(error)"/></target> + </trans-unit> + <trans-unit id="826b25211922a1b46436589233cb6f1a163d89b7" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Radera</target> + </trans-unit> + <trans-unit id="dc75033a5238fdc4f462212c847a45ba8018a3fd" datatype="html"> + <source>Download</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Ladda ner</target> + </trans-unit> + <trans-unit id="4ea3c236bca3528318e3b3a411a20909e5fa8be4" datatype="html"> + <source>More like this</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Mer som detta</target> + </trans-unit> + <trans-unit id="f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8" datatype="html"> + <source>Close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Stäng</target> + </trans-unit> + <trans-unit id="4f8b2bb476981727ab34ed40fde1218361f92c45" datatype="html"> + <source>Details</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">56</context> + </context-group> + <target state="translated">Detaljer</target> + </trans-unit> + <trans-unit id="4ab4cb601522b9194922554d934c4c30bd93567d" datatype="html"> + <source>Content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">72</context> + </context-group> + <target state="translated">Innehåll</target> + </trans-unit> + <trans-unit id="f721a500a68c357e8f2a01e60510f6a01e4ba529" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">81</context> + </context-group> + <target state="translated">Metadata</target> + </trans-unit> + <trans-unit id="3f5a652a1f473f4e243e3c6805ef1b383e270bb7" datatype="html"> + <source>Discard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="translated">Avfärda</target> + </trans-unit> + <trans-unit id="52c9a103b812f258bcddc3d90a6e3f46871d25fe" datatype="html"> + <source>Save</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="translated">Spara</target> + </trans-unit> + <trans-unit id="8380d9eff8613c0bc58edc7cebc2aa72e17b11e3" datatype="html"> + <source>Page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="translated">Sida</target> + </trans-unit> + <trans-unit id="c972a8e7d09f86e0c408a80349990fb213b32c08" datatype="html"> + <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="translated">av <x id="INTERPOLATION" equiv-text="{{previewNumPages}}"/></target> + </trans-unit> + <trans-unit id="a071e35fecc10753065b1cb5b38608be66da2c8b" datatype="html"> + <source>Download original</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="translated">Ladda ner original</target> + </trans-unit> + <trans-unit id="9b3996b5ddcc628a999a7df72fbfc2a2eae8c8a5" datatype="html"> + <source>Archive serial number</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">60</context> + </context-group> + <target state="translated">Arkivets serienummer</target> + </trans-unit> + <trans-unit id="30eebc2dd656dbcb259d8d5286d244ee397d63bd" datatype="html"> + <source>Date created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="translated">Datum skapad</target> + </trans-unit> + <trans-unit id="6e58f1baf7acb6a0cfe3636b9c2a61b4d1183720" datatype="html"> + <source>Date modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Datum ändrad</target> + </trans-unit> + <trans-unit id="c1ae0f9ac4efb2dcd43cd947ddba09d6c4328269" datatype="html"> + <source>Date added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Datum tillagd</target> + </trans-unit> + <trans-unit id="c7ea641c3a61a12a3599ce5a75c6d0dbba409ad3" datatype="html"> + <source>Media filename</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Media filnamn</target> + </trans-unit> + <trans-unit id="74a894d2a8ae24a1eed4bc56e9afdc27dc2c31c8" datatype="html"> + <source>Original MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">Original MD5-kontrollsumma</target> + </trans-unit> + <trans-unit id="e92ca184ea785769fb26138fc25ee9fa06fff6e5" datatype="html"> + <source>Original file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="translated">Ursprunglig filstorlek</target> + </trans-unit> + <trans-unit id="b5e93f30cc3411f20bd62025a6cc7394568f1bfd" datatype="html"> + <source>Original mime type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="translated">Ursprunglig mime-typ</target> + </trans-unit> + <trans-unit id="edbf54e4117606b5dd87aaea3c14b21ebf398020" datatype="html"> + <source>Archive MD5 checksum</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">111</context> + </context-group> + <target state="translated">Arkiv MD5-kontrollsumma</target> + </trans-unit> + <trans-unit id="e6bf12eadecbfd80016eca15fa78651c6ca90c64" datatype="html"> + <source>Archive file size</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">115</context> + </context-group> + <target state="translated">Arkiv filstorlek</target> + </trans-unit> + <trans-unit id="203c7adb5bd74ae18e84e1e3b66ddfe76bc0023f" datatype="html"> + <source>Original document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">121</context> + </context-group> + <target state="translated">Ursprungliga dokument metadata</target> + </trans-unit> + <trans-unit id="7174dcea4a3d0b743e7e4a78747e902230727f67" datatype="html"> + <source>Archived document metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">122</context> + </context-group> + <target state="translated">Arkiverade dokument metadata</target> + </trans-unit> + <trans-unit id="3fb9f1a31c3798173b2fea72638732c783b152fe" datatype="html"> + <source>Save & next</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> + <context context-type="linenumber">131</context> + </context-group> + <target state="translated">Spara & nästa</target> + </trans-unit> + <trans-unit id="8765497970646365998" datatype="html"> + <source>Hello <x id="PH" equiv-text="this.displayName"/>, welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">33</context> + </context-group> + <target state="translated">Hej <x id="PH" equiv-text="this.displayName"/>, välkommen till Paperless-ng!</target> + </trans-unit> + <trans-unit id="7016571167317583872" datatype="html"> + <source>Welcome to Paperless-ng!</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Välkommen till Paperless-ng!</target> + </trans-unit> + <trans-unit id="f65253954b66e929a8b4d5ecaf61f9129f8cec64" datatype="html"> + <source>Dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/dashboard.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Kontrollpanel</target> + </trans-unit> + <trans-unit id="93754014749412887" datatype="html"> + <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Vill du verkligen ta bort taggen "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> + <source>Tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Taggar</target> + </trans-unit> + <trans-unit id="70a67e04629f6d412db0a12d51820b480788d795" datatype="html"> + <source>Create</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">2</context> + </context-group> + <target state="translated">Skapa</target> + </trans-unit> + <trans-unit id="ddb40946e790522301687ecddb9ce1cb8ad40dd1" datatype="html"> + <source>Filter by:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="translated">Filtrera på:</target> + </trans-unit> + <trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html"> + <source>Name</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="translated">Namn</target> + </trans-unit> + <trans-unit id="8fa4d523f7b91df4390120b85ed0406138273e1a" datatype="html"> + <source>Color</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Färg</target> + </trans-unit> + <trans-unit id="d0c4488f742efeba0915e90e285a022da813deff" datatype="html"> + <source>Matching</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Matchar</target> + </trans-unit> + <trans-unit id="9bcf8d20d23c111eca1431abd2d2ce0de324499c" datatype="html"> + <source>Document count</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Antal dokument</target> + </trans-unit> + <trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html"> + <source>Actions</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Åtgärder</target> + </trans-unit> + <trans-unit id="9d51b3c90afda70700229d1b8a55371c13cb3bce" datatype="html"> + <source>Documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Dokument</target> + </trans-unit> + <trans-unit id="28f86ffd419b869711aa13f5e5ff54be6d70731c" datatype="html"> + <source>Edit</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Redigera</target> + </trans-unit> + <trans-unit id="4990731724078522539" datatype="html"> + <source>Do you really want to delete the document type "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Vill du verkligen ta bort dokumenttypen "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="bc000b39af12c0925c424f4cb85f0c31c0f8eca8" datatype="html"> + <source>Document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Dokumenttyper</target> + </trans-unit> + <trans-unit id="eb3d5aefff38a814b76da74371cbf02c0789a1ef" datatype="html"> + <source>Logs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/logs/logs.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Loggar</target> + </trans-unit> + <trans-unit id="5610279464668232148" datatype="html"> + <source>Saved view "<x id="PH" equiv-text="savedView.name"/>" deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="translated">Sparad vy "<x id="PH" equiv-text="savedView.name"/>" borttagen.</target> + </trans-unit> + <trans-unit id="5647210819299459618" datatype="html"> + <source>Settings saved successfully.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="translated">Inställningar har sparats.</target> + </trans-unit> + <trans-unit id="6839066544204061364" datatype="html"> + <source>Use system language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Använd systemspråk</target> + </trans-unit> + <trans-unit id="7729897675462249787" datatype="html"> + <source>Use date format of display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="translated">Använd datumformat för visningsspråk</target> + </trans-unit> + <trans-unit id="8488620293789898901" datatype="html"> + <source>Error while storing settings on server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <target state="translated">Fel vid lagring av inställningar på server: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="121cc5391cd2a5115bc2b3160379ee5b36cd7716" datatype="html"> + <source>Settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Inställningar</target> + </trans-unit> + <trans-unit id="11ebd254cc9294717105c5982eb0cd2af30a446d" datatype="html"> + <source>General settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Allmänna inställningar</target> + </trans-unit> + <trans-unit id="8bcabdf6b16cad0313a86c7e940c5e3ad7f9f8ab" datatype="html"> + <source>Notifications</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">116</context> + </context-group> + <target state="translated">Notifieringar</target> + </trans-unit> + <trans-unit id="99dee94e92dbd9e21a008d4569f9719ed206ae37" datatype="html"> + <source>Saved views</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">134</context> + </context-group> + <target state="translated">Sparade vyer</target> + </trans-unit> + <trans-unit id="bbe41ac2ea4a6c00ea941a41b33105048f8e9f13" datatype="html"> + <source>Appearance</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Utseende</target> + </trans-unit> + <trans-unit id="75f8908d266f7cc9b9e68e0be906fd080a223606" datatype="html"> + <source>Display language</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="translated">Visningsspråk</target> + </trans-unit> + <trans-unit id="1284a077dc18a2d1ff1b744f16f1797eea28ae37" datatype="html"> + <source>You need to reload the page after applying a new language.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Du måste ladda om sidan efter att du ställt in ett nytt språk.</target> + </trans-unit> + <trans-unit id="0cd55822928764cc82a62ee3e6f3adbc1c630479" datatype="html"> + <source>Date display</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="translated">Visning av datum</target> + </trans-unit> + <trans-unit id="7df4de0d0704a06a302d853e31f2580eba98f127" datatype="html"> + <source>Date format</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Datumformat</target> + </trans-unit> + <trans-unit id="69852399a18b8ca4fca8c5bfddd3f00a6d137593" datatype="html"> + <source>Short: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Kort: <x id="INTERPOLATION" equiv-text="{{today | customDate:'shortDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="d01a59285e711252b98c4f193394e4b854615c78" datatype="html"> + <source>Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">55</context> + </context-group> + <target state="translated">Medium: <x id="INTERPOLATION" equiv-text="{{today | customDate:'mediumDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="00481629776699b1caebd12b3b1176e2e23740a8" datatype="html"> + <source>Long: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">59</context> + </context-group> + <target state="translated">Lång: <x id="INTERPOLATION" equiv-text="{{today | customDate:'longDate':null:computedDateLocale}}"/></target> + </trans-unit> + <trans-unit id="2045151788cbdda7512752e408da59a6b54a8ef0" datatype="html"> + <source>Items per page</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">67</context> + </context-group> + <target state="translated">Objekt per sida</target> + </trans-unit> + <trans-unit id="c4435e56bf0289e78fedc462f1d21fb30b9de55d" datatype="html"> + <source>Document editor</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">83</context> + </context-group> + <target state="translated">Redigerare för dokument</target> + </trans-unit> + <trans-unit id="4903e521c9bfd11ce88e7a5575106ef638912e0d" datatype="html"> + <source>Use PDF viewer provided by the browser</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Använd PDF-läsaren som tillhandahålls av webbläsaren</target> + </trans-unit> + <trans-unit id="d7db07023e53f8396d18d375c2b78c25fc81c197" datatype="html"> + <source>This is usually faster for displaying large PDF documents, but it might not work on some browsers.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Detta är oftast snabbare för att visa stora PDF-dokument, men det kanske inte fungerar på vissa webbläsare.</target> + </trans-unit> + <trans-unit id="9ee5d1cbfd6ee168dae37aaba2b59b50bcabb2ff" datatype="html"> + <source>Dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Mörkt läge</target> + </trans-unit> + <trans-unit id="f8cb5506e70fd71fddc9bb71cee18bfff7b29637" datatype="html"> + <source>Use system settings</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="translated">Använd systeminställningar</target> + </trans-unit> + <trans-unit id="8ee474504043fa89821d626e4f3413240fa91b53" datatype="html"> + <source>Enable dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="translated">Aktivera mörkt läge</target> + </trans-unit> + <trans-unit id="71bad20b37410c8972c9aa0f7c62996534b84339" datatype="html"> + <source>Invert thumbnails in dark mode</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">Invertera miniatyrer i mörkt läge</target> + </trans-unit> + <trans-unit id="3863a86cd9e69a61d143d3daf51df44203df4a82" datatype="html"> + <source>Bulk editing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">103</context> + </context-group> + <target state="translated">Massändring</target> + </trans-unit> + <trans-unit id="c0ac61661c6c326d6e0e00c231b95cf2ac0c6586" datatype="html"> + <source>Show confirmation dialogs</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="translated">Visa bekräftelsedialoger</target> + </trans-unit> + <trans-unit id="291bbe56ecbe945dcf05580a57d679fa7bd1e06a" datatype="html"> + <source>Deleting documents will always ask for confirmation.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">107</context> + </context-group> + <target state="translated">Radering av dokument kommer alltid att be om bekräftelse.</target> + </trans-unit> + <trans-unit id="8cfddc13e04f5545ac63f419ef363505d6f78c2e" datatype="html"> + <source>Apply on close</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">108</context> + </context-group> + <target state="translated">Tillämpa vid stängning</target> + </trans-unit> + <trans-unit id="8680abbea249ebe9c2fe35556559c8e1a9eb5841" datatype="html"> + <source>Document processing</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">119</context> + </context-group> + <target state="translated">Dokument bearbetas</target> + </trans-unit> + <trans-unit id="2ad4d76b36341c589d94004ad2a213fd4d6f5ca0" datatype="html"> + <source>Show notifications when new documents are detected</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="translated">Visa notifieringar när nya dokument upptäcks</target> + </trans-unit> + <trans-unit id="e775f4f7c40249d31426ae61a21616a0c9d8e84f" datatype="html"> + <source>Show notifications when document processing completes successfully</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">124</context> + </context-group> + <target state="translated">Visa notifieringar när dokumentbehandlingen är klar</target> + </trans-unit> + <trans-unit id="e3844dd174d8e817ddb551fae28f14ae80ca36b6" datatype="html"> + <source>Show notifications when document processing fails</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">125</context> + </context-group> + <target state="translated">Visa aviseringar när dokumentbehandling misslyckas</target> + </trans-unit> + <trans-unit id="af113f7c9f7e13145c3461f61a1aedf12d57bd71" datatype="html"> + <source>Suppress notifications on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="translated">Förhindra aviseringar på instrumentpanelen</target> + </trans-unit> + <trans-unit id="e27bd3804d2936a6897e81c2e52e294490e5e5a8" datatype="html"> + <source>This will suppress all messages about document processing status on the dashboard.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="translated">Detta kommer att förhindra alla meddelanden om status för dokumenthantering på instrumentpanelen.</target> + </trans-unit> + <trans-unit id="8cb90334f5dfd7fc67205085f59381e2a334ccfc" datatype="html"> + <source>Appears on</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">146</context> + </context-group> + <target state="translated">Visas på</target> + </trans-unit> + <trans-unit id="6717cf1acf04728fc2b7c39f6d3297f8ff15fde5" datatype="html"> + <source>Show on dashboard</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">149</context> + </context-group> + <target state="translated">Visa på instrumentpanelen</target> + </trans-unit> + <trans-unit id="541bfc5b123b3f8867fd681eaceefb663a811973" datatype="html"> + <source>Show in sidebar</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">153</context> + </context-group> + <target state="translated">Visa i sidofältet</target> + </trans-unit> + <trans-unit id="abba764a7a595d04dc8c3b26e04b3780d4fdb540" datatype="html"> + <source>No saved views defined.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="translated">Inga sparade vyer har definierats.</target> + </trans-unit> + <trans-unit id="ef60a738a565f498b858e903e42bc5ffc3cc1299" datatype="html"> + <source>404 Not Found</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/not-found/not-found.component.html</context> + <context context-type="linenumber">7</context> + </context-group> + <target state="translated">404 Hittades inte</target> + </trans-unit> + <trans-unit id="7427874343955308724" datatype="html"> + <source>Do you really want to delete the correspondent "<x id="PH" equiv-text="object.name"/>"?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Vill du verkligen ta bort korrespondenten "<x id="PH" equiv-text="object.name"/>"?</target> + </trans-unit> + <trans-unit id="c3f3334de899327bf3ec8999236e10798ff76e72" datatype="html"> + <source>Correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Korrespondenter</target> + </trans-unit> + <trans-unit id="0488919cff4fcc2174d34e4a1167f1b3c586ca37" datatype="html"> + <source>Last correspondence</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-list.component.html</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Senaste korrespondens</target> + </trans-unit> + <trans-unit id="1234709746630139322" datatype="html"> + <source>Confirmation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="translated">Bekräftelse</target> + </trans-unit> + <trans-unit id="9178182467454450952" datatype="html"> + <source>Confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.ts</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="translated">Bekräfta</target> + </trans-unit> + <trans-unit id="d7b35c384aecd25a516200d6921836374613dfe7" datatype="html"> + <source>Cancel</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/confirm-dialog/confirm-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Avbryt</target> + </trans-unit> + <trans-unit id="6457471243969293847" datatype="html"> + <source>Create new correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Skapa ny korrespondent</target> + </trans-unit> + <trans-unit id="2059822531169388684" datatype="html"> + <source>Edit correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Senaste korrespondent</target> + </trans-unit> + <trans-unit id="3d5caa52b0a51bfd2757215f7614183554d740f0" datatype="html"> + <source>Matching algorithm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Matchande algoritm</target> + </trans-unit> + <trans-unit id="eab7fc7cf2d663e54de934b779fce4275a303f0f" datatype="html"> + <source>Matching pattern</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="translated">Matchande mönster</target> + </trans-unit> + <trans-unit id="632e529f49cf3d367dfbd15bd055e9b53aef30fb" datatype="html"> + <source>Case insensitive</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Ej skiftlägeskänsligt</target> + </trans-unit> + <trans-unit id="9153094873118985366" datatype="html"> + <source>Create new tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Skapa ny tagg</target> + </trans-unit> + <trans-unit id="5872175735754226507" datatype="html"> + <source>Edit tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Redigera tag</target> + </trans-unit> + <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> + <source>Inbox tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Inkorgs tagg</target> + </trans-unit> + <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> + <source>Inbox tags are automatically assigned to all consumed documents.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Inkorgtaggar tilldelas automatiskt till alla konsumerade dokument.</target> + </trans-unit> + <trans-unit id="6672809941092516947" datatype="html"> + <source>Create new document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Skapa ny dokumenttyp</target> + </trans-unit> + <trans-unit id="36335016091244220" datatype="html"> + <source>Edit document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Redigera dokumenttyp</target> + </trans-unit> + <trans-unit id="41147374f427980a9f1a8cd5e3f4b1666e6f2418" datatype="html"> + <source>Paperless-ng</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <note priority="1" from="description">app title</note> + <target state="translated">Paperless-ng</target> + </trans-unit> + <trans-unit id="069566c6ed4f051b5b5617ef1935837226585dad" datatype="html"> + <source>Search documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Sök dokument</target> + </trans-unit> + <trans-unit id="bb694b49d408265c91c62799c2b3a7e3151c824d" datatype="html"> + <source>Logout</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Logga ut</target> + </trans-unit> + <trans-unit id="68949525c4d9a901e0cd15a94e3fc8d2711e9918" datatype="html"> + <source>Manage</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">112</context> + </context-group> + <target state="translated">Hantera</target> + </trans-unit> + <trans-unit id="408cb6073e60c5d966296a3207fc596adca75e01" datatype="html"> + <source>Admin</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">154</context> + </context-group> + <target state="translated">Admin</target> + </trans-unit> + <trans-unit id="321e4419a943044e674beb55b8039f42a9761ca5" datatype="html"> + <source>Info</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">160</context> + </context-group> + <target state="translated">Info</target> + </trans-unit> + <trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html"> + <source>Documentation</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">167</context> + </context-group> + <target state="translated">Dokumentation</target> + </trans-unit> + <trans-unit id="355a222236bc01b9a8cd3cb9ecf76891125aed69" datatype="html"> + <source>GitHub</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">175</context> + </context-group> + <target state="translated">GitHub</target> + </trans-unit> + <trans-unit id="ea3a452c5238897cabc5781308cceb2d37dcf258" datatype="html"> + <source>Suggest an idea</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">181</context> + </context-group> + <target state="translated">Föreslå en idé</target> + </trans-unit> + <trans-unit id="af665f8de8fabe306aaf27443957e69bcbbce63c" datatype="html"> + <source>Logged in as <x id="INTERPOLATION" equiv-text="{{displayName}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="translated">Inloggad som <x id="INTERPOLATION" equiv-text="{{displayName}}"/></target> + </trans-unit> + <trans-unit id="4f55b670f49d927c6026bb614c7c62b1f2a394c0" datatype="html"> + <source>Open documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Öppna dokument</target> + </trans-unit> + <trans-unit id="dca5bf9344a759fa5a07f1b21f50286ec242ba44" datatype="html"> + <source>Close all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="translated">Stäng alla</target> + </trans-unit> + <trans-unit id="5195932016807797291" datatype="html"> + <source>Correspondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="translated">Korrespondent: <x id="PH" equiv-text="this.correspondents.find(c => c.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="8170755470576301659" datatype="html"> + <source>Without correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Utan korrespondent</target> + </trans-unit> + <trans-unit id="8705701325879965907" datatype="html"> + <source>Type: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Typ: <x id="PH" equiv-text="this.documentTypes.find(dt => dt.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="4362173610367509215" datatype="html"> + <source>Without document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">46</context> + </context-group> + <target state="translated">Utan dokumenttyp</target> + </trans-unit> + <trans-unit id="8180755793012580465" datatype="html"> + <source>Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="translated">Tag: <x id="PH" equiv-text="this.tags.find(t => t.id == +rule.value)?.name"/></target> + </trans-unit> + <trans-unit id="6494566478302448576" datatype="html"> + <source>Without any tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="translated">Utan tagg</target> + </trans-unit> + <trans-unit id="6523384805359286307" datatype="html"> + <source>Title: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="translated">Titel: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="1872523635812236432" datatype="html"> + <source>ASN: <x id="PH" equiv-text="rule.value"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">61</context> + </context-group> + <target state="translated">ASN: <x id="PH" equiv-text="rule.value"/></target> + </trans-unit> + <trans-unit id="5701618810648052610" datatype="html"> + <source>Title</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">88</context> + </context-group> + <target state="translated">Titel</target> + </trans-unit> + <trans-unit id="3100631071441658964" datatype="html"> + <source>Title & content</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">89</context> + </context-group> + <target state="translated">Titel & innehåll</target> + </trans-unit> + <trans-unit id="7517688192215738656" datatype="html"> + <source>ASN</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="translated">ASN</target> + </trans-unit> + <trans-unit id="1010505078885609376" datatype="html"> + <source>Advanced search</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Avancerad sökning</target> + </trans-unit> + <trans-unit id="2649431021108393503" datatype="html"> + <source>More like</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Mer som</target> + </trans-unit> + <trans-unit id="02d184c288f567825a1fcbf83bcd3099a10853d5" datatype="html"> + <source>Filter tags</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">19</context> + </context-group> + <target state="translated">Filtrera taggar</target> + </trans-unit> + <trans-unit id="4b089ca12c472cf0b46167bb5afe4b527b301bbc" datatype="html"> + <source>Filter correspondents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="translated">Filtrera korrespondenter</target> + </trans-unit> + <trans-unit id="0ad509732aaf702b7ea8c771c7809fa84bc85908" datatype="html"> + <source>Filter document types</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="translated">Filtrera dokument typ</target> + </trans-unit> + <trans-unit id="2d9d55f1b70142ff4597ba32179d16888fd9c6b2" datatype="html"> + <source>Reset filters</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.html</context> + <context context-type="linenumber">57</context> + </context-group> + <target state="translated">Återställ filter</target> + </trans-unit> + <trans-unit id="7593728289020204896" datatype="html"> + <source>Not assigned</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts</context> + <context context-type="linenumber">166</context> + </context-group> + <note priority="1" from="description">Filter drop down element to filter for documents with no correspondent/type/tag assigned</note> + <target state="translated">Inte tilldelad</target> + </trans-unit> + <trans-unit id="c2d0ac9f528bbd5f53fd34269fde8b59e029621b" datatype="html"> + <source>Apply</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/filterable-dropdown/filterable-dropdown.component.html</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Tillämpa</target> + </trans-unit> + <trans-unit id="4873149362496451858" datatype="html"> + <source>Last 7 days</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">34</context> + </context-group> + <target state="translated">Senaste 7 dagarna</target> + </trans-unit> + <trans-unit id="4463380307954693363" datatype="html"> + <source>Last month</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Senaste månaden</target> + </trans-unit> + <trans-unit id="8697368973702409683" datatype="html"> + <source>Last 3 months</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">36</context> + </context-group> + <target state="translated">Senaste 3 månaderna</target> + </trans-unit> + <trans-unit id="3566342898065860218" datatype="html"> + <source>Last year</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> + <context context-type="linenumber">37</context> + </context-group> + <target state="translated">Senaste året</target> + </trans-unit> + <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> + <source>After</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Efter</target> + </trans-unit> + <trans-unit id="8785188e6c678b842fcb93b7392faf86db7ec676" datatype="html"> + <source>Before</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Innan</target> + </trans-unit> + <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> + <source>Clear</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Rensa</target> + </trans-unit> + <trans-unit id="6829218544e108e152f5fa72cb79c4ccb82e0d06" datatype="html"> + <source>View</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">51</context> + </context-group> + <target state="translated">Vy</target> + </trans-unit> + <trans-unit id="cd6f3fd48957e1fea6545c2b2defc7b2435ebfa8" datatype="html"> + <source>Filter by correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Filtrera på korrespondent</target> + </trans-unit> + <trans-unit id="bdb9a910523610254872e147222689e9a4115b84" datatype="html"> + <source>Filter by tag</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="translated">Filtrera efter tagg</target> + </trans-unit> + <trans-unit id="9c5fdf21ec2cc7baa6f062f2dc417af45c8dbe60" datatype="html"> + <source>Score:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-large/document-card-large.component.html</context> + <context context-type="linenumber">87</context> + </context-group> + <target state="translated">Poäng:</target> + </trans-unit> + <trans-unit id="727d980bba2b3e0b3d8705607f1208eef046479b" datatype="html"> + <source>Created: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">43</context> + </context-group> + <target state="translated">Skapad: <x id="INTERPOLATION" equiv-text="{{ document.created | customDate}}"/></target> + </trans-unit> + <trans-unit id="0f5d856cb63c69fde44fbfc653ec0655f9040865" datatype="html"> + <source>Added: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">44</context> + </context-group> + <target state="translated">Tillagd: <x id="INTERPOLATION" equiv-text="{{ document.added | customDate}}"/></target> + </trans-unit> + <trans-unit id="a205126adef6251fc63305f1a6228d07bc2795a8" datatype="html"> + <source>Modified: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Ändrad: <x id="INTERPOLATION" equiv-text="{{ document.modified | customDate}}"/></target> + </trans-unit> + <trans-unit id="7985804062689412812" datatype="html"> + <source>Error executing bulk operation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">74</context> + </context-group> + <target state="translated">Fel vid körning av massoperation: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="7894972847287473517" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">113</context> + </context-group> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>"</target> + </trans-unit> + <trans-unit id="8639884465898458690" datatype="html"> + <source>"<x id="PH" equiv-text="items[0].name"/>" and "<x id="PH_1" equiv-text="items[1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">115</context> + </context-group> + <note priority="1" from="description">This is for messages like 'modify "tag1" and "tag2"'</note> + <target state="translated">"<x id="PH" equiv-text="items[0].name"/>" och "<x id="PH_1" equiv-text="items[1].name"/>"</target> + </trans-unit> + <trans-unit id="760986369763309193" datatype="html"> + <source>, </source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">117</context> + </context-group> + <note priority="1" from="description">this is used to separate enumerations and should probably be a comma and a whitespace in most languages</note> + <target state="translated">, </target> + </trans-unit> + <trans-unit id="1822679894391095557" datatype="html"> + <source><x id="PH" equiv-text="list"/> and "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <note priority="1" from="description">this is for messages like 'modify "tag1", "tag2" and "tag3"'</note> + <target state="translated"><x id="PH" equiv-text="list"/>" och "<x id="PH_1" equiv-text="items[items.length - 1].name"/>"</target> + </trans-unit> + <trans-unit id="4137232459980262849" datatype="html"> + <source>Confirm tags assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">127</context> + </context-group> + <target state="translated">Bekräfta tilldelning av taggar</target> + </trans-unit> + <trans-unit id="6619516195038467207" datatype="html"> + <source>This operation will add the tag "<x id="PH" equiv-text="tag.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">130</context> + </context-group> + <target state="translated">Denna åtgärd kommer att lägga till taggen "<x id="PH" equiv-text="tag.name"/>" till <x id="PH_1" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="1894412783609570695" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">132</context> + </context-group> + <target state="translated">Denna åtgärd kommer att lägga till taggen "<x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/>" till <x id="PH_1" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="7181166515756808573" datatype="html"> + <source>This operation will remove the tag "<x id="PH" equiv-text="tag.name"/>" from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">135</context> + </context-group> + <target state="translated">Denna åtgärd kommer att ta bort taggen "<x id="PH" equiv-text="tag.name"/>" från <x id="PH_1" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="3819792277998068944" datatype="html"> + <source>This operation will remove the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> from <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">137</context> + </context-group> + <target state="translated">Denna åtgärd kommer att ta bort taggar <x id="PH" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> från <x id="PH_1" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="2739066218579571288" datatype="html"> + <source>This operation will add the tags <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> and remove the tags <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> on <x id="PH_2" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">139</context> + </context-group> + <target state="translated">Den här åtgärden kommer att lägga till taggar <x id="PH" equiv-text="this._localizeList(changedTags.itemsToAdd)"/> och ta bort taggar <x id="PH_1" equiv-text="this._localizeList(changedTags.itemsToRemove)"/> på <x id="PH_2" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="2996713129519325161" datatype="html"> + <source>Confirm correspondent assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">159</context> + </context-group> + <target state="translated">Bekräfta korrespondenttilldelning</target> + </trans-unit> + <trans-unit id="6900893559485781849" datatype="html"> + <source>This operation will assign the correspondent "<x id="PH" equiv-text="correspondent.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">161</context> + </context-group> + <target state="translated">Den här åtgärden kommer att tilldela korrespondenten "<x id="PH" equiv-text="correspondent.name"/>" till <x id="PH_1" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="1257522660364398440" datatype="html"> + <source>This operation will remove the correspondent from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">163</context> + </context-group> + <target state="translated">Den här åtgärden kommer att ta bort korrespondenten från <x id="PH" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="5393409374423140648" datatype="html"> + <source>Confirm document type assignment</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">182</context> + </context-group> + <target state="translated">Bekräfta tilldelning av dokumenttyp</target> + </trans-unit> + <trans-unit id="332180123895325027" datatype="html"> + <source>This operation will assign the document type "<x id="PH" equiv-text="documentType.name"/>" to <x id="PH_1" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">184</context> + </context-group> + <target state="translated">Den här åtgärden kommer att tilldela dokumenttypen "<x id="PH" equiv-text="documentType.name"/>" till <x id="PH_1" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="2236642492594872779" datatype="html"> + <source>This operation will remove the document type from <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">186</context> + </context-group> + <target state="translated">Den här åtgärden kommer att ta bort dokumenttypen från <x id="PH" equiv-text="this.list.selected.size"/> valda dokument.</target> + </trans-unit> + <trans-unit id="749430623564850405" datatype="html"> + <source>Delete confirm</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">201</context> + </context-group> + <target state="translated">Bekräfta borttagning</target> + </trans-unit> + <trans-unit id="4303174930844518780" datatype="html"> + <source>This operation will permanently delete <x id="PH" equiv-text="this.list.selected.size"/> selected document(s).</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">202</context> + </context-group> + <target state="translated">Den här åtgärden kommer att permanent ta bort <x id="PH" equiv-text="this.list.selected.size"/> markerade dokument.</target> + </trans-unit> + <trans-unit id="5641451190833696892" datatype="html"> + <source>This operation cannot be undone.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">203</context> + </context-group> + <target state="translated">Den här åtgärden kan inte ångras.</target> + </trans-unit> + <trans-unit id="6734339521247847366" datatype="html"> + <source>Delete document(s)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context> + <context context-type="linenumber">205</context> + </context-group> + <target state="translated">Ta bort dokument</target> + </trans-unit> + <trans-unit id="8b0609df23817024b3bed12beb9b64fc1009f588" datatype="html"> + <source>Select:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">Välj:</target> + </trans-unit> + <trans-unit id="dfc3c34e182ea73c5d784ff7c8135f087992dac1" datatype="html"> + <source>All</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Alla</target> + </trans-unit> + <trans-unit id="907df6a2b68daecc3c399cf40a764b358bd9fd84" datatype="html"> + <source>Edit:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="translated">Redigera:</target> + </trans-unit> + <trans-unit id="fc2de37422d7c4af6686842283cc2afd781b6848" datatype="html"> + <source>Download originals</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> + <context context-type="linenumber">68</context> + </context-group> + <target state="translated">Ladda ner original</target> + </trans-unit> + <trans-unit id="a1e6c11f20d4bf6e8e6b43e3c6d2561b2080645e" datatype="html"> + <source>Suggestions:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> + <context context-type="linenumber">29</context> + </context-group> + <target state="translated">Förslag:</target> + </trans-unit> + <trans-unit id="27d158b47717ff9305d19866960418c603f19d55" datatype="html"> + <source>Save current view</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="translated">Spara aktuell vy</target> + </trans-unit> + <trans-unit id="4eb84de23219c85432e38fb4fbdeb6c0f103ff8b" datatype="html"> + <source>Show all</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="translated">Visa alla</target> + </trans-unit> + <trans-unit id="61e0f26d843eec0b33ff475e111b0c2f7a80b835" datatype="html"> + <source>Statistics</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Statistik</target> + </trans-unit> + <trans-unit id="c0d907c2687c09612395aee6ef7c04ca8e5e5e0a" datatype="html"> + <source>Total documents: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <target state="translated">Totalt antal dokument: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_total}}"/></target> + </trans-unit> + <trans-unit id="13e8d49dbcad9f9d71e66a9a56d6f328cff430c9" datatype="html"> + <source>Documents in inbox: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html</context> + <context context-type="linenumber">3</context> + </context-group> + <target state="translated">Dokument i inkorg: <x id="INTERPOLATION" equiv-text="{{statistics?.documents_inbox}}"/></target> + </trans-unit> + <trans-unit id="6443586946875325554" datatype="html"> + <source>Processing: <x id="PH" equiv-text="countUploadingAndProcessing"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">32</context> + </context-group> + <target state="translated">Bearbetar: <x id="PH" equiv-text="countUploadingAndProcessing"/></target> + </trans-unit> + <trans-unit id="9182918211699394982" datatype="html"> + <source>Failed: <x id="PH" equiv-text="countFailed"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Misslyckades: <x id="PH" equiv-text="countFailed"/></target> + </trans-unit> + <trans-unit id="534116346205124059" datatype="html"> + <source>Added: <x id="PH" equiv-text="countSuccess"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">38</context> + </context-group> + <target state="translated">Tillagda: <x id="PH" equiv-text="countSuccess"/></target> + </trans-unit> + <trans-unit id="3852289441366561594" datatype="html"> + <source>Connecting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">118</context> + </context-group> + <target state="translated">Ansluter...</target> + </trans-unit> + <trans-unit id="1245343823699368872" datatype="html"> + <source>Uploading...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">123</context> + </context-group> + <target state="translated">Laddar upp...</target> + </trans-unit> + <trans-unit id="7446520539098045935" datatype="html"> + <source>Upload complete, waiting...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">126</context> + </context-group> + <target state="translated">Uppladdning klar, väntar...</target> + </trans-unit> + <trans-unit id="1405142710727603568" datatype="html"> + <source>HTTP error: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts</context> + <context context-type="linenumber">136</context> + </context-group> + <target state="translated">HTTP-fel: <x id="PH" equiv-text="error.status"/> <x id="PH_1" equiv-text="error.statusText"/></target> + </trans-unit> + <trans-unit id="e022072b3e4dd77e3f09960817ef3359a49963b3" datatype="html"> + <source>Upload new documents</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Ladda upp dokument</target> + </trans-unit> + <trans-unit id="52d5d56b6667ba3f7c759cbc0d4c39d34a99701e" datatype="html"> + <source>Drop documents here or</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Släpp dokument här eller</target> + </trans-unit> + <trans-unit id="865c511f4a24558ed0e954f9bbbff557bbb8954d" datatype="html"> + <source>Browse files</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Bläddra bland filer</target> + </trans-unit> + <trans-unit id="bd4a8607e4a002d939cffb347ec056664dfb2c73" datatype="html"> + <source>Dismiss completed</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">4</context> + </context-group> + <note priority="1" from="description">This button dismisses all status messages about processed documents on the dashboard (failed and successful)</note> + <target state="translated">Avfärda slutförd</target> + </trans-unit> + <trans-unit id="90917e1a0a7bb59e9d11bdde9183e9391963e17b" datatype="html"> + <source>{VAR_PLURAL, plural, =1 {One more document} other {<x id="INTERPOLATION"/> more documents}}</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">25</context> + </context-group> + <note priority="1" from="description">This is shown as a summary line when there are more than 5 document in the processing pipeline.</note> + <target state="translated">{VAR_PLURAL, plural, one {} =1 {Ett dokument till} other {<x id="INTERPOLATION"/> fler dokument}}</target> + </trans-unit> + <trans-unit id="710254a196a2649674438edf8a15b7ab1f48271b" datatype="html"> + <source>Open document</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html</context> + <context context-type="linenumber">45</context> + </context-group> + <target state="translated">Öppna dokument</target> + </trans-unit> + <trans-unit id="45854ddec74086b271e62be6a363f4fa5036f7fc" datatype="html"> + <source>First steps</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Första stegen</target> + </trans-unit> + <trans-unit id="a0dc8218a6fcc5d11a4723ed127bd6be9d6d3ef3" datatype="html"> + <source>Paperless is running! :)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">5</context> + </context-group> + <target state="translated">Papperslös är igång! :)</target> + </trans-unit> + <trans-unit id="ea8d9a9486d5639d1c38c012900b8d34d5e4135d" datatype="html"> + <source>You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">6,7</context> + </context-group> + <target state="translated">Du kan börja ladda upp dokument genom att släppa dem i rutan för filuppladdning till höger eller genom att släppa dem i den konfigurerade konsumtionsmappen och de börjar visas i dokumentlistan. När du har lagt till några metadata i dina dokument, använd filtreringsmekanismerna för paperless för att skapa anpassade vyer (såsom "Nyligen tillagd", 'Tagged TODO') och de kommer att visas på instrumentpanelen i stället för detta meddelande.</target> + </trans-unit> + <trans-unit id="cf5f85690feaba6e29343f9881e57a6c0ea6e82b" datatype="html"> + <source>Paperless offers some more features that try to make your life easier:</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">8</context> + </context-group> + <target state="translated">Paperless erbjuder några ytterligare funktioner för att göra ditt liv enklare:</target> + </trans-unit> + <trans-unit id="edb41dc36af2e70789d8e3422325d930e783253e" datatype="html"> + <source>Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">10</context> + </context-group> + <target state="translated">När du har fått ett par dokument i paperless och lagt till metadata till dem, kan paperless tilldela detta metadata till nya dokument automatiskt.</target> + </trans-unit> + <trans-unit id="9dca488928c0b7af46c3866f86a6c2c8548399aa" datatype="html"> + <source>You can configure paperless to read your mails and add documents from attached files.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">11</context> + </context-group> + <target state="translated">Du kan konfigurera paperless för att läsa dina e-postmeddelanden och lägga till dokument från bifogade filer.</target> + </trans-unit> + <trans-unit id="d282f6277cbf6704f697170d2ad19ce500790e20" datatype="html"> + <source>Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Konsultera dokumentationen om hur man använder dessa funktioner. Avsnittet om grundläggande användning har också viss information om hur man använder paperless i allmänhet.</target> + </trans-unit> + <trans-unit id="218403386307979629" datatype="html"> + <source>Metadata</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Metadata</target> + </trans-unit> + <trans-unit id="3797570084942068182" datatype="html"> + <source>Select</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Välj</target> + </trans-unit> + <trans-unit id="7103181924469214926" datatype="html"> + <source>Please select an object</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/select-dialog/select-dialog.component.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Välj ett objekt</target> + </trans-unit> + <trans-unit id="d6529debfc1613db22d6fa096ebfeb8a85fa739d" datatype="html"> + <source>Invalid date.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="translated">Ogiltigt datum.</target> + </trans-unit> + <trans-unit id="bd5ca454e336126f3eeb67417d9264696b5c852c" datatype="html"> + <source>Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> + <context context-type="linenumber">1</context> + </context-group> + <target state="translated">Söker dokument med asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + </trans-unit> + <trans-unit id="2807800733729323332" datatype="html"> + <source>Yes</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="translated">Ja</target> + </trans-unit> + <trans-unit id="3542042671420335679" datatype="html"> + <source>No</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/yes-no.pipe.ts</context> + <context context-type="linenumber">9</context> + </context-group> + <target state="translated">Nej</target> + </trans-unit> + <trans-unit id="7536524521722799066" datatype="html"> + <source>(no title)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/pipes/document-title.pipe.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">(ingen titel)</target> + </trans-unit> + <trans-unit id="1206520795340730278" datatype="html"> + <source>English (US)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">90</context> + </context-group> + <target state="translated">Engelska (USA)</target> + </trans-unit> + <trans-unit id="6987083569809053351" datatype="html"> + <source>English (GB)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">91</context> + </context-group> + <target state="translated">Engelska (GB)</target> + </trans-unit> + <trans-unit id="1858110241312746425" datatype="html"> + <source>German</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">92</context> + </context-group> + <target state="translated">Tyska</target> + </trans-unit> + <trans-unit id="3071065188816255493" datatype="html"> + <source>Dutch</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">93</context> + </context-group> + <target state="translated">Holländska</target> + </trans-unit> + <trans-unit id="7633754075223722162" datatype="html"> + <source>French</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">94</context> + </context-group> + <target state="translated">Franska</target> + </trans-unit> + <trans-unit id="153799456510623899" datatype="html"> + <source>Portuguese</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">95</context> + </context-group> + <target state="translated">Portugisiska</target> + </trans-unit> + <trans-unit id="9184513005098760425" datatype="html"> + <source>Portuguese (Brazil)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">96</context> + </context-group> + <target state="translated">Portugisiska (Brasilien)</target> + </trans-unit> + <trans-unit id="2935232983274991580" datatype="html"> + <source>Italian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="translated">Italienska</target> + </trans-unit> + <trans-unit id="8118856427047826368" datatype="html"> + <source>Romanian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">98</context> + </context-group> + <target state="translated">Rumänska</target> + </trans-unit> + <trans-unit id="7137419789978325708" datatype="html"> + <source>Russian</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">99</context> + </context-group> + <target state="translated">Ryska</target> + </trans-unit> + <trans-unit id="5190825892106392539" datatype="html"> + <source>Spanish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">100</context> + </context-group> + <target state="translated">Spanska</target> + </trans-unit> + <trans-unit id="792060551707690640" datatype="html"> + <source>Polish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">101</context> + </context-group> + <target state="translated">Polska</target> + </trans-unit> + <trans-unit id="4912706592792948707" datatype="html"> + <source>ISO 8601</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="translated">ISO 8601</target> + </trans-unit> + <trans-unit id="2119857572761283468" datatype="html"> + <source>Document already exists.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Dokumentet finns redan.</target> + </trans-unit> + <trans-unit id="148389968432135849" datatype="html"> + <source>File not found.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="translated">Filen hittades inte.</target> + </trans-unit> + <trans-unit id="1520671543092565667" datatype="html"> + <source>Pre-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Pre-consume skript finns inte.</target> + </trans-unit> + <trans-unit id="7742915911032564889" datatype="html"> + <source>Error while executing pre-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <note priority="1" from="description">Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Fel vid körning av pre-consume skript.</target> + </trans-unit> + <trans-unit id="8995193730018060346" datatype="html"> + <source>Post-consume script does not exist.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">19</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Post-consume skript finns inte.</target> + </trans-unit> + <trans-unit id="256773668518189604" datatype="html"> + <source>Error while executing post-consume script.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <note priority="1" from="description">Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation</note> + <target state="translated">Fel vid körning av post-consume skript.</target> + </trans-unit> + <trans-unit id="6252258095055634191" datatype="html"> + <source>Received new file.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Tog emot ny fil.</target> + </trans-unit> + <trans-unit id="7337565919209746135" datatype="html"> + <source>File type not supported.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Filtypen stöds inte.</target> + </trans-unit> + <trans-unit id="5002399167376099234" datatype="html"> + <source>Processing document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Bearbetar dokument...</target> + </trans-unit> + <trans-unit id="1085975194762600381" datatype="html"> + <source>Generating thumbnail...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">24</context> + </context-group> + <target state="translated">Miniatyrer genereras...</target> + </trans-unit> + <trans-unit id="3280851677698431426" datatype="html"> + <source>Retrieving date from document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">25</context> + </context-group> + <target state="translated">Hämtar datum från dokument...</target> + </trans-unit> + <trans-unit id="7162102384876037296" datatype="html"> + <source>Saving document...</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">26</context> + </context-group> + <target state="translated">Sparar dokument...</target> + </trans-unit> + <trans-unit id="4550450765009165976" datatype="html"> + <source>Finished.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/consumer-status.service.ts</context> + <context context-type="linenumber">27</context> + </context-group> + <target state="translated">Slutförd.</target> + </trans-unit> + <trans-unit id="1519954996184640001" datatype="html"> + <source>Error</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">35</context> + </context-group> + <target state="translated">Fel</target> + </trans-unit> + <trans-unit id="5037437391296624618" datatype="html"> + <source>Information</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/toast.service.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Information</target> + </trans-unit> + <trans-unit id="2691296884221415710" datatype="html"> + <source>Correspondent</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">18</context> + </context-group> + <target state="translated">Korrespondent</target> + </trans-unit> + <trans-unit id="5066119607229701477" datatype="html"> + <source>Document type</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">20</context> + </context-group> + <target state="translated">Dokumenttyp</target> + </trans-unit> + <trans-unit id="4207916966377787111" datatype="html"> + <source>Created</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">21</context> + </context-group> + <target state="translated">Skapad</target> + </trans-unit> + <trans-unit id="231679111972850796" datatype="html"> + <source>Added</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">22</context> + </context-group> + <target state="translated">Tillagd</target> + </trans-unit> + <trans-unit id="3553216189604488439" datatype="html"> + <source>Modified</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/rest/document.service.ts</context> + <context context-type="linenumber">23</context> + </context-group> + <target state="translated">Ändrad</target> + </trans-unit> + <trans-unit id="4561076822163447092" datatype="html"> + <source>Create new item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">50</context> + </context-group> + <target state="translated">Skapa nytt objekt</target> + </trans-unit> + <trans-unit id="5324147361912094446" datatype="html"> + <source>Edit item</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">54</context> + </context-group> + <target state="translated">Redigera objekt</target> + </trans-unit> + <trans-unit id="1699589597032579396" datatype="html"> + <source>Could not save element: <x id="PH" equiv-text="error"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> + <context context-type="linenumber">58</context> + </context-group> + <target state="translated">Kunde inte spara element: <x id="PH" equiv-text="error"/></target> + </trans-unit> + <trans-unit id="810888510148304696" datatype="html"> + <source>Automatic</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">39</context> + </context-group> + <target state="translated">Automatisk</target> + </trans-unit> + <trans-unit id="5044611416737085530" datatype="html"> + <source>Do you really want to delete this element?</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">97</context> + </context-group> + <target state="translated">Vill du verkligen ta bort detta element?</target> + </trans-unit> + <trans-unit id="8371896857609524947" datatype="html"> + <source>Associated documents will not be deleted.</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">104</context> + </context-group> + <target state="translated">Kopplade dokument kommer inte att raderas.</target> + </trans-unit> + <trans-unit id="7022070615528435141" datatype="html"> + <source>Delete</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">106</context> + </context-group> + <target state="translated">Radera</target> + </trans-unit> + <trans-unit id="5467489005440577210" datatype="html"> + <source>Error while deleting element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/components/manage/generic-list/generic-list.component.ts</context> + <context context-type="linenumber">114</context> + </context-group> + <target state="translated">Fel vid borttagning av element: <x id="PH" equiv-text="JSON.stringify(error.error)"/></target> + </trans-unit> + <trans-unit id="5851669019930456395" datatype="html"> + <source>Any word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Valfritt ord</target> + </trans-unit> + <trans-unit id="7517655726614958140" datatype="html"> + <source>Any: Document contains any of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">12</context> + </context-group> + <target state="translated">Any: Dokumentet innehåller något av dessa ord (mellanslag separerade)</target> + </trans-unit> + <trans-unit id="700315718208181326" datatype="html"> + <source>All words</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">Alla ord</target> + </trans-unit> + <trans-unit id="111914402588955480" datatype="html"> + <source>All: Document contains all of these words (space separated)</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">13</context> + </context-group> + <target state="translated">All: Dokumentet innehåller alla dessa ord (mellanslag separerade)</target> + </trans-unit> + <trans-unit id="9180173992399180575" datatype="html"> + <source>Exact match</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="translated">Exakt matchning</target> + </trans-unit> + <trans-unit id="7109184332944610787" datatype="html"> + <source>Exact: Document contains this string</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">14</context> + </context-group> + <target state="translated">Exact: Dokumentet innehåller denna sträng</target> + </trans-unit> + <trans-unit id="1338733395833138319" datatype="html"> + <source>Regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Reguljära uttryck</target> + </trans-unit> + <trans-unit id="7548151332424148033" datatype="html"> + <source>Regular expression: Document matches this regular expression</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">15</context> + </context-group> + <target state="translated">Reguljärt uttryck: Dokumentet matchar detta reguljära uttryck</target> + </trans-unit> + <trans-unit id="1856513373880048959" datatype="html"> + <source>Fuzzy word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="translated">Fuzzy word</target> + </trans-unit> + <trans-unit id="8419167206585286450" datatype="html"> + <source>Fuzzy: Document contains a word similar to this word</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">16</context> + </context-group> + <target state="translated">Fuzzy: Dokumentet innehåller ett ord som liknar detta ord</target> + </trans-unit> + <trans-unit id="2167862279705099846" datatype="html"> + <source>Auto: Learn matching automatically</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/data/matching-model.ts</context> + <context context-type="linenumber">17</context> + </context-group> + <target state="translated">Auto: Lär matchning automatiskt</target> + </trans-unit> + </body> + </file> +</xliff> diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 8ccee9c09..859156d1e 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"PO-Revision-Date: 2021-05-02 17:00\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -336,11 +336,11 @@ msgstr "title or content contains" #: documents/models.py:393 msgid "fulltext query" -msgstr "" +msgstr "fulltext query" #: documents/models.py:394 msgid "more like this" -msgstr "" +msgstr "more like this" #: documents/models.py:405 msgid "rule type" @@ -458,7 +458,7 @@ msgstr "Spanish" #: paperless/settings.py:309 msgid "Polish" -msgstr "" +msgstr "Polish" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 00a83d366..4c2bd62d6 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:46\n" +"PO-Revision-Date: 2021-05-04 02:27\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -336,11 +336,11 @@ msgstr "titlul sau conținutul conține" #: documents/models.py:393 msgid "fulltext query" -msgstr "" +msgstr "query fulltext" #: documents/models.py:394 msgid "more like this" -msgstr "" +msgstr "mai multe ca aceasta" #: documents/models.py:405 msgid "rule type" diff --git a/src/locale/sv_SE/LC_MESSAGES/django.po b/src/locale/sv_SE/LC_MESSAGES/django.po new file mode 100644 index 000000000..bcc092cdb --- /dev/null +++ b/src/locale/sv_SE/LC_MESSAGES/django.po @@ -0,0 +1,674 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"PO-Revision-Date: 2021-05-04 13:14\n" +"Last-Translator: \n" +"Language-Team: Swedish\n" +"Language: sv_SE\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: sv-SE\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Dokument" + +#: documents/models.py:32 +msgid "Any word" +msgstr "Valfritt ord" + +#: documents/models.py:33 +msgid "All words" +msgstr "Alla ord" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "Exakt matchning" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "Reguljära uttryck" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "Fuzzy word" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "Automatisk" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:109 +msgid "name" +msgstr "namn" + +#: documents/models.py:45 +msgid "match" +msgstr "träff" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "matchande algoritm" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "är ej skiftlägeskänsligt" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "korrespondent" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "korrespondenter" + +#: documents/models.py:81 +msgid "color" +msgstr "färg" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "är inkorgstagg" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Markerar denna tagg som en inkorgstagg: Alla nyligen konsumerade dokument kommer att taggas med inkorgstaggar." + +#: documents/models.py:94 +msgid "tag" +msgstr "tagg" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "taggar" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "dokumenttyp" + +#: documents/models.py:102 +msgid "document types" +msgstr "dokumenttyper" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "Okrypterad" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Krypterad med GNU Privacy Guard" + +#: documents/models.py:124 +msgid "title" +msgstr "titel" + +#: documents/models.py:137 +msgid "content" +msgstr "innehåll" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Dokumentets råa, enbart text data. Detta fält används främst för sökning." + +#: documents/models.py:144 +msgid "mime type" +msgstr "MIME-typ" + +#: documents/models.py:155 +msgid "checksum" +msgstr "kontrollsumma" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "Kontrollsumman för originaldokumentet." + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "arkivera kontrollsumma" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "Kontrollsumman för arkiverat dokument." + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "skapad" + +#: documents/models.py:176 +msgid "modified" +msgstr "ändrad" + +#: documents/models.py:180 +msgid "storage type" +msgstr "Lagringstyp" + +#: documents/models.py:188 +msgid "added" +msgstr "tillagd" + +#: documents/models.py:192 +msgid "filename" +msgstr "filnamn" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "Nuvarande filnamn i lagring" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "arkivfilnamn" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "Nuvarande arkivfilnamn i lagring" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "arkivets serienummer" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "Placeringen av detta dokument i ditt fysiska dokumentarkiv." + +#: documents/models.py:223 +msgid "document" +msgstr "dokument" + +#: documents/models.py:224 +msgid "documents" +msgstr "dokument" + +#: documents/models.py:311 +msgid "debug" +msgstr "felsök" + +#: documents/models.py:312 +msgid "information" +msgstr "information" + +#: documents/models.py:313 +msgid "warning" +msgstr "varning" + +#: documents/models.py:314 +msgid "error" +msgstr "fel" + +#: documents/models.py:315 +msgid "critical" +msgstr "kritisk" + +#: documents/models.py:319 +msgid "group" +msgstr "grupp" + +#: documents/models.py:322 +msgid "message" +msgstr "meddelande" + +#: documents/models.py:325 +msgid "level" +msgstr "nivå" + +#: documents/models.py:332 +msgid "log" +msgstr "logg" + +#: documents/models.py:333 +msgid "logs" +msgstr "loggar" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "sparad vy" + +#: documents/models.py:345 +msgid "saved views" +msgstr "sparade vyer" + +#: documents/models.py:348 +msgid "user" +msgstr "användare" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "visa på instrumentpanelen" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "visa i sidofältet" + +#: documents/models.py:361 +msgid "sort field" +msgstr "sortera fält" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "sortera omvänd" + +#: documents/models.py:373 +msgid "title contains" +msgstr "titel innehåller" + +#: documents/models.py:374 +msgid "content contains" +msgstr "innehåll innehåller" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "ASN är" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "korrespondent är" + +#: documents/models.py:377 +msgid "document type is" +msgstr "dokumenttyp är" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "är i inkorgen" + +#: documents/models.py:379 +msgid "has tag" +msgstr "har tagg" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "har någon tagg" + +#: documents/models.py:381 +msgid "created before" +msgstr "skapad före" + +#: documents/models.py:382 +msgid "created after" +msgstr "skapad efter" + +#: documents/models.py:383 +msgid "created year is" +msgstr "skapat år är" + +#: documents/models.py:384 +msgid "created month is" +msgstr "skapad månad är" + +#: documents/models.py:385 +msgid "created day is" +msgstr "skapad dag är" + +#: documents/models.py:386 +msgid "added before" +msgstr "tillagd före" + +#: documents/models.py:387 +msgid "added after" +msgstr "tillagd efter" + +#: documents/models.py:388 +msgid "modified before" +msgstr "ändrad före" + +#: documents/models.py:389 +msgid "modified after" +msgstr "ändrad efter" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "har inte tagg" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "har inte ASN" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "titeln eller innehållet innehåller" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "fulltextfråga" + +#: documents/models.py:394 +msgid "more like this" +msgstr "mer som detta" + +#: documents/models.py:405 +msgid "rule type" +msgstr "regeltyp" + +#: documents/models.py:409 +msgid "value" +msgstr "värde" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "filtrera regel" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "filtrera regler" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "Ogiltigt reguljärt uttryck: %(error)s" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Ogiltig färg." + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Filtypen %(type)s stöds inte" + +#: documents/templates/index.html:21 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng laddas..." + +#: documents/templates/registration/logged_out.html:13 +msgid "Paperless-ng signed out" +msgstr "Paperless-ng utloggad" + +#: documents/templates/registration/logged_out.html:41 +msgid "You have been successfully logged out. Bye!" +msgstr "Du är nu utloggad!" + +#: documents/templates/registration/logged_out.html:42 +msgid "Sign in again" +msgstr "Logga in igen" + +#: documents/templates/registration/login.html:13 +msgid "Paperless-ng sign in" +msgstr "Paperless-ng inloggning" + +#: documents/templates/registration/login.html:42 +msgid "Please sign in." +msgstr "Vänligen logga in." + +#: documents/templates/registration/login.html:45 +msgid "Your username and password didn't match. Please try again." +msgstr "Ditt användarnamn och lösenord stämde inte. Försök igen." + +#: documents/templates/registration/login.html:48 +msgid "Username" +msgstr "Användarnamn" + +#: documents/templates/registration/login.html:49 +msgid "Password" +msgstr "Lösenord" + +#: documents/templates/registration/login.html:54 +msgid "Sign in" +msgstr "Logga in" + +#: paperless/settings.py:298 +msgid "English (US)" +msgstr "Engelska (USA)" + +#: paperless/settings.py:299 +msgid "English (GB)" +msgstr "Engelska (GB)" + +#: paperless/settings.py:300 +msgid "German" +msgstr "Tyska" + +#: paperless/settings.py:301 +msgid "Dutch" +msgstr "Holländska" + +#: paperless/settings.py:302 +msgid "French" +msgstr "Franska" + +#: paperless/settings.py:303 +msgid "Portuguese (Brazil)" +msgstr "Portugisiska (Brasilien)" + +#: paperless/settings.py:304 +msgid "Portuguese" +msgstr "Portugisiska" + +#: paperless/settings.py:305 +msgid "Italian" +msgstr "Italienska" + +#: paperless/settings.py:306 +msgid "Romanian" +msgstr "Rumänska" + +#: paperless/settings.py:307 +msgid "Russian" +msgstr "Ryska" + +#: paperless/settings.py:308 +msgid "Spanish" +msgstr "Spanska" + +#: paperless/settings.py:309 +msgid "Polish" +msgstr "Polska" + +#: paperless/urls.py:113 +msgid "Paperless-ng administration" +msgstr "Paperless-ng administration" + +#: paperless_mail/admin.py:25 +msgid "Filter" +msgstr "Filter" + +#: paperless_mail/admin.py:27 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless kommer endast att behandla e-postmeddelanden som matchar ALLA filter som anges nedan." + +#: paperless_mail/admin.py:37 +msgid "Actions" +msgstr "Åtgärder" + +#: paperless_mail/admin.py:39 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Åtgärden tillämpas på e-postmeddelandet. Denna åtgärd utförs endast när dokument konsumerades från e-postmeddelandet. E-post utan bilagor kommer att förbli helt orörda." + +#: paperless_mail/admin.py:46 +msgid "Metadata" +msgstr "Metadata" + +#: paperless_mail/admin.py:48 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Tilldela metadata till dokument som konsumeras från denna regel automatiskt. Om du inte tilldelar taggar, typer eller korrespondenter här kommer paperless fortfarande att behandla alla matchande regler som du har definierat." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Paperless e-post" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "e-postkonto" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "e-postkonton" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Ingen kryptering" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Använd SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Använd STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "IMAP-server" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "IMAP port" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Detta är vanligtvis 143 för okrypterade och STARTTLS-anslutningar, och 993 för SSL-anslutningar." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "IMAP säkerhet" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "användarnamn" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "lösenord" + +#: paperless_mail/models.py:60 +msgid "mail rule" +msgstr "e-postregel" + +#: paperless_mail/models.py:61 +msgid "mail rules" +msgstr "e-postregler" + +#: paperless_mail/models.py:67 +msgid "Only process attachments." +msgstr "Behandla endast bilagor." + +#: paperless_mail/models.py:68 +msgid "Process all files, including 'inline' attachments." +msgstr "Behandla alla filer, inklusive \"inline\" bilagor." + +#: paperless_mail/models.py:78 +msgid "Mark as read, don't process read mails" +msgstr "Markera som läst, bearbeta inte lästa meddelanden" + +#: paperless_mail/models.py:79 +msgid "Flag the mail, don't process flagged mails" +msgstr "Flagga mailet, bearbeta inte flaggade mail" + +#: paperless_mail/models.py:80 +msgid "Move to specified folder" +msgstr "Flytta till angiven mapp" + +#: paperless_mail/models.py:81 +msgid "Delete" +msgstr "Radera" + +#: paperless_mail/models.py:88 +msgid "Use subject as title" +msgstr "Använd ämne som titel" + +#: paperless_mail/models.py:89 +msgid "Use attachment filename as title" +msgstr "Använd bilagans filnamn som titel" + +#: paperless_mail/models.py:99 +msgid "Do not assign a correspondent" +msgstr "Tilldela inte en korrespondent" + +#: paperless_mail/models.py:101 +msgid "Use mail address" +msgstr "Använd e-postadress" + +#: paperless_mail/models.py:103 +msgid "Use name (or mail address if not available)" +msgstr "Använd namn (eller e-postadress om inte tillgängligt)" + +#: paperless_mail/models.py:105 +msgid "Use correspondent selected below" +msgstr "Använd korrespondent som valts nedan" + +#: paperless_mail/models.py:113 +msgid "order" +msgstr "ordning" + +#: paperless_mail/models.py:120 +msgid "account" +msgstr "konto" + +#: paperless_mail/models.py:124 +msgid "folder" +msgstr "mapp" + +#: paperless_mail/models.py:128 +msgid "filter from" +msgstr "filtrera från" + +#: paperless_mail/models.py:131 +msgid "filter subject" +msgstr "filtrera ämne" + +#: paperless_mail/models.py:134 +msgid "filter body" +msgstr "filtrera kropp" + +#: paperless_mail/models.py:138 +msgid "filter attachment filename" +msgstr "filtrera filnamn för bilaga" + +#: paperless_mail/models.py:140 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Konsumera endast dokument som helt och hållet matchar detta filnamn om det anges. Wildcards som *.pdf eller *faktura* är tillåtna. Ej skiftlägeskänsliga." + +#: paperless_mail/models.py:146 +msgid "maximum age" +msgstr "maximal ålder" + +#: paperless_mail/models.py:148 +msgid "Specified in days." +msgstr "Anges i dagar." + +#: paperless_mail/models.py:151 +msgid "attachment type" +msgstr "typ av bilaga" + +#: paperless_mail/models.py:154 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Bifogade bilagor inkluderar inbäddade bilder, så det är bäst att kombinera detta alternativ med ett filnamnsfilter." + +#: paperless_mail/models.py:159 +msgid "action" +msgstr "åtgärd" + +#: paperless_mail/models.py:165 +msgid "action parameter" +msgstr "åtgärdsparameter" + +#: paperless_mail/models.py:167 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +msgstr "Ytterligare parameter för åtgärden som valts ovan, dvs målmappen för flytta till mapp-åtgärden." + +#: paperless_mail/models.py:173 +msgid "assign title from" +msgstr "tilldela titel från" + +#: paperless_mail/models.py:183 +msgid "assign this tag" +msgstr "tilldela denna tagg" + +#: paperless_mail/models.py:191 +msgid "assign this document type" +msgstr "tilldela den här dokumenttypen" + +#: paperless_mail/models.py:195 +msgid "assign correspondent from" +msgstr "tilldela korrespondent från" + +#: paperless_mail/models.py:205 +msgid "assign this correspondent" +msgstr "tilldela denna korrespondent" + From 16b3f0b4b3c670cc5bcce22db7c5e526b717cb4f Mon Sep 17 00:00:00 2001 From: Jonas Winkler <jonas.winkler@tu-berlin.de> Date: Tue, 4 May 2021 17:01:39 +0200 Subject: [PATCH 754/898] add swedish locale --- src-ui/angular.json | 3 ++- src-ui/messages.xlf | 9 ++++++- src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 3 ++- src/locale/en_US/LC_MESSAGES/django.po | 30 ++++++++++++--------- src/paperless/settings.py | 3 ++- 6 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index bd269ea1e..0ae537d0c 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -26,7 +26,8 @@ "ro-RO": "src/locale/messages.ro_RO.xlf", "ru-RU": "src/locale/messages.ru_RU.xlf", "es-ES": "src/locale/messages.es_ES.xlf", - "pl-PL": "src/locale/messages.pl_PL.xlf" + "pl-PL": "src/locale/messages.pl_PL.xlf", + "sv-SE": "src/locale/messages.sv_SE.xlf" } }, "architect": { diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 99f959d0e..68fe2703a 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1731,11 +1731,18 @@ <context context-type="linenumber">101</context> </context-group> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> </trans-unit> <trans-unit id="2119857572761283468" datatype="html"> diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 7a38d512b..b3ce79a7b 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -75,6 +75,7 @@ import localeRo from '@angular/common/locales/ro'; import localeRu from '@angular/common/locales/ru'; import localeEs from '@angular/common/locales/es'; import localePl from '@angular/common/locales/pl'; +import localeSv from '@angular/common/locales/sv'; registerLocaleData(localeFr) @@ -88,6 +89,7 @@ registerLocaleData(localeRo) registerLocaleData(localeRu) registerLocaleData(localeEs) registerLocaleData(localePl) +registerLocaleData(localeSv) @NgModule({ declarations: [ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index c8c10e930..17af29558 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -98,7 +98,8 @@ export class SettingsService { {code: "ro-ro", name: $localize`Romanian`, englishName: "Romanian", dateInputFormat: "dd.mm.yyyy"}, {code: "ru-ru", name: $localize`Russian`, englishName: "Russian", dateInputFormat: "dd.mm.yyyy"}, {code: "es-es", name: $localize`Spanish`, englishName: "Spanish", dateInputFormat: "dd/mm/yyyy"}, - {code: "pl-pl", name: $localize`Polish`, englishName: "Polish", dateInputFormat: "dd.mm.yyyy"} + {code: "pl-pl", name: $localize`Polish`, englishName: "Polish", dateInputFormat: "dd.mm.yyyy"}, + {code: "sv-se", name: $localize`Swedish`, englishName: "Swedish", dateInputFormat: "yyyy-mm-dd"} ] } diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 6022286f0..995fbe490 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\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" @@ -416,54 +416,58 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 6a50a99a3..26a4d5621 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -308,7 +308,8 @@ LANGUAGES = [ ("ro-ro", _("Romanian")), ("ru-ru", _("Russian")), ("es-es", _("Spanish")), - ("pl-pl", _("Polish")) + ("pl-pl", _("Polish")), + ("sv-se", _("Swedish")), ] LOCALE_PATHS = [ From d9740e8837b3fd7bfa92f994e5bd7ceb2e4ce086 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 5 May 2021 14:49:08 +0200 Subject: [PATCH 755/898] New Crowdin updates (#986) --- src-ui/src/locale/messages.cs_CZ.xlf | 10 +++++++- src-ui/src/locale/messages.de_DE.xlf | 10 +++++++- src-ui/src/locale/messages.en_GB.xlf | 10 +++++++- src-ui/src/locale/messages.es_ES.xlf | 10 +++++++- src-ui/src/locale/messages.fr_FR.xlf | 10 +++++++- src-ui/src/locale/messages.hu_HU.xlf | 10 +++++++- src-ui/src/locale/messages.it_IT.xlf | 10 +++++++- src-ui/src/locale/messages.nl_NL.xlf | 10 +++++++- src-ui/src/locale/messages.pl_PL.xlf | 10 +++++++- src-ui/src/locale/messages.pt_BR.xlf | 10 +++++++- src-ui/src/locale/messages.pt_PT.xlf | 10 +++++++- src-ui/src/locale/messages.ro_RO.xlf | 14 ++++++++--- src-ui/src/locale/messages.ru_RU.xlf | 10 +++++++- src-ui/src/locale/messages.sv_SE.xlf | 10 +++++++- src-ui/src/locale/messages.xh_ZA.xlf | 10 +++++++- src-ui/src/locale/messages.zh_CN.xlf | 10 +++++++- src/locale/cs_CZ/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/de_DE/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/en_GB/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/es_ES/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/fr_FR/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/hu_HU/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/it_IT/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/nl_NL/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/pl_PL/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/pt_BR/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/pt_PT/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/ro_RO/LC_MESSAGES/django.po | 34 ++++++++++++++------------ src/locale/ru_RU/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/sv_SE/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/xh_ZA/LC_MESSAGES/django.po | 32 +++++++++++++----------- src/locale/zh_CN/LC_MESSAGES/django.po | 32 +++++++++++++----------- 32 files changed, 435 insertions(+), 243 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index f678176a6..040222ab6 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="needs-translation">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 5de1dd342..037f719b9 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polnisch</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="translated">Schwedisch</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index de6174202..683104675 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 85ca0ec98..cc1ec5551 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="needs-translation">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 38f9474f3..ed258cf80 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polonais</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 2d419f0c0..3f7aa2917 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="needs-translation">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index def5dcec1..8954dce8d 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polacco</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="translated">Svedese</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 97b7c020b..40e0d6b9a 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Pools</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index daecaef1d..5252a2c96 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polski</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index f68d7a583..94f963e3a 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="needs-translation">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 2203451e6..afbf195ac 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polaco</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 6134a74d9..95d6cce54 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1855,7 +1855,7 @@ <context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context> <context context-type="linenumber">1</context> </context-group> - <target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> + <target state="translated">Se caută documentul cu asn <x id="INTERPOLATION" equiv-text="{{asn}}"/></target> </trans-unit> <trans-unit id="2807800733729323332" datatype="html"> <source>Yes</source> @@ -1975,13 +1975,21 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">101</context> </context-group> - <target state="needs-translation">Polish</target> + <target state="translated">Poloneză</target> + </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="translated">Suedeză</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 585ba859a..2a421d418 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="needs-translation">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.sv_SE.xlf b/src-ui/src/locale/messages.sv_SE.xlf index 82cce8f4f..b0cc5889b 100644 --- a/src-ui/src/locale/messages.sv_SE.xlf +++ b/src-ui/src/locale/messages.sv_SE.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="translated">Polska</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="translated">ISO 8601</target> </trans-unit> diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index e287bf805..9cca7f5be 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1977,11 +1977,19 @@ </context-group> <target>crwdns3442:0crwdne3442:0</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target>crwdns3446:0crwdne3446:0</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target>crwdns3322:0crwdne3322:0</target> </trans-unit> diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index a640ee859..37d0979d8 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1977,11 +1977,19 @@ </context-group> <target state="needs-translation">Polish</target> </trans-unit> + <trans-unit id="499386805970351976" datatype="html"> + <source>Swedish</source> + <context-group purpose="location"> + <context context-type="sourcefile">src/app/services/settings.service.ts</context> + <context context-type="linenumber">102</context> + </context-group> + <target state="needs-translation">Swedish</target> + </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> <context-group purpose="location"> <context context-type="sourcefile">src/app/services/settings.service.ts</context> - <context context-type="linenumber">106</context> + <context context-type="linenumber">107</context> </context-group> <target state="needs-translation">ISO 8601</target> </trans-unit> diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index a77087cfb..b6402acb6 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:52\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -412,54 +412,58 @@ msgstr "Heslo" msgid "Sign in" msgstr "Přihlásit se" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Němčina" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Holandština" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Francouzština" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index f4b90232e..d55d5103b 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 19:51\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 23:04\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -412,54 +412,58 @@ msgstr "Kennwort" msgid "Sign in" msgstr "Anmelden" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Englisch (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Englisch (UK)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Niederländisch" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Französisch" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portugiesisch" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italienisch" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Rumänisch" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Russisch" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Spanisch" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polnisch" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "Schwedisch" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 859156d1e..c28b71983 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-05-02 17:00\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -412,54 +412,58 @@ msgstr "Password" msgid "Sign in" msgstr "Sign in" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "English (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "German" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Dutch" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "French" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portuguese" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Romanian" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Russian" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Spanish" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polish" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index f82e654ef..f334c9cb8 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:52\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -412,54 +412,58 @@ msgstr "Contraseña" msgid "Sign in" msgstr "Iniciar sesión" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Inglés (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Inglés (Gran Bretaña)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Alemán" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Alemán" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Francés" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugués (Brasil)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Rumano" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Ruso" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Español" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng Administración" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index dd2c506f4..d5015cb12 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 13:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:52\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -412,54 +412,58 @@ msgstr "Mot de passe" msgid "Sign in" msgstr "S'identifier" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Anglais (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Anglais (GB)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Allemand" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Néerlandais" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Français" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portugais" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italien" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Roumain" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Russe" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Espagnol" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polonais" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index 8a496c723..93f1d1da2 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:52\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -412,54 +412,58 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Angol (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Német" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index e0ce2596f..92bbfb07a 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 18:50\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-05 08:19\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -412,54 +412,58 @@ msgstr "Password" msgid "Sign in" msgstr "Accedi" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Inglese (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Inglese (GB)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Tedesco" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Olandese" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Francese" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portoghese" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Rumeno" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Russo" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Spagnolo" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polacco" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "Svedese" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 0c9154f1e..b17cbeec7 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-18 13:19\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -412,54 +412,58 @@ msgstr "Wachtwoord" msgid "Sign in" msgstr "Aanmelden" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Engels (US)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Engels (Brits)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Duits" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Nederlands" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Frans" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portugees" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italiaans" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Roemeens" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Russisch" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Spaans" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Pools" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po index 7e5bf130f..ccf85eaae 100644 --- a/src/locale/pl_PL/LC_MESSAGES/django.po +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 14:46\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -412,54 +412,58 @@ msgstr "Hasło" msgid "Sign in" msgstr "Zaloguj się" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Angielski (USA)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Angielski (Wielka Brytania)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Niemiecki" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Holenderski" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Francuski" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugalski (Brazylia)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portugalski" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Włoski" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Rumuński" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Rosyjski" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Hiszpański" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polski" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administracja Paperless-ng" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 2e07540a1..1b5b43165 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -412,54 +412,58 @@ msgstr "Senha" msgid "Sign in" msgstr "Entrar" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Inglês (GB)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Alemão" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Holandês" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Francês" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Romeno" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index 750342a1f..e170be6a6 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 21:56\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -412,54 +412,58 @@ msgstr "Palavra-passe" msgid "Sign in" msgstr "Iniciar sessão" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Nederlandse" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Français" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Português" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Romeno" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Russo" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Espanhol" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polaco" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 4c2bd62d6..8aefb8f0b 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-05-04 02:27\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 23:04\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -412,53 +412,57 @@ msgstr "Parolă" msgid "Sign in" msgstr "Conectare" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Engleză (Americană)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Engleză (Britanică)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Germană" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Olandeză" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Franceză" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugheză (Brazilia)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portugheză" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italiană" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Română" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Rusă" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Spaniolă" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" -msgstr "" +msgstr "Poloneză" + +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "Suedeză" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index a33c8d4a4..56a7d5b96 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -412,54 +412,58 @@ msgstr "Пароль" msgid "Sign in" msgstr "Вход" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Английский (США)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Английский (Великобритании)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Немецкий" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Датский" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Французский" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Португальский" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Romanian" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Русский" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Испанский" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Администрирование Paperless-ng" diff --git a/src/locale/sv_SE/LC_MESSAGES/django.po b/src/locale/sv_SE/LC_MESSAGES/django.po index bcc092cdb..cb21a90ca 100644 --- a/src/locale/sv_SE/LC_MESSAGES/django.po +++ b/src/locale/sv_SE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-05-04 13:14\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:52\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -412,54 +412,58 @@ msgstr "Lösenord" msgid "Sign in" msgstr "Logga in" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "Engelska (USA)" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "Engelska (GB)" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "Tyska" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "Holländska" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "Franska" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "Portugisiska (Brasilien)" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "Portugisiska" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "Italienska" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "Rumänska" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "Ryska" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "Spanska" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "Polska" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index b30b40a0e..b706261ad 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:46\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -412,54 +412,58 @@ msgstr "crwdns2712:0crwdne2712:0" msgid "Sign in" msgstr "crwdns2714:0crwdne2714:0" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "crwdns2716:0crwdne2716:0" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "crwdns2718:0crwdne2718:0" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "crwdns2720:0crwdne2720:0" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "crwdns2722:0crwdne2722:0" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "crwdns2724:0crwdne2724:0" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "crwdns2726:0crwdne2726:0" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "crwdns3424:0crwdne3424:0" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "crwdns2728:0crwdne2728:0" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "crwdns2730:0crwdne2730:0" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "crwdns3414:0crwdne3414:0" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "crwdns3420:0crwdne3420:0" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "crwdns3444:0crwdne3444:0" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "crwdns3448:0crwdne3448:0" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "crwdns2732:0crwdne2732:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 356e1ab19..01d9b234b 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 13:41+0200\n" -"PO-Revision-Date: 2021-04-17 11:47\n" +"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"PO-Revision-Date: 2021-05-04 21:51\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -412,54 +412,58 @@ msgstr "" msgid "Sign in" msgstr "" -#: paperless/settings.py:298 +#: paperless/settings.py:300 msgid "English (US)" msgstr "" -#: paperless/settings.py:299 +#: paperless/settings.py:301 msgid "English (GB)" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:302 msgid "German" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:303 msgid "Dutch" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:304 msgid "French" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:305 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:306 msgid "Portuguese" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:307 msgid "Italian" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:308 msgid "Romanian" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:309 msgid "Russian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:310 msgid "Spanish" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:311 msgid "Polish" msgstr "" +#: paperless/settings.py:312 +msgid "Swedish" +msgstr "" + #: paperless/urls.py:113 msgid "Paperless-ng administration" msgstr "" From 9b2b091bb45dac4bada7e491ffb5d728bb68e6cc Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 5 May 2021 22:36:22 +0200 Subject: [PATCH 756/898] New Crowdin updates (#988) * New translations django.po (French) [ci skip] * New translations messages.xlf (French) [ci skip] * New translations django.po (Portuguese) [ci skip] * New translations messages.xlf (Portuguese) [ci skip] --- src-ui/src/locale/messages.fr_FR.xlf | 2 +- src-ui/src/locale/messages.pt_PT.xlf | 2 +- src/locale/fr_FR/LC_MESSAGES/django.po | 4 ++-- src/locale/pt_PT/LC_MESSAGES/django.po | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index ed258cf80..5f23da083 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1983,7 +1983,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">Swedish</target> + <target state="translated">Suédois</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index afbf195ac..1076712f8 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1983,7 +1983,7 @@ <context context-type="sourcefile">src/app/services/settings.service.ts</context> <context context-type="linenumber">102</context> </context-group> - <target state="needs-translation">Swedish</target> + <target state="translated">Sueco</target> </trans-unit> <trans-unit id="4912706592792948707" datatype="html"> <source>ISO 8601</source> diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index d5015cb12..b9f16187f 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:52\n" +"PO-Revision-Date: 2021-05-05 15:10\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -462,7 +462,7 @@ msgstr "Polonais" #: paperless/settings.py:312 msgid "Swedish" -msgstr "" +msgstr "Suédois" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index e170be6a6..bde26c49b 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"PO-Revision-Date: 2021-05-05 18:07\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -462,7 +462,7 @@ msgstr "Polaco" #: paperless/settings.py:312 msgid "Swedish" -msgstr "" +msgstr "Sueco" #: paperless/urls.py:113 msgid "Paperless-ng administration" From 61a70a228499b74c6f4d7b5ca1ed76a29ec357d5 Mon Sep 17 00:00:00 2001 From: Fabian Ohler <muued@users.noreply.github.com> Date: Thu, 6 May 2021 14:08:49 +0200 Subject: [PATCH 757/898] Update setup.rst use ansible-galaxy to fetch the ansible scripts to have a role called paperless-ng instead of ansible --- docs/setup.rst | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index 98e055a07..f91d0859d 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -485,29 +485,22 @@ Install Paperless using ansible ansible -m ping YourAnsibleTargetHostGoesHere -2. Clone the repository of paperless-ng: +2. Install the latest tag of the ansible role using ansible-galaxy .. code:: sh - git clone https://github.com/jonaswinkler/paperless-ng + ansible-galaxy install git+https://github.com/jonaswinkler/paperless-ng.git,ng-1.4.2 - Checkout the latest release tag: - - .. code:: sh - - cd paperless-ng - git checkout ng-1.0.0 - -3. Create an ansible ``playbook.yml`` in the paperless-ng root directory: +3. Create an ansible ``playbook.yml`` in a directory of your choice: .. code:: yaml - hosts: YourAnsibleTargetHostGoesHere become: yes vars_files: - - ansible/vars.yml + - vars/paperless-ng.yml roles: - - ansible + - paperless-ng Optional: If you also want to use PostgreSQL on the target system, install and add (for example) the `geerlingguy.postgresql <https://github.com/geerlingguy/ansible-role-postgresql>`_ role: @@ -520,10 +513,10 @@ Install Paperless using ansible - hosts: YourAnsibleTargetHostGoesHere become: yes vars_files: - - ansible/vars.yml + - vars/paperless-ng.yml roles: - geerlingguy.postgresql - - ansible + - paperless-ng Optional: If you also want to use a reverse proxy on the target system, install and add (for example) the `geerlingguy.nginx <https://github.com/geerlingguy/ansible-role-nginx>`_ role: @@ -536,13 +529,13 @@ Install Paperless using ansible - hosts: YourAnsibleTargetHostGoesHere become: yes vars_files: - - ansible/vars.yml + - vars/paperless-ng.yml roles: - geerlingguy.postgresql - - ansible + - paperless-ng - geerlingguy.nginx -4. Create ``ansible/vars.yml`` to configure your ansible deployment: +4. Create ``vars/paperless-ng.yml`` to configure your ansible deployment: .. code:: yaml From e5573c82b95fa57d5cdeffd07969211ae3176e83 Mon Sep 17 00:00:00 2001 From: Fabian Ohler <muued@users.noreply.github.com> Date: Thu, 6 May 2021 14:15:12 +0200 Subject: [PATCH 758/898] Mention lacking support for ARM in ansible setup Since the jbig2enc dependency is pulled from a repository that only provides i386 and amd64 packages, the installation will fail on arm hosts. --- docs/setup.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/setup.rst b/docs/setup.rst index 98e055a07..5f294fa76 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -460,6 +460,7 @@ Install Paperless using ansible .. note:: This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts. + Additionally, only i386 or amd64 based hosts are supported right now, i.e. installation on arm hosts will fail. 1. Install ansible 2.7+ on the management node. This may be the target host paperless-ng is being installed on or any remote host which can access the target host. From e0ea22bd0d5e4393e708395ab76629fa25420826 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 7 May 2021 10:50:08 -0700 Subject: [PATCH 759/898] Respect user dark mode setting on login page --- src/documents/static/signin.css | 55 +++++++++++++++++++ .../templates/registration/logged_out.html | 5 +- .../templates/registration/login.html | 5 +- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/documents/static/signin.css b/src/documents/static/signin.css index 7441e0394..981200995 100644 --- a/src/documents/static/signin.css +++ b/src/documents/static/signin.css @@ -42,3 +42,58 @@ body { border-top-left-radius: 0; border-top-right-radius: 0; } + +@media (prefers-color-scheme: dark) { + /* + From theme_dark.scss + $primary-dark-mode: #45973a; + $danger-dark-mode: #b71631; + $bg-dark-mode: #161618; + $bg-dark-mode-accent: #21262d; + $bg-light-dark-mode: #1c1c1f; + $text-color-dark-mode: #abb2bf; + $border-color-dark-mode: #47494f; + */ + body { + background-color: #161618 !important; + color: #abb2bf; + } + + svg.logo .text { + fill: #abb2bf!important; + } + + .form-control:not(.is-invalid):not(.btn) { + border-color: #47494f; + } + + .form-control:not(.btn) { + background-color: #161618; + color: #abb2bf; + } + + .form-control:not(.btn)::placeholder { + color: #abb2bf; + } + + .form-control:not(.btn):focus { + background-color: #1c1c1f !important; + color: #8e97a9 !important; + } + + .btn-primary { + color: #fff; + background-color: #17541f; + border-color: #17541f; + } + + .btn-primary:hover, .btn-primary:focus { + background-color: #0f3614; + border-color: #0c2c10; + } + + .btn-primary:not(:disabled):not(.disabled):active { + background-color: #0c2c10; + border-color: #09220d; + } +} diff --git a/src/documents/templates/registration/logged_out.html b/src/documents/templates/registration/logged_out.html index bf21b95f8..b1446eb72 100644 --- a/src/documents/templates/registration/logged_out.html +++ b/src/documents/templates/registration/logged_out.html @@ -37,7 +37,10 @@ <body class="text-center"> <div class="form-signin"> - <img class="mb-4" src="{% static 'frontend/en-US/assets/logo.svg' %}" alt="" width="300"> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2897.4 896.64" width="300" class="logo mb-4"> + <path class="leaf" d="M730.71,0C616.3,266.24,66.21,299.25,242.24,728.31c2.2,5.5-40.71,63.81-69.31,112.22-6.6-24.21-14.3-50.61-13.2-52.81C302.75,618.29,57.41,522.58,44.21,384-17.4,494-39.4,686.5,146.53,797.62c1.1,0,9.9,41.81,14.3,62.71-4.4,8.8-8.8,17.6-11,24.2-4.4,11,28.6,9.91,28.6,12.11,3.3-1.1,81.41-138.63,83.61-139.73C704.31,655.7,782.42,257.44,730.71,0ZM105.82,544.58C145.43,580.89,211.44,692,155.33,756.91,168.53,727.21,172.93,660.1,105.82,544.58ZM269.74,670C200.43,506.08,404,325.65,505.18,280.54,298.35,465.37,263.14,602.89,269.74,670Z" transform="translate(0)" style="fill:#17541f"/> + <path class="text" style="fill:#000" d="M1169.27,231.44q.7,17.06.71,38.73t-.71,38a112,112,0,0,1-6.76,38A100.16,100.16,0,0,1,1142.25,380a93.87,93.87,0,0,1-33.76,23.46q-20.25,8.54-46.56,8.53h-36.25V597.5q0,9.94,2.85,14.57c1.89,3.08,3.79,4.86,5.68,5.33a10.54,10.54,0,0,0,9.24,0v18.48h-86V617.4q5.68,2.13,8.53,0,3.56-.71,7.1-5.33t3.56-14.57V166q0-10.66-3.56-15.28t-7.1-6q-2.85-1.42-8.53,0V127.66h104.48q26.31,0,46.56,8.53a93.75,93.75,0,0,1,33.76,23.46,101,101,0,0,1,20.26,33.4A111.05,111.05,0,0,1,1169.27,231.44ZM1118.8,215.8q0-18.48-6-32t-14.22-21.32a74.68,74.68,0,0,0-17.06-12.44q-8.88-4.62-15.28-4.62h-40.52V392.79h40.52q6.39,0,15.28-3.56t17.06-12.44a86,86,0,0,0,14.22-21.67q6-12.8,6-32Zm337.63,389.52a27.35,27.35,0,0,1-2.85,11.72,40.58,40.58,0,0,1-8.17,11.38,54.8,54.8,0,0,1-13.5,9.59,40.07,40.07,0,0,1-18.84,4.27,60,60,0,0,1-30.57-7.82q-13.5-7.82-18.48-20.61a56.12,56.12,0,0,1-6.39-16.35q-9.24,19.18-28.08,32a72.42,72.42,0,0,1-41.58,12.8q-28.44,0-49.76-20.61-12.07-10.67-19.9-27.73t-9.24-39.09q-.71-2.13-.71-8.53v-.71a124.43,124.43,0,0,1,4.26-25.23,113.22,113.22,0,0,1,11-26.3,149.46,149.46,0,0,1,17.77-24.88,128.6,128.6,0,0,1,22.39-20.26,17.39,17.39,0,0,0,4.62-3.2,28.53,28.53,0,0,1,5.33-3.91l2.13-1.06,2.14-1.07q12.8-7.81,22.39-14.22t17.41-12.08a97.25,97.25,0,0,0,8.53-6.4c2.84-2.37,5.93-4.73,9.24-7.1a79.43,79.43,0,0,0,12.09-10,36.51,36.51,0,0,0,8.53-13.5q4.26-7.11,4.26-17.06a67.74,67.74,0,0,0-2.13-17.77,49.09,49.09,0,0,0-14.57-27q-11.73-11.37-26-14.93a38.26,38.26,0,0,0-12.08-2.13q-19.9,0-34.12,7.11-9.24,4.26-13.51,9.59t-4.62,10a10.73,10.73,0,0,0,1.78,7.46,12.91,12.91,0,0,0,5.69,4.26,6,6,0,0,0,1.78.71,6.28,6.28,0,0,1,1.77.72,32.21,32.21,0,0,1,15.28,12.43,34,34,0,0,1,6,19.55,32.78,32.78,0,0,1-32.7,32.7,33.53,33.53,0,0,1-24.17-9.6,30.94,30.94,0,0,1-10-23.1,106.83,106.83,0,0,1,3.2-25.23,84.65,84.65,0,0,1,9.6-23.81q13.5-19.91,32.34-28.79a96.24,96.24,0,0,1,41.58-8.89,93.82,93.82,0,0,1,33.76,6.4,96.18,96.18,0,0,1,29.86,18.13,103.38,103.38,0,0,1,22,28.07q8.88,16.35,8.88,37.68v209q0,12.79.36,16.7t.36,5.34h0q0,9.24,5.68,14.92a18.45,18.45,0,0,0,13.51,5.69q9.24,0,14.92-5.33a20.62,20.62,0,0,0,6.4-13.86Zm-111.6-17.77a52.58,52.58,0,0,0,6.76-21.33q1.07-11.37,1.06-21.32V413.4a63.92,63.92,0,0,1-6,5.33,74,74,0,0,0-6.75,6q-20.62,14.93-35.19,27.37a164.06,164.06,0,0,0-24.52,25.59,113,113,0,0,0-15.64,28.07,121,121,0,0,0-7.11,34.12v10.67q.72,27,14.58,42.29t39.44,15.28a38.56,38.56,0,0,0,20.62-5.69q9.24-6.39,12.79-14.92Zm244.52-304.23q40.51.72,64.68,24.53t24.17,75.7V542.77q0,51.88-24.17,75.34T1589.35,643h-2.13a80.27,80.27,0,0,1-22-2.84h-.71a.63.63,0,0,1-.71-.71,91.74,91.74,0,0,1-28.43-15.64l-6.76-6.76-5.33-7.46v118q0,10,2.85,14.58c1.89,3.08,3.79,5.09,5.68,6a10.54,10.54,0,0,0,9.24,0V766h-86V748.19q5.68,2.13,8.53,0,3.56-1.43,6.75-6t3.2-14.58V326.68q0-9.94-3.2-14.57t-6.75-6q-2.85-1.43-8.53,0V289h68.23v27.72a68.68,68.68,0,0,1,12.09-14.21,75.62,75.62,0,0,1,28.43-15.64.63.63,0,0,1,.71-.71h.71a90.55,90.55,0,0,1,22-2.85Zm35.54,84.59v-.71q-.72-36.26-8.89-51.18t-26.65-16.35a63.12,63.12,0,0,0-24.17,3.2,48,48,0,0,0-19.9,13.15q-8.54,9.24-14.22,24.88t-7.82,37V548.45q2.13,22,7.82,37.32t14.22,24.17a53.23,53.23,0,0,0,19.9,13.15,58.92,58.92,0,0,0,24.17,3.55q18.48-1.42,26.65-16.35t8.89-51.18V367.91Zm179.83-84.59a105.36,105.36,0,0,1,33.41,5.69,86.38,86.38,0,0,1,30.56,17.77,88.06,88.06,0,0,1,21.68,30.57q8.18,18.48,8.18,44.06v90.28H1757.1V544.9q0,44.07,15.28,62.9t38,18.13a113.94,113.94,0,0,0,26.65-4.62,54.83,54.83,0,0,0,22.75-13.15q9.59-9.24,16-26.3t6.4-44.78h16.35V547a153.56,153.56,0,0,1-4.27,36.61A72,72,0,0,1,1852,634.1q-16.71,7.47-40.87,8.18a102.25,102.25,0,0,1-34.83-6.4,96,96,0,0,1-32-19.19,108.91,108.91,0,0,1-23.45-30.21q-9.24-17.41-9.25-39.45v-16.7s-.11-9.12-.35-27.37-.36-29.5-.36-33.76-.11-16-.35-35.19-.36-29.49-.36-30.92v-21q0-25.59,8.89-44.43t22-30.56A90.72,90.72,0,0,1,1771,289.37a98.55,98.55,0,0,1,33.76-6.05Zm46.2,169.89V397.05q0-27-3.55-45.13t-9.6-29.15q-6-11-14.57-15.28a42.36,42.36,0,0,0-19.19-4.26q-22.76,0-34.48,19.9t-11.72,73.92v56.16Zm279.35-113.73a42.31,42.31,0,0,0,.71,5.68,17.92,17.92,0,0,1,0,7.11q-.72,14.93-10.31,24.52a33,33,0,0,1-46.91-.35,33.52,33.52,0,0,1-9.6-24.17q0-17.76,13.51-27a8.33,8.33,0,0,0,1.77-1.06l1.07-1.07a16.22,16.22,0,0,0,6.4-10.31q1.41-6.75-8.53-11.73a26.26,26.26,0,0,0-12.8-3.55q-21.32-1.43-37.67,12.8t-22,49.75V597.5q0,9.94,2.84,14.57t5.69,5.33a10.54,10.54,0,0,0,9.24,0v18.48h-86V617.4q5.68,2.13,8.53,0,3.55-.71,7.11-5.33t3.55-14.57V326.68q0-9.94-3.55-14.57t-7.11-6q-2.85-1.43-8.53,0V288.3h68.24v29.14q5-7.81,9.95-14.57a48.44,48.44,0,0,1,11.72-11.37,59.79,59.79,0,0,1,15.64-7.46q8.89-2.85,22.39-2.85,20.61,0,38.39,14.93t26.3,43.36Zm95.95,258q0,9.94,3.2,14.57c2.13,3.08,4.15,4.86,6,5.33q3.55,2.13,9.24,0v18.48h-86V617.4q5.68,2.13,10,0,2.13-.71,5.69-5.33t3.55-14.57V166.75q0-10.65-3.55-15.28a28.82,28.82,0,0,0-5.69-6q-4.26-2.13-10,0V128.37h67.52V597.5Zm154.25-314.18a105.25,105.25,0,0,1,33.4,5.69,86.33,86.33,0,0,1,30.57,17.77,88.19,88.19,0,0,1,21.68,30.57q8.18,18.48,8.17,44.06v90.28H2332.84V544.9q0,44.07,15.29,62.9t38,18.13a113.93,113.93,0,0,0,26.66-4.62,54.79,54.79,0,0,0,22.74-13.15q9.6-9.24,16-26.3t6.39-44.78h16.35V547a153.56,153.56,0,0,1-4.26,36.61,72,72,0,0,1-42.29,50.46q-16.71,7.47-40.88,8.18a102.24,102.24,0,0,1-34.82-6.4,96,96,0,0,1-32-19.19,108.94,108.94,0,0,1-23.46-30.21q-9.24-17.41-9.24-39.45v-16.7s-.12-9.12-.35-27.37-.36-29.5-.36-33.76-.12-16-.35-35.19-.36-29.49-.36-30.92v-21q0-25.59,8.89-44.43t22-30.56a90.78,90.78,0,0,1,29.85-17.77,98.6,98.6,0,0,1,33.77-6.05Zm46.2,169.89V397.05q0-27-3.56-45.13t-9.59-29.15q-6-11-14.57-15.28a42.39,42.39,0,0,0-19.19-4.26q-22.76,0-34.48,19.9t-11.73,73.92v56.16Zm213.24,178.41c-.48.47-.83.71-1.07.71s-.59.23-1.06.71l-.71.71c-1,.47-2,1-3.2,1.42s-2.25,1-3.2,1.42q-14.93,6.4-34.83,6.4a48.79,48.79,0,0,1-22-5.33q-10.65-5.34-18.48-8.89t-13.15-3.2q-5.33.36-5.33,10.31h-13.5V550.59h17.06q-1.43,22.74,5,39.09,4.27,14.22,16.71,26.65t37.31,12.44q16.35,0,27-5.68,18.48-9.24,25.24-22A45.92,45.92,0,0,0,2657,574.4q-1.42-13.86-10.31-27.37A126,126,0,0,0,2625,522.15q-8.52-6.39-17.77-13.5t-18.48-14.93q-24.87-19.91-39.45-35.89T2526.89,428a98.76,98.76,0,0,1-10.66-26.3,119.09,119.09,0,0,1-2.84-26.65,106,106,0,0,1,1.06-15.64q1.07-7.11,2.49-12.79a102.69,102.69,0,0,1,7.11-23.46,63,63,0,0,1,14.21-20.26A73.7,73.7,0,0,1,2561,288.3q13.5-5.69,32.7-5.69a53.27,53.27,0,0,1,21.32,4.62q10.66,4.62,19.19,8.53t13.51,3.56q5-.36,5-11h13.51v88.14h-18.48q.7-21.33-5-38.38a67,67,0,0,0-17.41-27Q2612.89,299,2588.73,299q-19.18,0-31.27,8.53-6.4,5-11,14.57a55.84,55.84,0,0,0-5.33,21,66.08,66.08,0,0,0,3.55,24.52q4.26,13.15,17.06,24.53a21.32,21.32,0,0,0,3.91,4.26,26.5,26.5,0,0,0,5.33,3.56,23,23,0,0,1,3.56,2.84l2.84,2.84q7.82,6.41,16,12.8t16.71,12.79a449.06,449.06,0,0,1,33.05,30.92,276.13,276.13,0,0,1,22,25.94,104.57,104.57,0,0,1,13.15,22.75,69,69,0,0,1,5,20.61q7.11,32.7-2.49,55.09t-24.52,35.19h-.71a1.26,1.26,0,0,1-1.43,1.42,11,11,0,0,1-2.84,2.13l-4.26,2.84-4.27,2.13v.72a3.1,3.1,0,0,0-1.42.35,3.12,3.12,0,0,1-1.42.36Zm211.11,0c-.48.47-.83.71-1.07.71s-.59.23-1.07.71l-.71.71c-.94.47-2,1-3.2,1.42s-2.25,1-3.19,1.42Q2826.84,643,2807,643a48.76,48.76,0,0,1-22-5.33q-10.66-5.34-18.48-8.89t-13.15-3.2q-5.33.36-5.33,10.31h-13.51V550.59h17.06q-1.41,22.74,5,39.09,4.26,14.22,16.7,26.65t37.32,12.44q16.35,0,27-5.68,18.48-9.24,25.23-22a45.93,45.93,0,0,0,5.34-26.65q-1.42-13.86-10.31-27.37a126,126,0,0,0-21.68-24.88q-8.53-6.39-17.77-13.5t-18.48-14.93q-24.89-19.91-39.45-35.89T2738,428a98.76,98.76,0,0,1-10.66-26.3,119.08,119.08,0,0,1-2.85-26.65,105.9,105.9,0,0,1,1.07-15.64q1.07-7.11,2.49-12.79a102.69,102.69,0,0,1,7.11-23.46,62.83,62.83,0,0,1,14.21-20.26,73.58,73.58,0,0,1,22.75-14.57q13.5-5.69,32.69-5.69a53.28,53.28,0,0,1,21.33,4.62q10.67,4.62,19.19,8.53t13.5,3.56q5-.36,5-11h13.51v88.14h-18.49q.72-21.33-5-38.38a67,67,0,0,0-17.42-27Q2824,299,2799.84,299q-19.2,0-31.28,8.53-6.39,5-11,14.57a56,56,0,0,0-5.34,21,66.3,66.3,0,0,0,3.56,24.52q4.26,13.15,17.06,24.53a21.32,21.32,0,0,0,3.91,4.26,26.22,26.22,0,0,0,5.33,3.56,22.83,22.83,0,0,1,3.55,2.84l2.85,2.84q7.82,6.41,16,12.8t16.7,12.79a445,445,0,0,1,33.05,30.92,274.85,274.85,0,0,1,22,25.94,105,105,0,0,1,13.15,22.75,68.69,68.69,0,0,1,5,20.61q7.11,32.7-2.48,55.09t-24.53,35.19h-.71a1.26,1.26,0,0,1-1.42,1.42,11.2,11.2,0,0,1-2.84,2.13l-4.27,2.84-4.26,2.13v.72a3.1,3.1,0,0,0-1.42.35,3.15,3.15,0,0,1-1.42.36Z" transform="translate(0)"/> + </svg> <p>{% translate "You have been successfully logged out. Bye!" %}</p> <a href="/">{% translate "Sign in again" %}</a> </div> diff --git a/src/documents/templates/registration/login.html b/src/documents/templates/registration/login.html index ba46d3adf..0f6062eb2 100644 --- a/src/documents/templates/registration/login.html +++ b/src/documents/templates/registration/login.html @@ -38,7 +38,10 @@ <body class="text-center"> <form class="form-signin" method="post"> {% csrf_token %} - <img class="mb-4" src="{% static 'frontend/en-US/assets/logo.svg' %}" alt="" width="300"> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2897.4 896.64" width="300" class="logo mb-4"> + <path class="leaf" d="M730.71,0C616.3,266.24,66.21,299.25,242.24,728.31c2.2,5.5-40.71,63.81-69.31,112.22-6.6-24.21-14.3-50.61-13.2-52.81C302.75,618.29,57.41,522.58,44.21,384-17.4,494-39.4,686.5,146.53,797.62c1.1,0,9.9,41.81,14.3,62.71-4.4,8.8-8.8,17.6-11,24.2-4.4,11,28.6,9.91,28.6,12.11,3.3-1.1,81.41-138.63,83.61-139.73C704.31,655.7,782.42,257.44,730.71,0ZM105.82,544.58C145.43,580.89,211.44,692,155.33,756.91,168.53,727.21,172.93,660.1,105.82,544.58ZM269.74,670C200.43,506.08,404,325.65,505.18,280.54,298.35,465.37,263.14,602.89,269.74,670Z" transform="translate(0)" style="fill:#17541f"/> + <path class="text" style="fill:#000" d="M1169.27,231.44q.7,17.06.71,38.73t-.71,38a112,112,0,0,1-6.76,38A100.16,100.16,0,0,1,1142.25,380a93.87,93.87,0,0,1-33.76,23.46q-20.25,8.54-46.56,8.53h-36.25V597.5q0,9.94,2.85,14.57c1.89,3.08,3.79,4.86,5.68,5.33a10.54,10.54,0,0,0,9.24,0v18.48h-86V617.4q5.68,2.13,8.53,0,3.56-.71,7.1-5.33t3.56-14.57V166q0-10.66-3.56-15.28t-7.1-6q-2.85-1.42-8.53,0V127.66h104.48q26.31,0,46.56,8.53a93.75,93.75,0,0,1,33.76,23.46,101,101,0,0,1,20.26,33.4A111.05,111.05,0,0,1,1169.27,231.44ZM1118.8,215.8q0-18.48-6-32t-14.22-21.32a74.68,74.68,0,0,0-17.06-12.44q-8.88-4.62-15.28-4.62h-40.52V392.79h40.52q6.39,0,15.28-3.56t17.06-12.44a86,86,0,0,0,14.22-21.67q6-12.8,6-32Zm337.63,389.52a27.35,27.35,0,0,1-2.85,11.72,40.58,40.58,0,0,1-8.17,11.38,54.8,54.8,0,0,1-13.5,9.59,40.07,40.07,0,0,1-18.84,4.27,60,60,0,0,1-30.57-7.82q-13.5-7.82-18.48-20.61a56.12,56.12,0,0,1-6.39-16.35q-9.24,19.18-28.08,32a72.42,72.42,0,0,1-41.58,12.8q-28.44,0-49.76-20.61-12.07-10.67-19.9-27.73t-9.24-39.09q-.71-2.13-.71-8.53v-.71a124.43,124.43,0,0,1,4.26-25.23,113.22,113.22,0,0,1,11-26.3,149.46,149.46,0,0,1,17.77-24.88,128.6,128.6,0,0,1,22.39-20.26,17.39,17.39,0,0,0,4.62-3.2,28.53,28.53,0,0,1,5.33-3.91l2.13-1.06,2.14-1.07q12.8-7.81,22.39-14.22t17.41-12.08a97.25,97.25,0,0,0,8.53-6.4c2.84-2.37,5.93-4.73,9.24-7.1a79.43,79.43,0,0,0,12.09-10,36.51,36.51,0,0,0,8.53-13.5q4.26-7.11,4.26-17.06a67.74,67.74,0,0,0-2.13-17.77,49.09,49.09,0,0,0-14.57-27q-11.73-11.37-26-14.93a38.26,38.26,0,0,0-12.08-2.13q-19.9,0-34.12,7.11-9.24,4.26-13.51,9.59t-4.62,10a10.73,10.73,0,0,0,1.78,7.46,12.91,12.91,0,0,0,5.69,4.26,6,6,0,0,0,1.78.71,6.28,6.28,0,0,1,1.77.72,32.21,32.21,0,0,1,15.28,12.43,34,34,0,0,1,6,19.55,32.78,32.78,0,0,1-32.7,32.7,33.53,33.53,0,0,1-24.17-9.6,30.94,30.94,0,0,1-10-23.1,106.83,106.83,0,0,1,3.2-25.23,84.65,84.65,0,0,1,9.6-23.81q13.5-19.91,32.34-28.79a96.24,96.24,0,0,1,41.58-8.89,93.82,93.82,0,0,1,33.76,6.4,96.18,96.18,0,0,1,29.86,18.13,103.38,103.38,0,0,1,22,28.07q8.88,16.35,8.88,37.68v209q0,12.79.36,16.7t.36,5.34h0q0,9.24,5.68,14.92a18.45,18.45,0,0,0,13.51,5.69q9.24,0,14.92-5.33a20.62,20.62,0,0,0,6.4-13.86Zm-111.6-17.77a52.58,52.58,0,0,0,6.76-21.33q1.07-11.37,1.06-21.32V413.4a63.92,63.92,0,0,1-6,5.33,74,74,0,0,0-6.75,6q-20.62,14.93-35.19,27.37a164.06,164.06,0,0,0-24.52,25.59,113,113,0,0,0-15.64,28.07,121,121,0,0,0-7.11,34.12v10.67q.72,27,14.58,42.29t39.44,15.28a38.56,38.56,0,0,0,20.62-5.69q9.24-6.39,12.79-14.92Zm244.52-304.23q40.51.72,64.68,24.53t24.17,75.7V542.77q0,51.88-24.17,75.34T1589.35,643h-2.13a80.27,80.27,0,0,1-22-2.84h-.71a.63.63,0,0,1-.71-.71,91.74,91.74,0,0,1-28.43-15.64l-6.76-6.76-5.33-7.46v118q0,10,2.85,14.58c1.89,3.08,3.79,5.09,5.68,6a10.54,10.54,0,0,0,9.24,0V766h-86V748.19q5.68,2.13,8.53,0,3.56-1.43,6.75-6t3.2-14.58V326.68q0-9.94-3.2-14.57t-6.75-6q-2.85-1.43-8.53,0V289h68.23v27.72a68.68,68.68,0,0,1,12.09-14.21,75.62,75.62,0,0,1,28.43-15.64.63.63,0,0,1,.71-.71h.71a90.55,90.55,0,0,1,22-2.85Zm35.54,84.59v-.71q-.72-36.26-8.89-51.18t-26.65-16.35a63.12,63.12,0,0,0-24.17,3.2,48,48,0,0,0-19.9,13.15q-8.54,9.24-14.22,24.88t-7.82,37V548.45q2.13,22,7.82,37.32t14.22,24.17a53.23,53.23,0,0,0,19.9,13.15,58.92,58.92,0,0,0,24.17,3.55q18.48-1.42,26.65-16.35t8.89-51.18V367.91Zm179.83-84.59a105.36,105.36,0,0,1,33.41,5.69,86.38,86.38,0,0,1,30.56,17.77,88.06,88.06,0,0,1,21.68,30.57q8.18,18.48,8.18,44.06v90.28H1757.1V544.9q0,44.07,15.28,62.9t38,18.13a113.94,113.94,0,0,0,26.65-4.62,54.83,54.83,0,0,0,22.75-13.15q9.59-9.24,16-26.3t6.4-44.78h16.35V547a153.56,153.56,0,0,1-4.27,36.61A72,72,0,0,1,1852,634.1q-16.71,7.47-40.87,8.18a102.25,102.25,0,0,1-34.83-6.4,96,96,0,0,1-32-19.19,108.91,108.91,0,0,1-23.45-30.21q-9.24-17.41-9.25-39.45v-16.7s-.11-9.12-.35-27.37-.36-29.5-.36-33.76-.11-16-.35-35.19-.36-29.49-.36-30.92v-21q0-25.59,8.89-44.43t22-30.56A90.72,90.72,0,0,1,1771,289.37a98.55,98.55,0,0,1,33.76-6.05Zm46.2,169.89V397.05q0-27-3.55-45.13t-9.6-29.15q-6-11-14.57-15.28a42.36,42.36,0,0,0-19.19-4.26q-22.76,0-34.48,19.9t-11.72,73.92v56.16Zm279.35-113.73a42.31,42.31,0,0,0,.71,5.68,17.92,17.92,0,0,1,0,7.11q-.72,14.93-10.31,24.52a33,33,0,0,1-46.91-.35,33.52,33.52,0,0,1-9.6-24.17q0-17.76,13.51-27a8.33,8.33,0,0,0,1.77-1.06l1.07-1.07a16.22,16.22,0,0,0,6.4-10.31q1.41-6.75-8.53-11.73a26.26,26.26,0,0,0-12.8-3.55q-21.32-1.43-37.67,12.8t-22,49.75V597.5q0,9.94,2.84,14.57t5.69,5.33a10.54,10.54,0,0,0,9.24,0v18.48h-86V617.4q5.68,2.13,8.53,0,3.55-.71,7.11-5.33t3.55-14.57V326.68q0-9.94-3.55-14.57t-7.11-6q-2.85-1.43-8.53,0V288.3h68.24v29.14q5-7.81,9.95-14.57a48.44,48.44,0,0,1,11.72-11.37,59.79,59.79,0,0,1,15.64-7.46q8.89-2.85,22.39-2.85,20.61,0,38.39,14.93t26.3,43.36Zm95.95,258q0,9.94,3.2,14.57c2.13,3.08,4.15,4.86,6,5.33q3.55,2.13,9.24,0v18.48h-86V617.4q5.68,2.13,10,0,2.13-.71,5.69-5.33t3.55-14.57V166.75q0-10.65-3.55-15.28a28.82,28.82,0,0,0-5.69-6q-4.26-2.13-10,0V128.37h67.52V597.5Zm154.25-314.18a105.25,105.25,0,0,1,33.4,5.69,86.33,86.33,0,0,1,30.57,17.77,88.19,88.19,0,0,1,21.68,30.57q8.18,18.48,8.17,44.06v90.28H2332.84V544.9q0,44.07,15.29,62.9t38,18.13a113.93,113.93,0,0,0,26.66-4.62,54.79,54.79,0,0,0,22.74-13.15q9.6-9.24,16-26.3t6.39-44.78h16.35V547a153.56,153.56,0,0,1-4.26,36.61,72,72,0,0,1-42.29,50.46q-16.71,7.47-40.88,8.18a102.24,102.24,0,0,1-34.82-6.4,96,96,0,0,1-32-19.19,108.94,108.94,0,0,1-23.46-30.21q-9.24-17.41-9.24-39.45v-16.7s-.12-9.12-.35-27.37-.36-29.5-.36-33.76-.12-16-.35-35.19-.36-29.49-.36-30.92v-21q0-25.59,8.89-44.43t22-30.56a90.78,90.78,0,0,1,29.85-17.77,98.6,98.6,0,0,1,33.77-6.05Zm46.2,169.89V397.05q0-27-3.56-45.13t-9.59-29.15q-6-11-14.57-15.28a42.39,42.39,0,0,0-19.19-4.26q-22.76,0-34.48,19.9t-11.73,73.92v56.16Zm213.24,178.41c-.48.47-.83.71-1.07.71s-.59.23-1.06.71l-.71.71c-1,.47-2,1-3.2,1.42s-2.25,1-3.2,1.42q-14.93,6.4-34.83,6.4a48.79,48.79,0,0,1-22-5.33q-10.65-5.34-18.48-8.89t-13.15-3.2q-5.33.36-5.33,10.31h-13.5V550.59h17.06q-1.43,22.74,5,39.09,4.27,14.22,16.71,26.65t37.31,12.44q16.35,0,27-5.68,18.48-9.24,25.24-22A45.92,45.92,0,0,0,2657,574.4q-1.42-13.86-10.31-27.37A126,126,0,0,0,2625,522.15q-8.52-6.39-17.77-13.5t-18.48-14.93q-24.87-19.91-39.45-35.89T2526.89,428a98.76,98.76,0,0,1-10.66-26.3,119.09,119.09,0,0,1-2.84-26.65,106,106,0,0,1,1.06-15.64q1.07-7.11,2.49-12.79a102.69,102.69,0,0,1,7.11-23.46,63,63,0,0,1,14.21-20.26A73.7,73.7,0,0,1,2561,288.3q13.5-5.69,32.7-5.69a53.27,53.27,0,0,1,21.32,4.62q10.66,4.62,19.19,8.53t13.51,3.56q5-.36,5-11h13.51v88.14h-18.48q.7-21.33-5-38.38a67,67,0,0,0-17.41-27Q2612.89,299,2588.73,299q-19.18,0-31.27,8.53-6.4,5-11,14.57a55.84,55.84,0,0,0-5.33,21,66.08,66.08,0,0,0,3.55,24.52q4.26,13.15,17.06,24.53a21.32,21.32,0,0,0,3.91,4.26,26.5,26.5,0,0,0,5.33,3.56,23,23,0,0,1,3.56,2.84l2.84,2.84q7.82,6.41,16,12.8t16.71,12.79a449.06,449.06,0,0,1,33.05,30.92,276.13,276.13,0,0,1,22,25.94,104.57,104.57,0,0,1,13.15,22.75,69,69,0,0,1,5,20.61q7.11,32.7-2.49,55.09t-24.52,35.19h-.71a1.26,1.26,0,0,1-1.43,1.42,11,11,0,0,1-2.84,2.13l-4.26,2.84-4.27,2.13v.72a3.1,3.1,0,0,0-1.42.35,3.12,3.12,0,0,1-1.42.36Zm211.11,0c-.48.47-.83.71-1.07.71s-.59.23-1.07.71l-.71.71c-.94.47-2,1-3.2,1.42s-2.25,1-3.19,1.42Q2826.84,643,2807,643a48.76,48.76,0,0,1-22-5.33q-10.66-5.34-18.48-8.89t-13.15-3.2q-5.33.36-5.33,10.31h-13.51V550.59h17.06q-1.41,22.74,5,39.09,4.26,14.22,16.7,26.65t37.32,12.44q16.35,0,27-5.68,18.48-9.24,25.23-22a45.93,45.93,0,0,0,5.34-26.65q-1.42-13.86-10.31-27.37a126,126,0,0,0-21.68-24.88q-8.53-6.39-17.77-13.5t-18.48-14.93q-24.89-19.91-39.45-35.89T2738,428a98.76,98.76,0,0,1-10.66-26.3,119.08,119.08,0,0,1-2.85-26.65,105.9,105.9,0,0,1,1.07-15.64q1.07-7.11,2.49-12.79a102.69,102.69,0,0,1,7.11-23.46,62.83,62.83,0,0,1,14.21-20.26,73.58,73.58,0,0,1,22.75-14.57q13.5-5.69,32.69-5.69a53.28,53.28,0,0,1,21.33,4.62q10.67,4.62,19.19,8.53t13.5,3.56q5-.36,5-11h13.51v88.14h-18.49q.72-21.33-5-38.38a67,67,0,0,0-17.42-27Q2824,299,2799.84,299q-19.2,0-31.28,8.53-6.39,5-11,14.57a56,56,0,0,0-5.34,21,66.3,66.3,0,0,0,3.56,24.52q4.26,13.15,17.06,24.53a21.32,21.32,0,0,0,3.91,4.26,26.22,26.22,0,0,0,5.33,3.56,22.83,22.83,0,0,1,3.55,2.84l2.85,2.84q7.82,6.41,16,12.8t16.7,12.79a445,445,0,0,1,33.05,30.92,274.85,274.85,0,0,1,22,25.94,105,105,0,0,1,13.15,22.75,68.69,68.69,0,0,1,5,20.61q7.11,32.7-2.48,55.09t-24.53,35.19h-.71a1.26,1.26,0,0,1-1.42,1.42,11.2,11.2,0,0,1-2.84,2.13l-4.27,2.84-4.26,2.13v.72a3.1,3.1,0,0,0-1.42.35,3.15,3.15,0,0,1-1.42.36Z" transform="translate(0)"/> + </svg> <p>{% translate "Please sign in." %}</p> {% if form.errors %} <div class="alert alert-danger" role="alert"> From b73a00dead4a5bdb36d14c008efcb62a7b26fca2 Mon Sep 17 00:00:00 2001 From: Carl Mercier <carl@carlmercier.com> Date: Fri, 7 May 2021 14:02:11 -0400 Subject: [PATCH 760/898] Tell web crawlers to not index Paperless --- src/documents/templates/index.html | 1 + src/documents/templates/registration/logged_out.html | 1 + src/documents/templates/registration/login.html | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/documents/templates/index.html b/src/documents/templates/index.html index 5a7b8c9ba..c4beea07a 100644 --- a/src/documents/templates/index.html +++ b/src/documents/templates/index.html @@ -12,6 +12,7 @@ <meta name="username" content="{{username}}"> <meta name="full_name" content="{{full_name}}"> <meta name="cookie_prefix" content="{{cookie_prefix}}"> + <meta name="robots" content="noindex,nofollow"> <link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="manifest" href="{% static webmanifest %}"> <link rel="stylesheet" href="{% static styles_css %}"> diff --git a/src/documents/templates/registration/logged_out.html b/src/documents/templates/registration/logged_out.html index bf21b95f8..1e8ab2e78 100644 --- a/src/documents/templates/registration/logged_out.html +++ b/src/documents/templates/registration/logged_out.html @@ -10,6 +10,7 @@ <meta name="description" content=""> <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors"> <meta name="generator" content="Jekyll v4.1.1"> + <meta name="robots" content="noindex,nofollow"> <title>{% translate "Paperless-ng signed out" %} diff --git a/src/documents/templates/registration/login.html b/src/documents/templates/registration/login.html index ba46d3adf..464d90be9 100644 --- a/src/documents/templates/registration/login.html +++ b/src/documents/templates/registration/login.html @@ -10,6 +10,8 @@ + + {% translate "Paperless-ng sign in" %} From bd5c7458dd9188ed659496ca1363585145f33fb2 Mon Sep 17 00:00:00 2001 From: puuu Date: Tue, 11 May 2021 17:25:50 +0900 Subject: [PATCH 761/898] make all links relative --- src-ui/src/app/app.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index 836a6f66a..2b828d3b0 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -18,7 +18,7 @@ export class AppComponent implements OnInit, OnDestroy { constructor (private settings: SettingsService, private consumerStatusService: ConsumerStatusService, private toastService: ToastService, private router: Router) { let anyWindow = (window as any) - anyWindow.pdfWorkerSrc = '/assets/js/pdf.worker.min.js'; + anyWindow.pdfWorkerSrc = 'assets/js/pdf.worker.min.js'; this.settings.updateDarkModeSettings() } From 85cd3ab37251a1a8e44d53ea7497f08c6e17fa6e Mon Sep 17 00:00:00 2001 From: puuu Date: Tue, 11 May 2021 17:28:06 +0900 Subject: [PATCH 762/898] use baseURI for websocket and api calls --- src-ui/src/app/services/consumer-status.service.ts | 2 +- src-ui/src/environments/environment.prod.ts | 7 +++++-- src-ui/src/environments/environment.ts | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index e03282175..4a729b29d 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -125,7 +125,7 @@ export class ConsumerStatusService { connect() { this.disconnect() - this.statusWebSocket = new WebSocket(`${environment.webSocketProtocol}//${environment.webSocketHost}/ws/status/`); + this.statusWebSocket = new WebSocket(`${environment.webSocketProtocol}//${environment.webSocketHost}${environment.webSocketBaseUrl}status/`); this.statusWebSocket.onmessage = (ev) => { let statusMessage: WebsocketConsumerStatusMessage = JSON.parse(ev['data']) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index b60824248..54c32d370 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -1,9 +1,12 @@ +const base_url = new URL(document.baseURI) + export const environment = { production: true, - apiBaseUrl: "/api/", + apiBaseUrl: document.baseURI + "api/", apiVersion: "2", appTitle: "Paperless-ng", version: "1.4.2", webSocketHost: window.location.host, - webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:") + webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:"), + webSocketBaseUrl: base_url.pathname + "ws/", }; diff --git a/src-ui/src/environments/environment.ts b/src-ui/src/environments/environment.ts index 3d981b677..3b8a02e37 100644 --- a/src-ui/src/environments/environment.ts +++ b/src-ui/src/environments/environment.ts @@ -9,7 +9,8 @@ export const environment = { appTitle: "Paperless-ng", version: "DEVELOPMENT", webSocketHost: "localhost:8000", - webSocketProtocol: "ws:" + webSocketProtocol: "ws:", + webSocketBaseUrl: "/ws/", }; /* From d272b7833292445cfd018a9037e19a65f27fc077 Mon Sep 17 00:00:00 2001 From: puuu Date: Fri, 14 May 2021 14:03:42 +0900 Subject: [PATCH 763/898] Introduce ConfigurableWorker to make uvicorn respect FORCE_SCRIPT_NAME --- gunicorn.conf.py | 2 +- src/paperless/workers.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 src/paperless/workers.py diff --git a/gunicorn.conf.py b/gunicorn.conf.py index 995b4fb9d..bcc12490e 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -2,7 +2,7 @@ import os bind = '0.0.0.0:8000' workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 2)) -worker_class = 'uvicorn.workers.UvicornWorker' +worker_class = 'paperless.workers.ConfigurableWorker' timeout = 120 def pre_fork(server, worker): diff --git a/src/paperless/workers.py b/src/paperless/workers.py new file mode 100644 index 000000000..4f2f0802a --- /dev/null +++ b/src/paperless/workers.py @@ -0,0 +1,11 @@ +import os +from uvicorn.workers import UvicornWorker +from django.conf import settings + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "paperless.settings") + + +class ConfigurableWorker(UvicornWorker): + CONFIG_KWARGS = { + "root_path": settings.FORCE_SCRIPT_NAME or "", + } From 225dc0e9dfc4e3328d732b2e25043e7535a5cd47 Mon Sep 17 00:00:00 2001 From: puuu Date: Fri, 14 May 2021 14:20:05 +0900 Subject: [PATCH 764/898] Introduce BASE_URL, make LOGIN_URL and STATIC_URL work with subpath --- src/paperless/settings.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 26a4d5621..0e9ab53f3 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -142,11 +142,13 @@ MIDDLEWARE = [ ROOT_URLCONF = 'paperless.urls' FORCE_SCRIPT_NAME = os.getenv("PAPERLESS_FORCE_SCRIPT_NAME") +BASE_URL = (FORCE_SCRIPT_NAME or "") + "/" +LOGIN_URL = BASE_URL + "accounts/login/" WSGI_APPLICATION = 'paperless.wsgi.application' ASGI_APPLICATION = "paperless.asgi.application" -STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", "/static/") +STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", "static/") # TODO: what is this used for? TEMPLATES = [ From a1241710a1dbcbf0b8e8cf81b2a80dc724418cee Mon Sep 17 00:00:00 2001 From: puuu Date: Fri, 14 May 2021 14:22:35 +0900 Subject: [PATCH 765/898] Make redirections respect root_path or STATIC_URL, name IndexView --- src/paperless/urls.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 7521d49de..eee04af9f 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -9,6 +9,8 @@ from rest_framework.routers import DefaultRouter from django.utils.translation import gettext_lazy as _ +from django.conf import settings + from paperless.consumers import StatusConsumer from documents.views import ( CorrespondentViewSet, @@ -73,31 +75,36 @@ urlpatterns = [ re_path(r"^fetch/", include([ re_path( r"^doc/(?P\d+)$", - RedirectView.as_view(url='/api/documents/%(pk)s/download/'), + RedirectView.as_view(url=settings.BASE_URL + + 'api/documents/%(pk)s/download/'), ), re_path( r"^thumb/(?P\d+)$", - RedirectView.as_view(url='/api/documents/%(pk)s/thumb/'), + RedirectView.as_view(url=settings.BASE_URL + + 'api/documents/%(pk)s/thumb/'), ), re_path( r"^preview/(?P\d+)$", - RedirectView.as_view(url='/api/documents/%(pk)s/preview/'), + RedirectView.as_view(url=settings.BASE_URL + + 'api/documents/%(pk)s/preview/'), ), ])), re_path(r"^push$", csrf_exempt( - RedirectView.as_view(url='/api/documents/post_document/'))), + RedirectView.as_view(url=settings.BASE_URL + + 'api/documents/post_document/'))), # Frontend assets TODO: this is pretty bad, but it works. path('assets/', - RedirectView.as_view(url='/static/frontend/en-US/assets/%(path)s')), + RedirectView.as_view(url=settings.STATIC_URL + + 'frontend/en-US/assets/%(path)s')), # TODO: with localization, this is even worse! :/ # login, logout path('accounts/', include('django.contrib.auth.urls')), # Root of the Frontent - re_path(r".*", login_required(IndexView.as_view())), + re_path(r".*", login_required(IndexView.as_view()), name='base'), ] From be05b0ef2d1c14efde61c616e7bbef0efa107faf Mon Sep 17 00:00:00 2001 From: puuu Date: Fri, 14 May 2021 14:08:02 +0900 Subject: [PATCH 766/898] use {% url %} template to refere to root path --- src/documents/templates/index.html | 2 +- src/documents/templates/registration/logged_out.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/templates/index.html b/src/documents/templates/index.html index 5a7b8c9ba..5c69144de 100644 --- a/src/documents/templates/index.html +++ b/src/documents/templates/index.html @@ -7,7 +7,7 @@ Paperless-ng - + diff --git a/src/documents/templates/registration/logged_out.html b/src/documents/templates/registration/logged_out.html index b1446eb72..64ace025c 100644 --- a/src/documents/templates/registration/logged_out.html +++ b/src/documents/templates/registration/logged_out.html @@ -42,7 +42,7 @@

{% translate "You have been successfully logged out. Bye!" %}

- {% translate "Sign in again" %} + {% translate "Sign in again" %}

From d5afa1ddd87a02d93e8e91bf3590a2a6999bfb44 Mon Sep 17 00:00:00 2001 From: puuu Date: Fri, 14 May 2021 15:39:20 +0900 Subject: [PATCH 767/898] Update documentation about PAPERLESS_FORCE_SCRIPT_NAME --- docs/configuration.rst | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 7502cef40..99721b976 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -154,10 +154,6 @@ PAPERLESS_FORCE_SCRIPT_NAME= To host paperless under a subpath url like example.com/paperless you set this value to /paperless. No trailing slash! - .. note:: - - I don't know if this works in paperless-ng. Probably not. - Defaults to none, which hosts paperless at "/". PAPERLESS_STATIC_URL= From 3d21a479e5057cf7b1234c6bcda524f92e7807ae Mon Sep 17 00:00:00 2001 From: puuu Date: Fri, 14 May 2021 18:14:59 +0900 Subject: [PATCH 768/898] Fix serving static files under root_path --- src/paperless/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 0e9ab53f3..39504fe54 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -148,7 +148,8 @@ LOGIN_URL = BASE_URL + "accounts/login/" WSGI_APPLICATION = 'paperless.wsgi.application' ASGI_APPLICATION = "paperless.asgi.application" -STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", "static/") +STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", BASE_URL + "static/") +WHITENOISE_STATIC_PREFIX = "/static/" # TODO: what is this used for? TEMPLATES = [ From ffca427f594bfbc07b6101604e11cb4d4a6559fd Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Fri, 14 May 2021 13:43:39 +0200 Subject: [PATCH 769/898] fix description of paperless-scheduler.service --- scripts/paperless-scheduler.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/paperless-scheduler.service b/scripts/paperless-scheduler.service index c565d8af4..b1c82a38e 100644 --- a/scripts/paperless-scheduler.service +++ b/scripts/paperless-scheduler.service @@ -1,5 +1,5 @@ [Unit] -Description=Paperless consumer +Description=Paperless scheduler Requires=redis.service [Service] From 271f9001ddcf9babad3ab77f05b17f19218bd89e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 12:15:32 +0200 Subject: [PATCH 770/898] Workaround for all PDFminer.six issues. --- src/paperless_tesseract/parsers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index be8f45e7b..c6cd392d8 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -121,7 +121,12 @@ class RasterisedDocumentParser(DocumentParser): self.log("debug", f"Extracted text from PDF file {pdf_file}") return stripped - except PDFException: + except Exception: + # TODO catch all for various issues with PDFminer.six. + # If PDFminer fails, fall back to OCR. + self.log("warn", + "Error while getting text from PDF document with " + "pdfminer.six", exc_info=True) # probably not a PDF file. return None From a48604f37e752fe1274ee1a1da612c6ca000163a Mon Sep 17 00:00:00 2001 From: Alexander Menk Date: Sat, 15 May 2021 12:26:04 +0200 Subject: [PATCH 771/898] Add print css for document list Allow printing of the document list in a clean way * Hide sidebar, filter * Use full width --- src-ui/src/print.scss | 30 ++++++++++++++++++++++++++++++ src-ui/src/styles.scss | 1 + 2 files changed, 31 insertions(+) create mode 100644 src-ui/src/print.scss diff --git a/src-ui/src/print.scss b/src-ui/src/print.scss new file mode 100644 index 000000000..1b29c5100 --- /dev/null +++ b/src-ui/src/print.scss @@ -0,0 +1,30 @@ +@media print { + #sidebarMenu, .btn-toolbar { + display: none !important + } + + .sticky-top { + display: none; + } + + main, main.ml-sm-auto, main.mx-sm-auto { + margin-left: 0 !important; + margin-right: 0 !important; + } + + main.col-lg-10 { + max-width: 100%; + flex-basis: 100%; + display: block; + } + + .d-none.d-lg-table-cell { // always display ASN on print + display: table-cell !important; + } + + app-document-list table { + thead th:first-child, tbody td:first-child { // hide checkboxes + display: none; + } + } +} diff --git a/src-ui/src/styles.scss b/src-ui/src/styles.scss index 34f575a05..88f5b2665 100644 --- a/src-ui/src/styles.scss +++ b/src-ui/src/styles.scss @@ -1,5 +1,6 @@ @import "theme"; @import "theme_dark"; +@import "print"; @import "node_modules/bootstrap/scss/bootstrap"; @import "~@ng-select/ng-select/themes/default.theme.css"; From 7da4d39bb95604e8d53a12c294d7742023f21897 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 13:58:11 +0200 Subject: [PATCH 772/898] sorting for full text queries --- src/documents/index.py | 59 +++++++++++++++++++++------------ src/documents/tests/test_api.py | 25 ++++++++++++++ 2 files changed, 62 insertions(+), 22 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index 6cd136d80..90f896199 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -7,7 +7,7 @@ from dateutil.parser import isoparse from django.conf import settings from whoosh import highlight, classify, query from whoosh.fields import Schema, TEXT, NUMERIC, KEYWORD, DATETIME, BOOLEAN -from whoosh.highlight import Formatter, get_text, HtmlFormatter +from whoosh.highlight import HtmlFormatter from whoosh.index import create_in, exists_in, open_dir from whoosh.qparser import MultifieldParser from whoosh.qparser.dateparse import DateParserPlugin @@ -147,12 +147,10 @@ def remove_document_from_index(document): class DelayedQuery: - @property - def _query(self): + def _get_query(self): raise NotImplementedError() - @property - def _query_filter(self): + def _get_query_filter(self): criterias = [] for k, v in self.query_params.items(): if k == 'correspondent__id': @@ -185,16 +183,33 @@ class DelayedQuery: else: return None - @property - def _query_sortedby(self): - # if not 'ordering' in self.query_params: - return None, False + def _get_query_sortedby(self): + if not 'ordering' in self.query_params: + return None, False - # o: str = self.query_params['ordering'] - # if o.startswith('-'): - # return o[1:], True - # else: - # return o, False + field: str = self.query_params['ordering'] + + sort_fields_map = { + "created": "created", + "modified": "modified", + "added": "added", + "title": "title", + "correspondent__name": "correspondent", + "document_type__name": "type", + "archive_serial_number": "asn", + "score": None, + } + + if field.startswith('-'): + field = field[1:] + reverse = True + else: + reverse = False + + if field not in sort_fields_map: + return None, False + else: + return sort_fields_map[field], reverse def __init__(self, searcher: Searcher, query_params, page_size): self.searcher = searcher @@ -211,13 +226,13 @@ class DelayedQuery: if item.start in self.saved_results: return self.saved_results[item.start] - q, mask = self._query - sortedby, reverse = self._query_sortedby + q, mask = self._get_query() + sortedby, reverse = self._get_query_sortedby() page: ResultsPage = self.searcher.search_page( q, mask=mask, - filter=self._query_filter, + filter=self._get_query_filter(), pagenum=math.floor(item.start / self.page_size) + 1, pagelen=self.page_size, sortedby=sortedby, @@ -227,7 +242,9 @@ class DelayedQuery: surround=50) page.results.formatter = HtmlFormatter(tagname="span", between=" ... ") - if not self.first_score and len(page.results) > 0: + if (not self.first_score and + len(page.results) > 0 and + sortedby is None): self.first_score = page.results[0].score if self.first_score: @@ -243,8 +260,7 @@ class DelayedQuery: class DelayedFullTextQuery(DelayedQuery): - @property - def _query(self): + def _get_query(self): q_str = self.query_params['query'] qp = MultifieldParser( ["content", "title", "correspondent", "tag", "type"], @@ -261,8 +277,7 @@ class DelayedFullTextQuery(DelayedQuery): class DelayedMoreLikeThisQuery(DelayedQuery): - @property - def _query(self): + def _get_query(self): more_like_doc_id = int(self.query_params['more_like_id']) content = Document.objects.get(id=more_like_doc_id).content diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index cfde28e2d..2f8dc18da 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -471,6 +471,31 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertNotIn(d5.id, search_query("&added__date__lt=" + datetime.datetime(2020, 1, 2).strftime("%Y-%m-%d"))) self.assertIn(d5.id, search_query("&added__date__gt=" + datetime.datetime(2020, 1, 2).strftime("%Y-%m-%d"))) + def test_search_sorting(self): + c1 = Correspondent.objects.create(name="corres Ax") + c2 = Correspondent.objects.create(name="corres Cx") + c3 = Correspondent.objects.create(name="corres Bx") + d1 = Document.objects.create(checksum="1", correspondent=c1, content="test", archive_serial_number=2, title="3") + d2 = Document.objects.create(checksum="2", correspondent=c2, content="test", archive_serial_number=3, title="2") + d3 = Document.objects.create(checksum="3", correspondent=c3, content="test", archive_serial_number=1, title="1") + + with AsyncWriter(index.open_index()) as writer: + for doc in Document.objects.all(): + index.update_document(writer, doc) + + def search_query(q): + r = self.client.get("/api/documents/?query=test" + q) + self.assertEqual(r.status_code, 200) + return [hit['id'] for hit in r.data['results']] + + self.assertListEqual(search_query("&ordering=archive_serial_number"), [d3.id, d1.id, d2.id]) + self.assertListEqual(search_query("&ordering=-archive_serial_number"), [d2.id, d1.id, d3.id]) + self.assertListEqual(search_query("&ordering=title"), [d3.id, d2.id, d1.id]) + self.assertListEqual(search_query("&ordering=-title"), [d1.id, d2.id, d3.id]) + self.assertListEqual(search_query("&ordering=correspondent__name"), [d1.id, d3.id, d2.id]) + self.assertListEqual(search_query("&ordering=-correspondent__name"), [d2.id, d3.id, d1.id]) + + def test_statistics(self): doc1 = Document.objects.create(title="none1", checksum="A") From 7e8ba9f169ba6647d7876ab9a48b5e9ebc3cd92d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 14:59:35 +0200 Subject: [PATCH 773/898] update dependencies --- Pipfile | 2 +- Pipfile.lock | 326 +++++++++++++++++++++++------------------------ requirements.txt | 26 ++-- 3 files changed, 176 insertions(+), 178 deletions(-) diff --git a/Pipfile b/Pipfile index 8a33e577f..5b48d56b8 100644 --- a/Pipfile +++ b/Pipfile @@ -40,7 +40,7 @@ whitenoise = "~=5.2.0" watchdog = "~=1.0.0" whoosh="~=2.7.4" inotifyrecursive = "~=0.3.4" -ocrmypdf = "~=11.6" +ocrmypdf = "~=12.0" tqdm = "*" tika = "*" # TODO: This will sadly also install daphne+dependencies, diff --git a/Pipfile.lock b/Pipfile.lock index cc2ae3124..34d4cffe6 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "6dd5af1c2a4025ca82cf6092121f4571fda57df7c47e028b8c25da20ef7e16cd" + "sha256": "2da6572956d27205c496da2ef5f584a9ba53b5f6b3c8bf1724211dc48bfac7b7" }, "pipfile-spec": 6, "requires": {}, @@ -28,11 +28,11 @@ }, "arrow": { "hashes": [ - "sha256:3515630f11a15c61dcb4cdd245883270dd334c83f3e639824e65a4b79cc48543", - "sha256:399c9c8ae732270e1aa58ead835a79a40d7be8aa109c579898eb41029b5a231d" + "sha256:8cbe6a629b1c54ae11b52d6d9e70890089241958f63bc59467e277e34b7a5378", + "sha256:b8fe13abf3517abab315e09350c903902d1447bd311afbc17547ba1cb3ff5bd8" ], "markers": "python_version >= '3.6'", - "version": "==1.0.3" + "version": "==1.1.0" }, "asgiref": { "hashes": [ @@ -52,11 +52,11 @@ }, "attrs": { "hashes": [ - "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", - "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", + "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.3.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.2.0" }, "autobahn": { "hashes": [ @@ -225,11 +225,11 @@ }, "django": { "hashes": [ - "sha256:0604e84c4fb698a5e53e5857b5aea945b2f19a18f25f10b8748dbdf935788927", - "sha256:21f0f9643722675976004eb683c55d33c05486f94506672df3d6a141546f389d" + "sha256:13ac78dbfd189532cad8f383a27e58e18b3d33f80009ceb476d7fcbfc5dcebd8", + "sha256:7e0a1393d18c16b503663752a8b6790880c5084412618990ce8a81cc908b4962" ], "index": "pypi", - "version": "==3.2" + "version": "==3.2.3" }, "django-cors-headers": { "hashes": [ @@ -241,11 +241,11 @@ }, "django-extensions": { "hashes": [ - "sha256:081828e985485662f62a22340c1506e37989d14b927652079a5b7cd84a82368b", - "sha256:17f85f4dcdd5eea09b8c4f0bad8f0370bf2db6d03e61b431fa7103fee29888de" + "sha256:50de8977794a66a91575dd40f87d5053608f679561731845edbd325ceeb387e3", + "sha256:5f0fea7bf131ca303090352577a9e7f8bfbf5489bd9d9c8aea9401db28db34a0" ], "index": "pypi", - "version": "==3.1.2" + "version": "==3.1.3" }, "django-filter": { "hashes": [ @@ -301,6 +301,7 @@ "gunicorn": { "hashes": [ "sha256:8d737657cdd62f483d482ee65cf9cc6a64d5b2199674f8b174803be9065e5d60", + "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" ], "index": "pypi", @@ -364,22 +365,25 @@ }, "httptools": { "hashes": [ - "sha256:0a4b1b2012b28e68306575ad14ad5e9120b34fccd02a81eb08838d7e3bbb48be", - "sha256:3592e854424ec94bd17dc3e0c96a64e459ec4147e6d53c0a42d0ebcef9cb9c5d", - "sha256:41b573cf33f64a8f8f3400d0a7faf48e1888582b6f6e02b82b9bd4f0bf7497ce", - "sha256:56b6393c6ac7abe632f2294da53f30d279130a92e8ae39d8d14ee2e1b05ad1f2", - "sha256:7f6c82262d3bdde886a29ae0d65d4fae6b3ac6fba763891ddb72e72e1dbe7075", - "sha256:86c6acd66765a934e8730bf0e9dfaac6fdcf2a4334212bd4a0a1c78f16475ca6", - "sha256:96da81e1992be8ac2fd5597bf0283d832287e20cb3cfde8996d2b00356d4e17f", - "sha256:96eb359252aeed57ea5c7b3d79839aaa0382c9d3149f7d24dd7172b1bcecb009", - "sha256:a2719e1d7a84bb131c4f1e0cb79705034b48de6ae486eb5297a139d6a3296dce", - "sha256:ac0aa11e99454b6a66989aa2d44bca41d4e0f968e395a0a8f164b401fefe359a", - "sha256:bc3114b9edbca5a1eb7ae7db698c669eb53eb8afbbebdde116c174925260849c", - "sha256:cb46a65a0ed99c38dfcbf9f5be8be6cf9cb497e527505fefac7cbd38a467f3c6", - "sha256:fa3cd71e31436911a44620473e873a256851e1f53dee56669dae403ba41756a4", - "sha256:fea04e126014169384dee76a153d4573d90d0cbd1d12185da089f73c78390437" + "sha256:07659649fe6b3948b6490825f89abe5eb1cec79ebfaaa0b4bf30f3f33f3c2ba8", + "sha256:08b79e09114e6ab5c3dbf560bba2cb2257ea38cdaeaf99b7cb80d8f92622fcd9", + "sha256:1e35aa179b67086cc600a984924a88589b90793c9c1b260152ca4908786e09df", + "sha256:31629e1f1b89959f8c0927bad12184dc07977dcf71e24f4772934aa490aa199b", + "sha256:7792e70ead1d220142a99dde049fdbeddc66fe822953e085d02cd5155c38cdad", + "sha256:851026bd63ec0af7e7592890d97d15c92b62d9e17094353f19a52c8e2b33710a", + "sha256:8fcca4b7efe353b13a24017211334c57d055a6e132c7adffed13a10d28efca57", + "sha256:9abd788465aa46a0f288bd3a99e53edd184177d6379e2098fd6097bb359ad9d6", + "sha256:aebdf0bd7bf7c90ae6b3be458692bf6e9e5b610b501f9f74c7979015a51db4c4", + "sha256:bda99a5723e7eab355ce57435c70853fc137a65aebf2f1cd4d15d96e2956da7b", + "sha256:c1c63d860749841024951b0a78e4dec6f543d23751ef061d6ab60064c7b8b524", + "sha256:c4111a0a8a00eff1e495d43ea5230aaf64968a48ddba8ea2d5f982efae827404", + "sha256:dce59ee45dd6ee6c434346a5ac527c44014326f560866b4b2f414a692ee1aca8", + "sha256:f759717ca1b2ef498c67ba4169c2b33eecf943a89f5329abcff8b89d153eb500", + "sha256:f9545ff74bdf8a6e013ed18af3e24c656c06b6ca2441074be2f6cc28e24f48de", + "sha256:fb7199b8fb0c50a22e77260bb59017e0c075fa80cb03bb2c8692de76e7bb7fe7", + "sha256:fbf7ecd31c39728f251b1c095fd27c84e4d21f60a1d079a0333472ff3ae59d34" ], - "version": "==0.1.1" + "version": "==0.1.2" }, "humanfriendly": { "hashes": [ @@ -407,18 +411,18 @@ }, "imap-tools": { "hashes": [ - "sha256:00fa5b5046c0437976ad7dd5e45b1847bfd5d14bb858c9b19a5cf2994bba96d9", - "sha256:3b4d0a911bc48ea7c0beac6a15b6f65b6fdf2b066a67cd3536253ec98e401e83" + "sha256:3b15cea943ee84072ed6f3424df138aa1908dcee7d368ad81843e2166b8283e0", + "sha256:e4f47bcea98db7502efae4da973c7dded8b632b57bf4acf1d317742701bfb571" ], "index": "pypi", - "version": "==0.39.0" + "version": "==0.41.0" }, "img2pdf": { "hashes": [ - "sha256:57905015579b1026acf1605aa95859cd79b051fa1c35485573d165526fc9dbb5", - "sha256:eaee690ab8403dd1a9cb4db10afee41dd3e6c7ed63bdace02a0121f9feadb0c9" + "sha256:38a1229ca84b211d7782d1d65ad7251a9781bf24f6f6497c738c755fcfed5552", + "sha256:e7eb85dc87062e308066f2b0a9dbfb3c5c0bd306dec0cf9130e3836c0547253a" ], - "version": "==0.4.0" + "version": "==0.4.1" }, "incremental": { "hashes": [ @@ -453,12 +457,12 @@ }, "langdetect": { "hashes": [ - "sha256:363795ea005f1243c958e953245dac5d814fabdc025c9afa91588c5fa6b2fa83", - "sha256:ae53a024643df713274c297c0795dbfb5a16b329902f8e543e7b2d7d45f699e4", - "sha256:f37495e63607865e47deed08d78f7f8e58172658216ff954b2f14671bcd87740" + "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a", + "sha256:87963db181db734abf00b1c463df5cadb3f9edad8efb334d3e52d5ad008d9cc7", + "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0" ], "index": "pypi", - "version": "==1.0.8" + "version": "==1.0.9" }, "lxml": { "hashes": [ @@ -466,18 +470,24 @@ "sha256:0fbcf5565ac01dff87cbfc0ff323515c823081c5777a9fc7703ff58388c258c3", "sha256:122fba10466c7bd4178b07dba427aa516286b846b2cbd6f6169141917283aae2", "sha256:1822d16e5ac9061749955d099ff50c6cbc068f8cbfde28dfbeea845f7fbe6e09", + "sha256:1b38116b6e628118dea5b2186ee6820ab138dbb1e24a13e478490c7db2f326ae", "sha256:1b7584d421d254ab86d4f0b13ec662a9014397678a7c4265a02a6d7c2b18a75f", "sha256:26e761ab5b07adf5f555ee82fb4bfc35bf93750499c6c7614bd64d12aaa67927", "sha256:289e9ca1a9287f08daaf796d96e06cb2bc2958891d7911ac7cae1c5f9e1e0ee3", "sha256:2a9d50e69aac3ebee695424f7dbd7b8c6d6eb7de2a2eb6b0f6c7db6aa41e02b7", + "sha256:3082c518be8e97324390614dacd041bb1358c882d77108ca1957ba47738d9d59", "sha256:33bb934a044cf32157c12bfcfbb6649807da20aa92c062ef51903415c704704f", "sha256:3439c71103ef0e904ea0a1901611863e51f50b5cd5e8654a151740fde5e1cade", + "sha256:36108c73739985979bf302006527cf8a20515ce444ba916281d1c43938b8bb96", "sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468", "sha256:4289728b5e2000a4ad4ab8da6e1db2e093c63c08bdc0414799ee776a3f78da4b", "sha256:4bff24dfeea62f2e56f5bab929b4428ae6caba2d1eea0c2d6eb618e30a71e6d4", + "sha256:4c61b3a0db43a1607d6264166b230438f85bfed02e8cff20c22e564d0faff354", "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83", "sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04", + "sha256:5c8c163396cc0df3fd151b927e74f6e4acd67160d6c33304e805b84293351d16", "sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791", + "sha256:6f12e1427285008fd32a6025e38e977d44d6382cf28e7201ed10d6c1698d2a9a", "sha256:74f69060f98a70e3654de3021cd8162859e0f30b9e69aed76ef2b7a2e3b84212", "sha256:74f7d8d439b18fa4c385f3f5dfd11144bb87c1da034a466c5b5577d23a1d9b51", "sha256:7610b8c31688f0b1be0ef882889817939490a36d0ee880ea562a4e1399c447a1", @@ -491,10 +501,14 @@ "sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa", "sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106", "sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d", + "sha256:c47ff7e0a36d4efac9fd692cfa33fbd0636674c102e9e8d9b26e1b93a94e7617", "sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4", + "sha256:cdaf11d2bd275bf391b5308f86731e5194a21af45fbaaaf1d9e8147b9160ea92", "sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0", "sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4", + "sha256:d916d31fd85b2f78c76400d625076d9124de3e4bda8b016d25a050cc7d603f24", "sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2", + "sha256:e1cbd3f19a61e27e011e02f9600837b921ac661f0c40560eefb366e4e4fb275e", "sha256:efac139c3f0bf4f0939f9375af4b02c5ad83a622de52d6dfa8e438e8e01d0eb0", "sha256:efd7a09678fd8b53117f6bae4fa3825e0a22b03ef0a932e070c0bdbb3a35e654", "sha256:f2380a6376dfa090227b663f9678150ef27543483055cc327555fb592c5967e2", @@ -582,11 +596,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:329b070959731c277f0df91cfe011dd4da0d6534f23a739a3aa77bdab00fbc2f", - "sha256:b63df1b6bf37f29b41cb07f0328240a235d84c3dffc3a32299c71fa94c92d419" + "sha256:3a757ac8bc4f822052a363c7fdc1e01e01033ae3e3398123990813eb6b3cf031", + "sha256:c18db17e18984f540eaa774245571e3ec63a74f459b6029de561a06a77e78310" ], "index": "pypi", - "version": "==11.7.3" + "version": "==12.0.1" }, "pathvalidate": { "hashes": [ @@ -606,32 +620,32 @@ }, "pikepdf": { "hashes": [ - "sha256:14a93f2b61adc975453dfc9edf3335be704732a8750a009ba3d12913ff043abe", - "sha256:25ba3bf96eae3a7c897db5bf6a60b26ebde1c161145af73a044950901b754bcb", - "sha256:29742273f80e75c48e700c5438636fe78a856e1706e353ea57715732fb75fcd6", - "sha256:3790ed5b9d0db8c8bd28d96cb10b91649179eac04873ed23e6dc474515892cc3", - "sha256:3a76702b12f78abe591a6270756a56225a63a26c5a00aad8bc3ffd8680178ab2", - "sha256:56ce22cd134c96035abf984aa167a16e7c658c3ccc0cd626a7002f911eba7452", - "sha256:578e80adcd4703b752c381517853a074633baa219be4bd36d6752fb742a0f8b4", - "sha256:5b286e9862a21bbe9dfb0da827818f710a303d9b78f821710c37e8059839c7da", - "sha256:6b12c8835f52d07cb68f30d115e1361cd1143f1aa2c70f49ded6d69d9c4fcdd2", - "sha256:6e6dd17783c6cf038b179dcf662982d1cca891a3e30232aec0221cc69821b7f1", - "sha256:7e4e7e53781d85a609bdf899d585a39a69e9eedf2b9ac75261685a1aff0072ea", - "sha256:810488f80a1d93652498222f9d1391d9287b3b842971d7a8878e69a287c2476f", - "sha256:85ab867102d7c2182acf852c61ca60c90790bfbb4a939dc096054d904318ba37", - "sha256:8babd800331978d20d82ed1494868d15f5b953266c2b943a7d34e4826016e0b8", - "sha256:94f20e08cdfcba011440204fd9df381af1c423a9888dfd3287b66d9e7e1421bf", - "sha256:9d4a1cc8da1860d8772e831b03ea05386ae6a805718cd8621de736725d52a901", - "sha256:9f67e2c57413ac8be4eec5344c2bcaeb1a18c59fe348afd589d9b95bd4dfc077", - "sha256:b4c64ddc8fe9b11dc52f81d38076bd560ce97abf4695151d2eab390ae760fcac", - "sha256:b5d4431e77f32fd1edc10d214db89b33f2c7f8ceb7152a6651192ef90945db17", - "sha256:d3a0cf2dcc10cd7a7b877e955cfac7ddee6050860a39375f46218f7f1c02e903", - "sha256:dd551d5ff0e4c95537a366fb2281152c7293e60d60bf6ba909faba7d0ee669ad", - "sha256:dea790ae9809ab0ed0f5e32c938d36441f5ab3e74a884692ce84902e8ed1187b", - "sha256:fe47949abbf9f67416e545b0c61c8e75546f1ad8f4cfbe5ee608824258cdaa3e" + "sha256:087dc8e141dcfa0e76e93227a22f6b9cee000b3837b9e048ba96f389d0ee5d41", + "sha256:1bcf4e45a831b302a0b6ae6cbd41aa6c81f95964b1d61e8da41186a4a779f701", + "sha256:22d6615e742e7320a3a77148f65a8ba3591c054133faf6305a525c439b57cf38", + "sha256:24d51dcc2d73e5d123acab4fef5d611f545ff2ce16c837d85833364d4d2cda45", + "sha256:26a3af4845db89f364d18757978fad39ea852b6e7cae3137000a07c44d292b42", + "sha256:36e9d557ef0505a6ec335faf9b2c93d4d062daa339dd1a6cbcda2a6dc886b38e", + "sha256:417abdc29be8ddedabeb100a728b6525c5e1967ba47a03b9e0a81391efb4feb1", + "sha256:5e71dcefdd889538a289cdaa2bb4559e4477e3f17846ffbdfad54b0e76443cf5", + "sha256:62a6f2e2552bfd1bcd17b5e0e024db9ab7e93db39f43bb4246faff9b01154d47", + "sha256:7a054701104c601d72b5ab8b3025a44b1b400f334ee7259dbd4bb1a2c24dad03", + "sha256:7dcf6545c7deb2f6511a3b9220d56297b4165eeedc2eab785acba698cc9d95c0", + "sha256:82da7b5d5a57e4704f7a81e75324b07b19577a96e06f5c5d8a89b29dec814766", + "sha256:8cdafd18013b17f257655e95bfcb4ef14a7fc84a7334a9877b0532db4b55e3ff", + "sha256:a0ff0291f74ef45dd2a1e1316b7d6464b996351365debbf611a5293cf2ff2562", + "sha256:a2ef88f786aed79da559cd1a6a844f99e258971d64670bfba1efad96ed175fb0", + "sha256:a84bbc7b3f9819c1541913bac2781da40d9506255c1cedb7233f9027ce23db92", + "sha256:b1e0cfb6f5abe4d4863c55b2c9424340e5b44095789ef1368a0de99f8b4f852e", + "sha256:ca8efe77f1f44d3c1c0d738407b87816f1445438aa6873d45e58fdd595e96c98", + "sha256:d0f48252f23c128a3ddde16d98fa6567ac7fbce6792209771183b57c744106e1", + "sha256:e1d988ddf063d6abf3d71e7c5bc46e5690fdcf0b06d7f00fced5d0b908f92267", + "sha256:ec9d853c895693dd55b12ae37056808e192e5e2a8d2486cb30d19a5e7d6ff6a9", + "sha256:fcbb6e37426564ccaf6bb301616700277d426225895b00a64283a95ff648f3b9", + "sha256:ff29a8bd50f47554be7e062b3e1a2b466a7f567e1e49417dc62c3948b28304c7" ], "index": "pypi", - "version": "==2.11.1" + "version": "==2.12.0" }, "pillow": { "hashes": [ @@ -794,11 +808,11 @@ }, "python-dotenv": { "hashes": [ - "sha256:471b782da0af10da1a80341e8438fca5fadeba2881c54360d5fd8d03d03a4f4a", - "sha256:49782a97c9d641e8a09ae1d9af0856cc587c8d2474919342d5104d85be9890b2" + "sha256:00aa34e92d992e9f8383730816359647f358f4a3be1ba45e5a5cefd27ee91544", + "sha256:b1ae5e9643d5ed987fc57cc2583021e38db531946518130777734f9589b3141f" ], "index": "pypi", - "version": "==0.17.0" + "version": "==0.17.1" }, "python-gnupg": { "hashes": [ @@ -849,6 +863,7 @@ "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", + "sha256:8fc87fd1a1d30991d9198a4317e90dfaf3d2963c013608a019e8311568fa08b2", "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", @@ -1032,18 +1047,18 @@ }, "service-identity": { "hashes": [ - "sha256:001c0707759cb3de7e49c078a7c0c9cd12594161d3bf06b9c254fdcb1a60dc36", - "sha256:0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d" + "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34", + "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db" ], - "version": "==18.1.0" + "version": "==21.1.0" }, "six": { "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.15.0" + "version": "==1.16.0" }, "sortedcontainers": { "hashes": [ @@ -1312,19 +1327,19 @@ }, "attrs": { "hashes": [ - "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", - "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", + "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.3.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.2.0" }, "babel": { "hashes": [ - "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5", - "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05" + "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9", + "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.9.0" + "version": "==2.9.1" }, "certifi": { "hashes": [ @@ -1342,6 +1357,9 @@ "version": "==4.0.0" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", @@ -1447,11 +1465,11 @@ }, "faker": { "hashes": [ - "sha256:26c7c3df8d46f1db595a34962f8967021dd90bbd38cc6e27461a3fb16cd413ae", - "sha256:44eb060fad3015690ff3fec6564d7171be393021e820ad1851d96cb968fbfcd4" + "sha256:73562fb99b6046c5d26b8dd98a1437a896f8601c96382d835c656166159f4f59", + "sha256:c6a4a0a1dde71f16d489a3097661a87ae96329dbde4c3ece8a5ccc340441ade1" ], "markers": "python_version >= '3.6'", - "version": "==8.1.0" + "version": "==8.1.4" }, "filelock": { "hashes": [ @@ -1488,72 +1506,52 @@ }, "jinja2": { "hashes": [ - "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", - "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" + "sha256:2f2de5285cf37f33d33ecd4a9080b75c87cd0c1994d5a9c6df17131ea1f049c6", + "sha256:ea8d7dd814ce9df6de6a761ec7f1cac98afe305b8cdc4aaae4e114b8d8ce24c5" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.11.3" + "markers": "python_version >= '3.6'", + "version": "==3.0.0" }, "markupsafe": { "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", - "sha256:19536834abffb3fa155017053c607cb835b2ecc6a3a2554a88043d991dffb736", - "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", - "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", - "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", - "sha256:3d61f15e39611aacd91b7e71d903787da86d9e80896e683c0103fced9add7834", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", - "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:7952deddf24b85c88dab48f6ec366ac6e39d2761b5280f2f9594911e03fcd064", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", - "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", - "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", - "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", - "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", - "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", - "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" + "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95", + "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f", + "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d", + "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc", + "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0", + "sha256:31d4206caf9be06b8e7a85de4df933d159b4877d4fc308ca8192d97faf56a41e", + "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901", + "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66", + "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63", + "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b", + "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5", + "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c", + "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1", + "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05", + "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf", + "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527", + "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb", + "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb", + "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2", + "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730", + "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1", + "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75", + "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b", + "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b", + "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715", + "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b", + "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8", + "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96", + "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348", + "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958", + "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd", + "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6", + "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20", + "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf", + "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.1.1" + "markers": "python_version >= '3.6'", + "version": "==2.0.0" }, "packaging": { "hashes": [ @@ -1589,11 +1587,11 @@ }, "pygments": { "hashes": [ - "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94", - "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8" + "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f", + "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e" ], "markers": "python_version >= '3.5'", - "version": "==2.8.1" + "version": "==2.9.0" }, "pyparsing": { "hashes": [ @@ -1605,19 +1603,19 @@ }, "pytest": { "hashes": [ - "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634", - "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc" + "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b", + "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890" ], "index": "pypi", - "version": "==6.2.3" + "version": "==6.2.4" }, "pytest-cov": { "hashes": [ - "sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7", - "sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da" + "sha256:8535764137fecce504a49c2b742288e3d34bc09eed298ad65963616cc98fd45e", + "sha256:95d4933dcbbacfa377bb60b29801daa30d90c33981ab2a79e9ab4452c165066e" ], "index": "pypi", - "version": "==2.11.1" + "version": "==2.12.0" }, "pytest-django": { "hashes": [ @@ -1685,11 +1683,11 @@ }, "six": { "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.15.0" + "version": "==1.16.0" }, "snowballstemmer": { "hashes": [ @@ -1786,11 +1784,11 @@ }, "tox": { "hashes": [ - "sha256:05a4dbd5e4d3d8269b72b55600f0b0303e2eb47ad5c6fe76d3576f4c58d93661", - "sha256:e007673f3595cede9b17a7c4962389e4305d4a3682a6c5a4159a1453b4f326aa" + "sha256:307a81ddb82bd463971a273f33e9533a24ed22185f27db8ce3386bff27d324e3", + "sha256:b0b5818049a1c1997599d42012a637a33f24c62ab8187223fdd318fa8522637b" ], "index": "pypi", - "version": "==3.23.0" + "version": "==3.23.1" }, "urllib3": { "hashes": [ @@ -1802,11 +1800,11 @@ }, "virtualenv": { "hashes": [ - "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107", - "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c" + "sha256:307a555cf21e1550885c82120eccaf5acedf42978fd362d32ba8410f9593f543", + "sha256:72cf267afc04bf9c86ec932329b7e94db6a0331ae9847576daaa7ca3c86b29a4" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.3" + "version": "==20.4.6" } } } diff --git a/requirements.txt b/requirements.txt index 91e343d51..b0f69256e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,10 +8,10 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 -arrow==1.0.3; python_version >= '3.6' +arrow==1.1.0; python_version >= '3.6' asgiref==3.3.4; python_version >= '3.6' async-timeout==3.0.1; python_full_version >= '3.5.3' -attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +attrs==21.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' autobahn==21.3.1; python_version >= '3.7' automat==20.2.0 blessed==1.18.0 @@ -28,35 +28,35 @@ cryptography==3.4.7 daphne==3.0.2; python_version >= '3.6' dateparser==1.0.0 django-cors-headers==3.7.0 -django-extensions==3.1.2 +django-extensions==3.1.3 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 -django==3.2 +django==3.2.3 djangorestframework==3.12.4 filelock==3.0.12 fuzzywuzzy[speedup]==0.18.0 gunicorn==20.1.0 h11==0.12.0; python_version >= '3.6' hiredis==2.0.0; python_version >= '3.6' -httptools==0.1.1 +httptools==0.1.2 humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.39.0 -img2pdf==0.4.0 +imap-tools==0.41.0 +img2pdf==0.4.1 incremental==21.3.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 joblib==1.0.1; python_version >= '3.6' -langdetect==1.0.8 +langdetect==1.0.9 lxml==4.6.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==11.7.3 +ocrmypdf==12.0.1 pathvalidate==2.4.1 pdfminer.six==20201018 -pikepdf==2.11.1 +pikepdf==2.12.0 pillow==8.2.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.3.0; python_version >= '3' @@ -66,7 +66,7 @@ pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' python-dateutil==2.8.1 -python-dotenv==0.17.0 +python-dotenv==0.17.1 python-gnupg==0.4.7 python-levenshtein==0.12.2 python-magic==0.4.22 @@ -78,8 +78,8 @@ reportlab==3.5.67; python_version >= '2.7' and python_version < '4' requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' scikit-learn==0.24.0 scipy==1.5.4 -service-identity==18.1.0 -six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +service-identity==21.1.0 +six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' sortedcontainers==2.3.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' From 44421ea2f1d70680421d88e102ac80f40cee50d7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 15:00:00 +0200 Subject: [PATCH 774/898] New Crowdin updates (#989) --- src-ui/src/locale/messages.en_GB.xlf | 2 +- src-ui/src/locale/messages.nl_NL.xlf | 2 +- src-ui/src/locale/messages.sv_SE.xlf | 2 +- src/locale/en_GB/LC_MESSAGES/django.po | 4 ++-- src/locale/nl_NL/LC_MESSAGES/django.po | 4 ++-- src/locale/sv_SE/LC_MESSAGES/django.po | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 683104675..6cf95fee1 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1983,7 +1983,7 @@ src/app/services/settings.service.ts 102 - Swedish + Swedish ISO 8601 diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 40e0d6b9a..bca39fe8f 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1983,7 +1983,7 @@ src/app/services/settings.service.ts 102 - Swedish + Zweeds ISO 8601 diff --git a/src-ui/src/locale/messages.sv_SE.xlf b/src-ui/src/locale/messages.sv_SE.xlf index b0cc5889b..6318c4099 100644 --- a/src-ui/src/locale/messages.sv_SE.xlf +++ b/src-ui/src/locale/messages.sv_SE.xlf @@ -1983,7 +1983,7 @@ src/app/services/settings.service.ts 102 - Swedish + Svenska ISO 8601 diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index c28b71983..289ee3f48 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"PO-Revision-Date: 2021-05-05 21:40\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -462,7 +462,7 @@ msgstr "Polish" #: paperless/settings.py:312 msgid "Swedish" -msgstr "" +msgstr "Swedish" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index b17cbeec7..b2ff30e25 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"PO-Revision-Date: 2021-05-06 00:07\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -462,7 +462,7 @@ msgstr "Pools" #: paperless/settings.py:312 msgid "Swedish" -msgstr "" +msgstr "Zweeds" #: paperless/urls.py:113 msgid "Paperless-ng administration" diff --git a/src/locale/sv_SE/LC_MESSAGES/django.po b/src/locale/sv_SE/LC_MESSAGES/django.po index cb21a90ca..54e52d257 100644 --- a/src/locale/sv_SE/LC_MESSAGES/django.po +++ b/src/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:52\n" +"PO-Revision-Date: 2021-05-10 13:35\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -462,7 +462,7 @@ msgstr "Polska" #: paperless/settings.py:312 msgid "Swedish" -msgstr "" +msgstr "Svenska" #: paperless/urls.py:113 msgid "Paperless-ng administration" From 4588e19a9836409f834d2abc8c0c264b802d872c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 15:14:22 +0200 Subject: [PATCH 775/898] fix pycodestyle --- test.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test.py diff --git a/test.py b/test.py new file mode 100644 index 000000000..18a97bacb --- /dev/null +++ b/test.py @@ -0,0 +1,40 @@ +import ocrmypdf +from ocrmypdf import ocr, hookimpl +from ocrmypdf._concurrent import NullProgressBar + + +def get_unified_progress(self, desc, current, total): + steps = ["Scanning contents", "OCR", "PDF/A conversion"] + if desc in steps: + index = steps.index(desc) + return (index / len(steps)) + (current / total) / len(steps) + else: + return 0 + + +class MyProgressBar: + + # __enter__, __exit__ and others removed for simplicity + + def update(self, *args, **kwargs): + pass + # i'd need to call MyOcrClass.progress() here. + + +@hookimpl +def get_progressbar_class(*args, **kwargs): + return MyProgressBar + + +class MyOcrClass: + + def progress(self, current_p, max_p): + # send progress over web sockets, *requires* self reference + pass + + def run(self): + ocrmypdf.ocr("test.pdf", "test_out.pdf", skip_text=True, jobs=1, plugins="test") + + +if __name__ == '__main__': + MyOcrClass().run() From 4f62fc81c6359fa1a4742835eccc4fa6347bd7b0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 17:11:26 +0200 Subject: [PATCH 776/898] disable reverse sorting by score --- src/documents/index.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/documents/index.py b/src/documents/index.py index 90f896199..ce64c4b2f 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -184,7 +184,7 @@ class DelayedQuery: return None def _get_query_sortedby(self): - if not 'ordering' in self.query_params: + if 'ordering' not in self.query_params: return None, False field: str = self.query_params['ordering'] @@ -196,8 +196,7 @@ class DelayedQuery: "title": "title", "correspondent__name": "correspondent", "document_type__name": "type", - "archive_serial_number": "asn", - "score": None, + "archive_serial_number": "asn" } if field.startswith('-'): From 4daab1809dab75f3340c17cd86c2c4bbc726de0f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 17:25:49 +0200 Subject: [PATCH 777/898] only show score when sorting by score --- .../document-card-large.component.html | 2 +- src/documents/index.py | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index cabf4af41..d9132c9aa 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -83,7 +83,7 @@ {{document.created | customDate:'mediumDate'}}
-
+
Score:
diff --git a/src/documents/index.py b/src/documents/index.py index ce64c4b2f..cb302da45 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -246,11 +246,13 @@ class DelayedQuery: sortedby is None): self.first_score = page.results[0].score - if self.first_score: - page.results.top_n = list(map( - lambda hit: (hit[0] / self.first_score, hit[1]), - page.results.top_n - )) + page.results.top_n = list(map( + lambda hit: ( + (hit[0] / self.first_score) if self.first_score else None, + hit[1] + ), + page.results.top_n + )) self.saved_results[item.start] = page From 5218fb6ae794c380a8443af2a9aa2dcdf09bbbf0 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 18:48:39 +0200 Subject: [PATCH 778/898] frontend support for fulltext sorting --- src-ui/messages.xlf | 8 ++++ .../document-list/document-list.component.ts | 6 +-- src-ui/src/app/data/filter-rule.ts | 6 +++ .../services/document-list-view.service.ts | 39 ++++++++++++++++--- .../src/app/services/rest/document.service.ts | 5 +++ 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 68fe2703a..037ef0b17 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1889,6 +1889,14 @@ 23 + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Create new item diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 13a827e97..79adb99d0 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -2,14 +2,14 @@ import { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Subscription } from 'rxjs'; -import { FilterRule } from 'src/app/data/filter-rule'; +import { FilterRule, isFullTextFilterRule } from 'src/app/data/filter-rule'; import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type'; import { PaperlessDocument } from 'src/app/data/paperless-document'; import { PaperlessSavedView } from 'src/app/data/paperless-saved-view'; import { SortableDirective, SortEvent } from 'src/app/directives/sortable.directive'; import { ConsumerStatusService } from 'src/app/services/consumer-status.service'; import { DocumentListViewService } from 'src/app/services/document-list-view.service'; -import { DOCUMENT_SORT_FIELDS } from 'src/app/services/rest/document.service'; +import { DOCUMENT_SORT_FIELDS, DOCUMENT_SORT_FIELDS_FULLTEXT } from 'src/app/services/rest/document.service'; import { SavedViewService } from 'src/app/services/rest/saved-view.service'; import { ToastService } from 'src/app/services/toast.service'; import { FilterEditorComponent } from './filter-editor/filter-editor.component'; @@ -52,7 +52,7 @@ export class DocumentListComponent implements OnInit, OnDestroy { } getSortFields() { - return DOCUMENT_SORT_FIELDS + return isFullTextFilterRule(this.list.filterRules) ? DOCUMENT_SORT_FIELDS_FULLTEXT : DOCUMENT_SORT_FIELDS } onSort(event: SortEvent) { diff --git a/src-ui/src/app/data/filter-rule.ts b/src-ui/src/app/data/filter-rule.ts index 82d8498f3..5a0ed7368 100644 --- a/src-ui/src/app/data/filter-rule.ts +++ b/src-ui/src/app/data/filter-rule.ts @@ -1,3 +1,5 @@ +import { FILTER_FULLTEXT_MORELIKE, FILTER_FULLTEXT_QUERY } from "./filter-rule-type" + export function cloneFilterRules(filterRules: FilterRule[]): FilterRule[] { if (filterRules) { let newRules: FilterRule[] = [] @@ -10,6 +12,10 @@ export function cloneFilterRules(filterRules: FilterRule[]): FilterRule[] { } } +export function isFullTextFilterRule(filterRules: FilterRule[]): boolean { + return filterRules.find(r => r.rule_type == FILTER_FULLTEXT_QUERY || r.rule_type == FILTER_FULLTEXT_MORELIKE) != null +} + export interface FilterRule { rule_type: number value: string diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index aa82190d7..4e1a8aad4 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -1,28 +1,53 @@ import { Injectable } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; -import { cloneFilterRules, FilterRule } from '../data/filter-rule'; -import { FILTER_FULLTEXT_MORELIKE, FILTER_FULLTEXT_QUERY } from '../data/filter-rule-type'; +import { cloneFilterRules, FilterRule, isFullTextFilterRule } from '../data/filter-rule'; import { PaperlessDocument } from '../data/paperless-document'; import { PaperlessSavedView } from '../data/paperless-saved-view'; import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'; import { DocumentService } from './rest/document.service'; import { SettingsService, SETTINGS_KEYS } from './settings.service'; +/** + * Captures the current state of the list view. + */ interface ListViewState { + /** + * Title of the document list view. Either "Documents" (localized) or the name of a saved view. + */ title?: string + /** + * Current paginated list of documents displayed. + */ documents?: PaperlessDocument[] currentPage: number + + /** + * Total amount of documents with the current filter rules. Used to calculate the number of pages. + */ collectionSize: number + /** + * Currently selected sort field. + */ sortField: string + + /** + * True if the list is sorted in reverse. + */ sortReverse: boolean + /** + * Filter rules for the current list view. + */ filterRules: FilterRule[] + /** + * Contains the IDs of all selected documents. + */ selected?: Set } @@ -134,10 +159,10 @@ export class DocumentListViewService { } set filterRules(filterRules: FilterRule[]) { - this.activeListViewState.filterRules = filterRules - if (filterRules.find(r => (r.rule_type == FILTER_FULLTEXT_QUERY || r.rule_type == FILTER_FULLTEXT_MORELIKE))) { - this.activeListViewState.currentPage = 1 + if (!isFullTextFilterRule(filterRules) && this.activeListViewState.sortField == "score") { + this.activeListViewState.sortField = "created" } + this.activeListViewState.filterRules = filterRules this.reload() this.reduceSelectionToFilter() this.saveDocumentListView() @@ -213,6 +238,10 @@ export class DocumentListViewService { this._activeSavedViewId = null this.activeListViewState.filterRules = filterRules this.activeListViewState.currentPage = 1 + if (isFullTextFilterRule(filterRules)) { + this.activeListViewState.sortField = "score" + this.activeListViewState.sortReverse = false + } this.reduceSelectionToFilter() this.saveDocumentListView() if (this.router.url == "/documents") { diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index 712b0492f..c6bc61dc8 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -23,6 +23,11 @@ export const DOCUMENT_SORT_FIELDS = [ { field: 'modified', name: $localize`Modified` } ] +export const DOCUMENT_SORT_FIELDS_FULLTEXT = [ + ...DOCUMENT_SORT_FIELDS, + { field: 'score', name: $localize`:Score is a value returned by the full text search engine and specifies how well a result matches the given query:Search score` } +] + export interface SelectionDataItem { id: number document_count: number From 592d60de40f7d4f515a3d64d8c74fcb04090d732 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 18:53:55 +0200 Subject: [PATCH 779/898] added some missing strings --- src-ui/messages.xlf | 16 +++++++++++++++- .../common/input/select/select.component.html | 2 ++ .../common/input/tags/tags.component.html | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 037ef0b17..4c1dc96cf 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1407,11 +1407,18 @@ 68 + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 @@ -1421,6 +1428,13 @@ 3 + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Show all diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index 0ae3009ea..c9369b212 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -8,6 +8,8 @@ [clearable]="allowNull" [items]="items" [addTag]="allowCreateNew && addItemRef" + addTagText="Add item" + i18n-addTagText bindLabel="name" bindValue="id" (change)="onChange(value)" diff --git a/src-ui/src/app/components/common/input/tags/tags.component.html b/src-ui/src/app/components/common/input/tags/tags.component.html index 72c2cf1a5..a9dd23934 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.html +++ b/src-ui/src/app/components/common/input/tags/tags.component.html @@ -9,6 +9,7 @@ [hideSelected]="true" [addTag]="createTagRef" addTagText="Add tag" + i18n-addTagText (change)="onChange(value)" (search)="onSearch($event)" (focus)="clearLastSearchTerm()" From 505655fd529eb0d8dca3dc3893bd160bb60d2a4b Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 18:58:23 +0200 Subject: [PATCH 780/898] add translation hint --- src-ui/messages.xlf | 1 + .../app/components/common/input/select/select.component.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 4c1dc96cf..a733dd809 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1413,6 +1413,7 @@ src/app/components/common/input/select/select.component.html 11 + Used for both types and correspondents Suggestions: diff --git a/src-ui/src/app/components/common/input/select/select.component.html b/src-ui/src/app/components/common/input/select/select.component.html index c9369b212..af4285f62 100644 --- a/src-ui/src/app/components/common/input/select/select.component.html +++ b/src-ui/src/app/components/common/input/select/select.component.html @@ -9,7 +9,7 @@ [items]="items" [addTag]="allowCreateNew && addItemRef" addTagText="Add item" - i18n-addTagText + i18n-addTagText="Used for both types and correspondents" bindLabel="name" bindValue="id" (change)="onChange(value)" From 146ae5b4ebd7835748c72135cf2f76588c1a1b5f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 19:21:15 +0200 Subject: [PATCH 781/898] changelog and version bump --- docs/changelog.rst | 19 +++++++++++++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 9acfed57e..10f99e4b5 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,23 @@ Changelog ********* +paperless-ng 1.4.3 +################## + +* Additions and changes + + * Added Swedish locale. + * `Stéphane Brunner`_ added an option to disable the progress bars of all management commands. + * `Jo Vandeginste`_ added support for RTF documents to the Apache TIKA parser. + * `Michael Shamoon`_ added dark mode for the login and logout pages. + * `Alexander Menk`_ added additional stylesheets for printing. You can now print any page of paperless and the print result will hide the page header, sidebar, and action buttons. + * Added support for sorting when using full text search. + +* Fixes + + * `puuu`_ fixed ``PAPERLESS_FORCE_SCRIPT_NAME``. You can now host paperless on sub paths such as ``https://localhost:8000/paperless/``. + * Fixed an issue with the document consumer crashing on certain documents due to issues with pdfminer.six. This library is used for PDF text extraction. + paperless-ng 1.4.2 ################## @@ -1366,6 +1383,8 @@ bulk of the work on this big change. * Initial release +.. _Alexander Menk: https://github.com/amenk +.. _puuu: https://github.com/puuu .. _WhiteHatTux: https://github.com/WhiteHatTux .. _Chris Nagy: https://github.com/what-name .. _sbrl: https://github.com/sbrl diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 54c32d370..01ab0dd6c 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + "api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.4.2", + version: "1.4.3", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:"), webSocketBaseUrl: base_url.pathname + "ws/", diff --git a/src/paperless/version.py b/src/paperless/version.py index ffb22f305..dc7411505 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 4, 2) +__version__ = (1, 4, 3) From 1b880f36407bdc185727190d104617d07a02c321 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 15 May 2021 21:14:03 +0200 Subject: [PATCH 782/898] New Crowdin updates (#1022) --- src-ui/src/locale/messages.cs_CZ.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.de_DE.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.en_GB.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.es_ES.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.fr_FR.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.hu_HU.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.it_IT.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.nl_NL.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.pl_PL.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.pt_BR.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.pt_PT.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.ro_RO.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.ru_RU.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.sv_SE.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.xh_ZA.xlf | 28 +++++++++++++++++++++++++++- src-ui/src/locale/messages.zh_CN.xlf | 28 +++++++++++++++++++++++++++- 16 files changed, 432 insertions(+), 16 deletions(-) diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 040222ab6..dd55e772a 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -1607,11 +1607,20 @@ Download originals + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggestions: @@ -1623,6 +1632,14 @@ Save current view + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modified + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 037f719b9..fe004f15b 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -1607,11 +1607,20 @@ Originale herunterladen + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Element hinzufügen + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Vorschläge: @@ -1623,6 +1632,14 @@ Aktuelle Ansicht speichern + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Tag hinzufügen + Show all @@ -2157,6 +2174,15 @@ Geändert am + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Relevanz + Create new item diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 6cf95fee1..24db45ed4 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1607,11 +1607,20 @@ Download originals + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggestions: @@ -1623,6 +1632,14 @@ Save current view + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modified + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index cc1ec5551..990e5e024 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1607,11 +1607,20 @@ Descargar originales + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Sugerencias: @@ -1623,6 +1632,14 @@ Guardar la vista actual + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modificado + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 5f23da083..7cfbc9e5b 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1607,11 +1607,20 @@ Télécharger les originaux + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggestions : @@ -1623,6 +1632,14 @@ Enregistrer la vue actuelle + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Date de modification + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 3f7aa2917..37cf6d89d 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -1607,11 +1607,20 @@ Download originals + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggestions: @@ -1623,6 +1632,14 @@ Jelenlegi nézet mentése + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Módosítva + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 8954dce8d..a8e107d04 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1607,11 +1607,20 @@ Scarica originali + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggerimenti: @@ -1623,6 +1632,14 @@ Salva vista corrente + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modificato + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index bca39fe8f..0ccd34d21 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1607,11 +1607,20 @@ Originelen downloaden + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggesties: @@ -1623,6 +1632,14 @@ Huidige view opslaan + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Gewijzigd + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index 5252a2c96..da6833e5a 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -1607,11 +1607,20 @@ Pobierz oryginały + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Sugestie: @@ -1623,6 +1632,14 @@ Zapisz bieżący widok + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Zmodyfikowano + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 94f963e3a..e1328cea1 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -1607,11 +1607,20 @@ Descarregar originais + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Sugestões: @@ -1623,6 +1632,14 @@ Salvar visualização atual + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modificado + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 1076712f8..1fe51b5f0 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1607,11 +1607,20 @@ Descarregar originais + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Sugestões: @@ -1623,6 +1632,14 @@ Guardar a vista atual + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modificado + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 95d6cce54..6f5dfb74e 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1607,11 +1607,20 @@ Descarcă originalele + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Sugestii: @@ -1623,6 +1632,14 @@ Salvează vizualizarea curenta + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modificat + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 2a421d418..4e7a4e318 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1607,11 +1607,20 @@ Скачать оригиналы + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Рекомендации: @@ -1623,6 +1632,14 @@ Сохранить текущее представление + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Изменено + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item diff --git a/src-ui/src/locale/messages.sv_SE.xlf b/src-ui/src/locale/messages.sv_SE.xlf index 6318c4099..9ca41e6db 100644 --- a/src-ui/src/locale/messages.sv_SE.xlf +++ b/src-ui/src/locale/messages.sv_SE.xlf @@ -1607,11 +1607,20 @@ Ladda ner original + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Lägg till objekt + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Förslag: @@ -1623,6 +1632,14 @@ Spara aktuell vy + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Lägg till tagg + Show all @@ -2157,6 +2174,15 @@ Ändrad + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Sök resultat + Create new item diff --git a/src-ui/src/locale/messages.xh_ZA.xlf b/src-ui/src/locale/messages.xh_ZA.xlf index 9cca7f5be..f3d23366e 100644 --- a/src-ui/src/locale/messages.xh_ZA.xlf +++ b/src-ui/src/locale/messages.xh_ZA.xlf @@ -1607,11 +1607,20 @@ crwdns3238:0crwdne3238:0 + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + crwdns3450:0crwdne3450:0 + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 crwdns3240:0crwdne3240:0 @@ -1623,6 +1632,14 @@ crwdns3242:0crwdne3242:0 + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + crwdns3452:0crwdne3452:0 + Show all @@ -2157,6 +2174,15 @@ crwdns3364:0crwdne3364:0 + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + crwdns3454:0crwdne3454:0 + Create new item diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index 37d0979d8..951c1e112 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -1607,11 +1607,20 @@ Download originals + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + Suggestions: src/app/components/common/input/select/select.component.html - 29 + 31 Suggestions: @@ -1623,6 +1632,14 @@ Save current view + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + Show all @@ -2157,6 +2174,15 @@ Modified + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + Create new item From dc565bd035db84716d6d1924c10cbc17de0f4539 Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Sun, 16 May 2021 01:22:51 +0200 Subject: [PATCH 783/898] correct file mode --- compile-frontend.sh | 0 docker/docker-entrypoint.sh | 0 docker/docker-prepare.sh | 0 docker/install_management_commands.sh | 0 docker/management_script.sh | 0 install-paperless-ng.sh | 0 scripts/post-consumption-example.sh | 0 scripts/start_services.sh | 0 src/documents/admin.py | 0 src/documents/classifier.py | 0 src/documents/consumer.py | 0 src/documents/filters.py | 0 src/documents/management/commands/document_create_classifier.py | 0 src/documents/management/commands/document_retagger.py | 0 src/documents/models.py | 0 src/documents/signals/handlers.py | 0 src/documents/views.py | 0 src/paperless/urls.py | 0 18 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 compile-frontend.sh mode change 100755 => 100644 docker/docker-entrypoint.sh mode change 100755 => 100644 docker/docker-prepare.sh mode change 100755 => 100644 docker/install_management_commands.sh mode change 100755 => 100644 docker/management_script.sh mode change 100755 => 100644 install-paperless-ng.sh mode change 100755 => 100644 scripts/post-consumption-example.sh mode change 100755 => 100644 scripts/start_services.sh mode change 100755 => 100644 src/documents/admin.py mode change 100755 => 100644 src/documents/classifier.py mode change 100755 => 100644 src/documents/consumer.py mode change 100755 => 100644 src/documents/filters.py mode change 100755 => 100644 src/documents/management/commands/document_create_classifier.py mode change 100755 => 100644 src/documents/management/commands/document_retagger.py mode change 100755 => 100644 src/documents/models.py mode change 100755 => 100644 src/documents/signals/handlers.py mode change 100755 => 100644 src/documents/views.py mode change 100755 => 100644 src/paperless/urls.py diff --git a/compile-frontend.sh b/compile-frontend.sh old mode 100755 new mode 100644 diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh old mode 100755 new mode 100644 diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh old mode 100755 new mode 100644 diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh old mode 100755 new mode 100644 diff --git a/docker/management_script.sh b/docker/management_script.sh old mode 100755 new mode 100644 diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh old mode 100755 new mode 100644 diff --git a/scripts/post-consumption-example.sh b/scripts/post-consumption-example.sh old mode 100755 new mode 100644 diff --git a/scripts/start_services.sh b/scripts/start_services.sh old mode 100755 new mode 100644 diff --git a/src/documents/admin.py b/src/documents/admin.py old mode 100755 new mode 100644 diff --git a/src/documents/classifier.py b/src/documents/classifier.py old mode 100755 new mode 100644 diff --git a/src/documents/consumer.py b/src/documents/consumer.py old mode 100755 new mode 100644 diff --git a/src/documents/filters.py b/src/documents/filters.py old mode 100755 new mode 100644 diff --git a/src/documents/management/commands/document_create_classifier.py b/src/documents/management/commands/document_create_classifier.py old mode 100755 new mode 100644 diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py old mode 100755 new mode 100644 diff --git a/src/documents/models.py b/src/documents/models.py old mode 100755 new mode 100644 diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py old mode 100755 new mode 100644 diff --git a/src/documents/views.py b/src/documents/views.py old mode 100755 new mode 100644 diff --git a/src/paperless/urls.py b/src/paperless/urls.py old mode 100755 new mode 100644 From d6446b3efdf06a4f28bcbcd15d97e072c590eb24 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 16 May 2021 11:58:32 +0200 Subject: [PATCH 784/898] add support for configuring mail server character set per server. fixes #548 --- src/locale/en_US/LC_MESSAGES/django.po | 174 ++++++++++-------- src/paperless_mail/admin.py | 12 ++ src/paperless_mail/mail.py | 6 +- .../migrations/0008_auto_20210516_0940.py | 28 +++ src/paperless_mail/models.py | 15 +- 5 files changed, 155 insertions(+), 80 deletions(-) create mode 100644 src/paperless_mail/migrations/0008_auto_20210516_0940.py diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 995fbe490..f152691ba 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "" @@ -376,127 +376,135 @@ msgstr "" msgid "File type %(type)s not supported" msgstr "" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "" -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "" -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "" "Paperless will only process mails that match ALL of the filters given below." msgstr "" -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "" "The action applied to the mail. This action is only performed when documents " "were consumed from the mail. Mails without attachments will remain entirely " "untouched." msgstr "" -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "" "Assign metadata to documents consumed from this rule automatically. If you " "do not assign tags, types or correspondents here, paperless will still " @@ -553,144 +561,158 @@ msgstr "" msgid "password" msgstr "" -#: paperless_mail/models.py:60 -msgid "mail rule" +#: paperless_mail/models.py:54 +msgid "character set" msgstr "" -#: paperless_mail/models.py:61 -msgid "mail rules" -msgstr "" - -#: paperless_mail/models.py:67 -msgid "Only process attachments." +#: paperless_mail/models.py:57 +msgid "" +"The character set to use when communicating with the mail server, such as " +"'UTF-8' or 'US-ASCII'." msgstr "" #: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "" -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "" -#: paperless_mail/models.py:128 -msgid "filter from" -msgstr "" - -#: paperless_mail/models.py:131 -msgid "filter subject" -msgstr "" - #: paperless_mail/models.py:134 -msgid "filter body" +msgid "Subfolders must be separated by dots." msgstr "" #: paperless_mail/models.py:138 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:141 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:144 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "" "Only consume documents which entirely match this filename if specified. " "Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "" -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "" -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "" "Inline attachments include embedded images, so it's best to combine this " "option with a filename filter." msgstr "" -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "" -#: paperless_mail/models.py:167 +#: paperless_mail/models.py:177 msgid "" "Additional parameter for the action selected above, i.e., the target folder " -"of the move to folder action." +"of the move to folder action. Subfolders must be separated by dots." msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "" diff --git a/src/paperless_mail/admin.py b/src/paperless_mail/admin.py index d6789ebe5..0c7e01ab8 100644 --- a/src/paperless_mail/admin.py +++ b/src/paperless_mail/admin.py @@ -8,6 +8,18 @@ class MailAccountAdmin(admin.ModelAdmin): list_display = ("name", "imap_server", "username") + fieldsets = [ + (None, { + 'fields': ['name', 'imap_server', 'imap_port'] + }), + (_("Authentication"), { + 'fields': ['imap_security', 'username', 'password'] + }), + (_("Advanced settings"), { + 'fields': ['character_set'] + }) + ] + class MailRuleAdmin(admin.ModelAdmin): diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 28a8a0784..d59b54bb6 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -200,8 +200,10 @@ class MailAccountHandler(LoggingMixin): f"{str(AND(**criterias))}") try: - messages = M.fetch(criteria=AND(**criterias), - mark_seen=False, charset='UTF-8') + messages = M.fetch( + criteria=AND(**criterias), + mark_seen=False, + charset=rule.account.character_set) except Exception: raise MailError( f"Rule {rule}: Error while fetching folder {rule.folder}") diff --git a/src/paperless_mail/migrations/0008_auto_20210516_0940.py b/src/paperless_mail/migrations/0008_auto_20210516_0940.py new file mode 100644 index 000000000..3cb98752c --- /dev/null +++ b/src/paperless_mail/migrations/0008_auto_20210516_0940.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.3 on 2021-05-16 09:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('paperless_mail', '0007_auto_20210106_0138'), + ] + + operations = [ + migrations.AddField( + model_name='mailaccount', + name='character_set', + field=models.CharField(default='UTF-8', help_text="The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'.", max_length=256, verbose_name='character set'), + ), + migrations.AlterField( + model_name='mailrule', + name='action_parameter', + field=models.CharField(blank=True, help_text='Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots.', max_length=256, null=True, verbose_name='action parameter'), + ), + migrations.AlterField( + model_name='mailrule', + name='folder', + field=models.CharField(default='INBOX', help_text='Subfolders must be separated by dots.', max_length=256, verbose_name='folder'), + ), + ] diff --git a/src/paperless_mail/models.py b/src/paperless_mail/models.py index 7e56b47a7..47921800e 100644 --- a/src/paperless_mail/models.py +++ b/src/paperless_mail/models.py @@ -50,6 +50,14 @@ class MailAccount(models.Model): _("password"), max_length=256) + character_set = models.CharField( + _("character set"), + max_length=256, + default="UTF-8", + help_text=_("The character set to use when communicating with the " + "mail server, such as 'UTF-8' or 'US-ASCII'.") + ) + def __str__(self): return self.name @@ -122,7 +130,9 @@ class MailRule(models.Model): folder = models.CharField( _("folder"), - default='INBOX', max_length=256) + default='INBOX', max_length=256, + help_text=_("Subfolders must be separated by dots.") + ) filter_from = models.CharField( _("filter from"), @@ -166,7 +176,8 @@ class MailRule(models.Model): max_length=256, blank=True, null=True, help_text=_("Additional parameter for the action selected above, " "i.e., " - "the target folder of the move to folder action.") + "the target folder of the move to folder action. " + "Subfolders must be separated by dots.") ) assign_title_from = models.PositiveIntegerField( From 4934d7b50a7080ec1781e471c448ed071034fbdd Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 16 May 2021 13:13:54 +0200 Subject: [PATCH 785/898] New Crowdin updates (#1023) --- src-ui/src/locale/messages.en_GB.xlf | 6 +- src/locale/cs_CZ/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/de_DE/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/en_GB/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/es_ES/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/fr_FR/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/hu_HU/LC_MESSAGES/django.po | 182 ++++++++++++++----------- src/locale/it_IT/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/nl_NL/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/pl_PL/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/pt_BR/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/pt_PT/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/ro_RO/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/ru_RU/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/sv_SE/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/xh_ZA/LC_MESSAGES/django.po | 158 +++++++++++---------- src/locale/zh_CN/LC_MESSAGES/django.po | 180 +++++++++++++----------- 17 files changed, 1450 insertions(+), 1130 deletions(-) diff --git a/src-ui/src/locale/messages.en_GB.xlf b/src-ui/src/locale/messages.en_GB.xlf index 24db45ed4..5aa1c8d9f 100644 --- a/src-ui/src/locale/messages.en_GB.xlf +++ b/src-ui/src/locale/messages.en_GB.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Add item Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Add tag Show all @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Search score Create new item diff --git a/src/locale/cs_CZ/LC_MESSAGES/django.po b/src/locale/cs_CZ/LC_MESSAGES/django.po index b6402acb6..367d4086a 100644 --- a/src/locale/cs_CZ/LC_MESSAGES/django.po +++ b/src/locale/cs_CZ/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:52\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatický" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "název" @@ -372,123 +372,131 @@ msgstr "" msgid "File type %(type)s not supported" msgstr "Typ souboru %(type)s není podporován" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng se načítá..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Odhlášeno od Paperless-ng" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Byli jste úspěšně odhlášeni. Nashledanou!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Přihlašte se znovu" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Paperless-ng přihlášení" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Prosím přihlaste se." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Vaše uživatelské jméno a heslo se neshodují. Prosím, zkuste to znovu." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Uživatelské jméno" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Heslo" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Přihlásit se" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Němčina" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Holandština" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Francouzština" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Správa Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtr" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless zpracuje pouze emaily které odpovídají VŠEM níže zadaným filtrům." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Akce" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Akce provedena na emailu. Tato akce je provedena jen pokud byly dokumenty zkonzumovány z emailu. Emaily bez příloh zůstanou nedotčeny." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadata" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Automaticky přiřadit metadata dokumentům zkonzumovaných z tohoto pravidla. Pokud zde nepřiřadíte tagy, typy nebo korespondenty, paperless stále zpracuje všechna shodující-se pravidla které jste definovali." @@ -540,139 +548,151 @@ msgstr "uživatelské jméno" msgid "password" msgstr "heslo" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "mailové pravidlo" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "mailová pravidla" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Zpracovávat jen přílohy" -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Zpracovat všechny soubory, včetně vložených příloh" -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Označit jako přečtené, nezpracovávat přečtené emaily" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Označit email, nezpracovávat označené emaily" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Přesunout do specifikované složky" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Odstranit" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Použít předmět jako titulek" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Použít název souboru u přílohy jako titulek" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Nepřiřazovat korespondenta" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Použít emailovou adresu" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Použít jméno (nebo emailovou adresu pokud jméno není dostupné)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Použít korespondenta vybraného níže" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "pořadí" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "účet" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "složka" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrovat z" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "název filtru" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "tělo filtru" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "název souboru u přílohy filtru" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Konzumovat jen dokumenty které přesně odpovídají tomuto názvu souboru pokud specifikováno. Zástupné znaky jako *.pdf nebo *invoice* jsou povoleny. Nezáleží na velikosti písmen." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "maximální stáří" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Specifikováno ve dnech." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "typ přílohy" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Vložené přílohy zahrnují vložené obrázky, takže je nejlepší tuto možnost kombinovat s filtrem na název souboru" -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "akce" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parametr akce" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Další parametr pro výše vybranou akci, napříkad cílová složka akce přesunutí do složky." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "nastavit titulek z" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "přiřadit tento tag" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "přiřadit tento typ dokumentu" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "přiřadit korespondenta z" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "přiřadit tohoto korespondenta" diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index d55d5103b..5a16065ec 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 23:04\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatisch" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "Name" @@ -372,123 +372,131 @@ msgstr "Ungültige Farbe." msgid "File type %(type)s not supported" msgstr "Dateityp %(type)s nicht unterstützt" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng wird geladen..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng abgemeldet" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Sie wurden erfolgreich abgemeldet. Auf Wiedersehen!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Erneut anmelden" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Paperless-ng Anmeldung" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Bitte melden Sie sich an." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Ihr Benutzername und Kennwort stimmen nicht überein. Bitte versuchen Sie es erneut." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Benutzername" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Kennwort" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Anmelden" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Englisch (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Englisch (UK)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Niederländisch" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Französisch" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portugiesisch" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italienisch" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Rumänisch" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Russisch" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Spanisch" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polnisch" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Schwedisch" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Paperless-ng Administration" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filter" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless wird nur E-Mails verarbeiten, für die alle der hier angegebenen Filter zutreffen." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Aktionen" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Die Aktion, die auf E-Mails angewendet werden soll. Diese Aktion wird nur auf E-Mails angewendet, aus denen Anhänge verarbeitet wurden. E-Mails ohne Anhänge werden vollständig ignoriert." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadaten" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Folgende Metadaten werden Dokumenten dieser Regel automatisch zugewiesen. Wenn Sie hier nichts auswählen wird Paperless weiterhin alle Zuweisungsalgorithmen ausführen und Metadaten auf Basis des Dokumentinhalts zuweisen." @@ -540,139 +548,151 @@ msgstr "Benutzername" msgid "password" msgstr "Kennwort" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "E-Mail-Regel" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "E-Mail-Regeln" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Nur Anhänge verarbeiten." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Alle Dateien verarbeiten, auch 'inline'-Anhänge." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Als gelesen markieren, gelesene E-Mails nicht verarbeiten" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Als wichtig markieren, markierte E-Mails nicht verarbeiten" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "In angegebenen Ordner verschieben" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Löschen" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Betreff als Titel verwenden" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Dateiname des Anhangs als Titel verwenden" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Keinen Korrespondenten zuweisen" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "E-Mail-Adresse benutzen" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Absendername benutzen (oder E-Mail-Adressen, wenn nicht verfügbar)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Nachfolgend ausgewählten Korrespondent verwenden" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "Reihenfolge" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "Konto" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "Ordner" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "Absender filtern" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "Betreff filtern" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "Nachrichteninhalt filtern" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "Anhang-Dateiname filtern" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Wenn angegeben werden nur Dateien verarbeitet, die diesem Dateinamen exakt entsprechen. Platzhalter wie *.pdf oder *rechnung* sind erlaubt. Groß- und Kleinschreibung ist irrelevant." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "Maximales Alter" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Angegeben in Tagen." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "Dateianhangstyp" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "'Inline'-Anhänge schließen eingebettete Bilder mit ein, daher sollte diese Einstellung mit einem Dateinamenfilter kombiniert werden." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "Aktion" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "Parameter für Aktion" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Zusätzlicher Parameter für die oben ausgewählte Aktion, zum Beispiel der Zielordner für die Aktion \"In angegebenen Ordner verschieben\"." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "Titel zuweisen von" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "Dieses Tag zuweisen" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "Diesen Dokumenttyp zuweisen" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "Korrespondent zuweisen von" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "Diesen Korrespondent zuweisen" diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 289ee3f48..320a77455 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-05 21:40\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatic" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "name" @@ -372,123 +372,131 @@ msgstr "Invalid colour." msgid "File type %(type)s not supported" msgstr "File type %(type)s not supported" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng is loading..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng signed out" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "You have been successfully logged out. Bye!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Sign in again" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Paperless-ng sign in" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Please sign in." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Your username and password didn't match. Please try again." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Username" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Password" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Sign in" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "English (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "German" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Dutch" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "French" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portuguese" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Romanian" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Russian" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Spanish" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polish" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Swedish" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filter" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless will only process mails that match ALL of the filters given below." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Actions" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadata" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -540,139 +548,151 @@ msgstr "username" msgid "password" msgstr "password" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "mail rule" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "mail rules" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Only process attachments." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Process all files, including 'inline' attachments." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Mark as read, don't process read mails" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Flag the mail, don't process flagged mails" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Move to specified folder" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Delete" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Use subject as title" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Use attachment filename as title" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Do not assign a correspondent" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Use mail address" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Use name (or mail address if not available)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Use correspondent selected below" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "order" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "account" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "folder" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filter from" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filter subject" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filter body" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filter attachment filename" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "maximum age" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Specified in days." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "attachment type" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "action" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "action parameter" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "assign title from" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "assign this tag" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "assign this document type" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "assign correspondent from" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "assign this correspondent" diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index f334c9cb8..65bf88bfb 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:52\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automático" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nombre" @@ -372,123 +372,131 @@ msgstr "Color inválido." msgid "File type %(type)s not supported" msgstr "Tipo de fichero %(type)s no suportado" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng está cargándose..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng Sesión cerrada" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Has cerrado la sesión satisfactoriamente. ¡Adiós!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Iniciar sesión de nuevo" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Paperless-ng Iniciar sesión" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Por favor, inicie sesión" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Tu usuario y contraseña no coinciden. Inténtalo de nuevo." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Usuario" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Contraseña" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Iniciar sesión" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Inglés (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Inglés (Gran Bretaña)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Alemán" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Alemán" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Francés" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugués (Brasil)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Rumano" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Ruso" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Español" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Paperless-ng Administración" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtro" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless solo procesará los correos que coincidan con TODOS los filtros escritos abajo." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Acciones" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "La acción aplicada al correo. Esta acción solo se realiza cuando los documentos se consumen del correo. Los correos sin archivos adjuntos permanecerán totalmente intactos." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadatos" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Asignar metadatos a documentos consumidos por esta regla automáticamente. Si no asigna etiquetas, o ipos aquí, paperless procesará igualmente todas las reglas que haya definido." @@ -540,139 +548,151 @@ msgstr "usuario" msgid "password" msgstr "contraseña" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "regla de correo" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "reglas de correo" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Solo procesar ficheros adjuntos." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Procesar todos los ficheros, incluyendo ficheros 'incrustados'." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Marcar como leído, no procesar archivos leídos" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Marcar el correo, no procesar correos marcados" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Mover a carpeta específica" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Borrar" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Usar asunto como titulo" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Usar nombre del fichero adjunto como título" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "No asignar un tipo de documento" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Usar dirección de correo" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Usar nombre (o dirección de correo si no está disponible)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Usar el tipo seleccionado debajo" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "orden" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "cuenta" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "carpeta" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrar desde" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtrar asunto" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtrar cuerpo" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtrar nombre del fichero adjunto" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Sólo consumirá documentos que coincidan completamente con este nombre de archivo si se especifica. Se permiten comodines como *.pdf o *factura*. No diferencia mayúsculas." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "antigüedad máxima" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Especificado en días." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "tipo de fichero adjunto" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Adjuntos incrustados incluyen imágenes, por lo que es mejor combina resta opción un filtro de nombre de fichero." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "acción" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parámetro de acción" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Parámetro adicional para la acción seleccionada arriba. Ej. la carpeta de destino de la acción de mover a carpeta." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "asignar titulo desde" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "asignar esta etiqueta" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "asignar este tipo de documento" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "Asignar tipo de documento desde" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "asignar este tipo de documento" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index b9f16187f..c0d0fd005 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-05 15:10\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatique" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nom" @@ -372,123 +372,131 @@ msgstr "Couleur incorrecte." msgid "File type %(type)s not supported" msgstr "Type de fichier %(type)s non pris en charge" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng est en cours de chargement..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Déconnecté de Paperless-ng" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Vous avez été déconnecté avec succès. Au revoir !" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Se reconnecter" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Connexion à Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Veuillez vous connecter." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Veuillez réessayer." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Nom d'utilisateur" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Mot de passe" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "S'identifier" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Anglais (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Anglais (GB)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Allemand" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Néerlandais" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Français" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portugais" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italien" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Roumain" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Russe" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Espagnol" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polonais" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Suédois" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Administration de Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtrage" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless-ng ne traitera que les courriers qui correspondent à TOUS les filtres ci-dessous." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Actions" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Action appliquée au courriel. Cette action n'est exécutée que lorsque les documents ont été traités depuis des courriels. Les courriels sans pièces jointes demeurent totalement inchangés." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Métadonnées" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Affecter automatiquement des métadonnées aux documents traités à partir de cette règle. Si vous n'affectez pas d'étiquette, de type ou de correspondant ici, Paperless-ng appliquera toutes les autres règles de rapprochement que vous avez définies." @@ -540,139 +548,151 @@ msgstr "nom d'utilisateur" msgid "password" msgstr "mot de passe" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "règle de courriel" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "règles de courriel" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Ne traiter que les pièces jointes." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Traiter tous les fichiers, y compris les pièces jointes \"en ligne\"." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Marquer comme lu, ne pas traiter les courriels lus" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Marquer le courriel, ne pas traiter les courriels marqués" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Déplacer vers le dossier spécifié" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Supprimer" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Utiliser le sujet en tant que titre" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Utiliser le nom de la pièce jointe en tant que titre" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Ne pas affecter de correspondant" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Utiliser l'adresse électronique" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Utiliser le nom (ou l'adresse électronique s'il n'est pas disponible)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Utiliser le correspondant sélectionné ci-dessous" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "ordre" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "compte" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "répertoire" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrer l'expéditeur" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtrer le sujet" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtrer le corps du message" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtrer le nom de fichier de la pièce jointe" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Ne traiter que les documents correspondant intégralement à ce nom de fichier s'il est spécifié. Les jokers tels que *.pdf ou *facture* sont autorisés. La casse n'est pas prise en compte." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "âge maximum" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "En jours." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "type de pièce jointe" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Les pièces jointes en ligne comprennent les images intégrées, il est donc préférable de combiner cette option avec un filtre de nom de fichier." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "action" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "paramètre d'action" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Paramètre supplémentaire pour l'action sélectionnée ci-dessus, par exemple le dossier cible de l'action de déplacement vers un dossier." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "affecter le titre depuis" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "affecter cette étiquette" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "affecter ce type de document" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "affecter le correspondant depuis" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "affecter ce correspondant" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index 93f1d1da2..870a35195 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:52\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatikus" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "" @@ -372,123 +372,131 @@ msgstr "" msgid "File type %(type)s not supported" msgstr "" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "" -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "" -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Angol (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Német" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "" -#: paperless_mail/admin.py:25 -msgid "Filter" -msgstr "Szűrő" +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" -#: paperless_mail/admin.py:27 -msgid "Paperless will only process mails that match ALL of the filters given below." +#: paperless_mail/admin.py:18 +msgid "Advanced settings" msgstr "" #: paperless_mail/admin.py:37 +msgid "Filter" +msgstr "Szűrő" + +#: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Műveletek" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "" -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metaadat" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "" @@ -540,139 +548,151 @@ msgstr "" msgid "password" msgstr "" -#: paperless_mail/models.py:60 -msgid "mail rule" +#: paperless_mail/models.py:54 +msgid "character set" msgstr "" -#: paperless_mail/models.py:61 -msgid "mail rules" -msgstr "" - -#: paperless_mail/models.py:67 -msgid "Only process attachments." +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." msgstr "" #: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "" -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Törlés" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "" -#: paperless_mail/models.py:128 -msgid "filter from" -msgstr "" - -#: paperless_mail/models.py:131 -msgid "filter subject" -msgstr "" - #: paperless_mail/models.py:134 -msgid "filter body" +msgid "Subfolders must be separated by dots." msgstr "" #: paperless_mail/models.py:138 -msgid "filter attachment filename" +msgid "filter from" msgstr "" -#: paperless_mail/models.py:140 -msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +#: paperless_mail/models.py:141 +msgid "filter subject" msgstr "" -#: paperless_mail/models.py:146 -msgid "maximum age" +#: paperless_mail/models.py:144 +msgid "filter body" msgstr "" #: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "" -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "" -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 92bbfb07a..16fb1843c 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-05 08:19\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatico" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nome" @@ -372,123 +372,131 @@ msgstr "Colore non valido." msgid "File type %(type)s not supported" msgstr "Il tipo di file %(type)s non è supportato" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng è in caricamento..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng è uscito" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Ti sei disconnesso. A presto!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Accedi nuovamente" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Accedi a Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Accedi" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Il nome utente e la password non sono corretti. Riprovare." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Nome utente" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Password" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Accedi" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Inglese (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Inglese (GB)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Tedesco" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Olandese" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Francese" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portoghese (Brasile)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portoghese" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Rumeno" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Russo" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Spagnolo" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polacco" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Svedese" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Amministrazione di Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtro" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless-ng processerà solo la posta che rientra in TUTTI i filtri impostati." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Azioni" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "L'azione che viene applicata alla email. Questa azione viene eseguita solo quando dei documenti vengono elaborati dalla email. Le email senza allegati vengono ignorate." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadati" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Assegna automaticamente i metadati ai documenti elaborati da questa regola. Se non assegni qui dei tag, tipi di documenti o corrispondenti, Paperless userà comunque le regole corrispondenti che hai configurato." @@ -540,139 +548,151 @@ msgstr "nome utente" msgid "password" msgstr "password" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "regola email" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "regole email" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Elabora solo gli allegati." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Elabora tutti i file, inclusi gli allegati nel corpo." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Segna come letto, non elaborare le email lette" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Contrassegna la email, non elaborare le email elaborate." -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Sposta in una cartella" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Elimina" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Usa oggetto come titolo" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Usa il nome dell'allegato come titolo" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Non assegnare un corrispondente" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Usa indirizzo email" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Usa nome (o indirizzo email se non disponibile)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Usa il corrispondente selezionato qui sotto" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "priorità" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "account" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "cartella" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtra da" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtra oggetto" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtra corpo" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtra nome allegato" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Elabora i documenti che corrispondono a questo nome. Puoi usare wildcard come *.pdf o *fattura*. Non fa differenza fra maiuscole e minuscole." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "età massima" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Definito in giorni." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "tipo di allegato" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Gli allegati in linea includono le immagini nel corpo, quindi è meglio combinare questa opzione con il filtro nome." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "azione" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parametro azione" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Parametro aggiuntivo per l'azione selezionata, ad esempio la cartella di destinazione per l'azione che sposta in una cartella." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "assegna tittolo da" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "assegna questo tag" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "assegna questo tipo di documento" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "assegna corrispondente da" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "assegna questo corrispondente" diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index b2ff30e25..379b07f82 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-06 00:07\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatisch" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "naam" @@ -372,123 +372,131 @@ msgstr "Ongeldig kleur." msgid "File type %(type)s not supported" msgstr "Bestandstype %(type)s niet ondersteund" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng is aan het laden..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng - afmelden" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Je bent nu afgemeld. Tot later!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Meld je opnieuw aan" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Paperless-ng - aanmelden" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Gelieve aan te melden." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Je gebruikersnaam en wachtwoord komen niet overeen. Probeer opnieuw." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Gebruikersnaam" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Wachtwoord" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Aanmelden" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Engels (US)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Engels (Brits)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Duits" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Nederlands" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Frans" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portugees" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italiaans" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Roemeens" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Russisch" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Spaans" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Pools" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Zweeds" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Paperless-ng administratie" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filter" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless verwerkt alleen e-mails die voldoen aan ALLE onderstaande filters." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Acties" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "De actie die wordt toegepast op de mail. Deze actie wordt alleen uitgevoerd wanneer documenten verwerkt werden uit de mail. Mails zonder bijlage blijven onaangeroerd." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadata" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Automatisch metadata toewijzen aan documenten vanuit deze regel. Indien je geen labels, documenttypes of correspondenten toewijst, zal Paperless nog steeds alle regels verwerken die je hebt gedefinieerd." @@ -540,139 +548,151 @@ msgstr "gebruikersnaam" msgid "password" msgstr "wachtwoord" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "email-regel" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "email-regels" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Alleen bijlagen verwerken" -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Verwerk alle bestanden, inclusief 'inline' bijlagen." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Markeer als gelezen, verwerk geen gelezen mails" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Markeer de mail, verwerk geen mails met markering" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Verplaats naar gegeven map" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Verwijder" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Gebruik onderwerp als titel" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Gebruik naam van bijlage als titel" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Wijs geen correspondent toe" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Gebruik het email-adres" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Gebruik de naam, en anders het email-adres" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Gebruik de hieronder aangeduide correspondent" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "volgorde" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "account" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "map" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filter afzender" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filter onderwerp" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filter inhoud" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "Filter bestandsnaam van bijlage" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Alleen documenten verwerken die volledig overeenkomen, indien aangegeven. Je kunt jokertekens gebruiken, zoals *.pdf of *factuur*. Dit is niet hoofdlettergevoelig." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "Maximale leeftijd" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Aangegeven in dagen" -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "Type bijlage" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "\"Inline\" bijlagen bevatten vaak ook afbeeldingen. In dit geval valt het aan te raden om ook een filter voor de bestandsnaam op te geven." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "actie" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "actie parameters" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Extra parameters voor de hierboven gekozen actie, met andere woorden: de bestemmingsmap voor de verplaats-actie." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "wijs titel toe van" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "wijs dit etiket toe" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "wijs dit documenttype toe" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "wijs correspondent toe van" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "wijs deze correspondent toe" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po index ccf85eaae..83df3593e 100644 --- a/src/locale/pl_PL/LC_MESSAGES/django.po +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatyczny" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nazwa" @@ -372,123 +372,131 @@ msgstr "Nieprawidłowy kolor." msgid "File type %(type)s not supported" msgstr "Typ pliku %(type)s nie jest obsługiwany" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Ładowanie Paperless-ng..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Wylogowano z Paperless-ng" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Poprawnie wylogowano. Do zobaczenia!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Zaloguj się ponownie" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Logowanie do Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Proszę się zalogować." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Twoja nazwa użytkownika i hasło nie są zgodne. Spróbuj ponownie." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Użytkownik" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Hasło" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Zaloguj się" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Angielski (USA)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Angielski (Wielka Brytania)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Niemiecki" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Holenderski" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Francuski" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugalski (Brazylia)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portugalski" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Włoski" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Rumuński" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Rosyjski" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Hiszpański" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polski" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Administracja Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtry" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless przetworzy tylko wiadomości pasujące do WSZYSTKICH filtrów podanych poniżej." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Akcje" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Akcja zastosowana do wiadomości. Ta akcja jest wykonywana tylko wtedy, gdy dokumenty zostały przetworzone z wiadomości. Poczta bez załączników pozostanie całkowicie niezmieniona." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadane" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Przypisz metadane do dokumentów zużywanych z tej reguły automatycznie. Jeśli nie przypisujesz tutaj tagów, typów lub korespondentów, Paperless będzie nadal przetwarzał wszystkie zdefiniowane przez Ciebie reguły." @@ -540,139 +548,151 @@ msgstr "nazwa użytkownika" msgid "password" msgstr "hasło" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "reguła wiadomości" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "reguły wiadomości" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Przetwarzaj tylko załączniki." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Przetwarzaj wszystkie pliki, łącznie z załącznikami „inline”." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Oznacz jako przeczytane, nie przetwarzaj przeczytanych wiadomości" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Oznacz wiadomość, nie przetwarzaj oznaczonych wiadomości" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Przenieś do określonego folderu" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Usuń" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Użyj tematu jako tytułu" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Użyj nazwy pliku załącznika jako tytułu" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Nie przypisuj korespondenta" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Użyj adresu e-mail" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Użyj nazwy nadawcy (lub adresu e-mail, jeśli jest niedostępna)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Użyj korespondenta wybranego poniżej" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "kolejność" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "konto" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "folder" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtruj po nadawcy" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtruj po temacie" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtruj po treści" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtruj po nazwie pliku załącznika" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Przetwarzaj tylko dokumenty, które całkowicie pasują do tej nazwy pliku, jeśli jest podana. Wzorce dopasowania jak *.pdf lub *faktura* są dozwolone. Wielkość liter nie jest rozróżniana." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "nie starsze niż" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "dni." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "typ załącznika" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Załączniki typu \"inline\" zawierają osadzone obrazy, więc najlepiej połączyć tę opcję z filtrem nazwy pliku." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "akcja" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parametr akcji" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Dodatkowy parametr dla akcji wybranej powyżej, tj. docelowy folder akcji \"Przenieś do określonego folderu\"." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "przypisz tytuł" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "przypisz ten tag" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "przypisz ten typ dokumentu" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "przypisz korespondenta z" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "przypisz tego korespondenta" diff --git a/src/locale/pt_BR/LC_MESSAGES/django.po b/src/locale/pt_BR/LC_MESSAGES/django.po index 1b5b43165..d10d68364 100644 --- a/src/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automático" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nome" @@ -372,123 +372,131 @@ msgstr "Cor inválida." msgid "File type %(type)s not supported" msgstr "Tipo de arquivo %(type)s não suportado" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng está carregando..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng saiu" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Sua sessão foi encerrada com sucesso. Até mais!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Entre novamente" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Entrar no Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Por favor, entre na sua conta" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Seu usuário e senha estão incorretos. Por favor, tente novamente." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Usuário" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Senha" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Entrar" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Inglês (GB)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Alemão" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Holandês" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Francês" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Romeno" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtro" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless processará somente e-mails que se encaixam em TODOS os filtros abaixo." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Ações" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "A ação se aplica ao e-mail. Essa ação só é executada quando documentos foram consumidos do e-mail. E-mails sem anexos permanecerão intactos." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadados" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Atribua metadados aos documentos consumidos por esta regra automaticamente. Se você não atribuir etiquetas, tipos ou correspondentes aqui, paperless ainda sim processará todas as regras de detecção que você definiu." @@ -540,140 +548,152 @@ msgstr "usuário" msgid "password" msgstr "senha" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "regra de e-mail" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "regras de e-mail" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Processar somente anexos." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Processar todos os arquivos, incluindo anexos 'inline'." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Marcar como lido, não processar e-mails lidos" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Sinalizar o e-mail, não processar e-mails sinalizados" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Mover para pasta especificada" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Excluir" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Usar assunto como título" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Usar nome do arquivo anexo como título" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Não atribuir um correspondente" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Usar endereço de e-mail" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Usar nome (ou endereço de e-mail se não disponível)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Usar correspondente selecionado abaixo" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "ordem" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "conta" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "pasta" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrar de" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtrar assunto" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtrar corpo" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtrar nome do arquivo anexo" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Consumir somente documentos que correspondem a este nome de arquivo se especificado.\n" "Curingas como *.pdf ou *invoice* são permitidos. Sem diferenciação de maiúsculas e minúsculas." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "idade máxima" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Especificada em dias." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "tipo de anexo" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Anexos inline incluem imagens inseridas, por isso é melhor combinar essa opção com um filtro de nome de arquivo." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "ação" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parâmetro da ação" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Parâmetro adicional para a ação selecionada acima, por exemplo: a pasta de destino da ação de mover pasta." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "atribuir título de" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "atribuir esta etiqueta" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "atribuir este tipo de documento" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "atribuir correspondente de" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "atribuir este correspondente" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index bde26c49b..f2e7d000d 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-05 18:07\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automático" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nome" @@ -372,123 +372,131 @@ msgstr "Cor invalida." msgid "File type %(type)s not supported" msgstr "Tipo de arquivo %(type)s não suportado" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "O paperless-ng está a carregar..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng com sessão terminada" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Terminou a sessão com sucesso. Adeus!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Iniciar sessão novamente" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Inicio de sessão Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Por favor inicie sessão." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "O utilizador e a senha não correspondem. Tente novamente." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Nome de utilizador" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Palavra-passe" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Iniciar sessão" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Inglês (EUA)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "English (GB)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Deutsch" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Nederlandse" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Français" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Português" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italiano" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Romeno" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Russo" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Espanhol" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polaco" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Sueco" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Administração do Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtro" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "O Paperless apenas irá processar emails que coincidem com TODOS os filtros dados abaixo." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Ações" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "A ação aplicada a correio. Esta ação apenas será efetuada com documentos que tenham sido consumidos através do correio. E-mails sem anexos permanecerão intactos." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadados" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Atribuir meta-dados aos documentos consumidos automaticamente através desta regra. Se você não atribuir etiquetas, tipos ou correspondentes aqui, o paperless ainda assim processará todas as regras correspondentes que tenha definido." @@ -540,139 +548,151 @@ msgstr "nome de utilizador" msgid "password" msgstr "palavra-passe" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "regra de correio" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "regras de correio" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Processar anexos apenas." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Processar todos os ficheiros, incluindo ficheiros 'embutidos (inline)'." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Marcar como lido, não processar emails lidos" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Marcar o email, não processar emails marcados" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Mover para uma diretoria específica" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Excluir" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Utilizar o assunto como título" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Utilizar o nome do anexo como título" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Não atribuir um correspondente" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Utilizar o endereço de email" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Utilizar nome (ou endereço de email se não disponível)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Utilizar o correspondente selecionado abaixo" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "ordem" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "conta" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "directoria" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrar de" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtrar assunto" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtrar corpo" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtrar nome do arquivo anexo" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Consumir apenas documentos que correspondam inteiramente ao nome de arquivo se especificado. Genéricos como *.pdf ou *fatura* são permitidos. Não é sensível a letras maiúsculas/minúsculas." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "idade máxima" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Especificado em dias." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "tipo de anexo" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Anexos embutidos incluem imagens incorporadas, por isso é melhor combinar esta opção com um filtro de nome do arquivo." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "ação" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parâmetro de ação" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Parâmetro adicional para a ação selecionada acima, isto é, a diretoria de destino do movimento da ação para a pasta." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "atribuir titulo de" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "atribuir esta etiqueta" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "atribuir este tipo de documento" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "atribuir correspondente de" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "atribuir este correspondente" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index 8aefb8f0b..f547fbca0 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 23:04\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automat" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "nume" @@ -372,123 +372,131 @@ msgstr "Culoare invalidă." msgid "File type %(type)s not supported" msgstr "Tip de fișier %(type)s nesuportat" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng se încarca..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng s-a deconectat" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Ați fost deconectat cu succes. La revedere!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Conectați-vă din nou" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Conectare Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Vă rugăm conectați-vă." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Numele si parola nu sunt corecte. Vă rugăm incercați din nou." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Nume" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Parolă" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Conectare" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Engleză (Americană)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Engleză (Britanică)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Germană" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Olandeză" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Franceză" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugheză (Brazilia)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portugheză" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italiană" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Română" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Rusă" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Spaniolă" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Poloneză" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Suedeză" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Administrare Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filtru" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless va procesa doar mail-urile care corespund TUTUROR filtrelor date mai jos." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Acțiuni" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Acțiunea aplicată tuturor email-urilor. Aceasta este realizată doar când sunt consumate documente din email. Cele fara atașamente nu vor fi procesate." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadate" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Atribuie metadate documentelor consumate prin aceasta regula în mod automat. Chiar dacă nu sunt atribuite etichete, tipuri sau corespondenți, Paperless va procesa toate regulile definite care se potrivesc." @@ -540,139 +548,151 @@ msgstr "nume" msgid "password" msgstr "parolă" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "regulă email" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "reguli email" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Procesează doar atașamentele." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Procesează toate fișierele, inclusiv atașamentele „inline”." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Marchează ca citit, nu procesa email-uri citite" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Marchează, nu procesa email-uri marcate" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Mută în directorul specificat" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Șterge" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Utilizează subiectul ca titlu" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Utilizează numele fișierului atașat ca titlu" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Nu atribui un corespondent" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Folosește adresa de email" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Folosește numele (dacă nu exista, folosește adresa de email)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Folosește corespondentul selectat mai jos" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "ordonează" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "cont" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "director" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrează de la" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtrează subiect" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtrează corpul email-ului" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtrează numele fișierului atașat" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Consumă doar documentele care se potrivesc în întregime cu acest nume de fișier, dacă este specificat. Simbolul * ține locul oricărui șir de caractere. Majusculele nu contează." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "vârsta maximă" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Specificată in zile." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "tip atașament" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Atașamentele \"inline\" includ și imaginile încorporate, deci această opțiune funcționează cel mai bine combinată cu un filtru pentru numele fișierului." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "acţiune" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "parametru acțiune" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Parametru adițional pentru acțiunea definită mai sus (ex. directorul în care să se realizeze o mutare)." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "atribuie titlu din" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "atribuie această etichetă" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "atribuie acest tip" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "atribuie corespondent din" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "atribuie acest corespondent" diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index 56a7d5b96..2e38b0737 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Автоматически" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "имя" @@ -372,123 +372,131 @@ msgstr "Неверный цвет." msgid "File type %(type)s not supported" msgstr "Тип файла %(type)s не поддерживается" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng загружается..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Выполнен выход из Paperless-ng" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Вы успешно вышли из системы. До свидания!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Войти снова" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Выполнен выход в Paperless-ng" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Пожалуйста, войдите." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Неправильные имя пользователя или пароль! Попробуйте еще раз." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Имя пользователя" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Пароль" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Вход" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Английский (США)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Английский (Великобритании)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Немецкий" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Датский" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Французский" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portuguese (Brazil)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Португальский" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italian" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Romanian" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Русский" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Испанский" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Администрирование Paperless-ng" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Фильтр" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless будет обрабатывать только те письма, которые соответствуют всем фильтрам, указанным ниже." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Действия" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Действие применено к письму. Это действие применяется только при обработке документов из почты. Сообщения без вложений не обрабатываются." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Метаданные" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Автоматически назначать метаданные документам, полученным из этого правила. Если вы не назначаете здесь теги, типы или корреспонденты, paperless все равно будут обрабатывать все соответствующие правила, которые вы определили." @@ -540,139 +548,151 @@ msgstr "Имя пользователя" msgid "password" msgstr "пароль" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "правило почты" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "правила почты" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Обрабатывать только вложения." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Обрабатывать все файлы, включая 'встроенные' вложения." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Пометить как прочитанное, не обрабатывать прочитанные письма" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Пометить почту, не обрабатывать помеченные письма" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Переместить в указанную папку" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Удалить" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Тема в качестве заголовка" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Использовать имя вложенного файла как заголовок" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Не назначать корреспондента" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Использовать email адрес" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Использовать имя (или адрес электронной почты, если недоступно)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Использовать корреспондента, выбранного ниже" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "порядок" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "Учётная запись" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "каталог" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "фильтр по отправителю" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "фильтр по теме" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "фильтр по тексту сообщения" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "фильтр по имени вложения" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Обрабатывать только документы, которые полностью совпадают с именем файла (если оно указано). Маски, например *.pdf или *счет*, разрешены. Без учёта регистра." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "Максимальный возраст" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Указывается в днях." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "Тип вложения" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Вложенные вложения включая встраиваемые изображения. Лучше совместить эту опцию с фильтром по имени вложения." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "действие" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "параметр действия" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Дополнительный параметр для выбранного действия, например целевой каталог для действия \"переместить в каталог\"." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "назначить заголовок из" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "назначить этот тег" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "назначить этот тип документа" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "назначить корреспондента из" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "назначить этого корреспондента" diff --git a/src/locale/sv_SE/LC_MESSAGES/django.po b/src/locale/sv_SE/LC_MESSAGES/django.po index 54e52d257..5cdcac02e 100644 --- a/src/locale/sv_SE/LC_MESSAGES/django.po +++ b/src/locale/sv_SE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-10 13:35\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "Automatisk" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "namn" @@ -372,123 +372,131 @@ msgstr "Ogiltig färg." msgid "File type %(type)s not supported" msgstr "Filtypen %(type)s stöds inte" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "Paperless-ng laddas..." -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "Paperless-ng utloggad" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "Du är nu utloggad!" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "Logga in igen" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "Paperless-ng inloggning" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "Vänligen logga in." -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "Ditt användarnamn och lösenord stämde inte. Försök igen." -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "Användarnamn" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "Lösenord" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "Logga in" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "Engelska (USA)" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "Engelska (GB)" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "Tyska" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "Holländska" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "Franska" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "Portugisiska (Brasilien)" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "Portugisiska" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "Italienska" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "Rumänska" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "Ryska" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "Spanska" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "Polska" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "Svenska" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "Paperless-ng administration" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "Filter" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "Paperless kommer endast att behandla e-postmeddelanden som matchar ALLA filter som anges nedan." -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "Åtgärder" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "Åtgärden tillämpas på e-postmeddelandet. Denna åtgärd utförs endast när dokument konsumerades från e-postmeddelandet. E-post utan bilagor kommer att förbli helt orörda." -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "Metadata" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "Tilldela metadata till dokument som konsumeras från denna regel automatiskt. Om du inte tilldelar taggar, typer eller korrespondenter här kommer paperless fortfarande att behandla alla matchande regler som du har definierat." @@ -540,139 +548,151 @@ msgstr "användarnamn" msgid "password" msgstr "lösenord" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "e-postregel" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "e-postregler" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "Behandla endast bilagor." -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "Behandla alla filer, inklusive \"inline\" bilagor." -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "Markera som läst, bearbeta inte lästa meddelanden" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "Flagga mailet, bearbeta inte flaggade mail" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "Flytta till angiven mapp" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "Radera" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "Använd ämne som titel" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "Använd bilagans filnamn som titel" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "Tilldela inte en korrespondent" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "Använd e-postadress" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "Använd namn (eller e-postadress om inte tillgängligt)" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "Använd korrespondent som valts nedan" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "ordning" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "konto" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "mapp" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "filtrera från" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "filtrera ämne" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "filtrera kropp" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "filtrera filnamn för bilaga" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "Konsumera endast dokument som helt och hållet matchar detta filnamn om det anges. Wildcards som *.pdf eller *faktura* är tillåtna. Ej skiftlägeskänsliga." -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "maximal ålder" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "Anges i dagar." -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "typ av bilaga" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "Bifogade bilagor inkluderar inbäddade bilder, så det är bäst att kombinera detta alternativ med ett filnamnsfilter." -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "åtgärd" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "åtgärdsparameter" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "Ytterligare parameter för åtgärden som valts ovan, dvs målmappen för flytta till mapp-åtgärden." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "tilldela titel från" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "tilldela denna tagg" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "tilldela den här dokumenttypen" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "tilldela korrespondent från" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "tilldela denna korrespondent" diff --git a/src/locale/xh_ZA/LC_MESSAGES/django.po b/src/locale/xh_ZA/LC_MESSAGES/django.po index b706261ad..fc6837620 100644 --- a/src/locale/xh_ZA/LC_MESSAGES/django.po +++ b/src/locale/xh_ZA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Xhosa\n" "Language: xh_ZA\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "crwdns2540:0crwdne2540:0" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "crwdns2542:0crwdne2542:0" @@ -372,123 +372,131 @@ msgstr "crwdns2692:0crwdne2692:0" msgid "File type %(type)s not supported" msgstr "crwdns2694:0%(type)scrwdne2694:0" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "crwdns2696:0crwdne2696:0" -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "crwdns2698:0crwdne2698:0" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "crwdns2700:0crwdne2700:0" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "crwdns2702:0crwdne2702:0" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "crwdns2704:0crwdne2704:0" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "crwdns2706:0crwdne2706:0" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "crwdns2708:0crwdne2708:0" -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "crwdns2710:0crwdne2710:0" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "crwdns2712:0crwdne2712:0" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "crwdns2714:0crwdne2714:0" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "crwdns2716:0crwdne2716:0" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "crwdns2718:0crwdne2718:0" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "crwdns2720:0crwdne2720:0" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "crwdns2722:0crwdne2722:0" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "crwdns2724:0crwdne2724:0" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "crwdns2726:0crwdne2726:0" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "crwdns3424:0crwdne3424:0" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "crwdns2728:0crwdne2728:0" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "crwdns2730:0crwdne2730:0" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "crwdns3414:0crwdne3414:0" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "crwdns3420:0crwdne3420:0" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "crwdns3444:0crwdne3444:0" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "crwdns3448:0crwdne3448:0" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "crwdns2732:0crwdne2732:0" -#: paperless_mail/admin.py:25 +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "crwdns3456:0crwdne3456:0" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "crwdns3458:0crwdne3458:0" + +#: paperless_mail/admin.py:37 msgid "Filter" msgstr "crwdns2734:0crwdne2734:0" -#: paperless_mail/admin.py:27 +#: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." msgstr "crwdns2736:0crwdne2736:0" -#: paperless_mail/admin.py:37 +#: paperless_mail/admin.py:49 msgid "Actions" msgstr "crwdns2738:0crwdne2738:0" -#: paperless_mail/admin.py:39 +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "crwdns2740:0crwdne2740:0" -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "crwdns2742:0crwdne2742:0" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "crwdns2744:0crwdne2744:0" @@ -540,139 +548,151 @@ msgstr "crwdns2766:0crwdne2766:0" msgid "password" msgstr "crwdns2768:0crwdne2768:0" -#: paperless_mail/models.py:60 +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "crwdns3460:0crwdne3460:0" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "crwdns3462:0crwdne3462:0" + +#: paperless_mail/models.py:68 msgid "mail rule" msgstr "crwdns2770:0crwdne2770:0" -#: paperless_mail/models.py:61 +#: paperless_mail/models.py:69 msgid "mail rules" msgstr "crwdns2772:0crwdne2772:0" -#: paperless_mail/models.py:67 +#: paperless_mail/models.py:75 msgid "Only process attachments." msgstr "crwdns2774:0crwdne2774:0" -#: paperless_mail/models.py:68 +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "crwdns2776:0crwdne2776:0" -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "crwdns2778:0crwdne2778:0" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "crwdns2780:0crwdne2780:0" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "crwdns2782:0crwdne2782:0" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "crwdns2784:0crwdne2784:0" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "crwdns2786:0crwdne2786:0" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "crwdns2788:0crwdne2788:0" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "crwdns2790:0crwdne2790:0" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "crwdns2792:0crwdne2792:0" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "crwdns2794:0crwdne2794:0" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "crwdns2796:0crwdne2796:0" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "crwdns2798:0crwdne2798:0" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "crwdns2800:0crwdne2800:0" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "crwdns2802:0crwdne2802:0" -#: paperless_mail/models.py:128 +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "crwdns3464:0crwdne3464:0" + +#: paperless_mail/models.py:138 msgid "filter from" msgstr "crwdns2804:0crwdne2804:0" -#: paperless_mail/models.py:131 +#: paperless_mail/models.py:141 msgid "filter subject" msgstr "crwdns2806:0crwdne2806:0" -#: paperless_mail/models.py:134 +#: paperless_mail/models.py:144 msgid "filter body" msgstr "crwdns2808:0crwdne2808:0" -#: paperless_mail/models.py:138 +#: paperless_mail/models.py:148 msgid "filter attachment filename" msgstr "crwdns2810:0crwdne2810:0" -#: paperless_mail/models.py:140 +#: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "crwdns2812:0crwdne2812:0" -#: paperless_mail/models.py:146 +#: paperless_mail/models.py:156 msgid "maximum age" msgstr "crwdns2814:0crwdne2814:0" -#: paperless_mail/models.py:148 +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "crwdns2816:0crwdne2816:0" -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "crwdns2818:0crwdne2818:0" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "crwdns2820:0crwdne2820:0" -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "crwdns2822:0crwdne2822:0" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "crwdns2824:0crwdne2824:0" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." -msgstr "crwdns2826:0crwdne2826:0" +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "crwdns3466:0crwdne3466:0" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "crwdns2828:0crwdne2828:0" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "crwdns2830:0crwdne2830:0" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "crwdns2832:0crwdne2832:0" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "crwdns2834:0crwdne2834:0" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "crwdns2836:0crwdne2836:0" diff --git a/src/locale/zh_CN/LC_MESSAGES/django.po b/src/locale/zh_CN/LC_MESSAGES/django.po index 01d9b234b..ea3b5b03d 100644 --- a/src/locale/zh_CN/LC_MESSAGES/django.po +++ b/src/locale/zh_CN/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-04 15:00+0000\n" -"PO-Revision-Date: 2021-05-04 21:51\n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-05-16 10:09\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -46,7 +46,7 @@ msgid "Automatic" msgstr "自动" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 -#: paperless_mail/models.py:109 +#: paperless_mail/models.py:117 msgid "name" msgstr "名字" @@ -372,123 +372,131 @@ msgstr "" msgid "File type %(type)s not supported" msgstr "" -#: documents/templates/index.html:21 +#: documents/templates/index.html:22 msgid "Paperless-ng is loading..." msgstr "" -#: documents/templates/registration/logged_out.html:13 +#: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" msgstr "" -#: documents/templates/registration/logged_out.html:41 +#: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" msgstr "" -#: documents/templates/registration/logged_out.html:42 +#: documents/templates/registration/logged_out.html:46 msgid "Sign in again" msgstr "" -#: documents/templates/registration/login.html:13 +#: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" msgstr "" -#: documents/templates/registration/login.html:42 +#: documents/templates/registration/login.html:47 msgid "Please sign in." msgstr "" -#: documents/templates/registration/login.html:45 +#: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." msgstr "" -#: documents/templates/registration/login.html:48 +#: documents/templates/registration/login.html:53 msgid "Username" msgstr "" -#: documents/templates/registration/login.html:49 +#: documents/templates/registration/login.html:54 msgid "Password" msgstr "" -#: documents/templates/registration/login.html:54 +#: documents/templates/registration/login.html:59 msgid "Sign in" msgstr "" -#: paperless/settings.py:300 +#: paperless/settings.py:303 msgid "English (US)" msgstr "" -#: paperless/settings.py:301 +#: paperless/settings.py:304 msgid "English (GB)" msgstr "" -#: paperless/settings.py:302 +#: paperless/settings.py:305 msgid "German" msgstr "" -#: paperless/settings.py:303 +#: paperless/settings.py:306 msgid "Dutch" msgstr "" -#: paperless/settings.py:304 +#: paperless/settings.py:307 msgid "French" msgstr "" -#: paperless/settings.py:305 +#: paperless/settings.py:308 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:306 +#: paperless/settings.py:309 msgid "Portuguese" msgstr "" -#: paperless/settings.py:307 +#: paperless/settings.py:310 msgid "Italian" msgstr "" -#: paperless/settings.py:308 +#: paperless/settings.py:311 msgid "Romanian" msgstr "" -#: paperless/settings.py:309 +#: paperless/settings.py:312 msgid "Russian" msgstr "" -#: paperless/settings.py:310 +#: paperless/settings.py:313 msgid "Spanish" msgstr "" -#: paperless/settings.py:311 +#: paperless/settings.py:314 msgid "Polish" msgstr "" -#: paperless/settings.py:312 +#: paperless/settings.py:315 msgid "Swedish" msgstr "" -#: paperless/urls.py:113 +#: paperless/urls.py:120 msgid "Paperless-ng administration" msgstr "" -#: paperless_mail/admin.py:25 -msgid "Filter" +#: paperless_mail/admin.py:15 +msgid "Authentication" msgstr "" -#: paperless_mail/admin.py:27 -msgid "Paperless will only process mails that match ALL of the filters given below." +#: paperless_mail/admin.py:18 +msgid "Advanced settings" msgstr "" #: paperless_mail/admin.py:37 -msgid "Actions" +msgid "Filter" msgstr "" #: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:49 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." msgstr "" -#: paperless_mail/admin.py:46 +#: paperless_mail/admin.py:58 msgid "Metadata" msgstr "" -#: paperless_mail/admin.py:48 +#: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." msgstr "" @@ -540,139 +548,151 @@ msgstr "" msgid "password" msgstr "" -#: paperless_mail/models.py:60 -msgid "mail rule" +#: paperless_mail/models.py:54 +msgid "character set" msgstr "" -#: paperless_mail/models.py:61 -msgid "mail rules" -msgstr "" - -#: paperless_mail/models.py:67 -msgid "Only process attachments." +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." msgstr "" #: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." msgstr "" -#: paperless_mail/models.py:78 +#: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" msgstr "" -#: paperless_mail/models.py:79 +#: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" msgstr "" -#: paperless_mail/models.py:80 +#: paperless_mail/models.py:88 msgid "Move to specified folder" msgstr "" -#: paperless_mail/models.py:81 +#: paperless_mail/models.py:89 msgid "Delete" msgstr "" -#: paperless_mail/models.py:88 +#: paperless_mail/models.py:96 msgid "Use subject as title" msgstr "" -#: paperless_mail/models.py:89 +#: paperless_mail/models.py:97 msgid "Use attachment filename as title" msgstr "" -#: paperless_mail/models.py:99 +#: paperless_mail/models.py:107 msgid "Do not assign a correspondent" msgstr "" -#: paperless_mail/models.py:101 +#: paperless_mail/models.py:109 msgid "Use mail address" msgstr "" -#: paperless_mail/models.py:103 +#: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" msgstr "" -#: paperless_mail/models.py:105 +#: paperless_mail/models.py:113 msgid "Use correspondent selected below" msgstr "" -#: paperless_mail/models.py:113 +#: paperless_mail/models.py:121 msgid "order" msgstr "" -#: paperless_mail/models.py:120 +#: paperless_mail/models.py:128 msgid "account" msgstr "" -#: paperless_mail/models.py:124 +#: paperless_mail/models.py:132 msgid "folder" msgstr "" -#: paperless_mail/models.py:128 -msgid "filter from" -msgstr "" - -#: paperless_mail/models.py:131 -msgid "filter subject" -msgstr "" - #: paperless_mail/models.py:134 -msgid "filter body" +msgid "Subfolders must be separated by dots." msgstr "" #: paperless_mail/models.py:138 -msgid "filter attachment filename" +msgid "filter from" msgstr "" -#: paperless_mail/models.py:140 -msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +#: paperless_mail/models.py:141 +msgid "filter subject" msgstr "" -#: paperless_mail/models.py:146 -msgid "maximum age" +#: paperless_mail/models.py:144 +msgid "filter body" msgstr "" #: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:158 msgid "Specified in days." msgstr "" -#: paperless_mail/models.py:151 +#: paperless_mail/models.py:161 msgid "attachment type" msgstr "" -#: paperless_mail/models.py:154 +#: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." msgstr "" -#: paperless_mail/models.py:159 +#: paperless_mail/models.py:169 msgid "action" msgstr "" -#: paperless_mail/models.py:165 +#: paperless_mail/models.py:175 msgid "action parameter" msgstr "" -#: paperless_mail/models.py:167 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action." +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." msgstr "" -#: paperless_mail/models.py:173 +#: paperless_mail/models.py:184 msgid "assign title from" msgstr "" -#: paperless_mail/models.py:183 +#: paperless_mail/models.py:194 msgid "assign this tag" msgstr "" -#: paperless_mail/models.py:191 +#: paperless_mail/models.py:202 msgid "assign this document type" msgstr "" -#: paperless_mail/models.py:195 +#: paperless_mail/models.py:206 msgid "assign correspondent from" msgstr "" -#: paperless_mail/models.py:205 +#: paperless_mail/models.py:216 msgid "assign this correspondent" msgstr "" From 8ac7eb59b9e969772948fe4102779f2d69be1ef1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 16 May 2021 23:01:41 +0200 Subject: [PATCH 786/898] File permissions --- compile-frontend.sh | 0 scripts/start_services.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 compile-frontend.sh mode change 100644 => 100755 scripts/start_services.sh diff --git a/compile-frontend.sh b/compile-frontend.sh old mode 100644 new mode 100755 diff --git a/scripts/start_services.sh b/scripts/start_services.sh old mode 100644 new mode 100755 From 18120fcff62a7667b3f28bd18207a04cb0f6e43d Mon Sep 17 00:00:00 2001 From: steviehs Date: Mon, 17 May 2021 09:07:31 +0200 Subject: [PATCH 787/898] Update setup.rst Added hint to upgrade pip first. --- docs/setup.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/setup.rst b/docs/setup.rst index 1b3973d89..42ef6759a 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -360,7 +360,11 @@ writing. Windows is not and will never be supported. Adjust as necessary if you configured different folders. 8. Install python requirements from the ``requirements.txt`` file. - It is up to you if you wish to use a virtual environment or not. + It is up to you if you wish to use a virtual environment or not. First you should update your pip, so it gets the actual packages. + + .. code:: shell-session + + sudo -Hu paperless pip3 install --upgrade pip .. code:: shell-session From a3a16e2ad7b131210f32c3b3c68054355417704f Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 18 May 2021 14:46:12 +0200 Subject: [PATCH 788/898] New Crowdin updates (#1026) --- src-ui/src/locale/messages.fr_FR.xlf | 6 +++--- src-ui/src/locale/messages.it_IT.xlf | 8 ++++---- src-ui/src/locale/messages.pt_PT.xlf | 6 +++--- src/locale/de_DE/LC_MESSAGES/django.po | 14 +++++++------- src/locale/fr_FR/LC_MESSAGES/django.po | 14 +++++++------- src/locale/it_IT/LC_MESSAGES/django.po | 14 +++++++------- src/locale/pt_PT/LC_MESSAGES/django.po | 14 +++++++------- src/locale/sv_SE/LC_MESSAGES/django.po | 14 +++++++------- 8 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 7cfbc9e5b..973d1ffaf 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Ajouter un élément Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Ajouter une étiquette Show all @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Pertinence Create new item diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index a8e107d04..3b2271a9b 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -1378,7 +1378,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 87 - Punteggio: + Rilevanza: Created: @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Aggiungi elemento Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Aggiungi tag Show all @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Rilevanza ricerca Create new item diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 1fe51b5f0..abcaddd21 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Adicionar item Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Adicionar etiqueta Show all @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Pesquisar pontuação Create new item diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 5a16065ec..104ad4ef4 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-05-16 11:15\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -470,11 +470,11 @@ msgstr "Paperless-ng Administration" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Authentifizierung" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Erweiterte Einstellungen" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "Kennwort" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Zeichensatz" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Der Zeichensatz, der bei der Kommunikation mit dem Mailserver verwendet werden soll, wie z.B. 'UTF-8' oder 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "Ordner" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Unterordner müssen durch Punkte getrennt werden." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "Parameter für Aktion" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Zusätzlicher Parameter für die oben ausgewählte Aktion, zum Beispiel der Zielordner für die Aktion \"In angegebenen Ordner verschieben\". Unterordner müssen durch Punkte getrennt werden." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/fr_FR/LC_MESSAGES/django.po b/src/locale/fr_FR/LC_MESSAGES/django.po index c0d0fd005..3ec137cc1 100644 --- a/src/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-05-17 13:13\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -470,11 +470,11 @@ msgstr "Administration de Paperless-ng" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Authentification" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Paramètres avancés" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "mot de passe" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "jeu de caractères" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Le jeu de caractères à utiliser lors de la communication avec le serveur de messagerie, par exemple 'UTF-8' ou 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "répertoire" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Les sous-dossiers doivent être séparés par des points." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "paramètre d'action" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Paramètre supplémentaire pour l'action sélectionnée ci-dessus, par exemple le dossier cible de l'action de déplacement vers un dossier. Les sous-dossiers doivent être séparés par des points." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/it_IT/LC_MESSAGES/django.po b/src/locale/it_IT/LC_MESSAGES/django.po index 16fb1843c..3d89a62b0 100644 --- a/src/locale/it_IT/LC_MESSAGES/django.po +++ b/src/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-05-17 11:06\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -470,11 +470,11 @@ msgstr "Amministrazione di Paperless-ng" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Autenticazione" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Impostazioni avanzate" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "password" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "set di caratteri" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Il set di caratteri da usare quando si comunica con il server di posta, come 'UTF-8' o 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "cartella" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Le sottocartelle devono essere separate da punti." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "parametro azione" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Parametro aggiuntivo per l'azione selezionata, ad esempio la cartella di destinazione per l'azione che sposta una cartella. Le sottocartelle devono essere separate da punti." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/pt_PT/LC_MESSAGES/django.po b/src/locale/pt_PT/LC_MESSAGES/django.po index f2e7d000d..4f4f25968 100644 --- a/src/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/locale/pt_PT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-05-16 20:45\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -470,11 +470,11 @@ msgstr "Administração do Paperless-ng" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Autenticação" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Definições avançadas" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "palavra-passe" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "conjunto de caracteres" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "O conjunto de caracteres a utilizar ao comunicar com um servidor de email, tal como 'UTF-8' ou 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "directoria" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Sub-pastas devem ser separadas por pontos." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "parâmetro de ação" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Parâmetros adicionais para a ação selecionada acima, isto é, a pasta alvo da ação mover para pasta. Sub-pastas devem ser separadas por pontos." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/sv_SE/LC_MESSAGES/django.po b/src/locale/sv_SE/LC_MESSAGES/django.po index 5cdcac02e..44baa7a90 100644 --- a/src/locale/sv_SE/LC_MESSAGES/django.po +++ b/src/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-05-16 11:15\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -470,11 +470,11 @@ msgstr "Paperless-ng administration" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Autentisering" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Avancerade inställningar" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "lösenord" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Teckenuppsättning" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Teckenuppsättningen som är tänkt att användas vid kommunikation med mailservern, exempelvis ’UTF-8’ eller ’US-ASCII’." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "mapp" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Undermappar måste vara separerade med punkter." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "åtgärdsparameter" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Ytterligare parametrar för åtgärden som valts ovan, d.v.s. målmappen för flytten till mapp-åtgärder. Undermappar måste vara separerade med punkter." #: paperless_mail/models.py:184 msgid "assign title from" From a26ba73707d8bc058c67ab6f98a6ecf2703a4e08 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 19:55:35 +0200 Subject: [PATCH 789/898] remove dead code --- src/documents/models.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/documents/models.py b/src/documents/models.py index cdd35a2f7..2a763c602 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -65,10 +65,6 @@ class MatchingModel(models.Model): class Correspondent(MatchingModel): - # This regex is probably more restrictive than it needs to be, but it's - # better safe than sorry. - SAFE_REGEX = re.compile(r"^[\w\- ,.']+$") - class Meta: ordering = ("name",) verbose_name = _("correspondent") From 3e42ceef38562b99d655287b842867e84f681ffc Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 19:56:01 +0200 Subject: [PATCH 790/898] ignore macOS specific files --- .../management/commands/document_consumer.py | 16 ++++++++++++- .../tests/test_management_consumer.py | 24 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index 969941af9..9f0ce79c3 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -36,8 +36,19 @@ def _tags_from_path(filepath): return tag_ids +def _is_ignored(filepath): + # https://github.com/jonaswinkler/paperless-ng/discussions/1037 + basename = os.path.basename(filepath) + if basename == ".DS_STORE": + return True + if basename.startswith("._"): + return True + + return False + + def _consume(filepath): - if os.path.isdir(filepath): + if os.path.isdir(filepath) or _is_ignored(filepath): return if not os.path.isfile(filepath): @@ -71,6 +82,9 @@ def _consume(filepath): def _consume_wait_unmodified(file): + if _is_ignored(file): + return + logger.debug(f"Waiting for file {file} to remain unmodified") mtime = -1 current_try = 0 diff --git a/src/documents/tests/test_management_consumer.py b/src/documents/tests/test_management_consumer.py index 2111705e0..ec5a8dc0b 100644 --- a/src/documents/tests/test_management_consumer.py +++ b/src/documents/tests/test_management_consumer.py @@ -60,10 +60,10 @@ class ConsumerMixin: super(ConsumerMixin, self).tearDown() - def wait_for_task_mock_call(self): + def wait_for_task_mock_call(self, excpeted_call_count=1): n = 0 while n < 100: - if self.task_mock.call_count > 0: + if self.task_mock.call_count >= excpeted_call_count: # give task_mock some time to finish and raise errors sleep(1) return @@ -202,6 +202,26 @@ class TestConsumer(DirectoriesMixin, ConsumerMixin, TransactionTestCase): self.assertRaises(CommandError, call_command, 'document_consumer', '--oneshot') + def test_mac_write(self): + self.task_mock.side_effect = self.bogus_task + + self.t_start() + + shutil.copy(self.sample_file, os.path.join(self.dirs.consumption_dir, ".DS_STORE")) + shutil.copy(self.sample_file, os.path.join(self.dirs.consumption_dir, "my_file.pdf")) + shutil.copy(self.sample_file, os.path.join(self.dirs.consumption_dir, "._my_file.pdf")) + shutil.copy(self.sample_file, os.path.join(self.dirs.consumption_dir, "my_second_file.pdf")) + shutil.copy(self.sample_file, os.path.join(self.dirs.consumption_dir, "._my_second_file.pdf")) + + sleep(5) + + self.wait_for_task_mock_call(excpeted_call_count=2) + + self.assertEqual(2, self.task_mock.call_count) + + fnames = [os.path.basename(args[1]) for args, _ in self.task_mock.call_args_list] + self.assertCountEqual(fnames, ["my_file.pdf", "my_second_file.pdf"]) + @override_settings(CONSUMER_POLLING=1, CONSUMER_POLLING_DELAY=1, CONSUMER_POLLING_RETRY_COUNT=20) class TestConsumerPolling(TestConsumer): From 5d5afb210a76b9cae520130140038fe871d82883 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 20:02:47 +0200 Subject: [PATCH 791/898] delete macOS specific files --- src/documents/consumer.py | 6 ++++++ src/documents/tests/test_consumer.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 8c888259f..b6a77cd9c 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -333,6 +333,12 @@ class Consumer(LoggingMixin): self.log("debug", "Deleting file {}".format(self.path)) os.unlink(self.path) + # https://github.com/jonaswinkler/paperless-ng/discussions/1037 + shadow_file = os.path.join(os.path.dirname(self.path), "._" + os.path.basename(self.path)) + if os.path.isfile(shadow_file): + self.log("debug", "Deleting file {}".format(shadow_file)) + os.unlink(shadow_file) + except Exception as e: self._fail( str(e), diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 44effd39e..b1e0375ed 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -317,6 +317,25 @@ class TestConsumer(DirectoriesMixin, TestCase): self._assert_first_last_send_progress() + @override_settings(PAPERLESS_FILENAME_FORMAT=None) + def testDeleteMacFiles(self): + # https://github.com/jonaswinkler/paperless-ng/discussions/1037 + + filename = self.get_test_file() + shadowFile = os.path.join(os.path.dirname(filename), "._" + os.path.basename(filename)) + + shutil.copy(filename, shadowFile) + + document = self.consumer.try_consume_file(filename) + + self.assertTrue(os.path.isfile( + document.source_path + )) + + self.assertFalse(os.path.isfile(shadowFile)) + self.assertFalse(os.path.isfile(filename)) + + def testOverrideFilename(self): filename = self.get_test_file() override_filename = "Statement for November.pdf" From 76d2e51accd4967ba832d677b66412d512e25ea7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 20:02:56 +0200 Subject: [PATCH 792/898] fix file permissions --- scripts/start_services.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/start_services.sh diff --git a/scripts/start_services.sh b/scripts/start_services.sh old mode 100644 new mode 100755 From 56bbe644b816a481f25d4fe2535e9ad90fa7eb1a Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 20:26:12 +0200 Subject: [PATCH 793/898] codestyle --- src/documents/consumer.py | 5 ++++- src/documents/tests/test_consumer.py | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index b6a77cd9c..39275cee3 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -334,7 +334,10 @@ class Consumer(LoggingMixin): os.unlink(self.path) # https://github.com/jonaswinkler/paperless-ng/discussions/1037 - shadow_file = os.path.join(os.path.dirname(self.path), "._" + os.path.basename(self.path)) + shadow_file = os.path.join( + os.path.dirname(self.path), + "._" + os.path.basename(self.path)) + if os.path.isfile(shadow_file): self.log("debug", "Deleting file {}".format(shadow_file)) os.unlink(shadow_file) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index b1e0375ed..514c3ca19 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -322,9 +322,11 @@ class TestConsumer(DirectoriesMixin, TestCase): # https://github.com/jonaswinkler/paperless-ng/discussions/1037 filename = self.get_test_file() - shadowFile = os.path.join(os.path.dirname(filename), "._" + os.path.basename(filename)) + shadow_file = os.path.join(self.dirs.scratch_dir, "._sample.pdf") - shutil.copy(filename, shadowFile) + shutil.copy(filename, shadow_file) + + self.assertTrue(os.path.isfile(shadow_file)) document = self.consumer.try_consume_file(filename) @@ -332,7 +334,7 @@ class TestConsumer(DirectoriesMixin, TestCase): document.source_path )) - self.assertFalse(os.path.isfile(shadowFile)) + self.assertFalse(os.path.isfile(shadow_file)) self.assertFalse(os.path.isfile(filename)) From 8ddf16643c858f2c0c389543325a5d68dce123ad Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 22:05:23 +0200 Subject: [PATCH 794/898] Fix file permissions --- docker/docker-entrypoint.sh | 0 docker/docker-prepare.sh | 0 docker/install_management_commands.sh | 0 docker/management_script.sh | 0 install-paperless-ng.sh | 0 scripts/post-consumption-example.sh | 0 test.py | 40 --------------------------- 7 files changed, 40 deletions(-) mode change 100644 => 100755 docker/docker-entrypoint.sh mode change 100644 => 100755 docker/docker-prepare.sh mode change 100644 => 100755 docker/install_management_commands.sh mode change 100644 => 100755 docker/management_script.sh mode change 100644 => 100755 install-paperless-ng.sh mode change 100644 => 100755 scripts/post-consumption-example.sh delete mode 100644 test.py diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh old mode 100644 new mode 100755 diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh old mode 100644 new mode 100755 diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh old mode 100644 new mode 100755 diff --git a/docker/management_script.sh b/docker/management_script.sh old mode 100644 new mode 100755 diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh old mode 100644 new mode 100755 diff --git a/scripts/post-consumption-example.sh b/scripts/post-consumption-example.sh old mode 100644 new mode 100755 diff --git a/test.py b/test.py deleted file mode 100644 index 18a97bacb..000000000 --- a/test.py +++ /dev/null @@ -1,40 +0,0 @@ -import ocrmypdf -from ocrmypdf import ocr, hookimpl -from ocrmypdf._concurrent import NullProgressBar - - -def get_unified_progress(self, desc, current, total): - steps = ["Scanning contents", "OCR", "PDF/A conversion"] - if desc in steps: - index = steps.index(desc) - return (index / len(steps)) + (current / total) / len(steps) - else: - return 0 - - -class MyProgressBar: - - # __enter__, __exit__ and others removed for simplicity - - def update(self, *args, **kwargs): - pass - # i'd need to call MyOcrClass.progress() here. - - -@hookimpl -def get_progressbar_class(*args, **kwargs): - return MyProgressBar - - -class MyOcrClass: - - def progress(self, current_p, max_p): - # send progress over web sockets, *requires* self reference - pass - - def run(self): - ocrmypdf.ocr("test.pdf", "test_out.pdf", skip_text=True, jobs=1, plugins="test") - - -if __name__ == '__main__': - MyOcrClass().run() From 732a843975e3529737e7c1f1d97c626f68d70a40 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 22:26:51 +0200 Subject: [PATCH 795/898] improved docker startup time --- docker/docker-entrypoint.sh | 80 +++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 26df5f31a..13bc56b85 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -4,37 +4,41 @@ set -e # Source: https://github.com/sameersbn/docker-gitlab/ map_uidgid() { - USERMAP_ORIG_UID=$(id -u paperless) - USERMAP_ORIG_GID=$(id -g paperless) - USERMAP_NEW_UID=${USERMAP_UID:-$USERMAP_ORIG_UID} - USERMAP_NEW_GID=${USERMAP_GID:-${USERMAP_ORIG_GID:-$USERMAP_NEW_UID}} - if [[ ${USERMAP_NEW_UID} != "${USERMAP_ORIG_UID}" || ${USERMAP_NEW_GID} != "${USERMAP_ORIG_GID}" ]]; then - echo "Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID:$USERMAP_NEW_GID" - usermod -u "${USERMAP_NEW_UID}" paperless - groupmod -o -g "${USERMAP_NEW_GID}" paperless - fi + USERMAP_ORIG_UID=$(id -u paperless) + USERMAP_ORIG_GID=$(id -g paperless) + USERMAP_NEW_UID=${USERMAP_UID:-$USERMAP_ORIG_UID} + USERMAP_NEW_GID=${USERMAP_GID:-${USERMAP_ORIG_GID:-$USERMAP_NEW_UID}} + if [[ ${USERMAP_NEW_UID} != "${USERMAP_ORIG_UID}" || ${USERMAP_NEW_GID} != "${USERMAP_ORIG_GID}" ]]; then + echo "Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID:$USERMAP_NEW_GID" + usermod -u "${USERMAP_NEW_UID}" paperless + groupmod -o -g "${USERMAP_NEW_GID}" paperless + fi } initialize() { map_uidgid for dir in export data data/index media media/documents media/documents/originals media/documents/thumbnails; do - if [[ ! -d "../$dir" ]] - then - echo "creating directory ../$dir" + if [[ ! -d "../$dir" ]]; then + echo "Creating directory ../$dir" mkdir ../$dir fi done - echo "creating directory /tmp/paperless" + echo "Creating directory /tmp/paperless" mkdir -p /tmp/paperless - set +e - chown -R paperless:paperless ../ + set +e + CURRENT_USER=$(stat -c '%U' ../) + CURRENT_GROUP=$(stat -c '%G' ../) + if [[ ${CURRENT_USER} != "paperless" || ${CURRENT_GROUP} != "paperless" ]] ; then + echo "Adjusting permissions of paperless files. This may take a while." + chown -R paperless:paperless ../ + fi chown -R paperless:paperless /tmp/paperless - set -e + set -e - gosu paperless /sbin/docker-prepare.sh + gosu paperless /sbin/docker-prepare.sh } install_languages() { @@ -50,35 +54,35 @@ install_languages() { apt-get update for lang in "${langs[@]}"; do - pkg="tesseract-ocr-$lang" - # English is installed by default - #if [[ "$lang" == "eng" ]]; then - # continue - #fi + pkg="tesseract-ocr-$lang" + # English is installed by default + #if [[ "$lang" == "eng" ]]; then + # continue + #fi - if dpkg -s $pkg &> /dev/null; then - echo "package $pkg already installed!" - continue - fi + if dpkg -s $pkg &>/dev/null; then + echo "Package $pkg already installed!" + continue + fi - if ! apt-cache show $pkg &> /dev/null; then - echo "package $pkg not found! :(" - continue - fi + if ! apt-cache show $pkg &>/dev/null; then + echo "Package $pkg not found! :(" + continue + fi - echo "Installing package $pkg..." - if ! apt-get -y install "$pkg" &> /dev/null; then - echo "Could not install $pkg" - exit 1 - fi - done + echo "Installing package $pkg..." + if ! apt-get -y install "$pkg" &>/dev/null; then + echo "Could not install $pkg" + exit 1 + fi + done } echo "Paperless-ng docker container starting..." # Install additional languages if specified -if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then - install_languages "$PAPERLESS_OCR_LANGUAGES" +if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then + install_languages "$PAPERLESS_OCR_LANGUAGES" fi initialize From a540e58ef2929d65ccf22e392bd60a6cbc54f6db Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 22:40:56 +0200 Subject: [PATCH 796/898] changelog and version bump --- docs/changelog.rst | 8 ++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 10f99e4b5..c1a7fb5b8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,14 @@ Changelog ********* +paperless-ng 1.4.4 +################## + +* Drastically increased the startup time of the docker container. The startup script adjusts the file permissions of all data only if changes are required. +* Paperless mail: Added ability to specify character set for each server. +* Updated translations. +* Document consumption: Ignore Mac OS specific files such as ``.DS_STORE`` and ``._XXXXX.pdf``. + paperless-ng 1.4.3 ################## diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 01ab0dd6c..05eee6dd6 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + "api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.4.3", + version: "1.4.4", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:"), webSocketBaseUrl: base_url.pathname + "ws/", diff --git a/src/paperless/version.py b/src/paperless/version.py index dc7411505..00a47af2d 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 4, 3) +__version__ = (1, 4, 4) From 0f960755ae765be362d48ed5f9e6f7c760b493ae Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 22:57:52 +0200 Subject: [PATCH 797/898] catch another exception regarding classifier loading --- src/documents/classifier.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 664c00222..0069781b5 100644 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -34,7 +34,9 @@ def load_classifier(): try: classifier.load() - except (EOFError, IncompatibleClassifierVersionError) as e: + except (EOFError, + IncompatibleClassifierVersionError, + pickle.UnpicklingError): # there's something wrong with the model file. logger.exception( f"Unrecoverable error while loading document " @@ -42,9 +44,9 @@ def load_classifier(): ) os.unlink(settings.MODEL_FILE) classifier = None - except OSError as e: - logger.error( - f"Error while loading document classification model: {str(e)}" + except OSError: + logger.exception( + f"Error while loading document classification model" ) classifier = None From 31ae398abaa0f5ac3d15225e6cac6fdf661ee2b1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 23:00:03 +0200 Subject: [PATCH 798/898] changelog --- docs/changelog.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index c1a7fb5b8..eeabccd22 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,10 +8,11 @@ Changelog paperless-ng 1.4.4 ################## -* Drastically increased the startup time of the docker container. The startup script adjusts the file permissions of all data only if changes are required. -* Paperless mail: Added ability to specify character set for each server. -* Updated translations. +* Drastically decreased the startup time of the docker container. The startup script adjusts file permissions of all data only if changes are required. +* Paperless mail: Added ability to specify the character set for each server. * Document consumption: Ignore Mac OS specific files such as ``.DS_STORE`` and ``._XXXXX.pdf``. +* Fixed an issue with the automatic matching algorithm that prevents paperless from consuming new files. +* Updated translations. paperless-ng 1.4.3 ################## From 7594048125a63a9ae43e4f4a3935fe13165388cc Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 23:00:51 +0200 Subject: [PATCH 799/898] New Crowdin updates (#1043) --- src-ui/src/locale/messages.nl_NL.xlf | 6 +++--- src/locale/nl_NL/LC_MESSAGES/django.po | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 0ccd34d21..e901e802b 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Item toevoegen Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Label toevoegen Show all @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Zoekscore Create new item diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 379b07f82..8c64f5eaa 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-05-19 20:48\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -470,11 +470,11 @@ msgstr "Paperless-ng administratie" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Authenticatie" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Geavanceerde instellingen" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "wachtwoord" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Tekenset" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Tekenset die gebruikt moet worden bij communicatie met de mailserver, zoals 'UTF-8' of 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "map" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Submappen moeten gescheiden worden door punten." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "actie parameters" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Extra parameter voor de hierboven geselecteerde actie, bijvoorbeeld: de doelmap voor de verplaats naar map actie. Submappen moeten gescheiden worden door punten." #: paperless_mail/models.py:184 msgid "assign title from" From ac9bd6c908234bf320f4ac900c2dc9d84451e83c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 19 May 2021 23:11:24 +0200 Subject: [PATCH 800/898] better exception handling --- src/documents/classifier.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 0069781b5..2895c788a 100644 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -13,6 +13,10 @@ class IncompatibleClassifierVersionError(Exception): pass +class ClassifierModelCorruptError(Exception): + pass + + logger = logging.getLogger("paperless.classifier") @@ -34,9 +38,8 @@ def load_classifier(): try: classifier.load() - except (EOFError, - IncompatibleClassifierVersionError, - pickle.UnpicklingError): + except (ClassifierModelCorruptError, + IncompatibleClassifierVersionError): # there's something wrong with the model file. logger.exception( f"Unrecoverable error while loading document " @@ -46,7 +49,12 @@ def load_classifier(): classifier = None except OSError: logger.exception( - f"Error while loading document classification model" + f"IO error while loading document classification model" + ) + classifier = None + except Exception: + logger.exception( + f"Unknown error while loading document classification model" ) classifier = None @@ -76,13 +84,16 @@ class DocumentClassifier(object): raise IncompatibleClassifierVersionError( "Cannor load classifier, incompatible versions.") else: - self.data_hash = pickle.load(f) - self.data_vectorizer = pickle.load(f) - self.tags_binarizer = pickle.load(f) + try: + self.data_hash = pickle.load(f) + self.data_vectorizer = pickle.load(f) + self.tags_binarizer = pickle.load(f) - self.tags_classifier = pickle.load(f) - self.correspondent_classifier = pickle.load(f) - self.document_type_classifier = pickle.load(f) + self.tags_classifier = pickle.load(f) + self.correspondent_classifier = pickle.load(f) + self.document_type_classifier = pickle.load(f) + except Exception: + raise ClassifierModelCorruptError() def save(self): with open(settings.MODEL_FILE, "wb") as f: From 75ad6c7fd530ee77afc35751a7ddc77e5a5a208d Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 21 May 2021 15:27:10 +0200 Subject: [PATCH 801/898] update frontend dependencies --- src-ui/package-lock.json | 17911 +++++++++++++++++++++++++++++++++++-- 1 file changed, 17317 insertions(+), 594 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 54c99b1b3..b1c968aae 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -1,16 +1,16841 @@ { "name": "paperless-ui", "version": "0.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "paperless-ui", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "~10.1.5", + "@angular/common": "~10.1.5", + "@angular/compiler": "~10.1.5", + "@angular/core": "~10.1.5", + "@angular/forms": "~10.1.5", + "@angular/localize": "~10.1.5", + "@angular/platform-browser": "~10.1.5", + "@angular/platform-browser-dynamic": "~10.1.5", + "@angular/router": "~10.1.5", + "@ng-bootstrap/ng-bootstrap": "^8.0.4", + "@ng-select/ng-select": "^5.0.9", + "bootstrap": "^4.5.0", + "file-saver": "^2.0.5", + "ng-bootstrap": "^1.6.3", + "ng2-pdf-viewer": "^6.3.2", + "ngx-color": "^6.2.0", + "ngx-cookie-service": "^10.1.1", + "ngx-file-drop": "^10.0.0", + "ngx-infinite-scroll": "^9.1.0", + "rxjs": "~6.6.0", + "tslib": "^2.0.0", + "uuid": "^8.3.1", + "zone.js": "~0.10.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^0.1002.0", + "@angular/cli": "~10.1.5", + "@angular/compiler-cli": "~10.1.5", + "@types/jasmine": "~3.5.0", + "@types/jasminewd2": "~2.0.3", + "@types/node": "^12.11.1", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.6.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~5.0.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage-istanbul-reporter": "~3.0.2", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.5.0", + "protractor": "~7.0.0", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "~4.0.2" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz", + "integrity": "sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "10.2.3", + "rxjs": "6.6.2" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular": { + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.3.tgz", + "integrity": "sha512-NjM8H2AUpLjcf+3mKYd99VbFgN4kwT++IBmR9BRQkqOZ4fD63g8jLPzC0KTsWGIVkZtR9Qc88YW/5sC8C3SVFQ==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1002.3", + "@angular-devkit/build-optimizer": "0.1002.3", + "@angular-devkit/build-webpack": "0.1002.3", + "@angular-devkit/core": "10.2.3", + "@babel/core": "7.11.1", + "@babel/generator": "7.11.0", + "@babel/plugin-transform-runtime": "7.11.0", + "@babel/preset-env": "7.11.0", + "@babel/runtime": "7.11.2", + "@babel/template": "7.10.4", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "10.2.3", + "autoprefixer": "9.8.6", + "babel-loader": "8.1.0", + "browserslist": "^4.9.1", + "cacache": "15.0.5", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.0", + "copy-webpack-plugin": "6.0.3", + "core-js": "3.6.4", + "css-loader": "4.2.2", + "cssnano": "4.1.10", + "file-loader": "6.0.0", + "find-cache-dir": "3.3.1", + "glob": "7.1.6", + "jest-worker": "26.3.0", + "karma-source-map-support": "1.4.0", + "less-loader": "6.2.0", + "license-webpack-plugin": "2.3.0", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "0.10.0", + "minimatch": "3.0.4", + "open": "7.2.0", + "parse5": "6.0.1", + "parse5-htmlparser2-tree-adapter": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "7.0.32", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "4.0.1", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "3.1.2", + "rimraf": "3.0.2", + "rollup": "2.26.5", + "rxjs": "6.6.2", + "sass": "1.26.10", + "sass-loader": "10.0.1", + "semver": "7.3.2", + "source-map": "0.7.3", + "source-map-loader": "1.0.2", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.3.3", + "style-loader": "1.2.1", + "stylus": "0.54.8", + "stylus-loader": "3.0.2", + "terser": "5.3.0", + "terser-webpack-plugin": "4.1.0", + "tree-kill": "1.2.2", + "webpack": "4.44.1", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.11.0", + "webpack-merge": "4.2.2", + "webpack-sources": "1.4.3", + "webpack-subresource-integrity": "1.4.1", + "worker-plugin": "5.0.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^10.0.0", + "@angular/localize": "^10.0.0", + "ng-packagr": "^10.0.0", + "typescript": ">=3.9 < 4.1" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "ng-packagr": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/build-optimizer": { + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.3.tgz", + "integrity": "sha512-/0KbxVmmvt3S7ghk5zUH8/PWjW8ki0uSmPsnjopY8jRgAxuXN/7PXZbqswItNlUBoEj34hj2UADBUJVic7fcnQ==", + "dev": true, + "dependencies": { + "loader-utils": "2.0.0", + "source-map": "0.7.3", + "tslib": "2.0.1", + "typescript": "4.0.2", + "webpack-sources": "1.4.3" + }, + "bin": { + "build-optimizer": "src/build-optimizer/cli.js" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-optimizer/node_modules/tslib": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "dev": true + }, + "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.3.tgz", + "integrity": "sha512-ngvPPA3VuYGYV275PM6X0pVI0Nl/uWx4eu2S6SUFe6mniN4BQkUHAyeCUMIbM3hkau/NAcF9xUs5AvZ9GDpvPw==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1002.3", + "@angular-devkit/core": "10.2.3", + "rxjs": "6.6.2" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^4.6.0", + "webpack-dev-server": "^3.1.4" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "dependencies": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/schematics": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.1.7.tgz", + "integrity": "sha512-nk9RXA09b+7uq59HS/gyztNzUGHH/eQAUQhWHdDYSCG6v1lhJVCKx1HgDPELVxmeq9f+HArkAW7Y7c+ccdNQ7A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "10.1.7", + "ora": "5.0.0", + "rxjs": "6.6.2" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "dependencies": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular/animations": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.1.5.tgz", + "integrity": "sha512-RbUIluxgE5pSWWdODlcEAQuRqc/D1A2v275zBsMFjwJg3/cZl/z+RWcFJedHpJHEtbz7Aay1UWHu9jhXfA8elg==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/cli": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.1.7.tgz", + "integrity": "sha512-0tbeHnPIzSV/z+KlZT7N2J1yMnwQi4xIxvbsANrLjoAxNssse84i9BDdMZYsPoV8wbzcDhFOtt5KmfTO0GIeYQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@angular-devkit/architect": "0.1001.7", + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "@schematics/angular": "10.1.7", + "@schematics/update": "0.1001.7", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.1.1", + "ini": "1.3.5", + "inquirer": "7.3.3", + "npm-package-arg": "8.0.1", + "npm-pick-manifest": "6.1.0", + "open": "7.2.0", + "pacote": "9.5.12", + "read-package-tree": "5.3.1", + "rimraf": "3.0.2", + "semver": "7.3.2", + "symbol-observable": "1.2.0", + "universal-analytics": "0.4.23", + "uuid": "8.3.0" + }, + "bin": { + "ng": "bin/ng" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1001.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1001.7.tgz", + "integrity": "sha512-uFYIvMdewU44GbIyRfsUHNMLkx+C0kokpnj7eH5NbJfbyFpCfd3ijBHh+voPdPsDRWs9lLgjbxfHpswSPj4D8w==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "10.1.7", + "rxjs": "6.6.2" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "dependencies": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@angular/cli/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@angular/cli/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular/cli/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular/cli/node_modules/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@angular/common": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.1.5.tgz", + "integrity": "sha512-xo10mSQYuf6x1XrnTfwt3Rs7JtSMkSyrJtAS/vNQKdBP/8zmn6pP9zRpp7vhQ5qF+W3HN8rPLb+YI2F6uaGjBg==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/compiler": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.1.5.tgz", + "integrity": "sha512-3LyFkEzs6P6YYKkE/6E4PasMd58EBddOt9kR9kPmj9Atv/BLY3nc5RSWkOe4rK4GnBVP+ByzQiT9Fn5CiQnG/g==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.1.5.tgz", + "integrity": "sha512-AJ4eOHUxgDdfq/EagUlhJ6HaNlHajtmPkhXp2HmNMNN1nPN55VZSvN43Co2gdAHiFENqsTNlnQH630aXaDyVbQ==", + "dev": true, + "dependencies": { + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "fs-extra": "4.0.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^6.3.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.0.0", + "yargs": "15.3.0" + }, + "bin": { + "ivy-ngcc": "ngcc/main-ivy-ngcc.js", + "ng-xi18n": "src/extract_i18n.js", + "ngc": "src/main.js", + "ngcc": "ngcc/main-ngcc.js" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@angular/compiler-cli/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/yargs": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", + "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@angular/core": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.1.5.tgz", + "integrity": "sha512-B8j1B5vkBmzyan78kMJhw7dfhe7znmujbeDU7qRgRcIllc9pVJv7D133Yze6JFiLVg21PfyFYs8FBJNeq39hxQ==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/forms": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.1.5.tgz", + "integrity": "sha512-fkXKCwXL0XeFMUkmzJpm+FHYrv1CCfFGxYEBQ/bzfd3Op+dFJqEPiOwK3wG943Y09THday6H509RwwEIyF/4yw==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/localize": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-10.1.5.tgz", + "integrity": "sha512-wEiF9lLWulTwGFqFJ4dJ+mBiyylE0amJR4leUGHKu6iwjPUQUBCqReCapfvLLTfgt3nbq7DtVqlqxj7KW7w+xg==", + "dependencies": { + "@babel/core": "7.8.3", + "glob": "7.1.2", + "yargs": "15.3.0" + }, + "bin": { + "localize-extract": "src/tools/src/extract/main.js", + "localize-translate": "src/tools/src/translate/main.js" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@angular/localize/node_modules/@babel/core": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/localize/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@angular/localize/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@angular/localize/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular/localize/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@angular/localize/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/@angular/localize/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@angular/localize/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@angular/localize/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular/localize/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/yargs": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", + "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular/localize/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@angular/platform-browser": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.1.5.tgz", + "integrity": "sha512-qMAoPHt6dgXMtieI4zx/s5yX7FFRRUDp1R4GMBCZHPN3p66WdEVxBJo4p5RWhZJioXpUwKz8Xvc+Rrh7r0KDBA==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.5.tgz", + "integrity": "sha512-wxHm1UFCtB+oU+IJ6pACGmjO9H8KVzJOLYL5hp2w0k8s7k7Zg73f6BdRgWWEEYv6uYIfF77qtKwgbH0X5H9S+w==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/router": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-10.1.5.tgz", + "integrity": "sha512-tY88ZzoBrc9K67wi5V1NLnurd3r9bYR2csZ6/zJeOE+Vdxz9ChSaglgh9T0vQdbVEAjVGPP5QtYaFO2Xv4qOIg==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "dependencies": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.12.0", + "semver": "^5.5.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "node_modules/@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.1", + "@babel/types": "^7.12.1", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "node_modules/@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.1", + "@babel/types": "^7.12.1", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-replace-supers/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-simple-access/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", + "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", + "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "node_modules/@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/traverse": { + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", + "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", + "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "dependencies": { + "@babel/types": "^7.11.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/traverse/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/types": { + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", + "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", + "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "node_modules/@ng-bootstrap/ng-bootstrap": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-8.0.4.tgz", + "integrity": "sha512-EdxTwOPOtlvfnwrglPniulmzdnXdXH3lTGaGAY1HrYRvdtGg6wicRvl+BvwVE/3Qik5NPkOWMVghUHpv3evIYg==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@ng-select/ng-select": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-5.0.9.tgz", + "integrity": "sha512-YZeSAiS8/Nx/eHZJPmOOYL8YmcvSq+dr1P8WIrsKmRA7mueorBpPc5xlUj+nLQbpLtsiQvdWDQspf/ykOvD/lA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.3.tgz", + "integrity": "sha512-h7JJMMca1bHY/0Prpxu2P3bvnC6pUKmBAfqN0h0HaRN9LTU9IDWtDRTIL1Aqhs/tcTUio/DowVKnVi2CWHAOmg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "10.2.3", + "enhanced-resolve": "4.3.0", + "webpack-sources": "1.4.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^10.0.0", + "typescript": ">=3.9 < 4.1", + "webpack": "^4.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@scarf/scarf": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.0.tgz", + "integrity": "sha512-b2iE8kjjzzUo2WZ0xuE2N77kfnTds7ClrDxcz3Atz7h2XrNVoAPUoT75i7CY0st5x++70V91Y+c6RpBX9MX7Jg==", + "hasInstallScript": true + }, + "node_modules/@schematics/angular": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.1.7.tgz", + "integrity": "sha512-jcyLWDSbpgHvB/BNVSsV4uLJpC2qRx9Z5+rcQpBB1BerqIPS/1cTQg7TViHZtcqnZqWvzHR3jfqzDUSOCZpuJQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "jsonc-parser": "2.3.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "dependencies": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@schematics/angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@schematics/update": { + "version": "0.1001.7", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1001.7.tgz", + "integrity": "sha512-q7g/9YaAiqyWxYmUXiSWxB9xwc30xL5iUWY3Rp2LXSH6ihaRsLabmNr743R2YQmMj2Ss+9OhILHmj7nMmqODgw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "npm-package-arg": "^8.0.0", + "pacote": "9.5.12", + "semver": "7.3.2", + "semver-intersect": "1.4.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/update/node_modules/@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "dependencies": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/update/node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@schematics/update/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.5.14.tgz", + "integrity": "sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w==", + "dev": true + }, + "node_modules/@types/jasminewd2": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz", + "integrity": "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==", + "dev": true, + "dependencies": { + "@types/jasmine": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "12.12.64", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.64.tgz", + "integrity": "sha512-UV1/ZJMC+HcP902wWdpC43cAcGu0IQk/I5bXjP2aSuCjsk3cE74mDvFrLKga7oDC170ugOAYBwfT4DSQW3akDA==", + "dev": true + }, + "node_modules/@types/pdfjs-dist": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/pdfjs-dist/-/pdfjs-dist-2.1.7.tgz", + "integrity": "sha512-nQIwcPUhkAIyn7x9NS0lR/qxYfd5unRtfGkMjvpgF4Sh28IXftRymaNmFKTTdejDNY25NDGSIyjwj/BRwAPexg==" + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "node_modules/@types/selenium-webdriver": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", + "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==", + "dev": true + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/webpack-sources": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", + "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "node_modules/agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "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" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "dependencies": { + "type-fest": "^0.11.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "dependencies": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "node_modules/arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "dev": true + }, + "node_modules/axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "dependencies": { + "ast-types-flow": "0.0.7" + } + }, + "node_modules/babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 6.9" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "node_modules/blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "blocking-proxy": "built/lib/bin.js" + }, + "engines": { + "node": ">=6.9.x" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/bootstrap": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.2.tgz", + "integrity": "sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserstack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.0.tgz", + "integrity": "sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw==", + "dev": true, + "dependencies": { + "https-proxy-agent": "^2.2.1" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dev": true, + "dependencies": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001150", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz", + "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==", + "dev": true + }, + "node_modules/canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chrome-trace-event/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/codelyzer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", + "integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==", + "dev": true, + "dependencies": { + "@angular/compiler": "9.0.0", + "@angular/core": "9.0.0", + "app-root-path": "^3.0.0", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "rxjs": "^6.5.3", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2", + "tslib": "^1.10.0", + "zone.js": "~0.10.3" + } + }, + "node_modules/codelyzer/node_modules/@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", + "dev": true + }, + "node_modules/codelyzer/node_modules/@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", + "dev": true + }, + "node_modules/codelyzer/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codelyzer/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/codelyzer/node_modules/tslib": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", + "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "node_modules/compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "dependencies": { + "arity-n": "^1.0.4" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", + "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", + "dev": true, + "dependencies": { + "cacache": "^15.0.4", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.1", + "schema-utils": "^2.7.0", + "serialize-javascript": "^4.0.0", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "dependencies": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-loader": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.2.tgz", + "integrity": "sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "dependencies": { + "css": "^2.0.0" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "dependencies": { + "through": "X.X.X" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/date-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.583", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz", + "integrity": "sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io-client": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/file-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", + "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-binary2/node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "dependencies": { + "agent-base": "4", + "debug": "3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "dependencies": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "dependencies": { + "import-from": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", + "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "dependencies": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "bin": { + "jasmine": "bin/jasmine.js" + } + }, + "node_modules/jasmine-core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.6.0.tgz", + "integrity": "sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw==", + "dev": true + }, + "node_modules/jasmine-spec-reporter": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.2.tgz", + "integrity": "sha512-6gP1LbVgJ+d7PKksQBc2H0oDGNRQI3gKUsWlswKaQ2fif9X5gzhQcgM5+kiJGCQVurOG09jqNhk7payggyp5+g==", + "dev": true, + "dependencies": { + "colors": "1.4.0" + } + }, + "node_modules/jasmine/node_modules/jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + }, + "node_modules/jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true, + "engines": { + "node": ">= 6.9.x" + } + }, + "node_modules/jest-worker": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", + "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz", + "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jszip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/karma": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/karma/-/karma-5.0.9.tgz", + "integrity": "sha512-dUA5z7Lo7G4FRSe1ZAXqOINEEWxmCjDBbfRBmU/wYlSMwxUQJP/tEEP90yJt3Uqo03s9rCgVnxtlfq+uDhxSPg==", + "dev": true, + "dependencies": { + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.0.0", + "colors": "^1.4.0", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "flatted": "^2.0.2", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.6", + "lodash": "^4.17.15", + "log4js": "^6.2.1", + "mime": "^2.4.5", + "minimatch": "^3.0.4", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^2.3.0", + "source-map": "^0.6.1", + "tmp": "0.2.1", + "ua-parser-js": "0.7.21", + "yargs": "^15.3.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage-istanbul-reporter": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^3.0.2", + "minimatch": "^3.0.4" + } + }, + "node_modules/karma-jasmine": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", + "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", + "dev": true, + "dependencies": { + "jasmine-core": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.4.tgz", + "integrity": "sha512-PtilRLno5O6wH3lDihRnz0Ba8oSn0YUJqKjjux1peoYGwo0AQqrWRbdWk/RLzcGlb+onTyXAnHl6M+Hu3UxG/Q==", + "dev": true + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/karma/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/karma/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/karma/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/karma/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", + "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "dev": true, + "dependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "tslib": "^1.10.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "image-size": "~0.5.0", + "native-request": "^1.0.5", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", + "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "less": "^3.11.3", + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/less/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "dependencies": { + "leven": "^3.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/license-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w==", + "dev": true, + "dependencies": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "dev": true, + "dependencies": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "dev": true, + "dependencies": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", + "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", + "engines": { + "node": "*" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/native-request": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", + "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "dev": true, + "optional": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/ng-bootstrap": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-1.6.3.tgz", + "integrity": "sha1-1B/UIVTAWTQiy4PEc6OCiqdSW/U=", + "dependencies": { + "moment": "2.18.1" + } + }, + "node_modules/ng2-pdf-viewer": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-6.3.2.tgz", + "integrity": "sha512-H2tBhDd+Lq6CUzK2g54HsCcZDR2wTn1sDjYqKY3yF0Ydasl2R5ppCKynZBU/zge4EKvmHglJI120FbQMpJKDYQ==", + "dependencies": { + "@types/pdfjs-dist": "^2.1.4", + "pdfjs-dist": "^2.4.456", + "tslib": "^1.10.0" + } + }, + "node_modules/ng2-pdf-viewer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/ngx-color": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-6.2.0.tgz", + "integrity": "sha512-n04tcMnCpOgmI24egST94YwHmnSoAxK8O1T2t3nGrTwWbvw5XBRJvImNFnoNrriBXzc4Gx4hFehH5MU8CZxp1w==", + "dependencies": { + "@ctrl/tinycolor": "^3.1.6", + "material-colors": "^1.2.6", + "tslib": "^2.0.0" + } + }, + "node_modules/ngx-cookie-service": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-10.1.1.tgz", + "integrity": "sha512-HvBrYHdxMN1NvFJGEIF/8EuAg2fjxj8QwqTv9h6qZGqNLU+lUba8Pb2zRPw1YA+gqKkJawOy5dYNeH0kyPyipw==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ngx-file-drop": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-10.0.0.tgz", + "integrity": "sha512-izV90rNuXGeTCoodvD35sCC/D/bDIuFFdj1UnTMf8n3PA5O5v+7L/PJ8d9IAXIhjAg3fY0lIIqbP8RFexMbNeA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 6.9.0" + } + }, + "node_modules/ngx-infinite-scroll": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-9.1.0.tgz", + "integrity": "sha512-ZulbahgFsoPmP8cz7qPGDeFX9nKiSm74aav8vXNSI1ZoPiGYY5FQd8AK+yXqygY7tyCJRyt8Wp3DIg7zgP5dPA==", + "hasInstallScript": true, + "dependencies": { + "@scarf/scarf": "^1.1.0", + "opencollective-postinstall": "^2.0.2" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-fetch-npm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", + "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", + "dev": true, + "dependencies": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.64", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", + "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz", + "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^3.0.2", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz", + "integrity": "sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", + "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "JSONStream": "^1.3.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/npm-registry-fetch/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-registry-fetch/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", + "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz", + "integrity": "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.4.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", + "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-normalize-package-bin": "^1.0.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/pacote/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/pacote/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/pacote/node_modules/npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "node_modules/pacote/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/pacote/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/pacote/node_modules/tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/pacote/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pdfjs-dist": { + "version": "2.5.207", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.5.207.tgz", + "integrity": "sha512-xGDUhnCYPfHy+unMXCLCJtlpZaaZ17Ew3WIL0tnSgKFUZXHAPD49GO9xScyszSsQMoutNDgRb+rfBXIaX/lJbw==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-import/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/postcss-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "dependencies": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "dependencies": { + "genfun": "^5.0.0" + } + }, + "node_modules/protractor": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", + "dev": true, + "dependencies": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.1.7", + "yargs": "^15.3.1" + }, + "bin": { + "protractor": "bin/protractor", + "webdriver-manager": "bin/webdriver-manager" + }, + "engines": { + "node": ">=10.13.x" + } + }, + "node_modules/protractor/node_modules/@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "node_modules/protractor/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/protractor/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/protractor/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/protractor/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/protractor/node_modules/del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "dependencies": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/protractor/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/protractor/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/protractor/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/protractor/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/protractor/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/protractor/node_modules/webdriver-manager": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", + "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", + "dev": true, + "dependencies": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + }, + "bin": { + "webdriver-manager": "bin/webdriver-manager" + }, + "engines": { + "node": ">=6.9.x" + } + }, + "node_modules/protractor/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/raw-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz", + "integrity": "sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "node_modules/read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "dependencies": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "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", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dependencies": { + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "node_modules/resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/resolve-url-loader/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url-loader/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "dependencies": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + } + }, + "node_modules/rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "node_modules/rework/node_modules/convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + }, + "node_modules/rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.26.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", + "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", + "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.26.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", + "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", + "dev": true, + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", + "integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", + "dev": true, + "dependencies": { + "klona": "^2.0.3", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "dependencies": { + "https-proxy-agent": "^2.2.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "dependencies": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/selenium-webdriver/node_modules/tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "dependencies": { + "semver": "^5.3.0" + } + }, + "node_modules/semver-dsl/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "dependencies": { + "semver": "^5.0.0" + } + }, + "node_modules/semver-intersect/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socket.io": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", + "dev": true, + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.5.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "dev": true, + "dependencies": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/socket.io-client/node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/socket.io-client/node_modules/socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "dev": true, + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io-parser": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "dev": true, + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io-parser/node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/socket.io-parser/node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "node_modules/sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "dependencies": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "dev": true, + "dependencies": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "dependencies": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-loader": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", + "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", + "dev": true, + "dependencies": { + "data-urls": "^2.0.0", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/source-map-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/speed-measure-webpack-plugin": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", + "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "dev": true, + "dependencies": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-loader": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", + "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "dependencies": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "dependencies": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + } + }, + "node_modules/stylus-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/stylus-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/stylus/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stylus/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylus/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/stylus/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", + "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.3.0", + "p-limit": "^3.0.2", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^5.0.0", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.2.tgz", + "integrity": "sha512-wAH28hcEKwna96/UacuWaVspVLkg4x1aDM9JlzqaQTOFczCktkVAb5fmXChgandR1EraDPs2w8P+ozM+oafwxg==" + }, + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", + "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", + "dev": true + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", + "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typescript": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", + "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-analytics": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "request": "^2.88.2", + "uuid": "^3.0.0" + } + }, + "node_modules/universal-analytics/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "dependencies": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "watchpack-chokidar2": "^2.0.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, + "dependencies": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + }, + "engines": { + "node": ">=6.9.x" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz", + "integrity": "sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw==", + "dev": true, + "dependencies": { + "webpack-sources": "^1.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/webpack/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/webpack/node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/webpack/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/webpack/node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/webpack/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "dependencies": { + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + } + }, + "node_modules/worker-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/worker-plugin/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + } + }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1001.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1001.5.tgz", - "integrity": "sha512-W8ZqtbxwDtHnzPoqVyeyDEq24i+H0/i0fjIBuJ+XAMtd3U9JtPALIRLdhnunLXO7OLxjtxjzh0qLxKgiXGEd3g==", + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz", + "integrity": "sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw==", "dev": true, "requires": { - "@angular-devkit/core": "10.1.5", + "@angular-devkit/core": "10.2.3", "rxjs": "6.6.2" }, "dependencies": { @@ -24,23 +16849,23 @@ } }, "tslib": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", - "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@angular-devkit/build-angular": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.0.tgz", - "integrity": "sha512-cPkdp1GceokGHc79Wg0hACMqqmnJ4W3H9kY4c9qp1Xz18b3vk1aq09JNawOpfUN09S9vBCnn4glg22lRyqmJNA==", + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.3.tgz", + "integrity": "sha512-NjM8H2AUpLjcf+3mKYd99VbFgN4kwT++IBmR9BRQkqOZ4fD63g8jLPzC0KTsWGIVkZtR9Qc88YW/5sC8C3SVFQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1002.0", - "@angular-devkit/build-optimizer": "0.1002.0", - "@angular-devkit/build-webpack": "0.1002.0", - "@angular-devkit/core": "10.2.0", + "@angular-devkit/architect": "0.1002.3", + "@angular-devkit/build-optimizer": "0.1002.3", + "@angular-devkit/build-webpack": "0.1002.3", + "@angular-devkit/core": "10.2.3", "@babel/core": "7.11.1", "@babel/generator": "7.11.0", "@babel/plugin-transform-runtime": "7.11.0", @@ -48,7 +16873,7 @@ "@babel/runtime": "7.11.2", "@babel/template": "7.10.4", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "10.2.0", + "@ngtools/webpack": "10.2.3", "autoprefixer": "9.8.6", "babel-loader": "8.1.0", "browserslist": "^4.9.1", @@ -104,29 +16929,6 @@ "worker-plugin": "5.0.0" }, "dependencies": { - "@angular-devkit/architect": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", - "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "rxjs": "6.6.2" - } - }, - "@angular-devkit/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", - "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - } - }, "rxjs": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", @@ -145,9 +16947,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.0.tgz", - "integrity": "sha512-ACnm9doPMbRtSy1UZN5ir7smeLMx0g0oW7jX3jyPepeQKZ+9U1Bn09t10NLZQH+Z509jWZgvNJH/aOh85P6euw==", + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.3.tgz", + "integrity": "sha512-/0KbxVmmvt3S7ghk5zUH8/PWjW8ki0uSmPsnjopY8jRgAxuXN/7PXZbqswItNlUBoEj34hj2UADBUJVic7fcnQ==", "dev": true, "requires": { "loader-utils": "2.0.0", @@ -172,30 +16974,78 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.0.tgz", - "integrity": "sha512-TLBBQ6ANOLKXOPxpCOnxAtoknwHA7XhsLuueN06w5qqF+QNNbWUMPoieKFGs2TnotfCgbiq6x57IDEZTyT6V0w==", + "version": "0.1002.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.3.tgz", + "integrity": "sha512-ngvPPA3VuYGYV275PM6X0pVI0Nl/uWx4eu2S6SUFe6mniN4BQkUHAyeCUMIbM3hkau/NAcF9xUs5AvZ9GDpvPw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1002.0", - "@angular-devkit/core": "10.2.0", + "@angular-devkit/architect": "0.1002.3", + "@angular-devkit/core": "10.2.3", "rxjs": "6.6.2" }, "dependencies": { - "@angular-devkit/architect": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", - "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "dev": true, "requires": { - "@angular-devkit/core": "10.2.0", - "rxjs": "6.6.2" + "tslib": "^1.9.0" } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", + "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.1.7.tgz", + "integrity": "sha512-nk9RXA09b+7uq59HS/gyztNzUGHH/eQAUQhWHdDYSCG6v1lhJVCKx1HgDPELVxmeq9f+HArkAW7Y7c+ccdNQ7A==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.1.7", + "ora": "5.0.0", + "rxjs": "6.6.2" + }, + "dependencies": { "@angular-devkit/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", - "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", "dev": true, "requires": { "ajv": "6.12.4", @@ -222,64 +17072,6 @@ } } }, - "@angular-devkit/core": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.5.tgz", - "integrity": "sha512-Ly97h90Z6ZLhSnTkk2baUDNLeOrKgj/bUPkcBEKWranx6IRx8FMzin/+ysIQasBlEXWPIc8QbBmCz7xXkO4p7g==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", - "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.1.5.tgz", - "integrity": "sha512-5bhQX/PC548wIPcgCx9Q0Oewe8/i8+0eZvD9qLVWzJvUEKqgbjgoA7r7KJIJx2WINbESJGTIjwbXSZ6JmAJNhA==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.1.5", - "ora": "5.0.0", - "rxjs": "6.6.2" - }, - "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", - "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", - "dev": true - } - } - }, "@angular/animations": { "version": "10.1.5", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.1.5.tgz", @@ -289,16 +17081,16 @@ } }, "@angular/cli": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.1.5.tgz", - "integrity": "sha512-HlJVDxuTfrmxp8CvABV1pn7Ffeo0q0PuAR7gNCDcVi2vN7EDmBRRnyxBvATO4KzE5DHiSIqF0xLIsokSS7JC6w==", + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.1.7.tgz", + "integrity": "sha512-0tbeHnPIzSV/z+KlZT7N2J1yMnwQi4xIxvbsANrLjoAxNssse84i9BDdMZYsPoV8wbzcDhFOtt5KmfTO0GIeYQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1001.5", - "@angular-devkit/core": "10.1.5", - "@angular-devkit/schematics": "10.1.5", - "@schematics/angular": "10.1.5", - "@schematics/update": "0.1001.5", + "@angular-devkit/architect": "0.1001.7", + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", + "@schematics/angular": "10.1.7", + "@schematics/update": "0.1001.7", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.1.1", @@ -316,6 +17108,29 @@ "uuid": "8.3.0" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.1001.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1001.7.tgz", + "integrity": "sha512-uFYIvMdewU44GbIyRfsUHNMLkx+C0kokpnj7eH5NbJfbyFpCfd3ijBHh+voPdPsDRWs9lLgjbxfHpswSPj4D8w==", + "dev": true, + "requires": { + "@angular-devkit/core": "10.1.7", + "rxjs": "6.6.2" + } + }, + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -331,10 +17146,19 @@ "ms": "^2.1.1" } }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "uuid": { @@ -2076,44 +18900,14 @@ } }, "@ngtools/webpack": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.0.tgz", - "integrity": "sha512-W4SSFNQhIiC8JRhIn3c4mb1+fsFKiHp+THVMAUNo+wRZEt/rgzsCdnqv0EmQJJojZhnilUIyB/wVYJu2+S/Bxg==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.3.tgz", + "integrity": "sha512-h7JJMMca1bHY/0Prpxu2P3bvnC6pUKmBAfqN0h0HaRN9LTU9IDWtDRTIL1Aqhs/tcTUio/DowVKnVi2CWHAOmg==", "dev": true, "requires": { - "@angular-devkit/core": "10.2.0", + "@angular-devkit/core": "10.2.3", "enhanced-resolve": "4.3.0", "webpack-sources": "1.4.3" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", - "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } } }, "@nodelib/fs.scandir": { @@ -2165,24 +18959,54 @@ "integrity": "sha512-b2iE8kjjzzUo2WZ0xuE2N77kfnTds7ClrDxcz3Atz7h2XrNVoAPUoT75i7CY0st5x++70V91Y+c6RpBX9MX7Jg==" }, "@schematics/angular": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.1.5.tgz", - "integrity": "sha512-3VRcMB9WpjcMvlZ1y+78WGuZ4Ehp9pGw/T+zAR1VG9/16XHDQyfObsMuaU2EnEoufiHbTe3UpvVpYOu6tOCJrA==", + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.1.7.tgz", + "integrity": "sha512-jcyLWDSbpgHvB/BNVSsV4uLJpC2qRx9Z5+rcQpBB1BerqIPS/1cTQg7TViHZtcqnZqWvzHR3jfqzDUSOCZpuJQ==", "dev": true, "requires": { - "@angular-devkit/core": "10.1.5", - "@angular-devkit/schematics": "10.1.5", + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", "jsonc-parser": "2.3.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@schematics/update": { - "version": "0.1001.5", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1001.5.tgz", - "integrity": "sha512-DSomJ5IMs/5HUPx0RdPYubPWXh7kToxXUZbJywe0Q+TWTd+1xFfg8++O1DG4iW7E/Boqojx5VenAOzWY9jDWjA==", + "version": "0.1001.7", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1001.7.tgz", + "integrity": "sha512-q7g/9YaAiqyWxYmUXiSWxB9xwc30xL5iUWY3Rp2LXSH6ihaRsLabmNr743R2YQmMj2Ss+9OhILHmj7nMmqODgw==", "dev": true, "requires": { - "@angular-devkit/core": "10.1.5", - "@angular-devkit/schematics": "10.1.5", + "@angular-devkit/core": "10.1.7", + "@angular-devkit/schematics": "10.1.7", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "npm-package-arg": "^8.0.0", @@ -2191,10 +19015,32 @@ "semver-intersect": "1.4.0" }, "dependencies": { - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "@angular-devkit/core": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", + "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "dev": true, + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } @@ -2477,16 +19323,6 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -3034,15 +19870,6 @@ "tweetnacl": "^0.14.3" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -3415,6 +20242,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -3433,12 +20270,6 @@ "caller-callsite": "^2.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", @@ -3591,9 +20422,9 @@ } }, "cli-spinners": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", - "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", "dev": true }, "cli-width": { @@ -4277,9 +21108,9 @@ } }, "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -4310,7 +21141,7 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" } }, @@ -4342,28 +21173,28 @@ "dev": true }, "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.39" + "css-tree": "^1.1.2" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "mdn-data": "2.0.6", + "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "source-map": { @@ -4744,9 +21575,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true } } @@ -4817,18 +21648,18 @@ "dev": true }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { @@ -4876,23 +21707,23 @@ } }, "engine.io": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz", - "integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "0.3.1", + "cookie": "~0.4.1", "debug": "~4.1.0", "engine.io-parser": "~2.2.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "dependencies": { "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "dev": true }, "debug": { @@ -4905,17 +21736,18 @@ } }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "requires": {} } } }, "engine.io-client": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", - "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", + "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", "dev": true, "requires": { "component-emitter": "~1.3.0", @@ -4926,8 +21758,8 @@ "indexof": "0.0.1", "parseqs": "0.0.6", "parseuri": "0.0.6", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", + "ws": "~7.4.2", + "xmlhttprequest-ssl": "~1.6.2", "yeast": "0.1.2" }, "dependencies": { @@ -4946,26 +21778,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "requires": {} } } }, @@ -5000,9 +21818,9 @@ "dev": true }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "err-code": { @@ -5030,23 +21848,27 @@ } }, "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" } }, "es-to-primitive": { @@ -5825,6 +22647,17 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5937,6 +22770,12 @@ "ansi-regex": "^2.0.0" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-binary2": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", @@ -5966,9 +22805,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-value": { @@ -6081,9 +22920,9 @@ } }, "hosted-git-info": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.5.tgz", - "integrity": "sha512-i4dpK6xj9BIpVOTboXIlKG9+8HMKggcrMX7WA24xZtKwX0TPelq/rbaS5rCKeNX8sJXZJGdSxpnEGtta+wismQ==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -6113,12 +22952,6 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-entities": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", @@ -6403,9 +23236,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -6697,6 +23530,12 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -6706,6 +23545,15 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6713,9 +23561,9 @@ "dev": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-color-stop": { @@ -6823,9 +23671,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-number": { @@ -6834,6 +23682,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -6880,12 +23734,13 @@ } }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, "is-resolvable": { @@ -6900,14 +23755,11 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true }, "is-symbol": { "version": "1.0.3", @@ -6924,6 +23776,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -7243,6 +24101,16 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -7644,9 +24512,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.clonedeep": { "version": "4.5.0", @@ -7673,12 +24541,13 @@ "dev": true }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { @@ -7691,9 +24560,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -7869,9 +24738,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -8459,9 +25328,9 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "semver": { @@ -8491,9 +25360,9 @@ "dev": true }, "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -8553,9 +25422,9 @@ "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", "dev": true, "requires": { - "JSONStream": "^1.3.4", "bluebird": "^3.5.1", "figgy-pudding": "^3.4.1", + "JSONStream": "^1.3.4", "lru-cache": "^5.1.1", "make-fetch-happen": "^5.0.0", "npm-package-arg": "^6.1.0", @@ -8563,9 +25432,9 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "lru-cache": { @@ -8645,12 +25514,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -8683,9 +25546,9 @@ } }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, "object-is": { @@ -8714,13 +25577,13 @@ } }, "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } @@ -8733,27 +25596,6 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.pick": { @@ -8766,36 +25608,15 @@ } }, "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "obuf": { @@ -8900,9 +25721,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -9110,9 +25931,9 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "lru-cache": { @@ -9182,9 +26003,9 @@ "dev": true }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -9269,22 +26090,16 @@ } }, "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true }, "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true }, "parseurl": { "version": "1.3.3", @@ -10036,12 +26851,11 @@ } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -10808,27 +27622,6 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "regexpu-core": { @@ -11698,16 +28491,16 @@ } }, "socket.io": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", - "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", "dev": true, "requires": { "debug": "~4.1.0", - "engine.io": "~3.4.0", + "engine.io": "~3.5.0", "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.3.0", + "socket.io-client": "2.4.0", "socket.io-parser": "~3.4.0" }, "dependencies": { @@ -11729,46 +28522,31 @@ "dev": true }, "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", "dev": true, "requires": { "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", "has-binary2": "~1.0.2", - "has-cors": "1.1.0", "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", + "parseqs": "0.0.6", + "parseuri": "0.0.6", "socket.io-parser": "~3.3.0", "to-array": "0.1.4" }, "dependencies": { - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "isarray": { @@ -11777,38 +28555,21 @@ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "socket.io-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz", - "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", "dev": true, "requires": { "component-emitter": "~1.3.0", "debug": "~3.1.0", "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } } } @@ -12246,6 +29007,15 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -12275,74 +29045,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "strip-ansi": { @@ -12860,6 +29579,18 @@ "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -13047,9 +29778,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -13104,27 +29835,6 @@ "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "utils-merge": { @@ -13704,9 +30414,9 @@ "dev": true }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -14167,6 +30877,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "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-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -14271,9 +30994,9 @@ "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", + "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", "dev": true }, "xtend": { @@ -14283,9 +31006,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { "version": "4.0.0", From b17c97f1e879abef565d71d951864ea77261e78c Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Sat, 22 May 2021 23:29:44 +0200 Subject: [PATCH 802/898] Use ansible-galaxy during updates This mechanism is already used for the installation process. --- docs/administration.rst | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index c9a5650f0..8284bbf61 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -149,22 +149,15 @@ Ansible Route Most of the update process is automated when using the ansible role. -1. Backup your defined role variables file outside the paperless source-tree: +1. Update the role to the release tag you want to update to making sure the ansible scripts are compatible: .. code:: shell-session - $ cp ansible/vars.yml ~/vars.yml.old + $ ansible-galaxy install git+https://github.com/jonaswinkler/paperless-ng.git,ng-1.4.4 --force -2. Pull the release tag you want to update to: +2. Update the role variable definitions ``vars/paperless-ng.yml`` (where appropriate). - .. code:: shell-session - - $ git fetch --all - $ git checkout ng-0.9.14 - -3. Update the role variable definitions ``ansible/vars.yml`` (where appropriate). - -4. Run the ansible playbook you created created during :ref:`installation ` again: +3. Run the ansible playbook you created created during :ref:`installation ` again: .. note:: From cc62695cc34ef7e4521d074590b2cdf0d2009864 Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Mon, 24 May 2021 15:10:41 +0200 Subject: [PATCH 803/898] adjust ansible README to installation instructions and fix some typos --- ansible/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ansible/README.md b/ansible/README.md index 0940cf072..2aa957817 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -12,16 +12,16 @@ Note that this role requires root access, so either run it in a playbook with a - hosts: all roles: - - role: ansible + - role: paperless-ng become: yes Role Variables -------------- Most configuration variables from paperless-ng itself are available and accept their respective arguments. -Every `PAPERLESS_*` configuration varaible is lowercased and instead prefixed with `paperlessng_*` in `defaults/main.yml`. +Every `PAPERLESS_*` configuration variable is lowercased and instead prefixed with `paperlessng_*` in `defaults/main.yml`. -For a full listing including explainations and allowed values, see the current [documentation](https://paperless-ng.readthedocs.io/en/ng-0.9.14/configuration.html). +For a full listing including explanations and allowed values, see the current [documentation](https://paperless-ng.readthedocs.io/en/latest/configuration.html). Additional variables available in this role are listed below, along with default values: @@ -32,7 +32,7 @@ The [release](https://github.com/jonaswinkler/paperless-ng/releases) archive ver paperlessng_redis_host: localhost paperlessng_redis_port: 6379 -Seperate configuration values that combine into `PAPERLESS_REDIS`. +Separate configuration values that combine into `PAPERLESS_REDIS`. paperlessng_db_type: sqlite @@ -96,11 +96,11 @@ Example Playbook - hosts: all become: yes vars_files: - - vars/main.yml + - vars/paperless-ng.yml roles: - - ansible + - paperless-ng -`vars/main.yml`: +`vars/paperless-ng.yml`: paperlessng_media_root: /mnt/media/smbshare From 17fde00fc9c65ca42ead71adbcae3c02b1b15c25 Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Mon, 24 May 2021 15:27:11 +0200 Subject: [PATCH 804/898] Apply suggestions from code review Co-authored-by: Fabian Koller --- docs/administration.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index 8284bbf61..6f017db11 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -149,11 +149,11 @@ Ansible Route Most of the update process is automated when using the ansible role. -1. Update the role to the release tag you want to update to making sure the ansible scripts are compatible: +1. Update the role to the target release tag to make sure the ansible scripts are compatible: .. code:: shell-session - $ ansible-galaxy install git+https://github.com/jonaswinkler/paperless-ng.git,ng-1.4.4 --force + $ ansible-galaxy install git+https://github.com/jonaswinkler/paperless-ng.git,master --force 2. Update the role variable definitions ``vars/paperless-ng.yml`` (where appropriate). From 40b4167c824bcb277b3e1a9f7ee0ccc5e35f3135 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 25 May 2021 00:01:38 +0200 Subject: [PATCH 805/898] New translations django.po (Dutch) (#1048) --- src/locale/nl_NL/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/nl_NL/LC_MESSAGES/django.po b/src/locale/nl_NL/LC_MESSAGES/django.po index 8c64f5eaa..1272add6f 100644 --- a/src/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-19 20:48\n" +"PO-Revision-Date: 2021-05-22 10:12\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -674,7 +674,7 @@ msgstr "actie parameters" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "Extra parameter voor de hierboven geselecteerde actie, bijvoorbeeld: de doelmap voor de verplaats naar map actie. Submappen moeten gescheiden worden door punten." +msgstr "Extra parameter voor de hierboven geselecteerde actie, bijvoorbeeld: de doelmap voor de \"verplaats naar map\"-actie. Submappen moeten gescheiden worden door punten." #: paperless_mail/models.py:184 msgid "assign title from" From e80852bcb385b41c244a1d9aaca544cb7dc44538 Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Wed, 26 May 2021 08:30:17 +0200 Subject: [PATCH 806/898] Adjusted paperlessng_version variable explanation --- ansible/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ansible/README.md b/ansible/README.md index 2aa957817..8771cd08c 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -25,9 +25,11 @@ For a full listing including explanations and allowed values, see the current [d Additional variables available in this role are listed below, along with default values: - paperlessng_version: 0.9.14 + paperlessng_version: latest The [release](https://github.com/jonaswinkler/paperless-ng/releases) archive version of paperless-ng to install. +`latest` stands for the latest release of paperless-ng. +To install a specific version of paperless-ng, use the tag name of the release, e. g. `ng-1.4.4`, or specify a branch or commit id. paperlessng_redis_host: localhost paperlessng_redis_port: 6379 From d1989946d5a7e63fbb91fbff3d6178242650ac4c Mon Sep 17 00:00:00 2001 From: HolzHannes Date: Thu, 27 May 2021 08:30:21 +0200 Subject: [PATCH 807/898] Info for The input device is not a TTY Errors --- docs/administration.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/administration.rst b/docs/administration.rst index 6f017db11..f170795cc 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -216,6 +216,8 @@ With docker-compose, while paperless is running: $ cd /path/to/paperless $ docker-compose exec webserver +*If you use a command within a cronjob you might use the "-t" flag behind exec to suppress "The input device is not a TTY" errors.* + With docker, while paperless is running: .. code:: shell-session From 538d11a91fe3cfe6120b6688806a0dcc74f0e421 Mon Sep 17 00:00:00 2001 From: HolzHannes Date: Thu, 27 May 2021 10:01:30 +0200 Subject: [PATCH 808/898] Corrected position of info --- docs/administration.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/administration.rst b/docs/administration.rst index f170795cc..7d99eb0f1 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -216,8 +216,6 @@ With docker-compose, while paperless is running: $ cd /path/to/paperless $ docker-compose exec webserver -*If you use a command within a cronjob you might use the "-t" flag behind exec to suppress "The input device is not a TTY" errors.* - With docker, while paperless is running: .. code:: shell-session @@ -240,7 +238,9 @@ Document exporter ================= The document exporter exports all your data from paperless into a folder for -backup or migration to another DMS. +backup or migration to another DMS. + +If you use the document exporter within a cronjob to backup your data you might use the ``-t`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -t webserver document_exporter ../export`` .. code:: From 90914d9613eaf9e038c1030fc6b1b4855ed06bb9 Mon Sep 17 00:00:00 2001 From: servusoft Date: Thu, 27 May 2021 18:30:57 +0200 Subject: [PATCH 809/898] Solving issue with search criteria maximum age for some mail server Some mail servers (mail.ru) do not support search criteria for the maximum age. By setting the maximum age to 0, it is possible to hide the search criteria. This PR solves that problem. --- src/paperless_mail/mail.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index d59b54bb6..b051b94ea 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -75,9 +75,9 @@ def get_rule_action(rule): def make_criterias(rule): maximum_age = date.today() - timedelta(days=rule.maximum_age) - criterias = { - "date_gte": maximum_age - } + criterias = {} + if rule.maximum_age > 0: + criterias["date_gte"] = maximum_age if rule.filter_from: criterias["from_"] = rule.filter_from if rule.filter_subject: From dba116a43c6db9f319c22929d2a57e1e29c16bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Brunner?= Date: Sat, 29 May 2021 16:37:57 +0200 Subject: [PATCH 810/898] Add Scan to Paperless as affiliated project --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5cac22e55..78bc1f431 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Paperless has been around a while now, and people are starting to build stuff on * [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless. Updated to work with paperless-ng. * [Paperless Share](https://github.com/qcasey/paperless_share). Share any files from your Android application with paperless. Very simple, but works with all of the mobile scanning apps out there that allow you to share scanned documents. +* [Scan to Paperless](https://github.com/sbrunner/scan-to-paperless): Scan and prepare (crop, deskew, OCR, ...) your documents for Paperless. These projects also exist, but their status and compatibility with paperless-ng is unknown. From b1c48bc20fde2766df82550d95eea1e884dcddab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Brunner?= Date: Thu, 4 Mar 2021 22:16:56 +0100 Subject: [PATCH 811/898] Add suggest --- .../management/commands/document_retagger.py | 27 +++- src/documents/signals/handlers.py | 122 ++++++++++++++---- .../tests/test_management_retagger.py | 59 ++++++++- 3 files changed, 178 insertions(+), 30 deletions(-) diff --git a/src/documents/management/commands/document_retagger.py b/src/documents/management/commands/document_retagger.py index ce3f94bf2..6636af20a 100644 --- a/src/documents/management/commands/document_retagger.py +++ b/src/documents/management/commands/document_retagger.py @@ -63,8 +63,20 @@ class Command(BaseCommand): action="store_true", help="If set, the progress bar will not be shown" ) + parser.add_argument( + "--suggest", + default=False, + action="store_true", + help="Return the suggestion, don't change anything." + ) + parser.add_argument( + "--base-url", + help="The base URL to use to build the link to the documents." + ) def handle(self, *args, **options): + # Detect if we support color + color = self.style.ERROR("test") != "test" if options["inbox_only"]: queryset = Document.objects.filter(tags__is_inbox_tag=True) @@ -85,18 +97,27 @@ class Command(BaseCommand): document=document, classifier=classifier, replace=options['overwrite'], - use_first=options['use_first']) + use_first=options['use_first'], + suggest=options['suggest'], + base_url=options['base_url'], + color=color) if options['document_type']: set_document_type(sender=None, document=document, classifier=classifier, replace=options['overwrite'], - use_first=options['use_first']) + use_first=options['use_first'], + suggest=options['suggest'], + base_url=options['base_url'], + color=color) if options['tags']: set_tags( sender=None, document=document, classifier=classifier, - replace=options['overwrite']) + replace=options['overwrite'], + suggest=options['suggest'], + base_url=options['base_url'], + color=color) diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index f46adbb16..8fb8faf51 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -1,6 +1,7 @@ import logging import os +from django.utils import termcolors from django.conf import settings from django.contrib.admin.models import ADDITION, LogEntry from django.contrib.auth.models import User @@ -8,14 +9,14 @@ from django.contrib.contenttypes.models import ContentType from django.db import models, DatabaseError from django.db.models import Q from django.dispatch import receiver -from django.utils import timezone +from django.utils import termcolors, timezone from filelock import FileLock from .. import matching from ..file_handling import delete_empty_directories, \ create_source_path_directory, \ generate_unique_filename -from ..models import Document, Tag +from ..models import Document, Tag, MatchingModel logger = logging.getLogger("paperless.handlers") @@ -32,6 +33,9 @@ def set_correspondent(sender, classifier=None, replace=False, use_first=True, + suggest=False, + base_url=None, + color=False, **kwargs): if document.correspondent and not replace: return @@ -60,13 +64,31 @@ def set_correspondent(sender, return if selected or replace: - logger.info( - f"Assigning correspondent {selected} to {document}", - extra={'group': logging_group} - ) + if suggest: + if base_url: + print( + termcolors.colorize(str(document), fg='green') + if color + else str(document) + ) + print(f"{base_url}/documents/{document.pk}") + else: + print( + ( + termcolors.colorize(str(document), fg='green') + if color + else str(document) + ) + f" [{document.pk}]" + ) + print(f"Suggest correspondent {selected}") + else: + logger.info( + f"Assigning correspondent {selected} to {document}", + extra={'group': logging_group} + ) - document.correspondent = selected - document.save(update_fields=("correspondent",)) + document.correspondent = selected + document.save(update_fields=("correspondent",)) def set_document_type(sender, @@ -75,6 +97,9 @@ def set_document_type(sender, classifier=None, replace=False, use_first=True, + suggest=False, + base_url=None, + color=False, **kwargs): if document.document_type and not replace: return @@ -104,13 +129,31 @@ def set_document_type(sender, return if selected or replace: - logger.info( - f"Assigning document type {selected} to {document}", - extra={'group': logging_group} - ) + if suggest: + if base_url: + print( + termcolors.colorize(str(document), fg='green') + if color + else str(document) + ) + print(f"{base_url}/documents/{document.pk}") + else: + print( + ( + termcolors.colorize(str(document), fg='green') + if color + else str(document) + ) + f" [{document.pk}]" + ) + print(f"Sugest document type {selected}") + else: + logger.info( + f"Assigning document type {selected} to {document}", + extra={'group': logging_group} + ) - document.document_type = selected - document.save(update_fields=("document_type",)) + document.document_type = selected + document.save(update_fields=("document_type",)) def set_tags(sender, @@ -118,6 +161,9 @@ def set_tags(sender, logging_group=None, classifier=None, replace=False, + suggest=False, + base_url=None, + color=False, **kwargs): if replace: @@ -132,16 +178,48 @@ def set_tags(sender, relevant_tags = set(matched_tags) - current_tags - if not relevant_tags: - return + if suggest: + extra_tags = current_tags - set(matched_tags) + extra_tags = [ + t for t in extra_tags + if t.matching_algorithm == MatchingModel.MATCH_AUTO + ] + if not relevant_tags and not extra_tags: + return + if base_url: + print( + termcolors.colorize(str(document), fg='green') + if color + else str(document) + ) + print(f"{base_url}/documents/{document.pk}") + else: + print( + ( + termcolors.colorize(str(document), fg='green') + if color + else str(document) + ) + f" [{document.pk}]" + ) + if relevant_tags: + print( + "Suggest tags: " + ", ".join([t.name for t in relevant_tags]) + ) + if extra_tags: + print("Extra tags: " + ", ".join([t.name for t in extra_tags])) + else: + if not relevant_tags: + return - message = 'Tagging "{}" with "{}"' - logger.info( - message.format(document, ", ".join([t.name for t in relevant_tags])), - extra={'group': logging_group} - ) + message = 'Tagging "{}" with "{}"' + logger.info( + message.format( + document, ", ".join([t.name for t in relevant_tags]) + ), + extra={'group': logging_group} + ) - document.tags.add(*relevant_tags) + document.tags.add(*relevant_tags) @receiver(models.signals.post_delete, sender=Document) diff --git a/src/documents/tests/test_management_retagger.py b/src/documents/tests/test_management_retagger.py index 907a23d09..39e9c80b7 100644 --- a/src/documents/tests/test_management_retagger.py +++ b/src/documents/tests/test_management_retagger.py @@ -11,14 +11,17 @@ class TestRetagger(DirectoriesMixin, TestCase): self.d1 = Document.objects.create(checksum="A", title="A", content="first document") self.d2 = Document.objects.create(checksum="B", title="B", content="second document") self.d3 = Document.objects.create(checksum="C", title="C", content="unrelated document") + self.d4 = Document.objects.create(checksum="D", title="D", content="auto document") self.tag_first = Tag.objects.create(name="tag1", match="first", matching_algorithm=Tag.MATCH_ANY) self.tag_second = Tag.objects.create(name="tag2", match="second", matching_algorithm=Tag.MATCH_ANY) self.tag_inbox = Tag.objects.create(name="test", is_inbox_tag=True) self.tag_no_match = Tag.objects.create(name="test2") + self.tag_auto = Tag.objects.create(name="tagauto", matching_algorithm=Tag.MATCH_AUTO) self.d3.tags.add(self.tag_inbox) self.d3.tags.add(self.tag_no_match) + self.d4.tags.add(self.tag_auto) self.correspondent_first = Correspondent.objects.create( @@ -32,7 +35,8 @@ class TestRetagger(DirectoriesMixin, TestCase): name="dt2", match="second", matching_algorithm=DocumentType.MATCH_ANY) def get_updated_docs(self): - return Document.objects.get(title="A"), Document.objects.get(title="B"), Document.objects.get(title="C") + return Document.objects.get(title="A"), Document.objects.get(title="B"), \ + Document.objects.get(title="C"), Document.objects.get(title="D") def setUp(self) -> None: super(TestRetagger, self).setUp() @@ -40,25 +44,26 @@ class TestRetagger(DirectoriesMixin, TestCase): def test_add_tags(self): call_command('document_retagger', '--tags') - d_first, d_second, d_unrelated = self.get_updated_docs() + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() self.assertEqual(d_first.tags.count(), 1) self.assertEqual(d_second.tags.count(), 1) self.assertEqual(d_unrelated.tags.count(), 2) + self.assertEqual(d_auto.tags.count(), 1) self.assertEqual(d_first.tags.first(), self.tag_first) self.assertEqual(d_second.tags.first(), self.tag_second) def test_add_type(self): call_command('document_retagger', '--document_type') - d_first, d_second, d_unrelated = self.get_updated_docs() + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() self.assertEqual(d_first.document_type, self.doctype_first) self.assertEqual(d_second.document_type, self.doctype_second) def test_add_correspondent(self): call_command('document_retagger', '--correspondent') - d_first, d_second, d_unrelated = self.get_updated_docs() + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() self.assertEqual(d_first.correspondent, self.correspondent_first) self.assertEqual(d_second.correspondent, self.correspondent_second) @@ -68,11 +73,55 @@ class TestRetagger(DirectoriesMixin, TestCase): call_command('document_retagger', '--tags', '--overwrite') - d_first, d_second, d_unrelated = self.get_updated_docs() + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() self.assertIsNotNone(Tag.objects.get(id=self.tag_second.id)) self.assertCountEqual([tag.id for tag in d_first.tags.all()], [self.tag_first.id]) self.assertCountEqual([tag.id for tag in d_second.tags.all()], [self.tag_second.id]) self.assertCountEqual([tag.id for tag in d_unrelated.tags.all()], [self.tag_inbox.id, self.tag_no_match.id]) + self.assertEqual(d_auto.tags.count(), 0) + def test_add_tags_suggest(self): + call_command('document_retagger', '--tags', '--suggest') + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() + + self.assertEqual(d_first.tags.count(), 0) + self.assertEqual(d_second.tags.count(), 0) + self.assertEqual(d_auto.tags.count(), 1) + + def test_add_type_suggest(self): + call_command('document_retagger', '--document_type', '--suggest') + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() + + self.assertEqual(d_first.document_type, None) + self.assertEqual(d_second.document_type, None) + + def test_add_correspondent_suggest(self): + call_command('document_retagger', '--correspondent', '--suggest') + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() + + self.assertEqual(d_first.correspondent, None) + self.assertEqual(d_second.correspondent, None) + + def test_add_tags_suggest_url(self): + call_command('document_retagger', '--tags', '--suggest', '--base-url=http://localhost') + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() + + self.assertEqual(d_first.tags.count(), 0) + self.assertEqual(d_second.tags.count(), 0) + self.assertEqual(d_auto.tags.count(), 1) + + def test_add_type_suggest_url(self): + call_command('document_retagger', '--document_type', '--suggest', '--base-url=http://localhost') + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() + + self.assertEqual(d_first.document_type, None) + self.assertEqual(d_second.document_type, None) + + def test_add_correspondent_suggest_url(self): + call_command('document_retagger', '--correspondent', '--suggest', '--base-url=http://localhost') + d_first, d_second, d_unrelated, d_auto = self.get_updated_docs() + + self.assertEqual(d_first.correspondent, None) + self.assertEqual(d_second.correspondent, None) From d1070b3d82f54c886de243fd438d9f23b5e79f37 Mon Sep 17 00:00:00 2001 From: Michael Lynch Date: Sun, 6 Jun 2021 18:02:23 -0400 Subject: [PATCH 812/898] Simplify installation command The installation for docker is currently three separate commands, but it can be a single command if the user simply pipes to the sh interpreter directly. I know there are some who object to piping to sh from a URL, but the current method has no security benefit over piping directly to sh. --- docs/setup.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index 42ef6759a..de5eff55f 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -116,9 +116,7 @@ performs all the steps described in :ref:`setup-docker_hub` automatically. .. code:: shell-session - $ wget https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh - $ chmod +x install-paperless-ng.sh - $ ./install-paperless-ng.sh + $ curl -L https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh | sh .. _setup-docker_hub: From 4f85a6023cd3916229eba0ed083a566ee887d2e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20J=2E=20W=C3=BCnsch?= Date: Wed, 9 Jun 2021 16:46:53 +0200 Subject: [PATCH 813/898] Update setup.rst --- docs/setup.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/setup.rst b/docs/setup.rst index de5eff55f..acdeec946 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -116,7 +116,7 @@ performs all the steps described in :ref:`setup-docker_hub` automatically. .. code:: shell-session - $ curl -L https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh | sh + $ curl -L https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh | bash .. _setup-docker_hub: From 3819cbee64e62c398b8d02e6a17047248eb755ba Mon Sep 17 00:00:00 2001 From: Peter M Date: Sat, 12 Jun 2021 10:15:51 -0400 Subject: [PATCH 814/898] Document specification of the expected creation date order --- docs/configuration.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/configuration.rst b/docs/configuration.rst index 99721b976..9d10e2beb 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -621,6 +621,14 @@ PAPERLESS_IGNORE_DATES= Example: "2020-12-02,22.04.1999" Defaults to an empty string to not ignore any dates. + +PAPERLESS_DATE_ORDER= + Paperless will try to determine the document creation date from its contents. + Specify the date format Paperless should expect to see within your documents. + + This option defaults to DMY which translates to day first, month second, and year + last order. Characters D, M, or Y can be shuffled to meet the required order. + Binaries From 1ec54501c31a148480f07fea133b577e4349f9ca Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:02:49 +0200 Subject: [PATCH 815/898] update dependencies --- Pipfile.lock | 376 +++++++++++++++++++++++++++------------------------ 1 file changed, 199 insertions(+), 177 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 34d4cffe6..972a065cb 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -83,22 +83,31 @@ }, "certifi": { "hashes": [ - "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", - "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee", + "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" ], - "version": "==2020.12.5" + "version": "==2021.5.30" }, "cffi": { "hashes": [ "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", + "sha256:04c468b622ed31d408fea2346bec5bbffba2cc44226302a0de1ade9f5ea3d373", + "sha256:06d7cd1abac2ffd92e65c0609661866709b4b2d82dd15f611e602b9b188b0b69", + "sha256:06db6321b7a68b2bd6df96d08a5adadc1fa0e8f419226e25b2a5fbf6ccc7350f", "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", + "sha256:0f861a89e0043afec2a51fd177a567005847973be86f709bbb044d7f42fc4e05", "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", + "sha256:1bf1ac1984eaa7675ca8d5745a8cb87ef7abecb5592178406e55858d411eadc0", "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", + "sha256:24a570cd11895b60829e941f2613a4f79df1a27344cbbb82164ef2e0116f09c7", + "sha256:24ec4ff2c5c0c8f9c6b87d5bb53555bf267e1e6f70e52e5a9740d32861d36b6f", "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", + "sha256:293e7ea41280cb28c6fcaaa0b1aa1f533b8ce060b9e701d78511e1e6c4a1de76", "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", + "sha256:3c3f39fa737542161d8b0d680df2ec249334cd70a8f420f71c9304bd83c3cbed", "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", @@ -107,6 +116,7 @@ "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", + "sha256:681d07b0d1e3c462dd15585ef5e33cb021321588bebd910124ef4f4fb71aef55", "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", @@ -125,8 +135,10 @@ "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", + "sha256:cc5a8e069b9ebfa22e26d0e6b97d6f9781302fe7f4f2b8776c3e1daea35f1adc", "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", + "sha256:df5052c5d867c1ea0b311fb7c3cd28b19df469c056f7fdcfe88c7473aa63e333", "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" ], @@ -158,20 +170,19 @@ }, "click": { "hashes": [ - "sha256:a3747c864f8e400a3664f5f4fd6dae11b4605bf6b727dae7b6f22ba9bd0a194a", - "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", - "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" + "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a", + "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==7.1.2" + "markers": "python_version >= '3.6'", + "version": "==8.0.1" }, "coloredlogs": { "hashes": [ - "sha256:5e78691e2673a8e294499e1832bb13efcfb44a86b92e18109fa18951093218ab", - "sha256:b7f630a8297a66984b6bae0f6a1b0e0afb9f2f6838ea3bfa58f50d3d13e133d6" + "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", + "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==15.0" + "version": "==15.0.1" }, "concurrent-log-handler": { "hashes": [ @@ -225,11 +236,11 @@ }, "django": { "hashes": [ - "sha256:13ac78dbfd189532cad8f383a27e58e18b3d33f80009ceb476d7fcbfc5dcebd8", - "sha256:7e0a1393d18c16b503663752a8b6790880c5084412618990ce8a81cc908b4962" + "sha256:66c9d8db8cc6fe938a28b7887c1596e42d522e27618562517cc8929eb7e7f296", + "sha256:ea735cbbbb3b2fba6d4da4784a0043d84c67c92f1fdf15ad6db69900e792c10f" ], "index": "pypi", - "version": "==3.2.3" + "version": "==3.2.4" }, "django-cors-headers": { "hashes": [ @@ -365,33 +376,32 @@ }, "httptools": { "hashes": [ - "sha256:07659649fe6b3948b6490825f89abe5eb1cec79ebfaaa0b4bf30f3f33f3c2ba8", - "sha256:08b79e09114e6ab5c3dbf560bba2cb2257ea38cdaeaf99b7cb80d8f92622fcd9", - "sha256:1e35aa179b67086cc600a984924a88589b90793c9c1b260152ca4908786e09df", - "sha256:31629e1f1b89959f8c0927bad12184dc07977dcf71e24f4772934aa490aa199b", - "sha256:7792e70ead1d220142a99dde049fdbeddc66fe822953e085d02cd5155c38cdad", - "sha256:851026bd63ec0af7e7592890d97d15c92b62d9e17094353f19a52c8e2b33710a", - "sha256:8fcca4b7efe353b13a24017211334c57d055a6e132c7adffed13a10d28efca57", - "sha256:9abd788465aa46a0f288bd3a99e53edd184177d6379e2098fd6097bb359ad9d6", - "sha256:aebdf0bd7bf7c90ae6b3be458692bf6e9e5b610b501f9f74c7979015a51db4c4", - "sha256:bda99a5723e7eab355ce57435c70853fc137a65aebf2f1cd4d15d96e2956da7b", - "sha256:c1c63d860749841024951b0a78e4dec6f543d23751ef061d6ab60064c7b8b524", - "sha256:c4111a0a8a00eff1e495d43ea5230aaf64968a48ddba8ea2d5f982efae827404", - "sha256:dce59ee45dd6ee6c434346a5ac527c44014326f560866b4b2f414a692ee1aca8", - "sha256:f759717ca1b2ef498c67ba4169c2b33eecf943a89f5329abcff8b89d153eb500", - "sha256:f9545ff74bdf8a6e013ed18af3e24c656c06b6ca2441074be2f6cc28e24f48de", - "sha256:fb7199b8fb0c50a22e77260bb59017e0c075fa80cb03bb2c8692de76e7bb7fe7", - "sha256:fbf7ecd31c39728f251b1c095fd27c84e4d21f60a1d079a0333472ff3ae59d34" + "sha256:01b392a166adcc8bc2f526a939a8aabf89fe079243e1543fd0e7dc1b58d737cb", + "sha256:200fc1cdf733a9ff554c0bb97a4047785cfaad9875307d6087001db3eb2b417f", + "sha256:3ab1f390d8867f74b3b5ee2a7ecc9b8d7f53750bd45714bf1cb72a953d7dfa77", + "sha256:78d03dd39b09c99ec917d50189e6743adbfd18c15d5944392d2eabda688bf149", + "sha256:79dbc21f3612a78b28384e989b21872e2e3cf3968532601544696e4ed0007ce5", + "sha256:80ffa04fe8c8dfacf6e4cef8277347d35b0442c581f5814f3b0cf41b65c43c6e", + "sha256:813871f961edea6cb2fe312f2d9b27d12a51ba92545380126f80d0de1917ea15", + "sha256:94505026be56652d7a530ab03d89474dc6021019d6b8682281977163b3471ea0", + "sha256:a23166e5ae2775709cf4f7ad4c2048755ebfb272767d244e1a96d55ac775cca7", + "sha256:a289c27ccae399a70eacf32df9a44059ca2ba4ac444604b00a19a6c1f0809943", + "sha256:a7594f9a010cdf1e16a58b3bf26c9da39bbf663e3b8d46d39176999d71816658", + "sha256:b08d00d889a118f68f37f3c43e359aab24ee29eb2e3fe96d64c6a2ba8b9d6557", + "sha256:cc9be041e428c10f8b6ab358c6b393648f9457094e1dcc11b4906026d43cd380", + "sha256:d5682eeb10cca0606c4a8286a3391d4c3c5a36f0c448e71b8bd05be4e1694bfb", + "sha256:dd38cad4599d58c23c01bca2102dcce30d61f6466328169bb17efb8a528f4d97", + "sha256:fd3b8905e21431ad306eeaf56644a68fdd621bf8f3097eff54d0f6bdf7262065" ], - "version": "==0.1.2" + "version": "==0.2.0" }, "humanfriendly": { "hashes": [ - "sha256:066562956639ab21ff2676d1fda0b5987e985c534fc76700a19bd54bcb81121d", - "sha256:d5c731705114b9ad673754f3317d9fa4c23212f36b29bdc4272a892eafc9bc72" + "sha256:332da98c24cc150efcc91b5508b19115209272bfdf4b0764a56795932f854271", + "sha256:f7dba53ac7935fd0b4a2fc9a29e316ddd9ea135fb3052d3d0279d10c18ff9c48" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==9.1" + "version": "==9.2" }, "hyperlink": { "hashes": [ @@ -596,11 +606,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:3a757ac8bc4f822052a363c7fdc1e01e01033ae3e3398123990813eb6b3cf031", - "sha256:c18db17e18984f540eaa774245571e3ec63a74f459b6029de561a06a77e78310" + "sha256:17396579734b4a2e7b8e100a8a2f38a01a83adb949e2c87edd9e5433f8eb6932", + "sha256:60079df8a0407e30b66b2828ffbf802bb8342d1198db41c27e4e2ef63efb06c3" ], "index": "pypi", - "version": "==12.0.1" + "version": "==12.0.3" }, "pathvalidate": { "hashes": [ @@ -620,32 +630,34 @@ }, "pikepdf": { "hashes": [ - "sha256:087dc8e141dcfa0e76e93227a22f6b9cee000b3837b9e048ba96f389d0ee5d41", - "sha256:1bcf4e45a831b302a0b6ae6cbd41aa6c81f95964b1d61e8da41186a4a779f701", - "sha256:22d6615e742e7320a3a77148f65a8ba3591c054133faf6305a525c439b57cf38", - "sha256:24d51dcc2d73e5d123acab4fef5d611f545ff2ce16c837d85833364d4d2cda45", - "sha256:26a3af4845db89f364d18757978fad39ea852b6e7cae3137000a07c44d292b42", - "sha256:36e9d557ef0505a6ec335faf9b2c93d4d062daa339dd1a6cbcda2a6dc886b38e", - "sha256:417abdc29be8ddedabeb100a728b6525c5e1967ba47a03b9e0a81391efb4feb1", - "sha256:5e71dcefdd889538a289cdaa2bb4559e4477e3f17846ffbdfad54b0e76443cf5", - "sha256:62a6f2e2552bfd1bcd17b5e0e024db9ab7e93db39f43bb4246faff9b01154d47", - "sha256:7a054701104c601d72b5ab8b3025a44b1b400f334ee7259dbd4bb1a2c24dad03", - "sha256:7dcf6545c7deb2f6511a3b9220d56297b4165eeedc2eab785acba698cc9d95c0", - "sha256:82da7b5d5a57e4704f7a81e75324b07b19577a96e06f5c5d8a89b29dec814766", - "sha256:8cdafd18013b17f257655e95bfcb4ef14a7fc84a7334a9877b0532db4b55e3ff", - "sha256:a0ff0291f74ef45dd2a1e1316b7d6464b996351365debbf611a5293cf2ff2562", - "sha256:a2ef88f786aed79da559cd1a6a844f99e258971d64670bfba1efad96ed175fb0", - "sha256:a84bbc7b3f9819c1541913bac2781da40d9506255c1cedb7233f9027ce23db92", - "sha256:b1e0cfb6f5abe4d4863c55b2c9424340e5b44095789ef1368a0de99f8b4f852e", - "sha256:ca8efe77f1f44d3c1c0d738407b87816f1445438aa6873d45e58fdd595e96c98", - "sha256:d0f48252f23c128a3ddde16d98fa6567ac7fbce6792209771183b57c744106e1", - "sha256:e1d988ddf063d6abf3d71e7c5bc46e5690fdcf0b06d7f00fced5d0b908f92267", - "sha256:ec9d853c895693dd55b12ae37056808e192e5e2a8d2486cb30d19a5e7d6ff6a9", - "sha256:fcbb6e37426564ccaf6bb301616700277d426225895b00a64283a95ff648f3b9", - "sha256:ff29a8bd50f47554be7e062b3e1a2b466a7f567e1e49417dc62c3948b28304c7" + "sha256:230f98284ae025e641472b5c23d83af3964717ef0fac79a072d05e12212d99f6", + "sha256:23aff2408c169aff7f2453cc807b39427634df4fdbcc1217ff11e62984321772", + "sha256:279cb9786c4757c36fa356214b012f766f3cfc834c6e2c6f661cd7fd1221fac7", + "sha256:2bd8509ca04cfe3fa5c9ad17730eb43addd1b8f81604945c89f666ac3768fc19", + "sha256:311e92958a75d8d73064b1ee1f280572aee03d03ee103ef77e989cc255acf2e9", + "sha256:41e637ce69776990a0a170099000282cbcf7de94ab39a0194677366d923ff48d", + "sha256:4a17030087da78287f3f18f90e4364b20cd1f3a8d511e5cc33171f9262d7dd6c", + "sha256:4ee74e9b9277ae5327c8b19504b66eaa9a725fa4a6b2a23d161d3b2696f6c2e6", + "sha256:59e7c6004d5eafff6d31d8185c5df6b8a2c3c7114c1d194edee520a9b608f09b", + "sha256:5ff35499b1ae7b181277f78ce5b1bcc8d3009182bb389917791c5dc811fcc8e4", + "sha256:60c1d6634e4b66636d731bee3615aa153a877983a499d3c5506f87c033a6d913", + "sha256:77363eb0afcf7a8b8fe3aa9c3391cc12ad40e7e6be55a0b10b72bf70be6b2cbc", + "sha256:838a386836c5d773029f04628ddab7131f6f7cfa3147382bf2a440143f4ef513", + "sha256:9ad09d00186f172f247983d63f60d0572e1fb87b0ae30e3d504de451b8da8889", + "sha256:9c885328d86d919b70decd3ef73ce42d76ab4b365ed3a851aef08e3f29e62c6e", + "sha256:a25a12f2209a0378c57a8201c4add521ebb7cadd439e111cddb1532d347f0cd0", + "sha256:a28e3472915d4881492ba6264f8db8ef3a4f382048dda307de5aa88a43b626d7", + "sha256:b3ccde9aa84fd9663ecf3f39226372bc2c5311e9fabbab07955439c0deb1ecfa", + "sha256:bbaafc08dd77c2e64a87dd6e377e4e8a7efd9a6d7de208ed8c5b908830465887", + "sha256:c039ee6dcbf3f2054b8bddbff9f5002996d0d981d3d82ebe76041c237528aaef", + "sha256:cee7a310e82e0a931b4805a1b25288efcb3f647f4d32c4107889a4b3fac4f159", + "sha256:d245513995e0fe1e849fbb10e14061c229c59db9f8e346bfef4f2bf804847574", + "sha256:db1f2a4b8fb4b91bf43ce8988f2f9d18ea36dbf7919d60a860e3fa68e1955a7e", + "sha256:fb08ce0ec36c8571b167d9cd0fdad7b53b2f535cbd32c1e92f6f2883c353be7e", + "sha256:fb0e1ceabaad4815efe23d1e19beaba33db38cf1e918011cd602cc0a43185056" ], "index": "pypi", - "version": "==2.12.0" + "version": "==2.12.2" }, "pillow": { "hashes": [ @@ -668,6 +680,7 @@ "sha256:63728564c1410d99e6d1ae8e3b810fe012bc440952168af0a2877e8ff5ab96b9", "sha256:66cc56579fd91f517290ab02c51e3a80f581aba45fd924fcdee01fa06e635812", "sha256:6c32cc3145928c4305d142ebec682419a6c0a8ce9e33db900027ddca1ec39178", + "sha256:8b56553c0345ad6dcb2e9b433ae47d67f95fc23fe28a0bde15a120f25257e291", "sha256:8bb1e155a74e1bfbacd84555ea62fa21c58e0b4e7e6b20e4447b8d07990ac78b", "sha256:95d5ef984eff897850f3a83883363da64aae1000e79cb3c321915468e8c6add5", "sha256:a013cbe25d20c2e0c4e85a9daf438f85121a4d0344ddc76e33fd7e3965d9af4b", @@ -832,11 +845,11 @@ }, "python-magic": { "hashes": [ - "sha256:8551e804c09a3398790bd9e392acb26554ae2609f29c72abb0b9dee9a5571eae", - "sha256:ca884349f2c92ce830e3f498c5b7c7051fe2942c3ee4332f65213b8ebff15a62" + "sha256:4fec8ee805fea30c07afccd1592c0f17977089895bdfaae5fec870a84e997626", + "sha256:de800df9fb50f8ec5974761054a708af6e4246b03b4bdaee993f948947b0ebcf" ], "index": "pypi", - "version": "==0.4.22" + "version": "==0.4.24" }, "pytz": { "hashes": [ @@ -1062,10 +1075,10 @@ }, "sortedcontainers": { "hashes": [ - "sha256:37257a32add0a3ee490bb170b599e93095eed89a55da91fa9f48753ea12fd73f", - "sha256:59cc937650cf60d677c16775597c89a960658a09cf7c1a668f86e1e4464b10a1" + "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", + "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" ], - "version": "==2.3.0" + "version": "==2.4.0" }, "sqlparse": { "hashes": [ @@ -1093,11 +1106,11 @@ }, "tqdm": { "hashes": [ - "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3", - "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae" + "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd", + "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2" ], "index": "pypi", - "version": "==4.60.0" + "version": "==4.61.1" }, "twisted": { "extras": [ @@ -1127,22 +1140,22 @@ }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c", + "sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.4" + "version": "==1.26.5" }, "uvicorn": { "extras": [ "standard" ], "hashes": [ - "sha256:3292251b3c7978e8e4a7868f4baf7f7f7bb7e40c759ecc125c37e99cdea34202", - "sha256:7587f7b08bd1efd2b9bad809a3d333e972f1d11af8a5e52a9371ee3a5de71524" + "sha256:2a76bb359171a504b3d1c853409af3adbfa5cef374a4a59e5881945a97a93eae", + "sha256:45ad7dfaaa7d55cab4cd1e85e03f27e9d60bc067ddc59db52a2b0aeca8870292" ], "index": "pypi", - "version": "==0.13.4" + "version": "==0.14.0" }, "uvloop": { "hashes": [ @@ -1200,31 +1213,42 @@ }, "websockets": { "hashes": [ - "sha256:0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5", - "sha256:1d3f1bf059d04a4e0eb4985a887d49195e15ebabc42364f4eb564b1d065793f5", - "sha256:20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308", - "sha256:295359a2cc78736737dd88c343cd0747546b2174b5e1adc223824bcaf3e164cb", - "sha256:2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a", - "sha256:3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c", - "sha256:3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170", - "sha256:3ef56fcc7b1ff90de46ccd5a687bbd13a3180132268c4254fc0fa44ecf4fc422", - "sha256:4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8", - "sha256:5c01fd846263a75bc8a2b9542606927cfad57e7282965d96b93c387622487485", - "sha256:5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f", - "sha256:745a1c8ca62f7d27de42b517ca7c6f716d1eb96c5aa73cf6407936c0167cbb3c", - "sha256:751a556205d8245ff94aeef23546a1113b1dd4f6e4d102ded66c39b99c2ce6c8", - "sha256:7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc", - "sha256:965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779", - "sha256:9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989", - "sha256:9bef37ee224e104a413f0780e29adb3e514a5b698aabe0d969a6ba426b8435d1", - "sha256:c1ec8db4fac31850286b7cd3b9c0e1b944204668b8eb721674916d4e28744092", - "sha256:c8a116feafdb1f84607cb3b14aa1418424ae71fee131642fc568d21423b51824", - "sha256:ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d", - "sha256:d705f8aeecdf3262379644e4b55107a3b55860eb812b673b28d0fbc347a60c55", - "sha256:e898a0863421650f0bebac8ba40840fc02258ef4714cb7e1fd76b6a6354bda36", - "sha256:f8a7bff6e8664afc4e6c28b983845c5bc14965030e3fb98789734d416af77c4b" + "sha256:0dd4eb8e0bbf365d6f652711ce21b8fd2b596f873d32aabb0fbb53ec604418cc", + "sha256:1d0971cc7251aeff955aa742ec541ee8aaea4bb2ebf0245748fbec62f744a37e", + "sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135", + "sha256:230a3506df6b5f446fed2398e58dcaafdff12d67fe1397dff196411a9e820d02", + "sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3", + "sha256:2cf04601633a4ec176b9cc3d3e73789c037641001dbfaf7c411f89cd3e04fcaf", + "sha256:3ddff38894c7857c476feb3538dd847514379d6dc844961dc99f04b0384b1b1b", + "sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2", + "sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af", + "sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d", + "sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880", + "sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077", + "sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f", + "sha256:826ccf85d4514609219725ba4a7abd569228c2c9f1968e8be05be366f68291ec", + "sha256:836d14eb53b500fd92bd5db2fc5894f7c72b634f9c2a28f546f75967503d8e25", + "sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0", + "sha256:85e701a6c316b7067f1e8675c638036a796fe5116783a4c932e7eb8e305a3ffe", + "sha256:8c941af1b20971d9e98c2369bdf118ef546b2569957469a9ab1e6d76b97d675f", + "sha256:900589e19200be76dd7cbaa95e9771605b5ce3f62512d039fb3bc5da9014912a", + "sha256:9147868bb0cc01e6846606cd65cbf9c58598f187b96d14dd1ca17338b08793bb", + "sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d", + "sha256:ab5ee15d3462198c794c49ccd31773d8a2b8c17d622aa184f669d2b98c2f0857", + "sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c", + "sha256:b2e71c4670ebe1067fa8632f0d081e47254ee2d3d409de54168b43b0ba9147e0", + "sha256:b43b13e5622c5a53ab12f3272e6f42f1ce37cd5b6684b2676cb365403295cd40", + "sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4", + "sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20", + "sha256:caa68c95bc1776d3521f81eeb4d5b9438be92514ec2a79fececda814099c8314", + "sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da", + "sha256:d2c2d9b24d3c65b5a02cac12cbb4e4194e590314519ed49db2f67ef561c3cf58", + "sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2", + "sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd", + "sha256:f31722f1c033c198aa4a39a01905951c00bd1c74f922e8afc1b1c62adbcdd56a", + "sha256:f68c352a68e5fdf1e97288d5cec9296664c590c25932a8476224124aaf90dbcd" ], - "version": "==8.1" + "version": "==9.1" }, "whitenoise": { "hashes": [ @@ -1343,10 +1367,10 @@ }, "certifi": { "hashes": [ - "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", - "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee", + "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" ], - "version": "==2020.12.5" + "version": "==2021.5.30" }, "chardet": { "hashes": [ @@ -1357,9 +1381,7 @@ "version": "==4.0.0" }, "coverage": { - "extras": [ - "toml" - ], + "extras": [], "hashes": [ "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", @@ -1419,18 +1441,18 @@ }, "coveralls": { "hashes": [ - "sha256:7bd173b3425733661ba3063c88f180127cc2b20e9740686f86d2622b31b41385", - "sha256:cbb942ae5ef3d2b55388cb5b43e93a269544911535f1e750e1c656aef019ce60" + "sha256:172fb79c5f61c6ede60554f2cac46deff6d64ee735991fb2124fb414e188bdb4", + "sha256:9b3236e086627340bf2c95f89f757d093cbed43d17179d3f4fb568c347e7d29a" ], "index": "pypi", - "version": "==3.0.1" + "version": "==3.1.0" }, "distlib": { "hashes": [ - "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb", - "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1" + "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736", + "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c" ], - "version": "==0.3.1" + "version": "==0.3.2" }, "docopt": { "hashes": [ @@ -1449,11 +1471,11 @@ }, "execnet": { "hashes": [ - "sha256:7a13113028b1e1cc4c6492b28098b3c6576c9dccc7973bfe47b342afadafb2ac", - "sha256:b73c5565e517f24b62dea8a5ceac178c661c4309d3aa0c3e420856c072c411b4" + "sha256:7e3c2cdb6389542a91e9855a9cc7545fbed679e96f8808bcbb1beb325345b189", + "sha256:e840ce25562e414ee5684864d510dbeeb0bce016bc89b22a6e5ce323b5e6552f" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.8.0" + "version": "==1.8.1" }, "factory-boy": { "hashes": [ @@ -1465,11 +1487,11 @@ }, "faker": { "hashes": [ - "sha256:73562fb99b6046c5d26b8dd98a1437a896f8601c96382d835c656166159f4f59", - "sha256:c6a4a0a1dde71f16d489a3097661a87ae96329dbde4c3ece8a5ccc340441ade1" + "sha256:30189045769cb26f91ed218140469fd0b42520b2ea22ff2958ed81071a3ed839", + "sha256:a724ca2325f4af659929052fbbb613caaec237a93fcdc1cbc7aa860e61e3c18f" ], "markers": "python_version >= '3.6'", - "version": "==8.1.4" + "version": "==8.7.0" }, "filelock": { "hashes": [ @@ -1506,52 +1528,52 @@ }, "jinja2": { "hashes": [ - "sha256:2f2de5285cf37f33d33ecd4a9080b75c87cd0c1994d5a9c6df17131ea1f049c6", - "sha256:ea8d7dd814ce9df6de6a761ec7f1cac98afe305b8cdc4aaae4e114b8d8ce24c5" + "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4", + "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4" ], "markers": "python_version >= '3.6'", - "version": "==3.0.0" + "version": "==3.0.1" }, "markupsafe": { "hashes": [ - "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95", - "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f", - "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d", - "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc", - "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0", - "sha256:31d4206caf9be06b8e7a85de4df933d159b4877d4fc308ca8192d97faf56a41e", - "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901", - "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66", - "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63", - "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b", - "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5", - "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c", - "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1", - "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05", - "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf", - "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527", - "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb", - "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb", - "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2", - "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730", - "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1", - "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75", - "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b", - "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b", - "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715", - "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b", - "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8", - "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96", - "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348", - "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958", - "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd", - "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6", - "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20", - "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf", - "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b" + "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298", + "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64", + "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b", + "sha256:060b790af48b3d1cb6776a1e8956fb41106c6befaca717181c41a1728147dc73", + "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", + "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", + "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", + "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", + "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", + "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", + "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", + "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", + "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", + "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", + "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", + "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", + "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", + "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", + "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", + "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", + "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", + "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", + "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", + "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", + "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", + "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", + "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", + "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", + "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", + "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", + "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", + "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", + "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", + "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51", + "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872" ], "markers": "python_version >= '3.6'", - "version": "==2.0.0" + "version": "==2.0.1" }, "packaging": { "hashes": [ @@ -1611,19 +1633,19 @@ }, "pytest-cov": { "hashes": [ - "sha256:8535764137fecce504a49c2b742288e3d34bc09eed298ad65963616cc98fd45e", - "sha256:95d4933dcbbacfa377bb60b29801daa30d90c33981ab2a79e9ab4452c165066e" + "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a", + "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7" ], "index": "pypi", - "version": "==2.12.0" + "version": "==2.12.1" }, "pytest-django": { "hashes": [ - "sha256:80f8875226ec4dc0b205f0578072034563879d98d9b1bec143a80b9045716cb0", - "sha256:a51150d8962200250e850c6adcab670779b9c2aa07271471059d1fb92a843fa9" + "sha256:65783e78382456528bd9d79a35843adde9e6a47347b20464eb2c885cb0f1f606", + "sha256:b5171e3798bf7e3fc5ea7072fe87324db67a4dd9f1192b037fed4cc3c1b7f455" ], "index": "pypi", - "version": "==4.2.0" + "version": "==4.4.0" }, "pytest-env": { "hashes": [ @@ -1730,11 +1752,11 @@ }, "sphinxcontrib-htmlhelp": { "hashes": [ - "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f", - "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b" + "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07", + "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2" ], - "markers": "python_version >= '3.5'", - "version": "==1.0.3" + "markers": "python_version >= '3.6'", + "version": "==2.0.0" }, "sphinxcontrib-jsmath": { "hashes": [ @@ -1754,11 +1776,11 @@ }, "sphinxcontrib-serializinghtml": { "hashes": [ - "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc", - "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a" + "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd", + "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952" ], "markers": "python_version >= '3.5'", - "version": "==1.1.4" + "version": "==1.1.5" }, "termcolor": { "hashes": [ @@ -1792,19 +1814,19 @@ }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c", + "sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.4" + "version": "==1.26.5" }, "virtualenv": { "hashes": [ - "sha256:307a555cf21e1550885c82120eccaf5acedf42978fd362d32ba8410f9593f543", - "sha256:72cf267afc04bf9c86ec932329b7e94db6a0331ae9847576daaa7ca3c86b29a4" + "sha256:14fdf849f80dbb29a4eb6caa9875d476ee2a5cf76a5f5415fa2f1606010ab467", + "sha256:2b0126166ea7c9c3661f5b8e06773d28f83322de7a3ff7d06f0aed18c9de6a76" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.6" + "version": "==20.4.7" } } } From ddd9ac9a07a00f03dbc02a94619249672c1b6dd7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:03:20 +0200 Subject: [PATCH 816/898] write classifier model to temporary file before copying to final location --- src/documents/classifier.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/documents/classifier.py b/src/documents/classifier.py index 2895c788a..36e906350 100644 --- a/src/documents/classifier.py +++ b/src/documents/classifier.py @@ -3,6 +3,7 @@ import logging import os import pickle import re +import shutil from django.conf import settings @@ -96,7 +97,10 @@ class DocumentClassifier(object): raise ClassifierModelCorruptError() def save(self): - with open(settings.MODEL_FILE, "wb") as f: + target_file = settings.MODEL_FILE + target_file_temp = settings.MODEL_FILE + ".part" + + with open(target_file_temp, "wb") as f: pickle.dump(self.FORMAT_VERSION, f) pickle.dump(self.data_hash, f) pickle.dump(self.data_vectorizer, f) @@ -107,6 +111,10 @@ class DocumentClassifier(object): pickle.dump(self.correspondent_classifier, f) pickle.dump(self.document_type_classifier, f) + if os.path.isfile(target_file): + os.unlink(target_file) + shutil.move(target_file_temp, target_file) + def train(self): data = list() From 1402f11dc8edbf00ad8bbb4a1cfcecb22e8014ba Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:09:16 +0200 Subject: [PATCH 817/898] fix logging getting spammed with pdfminer warnings on JPG files --- src/paperless_tesseract/parsers.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index c6cd392d8..57cfb0118 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -214,8 +214,12 @@ class RasterisedDocumentParser(DocumentParser): # This forces tesseract to use one core per page. os.environ['OMP_THREAD_LIMIT'] = "1" - text_original = self.extract_text(None, document_path) - original_has_text = text_original and len(text_original) > 50 + if mime_type == "application/pdf": + text_original = self.extract_text(None, document_path) + original_has_text = text_original and len(text_original) > 50 + else: + text_original = None + original_has_text = False if settings.OCR_MODE == "skip_noarchive" and original_has_text: self.log("debug", From ff7187672dacf2aa0578b57ac93cef69abcee0d5 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:18:21 +0200 Subject: [PATCH 818/898] fix pycodestyle --- src/paperless_mail/mail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index b051b94ea..327731a84 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -77,7 +77,7 @@ def make_criterias(rule): maximum_age = date.today() - timedelta(days=rule.maximum_age) criterias = {} if rule.maximum_age > 0: - criterias["date_gte"] = maximum_age + criterias["date_gte"] = maximum_age if rule.filter_from: criterias["from_"] = rule.filter_from if rule.filter_subject: From 86d1c37ef993459b368624ac445ac224a0168d83 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:40:28 +0200 Subject: [PATCH 819/898] update requirements.txt --- requirements.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/requirements.txt b/requirements.txt index b0f69256e..f99bb3d8d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,13 +15,13 @@ attrs==21.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, autobahn==21.3.1; python_version >= '3.7' automat==20.2.0 blessed==1.18.0 -certifi==2020.12.5 +certifi==2021.5.30 cffi==1.14.5 channels-redis==3.2.0 channels==3.0.3 chardet==4.0.0; python_version >= '3.1' -click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +click==8.0.1; python_version >= '3.6' +coloredlogs==15.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.19 constantly==15.1.0 cryptography==3.4.7 @@ -32,15 +32,15 @@ django-extensions==3.1.3 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' django-q==1.3.4 -django==3.2.3 +django==3.2.4 djangorestframework==3.12.4 filelock==3.0.12 fuzzywuzzy[speedup]==0.18.0 gunicorn==20.1.0 h11==0.12.0; python_version >= '3.6' hiredis==2.0.0; python_version >= '3.6' -httptools==0.1.2 -humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +httptools==0.2.0 +humanfriendly==9.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' imap-tools==0.41.0 @@ -53,10 +53,10 @@ langdetect==1.0.9 lxml==4.6.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 numpy==1.19.5 -ocrmypdf==12.0.1 +ocrmypdf==12.0.3 pathvalidate==2.4.1 pdfminer.six==20201018 -pikepdf==2.12.0 +pikepdf==2.12.2 pillow==8.2.0 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.3.0; python_version >= '3' @@ -69,7 +69,7 @@ python-dateutil==2.8.1 python-dotenv==0.17.1 python-gnupg==0.4.7 python-levenshtein==0.12.2 -python-magic==0.4.22 +python-magic==0.4.24 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 @@ -80,21 +80,21 @@ scikit-learn==0.24.0 scipy==1.5.4 service-identity==21.1.0 six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -sortedcontainers==2.3.0 +sortedcontainers==2.4.0 sqlparse==0.4.1; python_version >= '3.5' threadpoolctl==2.1.0; python_version >= '3.5' tika==1.24 -tqdm==4.60.0 +tqdm==4.61.1 twisted[tls]==21.2.0; python_full_version >= '3.5.4' txaio==21.2.1; python_version >= '3.6' tzlocal==2.1 -urllib3==1.26.4; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' -uvicorn[standard]==0.13.4 +urllib3==1.26.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +uvicorn[standard]==0.14.0 uvloop==0.14.0 watchdog==1.0.2 watchgod==0.7 wcwidth==0.2.5 -websockets==8.1 +websockets==9.1 whitenoise==5.2.0 whoosh==2.7.4 zope.interface==5.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From 8751b11ac384c96fbbbe4a61588e4a9585a212e9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:54:24 +0200 Subject: [PATCH 820/898] update docker entrypoint --- docker/docker-entrypoint.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 13bc56b85..e494eac75 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -29,13 +29,9 @@ initialize() { mkdir -p /tmp/paperless set +e - CURRENT_USER=$(stat -c '%U' ../) - CURRENT_GROUP=$(stat -c '%G' ../) - if [[ ${CURRENT_USER} != "paperless" || ${CURRENT_GROUP} != "paperless" ]] ; then - echo "Adjusting permissions of paperless files. This may take a while." - chown -R paperless:paperless ../ - fi + echo "Adjusting permissions of paperless files. This may take a while." chown -R paperless:paperless /tmp/paperless + find .. -not \( -user paperless -and -group paperless \) -exec chown paperless:paperless {} + set -e gosu paperless /sbin/docker-prepare.sh From fd65066178532f3cfc649a096221c2f4b5950116 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 15:08:56 +0200 Subject: [PATCH 821/898] update to Angular 11 --- src-ui/angular.json | 1 - src-ui/package-lock.json | 14686 ++++++++++++------------- src-ui/package.json | 36 +- src-ui/src/app/app-routing.module.ts | 2 +- 4 files changed, 7154 insertions(+), 7571 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index 0ae537d0c..f1d646c9f 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -72,7 +72,6 @@ "optimization": true, "outputHashing": "none", "sourceMap": false, - "extractCss": true, "namedChunks": false, "extractLicenses": true, "vendorChunk": false, diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index b1c968aae..955f4cf29 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -8,24 +8,24 @@ "name": "paperless-ui", "version": "0.0.0", "dependencies": { - "@angular/animations": "~10.1.5", - "@angular/common": "~10.1.5", - "@angular/compiler": "~10.1.5", - "@angular/core": "~10.1.5", - "@angular/forms": "~10.1.5", - "@angular/localize": "~10.1.5", - "@angular/platform-browser": "~10.1.5", - "@angular/platform-browser-dynamic": "~10.1.5", - "@angular/router": "~10.1.5", - "@ng-bootstrap/ng-bootstrap": "^8.0.4", - "@ng-select/ng-select": "^5.0.9", + "@angular/animations": "~11.2.14", + "@angular/common": "~11.2.14", + "@angular/compiler": "~11.2.14", + "@angular/core": "~11.2.14", + "@angular/forms": "~11.2.14", + "@angular/localize": "~11.2.14", + "@angular/platform-browser": "~11.2.14", + "@angular/platform-browser-dynamic": "~11.2.14", + "@angular/router": "~11.2.14", + "@ng-bootstrap/ng-bootstrap": "^9.1.2", + "@ng-select/ng-select": "^7.0.0", "bootstrap": "^4.5.0", "file-saver": "^2.0.5", - "ng-bootstrap": "^1.6.3", + "ng-bootstrap": "^0.46.0", "ng2-pdf-viewer": "^6.3.2", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", - "ngx-file-drop": "^10.0.0", + "ngx-file-drop": "^11.1.0", "ngx-infinite-scroll": "^9.1.0", "rxjs": "~6.6.0", "tslib": "^2.0.0", @@ -33,16 +33,16 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.1002.0", - "@angular/cli": "~10.1.5", - "@angular/compiler-cli": "~10.1.5", - "@types/jasmine": "~3.5.0", + "@angular-devkit/build-angular": "^0.901.15", + "@angular/cli": "~11.2.14", + "@angular/compiler-cli": "~11.2.14", + "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", "@types/node": "^12.11.1", "codelyzer": "^6.0.0", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", - "karma": "~5.0.0", + "karma": "~6.3.3", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~4.0.0", @@ -54,13 +54,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz", - "integrity": "sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.14.tgz", + "integrity": "sha512-965TVXuBtRb8RySgxRxUEO+YTd7mT0xiqVHSe+MHvMtUCmEE9vwRofFZl6axkK5ri4fiomiMnOVE19aw4spgNQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "10.2.3", - "rxjs": "6.6.2" + "@angular-devkit/core": "11.2.14", + "rxjs": "6.6.3" }, "engines": { "node": ">= 10.13.0", @@ -68,95 +68,73 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@angular-devkit/build-angular": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.3.tgz", - "integrity": "sha512-NjM8H2AUpLjcf+3mKYd99VbFgN4kwT++IBmR9BRQkqOZ4fD63g8jLPzC0KTsWGIVkZtR9Qc88YW/5sC8C3SVFQ==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.15.tgz", + "integrity": "sha512-Qhyfnjda+lbI97xpimb0g6RYiu/Xf/Awtx2xBRaE0pGW/T/qrGEeKwF4mu2CAgDSHK+0+V1msW8ttPMw+Z8org==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1002.3", - "@angular-devkit/build-optimizer": "0.1002.3", - "@angular-devkit/build-webpack": "0.1002.3", - "@angular-devkit/core": "10.2.3", - "@babel/core": "7.11.1", - "@babel/generator": "7.11.0", - "@babel/plugin-transform-runtime": "7.11.0", - "@babel/preset-env": "7.11.0", - "@babel/runtime": "7.11.2", - "@babel/template": "7.10.4", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "10.2.3", - "autoprefixer": "9.8.6", - "babel-loader": "8.1.0", + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/build-optimizer": "0.901.15", + "@angular-devkit/build-webpack": "0.901.15", + "@angular-devkit/core": "9.1.15", + "@babel/core": "7.9.0", + "@babel/generator": "7.9.3", + "@babel/preset-env": "7.9.0", + "@babel/template": "7.8.6", + "@jsdevtools/coverage-istanbul-loader": "3.0.3", + "@ngtools/webpack": "9.1.15", + "ajv": "6.12.3", + "autoprefixer": "9.7.4", + "babel-loader": "8.0.6", "browserslist": "^4.9.1", - "cacache": "15.0.5", + "cacache": "15.0.0", "caniuse-lite": "^1.0.30001032", "circular-dependency-plugin": "5.2.0", "copy-webpack-plugin": "6.0.3", "core-js": "3.6.4", - "css-loader": "4.2.2", + "css-loader": "3.5.1", "cssnano": "4.1.10", "file-loader": "6.0.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", - "jest-worker": "26.3.0", + "jest-worker": "25.1.0", "karma-source-map-support": "1.4.0", - "less-loader": "6.2.0", - "license-webpack-plugin": "2.3.0", + "less": "3.11.3", + "less-loader": "5.0.0", + "license-webpack-plugin": "2.1.4", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "0.10.0", + "mini-css-extract-plugin": "0.9.0", "minimatch": "3.0.4", - "open": "7.2.0", - "parse5": "6.0.1", - "parse5-htmlparser2-tree-adapter": "6.0.1", - "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.32", + "open": "7.0.3", + "parse5": "4.0.0", + "postcss": "7.0.27", "postcss-import": "12.0.1", "postcss-loader": "3.0.0", - "raw-loader": "4.0.1", - "regenerator-runtime": "0.13.7", - "resolve-url-loader": "3.1.2", + "raw-loader": "4.0.0", + "regenerator-runtime": "0.13.5", "rimraf": "3.0.2", - "rollup": "2.26.5", - "rxjs": "6.6.2", - "sass": "1.26.10", - "sass-loader": "10.0.1", - "semver": "7.3.2", + "rollup": "2.1.0", + "rxjs": "6.5.4", + "sass": "1.26.3", + "sass-loader": "8.0.2", + "semver": "7.1.3", "source-map": "0.7.3", - "source-map-loader": "1.0.2", - "source-map-support": "0.5.19", - "speed-measure-webpack-plugin": "1.3.3", - "style-loader": "1.2.1", - "stylus": "0.54.8", + "source-map-loader": "0.2.4", + "speed-measure-webpack-plugin": "1.3.1", + "style-loader": "1.1.3", + "stylus": "0.54.7", "stylus-loader": "3.0.2", - "terser": "5.3.0", - "terser-webpack-plugin": "4.1.0", + "terser": "4.6.10", + "terser-webpack-plugin": "3.0.3", "tree-kill": "1.2.2", - "webpack": "4.44.1", + "webpack": "4.42.0", "webpack-dev-middleware": "3.7.2", "webpack-dev-server": "3.11.0", "webpack-merge": "4.2.2", "webpack-sources": "1.4.3", - "webpack-subresource-integrity": "1.4.1", - "worker-plugin": "5.0.0" + "webpack-subresource-integrity": "1.4.0", + "worker-plugin": "4.0.3" }, "engines": { "node": ">= 10.13.0", @@ -164,24 +142,293 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^10.0.0", - "@angular/localize": "^10.0.0", - "ng-packagr": "^10.0.0", - "typescript": ">=3.9 < 4.1" + "@angular/compiler-cli": ">=9.0.0 < 10", + "typescript": ">=3.6 < 3.9" }, "peerDependenciesMeta": { "@angular/localize": { "optional": true - }, - "ng-packagr": { - "optional": true } } }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "9.1.15", + "rxjs": "6.5.4" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", + "dev": true, + "dependencies": { + "ajv": "6.12.3", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.5.4", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/generator": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", + "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.9.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@ngtools/webpack": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.15.tgz", + "integrity": "sha512-2k2SpBd8ssZ1XnLwM09t34pHck96d3ndyxBfg19IpXXXB/FbvhVXTkypB2ktpoGHy/8oSPeUDjz6O9x+p5iT8A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "9.1.15", + "enhanced-resolve": "4.1.1", + "rxjs": "6.5.4", + "webpack-sources": "1.4.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": ">=9.0.0 < 10", + "typescript": ">=3.6 < 3.9", + "webpack": "^4.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/cacache": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.0.tgz", + "integrity": "sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g==", + "dev": true, + "dependencies": { + "chownr": "^1.1.2", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^8.0.0", + "tar": "^6.0.1", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/cacache/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/open": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", + "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "dependencies": { "tslib": "^1.9.0" @@ -190,22 +437,40 @@ "npm": ">=2.0.0" } }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@angular-devkit/build-angular/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/@angular-devkit/build-optimizer": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.3.tgz", - "integrity": "sha512-/0KbxVmmvt3S7ghk5zUH8/PWjW8ki0uSmPsnjopY8jRgAxuXN/7PXZbqswItNlUBoEj34hj2UADBUJVic7fcnQ==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.15.tgz", + "integrity": "sha512-fCX27AAaM91UlNtjwUhqBFTvL3U0PexeVpQORJ7hAr4DG1z3DUHJS4RHCjlgM060ny0fj1V5gu21j1QAQx52vA==", "dev": true, "dependencies": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "2.0.1", - "typescript": "4.0.2", + "tslib": "1.11.1", + "typescript": "3.6.5", "webpack-sources": "1.4.3" }, "bin": { @@ -218,15 +483,15 @@ } }, "node_modules/@angular-devkit/build-optimizer/node_modules/tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true }, "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.5.tgz", + "integrity": "sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -237,14 +502,14 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.3.tgz", - "integrity": "sha512-ngvPPA3VuYGYV275PM6X0pVI0Nl/uWx4eu2S6SUFe6mniN4BQkUHAyeCUMIbM3hkau/NAcF9xUs5AvZ9GDpvPw==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.15.tgz", + "integrity": "sha512-vETkDD3xbWtm5zylKhKG2IYjmnED5DPBHCg/M0QmxMBEEiZOtqVrAwkJGSnErVInPmqW0jixIz3wCiMUBBA/dQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1002.3", - "@angular-devkit/core": "10.2.3", - "rxjs": "6.6.2" + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/core": "9.1.15", + "rxjs": "6.5.4" }, "engines": { "node": ">= 10.13.0", @@ -256,10 +521,59 @@ "webpack-dev-server": "^3.1.4" } }, + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "9.1.15", + "rxjs": "6.5.4" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", + "dev": true, + "dependencies": { + "ajv": "6.12.3", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.5.4", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "dependencies": { "tslib": "^1.9.0" @@ -275,15 +589,15 @@ "dev": true }, "node_modules/@angular-devkit/core": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", - "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.14.tgz", + "integrity": "sha512-Ad1fHqLxDwhkQgLPqq9i+G65NSOoIHXQx7ILcSPACKurV3XLS1RO9BgP/BDaqHAG+WslUAPbMStaTzzPm+9dNw==", "dev": true, "dependencies": { - "ajv": "6.12.4", + "ajv": "6.12.6", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", - "rxjs": "6.6.2", + "rxjs": "6.6.3", "source-map": "0.7.3" }, "engines": { @@ -292,151 +606,69 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@angular-devkit/schematics": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.1.7.tgz", - "integrity": "sha512-nk9RXA09b+7uq59HS/gyztNzUGHH/eQAUQhWHdDYSCG6v1lhJVCKx1HgDPELVxmeq9f+HArkAW7Y7c+ccdNQ7A==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.14.tgz", + "integrity": "sha512-Ol6+0qdGKzuVJm5gCtQr47X0OCihTfAxI4h047cHYhPFIGGPSvkG/QeJMZugflgoobi2k/xcYokOu/VAkRtWbQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "10.1.7", - "ora": "5.0.0", - "rxjs": "6.6.2" + "@angular-devkit/core": "11.2.14", + "ora": "5.3.0", + "rxjs": "6.6.3" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "dependencies": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@angular/animations": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.1.5.tgz", - "integrity": "sha512-RbUIluxgE5pSWWdODlcEAQuRqc/D1A2v275zBsMFjwJg3/cZl/z+RWcFJedHpJHEtbz7Aay1UWHu9jhXfA8elg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.14.tgz", + "integrity": "sha512-Heq/nNrCmb3jbkusu+BQszOecfFI/31Oxxj+CDQkqqYpBcswk6bOJLoEE472o+vmgxaXbgeflU9qbIiCQhpMFA==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "11.2.14" } }, "node_modules/@angular/cli": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.1.7.tgz", - "integrity": "sha512-0tbeHnPIzSV/z+KlZT7N2J1yMnwQi4xIxvbsANrLjoAxNssse84i9BDdMZYsPoV8wbzcDhFOtt5KmfTO0GIeYQ==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.14.tgz", + "integrity": "sha512-8Ud7vcUK7CKjzT2Ks1glLhleAPIC5ChcrA15XtOb7k+/uMHBkMscP/UKymbVQiBjCJlglbzJoyj8cpVYTZY5KA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1001.7", - "@angular-devkit/core": "10.1.7", - "@angular-devkit/schematics": "10.1.7", - "@schematics/angular": "10.1.7", - "@schematics/update": "0.1001.7", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", + "@schematics/angular": "11.2.14", + "@schematics/update": "0.1102.14", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", - "debug": "4.1.1", - "ini": "1.3.5", + "debug": "4.3.1", + "ini": "2.0.0", "inquirer": "7.3.3", - "npm-package-arg": "8.0.1", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.0", "npm-pick-manifest": "6.1.0", - "open": "7.2.0", - "pacote": "9.5.12", - "read-package-tree": "5.3.1", + "open": "7.4.0", + "ora": "5.3.0", + "pacote": "11.2.4", + "resolve": "1.19.0", "rimraf": "3.0.2", - "semver": "7.3.2", - "symbol-observable": "1.2.0", + "semver": "7.3.4", + "symbol-observable": "3.0.0", "universal-analytics": "0.4.23", - "uuid": "8.3.0" + "uuid": "8.3.2" }, "bin": { "ng": "bin/ng" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1001.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1001.7.tgz", - "integrity": "sha512-uFYIvMdewU44GbIyRfsUHNMLkx+C0kokpnj7eH5NbJfbyFpCfd3ijBHh+voPdPsDRWs9lLgjbxfHpswSPj4D8w==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "10.1.7", - "rxjs": "6.6.2" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "dependencies": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" } }, @@ -449,64 +681,57 @@ "node": ">=6" } }, - "node_modules/@angular/cli/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "node_modules/@angular/cli/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=10" } }, - "node_modules/@angular/cli/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "dependencies": { - "tslib": "^1.9.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular/cli/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/cli/node_modules/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=10" } }, "node_modules/@angular/common": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.1.5.tgz", - "integrity": "sha512-xo10mSQYuf6x1XrnTfwt3Rs7JtSMkSyrJtAS/vNQKdBP/8zmn6pP9zRpp7vhQ5qF+W3HN8rPLb+YI2F6uaGjBg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.2.14.tgz", + "integrity": "sha512-ZSLV/3j7eCTyLf/8g4yBFLWySjiLz3vLJAGWscYoUpnJWMnug1VRu6zoF/COxCbtORgE+Wz6K0uhfS6MziBGVw==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "11.2.14", + "rxjs": "^6.5.3" } }, "node_modules/@angular/compiler": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.1.5.tgz", - "integrity": "sha512-3LyFkEzs6P6YYKkE/6E4PasMd58EBddOt9kR9kPmj9Atv/BLY3nc5RSWkOe4rK4GnBVP+ByzQiT9Fn5CiQnG/g==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.2.14.tgz", + "integrity": "sha512-XBOK3HgA+/y6Cz7kOX4zcJYmgJ264XnfcbXUMU2cD7Ac+mbNhLPKohWrEiSWalfcjnpf5gRfufQrQP7lpAGu0A==", "dependencies": { "tslib": "^2.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.1.5.tgz", - "integrity": "sha512-AJ4eOHUxgDdfq/EagUlhJ6HaNlHajtmPkhXp2HmNMNN1nPN55VZSvN43Co2gdAHiFENqsTNlnQH630aXaDyVbQ==", - "dev": true, + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.2.14.tgz", + "integrity": "sha512-A7ltnCp03/EVqK/Q3tVUDsokgz5GHW3dSPGl0Csk7Ys5uBB9ibHTmVt4eiXA4jt0+6Bk+mKxwe5BEDqLvwYFAg==", "dependencies": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", "canonical-path": "1.0.0", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", @@ -519,7 +744,7 @@ "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", "tslib": "^2.0.0", - "yargs": "15.3.0" + "yargs": "^16.2.0" }, "bin": { "ivy-ngcc": "ngcc/main-ivy-ngcc.js", @@ -529,13 +754,16 @@ }, "engines": { "node": ">=10.0" + }, + "peerDependencies": { + "@angular/compiler": "11.2.14", + "typescript": ">=4.0 <4.2" } }, "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, "engines": { "node": ">=8" } @@ -544,39 +772,30 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@angular/compiler-cli/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "node_modules/@angular/compiler-cli/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -587,66 +806,17 @@ "node_modules/@angular/compiler-cli/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@angular/compiler-cli/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/@angular/compiler-cli/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/@angular/compiler-cli/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -655,7 +825,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -664,16 +833,14 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@angular/compiler-cli/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -687,7 +854,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.0" }, @@ -696,78 +862,88 @@ } }, "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/compiler-cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" } }, "node_modules/@angular/compiler-cli/node_modules/yargs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", - "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", - "dev": true, + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.0" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "engines": { - "node": ">=6" + "node": ">=10" } }, "node_modules/@angular/core": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.1.5.tgz", - "integrity": "sha512-B8j1B5vkBmzyan78kMJhw7dfhe7znmujbeDU7qRgRcIllc9pVJv7D133Yze6JFiLVg21PfyFYs8FBJNeq39hxQ==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.2.14.tgz", + "integrity": "sha512-vpR4XqBGitk1Faph37CSpemwIYTmJ3pdIVNoHKP6jLonpWu+0azkchf0f7oD8/2ivj2F81opcIw0tcsy/D/5Vg==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3", + "zone.js": "^0.10.2 || ^0.11.3" } }, "node_modules/@angular/forms": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.1.5.tgz", - "integrity": "sha512-fkXKCwXL0XeFMUkmzJpm+FHYrv1CCfFGxYEBQ/bzfd3Op+dFJqEPiOwK3wG943Y09THday6H509RwwEIyF/4yw==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.2.14.tgz", + "integrity": "sha512-4LWqY6KEIk1AZQFnk+4PJSOCamlD4tumuVN06gO4D0dZo9Cx+GcvW6pM6N0CPubRvPs3sScCnu20WT11HNWC1w==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "11.2.14", + "@angular/core": "11.2.14", + "@angular/platform-browser": "11.2.14", + "rxjs": "^6.5.3" } }, "node_modules/@angular/localize": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-10.1.5.tgz", - "integrity": "sha512-wEiF9lLWulTwGFqFJ4dJ+mBiyylE0amJR4leUGHKu6iwjPUQUBCqReCapfvLLTfgt3nbq7DtVqlqxj7KW7w+xg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-11.2.14.tgz", + "integrity": "sha512-ssMuquxxqxA98LgEICEO/3JdmSflWxu5rlm/HPo28bnGiZ4IzDamZjJ1cu4S6RgsonJ1drB3Z8wkidXfEYZiWA==", "dependencies": { "@babel/core": "7.8.3", "glob": "7.1.2", - "yargs": "15.3.0" + "yargs": "^16.2.0" }, "bin": { "localize-extract": "src/tools/src/extract/main.js", @@ -775,6 +951,10 @@ }, "engines": { "node": ">=8.0" + }, + "peerDependencies": { + "@angular/compiler": "11.2.14", + "@angular/compiler-cli": "11.2.14" } }, "node_modules/@angular/localize/node_modules/@babel/core": { @@ -800,6 +980,10 @@ }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@angular/localize/node_modules/ansi-regex": { @@ -819,24 +1003,19 @@ }, "engines": { "node": ">=8" - } - }, - "node_modules/@angular/localize/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@angular/localize/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "node_modules/@angular/localize/node_modules/color-convert": { @@ -860,18 +1039,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/@angular/localize/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@angular/localize/node_modules/glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -896,36 +1063,6 @@ "node": ">=8" } }, - "node_modules/@angular/localize/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/localize/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/localize/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, "node_modules/@angular/localize/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -943,9 +1080,9 @@ } }, "node_modules/@angular/localize/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -967,94 +1104,124 @@ } }, "node_modules/@angular/localize/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/localize/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" } }, "node_modules/@angular/localize/node_modules/yargs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", - "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.0" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/@angular/localize/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "engines": { - "node": ">=6" + "node": ">=10" } }, "node_modules/@angular/platform-browser": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.1.5.tgz", - "integrity": "sha512-qMAoPHt6dgXMtieI4zx/s5yX7FFRRUDp1R4GMBCZHPN3p66WdEVxBJo4p5RWhZJioXpUwKz8Xvc+Rrh7r0KDBA==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.2.14.tgz", + "integrity": "sha512-fb7b7ss/gRoP8wLAN17W62leMgjynuyjEPU2eUoAAazsG9f2cgM+z3rK29GYncDVyYQxZUZYnjSqvL6GSXx86A==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/animations": "11.2.14", + "@angular/common": "11.2.14", + "@angular/core": "11.2.14" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.5.tgz", - "integrity": "sha512-wxHm1UFCtB+oU+IJ6pACGmjO9H8KVzJOLYL5hp2w0k8s7k7Zg73f6BdRgWWEEYv6uYIfF77qtKwgbH0X5H9S+w==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.14.tgz", + "integrity": "sha512-TWTPdFs6iBBcp+/YMsgCRQwdHpWGq8KjeJDJ2tfatGgBD3Gqt2YaHOMST1zPW6RkrmupytTejuVqXzeaKWFxuw==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "11.2.14", + "@angular/compiler": "11.2.14", + "@angular/core": "11.2.14", + "@angular/platform-browser": "11.2.14" } }, "node_modules/@angular/router": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-10.1.5.tgz", - "integrity": "sha512-tY88ZzoBrc9K67wi5V1NLnurd3r9bYR2csZ6/zJeOE+Vdxz9ChSaglgh9T0vQdbVEAjVGPP5QtYaFO2Xv4qOIg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.2.14.tgz", + "integrity": "sha512-3aYBmj+zrEL9yf/ntIQxHIYaWShZOBKP3U07X2mX+TPMpGlvHDnR7L6bWhQVZwewzMMz7YVR16ldg50IFuAlfA==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "11.2.14", + "@angular/core": "11.2.14", + "@angular/platform-browser": "11.2.14", + "rxjs": "^6.5.3" } }, "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dependencies": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.11.0", @@ -1081,7 +1248,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -1090,17 +1256,16 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", "dependencies": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1114,457 +1279,304 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.12.0", - "semver": "^5.5.0" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" - } - }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "node_modules/@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true, - "dependencies": { - "lodash": "^4.17.19" + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-simple-access/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dependencies": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz", + "integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==", "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz", + "integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1573,139 +1585,152 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz", + "integrity": "sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz", + "integrity": "sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { @@ -1715,15 +1740,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { @@ -1733,15 +1752,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { @@ -1751,15 +1764,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { @@ -1769,6 +1776,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { @@ -1778,6 +1788,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { @@ -1787,6 +1800,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { @@ -1796,6 +1812,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { @@ -1805,426 +1824,584 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz", + "integrity": "sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz", + "integrity": "sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, "dependencies": { "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", - "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz", + "integrity": "sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/compat-data": "^7.9.0", + "@babel/helper-compilation-targets": "^7.8.7", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.0", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.9.0", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.7", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env/node_modules/semver": { @@ -2247,51 +2424,66 @@ "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz", + "integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dependencies": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/source-map": { @@ -2303,13 +2495,15 @@ } }, "node_modules/@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@ctrl/tinycolor": { @@ -2321,75 +2515,92 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz", + "integrity": "sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA==", "dev": true, "dependencies": { "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", + "istanbul-lib-instrument": "^4.0.1", + "loader-utils": "^1.4.0", "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" + "schema-utils": "^2.6.4" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-8.0.4.tgz", - "integrity": "sha512-EdxTwOPOtlvfnwrglPniulmzdnXdXH3lTGaGAY1HrYRvdtGg6wicRvl+BvwVE/3Qik5NPkOWMVghUHpv3evIYg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-9.1.2.tgz", + "integrity": "sha512-oZt05AjwIY/oagS3QtST2GIlW9LQgTM7gX+wsuLQvHQt8bh9THOHAws8rDobeZi9fTUR3OvuxK56Mvj1jvyljw==", "dependencies": { "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^11.0.0", + "@angular/core": "^11.0.0", + "@angular/forms": "^11.0.0", + "@angular/localize": "^11.0.0", + "rxjs": "^6.5.5" } }, "node_modules/@ng-select/ng-select": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-5.0.9.tgz", - "integrity": "sha512-YZeSAiS8/Nx/eHZJPmOOYL8YmcvSq+dr1P8WIrsKmRA7mueorBpPc5xlUj+nLQbpLtsiQvdWDQspf/ykOvD/lA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-7.0.0.tgz", + "integrity": "sha512-YKQcohssQzLZgItCsEb0vbJR6xGRTIVq4FRp+5M7fkaX7wWM+o2o1R4LxsiWhz0CKajslkoR0VDytyiumf8QiQ==", "dependencies": { "tslib": "^2.0.0" }, "engines": { - "node": ">= 6.9.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.3.tgz", - "integrity": "sha512-h7JJMMca1bHY/0Prpxu2P3bvnC6pUKmBAfqN0h0HaRN9LTU9IDWtDRTIL1Aqhs/tcTUio/DowVKnVi2CWHAOmg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "10.2.3", - "enhanced-resolve": "4.3.0", - "webpack-sources": "1.4.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^10.0.0", - "typescript": ">=3.9 < 4.1", - "webpack": "^4.0.0" + "@angular/common": ">=11.0.0 <12.0.0", + "@angular/core": ">=11.0.0 <12.0.0", + "@angular/forms": ">=11.0.0 <12.0.0" } }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -2397,34 +2608,172 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, - "node_modules/@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "node_modules/@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", + "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", + "dev": true + }, + "node_modules/@npmcli/git": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.9.tgz", + "integrity": "sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA==", "dev": true, "dependencies": { - "mkdirp": "^1.0.4" + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/@npmcli/git/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/npm-package-arg": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.4.tgz", + "integrity": "sha512-xLokoCFqj/rPdr3LvcdDL6Kj6ipXGEDHD/QGpzwU6/pibYUOXmp5DBmg76yukFyx4ZDbrXNOTn+BPyd8TD4Jlw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/@npmcli/git/node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { "node": ">=10" @@ -2442,6 +2791,47 @@ "node": ">=10" } }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", + "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", + "dev": true + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", + "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", + "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@scarf/scarf": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.0.tgz", @@ -2449,112 +2839,91 @@ "hasInstallScript": true }, "node_modules/@schematics/angular": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.1.7.tgz", - "integrity": "sha512-jcyLWDSbpgHvB/BNVSsV4uLJpC2qRx9Z5+rcQpBB1BerqIPS/1cTQg7TViHZtcqnZqWvzHR3jfqzDUSOCZpuJQ==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.14.tgz", + "integrity": "sha512-nErn5BFYp4HB7mOkt23kF+dyM6zPxolejM8eXQ5vd/rdhcc6ROaMZ0EmeEAWkfqB3+vqaSDz/D2Nm/IjJlyW/Q==", "dev": true, "dependencies": { - "@angular-devkit/core": "10.1.7", - "@angular-devkit/schematics": "10.1.7", - "jsonc-parser": "2.3.0" + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", + "jsonc-parser": "3.0.0" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" } }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "dependencies": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@schematics/angular/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@schematics/update": { - "version": "0.1001.7", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1001.7.tgz", - "integrity": "sha512-q7g/9YaAiqyWxYmUXiSWxB9xwc30xL5iUWY3Rp2LXSH6ihaRsLabmNr743R2YQmMj2Ss+9OhILHmj7nMmqODgw==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.14.tgz", + "integrity": "sha512-OsWuC0iyNjpST1+hVUUZAegXAFpEFpS5uKYSQF3jsbyw8XHx7oA5/HbEwyr2WkX2EdV1tKrDLz6BrD5b8W6EYw==", "dev": true, "dependencies": { - "@angular-devkit/core": "10.1.7", - "@angular-devkit/schematics": "10.1.7", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", + "ini": "2.0.0", "npm-package-arg": "^8.0.0", - "pacote": "9.5.12", - "semver": "7.3.2", + "pacote": "11.2.4", + "semver": "7.3.4", "semver-intersect": "1.4.0" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" } }, - "node_modules/@schematics/update/node_modules/@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", + "node_modules/@schematics/update/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "dependencies": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" + "node": ">=10" } }, - "node_modules/@schematics/update/node_modules/rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "node_modules/@schematics/update/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "dependencies": { - "tslib": "^1.9.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "npm": ">=2.0.0" + "node": ">=10" } }, - "node_modules/@schematics/update/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", "dev": true }, "node_modules/@types/glob": { @@ -2568,9 +2937,9 @@ } }, "node_modules/@types/jasmine": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.5.14.tgz", - "integrity": "sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz", + "integrity": "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==", "dev": true }, "node_modules/@types/jasminewd2": { @@ -2583,15 +2952,15 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, "node_modules/@types/node": { @@ -2644,177 +3013,178 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/wast-printer": "1.8.5" } }, "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", "dev": true }, "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", "@xtuc/long": "4.2.2" } }, @@ -2836,10 +3206,10 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "node_modules/accepts": { @@ -2867,19 +3237,6 @@ "node": ">=0.4.0" } }, - "node_modules/adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -2889,12 +3246,6 @@ "node": ">=0.3.0" } }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "node_modules/agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -2908,15 +3259,17 @@ } }, "node_modules/agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "dev": true, "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", "humanize-ms": "^1.2.1" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 8.0.0" } }, "node_modules/aggregate-error": { @@ -2933,28 +3286,38 @@ } }, "node_modules/ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } }, "node_modules/alphanum-sort": { "version": "1.0.2", @@ -3019,7 +3382,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3043,6 +3405,16 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3068,12 +3440,6 @@ "commander": "^2.11.0" } }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -3134,12 +3500,6 @@ "node": ">=0.10.0" } }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -3153,7 +3513,8 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "dev": true, + "optional": true }, "node_modules/asn1": { "version": "0.2.4", @@ -3177,9 +3538,9 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/assert": { @@ -3271,21 +3632,28 @@ } }, "node_modules/autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", + "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", "dev": true, "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", + "browserslist": "^4.8.3", + "caniuse-lite": "^1.0.30001020", + "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" + "postcss": "^7.0.26", + "postcss-value-parser": "^4.0.2" }, "bin": { "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, "node_modules/aws-sign2": { @@ -3313,19 +3681,22 @@ } }, "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "dev": true, "dependencies": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" }, "engines": { "node": ">= 6.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, "node_modules/babel-loader/node_modules/find-cache-dir": { @@ -3342,6 +3713,18 @@ "node": ">=6" } }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/babel-loader/node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -3368,6 +3751,52 @@ "node": ">=4.0.0" } }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -3377,12 +3806,6 @@ "object.assign": "^4.1.0" } }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3418,44 +3841,6 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-arraybuffer": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", @@ -3508,7 +3893,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3523,11 +3907,54 @@ "file-uri-to-path": "1.0.0" } }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/blocking-proxy": { "version": "1.0.1", @@ -3551,9 +3978,9 @@ "dev": true }, "node_modules/bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "node_modules/body-parser": { @@ -3595,18 +4022,6 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3651,7 +4066,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -3703,21 +4117,15 @@ } }, "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "dependencies": { - "bn.js": "^4.1.0", + "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", @@ -3753,7 +4161,21 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/browserify-zlib": { "version": "0.2.0", @@ -3765,21 +4187,26 @@ } }, "node_modules/browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, "node_modules/browserstack": { @@ -3957,12 +4384,12 @@ } }, "node_modules/camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=6" } }, "node_modules/caniuse-api": { @@ -3978,16 +4405,19 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001150", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz", - "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==", - "dev": true + "version": "1.0.30001237", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", + "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/canonical-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==" }, "node_modules/caseless": { "version": "0.12.0", @@ -4018,7 +4448,6 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "dev": true, "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -4035,6 +4464,10 @@ "fsevents": "~2.1.2" } }, + "node_modules/chokidar2": { + "resolved": "node_modules/watchpack/chokidar2", + "link": true + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -4045,23 +4478,14 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, "engines": { "node": ">=6.0" } }, - "node_modules/chrome-trace-event/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -4079,6 +4503,9 @@ "dev": true, "engines": { "node": ">=6.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.1" } }, "node_modules/class-utils": { @@ -4108,6 +4535,77 @@ "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -4183,14 +4681,28 @@ } }, "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, "engines": { "node": ">=0.8" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -4205,6 +4717,15 @@ "node": ">= 4.0" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/codelyzer": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", @@ -4297,9 +4818,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, "dependencies": { "color-name": "^1.0.0", @@ -4307,9 +4828,9 @@ } }, "node_modules/colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "node_modules/colors": { @@ -4345,33 +4866,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "dependencies": { - "arity-n": "^1.0.4" - } - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -4482,6 +4982,12 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -4587,18 +5093,28 @@ }, "engines": { "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" } }, "node_modules/copy-webpack-plugin/node_modules/p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/core-js": { @@ -4606,16 +5122,24 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", "dev": true, - "hasInstallScript": true + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz", + "integrity": "sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==", "dev": true, "dependencies": { - "browserslist": "^4.8.5", + "browserslist": "^4.16.6", "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat/node_modules/semver": { @@ -4633,6 +5157,19 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -4659,9 +5196,9 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/create-hash": { @@ -4773,26 +5310,69 @@ } }, "node_modules/css-loader": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.2.tgz", - "integrity": "sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.1.tgz", + "integrity": "sha512-0G4CbcZzQ9D1Q6ndOfjFuMDo8uLYMu5vc9Abs5ztyHcKvmil6GJrMiNjzzi3tQvUF+mVRuDg7bE6Oc0Prolgig==", "dev": true, "dependencies": { - "camelcase": "^6.0.0", + "camelcase": "^5.3.1", "cssesc": "^3.0.0", "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "postcss": "^7.0.32", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.27", "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-local-by-default": "^3.0.2", "postcss-modules-scope": "^2.2.0", "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" + "postcss-value-parser": "^4.0.3", + "schema-utils": "^2.6.5", + "semver": "^6.3.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/css-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/css-parse": { @@ -5043,16 +5623,6 @@ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -5071,20 +5641,6 @@ "node": ">=0.10" } }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/date-format": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", @@ -5095,29 +5651,26 @@ } }, "node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" - } - }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true, - "engines": { - "node": "*" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5143,6 +5696,9 @@ "object-is": "^1.0.1", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/default-gateway": { @@ -5167,15 +5723,6 @@ "clone": "^1.0.2" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -5201,44 +5748,6 @@ "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -5324,6 +5833,12 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -5337,7 +5852,6 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", - "dev": true, "engines": { "node": ">= 0.6.0" } @@ -5359,21 +5873,11 @@ "dev": true }, "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "node_modules/dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, "node_modules/di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -5401,9 +5905,9 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/dir-glob": { @@ -5425,9 +5929,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "dependencies": { "ip": "^1.1.0", @@ -5544,9 +6048,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.583", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz", - "integrity": "sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "node_modules/elliptic": { @@ -5565,9 +6069,9 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/emoji-regex": { @@ -5599,10 +6103,24 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5613,88 +6131,33 @@ } }, "node_modules/engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", + "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", "ws": "~7.4.2" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dev": true, - "dependencies": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">=10.0.0" } }, "node_modules/engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", "dev": true, "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "base64-arraybuffer": "0.1.4" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/engine.io/node_modules/cookie": { @@ -5706,20 +6169,10 @@ "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/engine.io/node_modules/ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "engines": { "node": ">=8.3.0" @@ -5738,9 +6191,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -5751,6 +6204,19 @@ "node": ">=6.9.0" } }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", @@ -5766,6 +6232,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", @@ -5773,9 +6248,9 @@ "dev": true }, "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "dependencies": { "prr": "~1.0.1" @@ -5794,9 +6269,9 @@ } }, "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -5807,14 +6282,14 @@ "has-symbols": "^1.0.2", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5835,28 +6310,9 @@ }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es6-promise": { @@ -5874,21 +6330,10 @@ "es6-promise": "^4.0.3" } }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -5988,18 +6433,18 @@ "dev": true }, "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { "node": ">=0.8.x" } }, "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, "dependencies": { "original": "^1.0.0" @@ -6096,6 +6541,86 @@ "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6164,21 +6689,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -6198,18 +6708,6 @@ "node": ">=0.10.0" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -6224,18 +6722,6 @@ "node": ">=4" } }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -6279,40 +6765,11 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, "engines": { "node": ">=0.10.0" } @@ -6333,9 +6790,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6362,9 +6819,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -6411,6 +6868,13 @@ }, "engines": { "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/file-saver": { @@ -6429,7 +6893,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6482,31 +6945,9 @@ }, "engines": { "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, "node_modules/find-cache-dir/node_modules/make-dir": { @@ -6519,39 +6960,9 @@ }, "engines": { "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/find-cache-dir/node_modules/semver": { @@ -6564,15 +6975,16 @@ } }, "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/flatted": { @@ -6633,9 +7045,9 @@ } }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { "node": ">= 0.6" @@ -6676,7 +7088,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -6716,7 +7127,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, "optional": true, "os": [ "darwin" @@ -6728,14 +7138,49 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/gensync": { "version": "1.0.0-beta.1", @@ -6815,10 +7260,9 @@ } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -6835,9 +7279,9 @@ } }, "node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", "dev": true, "dependencies": { "array-union": "^2.1.0", @@ -6849,13 +7293,15 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "node_modules/handle-thing": { "version": "2.0.1", @@ -6889,7 +7335,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -6918,27 +7363,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-binary2/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -6959,6 +7383,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -7054,7 +7484,21 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/hash.js": { "version": "1.1.7", @@ -7120,9 +7564,9 @@ "dev": true }, "node_modules/html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", "dev": true }, "node_modules/html-escaper": { @@ -7132,9 +7576,9 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "node_modules/http-deceiver": { @@ -7180,33 +7624,31 @@ } }, "node_modules/http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "agent-base": "4", - "debug": "3.1.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 4.5.0" + "node": ">= 6" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/http-proxy-middleware": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", @@ -7282,6 +7724,15 @@ "node": ">=0.10.0" } }, + "node_modules/http-proxy-middleware/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/http-proxy-middleware/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7396,12 +7847,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -7521,6 +7972,64 @@ "node": ">=6" } }, + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7545,12 +8054,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -7572,13 +8075,10 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "engines": { - "node": "*" - } + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/inquirer": { "version": "7.3.3", @@ -7774,36 +8274,30 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { @@ -7825,7 +8319,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7880,62 +8373,55 @@ "rgba-regex": "^1.0.0" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dependencies": { - "kind-of": "^3.0.2" + "has": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", @@ -7946,22 +8432,28 @@ } }, "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "bin": { "is-docker": "cli.js" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { "node": ">=0.10.0" } @@ -7970,7 +8462,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7988,7 +8479,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -8005,6 +8495,12 @@ "node": ">=8" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "node_modules/is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -8021,7 +8517,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -8145,15 +8640,18 @@ } }, "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typedarray": { @@ -8202,12 +8700,15 @@ "dev": true }, "node_modules/isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "dev": true, "engines": { "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" } }, "node_modules/isexe": { @@ -8424,17 +8925,16 @@ } }, "node_modules/jest-worker": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", - "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", + "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", "dev": true, "dependencies": { - "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 8.3" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -8544,17 +9044,16 @@ } }, "node_modules/jsonc-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz", - "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "dependencies": { + "optionalDependencies": { "graceful-fs": "^4.1.6" } }, @@ -8567,22 +9066,6 @@ "node >= 0.2.0" ] }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -8611,35 +9094,34 @@ } }, "node_modules/karma": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.0.9.tgz", - "integrity": "sha512-dUA5z7Lo7G4FRSe1ZAXqOINEEWxmCjDBbfRBmU/wYlSMwxUQJP/tEEP90yJt3Uqo03s9rCgVnxtlfq+uDhxSPg==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.3.tgz", + "integrity": "sha512-JRAujkKWaOtO2LmyPH7K2XXRhrxuFAn9loIL9+iiah6vjz+ZLkqdKsySV9clRITGhj10t9baIfbCl6CJ5hu9gQ==", "dev": true, "dependencies": { "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.0.0", + "chokidar": "^3.4.2", "colors": "^1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "flatted": "^2.0.2", "glob": "^7.1.6", "graceful-fs": "^4.2.4", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.6", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "log4js": "^6.2.1", "mime": "^2.4.5", "minimatch": "^3.0.4", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^2.3.0", + "socket.io": "^3.1.0", "source-map": "^0.6.1", "tmp": "0.2.1", - "ua-parser-js": "0.7.21", - "yargs": "^15.3.1" + "ua-parser-js": "^0.7.23", + "yargs": "^16.1.1" }, "bin": { "karma": "bin/karma" @@ -8716,26 +9198,20 @@ }, "engines": { "node": ">=8" - } - }, - "node_modules/karma/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/karma/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "node_modules/karma/node_modules/color-convert": { @@ -8762,19 +9238,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/karma/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/karma/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -8784,22 +9247,10 @@ "node": ">=8" } }, - "node_modules/karma/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/karma/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true, "bin": { "mime": "cli.js" @@ -8808,27 +9259,6 @@ "node": ">=4.0.0" } }, - "node_modules/karma/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/karma/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8839,9 +9269,9 @@ } }, "node_modules/karma/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", @@ -8877,9 +9307,9 @@ } }, "node_modules/karma/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -8887,42 +9317,46 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" } }, "node_modules/karma/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/karma/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, "engines": { - "node": ">=6" + "node": ">=10" } }, "node_modules/killable": { @@ -8940,25 +9374,13 @@ "node": ">=0.10.0" } }, - "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/less": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", - "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz", + "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==", "dev": true, "dependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "make-dir": "^2.1.0", - "mime": "^1.4.1", + "clone": "^2.1.2", "tslib": "^1.10.0" }, "bin": { @@ -8968,24 +9390,76 @@ "node": ">=6" }, "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", "image-size": "~0.5.0", - "native-request": "^1.0.5", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "promise": "^7.1.1", + "request": "^2.83.0", "source-map": "~0.6.0" } }, "node_modules/less-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", - "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", "dev": true, "dependencies": { - "clone": "^2.1.2", - "less": "^3.11.3", - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 4.8.0" + }, + "peerDependencies": { + "less": "^2.3.1 || ^3.0.0", + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/less-loader/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/less-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/less-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/less/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" } }, "node_modules/less/node_modules/source-map": { @@ -9026,9 +9500,9 @@ } }, "node_modules/license-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz", + "integrity": "sha512-1Xq72fmPbTg5KofXs+yI5L4QqPFjQ6mZxoeI6D7gfiEDOtaEIk6PGrdLaej90bpDqKNHNxlQ/MW4tMAL6xMPJQ==", "dev": true, "dependencies": { "@types/webpack-sources": "^0.1.5", @@ -9068,16 +9542,15 @@ } }, "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/lodash": { @@ -9097,12 +9570,6 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -9212,12 +9679,16 @@ } }, "node_modules/loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true, "engines": { "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, "node_modules/loose-envify": { @@ -9248,7 +9719,6 @@ "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, "dependencies": { "sourcemap-codec": "^1.4.4" } @@ -9282,87 +9752,79 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", - "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", "dev": true, "dependencies": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/make-fetch-happen/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "node_modules/make-fetch-happen/node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" + "agent-base": "6", + "debug": "4" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">= 6" } }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "node_modules/make-fetch-happen/node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "dependencies": { - "figgy-pudding": "^3.5.1" + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "node_modules/mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, "node_modules/map-cache": { @@ -9418,16 +9880,13 @@ } }, "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" } }, "node_modules/merge-descriptors": { @@ -9479,16 +9938,16 @@ } }, "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, "node_modules/miller-rabin": { @@ -9505,9 +9964,9 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/mime": { @@ -9553,9 +10012,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", - "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", "dev": true, "dependencies": { "loader-utils": "^1.1.0", @@ -9565,6 +10024,9 @@ }, "engines": { "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.4.0" } }, "node_modules/mini-css-extract-plugin/node_modules/json5": { @@ -9593,21 +10055,6 @@ "node": ">=4.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -9674,6 +10121,23 @@ "node": ">= 8" } }, + "node_modules/minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -9686,6 +10150,16 @@ "node": ">= 8" } }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -9698,6 +10172,18 @@ "node": ">=8" } }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -9745,18 +10231,6 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -9769,14 +10243,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", - "engines": { - "node": "*" - } - }, "node_modules/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -9862,13 +10328,6 @@ "node": ">=0.10.0" } }, - "node_modules/native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", - "dev": true, - "optional": true - }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -9884,19 +10343,11 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "node_modules/ng-bootstrap": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-1.6.3.tgz", - "integrity": "sha1-1B/UIVTAWTQiy4PEc6OCiqdSW/U=", - "dependencies": { - "moment": "2.18.1" - } + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-0.46.0.tgz", + "integrity": "sha1-e4k0caqLFHxyFNU8UWLwMTP+7yA=", + "deprecated": "ng-bootstrap was renamed to ngx-bootstrap, please update your dependencies" }, "node_modules/ng2-pdf-viewer": { "version": "6.3.2", @@ -9932,15 +10383,19 @@ } }, "node_modules/ngx-file-drop": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-10.0.0.tgz", - "integrity": "sha512-izV90rNuXGeTCoodvD35sCC/D/bDIuFFdj1UnTMf8n3PA5O5v+7L/PJ8d9IAXIhjAg3fY0lIIqbP8RFexMbNeA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-11.1.0.tgz", + "integrity": "sha512-jRqnI58jh9xVYmbYY315TIaSfpzOXRwj8JQOjNALwi/r1a9SVkxp3C069tXo5Kkxi/elsMePN0Be4EmgLf4EVw==", "dependencies": { "tslib": "^2.0.0" }, "engines": { "node": ">= 10.0.0", "npm": ">= 6.9.0" + }, + "peerDependencies": { + "@angular/common": ">=9.0.0", + "@angular/core": ">=9.0.0" } }, "node_modules/ngx-infinite-scroll": { @@ -9959,20 +10414,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node_modules/node-fetch-npm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", - "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", - "dev": true, - "dependencies": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -9982,6 +10423,45 @@ "node": ">= 6.0.0" } }, + "node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -10020,43 +10500,30 @@ "dev": true }, "node_modules/node-releases": { - "version": "1.1.64", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", - "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, + "abbrev": "1" + }, "bin": { - "semver": "bin/semver" + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -10071,12 +10538,18 @@ } }, "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/npm-bundled": { @@ -10107,12 +10580,12 @@ "dev": true }, "node_modules/npm-package-arg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz", - "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.0.tgz", + "integrity": "sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig==", "dev": true, "dependencies": { - "hosted-git-info": "^3.0.2", + "hosted-git-info": "^3.0.6", "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" }, @@ -10121,14 +10594,21 @@ } }, "node_modules/npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", "dev": true, "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/npm-pick-manifest": { @@ -10143,82 +10623,24 @@ } }, "node_modules/npm-registry-fetch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", - "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, "dependencies": { - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "JSONStream": "^1.3.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/npm-registry-fetch/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-registry-fetch/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -10231,6 +10653,18 @@ "node": ">=4" } }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "node_modules/nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -10246,6 +10680,15 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -10290,6 +10733,53 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -10312,16 +10802,19 @@ } }, "node_modules/object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { @@ -10364,16 +10857,20 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.18.0-next.2" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.pick": { @@ -10389,15 +10886,14 @@ } }, "node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.18.2" }, "engines": { "node": ">= 0.4" @@ -10454,9 +10950,9 @@ } }, "node_modules/open": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", - "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", + "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", "dev": true, "dependencies": { "is-docker": "^2.0.0", @@ -10464,6 +10960,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opencollective-postinstall": { @@ -10496,17 +10995,17 @@ } }, "node_modules/ora": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz", - "integrity": "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "dependencies": { + "bl": "^4.0.3", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-spinners": "^2.4.0", + "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "log-symbols": "^4.0.0", - "mute-stream": "0.0.8", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, @@ -10623,15 +11122,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -10641,16 +11131,6 @@ "node": ">=0.10.0" } }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -10664,6 +11144,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -10672,15 +11153,15 @@ } }, "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-map": { @@ -10693,6 +11174,9 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry": { @@ -10711,196 +11195,55 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/pacote": { - "version": "9.5.12", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", - "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.4.tgz", + "integrity": "sha512-GfTeVQGJ6WyBQbQD4t3ocHbyOmTQLmWjkCKSZPmKiGFKYKNUaM5U2gbLzUW8WG1XmS9yQFnsTFA0k3o1+q4klQ==", "dev": true, "dependencies": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", + "@npmcli/git": "^2.0.1", + "@npmcli/installed-package-contents": "^1.0.5", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.3.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-normalize-package-bin": "^1.0.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^9.0.0", "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - } - }, - "node_modules/pacote/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/pacote/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/pacote/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/pacote/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/pacote/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/pacote/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "node_modules/pacote/node_modules/npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "node_modules/pacote/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" + "read-package-json-fast": "^1.1.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.1.0" }, "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/pacote/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/pacote/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/pacote/node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "pacote": "lib/bin.js" }, "engines": { - "node": ">=4.5" + "node": ">=10" } }, - "node_modules/pacote/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/pako": { "version": "1.0.11", @@ -10946,30 +11289,9 @@ } }, "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, "node_modules/parseurl": { @@ -11003,12 +11325,12 @@ "dev": true }, "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -11055,9 +11377,9 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "dependencies": { "create-hash": "^1.1.2", @@ -11082,12 +11404,14 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "engines": { "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { @@ -11121,27 +11445,15 @@ } }, "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dev": true, - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/portfinder": { @@ -11159,9 +11471,9 @@ } }, "node_modules/portfinder/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" @@ -11177,9 +11489,9 @@ } }, "node_modules/postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", "dev": true, "dependencies": { "chalk": "^2.4.2", @@ -11188,6 +11500,10 @@ }, "engines": { "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" } }, "node_modules/postcss-calc": { @@ -11322,6 +11638,10 @@ }, "engines": { "node": ">= 4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-loader": { @@ -11550,6 +11870,45 @@ "node": ">= 6" } }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/postcss-modules-scope": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", @@ -11722,6 +12081,15 @@ "node": ">=6.9.0" } }, + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", @@ -11804,14 +12172,12 @@ "dev": true }, "node_modules/postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" }, "engines": { @@ -11903,6 +12269,16 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -11931,15 +12307,6 @@ "node": "*" } }, - "node_modules/protoduck": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", - "dev": true, - "dependencies": { - "genfun": "^5.0.0" - } - }, "node_modules/protractor": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", @@ -12006,15 +12373,6 @@ "node": ">=0.10.0" } }, - "node_modules/protractor/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/protractor/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -12096,19 +12454,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/protractor/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/protractor/node_modules/globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", @@ -12168,39 +12513,6 @@ "node": ">=0.10.0" } }, - "node_modules/protractor/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/protractor/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/protractor/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -12393,12 +12705,12 @@ } }, "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { @@ -12432,9 +12744,9 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/pump": { @@ -12542,6 +12854,26 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -12594,29 +12926,50 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/raw-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz", - "integrity": "sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.0.tgz", + "integrity": "sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" }, "engines": { "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/raw-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, "node_modules/read-cache": { @@ -12637,27 +12990,14 @@ "node": ">=0.10.0" } }, - "node_modules/read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "node_modules/read-package-json-fast": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz", + "integrity": "sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ==", "dev": true, "dependencies": { - "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "node_modules/read-package-tree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", - "dev": true, - "dependencies": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" + "npm-normalize-package-bin": "^1.0.1" } }, "node_modules/readable-stream": { @@ -12675,23 +13015,10 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, "node_modules/readdirp": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -12702,13 +13029,12 @@ "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "node_modules/regenerate-unicode-properties": { @@ -12724,9 +13050,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", "dev": true }, "node_modules/regenerator-transform": { @@ -12751,23 +13077,20 @@ "node": ">=0.10.0" } }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpu-core": { @@ -12794,9 +13117,9 @@ "dev": true }, "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -12821,9 +13144,9 @@ "dev": true }, "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -12898,7 +13221,8 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requires-port": { "version": "1.0.0", @@ -12907,11 +13231,15 @@ "dev": true }, "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dependencies": { + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { @@ -12939,108 +13267,9 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, - "node_modules/resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-url-loader/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -13082,32 +13311,10 @@ "node": ">=0.10.0" } }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - } - }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - }, "node_modules/rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "node_modules/rgb-regex": { @@ -13145,9 +13352,9 @@ } }, "node_modules/rollup": { - "version": "2.26.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", - "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.1.0.tgz", + "integrity": "sha512-gfE1455AEazVVTJoeQtcOq/U6GSxwoj4XPSWVsuWmgIxj7sBQNLDOSA82PbdMe+cP8ql8fR1jogPFe8Wg8g4SQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -13169,10 +13376,27 @@ } }, "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } }, "node_modules/run-queue": { "version": "1.0.3", @@ -13220,9 +13444,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.26.10", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", - "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", + "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", "dev": true, "dependencies": { "chokidar": ">=2.0.0 <4.0.0" @@ -13235,19 +13459,75 @@ } }, "node_modules/sass-loader": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", - "integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "dev": true, "dependencies": { - "klona": "^2.0.3", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/sass-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/saucelabs": { @@ -13280,6 +13560,10 @@ }, "engines": { "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/select-hose": { @@ -13328,9 +13612,9 @@ } }, "node_modules/selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "dependencies": { "node-forge": "^0.10.0" @@ -13516,7 +13800,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "node_modules/set-immediate-shim": { "version": "1.0.1", @@ -13554,6 +13839,15 @@ "node": ">=0.10.0" } }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -13579,6 +13873,18 @@ "sha.js": "bin.js" } }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -13685,44 +13991,6 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", @@ -13780,6 +14048,86 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -13796,115 +14144,43 @@ } }, "node_modules/socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", "dev": true, "dependencies": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", "dev": true }, - "node_modules/socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/socket.io-client/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "dependencies": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - }, "node_modules/socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "dev": true, "dependencies": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/socket.io-parser/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/sockjs": { @@ -13933,18 +14209,18 @@ } }, "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { "websocket-driver": ">=0.5.1" @@ -13957,48 +14233,50 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" } }, "node_modules/socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", "dev": true, "dependencies": { - "ip": "1.1.5", + "ip": "^1.1.5", "smart-buffer": "^4.1.0" }, "engines": { - "node": ">= 6.0.0", + "node": ">= 10.13.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", + "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", "dev": true, "dependencies": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" }, "engines": { "node": ">= 6" } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "es6-promisify": "^5.0.0" + "debug": "4" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 6.0.0" } }, "node_modules/sort-keys": { @@ -14029,28 +14307,42 @@ } }, "node_modules/source-map-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", - "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", "dev": true, "dependencies": { - "data-urls": "^2.0.0", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0", - "source-map": "^0.6.1" + "async": "^2.5.0", + "loader-utils": "^1.1.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 6" } }, - "node_modules/source-map-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/source-map-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/source-map-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, "node_modules/source-map-resolve": { @@ -14086,48 +14378,15 @@ } }, "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "node_modules/spdy": { "version": "4.0.2", @@ -14174,15 +14433,18 @@ } }, "node_modules/speed-measure-webpack-plugin": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", - "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", "dev": true, "dependencies": { "chalk": "^2.0.1" }, "engines": { "node": ">=6.0.0" + }, + "peerDependencies": { + "webpack": "^1 || ^2 || ^3 || ^4" } }, "node_modules/split-string": { @@ -14224,9 +14486,9 @@ } }, "node_modules/ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "dependencies": { "minipass": "^3.1.1" @@ -14266,6 +14528,77 @@ "node": ">=0.10.0" } }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -14452,16 +14785,49 @@ } }, "node_modules/style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", + "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" + "loader-utils": "^1.2.3", + "schema-utils": "^2.6.4" }, "engines": { "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/style-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, "node_modules/stylehacks": { @@ -14493,18 +14859,18 @@ } }, "node_modules/stylus": { - "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "version": "0.54.7", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", + "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", "dev": true, "dependencies": { "css-parse": "~2.0.0", "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", + "glob": "^7.1.3", + "mkdirp": "~0.5.x", "safer-buffer": "^2.1.2", "sax": "~1.2.4", - "semver": "^6.3.0", + "semver": "^6.0.0", "source-map": "^0.7.3" }, "bin": { @@ -14523,6 +14889,9 @@ "loader-utils": "^1.0.2", "lodash.clonedeep": "^4.5.0", "when": "~3.6.x" + }, + "peerDependencies": { + "stylus": ">=0.52.4" } }, "node_modules/stylus-loader/node_modules/json5": { @@ -14560,18 +14929,6 @@ "ms": "2.0.0" } }, - "node_modules/stylus/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/stylus/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14626,12 +14983,12 @@ } }, "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", + "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, "node_modules/tapable": { @@ -14644,9 +15001,9 @@ } }, "node_modules/tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -14673,9 +15030,9 @@ } }, "node_modules/terser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", - "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -14690,35 +15047,62 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", - "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz", + "integrity": "sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw==", "dev": true, "dependencies": { - "cacache": "^15.0.5", + "cacache": "^15.0.4", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", + "jest-worker": "^26.0.0", + "p-limit": "^2.3.0", "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", + "serialize-javascript": "^3.1.0", "source-map": "^0.6.1", - "terser": "^5.0.0", + "terser": "^4.6.13", "webpack-sources": "^1.4.3" }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, "engines": { "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=10" + "randombytes": "^2.1.0" } }, "node_modules/terser-webpack-plugin/node_modules/source-map": { @@ -14730,6 +15114,35 @@ "node": ">=0.10.0" } }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14762,9 +15175,9 @@ "dev": true }, "node_modules/timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "dependencies": { "setimmediate": "^1.0.4" @@ -14791,12 +15204,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -14854,7 +15261,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -14884,18 +15290,6 @@ "node": ">=0.8" } }, - "node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -14924,15 +15318,6 @@ "node": ">=4.2.0" } }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/tslib": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.2.tgz", @@ -15019,12 +15404,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "node_modules/type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", @@ -15057,7 +15436,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15067,10 +15445,20 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], "engines": { "node": "*" } @@ -15145,6 +15533,15 @@ "node": ">=0.10.0" } }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", @@ -15199,7 +15596,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -15290,6 +15686,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, "node_modules/url": { @@ -15342,15 +15739,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "node_modules/util-promisify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, "node_modules/util.promisify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", @@ -15382,23 +15770,13 @@ } }, "node_modules/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", @@ -15421,7 +15799,11 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/verror": { "version": "1.10.0", @@ -15453,285 +15835,22 @@ } }, "node_modules/watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.1.tgz", + "integrity": "sha512-1OeW6LucExk7h6lBuCr1isK5261Tf0PHNRG9tZjg2WKUsSkPwvyv37d7mgAUk1rZjxxaL/6WttSGMUY2hn/20g==", "dev": true, "dependencies": { - "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, "optionalDependencies": { - "watchpack-chokidar2": "^2.0.0" + "chokidar": "^3.4.0", + "chokidar2": "file:./chokidar2" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "node_modules/watchpack/chokidar2": { "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - }, - "engines": { - "node": "<8.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, "node_modules/wbuf": { "version": "1.7.3", @@ -15764,43 +15883,34 @@ "node": ">=6.9.x" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, "node_modules/webpack": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", - "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", + "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", + "enhanced-resolve": "^4.1.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", + "mkdirp": "^0.5.1", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", + "watchpack": "^1.6.0", "webpack-sources": "^1.4.1" }, "bin": { @@ -15808,6 +15918,10 @@ }, "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/webpack-dev-middleware": { @@ -15824,22 +15938,15 @@ }, "engines": { "node": ">= 6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + }, + "peerDependencies": { + "webpack": "^4.0.0" } }, "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true, "bin": { "mime": "cli.js" @@ -15893,6 +16000,14 @@ }, "engines": { "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, "node_modules/webpack-dev-server/node_modules/anymatch": { @@ -15963,6 +16078,7 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", "dev": true, "dependencies": { "anymatch": "^2.0.0", @@ -16012,6 +16128,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", "dev": true, "hasInstallScript": true, "optional": true, @@ -16069,6 +16186,15 @@ "node": ">=0.10.0" } }, + "node_modules/webpack-dev-server/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack-dev-server/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -16196,6 +16322,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" @@ -16230,15 +16357,24 @@ } }, "node_modules/webpack-subresource-integrity": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz", - "integrity": "sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.0.tgz", + "integrity": "sha512-GB1kB/LwAWC3CxwcedGhMkxGpNZxSheCe1q+KJP1bakuieAdX/rGHEcf5zsEzhKXpqsGqokgsDoD9dIkr61VDQ==", "dev": true, "dependencies": { "webpack-sources": "^1.3.0" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "html-webpack-plugin": "^2.21.0 || ~3 || >=4.0.0-alpha.2 <5", + "webpack": "^1.12.11 || ~2 || ~3 || ~4" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } } }, "node_modules/webpack/node_modules/braces": { @@ -16344,6 +16480,27 @@ "node": ">=6" } }, + "node_modules/webpack/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -16403,6 +16560,19 @@ "node": ">=4.0.0" } }, + "node_modules/webpack/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack/node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16412,16 +16582,6 @@ "yallist": "^3.0.2" } }, - "node_modules/webpack/node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "node_modules/webpack/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -16446,6 +16606,39 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -16490,23 +16683,6 @@ "figgy-pudding": "^3.5.1" } }, - "node_modules/webpack/node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/webpack/node_modules/terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -16525,6 +16701,9 @@ }, "engines": { "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" } }, "node_modules/webpack/node_modules/to-regex-range": { @@ -16567,26 +16746,6 @@ "node": ">=0.8.0" } }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/when": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", @@ -16624,7 +16783,51 @@ "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, "node_modules/worker-farm": { "version": "1.7.0", @@ -16636,12 +16839,15 @@ } }, "node_modules/worker-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", - "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", + "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", "dev": true, "dependencies": { "loader-utils": "^1.1.0" + }, + "peerDependencies": { + "webpack": ">= 4" } }, "node_modules/worker-plugin/node_modules/json5": { @@ -16711,9 +16917,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "dependencies": { "async-limiter": "~1.0.0" @@ -16741,15 +16947,6 @@ "node": ">=4.0" } }, - "node_modules/xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -16762,7 +16959,8 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/yallist": { "version": "4.0.0", @@ -16798,20 +16996,51 @@ "decamelize": "^1.2.0" } }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, "engines": { "node": ">=6" } }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/yn": { "version": "3.1.1", @@ -16822,6 +17051,18 @@ "node": ">=6" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zone.js": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", @@ -16830,164 +17071,403 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz", - "integrity": "sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.14.tgz", + "integrity": "sha512-965TVXuBtRb8RySgxRxUEO+YTd7mT0xiqVHSe+MHvMtUCmEE9vwRofFZl6axkK5ri4fiomiMnOVE19aw4spgNQ==", "dev": true, "requires": { - "@angular-devkit/core": "10.2.3", - "rxjs": "6.6.2" + "@angular-devkit/core": "11.2.14", + "rxjs": "6.6.3" + } + }, + "@angular-devkit/build-angular": { + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.15.tgz", + "integrity": "sha512-Qhyfnjda+lbI97xpimb0g6RYiu/Xf/Awtx2xBRaE0pGW/T/qrGEeKwF4mu2CAgDSHK+0+V1msW8ttPMw+Z8org==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/build-optimizer": "0.901.15", + "@angular-devkit/build-webpack": "0.901.15", + "@angular-devkit/core": "9.1.15", + "@babel/core": "7.9.0", + "@babel/generator": "7.9.3", + "@babel/preset-env": "7.9.0", + "@babel/template": "7.8.6", + "@jsdevtools/coverage-istanbul-loader": "3.0.3", + "@ngtools/webpack": "9.1.15", + "ajv": "6.12.3", + "autoprefixer": "9.7.4", + "babel-loader": "8.0.6", + "browserslist": "^4.9.1", + "cacache": "15.0.0", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.0", + "copy-webpack-plugin": "6.0.3", + "core-js": "3.6.4", + "css-loader": "3.5.1", + "cssnano": "4.1.10", + "file-loader": "6.0.0", + "find-cache-dir": "3.3.1", + "glob": "7.1.6", + "jest-worker": "25.1.0", + "karma-source-map-support": "1.4.0", + "less": "3.11.3", + "less-loader": "5.0.0", + "license-webpack-plugin": "2.1.4", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "0.9.0", + "minimatch": "3.0.4", + "open": "7.0.3", + "parse5": "4.0.0", + "postcss": "7.0.27", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "4.0.0", + "regenerator-runtime": "0.13.5", + "rimraf": "3.0.2", + "rollup": "2.1.0", + "rxjs": "6.5.4", + "sass": "1.26.3", + "sass-loader": "8.0.2", + "semver": "7.1.3", + "source-map": "0.7.3", + "source-map-loader": "0.2.4", + "speed-measure-webpack-plugin": "1.3.1", + "style-loader": "1.1.3", + "stylus": "0.54.7", + "stylus-loader": "3.0.2", + "terser": "4.6.10", + "terser-webpack-plugin": "3.0.3", + "tree-kill": "1.2.2", + "webpack": "4.42.0", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.11.0", + "webpack-merge": "4.2.2", + "webpack-sources": "1.4.3", + "webpack-subresource-integrity": "1.4.0", + "worker-plugin": "4.0.3" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", + "dev": true, + "requires": { + "@angular-devkit/core": "9.1.15", + "rxjs": "6.5.4" + } + }, + "@angular-devkit/core": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", + "dev": true, + "requires": { + "ajv": "6.12.3", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.5.4", + "source-map": "0.7.3" + } + }, + "@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.9.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", + "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@ngtools/webpack": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.15.tgz", + "integrity": "sha512-2k2SpBd8ssZ1XnLwM09t34pHck96d3ndyxBfg19IpXXXB/FbvhVXTkypB2ktpoGHy/8oSPeUDjz6O9x+p5iT8A==", + "dev": true, + "requires": { + "@angular-devkit/core": "9.1.15", + "enhanced-resolve": "4.1.1", + "rxjs": "6.5.4", + "webpack-sources": "1.4.3" + } + }, + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "cacache": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.0.tgz", + "integrity": "sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g==", + "dev": true, + "requires": { + "chownr": "^1.1.2", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^8.0.0", + "tar": "^6.0.1", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "open": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", + "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" } }, + "semver": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", + "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", + "dev": true + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true - } - } - }, - "@angular-devkit/build-angular": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.3.tgz", - "integrity": "sha512-NjM8H2AUpLjcf+3mKYd99VbFgN4kwT++IBmR9BRQkqOZ4fD63g8jLPzC0KTsWGIVkZtR9Qc88YW/5sC8C3SVFQ==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1002.3", - "@angular-devkit/build-optimizer": "0.1002.3", - "@angular-devkit/build-webpack": "0.1002.3", - "@angular-devkit/core": "10.2.3", - "@babel/core": "7.11.1", - "@babel/generator": "7.11.0", - "@babel/plugin-transform-runtime": "7.11.0", - "@babel/preset-env": "7.11.0", - "@babel/runtime": "7.11.2", - "@babel/template": "7.10.4", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "10.2.3", - "autoprefixer": "9.8.6", - "babel-loader": "8.1.0", - "browserslist": "^4.9.1", - "cacache": "15.0.5", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.0", - "copy-webpack-plugin": "6.0.3", - "core-js": "3.6.4", - "css-loader": "4.2.2", - "cssnano": "4.1.10", - "file-loader": "6.0.0", - "find-cache-dir": "3.3.1", - "glob": "7.1.6", - "jest-worker": "26.3.0", - "karma-source-map-support": "1.4.0", - "less-loader": "6.2.0", - "license-webpack-plugin": "2.3.0", - "loader-utils": "2.0.0", - "mini-css-extract-plugin": "0.10.0", - "minimatch": "3.0.4", - "open": "7.2.0", - "parse5": "6.0.1", - "parse5-htmlparser2-tree-adapter": "6.0.1", - "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.32", - "postcss-import": "12.0.1", - "postcss-loader": "3.0.0", - "raw-loader": "4.0.1", - "regenerator-runtime": "0.13.7", - "resolve-url-loader": "3.1.2", - "rimraf": "3.0.2", - "rollup": "2.26.5", - "rxjs": "6.6.2", - "sass": "1.26.10", - "sass-loader": "10.0.1", - "semver": "7.3.2", - "source-map": "0.7.3", - "source-map-loader": "1.0.2", - "source-map-support": "0.5.19", - "speed-measure-webpack-plugin": "1.3.3", - "style-loader": "1.2.1", - "stylus": "0.54.8", - "stylus-loader": "3.0.2", - "terser": "5.3.0", - "terser-webpack-plugin": "4.1.0", - "tree-kill": "1.2.2", - "webpack": "4.44.1", - "webpack-dev-middleware": "3.7.2", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2", - "webpack-sources": "1.4.3", - "webpack-subresource-integrity": "1.4.1", - "worker-plugin": "5.0.0" - }, - "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "@angular-devkit/build-optimizer": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.3.tgz", - "integrity": "sha512-/0KbxVmmvt3S7ghk5zUH8/PWjW8ki0uSmPsnjopY8jRgAxuXN/7PXZbqswItNlUBoEj34hj2UADBUJVic7fcnQ==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.15.tgz", + "integrity": "sha512-fCX27AAaM91UlNtjwUhqBFTvL3U0PexeVpQORJ7hAr4DG1z3DUHJS4RHCjlgM060ny0fj1V5gu21j1QAQx52vA==", "dev": true, "requires": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "2.0.1", - "typescript": "4.0.2", + "tslib": "1.11.1", + "typescript": "3.6.5", "webpack-sources": "1.4.3" }, "dependencies": { "tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true }, "typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.5.tgz", + "integrity": "sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ==", "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.1002.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.3.tgz", - "integrity": "sha512-ngvPPA3VuYGYV275PM6X0pVI0Nl/uWx4eu2S6SUFe6mniN4BQkUHAyeCUMIbM3hkau/NAcF9xUs5AvZ9GDpvPw==", + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.15.tgz", + "integrity": "sha512-vETkDD3xbWtm5zylKhKG2IYjmnED5DPBHCg/M0QmxMBEEiZOtqVrAwkJGSnErVInPmqW0jixIz3wCiMUBBA/dQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1002.3", - "@angular-devkit/core": "10.2.3", - "rxjs": "6.6.2" + "@angular-devkit/architect": "0.901.15", + "@angular-devkit/core": "9.1.15", + "rxjs": "6.5.4" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.901.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", + "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", + "dev": true, + "requires": { + "@angular-devkit/core": "9.1.15", + "rxjs": "6.5.4" + } + }, + "@angular-devkit/core": { + "version": "9.1.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", + "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", + "dev": true, + "requires": { + "ajv": "6.12.3", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.5.4", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17002,195 +17482,113 @@ } }, "@angular-devkit/core": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz", - "integrity": "sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.14.tgz", + "integrity": "sha512-Ad1fHqLxDwhkQgLPqq9i+G65NSOoIHXQx7ILcSPACKurV3XLS1RO9BgP/BDaqHAG+WslUAPbMStaTzzPm+9dNw==", "dev": true, "requires": { - "ajv": "6.12.4", + "ajv": "6.12.6", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", - "rxjs": "6.6.2", + "rxjs": "6.6.3", "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } } }, "@angular-devkit/schematics": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.1.7.tgz", - "integrity": "sha512-nk9RXA09b+7uq59HS/gyztNzUGHH/eQAUQhWHdDYSCG6v1lhJVCKx1HgDPELVxmeq9f+HArkAW7Y7c+ccdNQ7A==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.14.tgz", + "integrity": "sha512-Ol6+0qdGKzuVJm5gCtQr47X0OCihTfAxI4h047cHYhPFIGGPSvkG/QeJMZugflgoobi2k/xcYokOu/VAkRtWbQ==", "dev": true, "requires": { - "@angular-devkit/core": "10.1.7", - "ora": "5.0.0", - "rxjs": "6.6.2" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "@angular-devkit/core": "11.2.14", + "ora": "5.3.0", + "rxjs": "6.6.3" } }, "@angular/animations": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.1.5.tgz", - "integrity": "sha512-RbUIluxgE5pSWWdODlcEAQuRqc/D1A2v275zBsMFjwJg3/cZl/z+RWcFJedHpJHEtbz7Aay1UWHu9jhXfA8elg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.14.tgz", + "integrity": "sha512-Heq/nNrCmb3jbkusu+BQszOecfFI/31Oxxj+CDQkqqYpBcswk6bOJLoEE472o+vmgxaXbgeflU9qbIiCQhpMFA==", "requires": { "tslib": "^2.0.0" } }, "@angular/cli": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.1.7.tgz", - "integrity": "sha512-0tbeHnPIzSV/z+KlZT7N2J1yMnwQi4xIxvbsANrLjoAxNssse84i9BDdMZYsPoV8wbzcDhFOtt5KmfTO0GIeYQ==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.14.tgz", + "integrity": "sha512-8Ud7vcUK7CKjzT2Ks1glLhleAPIC5ChcrA15XtOb7k+/uMHBkMscP/UKymbVQiBjCJlglbzJoyj8cpVYTZY5KA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1001.7", - "@angular-devkit/core": "10.1.7", - "@angular-devkit/schematics": "10.1.7", - "@schematics/angular": "10.1.7", - "@schematics/update": "0.1001.7", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", + "@schematics/angular": "11.2.14", + "@schematics/update": "0.1102.14", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", - "debug": "4.1.1", - "ini": "1.3.5", + "debug": "4.3.1", + "ini": "2.0.0", "inquirer": "7.3.3", - "npm-package-arg": "8.0.1", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.0", "npm-pick-manifest": "6.1.0", - "open": "7.2.0", - "pacote": "9.5.12", - "read-package-tree": "5.3.1", + "open": "7.4.0", + "ora": "5.3.0", + "pacote": "11.2.4", + "resolve": "1.19.0", "rimraf": "3.0.2", - "semver": "7.3.2", - "symbol-observable": "1.2.0", + "semver": "7.3.4", + "symbol-observable": "3.0.0", "universal-analytics": "0.4.23", - "uuid": "8.3.0" + "uuid": "8.3.2" }, "dependencies": { - "@angular-devkit/architect": { - "version": "0.1001.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1001.7.tgz", - "integrity": "sha512-uFYIvMdewU44GbIyRfsUHNMLkx+C0kokpnj7eH5NbJfbyFpCfd3ijBHh+voPdPsDRWs9lLgjbxfHpswSPj4D8w==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.1.7", - "rxjs": "6.6.2" - } - }, - "@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - } - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, - "uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", - "dev": true + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@angular/common": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.1.5.tgz", - "integrity": "sha512-xo10mSQYuf6x1XrnTfwt3Rs7JtSMkSyrJtAS/vNQKdBP/8zmn6pP9zRpp7vhQ5qF+W3HN8rPLb+YI2F6uaGjBg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.2.14.tgz", + "integrity": "sha512-ZSLV/3j7eCTyLf/8g4yBFLWySjiLz3vLJAGWscYoUpnJWMnug1VRu6zoF/COxCbtORgE+Wz6K0uhfS6MziBGVw==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.1.5.tgz", - "integrity": "sha512-3LyFkEzs6P6YYKkE/6E4PasMd58EBddOt9kR9kPmj9Atv/BLY3nc5RSWkOe4rK4GnBVP+ByzQiT9Fn5CiQnG/g==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.2.14.tgz", + "integrity": "sha512-XBOK3HgA+/y6Cz7kOX4zcJYmgJ264XnfcbXUMU2cD7Ac+mbNhLPKohWrEiSWalfcjnpf5gRfufQrQP7lpAGu0A==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.1.5.tgz", - "integrity": "sha512-AJ4eOHUxgDdfq/EagUlhJ6HaNlHajtmPkhXp2HmNMNN1nPN55VZSvN43Co2gdAHiFENqsTNlnQH630aXaDyVbQ==", - "dev": true, + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.2.14.tgz", + "integrity": "sha512-A7ltnCp03/EVqK/Q3tVUDsokgz5GHW3dSPGl0Csk7Ys5uBB9ibHTmVt4eiXA4jt0+6Bk+mKxwe5BEDqLvwYFAg==", "requires": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", "canonical-path": "1.0.0", "chokidar": "^3.0.0", "convert-source-map": "^1.5.1", @@ -17203,46 +17601,36 @@ "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", "tslib": "^2.0.0", - "yargs": "15.3.0" + "yargs": "^16.2.0" }, "dependencies": { "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -17250,72 +17638,32 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17326,77 +17674,70 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yargs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", - "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", - "dev": true, + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.0" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==" } } }, "@angular/core": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.1.5.tgz", - "integrity": "sha512-B8j1B5vkBmzyan78kMJhw7dfhe7znmujbeDU7qRgRcIllc9pVJv7D133Yze6JFiLVg21PfyFYs8FBJNeq39hxQ==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.2.14.tgz", + "integrity": "sha512-vpR4XqBGitk1Faph37CSpemwIYTmJ3pdIVNoHKP6jLonpWu+0azkchf0f7oD8/2ivj2F81opcIw0tcsy/D/5Vg==", "requires": { "tslib": "^2.0.0" } }, "@angular/forms": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.1.5.tgz", - "integrity": "sha512-fkXKCwXL0XeFMUkmzJpm+FHYrv1CCfFGxYEBQ/bzfd3Op+dFJqEPiOwK3wG943Y09THday6H509RwwEIyF/4yw==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.2.14.tgz", + "integrity": "sha512-4LWqY6KEIk1AZQFnk+4PJSOCamlD4tumuVN06gO4D0dZo9Cx+GcvW6pM6N0CPubRvPs3sScCnu20WT11HNWC1w==", "requires": { "tslib": "^2.0.0" } }, "@angular/localize": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-10.1.5.tgz", - "integrity": "sha512-wEiF9lLWulTwGFqFJ4dJ+mBiyylE0amJR4leUGHKu6iwjPUQUBCqReCapfvLLTfgt3nbq7DtVqlqxj7KW7w+xg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-11.2.14.tgz", + "integrity": "sha512-ssMuquxxqxA98LgEICEO/3JdmSflWxu5rlm/HPo28bnGiZ4IzDamZjJ1cu4S6RgsonJ1drB3Z8wkidXfEYZiWA==", "requires": { "@babel/core": "7.8.3", "glob": "7.1.2", - "yargs": "15.3.0" + "yargs": "^16.2.0" }, "dependencies": { "@babel/core": { @@ -17434,19 +17775,14 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -17467,15 +17803,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -17494,27 +17821,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -17526,9 +17832,9 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17544,87 +17850,83 @@ } }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yargs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", - "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.0" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==" } } }, "@angular/platform-browser": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.1.5.tgz", - "integrity": "sha512-qMAoPHt6dgXMtieI4zx/s5yX7FFRRUDp1R4GMBCZHPN3p66WdEVxBJo4p5RWhZJioXpUwKz8Xvc+Rrh7r0KDBA==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.2.14.tgz", + "integrity": "sha512-fb7b7ss/gRoP8wLAN17W62leMgjynuyjEPU2eUoAAazsG9f2cgM+z3rK29GYncDVyYQxZUZYnjSqvL6GSXx86A==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.5.tgz", - "integrity": "sha512-wxHm1UFCtB+oU+IJ6pACGmjO9H8KVzJOLYL5hp2w0k8s7k7Zg73f6BdRgWWEEYv6uYIfF77qtKwgbH0X5H9S+w==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.2.14.tgz", + "integrity": "sha512-TWTPdFs6iBBcp+/YMsgCRQwdHpWGq8KjeJDJ2tfatGgBD3Gqt2YaHOMST1zPW6RkrmupytTejuVqXzeaKWFxuw==", "requires": { "tslib": "^2.0.0" } }, "@angular/router": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-10.1.5.tgz", - "integrity": "sha512-tY88ZzoBrc9K67wi5V1NLnurd3r9bYR2csZ6/zJeOE+Vdxz9ChSaglgh9T0vQdbVEAjVGPP5QtYaFO2Xv4qOIg==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.2.14.tgz", + "integrity": "sha512-3aYBmj+zrEL9yf/ntIQxHIYaWShZOBKP3U07X2mX+TPMpGlvHDnR7L6bWhQVZwewzMMz7YVR16ldg50IFuAlfA==", "requires": { "tslib": "^2.0.0" } }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", "dev": true }, "@babel/core": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", - "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.11.0", @@ -17647,23 +17949,21 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", "requires": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -17676,586 +17976,322 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.12.0", - "semver": "^5.5.0" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.14.5" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.14.5" } }, "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.14.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.14.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" }, "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.5.tgz", + "integrity": "sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==", "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.5.tgz", + "integrity": "sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz", + "integrity": "sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz", + "integrity": "sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { @@ -18267,15 +18303,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -18285,15 +18312,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -18303,15 +18321,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -18358,418 +18367,379 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz", + "integrity": "sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz", + "integrity": "sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", - "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz", + "integrity": "sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/compat-data": "^7.9.0", + "@babel/helper-compilation-targets": "^7.8.7", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.0", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.9.0", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.7", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", @@ -18798,46 +18768,46 @@ } }, "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz", + "integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -18850,12 +18820,11 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, @@ -18865,84 +18834,202 @@ "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz", + "integrity": "sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA==", "dev": true, "requires": { "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", + "istanbul-lib-instrument": "^4.0.1", + "loader-utils": "^1.4.0", "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" + "schema-utils": "^2.6.4" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, "@ng-bootstrap/ng-bootstrap": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-8.0.4.tgz", - "integrity": "sha512-EdxTwOPOtlvfnwrglPniulmzdnXdXH3lTGaGAY1HrYRvdtGg6wicRvl+BvwVE/3Qik5NPkOWMVghUHpv3evIYg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-9.1.2.tgz", + "integrity": "sha512-oZt05AjwIY/oagS3QtST2GIlW9LQgTM7gX+wsuLQvHQt8bh9THOHAws8rDobeZi9fTUR3OvuxK56Mvj1jvyljw==", "requires": { "tslib": "^2.0.0" } }, "@ng-select/ng-select": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-5.0.9.tgz", - "integrity": "sha512-YZeSAiS8/Nx/eHZJPmOOYL8YmcvSq+dr1P8WIrsKmRA7mueorBpPc5xlUj+nLQbpLtsiQvdWDQspf/ykOvD/lA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-7.0.0.tgz", + "integrity": "sha512-YKQcohssQzLZgItCsEb0vbJR6xGRTIVq4FRp+5M7fkaX7wWM+o2o1R4LxsiWhz0CKajslkoR0VDytyiumf8QiQ==", "requires": { "tslib": "^2.0.0" } }, - "@ngtools/webpack": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.3.tgz", - "integrity": "sha512-h7JJMMca1bHY/0Prpxu2P3bvnC6pUKmBAfqN0h0HaRN9LTU9IDWtDRTIL1Aqhs/tcTUio/DowVKnVi2CWHAOmg==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.2.3", - "enhanced-resolve": "4.3.0", - "webpack-sources": "1.4.3" - } - }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, - "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", + "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", + "dev": true + }, + "@npmcli/git": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.9.tgz", + "integrity": "sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA==", "dev": true, "requires": { - "mkdirp": "^1.0.4" + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.4.tgz", + "integrity": "sha512-xLokoCFqj/rPdr3LvcdDL6Kj6ipXGEDHD/QGpzwU6/pibYUOXmp5DBmg76yukFyx4ZDbrXNOTn+BPyd8TD4Jlw==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "dependencies": { "mkdirp": { @@ -18953,98 +19040,119 @@ } } }, + "@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", + "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", + "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + }, + "dependencies": { + "read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", + "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + } + } + }, "@scarf/scarf": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.0.tgz", "integrity": "sha512-b2iE8kjjzzUo2WZ0xuE2N77kfnTds7ClrDxcz3Atz7h2XrNVoAPUoT75i7CY0st5x++70V91Y+c6RpBX9MX7Jg==" }, "@schematics/angular": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.1.7.tgz", - "integrity": "sha512-jcyLWDSbpgHvB/BNVSsV4uLJpC2qRx9Z5+rcQpBB1BerqIPS/1cTQg7TViHZtcqnZqWvzHR3jfqzDUSOCZpuJQ==", + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.14.tgz", + "integrity": "sha512-nErn5BFYp4HB7mOkt23kF+dyM6zPxolejM8eXQ5vd/rdhcc6ROaMZ0EmeEAWkfqB3+vqaSDz/D2Nm/IjJlyW/Q==", "dev": true, "requires": { - "@angular-devkit/core": "10.1.7", - "@angular-devkit/schematics": "10.1.7", - "jsonc-parser": "2.3.0" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", + "jsonc-parser": "3.0.0" } }, "@schematics/update": { - "version": "0.1001.7", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1001.7.tgz", - "integrity": "sha512-q7g/9YaAiqyWxYmUXiSWxB9xwc30xL5iUWY3Rp2LXSH6ihaRsLabmNr743R2YQmMj2Ss+9OhILHmj7nMmqODgw==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.14.tgz", + "integrity": "sha512-OsWuC0iyNjpST1+hVUUZAegXAFpEFpS5uKYSQF3jsbyw8XHx7oA5/HbEwyr2WkX2EdV1tKrDLz6BrD5b8W6EYw==", "dev": true, "requires": { - "@angular-devkit/core": "10.1.7", - "@angular-devkit/schematics": "10.1.7", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", + "ini": "2.0.0", "npm-package-arg": "^8.0.0", - "pacote": "9.5.12", - "semver": "7.3.2", + "pacote": "11.2.4", + "semver": "7.3.4", "semver-intersect": "1.4.0" }, "dependencies": { - "@angular-devkit/core": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.1.7.tgz", - "integrity": "sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q==", - "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "dev": true + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true + }, "@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", @@ -19056,9 +19164,9 @@ } }, "@types/jasmine": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.5.14.tgz", - "integrity": "sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz", + "integrity": "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==", "dev": true }, "@types/jasminewd2": { @@ -19071,15 +19179,15 @@ } }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, "@types/node": { @@ -19131,177 +19239,178 @@ } }, "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", "@xtuc/long": "4.2.2" } }, @@ -19323,10 +19432,10 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "accepts": { @@ -19345,28 +19454,12 @@ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -19377,11 +19470,13 @@ } }, "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "dev": true, "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", "humanize-ms": "^1.2.1" } }, @@ -19396,9 +19491,9 @@ } }, "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -19411,13 +19506,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "alphanum-sort": { "version": "1.0.2", @@ -19464,7 +19561,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -19482,6 +19578,16 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -19507,12 +19613,6 @@ "commander": "^2.11.0" } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -19555,12 +19655,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -19571,7 +19665,8 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "dev": true, + "optional": true }, "asn1": { "version": "0.2.4", @@ -19595,9 +19690,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -19681,18 +19776,18 @@ "dev": true }, "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", + "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", "dev": true, "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", + "browserslist": "^4.8.3", + "caniuse-lite": "^1.0.30001020", + "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" + "postcss": "^7.0.26", + "postcss-value-parser": "^4.0.2" } }, "aws-sign2": { @@ -19717,16 +19812,15 @@ } }, "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "dev": true, "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" }, "dependencies": { "find-cache-dir": { @@ -19740,6 +19834,15 @@ "pkg-dir": "^3.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -19759,6 +19862,40 @@ "emojis-list": "^3.0.0", "json5": "^1.0.1" } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } } } }, @@ -19771,12 +19908,6 @@ "object.assign": "^4.1.0" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -19805,35 +19936,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -19879,8 +19981,7 @@ "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, "bindings": { "version": "1.5.0", @@ -19892,11 +19993,39 @@ "file-uri-to-path": "1.0.0" } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } }, "blocking-proxy": { "version": "1.0.1", @@ -19914,9 +20043,9 @@ "dev": true }, "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "body-parser": { @@ -19952,15 +20081,6 @@ "ms": "2.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -20007,7 +20127,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -20056,21 +20175,13 @@ } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "^4.1.0", + "bn.js": "^5.0.0", "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "browserify-sign": { @@ -20119,15 +20230,16 @@ } }, "browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "browserstack": { @@ -20277,9 +20389,9 @@ "dev": true }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-api": { @@ -20295,16 +20407,15 @@ } }, "caniuse-lite": { - "version": "1.0.30001150", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz", - "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==", + "version": "1.0.30001237", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", + "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", "dev": true }, "canonical-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==" }, "caseless": { "version": "0.12.0", @@ -20332,7 +20443,6 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -20344,6 +20454,9 @@ "readdirp": "~3.4.0" } }, + "chokidar2": { + "version": "file:node_modules/watchpack/chokidar2" + }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -20351,21 +20464,10 @@ "dev": true }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "cipher-base": { "version": "1.0.4", @@ -20381,7 +20483,8 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", - "dev": true + "dev": true, + "requires": {} }, "class-utils": { "version": "0.3.6", @@ -20403,6 +20506,63 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -20462,11 +20622,22 @@ } }, "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -20478,6 +20649,12 @@ "q": "^1.1.2" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "codelyzer": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", @@ -20566,9 +20743,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, "requires": { "color-name": "^1.0.0", @@ -20576,9 +20753,9 @@ } }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "colors": { @@ -20608,33 +20785,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -20734,6 +20890,12 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -20826,12 +20988,12 @@ }, "dependencies": { "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } } } @@ -20843,12 +21005,12 @@ "dev": true }, "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz", + "integrity": "sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "dependencies": { @@ -20866,6 +21028,16 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -20889,9 +21061,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -21000,23 +21172,52 @@ } }, "css-loader": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.2.tgz", - "integrity": "sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.1.tgz", + "integrity": "sha512-0G4CbcZzQ9D1Q6ndOfjFuMDo8uLYMu5vc9Abs5ztyHcKvmil6GJrMiNjzzi3tQvUF+mVRuDg7bE6Oc0Prolgig==", "dev": true, "requires": { - "camelcase": "^6.0.0", + "camelcase": "^5.3.1", "cssesc": "^3.0.0", "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "postcss": "^7.0.32", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.27", "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-local-by-default": "^3.0.2", "postcss-modules-scope": "^2.2.0", "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" + "postcss-value-parser": "^4.0.3", + "schema-utils": "^2.6.5", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "css-parse": { @@ -21217,16 +21418,6 @@ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -21242,17 +21433,6 @@ "assert-plus": "^1.0.0" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, "date-format": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", @@ -21260,23 +21440,18 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { "ms": "2.1.2" } }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -21315,14 +21490,6 @@ "dev": true, "requires": { "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } } }, "define-properties": { @@ -21342,37 +21509,6 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } } }, "del": { @@ -21443,6 +21579,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -21452,8 +21594,7 @@ "dependency-graph": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", - "dev": true + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==" }, "des.js": { "version": "1.0.1", @@ -21472,21 +21613,11 @@ "dev": true }, "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -21511,9 +21642,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -21534,9 +21665,9 @@ "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { "ip": "^1.1.0", @@ -21642,9 +21773,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.583", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz", - "integrity": "sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "elliptic": { @@ -21663,9 +21794,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -21693,8 +21824,21 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "optional": true, "requires": { "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "end-of-stream": { @@ -21707,16 +21851,17 @@ } }, "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", + "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", "ws": "~7.4.2" }, "dependencies": { @@ -21726,89 +21871,45 @@ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "dev": true }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", - "dev": true, - "requires": {} - } - } - }, - "engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "requires": {} } } }, "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "base64-arraybuffer": "0.1.4" } }, "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "ent": { @@ -21823,6 +21924,12 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", @@ -21830,9 +21937,9 @@ "dev": true }, "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "requires": { "prr": "~1.0.1" @@ -21848,9 +21955,9 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -21861,14 +21968,14 @@ "has-symbols": "^1.0.2", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { @@ -21882,28 +21989,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -21919,21 +22004,10 @@ "es6-promise": "^4.0.3" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -22004,15 +22078,15 @@ "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, "requires": { "original": "^1.0.0" @@ -22091,6 +22165,69 @@ "is-extendable": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -22160,23 +22297,6 @@ } } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -22191,17 +22311,6 @@ "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "external-editor": { @@ -22213,17 +22322,6 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "extglob": { @@ -22260,34 +22358,11 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -22304,9 +22379,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -22330,9 +22405,9 @@ "dev": true }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -22388,7 +22463,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -22436,25 +22510,6 @@ "pkg-dir": "^4.1.0" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -22464,30 +22519,6 @@ "semver": "^6.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -22497,12 +22528,13 @@ } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "flatted": { @@ -22551,9 +22583,9 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fragment-cache": { @@ -22585,7 +22617,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -22622,20 +22653,50 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } }, "gensync": { "version": "1.0.0-beta.1", @@ -22697,10 +22758,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } @@ -22711,9 +22771,9 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -22727,8 +22787,7 @@ "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "handle-thing": { "version": "2.0.1", @@ -22756,7 +22815,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -22776,29 +22834,6 @@ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -22810,6 +22845,12 @@ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -22953,9 +22994,9 @@ "dev": true }, "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", "dev": true }, "html-escaper": { @@ -22965,9 +23006,9 @@ "dev": true }, "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-deceiver": { @@ -23009,29 +23050,24 @@ } }, "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { - "agent-base": "4", - "debug": "3.1.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "debug": "4" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -23099,6 +23135,12 @@ } } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -23200,12 +23242,12 @@ } }, "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-utils": { @@ -23293,6 +23335,51 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { @@ -23313,12 +23400,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -23340,9 +23421,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "inquirer": { @@ -23499,30 +23580,22 @@ "dev": true }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-arrayish": { "version": "0.2.1", @@ -23540,7 +23613,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -23580,49 +23652,38 @@ "rgba-regex": "^1.0.0" } }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-directory": { @@ -23632,22 +23693,24 @@ "dev": true }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -23659,7 +23722,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -23670,6 +23732,12 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -23679,8 +23747,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.5", @@ -23762,12 +23829,12 @@ "dev": true }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -23804,9 +23871,9 @@ "dev": true }, "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "dev": true }, "isexe": { @@ -23983,12 +24050,11 @@ "dev": true }, "jest-worker": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", - "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", + "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", "dev": true, "requires": { - "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, @@ -24081,16 +24147,15 @@ } }, "jsonc-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz", - "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -24101,16 +24166,6 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -24136,35 +24191,34 @@ } }, "karma": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.0.9.tgz", - "integrity": "sha512-dUA5z7Lo7G4FRSe1ZAXqOINEEWxmCjDBbfRBmU/wYlSMwxUQJP/tEEP90yJt3Uqo03s9rCgVnxtlfq+uDhxSPg==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.3.tgz", + "integrity": "sha512-JRAujkKWaOtO2LmyPH7K2XXRhrxuFAn9loIL9+iiah6vjz+ZLkqdKsySV9clRITGhj10t9baIfbCl6CJ5hu9gQ==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.0.0", + "chokidar": "^3.4.2", "colors": "^1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "flatted": "^2.0.2", "glob": "^7.1.6", "graceful-fs": "^4.2.4", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.6", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "log4js": "^6.2.1", "mime": "^2.4.5", "minimatch": "^3.0.4", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^2.3.0", + "socket.io": "^3.1.0", "source-map": "^0.6.1", "tmp": "0.2.1", - "ua-parser-js": "0.7.21", - "yargs": "^15.3.1" + "ua-parser-js": "^0.7.23", + "yargs": "^16.1.1" }, "dependencies": { "ansi-regex": { @@ -24182,21 +24236,15 @@ "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -24220,50 +24268,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, "source-map": { @@ -24273,9 +24287,9 @@ "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -24302,9 +24316,9 @@ } }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -24312,34 +24326,32 @@ "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true } } }, @@ -24401,28 +24413,30 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "dev": true - }, "less": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", - "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz", + "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==", "dev": true, "requires": { + "clone": "^2.1.2", "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "native-request": "^1.0.5", + "promise": "^7.1.1", + "request": "^2.83.0", "source-map": "~0.6.0", "tslib": "^1.10.0" }, "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -24439,15 +24453,42 @@ } }, "less-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", - "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", "dev": true, "requires": { - "clone": "^2.1.2", - "less": "^3.11.3", - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, "leven": { @@ -24466,9 +24507,9 @@ } }, "license-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz", + "integrity": "sha512-1Xq72fmPbTg5KofXs+yI5L4QqPFjQ6mZxoeI6D7gfiEDOtaEIk6PGrdLaej90bpDqKNHNxlQ/MW4tMAL6xMPJQ==", "dev": true, "requires": { "@types/webpack-sources": "^0.1.5", @@ -24502,13 +24543,12 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -24528,12 +24568,6 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -24615,9 +24649,9 @@ } }, "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true }, "loose-envify": { @@ -24642,7 +24676,6 @@ "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, "requires": { "sourcemap-codec": "^1.4.4" } @@ -24672,88 +24705,71 @@ "dev": true }, "make-fetch-happen": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", - "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", "dev": true, "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" }, "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ssri": { + "agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "debug": "4" } }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } } } }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -24798,9 +24814,9 @@ "dev": true }, "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { "errno": "^0.1.3", @@ -24849,13 +24865,13 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "miller-rabin": { @@ -24869,9 +24885,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -24904,9 +24920,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", - "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -24935,18 +24951,6 @@ "json5": "^1.0.1" } }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -25003,6 +25007,18 @@ "minipass": "^3.0.0" } }, + "minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, "minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -25012,6 +25028,16 @@ "minipass": "^3.0.0" } }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, "minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -25021,6 +25047,15 @@ "minipass": "^3.0.0" } }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -25057,17 +25092,6 @@ "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "mkdirp": { @@ -25079,11 +25103,6 @@ "minimist": "^1.2.5" } }, - "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -25162,13 +25181,6 @@ "to-regex": "^3.0.1" } }, - "native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", - "dev": true, - "optional": true - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -25181,19 +25193,10 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "ng-bootstrap": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-1.6.3.tgz", - "integrity": "sha1-1B/UIVTAWTQiy4PEc6OCiqdSW/U=", - "requires": { - "moment": "2.18.1" - } + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-0.46.0.tgz", + "integrity": "sha1-e4k0caqLFHxyFNU8UWLwMTP+7yA=" }, "ng2-pdf-viewer": { "version": "6.3.2", @@ -25231,9 +25234,9 @@ } }, "ngx-file-drop": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-10.0.0.tgz", - "integrity": "sha512-izV90rNuXGeTCoodvD35sCC/D/bDIuFFdj1UnTMf8n3PA5O5v+7L/PJ8d9IAXIhjAg3fY0lIIqbP8RFexMbNeA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-11.1.0.tgz", + "integrity": "sha512-jRqnI58jh9xVYmbYY315TIaSfpzOXRwj8JQOjNALwi/r1a9SVkxp3C069tXo5Kkxi/elsMePN0Be4EmgLf4EVw==", "requires": { "tslib": "^2.0.0" } @@ -25253,23 +25256,41 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-fetch-npm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", - "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -25310,42 +25331,24 @@ } }, "node-releases": { - "version": "1.1.64", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", - "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "abbrev": "1" } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-range": { "version": "0.1.2", @@ -25354,10 +25357,16 @@ "dev": true }, "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } }, "npm-bundled": { "version": "1.1.2", @@ -25384,24 +25393,25 @@ "dev": true }, "npm-package-arg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz", - "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.0.tgz", + "integrity": "sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig==", "dev": true, "requires": { - "hosted-git-info": "^3.0.2", + "hosted-git-info": "^3.0.6", "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" } }, "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", "dev": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" } }, @@ -25417,65 +25427,19 @@ } }, "npm-registry-fetch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", - "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "JSONStream": "^1.3.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" } }, "npm-run-path": { @@ -25487,6 +25451,18 @@ "path-key": "^2.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -25502,6 +25478,12 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -25534,6 +25516,43 @@ "is-descriptor": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -25552,13 +25571,13 @@ "dev": true }, "object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "object-keys": { @@ -25589,13 +25608,14 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.18.0-next.2" } }, "object.pick": { @@ -25608,15 +25628,14 @@ } }, "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.18.2" } }, "obuf": { @@ -25658,9 +25677,9 @@ } }, "open": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", - "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", + "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -25690,17 +25709,17 @@ } }, "ora": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz", - "integrity": "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "requires": { + "bl": "^4.0.3", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-spinners": "^2.4.0", + "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "log-symbols": "^4.0.0", - "mute-stream": "0.0.8", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, @@ -25786,28 +25805,12 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -25818,17 +25821,18 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-map": { @@ -25852,184 +25856,40 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "pacote": { - "version": "9.5.12", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", - "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.4.tgz", + "integrity": "sha512-GfTeVQGJ6WyBQbQD4t3ocHbyOmTQLmWjkCKSZPmKiGFKYKNUaM5U2gbLzUW8WG1XmS9yQFnsTFA0k3o1+q4klQ==", "dev": true, "requires": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", + "@npmcli/git": "^2.0.1", + "@npmcli/installed-package-contents": "^1.0.5", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.3.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-normalize-package-bin": "^1.0.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^9.0.0", "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" + "read-package-json-fast": "^1.1.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.1.0" }, "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true } } @@ -26075,30 +25935,9 @@ } }, "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, "parseurl": { @@ -26126,9 +25965,9 @@ "dev": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -26166,9 +26005,9 @@ "dev": true }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -26190,10 +26029,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pify": { "version": "4.0.1", @@ -26217,21 +26055,12 @@ } }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" - } - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" + "find-up": "^4.0.0" } }, "portfinder": { @@ -26246,9 +26075,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -26263,9 +26092,9 @@ "dev": true }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", + "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -26602,6 +26431,34 @@ "postcss": "^7.0.32", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-modules-scope": { @@ -26761,6 +26618,12 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", @@ -26839,14 +26702,12 @@ } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, @@ -26904,6 +26765,16 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -26928,15 +26799,6 @@ } } }, - "protoduck": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", - "dev": true, - "requires": { - "genfun": "^5.0.0" - } - }, "protractor": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", @@ -26987,12 +26849,6 @@ "array-uniq": "^1.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -27064,16 +26920,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", @@ -27118,30 +26964,6 @@ "path-is-inside": "^1.0.1" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -27294,12 +27116,12 @@ } }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, @@ -27330,9 +27152,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -27422,6 +27244,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -27464,26 +27292,39 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } } } }, "raw-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz", - "integrity": "sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.0.tgz", + "integrity": "sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, "read-cache": { @@ -27503,27 +27344,14 @@ } } }, - "read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "read-package-json-fast": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz", + "integrity": "sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ==", "dev": true, "requires": { - "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", - "dev": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" + "npm-normalize-package-bin": "^1.0.1" } }, "readable-stream": { @@ -27541,23 +27369,10 @@ "util-deprecate": "~1.0.1" } }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, "readdirp": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -27565,13 +27380,12 @@ "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { @@ -27584,9 +27398,9 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", "dev": true }, "regenerator-transform": { @@ -27608,20 +27422,14 @@ "safe-regex": "^1.1.0" } }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "regexpu-core": { @@ -27645,9 +27453,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -27668,9 +27476,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -27729,7 +27537,8 @@ "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -27738,10 +27547,11 @@ "dev": true }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "requires": { + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" } }, @@ -27766,84 +27576,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -27872,34 +27604,10 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "rgb-regex": { @@ -27934,9 +27642,9 @@ } }, "rollup": { - "version": "2.26.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", - "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.1.0.tgz", + "integrity": "sha512-gfE1455AEazVVTJoeQtcOq/U6GSxwoj4XPSWVsuWmgIxj7sBQNLDOSA82PbdMe+cP8ql8fR1jogPFe8Wg8g4SQ==", "dev": true, "requires": { "fsevents": "~2.1.2" @@ -27949,10 +27657,13 @@ "dev": true }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", @@ -27999,25 +27710,53 @@ "dev": true }, "sass": { - "version": "1.26.10", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", - "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", + "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", - "integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "dev": true, "requires": { - "klona": "^2.0.3", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "saucelabs": { @@ -28085,9 +27824,9 @@ } }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "requires": { "node-forge": "^0.10.0" @@ -28259,7 +27998,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-immediate-shim": { "version": "1.0.1", @@ -28287,6 +28027,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -28312,6 +28058,15 @@ "safe-buffer": "^5.0.1" } }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -28405,6 +28160,69 @@ "is-extendable": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -28438,35 +28256,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -28491,121 +28280,37 @@ } }, "socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", "dev": true, "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" } }, "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", "dev": true }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } - } - }, "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" } }, "sockjs": { @@ -28642,18 +28347,18 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -28662,32 +28367,33 @@ } }, "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", "dev": true, "requires": { - "ip": "1.1.5", + "ip": "^1.1.5", "smart-buffer": "^4.1.0" } }, "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", + "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", "dev": true, "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" }, "dependencies": { "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "debug": "4" } } } @@ -28714,23 +28420,34 @@ "dev": true }, "source-map-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", - "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", "dev": true, "requires": { - "data-urls": "^2.0.0", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0", - "source-map": "^0.6.1" + "async": "^2.5.0", + "loader-utils": "^1.1.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } } } }, @@ -28766,48 +28483,15 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "spdy": { "version": "4.0.2", @@ -28850,9 +28534,9 @@ } }, "speed-measure-webpack-plugin": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", - "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", "dev": true, "requires": { "chalk": "^2.0.1" @@ -28891,9 +28575,9 @@ } }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -28923,6 +28607,63 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -29080,13 +28821,35 @@ "dev": true }, "style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", + "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" + "loader-utils": "^1.2.3", + "schema-utils": "^2.6.4" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, "stylehacks": { @@ -29114,18 +28877,18 @@ } }, "stylus": { - "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "version": "0.54.7", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", + "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", "dev": true, "requires": { "css-parse": "~2.0.0", "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", + "glob": "^7.1.3", + "mkdirp": "~0.5.x", "safer-buffer": "^2.1.2", "sax": "~1.2.4", - "semver": "^6.3.0", + "semver": "^6.0.0", "source-map": "^0.7.3" }, "dependencies": { @@ -29138,12 +28901,6 @@ "ms": "2.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -29221,9 +28978,9 @@ } }, "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", + "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", "dev": true }, "tapable": { @@ -29233,9 +28990,9 @@ "dev": true }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -29255,9 +29012,9 @@ } }, "terser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", - "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", + "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -29274,29 +29031,46 @@ } }, "terser-webpack-plugin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", - "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz", + "integrity": "sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw==", "dev": true, "requires": { - "cacache": "^15.0.5", + "cacache": "^15.0.4", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", + "jest-worker": "^26.0.0", + "p-limit": "^2.3.0", "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", + "serialize-javascript": "^3.1.0", "source-map": "^0.6.1", - "terser": "^5.0.0", + "terser": "^4.6.13", "webpack-sources": "^1.4.3" }, "dependencies": { - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" } }, "source-map": { @@ -29304,6 +29078,26 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } } } }, @@ -29330,9 +29124,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -29353,12 +29147,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -29406,7 +29194,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -29427,15 +29214,6 @@ "punycode": "^2.1.1" } }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -29455,12 +29233,6 @@ "yn": "^3.0.0" } }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true - }, "tslib": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.2.tgz", @@ -29539,12 +29311,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", @@ -29570,13 +29336,12 @@ "typescript": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", - "dev": true + "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==" }, "ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", "dev": true }, "unbox-primitive": { @@ -29629,6 +29394,14 @@ "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } } }, "uniq": { @@ -29683,8 +29456,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -29816,15 +29588,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util-promisify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, "util.promisify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", @@ -29844,19 +29607,9 @@ "dev": true }, "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "validate-npm-package-name": { "version": "3.0.0", @@ -29903,245 +29656,15 @@ "dev": true }, "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.1.tgz", + "integrity": "sha512-1OeW6LucExk7h6lBuCr1isK5261Tf0PHNRG9tZjg2WKUsSkPwvyv37d7mgAUk1rZjxxaL/6WttSGMUY2hn/20g==", "dev": true, "requires": { - "chokidar": "^3.4.1", + "chokidar": "^3.4.0", + "chokidar2": "file:chokidar2", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "neo-async": "^2.5.0" } }, "wbuf": { @@ -30172,40 +29695,34 @@ "selenium-webdriver": "^3.0.1" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, "webpack": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", - "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", + "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", + "enhanced-resolve": "^4.1.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", + "mkdirp": "^0.5.1", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", + "watchpack": "^1.6.0", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -30301,6 +29818,21 @@ "pkg-dir": "^3.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -30347,6 +29879,16 @@ "json5": "^1.0.1" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -30356,16 +29898,6 @@ "yallist": "^3.0.2" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -30387,6 +29919,30 @@ "to-regex": "^3.0.2" } }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -30422,17 +29978,6 @@ "figgy-pudding": "^3.5.1" } }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, "terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -30481,20 +30026,10 @@ "webpack-log": "^2.0.0" }, "dependencies": { - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true } } @@ -30686,6 +30221,12 @@ "binary-extensions": "^1.0.0" } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -30822,9 +30363,9 @@ } }, "webpack-subresource-integrity": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz", - "integrity": "sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.0.tgz", + "integrity": "sha512-GB1kB/LwAWC3CxwcedGhMkxGpNZxSheCe1q+KJP1bakuieAdX/rGHEcf5zsEzhKXpqsGqokgsDoD9dIkr61VDQ==", "dev": true, "requires": { "webpack-sources": "^1.3.0" @@ -30845,23 +30386,6 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, "when": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", @@ -30893,7 +30417,44 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } }, "worker-farm": { "version": "1.7.0", @@ -30905,9 +30466,9 @@ } }, "worker-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", - "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", + "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", "dev": true, "requires": { "loader-utils": "^1.1.0" @@ -30969,9 +30530,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -30993,12 +30554,6 @@ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, - "xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "dev": true - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -31008,7 +30563,8 @@ "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "yallist": { "version": "4.0.0", @@ -31032,6 +30588,42 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "yargs-parser": { @@ -31042,28 +30634,20 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, "zone.js": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index 595228501..1b6663e96 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -11,24 +11,24 @@ }, "private": true, "dependencies": { - "@angular/animations": "~10.1.5", - "@angular/common": "~10.1.5", - "@angular/compiler": "~10.1.5", - "@angular/core": "~10.1.5", - "@angular/forms": "~10.1.5", - "@angular/localize": "~10.1.5", - "@angular/platform-browser": "~10.1.5", - "@angular/platform-browser-dynamic": "~10.1.5", - "@angular/router": "~10.1.5", - "@ng-bootstrap/ng-bootstrap": "^8.0.4", - "@ng-select/ng-select": "^5.0.9", + "@angular/animations": "~11.2.14", + "@angular/common": "~11.2.14", + "@angular/compiler": "~11.2.14", + "@angular/core": "~11.2.14", + "@angular/forms": "~11.2.14", + "@angular/localize": "~11.2.14", + "@angular/platform-browser": "~11.2.14", + "@angular/platform-browser-dynamic": "~11.2.14", + "@angular/router": "~11.2.14", + "@ng-bootstrap/ng-bootstrap": "^9.1.2", + "@ng-select/ng-select": "^7.0.0", "bootstrap": "^4.5.0", "file-saver": "^2.0.5", - "ng-bootstrap": "^1.6.3", + "ng-bootstrap": "^0.46.0", "ng2-pdf-viewer": "^6.3.2", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", - "ngx-file-drop": "^10.0.0", + "ngx-file-drop": "^11.1.0", "ngx-infinite-scroll": "^9.1.0", "rxjs": "~6.6.0", "tslib": "^2.0.0", @@ -36,16 +36,16 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.1002.0", - "@angular/cli": "~10.1.5", - "@angular/compiler-cli": "~10.1.5", - "@types/jasmine": "~3.5.0", + "@angular-devkit/build-angular": "^0.901.15", + "@angular/cli": "~11.2.14", + "@angular/compiler-cli": "~11.2.14", + "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", "@types/node": "^12.11.1", "codelyzer": "^6.0.0", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", - "karma": "~5.0.0", + "karma": "~6.3.3", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~4.0.0", diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index db409d1c0..031a4bb0b 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -33,7 +33,7 @@ const routes: Routes = [ ]; @NgModule({ - imports: [RouterModule.forRoot(routes)], + imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })], exports: [RouterModule] }) export class AppRoutingModule { } From eedcd652e787c7aa224778d97539f8dda029ebb7 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 15:12:56 +0200 Subject: [PATCH 822/898] replace ng-bootstrap with ngx-bootstrap --- src-ui/package-lock.json | 42 ++++++++++++++++++++++++++-------------- src-ui/package.json | 2 +- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 955f4cf29..62f77c6af 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -21,8 +21,8 @@ "@ng-select/ng-select": "^7.0.0", "bootstrap": "^4.5.0", "file-saver": "^2.0.5", - "ng-bootstrap": "^0.46.0", "ng2-pdf-viewer": "^6.3.2", + "ngx-bootstrap": "^6.2.0", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^11.1.0", @@ -10343,12 +10343,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/ng-bootstrap": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-0.46.0.tgz", - "integrity": "sha1-e4k0caqLFHxyFNU8UWLwMTP+7yA=", - "deprecated": "ng-bootstrap was renamed to ngx-bootstrap, please update your dependencies" - }, "node_modules/ng2-pdf-viewer": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-6.3.2.tgz", @@ -10364,6 +10358,15 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/ngx-bootstrap": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-6.2.0.tgz", + "integrity": "sha512-5WKHo6/ltkenw4UyXZwED8rODCgp2RGbWurzYzZsF/gH1JO5SN7TJ+AL6kXYk6XM42sDA2WhN9Db+ZPNjiyHnA==", + "peerDependencies": { + "@angular/common": ">=7.0.0", + "@angular/core": ">=7.0.0" + } + }, "node_modules/ngx-color": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-6.2.0.tgz", @@ -15849,8 +15852,15 @@ } }, "node_modules/watchpack/chokidar2": { + "version": "2.0.0", "dev": true, - "optional": true + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } }, "node_modules/wbuf": { "version": "1.7.3", @@ -20455,7 +20465,10 @@ } }, "chokidar2": { - "version": "file:node_modules/watchpack/chokidar2" + "version": "file:node_modules/watchpack/chokidar2", + "requires": { + "chokidar": "^2.1.8" + } }, "chownr": { "version": "2.0.0", @@ -25193,11 +25206,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "ng-bootstrap": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/ng-bootstrap/-/ng-bootstrap-0.46.0.tgz", - "integrity": "sha1-e4k0caqLFHxyFNU8UWLwMTP+7yA=" - }, "ng2-pdf-viewer": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-6.3.2.tgz", @@ -25215,6 +25223,12 @@ } } }, + "ngx-bootstrap": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-6.2.0.tgz", + "integrity": "sha512-5WKHo6/ltkenw4UyXZwED8rODCgp2RGbWurzYzZsF/gH1JO5SN7TJ+AL6kXYk6XM42sDA2WhN9Db+ZPNjiyHnA==", + "requires": {} + }, "ngx-color": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-6.2.0.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index 1b6663e96..bb861bc43 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -24,8 +24,8 @@ "@ng-select/ng-select": "^7.0.0", "bootstrap": "^4.5.0", "file-saver": "^2.0.5", - "ng-bootstrap": "^0.46.0", "ng2-pdf-viewer": "^6.3.2", + "ngx-bootstrap": "^6.2.0", "ngx-color": "^6.2.0", "ngx-cookie-service": "^10.1.1", "ngx-file-drop": "^11.1.0", From 5401102679a6453516a02fd59621fc9f5f6f8a99 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 15:18:23 +0200 Subject: [PATCH 823/898] update angular devkit --- src-ui/package-lock.json | 9193 +++++++++++++++++++------------------- src-ui/package.json | 2 +- 2 files changed, 4522 insertions(+), 4673 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 62f77c6af..27fdfe0b8 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -33,7 +33,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.901.15", + "@angular-devkit/build-angular": "^0.1102.14", "@angular/cli": "~11.2.14", "@angular/compiler-cli": "~11.2.14", "@types/jasmine": "~3.6.0", @@ -69,72 +69,84 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.15.tgz", - "integrity": "sha512-Qhyfnjda+lbI97xpimb0g6RYiu/Xf/Awtx2xBRaE0pGW/T/qrGEeKwF4mu2CAgDSHK+0+V1msW8ttPMw+Z8org==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1102.14.tgz", + "integrity": "sha512-SyX9SK3qfpk6xNIrxpxYi8zxP/cN2kny4I+XYbkKvgGiE3qhkrC/PRJE9OWj0sloekLD0CDfFWOvIiw3GMc4Tg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.901.15", - "@angular-devkit/build-optimizer": "0.901.15", - "@angular-devkit/build-webpack": "0.901.15", - "@angular-devkit/core": "9.1.15", - "@babel/core": "7.9.0", - "@babel/generator": "7.9.3", - "@babel/preset-env": "7.9.0", - "@babel/template": "7.8.6", - "@jsdevtools/coverage-istanbul-loader": "3.0.3", - "@ngtools/webpack": "9.1.15", - "ajv": "6.12.3", - "autoprefixer": "9.7.4", - "babel-loader": "8.0.6", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/build-optimizer": "0.1102.14", + "@angular-devkit/build-webpack": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@babel/core": "7.12.10", + "@babel/generator": "7.12.11", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.10", + "@babel/preset-env": "7.12.11", + "@babel/runtime": "7.12.5", + "@babel/template": "7.12.7", + "@discoveryjs/json-ext": "0.5.2", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "11.2.14", + "ansi-colors": "4.1.1", + "autoprefixer": "10.2.4", + "babel-loader": "8.2.2", "browserslist": "^4.9.1", - "cacache": "15.0.0", + "cacache": "15.0.5", "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.0", - "copy-webpack-plugin": "6.0.3", - "core-js": "3.6.4", - "css-loader": "3.5.1", - "cssnano": "4.1.10", - "file-loader": "6.0.0", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "6.3.2", + "core-js": "3.8.3", + "critters": "0.0.7", + "css-loader": "5.0.1", + "cssnano": "5.0.2", + "file-loader": "6.2.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", - "jest-worker": "25.1.0", + "https-proxy-agent": "5.0.0", + "inquirer": "7.3.3", + "jest-worker": "26.6.2", "karma-source-map-support": "1.4.0", - "less": "3.11.3", - "less-loader": "5.0.0", - "license-webpack-plugin": "2.1.4", + "less": "4.1.1", + "less-loader": "7.3.0", + "license-webpack-plugin": "2.3.11", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "0.9.0", + "mini-css-extract-plugin": "1.3.5", "minimatch": "3.0.4", - "open": "7.0.3", - "parse5": "4.0.0", - "postcss": "7.0.27", - "postcss-import": "12.0.1", - "postcss-loader": "3.0.0", - "raw-loader": "4.0.0", - "regenerator-runtime": "0.13.5", + "open": "7.4.0", + "ora": "5.3.0", + "parse5-html-rewriting-stream": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "8.2.15", + "postcss-import": "14.0.0", + "postcss-loader": "4.2.0", + "raw-loader": "4.0.2", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "4.0.0", "rimraf": "3.0.2", - "rollup": "2.1.0", - "rxjs": "6.5.4", - "sass": "1.26.3", - "sass-loader": "8.0.2", - "semver": "7.1.3", + "rollup": "2.38.4", + "rxjs": "6.6.3", + "sass": "1.32.6", + "sass-loader": "10.1.1", + "semver": "7.3.4", "source-map": "0.7.3", - "source-map-loader": "0.2.4", - "speed-measure-webpack-plugin": "1.3.1", - "style-loader": "1.1.3", - "stylus": "0.54.7", - "stylus-loader": "3.0.2", - "terser": "4.6.10", - "terser-webpack-plugin": "3.0.3", + "source-map-loader": "1.1.3", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.4.2", + "style-loader": "2.0.0", + "stylus": "0.54.8", + "stylus-loader": "4.3.3", + "terser": "5.5.1", + "terser-webpack-plugin": "4.2.3", + "text-table": "0.2.0", "tree-kill": "1.2.2", - "webpack": "4.42.0", + "webpack": "4.44.2", "webpack-dev-middleware": "3.7.2", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2", - "webpack-sources": "1.4.3", - "webpack-subresource-integrity": "1.4.0", - "worker-plugin": "4.0.3" + "webpack-dev-server": "3.11.2", + "webpack-merge": "5.7.3", + "webpack-sources": "2.2.0", + "webpack-subresource-integrity": "1.5.2", + "worker-plugin": "5.0.0" }, "engines": { "node": ">= 10.13.0", @@ -142,306 +154,84 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": ">=9.0.0 < 10", - "typescript": ">=3.6 < 3.9" + "@angular/compiler-cli": "^11.0.0 || ^11.2.0-next", + "@angular/localize": "^11.0.0 || ^11.2.0-next", + "@angular/service-worker": "^11.0.0 || ^11.2.0-next", + "karma": "^5.2.0 || ^6.0.0", + "ng-packagr": "^11.0.0 || ^11.2.0-next", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0", + "tslint": "^6.1.0", + "typescript": "~4.0.0 || ~4.1.0" }, "peerDependenciesMeta": { "@angular/localize": { "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "tslint": { + "optional": true } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", - "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "9.1.15", - "rxjs": "6.5.4" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", - "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", - "dev": true, - "dependencies": { - "ajv": "6.12.3", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.5.4", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/generator": { - "version": "7.9.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", - "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.9.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@ngtools/webpack": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.15.tgz", - "integrity": "sha512-2k2SpBd8ssZ1XnLwM09t34pHck96d3ndyxBfg19IpXXXB/FbvhVXTkypB2ktpoGHy/8oSPeUDjz6O9x+p5iT8A==", + "node_modules/@angular-devkit/build-angular/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "9.1.15", - "enhanced-resolve": "4.1.1", - "rxjs": "6.5.4", - "webpack-sources": "1.4.3" + "debug": "4" }, "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": ">=9.0.0 < 10", - "typescript": ">=3.6 < 3.9", - "webpack": "^4.0.0" + "node": ">= 6.0.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "node_modules/@angular-devkit/build-angular/node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/cacache": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.0.tgz", - "integrity": "sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g==", - "dev": true, - "dependencies": { - "chownr": "^1.1.2", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^8.0.0", - "tar": "^6.0.1", - "unique-filename": "^1.1.1" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/cacache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/open": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", - "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "node": ">= 6" } }, "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", - "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -449,29 +239,17 @@ "node": ">=10" } }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/@angular-devkit/build-optimizer": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.15.tgz", - "integrity": "sha512-fCX27AAaM91UlNtjwUhqBFTvL3U0PexeVpQORJ7hAr4DG1z3DUHJS4RHCjlgM060ny0fj1V5gu21j1QAQx52vA==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1102.14.tgz", + "integrity": "sha512-1j69rFqE6tPMO0lQvOH8ogF7vE+p+Ws1/OtdZKUkZPOerIbQ8A3n5wzCx6/ZzMVhBQ3sXNhaShb4b9/1YuwU/g==", "dev": true, "dependencies": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "1.11.1", - "typescript": "3.6.5", - "webpack-sources": "1.4.3" + "tslib": "2.1.0", + "typescript": "4.1.5", + "webpack-sources": "2.2.0" }, "bin": { "build-optimizer": "src/build-optimizer/cli.js" @@ -483,15 +261,15 @@ } }, "node_modules/@angular-devkit/build-optimizer/node_modules/tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true }, "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.5.tgz", - "integrity": "sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -502,14 +280,14 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.15.tgz", - "integrity": "sha512-vETkDD3xbWtm5zylKhKG2IYjmnED5DPBHCg/M0QmxMBEEiZOtqVrAwkJGSnErVInPmqW0jixIz3wCiMUBBA/dQ==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.14.tgz", + "integrity": "sha512-+dJvzrwjbHY0bNr8fUDVbn4D4pAT/h1YVpGVyaoX7q66LN0x61zRC3e10gJ/Mr54l3yfc26M0OPD9KG8iZRbCA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.901.15", - "@angular-devkit/core": "9.1.15", - "rxjs": "6.5.4" + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "rxjs": "6.6.3" }, "engines": { "node": ">= 10.13.0", @@ -521,73 +299,6 @@ "webpack-dev-server": "^3.1.4" } }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", - "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "9.1.15", - "rxjs": "6.5.4" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", - "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", - "dev": true, - "dependencies": { - "ajv": "6.12.3", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.5.4", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@angular-devkit/core": { "version": "11.2.14", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.14.tgz", @@ -672,15 +383,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@angular/cli/node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", @@ -1219,29 +921,32 @@ } }, "node_modules/@babel/core": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", - "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "dependencies": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.1", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/semver": { @@ -1330,6 +1035,26 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz", + "integrity": "sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", @@ -1601,6 +1326,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", @@ -1617,6 +1358,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", @@ -1633,6 +1390,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", @@ -1717,6 +1490,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", @@ -1745,6 +1534,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -1757,6 +1558,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -1769,6 +1582,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -1860,17 +1685,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -2241,6 +2063,29 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", + "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "semver": "^5.5.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", @@ -2317,6 +2162,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", @@ -2334,70 +2194,76 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", - "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", + "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.9.0", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.0", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.0", - "@babel/plugin-transform-modules-commonjs": "^7.9.0", - "@babel/plugin-transform-modules-systemjs": "^7.9.0", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.0", - "browserslist": "^4.9.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" }, "peerDependencies": { @@ -2430,15 +2296,12 @@ } }, "node_modules/@babel/runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz", - "integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" } }, "node_modules/@babel/template": { @@ -2514,6 +2377,15 @@ "node": ">=10" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2524,42 +2396,16 @@ } }, "node_modules/@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz", - "integrity": "sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", "dev": true, "dependencies": { "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.1", - "loader-utils": "^1.4.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", "merge-source-map": "^1.1.0", - "schema-utils": "^2.6.4" - } - }, - "node_modules/@jsdevtools/coverage-istanbul-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@jsdevtools/coverage-istanbul-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "schema-utils": "^2.7.0" } }, "node_modules/@ng-bootstrap/ng-bootstrap": { @@ -2594,6 +2440,27 @@ "@angular/forms": ">=11.0.0 <12.0.0" } }, + "node_modules/@ngtools/webpack": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.14.tgz", + "integrity": "sha512-6q57tEWtUJRsxfTKE19L20iXvNesfVy8hrVdyzVk64DZQh0lIl4/xZT4d5bJCWOuQQDaAeZK4YbEFcYJn7k1yw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "11.2.14", + "enhanced-resolve": "5.7.0", + "webpack-sources": "2.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": "^6.11.0 || ^7.5.6", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^11.0.0 || ^11.2.0-next", + "typescript": "~4.0.0 || ~4.1.0", + "webpack": "^4.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2908,6 +2775,15 @@ "node": ">= 6" } }, + "node_modules/@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@types/component-emitter": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", @@ -2969,17 +2845,17 @@ "integrity": "sha512-UV1/ZJMC+HcP902wWdpC43cAcGu0IQk/I5bXjP2aSuCjsk3cE74mDvFrLKga7oDC170ugOAYBwfT4DSQW3akDA==", "dev": true }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "node_modules/@types/pdfjs-dist": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@types/pdfjs-dist/-/pdfjs-dist-2.1.7.tgz", "integrity": "sha512-nQIwcPUhkAIyn7x9NS0lR/qxYfd5unRtfGkMjvpgF4Sh28IXftRymaNmFKTTdejDNY25NDGSIyjwj/BRwAPexg==" }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, "node_modules/@types/selenium-webdriver": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", @@ -3013,178 +2889,177 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "dependencies": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "node_modules/@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -3206,6 +3081,12 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3237,6 +3118,19 @@ "node": ">=0.4.0" } }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -3326,9 +3220,9 @@ "dev": true }, "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" @@ -3509,13 +3403,6 @@ "node": ">=0.10.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3632,28 +3519,30 @@ } }, "node_modules/autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.4.tgz", + "integrity": "sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw==", "dev": true, "dependencies": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", - "chalk": "^2.4.2", + "browserslist": "^4.16.1", + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "fraction.js": "^4.0.13", "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss-value-parser": "^4.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/aws-sign2": { @@ -3681,50 +3570,24 @@ } }, "node_modules/babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dev": true, "dependencies": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "engines": { - "node": ">= 6.9" + "node": ">= 8.9" }, "peerDependencies": { "@babel/core": "^7.0.0", "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/babel-loader/node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -3751,50 +3614,28 @@ "node": ">=4.0.0" } }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/babel-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" + "node": ">=8" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "node_modules/babel-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" + "bin": { + "semver": "bin/semver.js" } }, "node_modules/babel-plugin-dynamic-import-node": { @@ -4350,37 +4191,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/camelcase": { @@ -4464,10 +4281,6 @@ "fsevents": "~2.1.2" } }, - "node_modules/chokidar2": { - "resolved": "node_modules/watchpack/chokidar2", - "link": true - }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -4497,9 +4310,9 @@ } }, "node_modules/circular-dependency-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", - "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", + "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", "dev": true, "engines": { "node": ">=6.0.0" @@ -4703,20 +4516,6 @@ "node": ">=6" } }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -4794,16 +4593,6 @@ "node": ">=0.10.0" } }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4817,15 +4606,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "node_modules/colord": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", + "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "dev": true }, "node_modules/colorette": { "version": "1.2.2", @@ -5038,6 +4823,15 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "node_modules/copy-anything": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", + "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "dev": true, + "dependencies": { + "is-what": "^3.12.0" + } + }, "node_modules/copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -5074,21 +4868,21 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", - "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.3.2.tgz", + "integrity": "sha512-MgJ1uouLIbDg4ST1GzqrGQyKoXY5iPqi6fghFqarijam7FQcBa/r6Rg0VkoIuzx75Xq8iAMghyOueMkWUQ5OaA==", "dev": true, "dependencies": { - "cacache": "^15.0.4", + "cacache": "^15.0.5", "fast-glob": "^3.2.4", "find-cache-dir": "^3.3.1", "glob-parent": "^5.1.1", "globby": "^11.0.1", "loader-utils": "^2.0.0", "normalize-path": "^3.0.0", - "p-limit": "^3.0.1", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "webpack-sources": "^1.4.3" }, "engines": { @@ -5117,10 +4911,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/core-js": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", - "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", "dev": true, "hasInstallScript": true, "funding": { @@ -5171,18 +5002,19 @@ } }, "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@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" }, "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/create-ecdh": { @@ -5228,6 +5060,89 @@ "sha.js": "^2.4.8" } }, + "node_modules/critters": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.7.tgz", + "integrity": "sha512-qUF2SaAWFYjNPdCcPpu68p2DnHiosia84yx5mPTlUMQjkjChR+n6sO1/I7yn2U2qNDgSPTd2SoaTIDQcUL+EwQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css": "^3.0.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -5276,103 +5191,98 @@ } }, "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, "dependencies": { - "inherits": "^2.0.3", + "inherits": "^2.0.4", "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "source-map-resolve": "^0.6.0" } }, "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", "dev": true, "engines": { "node": "*" } }, "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "dev": true, "dependencies": { - "postcss": "^7.0.1", "timsort": "^0.3.0" }, "engines": { - "node": ">4" + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, "node_modules/css-loader": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.1.tgz", - "integrity": "sha512-0G4CbcZzQ9D1Q6ndOfjFuMDo8uLYMu5vc9Abs5ztyHcKvmil6GJrMiNjzzi3tQvUF+mVRuDg7bE6Oc0Prolgig==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.1.tgz", + "integrity": "sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", + "camelcase": "^6.2.0", "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.27", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.3", - "schema-utils": "^2.6.5", - "semver": "^6.3.0" + "icss-utils": "^5.0.0", + "loader-utils": "^2.0.0", + "postcss": "^8.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/css-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/css-loader/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" + "engines": { + "node": ">=10" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/css-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/css-parse": { @@ -5384,24 +5294,56 @@ "css": "^2.0.0" } }, + "node_modules/css-parse/node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/css-parse/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-parse/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, "node_modules/css-selector-tokenizer": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", @@ -5413,12 +5355,12 @@ } }, "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "dependencies": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" }, "engines": { @@ -5435,9 +5377,9 @@ } }, "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true, "engines": { "node": ">= 6" @@ -5477,98 +5419,79 @@ } }, "node_modules/cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.2.tgz", + "integrity": "sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==", "dev": true, "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.0.1", + "is-resolvable": "^1.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.1" } }, "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", "dev": true, "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "node_modules/cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/csso": { @@ -5583,34 +5506,6 @@ "node": ">=8.0.0" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", @@ -5960,27 +5855,19 @@ } }, "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -5992,31 +5879,44 @@ } }, "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/duplexify": { @@ -6191,30 +6091,16 @@ } }, "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=10.13.0" } }, "node_modules/ent": { @@ -6268,53 +6154,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -6828,15 +6667,15 @@ } }, "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=0.8.0" } }, "node_modules/figgy-pudding": { @@ -6858,13 +6697,13 @@ } }, "node_modules/file-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", - "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, "dependencies": { "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "schema-utils": "^3.0.0" }, "engines": { "node": ">= 10.13.0" @@ -6877,6 +6716,24 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/file-saver": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", @@ -7053,6 +6910,19 @@ "node": ">= 0.6" } }, + "node_modules/fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -7354,15 +7224,6 @@ "node": ">=0.10.0" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7609,6 +7470,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -7859,15 +7726,15 @@ } }, "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "dependencies": { - "postcss": "^7.0.14" - }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/ieee754": { @@ -7919,41 +7786,20 @@ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", "dev": true }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "dependencies": { - "import-from": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" + "node": ">=6" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local": { @@ -8048,12 +7894,6 @@ "node": ">=8" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -8231,15 +8071,6 @@ "node": ">=6" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -8265,12 +8096,12 @@ } }, "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-accessor-descriptor": { @@ -8306,15 +8137,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -8326,39 +8148,12 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -8373,6 +8168,15 @@ "rgba-regex": "^1.0.0" } }, + "node_modules/is-color-stop/node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/is-core-module": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", @@ -8422,15 +8226,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -8501,18 +8296,6 @@ "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", "dev": true }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8521,27 +8304,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -8575,15 +8337,6 @@ "node": ">=6" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -8627,33 +8380,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -8672,6 +8398,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -8925,16 +8657,17 @@ } }, "node_modules/jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "dependencies": { + "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -9374,13 +9107,23 @@ "node": ">=0.10.0" } }, + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/less": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz", - "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.1.tgz", + "integrity": "sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw==", "dev": true, "dependencies": { - "clone": "^2.1.2", + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", "tslib": "^1.10.0" }, "bin": { @@ -9395,71 +9138,48 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "promise": "^7.1.1", - "request": "^2.83.0", + "needle": "^2.5.2", "source-map": "~0.6.0" } }, "node_modules/less-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", - "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.3.0.tgz", + "integrity": "sha512-Mi8915g7NMaLlgi77mgTTQvK022xKRQBIVDSyfl3ErTuBhmZBQab0mjeJjNNqGbdR+qrfTleKXqbGI4uEFavxg==", "dev": true, "dependencies": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^4.0.1" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 4.8.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "less": "^2.3.1 || ^3.0.0", - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + "less": "^3.5.0 || ^4.0.0", + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/less-loader/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/less-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/less-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/less-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/less/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/less/node_modules/source-map": { @@ -9478,37 +9198,35 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "dependencies": { - "leven": "^3.1.0" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/license-webpack-plugin": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz", - "integrity": "sha512-1Xq72fmPbTg5KofXs+yI5L4QqPFjQ6mZxoeI6D7gfiEDOtaEIk6PGrdLaej90bpDqKNHNxlQ/MW4tMAL6xMPJQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.11.tgz", + "integrity": "sha512-0iVGoX5vx0WDy8dmwTTpOOMYiGqILyUbDeVMFH52AjgBlS58lHwOlFMSoqg5nY8Kxl6+FRKyUZY/UdlQaOyqDw==", "dev": true, "dependencies": { "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" } }, + "node_modules/license-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -9518,6 +9236,12 @@ "immediate": "~3.0.5" } }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -9558,12 +9282,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -9691,18 +9409,6 @@ "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -9821,12 +9527,6 @@ "node": ">=10" } }, - "node_modules/mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -9865,9 +9565,9 @@ } }, "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "node_modules/media-typer": { @@ -10012,61 +9712,61 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.5.tgz", + "integrity": "sha512-tvmzcwqJJXau4OQE5vT72pRT18o2zF+tQJp8CWchqvfQnTlflkzS+dANYcRdyPRWUWRkfmeNTKltx0NZI/b5dQ==", "dev": true, "dependencies": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", "webpack-sources": "^1.1.0" }, "engines": { - "node": ">= 6.9.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.4.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "webpack": "^4.4.0 || ^5.0.0" } }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, "node_modules/minimalistic-assert": { @@ -10306,6 +10006,18 @@ "dev": true, "optional": true }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -10328,6 +10040,34 @@ "node": ">=0.10.0" } }, + "node_modules/needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -10541,18 +10281,15 @@ } }, "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", + "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-bundled": { @@ -10669,20 +10406,17 @@ } }, "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "dependencies": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -10795,15 +10529,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -10859,23 +10584,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -10888,23 +10596,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -11265,6 +10956,18 @@ "readable-stream": "^2.1.5" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -11279,24 +10982,66 @@ } }, "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" } }, "node_modules/parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -11459,6 +11204,18 @@ "node": ">=8" } }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -11492,688 +11249,539 @@ } }, "node_modules/postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dev": true, "dependencies": { - "postcss": "^7.0.27", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.2" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.0.tgz", + "integrity": "sha512-gFDDzXhqr9ELmnLHgCC3TbGfA6Dm/YMb/UN8/f7Uuq4fL7VTk2vOIj6hwINEwbokEmp123bLD7a5m+E+KIetRg==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", + "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-import/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" + "node": ">=10.0.0" }, - "engines": { - "node": ">= 4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.0.0" } }, "node_modules/postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", + "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", "dev": true, "dependencies": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" + "node": ">= 10.13.0" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/postcss-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "dev": true, "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", "uniqs": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", + "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "node": "^10 || ^12 || >= 14" }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "dev": true, "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "dev": true, "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-selector-parser": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", @@ -12188,37 +11796,36 @@ } }, "node_modules/postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", "uniqs": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-value-parser": { @@ -12236,25 +11843,16 @@ "node": ">=0.10.0" } }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { "node": ">=6" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true, - "engines": { - "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/process": { @@ -12272,16 +11870,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, - "dependencies": { - "asap": "~2.0.3" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -12792,16 +12380,6 @@ "node": ">=6" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, "node_modules/qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", @@ -12820,19 +12398,6 @@ "node": ">=0.6" } }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -12930,13 +12495,13 @@ } }, "node_modules/raw-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.0.tgz", - "integrity": "sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, "dependencies": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { "node": ">= 10.13.0" @@ -12949,30 +12514,22 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/raw-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/raw-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/read-cache": { @@ -13053,9 +12610,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, "node_modules/regenerator-transform": { @@ -13080,6 +12637,12 @@ "node": ">=0.10.0" } }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, "node_modules/regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -13257,7 +12820,7 @@ "node": ">=4" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", @@ -13266,6 +12829,15 @@ "node": ">=4" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -13273,6 +12845,73 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url-loader/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -13355,9 +12994,9 @@ } }, "node_modules/rollup": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.1.0.tgz", - "integrity": "sha512-gfE1455AEazVVTJoeQtcOq/U6GSxwoj4XPSWVsuWmgIxj7sBQNLDOSA82PbdMe+cP8ql8fR1jogPFe8Wg8g4SQ==", + "version": "2.38.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.4.tgz", + "integrity": "sha512-B0LcJhjiwKkTl79aGVF/u5KdzsH8IylVfV56Ut6c9ouWLJcUK17T83aZBetNYSnZtXf2OHD4+2PbmRW+Fp5ulg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -13366,7 +13005,21 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/run-async": { @@ -13447,9 +13100,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", - "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", + "version": "1.32.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.6.tgz", + "integrity": "sha512-1bcDHDcSqeFtMr0JXI3xc/CXX6c4p0wHHivJdru8W7waM7a1WjKMm4m/Z5sY7CbVw4Whi2Chpcw6DFfSWwGLzQ==", "dev": true, "dependencies": { "chokidar": ">=2.0.0 <4.0.0" @@ -13462,19 +13115,19 @@ } }, "node_modules/sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.1.tgz", + "integrity": "sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==", "dev": true, "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -13482,7 +13135,7 @@ }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", + "node-sass": "^4.0.0 || ^5.0.0", "sass": "^1.3.0", "webpack": "^4.36.0 || ^5.0.0" }, @@ -13498,39 +13151,22 @@ } } }, - "node_modules/sass-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/sass-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/sass-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/saucelabs": { @@ -13717,9 +13353,9 @@ "dev": true }, "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -13915,21 +13551,6 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -14146,6 +13767,19 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "node_modules/socket.io": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", @@ -14187,28 +13821,28 @@ } }, "node_modules/sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dev": true, "dependencies": { - "faye-websocket": "^0.10.0", + "faye-websocket": "^0.11.3", "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "websocket-driver": "^0.7.4" } }, "node_modules/sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", "dev": true, "dependencies": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" } }, "node_modules/sockjs-client/node_modules/debug": { @@ -14220,18 +13854,6 @@ "ms": "^2.1.1" } }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/sockjs/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -14282,18 +13904,6 @@ "node": ">= 6.0.0" } }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -14310,55 +13920,76 @@ } }, "node_modules/source-map-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", - "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", + "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", "dev": true, "dependencies": { - "async": "^2.5.0", - "loader-utils": "^1.1.0" + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.6.1", + "whatwg-mimetype": "^2.3.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/source-map-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" + "node": ">= 10.13.0" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/source-map-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/source-map-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "dev": true, "dependencies": { "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "decode-uri-component": "^0.2.0" } }, "node_modules/source-map-support": { @@ -14436,18 +14067,88 @@ } }, "node_modules/speed-measure-webpack-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", - "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.4.2.tgz", + "integrity": "sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==", "dev": true, "dependencies": { - "chalk": "^2.0.1" + "chalk": "^4.1.0" }, "engines": { "node": ">=6.0.0" }, "peerDependencies": { - "webpack": "^1 || ^2 || ^3 || ^4" + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/speed-measure-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/split-string": { @@ -14687,15 +14388,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -14740,32 +14432,6 @@ "node": ">=6" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -14788,16 +14454,16 @@ } }, "node_modules/style-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", - "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "dependencies": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.6.4" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -14807,73 +14473,53 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/style-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/style-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "dev": true, "dependencies": { "css-parse": "~2.0.0", "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", "safer-buffer": "^2.1.2", "sax": "~1.2.4", - "semver": "^6.0.0", + "semver": "^6.3.0", "source-map": "^0.7.3" }, "bin": { @@ -14884,43 +14530,45 @@ } }, "node_modules/stylus-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", - "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-4.3.3.tgz", + "integrity": "sha512-PpWB5PnCXUzW4WMYhCvNzAHJBjIBPMXwsdfkkKuA9W7k8OQFMl/19/AQvaWsxz2IptxUlCseyJ6TY/eEKJ4+UQ==", "dev": true, "dependencies": { - "loader-utils": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "when": "~3.6.x" - }, - "peerDependencies": { - "stylus": ">=0.52.4" - } - }, - "node_modules/stylus-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/stylus-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "fast-glob": "^3.2.4", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylus": ">=0.52.4", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/stylus-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/stylus/node_modules/debug": { @@ -14932,6 +14580,18 @@ "ms": "2.0.0" } }, + "node_modules/stylus/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/stylus/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14959,30 +14619,103 @@ } }, "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=4.0.0" + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/symbol-observable": { @@ -14995,9 +14728,9 @@ } }, "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true, "engines": { "node": ">=6" @@ -15033,36 +14766,36 @@ } }, "node_modules/terser": { - "version": "4.6.10", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", - "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", + "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", "dev": true, "dependencies": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" }, "bin": { "terser": "bin/terser" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" } }, "node_modules/terser-webpack-plugin": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz", - "integrity": "sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, "dependencies": { - "cacache": "^15.0.4", + "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.0.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^3.1.0", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^4.6.13", + "terser": "^5.3.4", "webpack-sources": "^1.4.3" }, "engines": { @@ -15076,36 +14809,37 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/terser-webpack-plugin/node_modules/source-map": { @@ -15117,43 +14851,21 @@ "node": ">=0.10.0" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/terser-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "node_modules/through": { "version": "2.3.8", @@ -15321,6 +15033,20 @@ "node": ">=4.2.0" } }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.2.tgz", @@ -15466,21 +15192,6 @@ "node": "*" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -15545,12 +15256,6 @@ "node": ">=0.10.0" } }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "node_modules/uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -15612,12 +15317,6 @@ "node": ">= 0.8" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -15742,21 +15441,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/util/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -15838,28 +15522,295 @@ } }, "node_modules/watchpack": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.1.tgz", - "integrity": "sha512-1OeW6LucExk7h6lBuCr1isK5261Tf0PHNRG9tZjg2WKUsSkPwvyv37d7mgAUk1rZjxxaL/6WttSGMUY2hn/20g==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" }, "optionalDependencies": { - "chokidar": "^3.4.0", - "chokidar2": "file:./chokidar2" + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" } }, - "node_modules/watchpack/chokidar2": { - "version": "2.0.0", + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, "optional": true, "dependencies": { "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" }, "engines": { - "node": "<8.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wbuf": { @@ -15894,33 +15845,33 @@ } }, "node_modules/webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "bin": { @@ -15932,6 +15883,14 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } } }, "node_modules/webpack-dev-middleware": { @@ -15966,9 +15925,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "dev": true, "dependencies": { "ansi-html": "0.0.7", @@ -15991,11 +15950,11 @@ "p-retry": "^3.0.1", "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", @@ -16175,15 +16134,6 @@ "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-dev-server/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -16328,6 +16278,15 @@ "node": ">= 6" } }, + "node_modules/webpack-log/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack-log/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -16339,22 +16298,29 @@ } }, "node_modules/webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", "dev": true, "dependencies": { - "lodash": "^4.17.15" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", "dev": true, "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/webpack-sources/node_modules/source-map": { @@ -16367,9 +16333,9 @@ } }, "node_modules/webpack-subresource-integrity": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.0.tgz", - "integrity": "sha512-GB1kB/LwAWC3CxwcedGhMkxGpNZxSheCe1q+KJP1bakuieAdX/rGHEcf5zsEzhKXpqsGqokgsDoD9dIkr61VDQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", + "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", "dev": true, "dependencies": { "webpack-sources": "^1.3.0" @@ -16378,8 +16344,8 @@ "node": ">=4" }, "peerDependencies": { - "html-webpack-plugin": "^2.21.0 || ~3 || >=4.0.0-alpha.2 <5", - "webpack": "^1.12.11 || ~2 || ~3 || ~4" + "html-webpack-plugin": ">= 2.21.0 < 5", + "webpack": ">= 1.12.11 < 6" }, "peerDependenciesMeta": { "html-webpack-plugin": { @@ -16387,6 +16353,25 @@ } } }, + "node_modules/webpack-subresource-integrity/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-subresource-integrity/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/webpack/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -16449,6 +16434,33 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, "node_modules/webpack/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -16675,6 +16687,15 @@ "node": ">= 4" } }, + "node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/webpack/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16693,6 +16714,32 @@ "figgy-pudding": "^3.5.1" } }, + "node_modules/webpack/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/webpack/node_modules/terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -16729,6 +16776,16 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/webpack/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -16736,15 +16793,17 @@ "dev": true }, "node_modules/websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">=0.6.0" + "node": ">=0.8.0" } }, "node_modules/websocket-extensions": { @@ -16756,10 +16815,10 @@ "node": ">=0.8.0" } }, - "node_modules/when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "node_modules/which": { @@ -16774,22 +16833,6 @@ "which": "bin/which" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -16839,6 +16882,12 @@ "node": ">=4" } }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -16849,9 +16898,9 @@ } }, "node_modules/worker-plugin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", - "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", "dev": true, "dependencies": { "loader-utils": "^1.1.0" @@ -16978,6 +17027,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", @@ -17091,404 +17149,163 @@ } }, "@angular-devkit/build-angular": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.15.tgz", - "integrity": "sha512-Qhyfnjda+lbI97xpimb0g6RYiu/Xf/Awtx2xBRaE0pGW/T/qrGEeKwF4mu2CAgDSHK+0+V1msW8ttPMw+Z8org==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1102.14.tgz", + "integrity": "sha512-SyX9SK3qfpk6xNIrxpxYi8zxP/cN2kny4I+XYbkKvgGiE3qhkrC/PRJE9OWj0sloekLD0CDfFWOvIiw3GMc4Tg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.15", - "@angular-devkit/build-optimizer": "0.901.15", - "@angular-devkit/build-webpack": "0.901.15", - "@angular-devkit/core": "9.1.15", - "@babel/core": "7.9.0", - "@babel/generator": "7.9.3", - "@babel/preset-env": "7.9.0", - "@babel/template": "7.8.6", - "@jsdevtools/coverage-istanbul-loader": "3.0.3", - "@ngtools/webpack": "9.1.15", - "ajv": "6.12.3", - "autoprefixer": "9.7.4", - "babel-loader": "8.0.6", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/build-optimizer": "0.1102.14", + "@angular-devkit/build-webpack": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@babel/core": "7.12.10", + "@babel/generator": "7.12.11", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.10", + "@babel/preset-env": "7.12.11", + "@babel/runtime": "7.12.5", + "@babel/template": "7.12.7", + "@discoveryjs/json-ext": "0.5.2", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "11.2.14", + "ansi-colors": "4.1.1", + "autoprefixer": "10.2.4", + "babel-loader": "8.2.2", "browserslist": "^4.9.1", - "cacache": "15.0.0", + "cacache": "15.0.5", "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.0", - "copy-webpack-plugin": "6.0.3", - "core-js": "3.6.4", - "css-loader": "3.5.1", - "cssnano": "4.1.10", - "file-loader": "6.0.0", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "6.3.2", + "core-js": "3.8.3", + "critters": "0.0.7", + "css-loader": "5.0.1", + "cssnano": "5.0.2", + "file-loader": "6.2.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", - "jest-worker": "25.1.0", + "https-proxy-agent": "5.0.0", + "inquirer": "7.3.3", + "jest-worker": "26.6.2", "karma-source-map-support": "1.4.0", - "less": "3.11.3", - "less-loader": "5.0.0", - "license-webpack-plugin": "2.1.4", + "less": "4.1.1", + "less-loader": "7.3.0", + "license-webpack-plugin": "2.3.11", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "0.9.0", + "mini-css-extract-plugin": "1.3.5", "minimatch": "3.0.4", - "open": "7.0.3", - "parse5": "4.0.0", - "postcss": "7.0.27", - "postcss-import": "12.0.1", - "postcss-loader": "3.0.0", - "raw-loader": "4.0.0", - "regenerator-runtime": "0.13.5", + "open": "7.4.0", + "ora": "5.3.0", + "parse5-html-rewriting-stream": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "8.2.15", + "postcss-import": "14.0.0", + "postcss-loader": "4.2.0", + "raw-loader": "4.0.2", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "4.0.0", "rimraf": "3.0.2", - "rollup": "2.1.0", - "rxjs": "6.5.4", - "sass": "1.26.3", - "sass-loader": "8.0.2", - "semver": "7.1.3", + "rollup": "2.38.4", + "rxjs": "6.6.3", + "sass": "1.32.6", + "sass-loader": "10.1.1", + "semver": "7.3.4", "source-map": "0.7.3", - "source-map-loader": "0.2.4", - "speed-measure-webpack-plugin": "1.3.1", - "style-loader": "1.1.3", - "stylus": "0.54.7", - "stylus-loader": "3.0.2", - "terser": "4.6.10", - "terser-webpack-plugin": "3.0.3", + "source-map-loader": "1.1.3", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.4.2", + "style-loader": "2.0.0", + "stylus": "0.54.8", + "stylus-loader": "4.3.3", + "terser": "5.5.1", + "terser-webpack-plugin": "4.2.3", + "text-table": "0.2.0", "tree-kill": "1.2.2", - "webpack": "4.42.0", + "webpack": "4.44.2", "webpack-dev-middleware": "3.7.2", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2", - "webpack-sources": "1.4.3", - "webpack-subresource-integrity": "1.4.0", - "worker-plugin": "4.0.3" + "webpack-dev-server": "3.11.2", + "webpack-merge": "5.7.3", + "webpack-sources": "2.2.0", + "webpack-subresource-integrity": "1.5.2", + "worker-plugin": "5.0.0" }, "dependencies": { - "@angular-devkit/architect": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", - "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", - "dev": true, - "requires": { - "@angular-devkit/core": "9.1.15", - "rxjs": "6.5.4" - } - }, - "@angular-devkit/core": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", - "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", - "dev": true, - "requires": { - "ajv": "6.12.3", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.5.4", - "source-map": "0.7.3" - } - }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.9.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", - "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", - "dev": true, - "requires": { - "@babel/types": "^7.9.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, - "@ngtools/webpack": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.15.tgz", - "integrity": "sha512-2k2SpBd8ssZ1XnLwM09t34pHck96d3ndyxBfg19IpXXXB/FbvhVXTkypB2ktpoGHy/8oSPeUDjz6O9x+p5iT8A==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.15", - "enhanced-resolve": "4.1.1", - "rxjs": "6.5.4", - "webpack-sources": "1.4.3" + "debug": "4" } }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "cacache": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.0.tgz", - "integrity": "sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g==", - "dev": true, - "requires": { - "chownr": "^1.1.2", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^8.0.0", - "tar": "^6.0.1", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "open": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", - "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "requires": { - "tslib": "^1.9.0" + "agent-base": "6", + "debug": "4" } }, "semver": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", - "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@angular-devkit/build-optimizer": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.15.tgz", - "integrity": "sha512-fCX27AAaM91UlNtjwUhqBFTvL3U0PexeVpQORJ7hAr4DG1z3DUHJS4RHCjlgM060ny0fj1V5gu21j1QAQx52vA==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1102.14.tgz", + "integrity": "sha512-1j69rFqE6tPMO0lQvOH8ogF7vE+p+Ws1/OtdZKUkZPOerIbQ8A3n5wzCx6/ZzMVhBQ3sXNhaShb4b9/1YuwU/g==", "dev": true, "requires": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "1.11.1", - "typescript": "3.6.5", - "webpack-sources": "1.4.3" + "tslib": "2.1.0", + "typescript": "4.1.5", + "webpack-sources": "2.2.0" }, "dependencies": { "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true }, "typescript": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.5.tgz", - "integrity": "sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.15.tgz", - "integrity": "sha512-vETkDD3xbWtm5zylKhKG2IYjmnED5DPBHCg/M0QmxMBEEiZOtqVrAwkJGSnErVInPmqW0jixIz3wCiMUBBA/dQ==", + "version": "0.1102.14", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.14.tgz", + "integrity": "sha512-+dJvzrwjbHY0bNr8fUDVbn4D4pAT/h1YVpGVyaoX7q66LN0x61zRC3e10gJ/Mr54l3yfc26M0OPD9KG8iZRbCA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.15", - "@angular-devkit/core": "9.1.15", - "rxjs": "6.5.4" - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.901.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.15.tgz", - "integrity": "sha512-t4yT34jQ3wA3NFZxph/PquITv8tFrkaexUusbNp4UN10+k+04lPF3aPnJJhM1VKjjfChznMMhLnqLjA+9o0Rmw==", - "dev": true, - "requires": { - "@angular-devkit/core": "9.1.15", - "rxjs": "6.5.4" - } - }, - "@angular-devkit/core": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.15.tgz", - "integrity": "sha512-zyUDaFQvnqsptoXhodbH4u+voXIldfDx+d0M2OMLj0tbfD4zp2fy7UOeTvu+lq2/LLNAObkG4JSK5DM9v1s08w==", - "dev": true, - "requires": { - "ajv": "6.12.3", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.5.4", - "source-map": "0.7.3" - } - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "rxjs": "6.6.3" } }, "@angular-devkit/core": { @@ -17553,12 +17370,6 @@ "uuid": "8.3.2" }, "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", @@ -17934,24 +17745,23 @@ "dev": true }, "@babel/core": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", - "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.1", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, @@ -18024,6 +17834,20 @@ } } }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz", + "integrity": "sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, "@babel/helper-create-regexp-features-plugin": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", @@ -18220,6 +18044,16 @@ "@babel/plugin-syntax-async-generators": "^7.8.4" } }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-proposal-dynamic-import": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", @@ -18230,6 +18064,16 @@ "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, "@babel/plugin-proposal-json-strings": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", @@ -18240,6 +18084,16 @@ "@babel/plugin-syntax-json-strings": "^7.8.3" } }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", @@ -18294,6 +18148,16 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", @@ -18313,6 +18177,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -18322,6 +18195,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -18331,6 +18213,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -18395,14 +18286,14 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -18632,6 +18523,25 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-transform-runtime": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", + "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "@babel/plugin-transform-shorthand-properties": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", @@ -18678,6 +18588,15 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-transform-unicode-regex": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", @@ -18689,70 +18608,76 @@ } }, "@babel/preset-env": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", - "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", + "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", "dev": true, "requires": { - "@babel/compat-data": "^7.9.0", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.0", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.0", - "@babel/plugin-transform-modules-commonjs": "^7.9.0", - "@babel/plugin-transform-modules-systemjs": "^7.9.0", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.0", - "browserslist": "^4.9.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" }, "dependencies": { @@ -18778,9 +18703,9 @@ } }, "@babel/runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz", - "integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -18843,6 +18768,12 @@ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -18850,38 +18781,16 @@ "dev": true }, "@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz", - "integrity": "sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", "dev": true, "requires": { "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.1", - "loader-utils": "^1.4.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", "merge-source-map": "^1.1.0", - "schema-utils": "^2.6.4" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } + "schema-utils": "^2.7.0" } }, "@ng-bootstrap/ng-bootstrap": { @@ -18900,6 +18809,17 @@ "tslib": "^2.0.0" } }, + "@ngtools/webpack": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.14.tgz", + "integrity": "sha512-6q57tEWtUJRsxfTKE19L20iXvNesfVy8hrVdyzVk64DZQh0lIl4/xZT4d5bJCWOuQQDaAeZK4YbEFcYJn7k1yw==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.14", + "enhanced-resolve": "5.7.0", + "webpack-sources": "2.2.0" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -19145,6 +19065,12 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "dev": true + }, "@types/component-emitter": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", @@ -19206,17 +19132,17 @@ "integrity": "sha512-UV1/ZJMC+HcP902wWdpC43cAcGu0IQk/I5bXjP2aSuCjsk3cE74mDvFrLKga7oDC170ugOAYBwfT4DSQW3akDA==", "dev": true }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "@types/pdfjs-dist": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@types/pdfjs-dist/-/pdfjs-dist-2.1.7.tgz", "integrity": "sha512-nQIwcPUhkAIyn7x9NS0lR/qxYfd5unRtfGkMjvpgF4Sh28IXftRymaNmFKTTdejDNY25NDGSIyjwj/BRwAPexg==" }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, "@types/selenium-webdriver": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", @@ -19249,178 +19175,177 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -19442,6 +19367,12 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -19464,6 +19395,16 @@ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -19533,9 +19474,9 @@ "dev": true }, "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { @@ -19671,13 +19612,6 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "optional": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -19786,18 +19720,17 @@ "dev": true }, "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.4.tgz", + "integrity": "sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw==", "dev": true, "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", - "chalk": "^2.4.2", + "browserslist": "^4.16.1", + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "fraction.js": "^4.0.13", "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "postcss-value-parser": "^4.1.0" } }, "aws-sign2": { @@ -19822,37 +19755,17 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -19873,39 +19786,20 @@ "json5": "^1.0.1" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "semver": "^6.0.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } } } }, @@ -20374,28 +20268,10 @@ "get-intrinsic": "^1.0.2" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { @@ -20464,12 +20340,6 @@ "readdirp": "~3.4.0" } }, - "chokidar2": { - "version": "file:node_modules/watchpack/chokidar2", - "requires": { - "chokidar": "^2.1.8" - } - }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -20493,9 +20363,9 @@ } }, "circular-dependency-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", - "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", + "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", "dev": true, "requires": {} }, @@ -20651,17 +20521,6 @@ "shallow-clone": "^3.0.0" } }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -20732,16 +20591,6 @@ "object-visit": "^1.0.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -20755,15 +20604,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "colord": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", + "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "dev": true }, "colorette": { "version": "1.2.2", @@ -20950,6 +20795,15 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "copy-anything": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", + "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "dev": true, + "requires": { + "is-what": "^3.12.0" + } + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -20982,21 +20836,21 @@ "dev": true }, "copy-webpack-plugin": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", - "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.3.2.tgz", + "integrity": "sha512-MgJ1uouLIbDg4ST1GzqrGQyKoXY5iPqi6fghFqarijam7FQcBa/r6Rg0VkoIuzx75Xq8iAMghyOueMkWUQ5OaA==", "dev": true, "requires": { - "cacache": "^15.0.4", + "cacache": "^15.0.5", "fast-glob": "^3.2.4", "find-cache-dir": "^3.3.1", "glob-parent": "^5.1.1", "globby": "^11.0.1", "loader-utils": "^2.0.0", "normalize-path": "^3.0.0", - "p-limit": "^3.0.1", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "webpack-sources": "^1.4.3" }, "dependencies": { @@ -21008,13 +20862,40 @@ "requires": { "yocto-queue": "^0.1.0" } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } } } }, "core-js": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", - "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", "dev": true }, "core-js-compat": { @@ -21052,15 +20933,16 @@ } }, "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@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" } }, "create-ecdh": { @@ -21108,6 +20990,70 @@ "sha.js": "^2.4.8" } }, + "critters": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.7.tgz", + "integrity": "sha512-qUF2SaAWFYjNPdCcPpu68p2DnHiosia84yx5mPTlUMQjkjChR+n6sO1/I7yn2U2qNDgSPTd2SoaTIDQcUL+EwQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css": "^3.0.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "pretty-bytes": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -21149,15 +21095,14 @@ } }, "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, "requires": { - "inherits": "^2.0.3", + "inherits": "^2.0.4", "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "source-map-resolve": "^0.6.0" }, "dependencies": { "source-map": { @@ -21169,67 +21114,56 @@ } }, "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", "dev": true }, "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "dev": true, "requires": { - "postcss": "^7.0.1", "timsort": "^0.3.0" } }, "css-loader": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.1.tgz", - "integrity": "sha512-0G4CbcZzQ9D1Q6ndOfjFuMDo8uLYMu5vc9Abs5ztyHcKvmil6GJrMiNjzzi3tQvUF+mVRuDg7bE6Oc0Prolgig==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.1.tgz", + "integrity": "sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw==", "dev": true, "requires": { - "camelcase": "^5.3.1", + "camelcase": "^6.2.0", "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.27", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.3", - "schema-utils": "^2.6.5", - "semver": "^6.3.0" + "icss-utils": "^5.0.0", + "loader-utils": "^2.0.0", + "postcss": "^8.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, @@ -21240,26 +21174,54 @@ "dev": true, "requires": { "css": "^2.0.0" + }, + "dependencies": { + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + } } }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, "css-selector-tokenizer": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", @@ -21271,12 +21233,12 @@ } }, "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" }, "dependencies": { @@ -21289,9 +21251,9 @@ } }, "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true }, "cssauron": { @@ -21310,81 +21272,59 @@ "dev": true }, "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.2.tgz", + "integrity": "sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q==", "dev": true, "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.0.1", + "is-resolvable": "^1.1.0" } }, "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", "dev": true, "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" } }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true + "requires": {} }, "csso": { "version": "4.2.0", @@ -21393,30 +21333,6 @@ "dev": true, "requires": { "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "custom-event": { @@ -21709,21 +21625,14 @@ } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - } } }, "domain-browser": { @@ -21733,28 +21642,29 @@ "dev": true }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "domelementtype": "^2.2.0" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "requires": { - "is-obj": "^2.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "duplexify": { @@ -21903,26 +21813,13 @@ } }, "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, "ent": { @@ -21967,41 +21864,6 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -22427,9 +22289,9 @@ } }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -22451,13 +22313,26 @@ } }, "file-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", - "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, "requires": { "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "file-saver": { @@ -22601,6 +22476,12 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, + "fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -22841,12 +22722,6 @@ "ansi-regex": "^2.0.0" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -23051,6 +22926,12 @@ } } }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -23264,13 +23145,11 @@ } }, "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "requires": { - "postcss": "^7.0.14" - } + "requires": {} }, "ieee754": { "version": "1.1.13", @@ -23312,32 +23191,14 @@ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", "dev": true }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "import-local": { @@ -23407,12 +23268,6 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -23559,15 +23414,6 @@ "ipaddr.js": "^1.9.0" } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -23587,9 +23433,9 @@ "dev": true }, "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "is-accessor-descriptor": { @@ -23616,12 +23462,6 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -23630,27 +23470,12 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -23663,6 +23488,14 @@ "hsla-regex": "^1.0.0", "rgb-regex": "^1.0.1", "rgba-regex": "^1.0.0" + }, + "dependencies": { + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + } } }, "is-core-module": { @@ -23699,12 +23532,6 @@ "kind-of": "^6.0.2" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -23751,29 +23578,11 @@ "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", "dev": true }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -23798,12 +23607,6 @@ "path-is-inside": "^1.0.2" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -23835,21 +23638,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -23862,6 +23650,12 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -24063,11 +23857,12 @@ "dev": true }, "jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, @@ -24426,30 +24221,30 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, "less": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz", - "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.1.tgz", + "integrity": "sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw==", "dev": true, "requires": { - "clone": "^2.1.2", + "copy-anything": "^2.0.1", "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "promise": "^7.1.1", - "request": "^2.83.0", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", "source-map": "~0.6.0", "tslib": "^1.10.0" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -24466,67 +24261,55 @@ } }, "less-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", - "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.3.0.tgz", + "integrity": "sha512-Mi8915g7NMaLlgi77mgTTQvK022xKRQBIVDSyfl3ErTuBhmZBQab0mjeJjNNqGbdR+qrfTleKXqbGI4uEFavxg==", "dev": true, "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^4.0.1" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "license-webpack-plugin": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.4.tgz", - "integrity": "sha512-1Xq72fmPbTg5KofXs+yI5L4QqPFjQ6mZxoeI6D7gfiEDOtaEIk6PGrdLaej90bpDqKNHNxlQ/MW4tMAL6xMPJQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.11.tgz", + "integrity": "sha512-0iVGoX5vx0WDy8dmwTTpOOMYiGqILyUbDeVMFH52AjgBlS58lHwOlFMSoqg5nY8Kxl6+FRKyUZY/UdlQaOyqDw==", "dev": true, "requires": { "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "lie": { @@ -24538,6 +24321,12 @@ "immediate": "~3.0.5" } }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -24569,12 +24358,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -24667,15 +24450,6 @@ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -24777,12 +24551,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -24815,9 +24583,9 @@ } }, "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "media-typer": { @@ -24933,46 +24701,41 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.5.tgz", + "integrity": "sha512-tvmzcwqJJXau4OQE5vT72pRT18o2zF+tQJp8CWchqvfQnTlflkzS+dANYcRdyPRWUWRkfmeNTKltx0NZI/b5dQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", "webpack-sources": "^1.1.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } @@ -25175,6 +24938,12 @@ "dev": true, "optional": true }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -25194,6 +24963,30 @@ "to-regex": "^3.0.1" } }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -25371,16 +25164,10 @@ "dev": true }, "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", + "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", + "dev": true }, "npm-bundled": { "version": "1.1.2", @@ -25478,20 +25265,14 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -25578,12 +25359,6 @@ } } }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, "object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -25621,17 +25396,6 @@ "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -25641,17 +25405,6 @@ "isobject": "^3.0.1" } }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -25925,6 +25678,15 @@ "readable-stream": "^2.1.5" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -25939,21 +25701,57 @@ } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "requires": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -26077,6 +25875,15 @@ "find-up": "^4.0.0" } }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -26106,14 +25913,14 @@ "dev": true }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -26121,598 +25928,330 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dev": true, "requires": { - "postcss": "^7.0.27", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.2" } }, "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.1.0" } }, "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "requires": {} }, "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "requires": {} }, "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "requires": {} }, "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "requires": {} }, "postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.0.tgz", + "integrity": "sha512-gFDDzXhqr9ELmnLHgCC3TbGfA6Dm/YMb/UN8/f7Uuq4fL7VTk2vOIj6hwINEwbokEmp123bLD7a5m+E+KIetRg==", "dev": true, "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", + "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" } }, "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", + "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" } } } }, "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "dev": true, "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" } }, "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "dev": true, "requires": { - "browserslist": "^4.0.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" } }, "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.1.0" } }, "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } } }, "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" } }, "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "requires": { - "postcss": "^7.0.5" - } + "requires": {} }, "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", + "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "postcss-selector-parser": "^6.0.4" } }, "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "icss-utils": "^5.0.0" } }, "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "requires": {} }, "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "dev": true, "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.1.0" } }, "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, "postcss-selector-parser": { @@ -26726,32 +26265,23 @@ } }, "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" } }, "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", "uniqs": "^2.0.0" } }, @@ -26761,10 +26291,10 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, "process": { @@ -26779,16 +26309,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -27212,12 +26732,6 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, "qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", @@ -27230,16 +26744,6 @@ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -27310,33 +26814,24 @@ } }, "raw-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.0.tgz", - "integrity": "sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } @@ -27412,9 +26907,9 @@ } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, "regenerator-transform": { @@ -27436,6 +26931,12 @@ "safe-regex": "^1.1.0" } }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -27576,12 +27077,20 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url": { @@ -27590,6 +27099,47 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -27656,12 +27206,21 @@ } }, "rollup": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.1.0.tgz", - "integrity": "sha512-gfE1455AEazVVTJoeQtcOq/U6GSxwoj4XPSWVsuWmgIxj7sBQNLDOSA82PbdMe+cP8ql8fR1jogPFe8Wg8g4SQ==", + "version": "2.38.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.4.tgz", + "integrity": "sha512-B0LcJhjiwKkTl79aGVF/u5KdzsH8IylVfV56Ut6c9ouWLJcUK17T83aZBetNYSnZtXf2OHD4+2PbmRW+Fp5ulg==", "dev": true, "requires": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } } }, "run-async": { @@ -27724,52 +27283,37 @@ "dev": true }, "sass": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", - "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", + "version": "1.32.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.6.tgz", + "integrity": "sha512-1bcDHDcSqeFtMr0JXI3xc/CXX6c4p0wHHivJdru8W7waM7a1WjKMm4m/Z5sY7CbVw4Whi2Chpcw6DFfSWwGLzQ==", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.1.tgz", + "integrity": "sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==", "dev": true, "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, @@ -27933,9 +27477,9 @@ } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -28102,23 +27646,6 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -28248,6 +27775,19 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } } } }, @@ -28328,14 +27868,14 @@ } }, "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", + "faye-websocket": "^0.11.3", "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "websocket-driver": "^0.7.4" }, "dependencies": { "uuid": { @@ -28347,17 +27887,17 @@ } }, "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", "dev": true, "requires": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" }, "dependencies": { "debug": { @@ -28368,15 +27908,6 @@ "requires": { "ms": "^2.1.1" } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } } } }, @@ -28412,15 +27943,6 @@ } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -28434,48 +27956,55 @@ "dev": true }, "source-map-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", - "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", + "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", "dev": true, "requires": { - "async": "^2.5.0", - "loader-utils": "^1.1.0" + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.6.1", + "whatwg-mimetype": "^2.3.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { - "minimist": "^1.2.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "dev": true, "requires": { "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "decode-uri-component": "^0.2.0" } }, "source-map-support": { @@ -28548,12 +28077,63 @@ } }, "speed-measure-webpack-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", - "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.4.2.tgz", + "integrity": "sha512-AtVzD0bnIy2/B0fWqJpJgmhcrfWFhBlduzSo0uwplr/QvB33ZNZj2NEth3NONgdnZJqicK0W0mSxnLSbsVCDbw==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^4.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "split-string": { @@ -28756,12 +28336,6 @@ } } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -28799,26 +28373,6 @@ } } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -28835,74 +28389,51 @@ "dev": true }, "style-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", - "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.6.4" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } }, "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" } }, "stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "dev": true, "requires": { "css-parse": "~2.0.0", "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", "safer-buffer": "^2.1.2", "sax": "~1.2.4", - "semver": "^6.0.0", + "semver": "^6.3.0", "source-map": "^0.7.3" }, "dependencies": { @@ -28915,6 +28446,12 @@ "ms": "2.0.0" } }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -28930,34 +28467,27 @@ } }, "stylus-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", - "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-4.3.3.tgz", + "integrity": "sha512-PpWB5PnCXUzW4WMYhCvNzAHJBjIBPMXwsdfkkKuA9W7k8OQFMl/19/AQvaWsxz2IptxUlCseyJ6TY/eEKJ4+UQ==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "when": "~3.6.x" + "fast-glob": "^3.2.4", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } @@ -28971,24 +28501,75 @@ } }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", "dev": true, "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "symbol-observable": { @@ -28998,9 +28579,9 @@ "dev": true }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true }, "tar": { @@ -29026,65 +28607,51 @@ } }, "terser": { - "version": "4.6.10", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz", - "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", + "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", "dev": true, "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" } }, "terser-webpack-plugin": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz", - "integrity": "sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, "requires": { - "cacache": "^15.0.4", + "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.0.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^3.1.0", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^4.6.13", + "terser": "^5.3.4", "webpack-sources": "^1.4.3" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "yocto-queue": "^0.1.0" } }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, "source-map": { @@ -29093,28 +28660,24 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -29247,6 +28810,12 @@ "yn": "^3.0.0" } }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, "tslib": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.2.tgz", @@ -29358,18 +28927,6 @@ "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", "dev": true }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -29418,12 +28975,6 @@ } } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -29478,12 +29029,6 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -29602,18 +29147,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -29670,15 +29203,252 @@ "dev": true }, "watchpack": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.1.tgz", - "integrity": "sha512-1OeW6LucExk7h6lBuCr1isK5261Tf0PHNRG9tZjg2WKUsSkPwvyv37d7mgAUk1rZjxxaL/6WttSGMUY2hn/20g==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { - "chokidar": "^3.4.0", - "chokidar2": "file:chokidar2", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "wbuf": { @@ -29710,33 +29480,33 @@ } }, "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -29798,6 +29568,29 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -29977,6 +29770,15 @@ "ajv-keywords": "^3.1.0" } }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -29992,6 +29794,23 @@ "figgy-pudding": "^3.5.1" } }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, "terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -30019,6 +29838,16 @@ "repeat-string": "^1.6.1" } }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -30049,9 +29878,9 @@ } }, "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -30074,11 +29903,11 @@ "p-retry": "^3.0.1", "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", @@ -30220,12 +30049,6 @@ } } }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -30341,6 +30164,12 @@ "uuid": "^3.3.2" }, "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -30350,22 +30179,23 @@ } }, "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", "dev": true, "requires": { - "lodash": "^4.17.15" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -30377,20 +30207,40 @@ } }, "webpack-subresource-integrity": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.0.tgz", - "integrity": "sha512-GB1kB/LwAWC3CxwcedGhMkxGpNZxSheCe1q+KJP1bakuieAdX/rGHEcf5zsEzhKXpqsGqokgsDoD9dIkr61VDQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", + "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", "dev": true, "requires": { "webpack-sources": "^1.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -30400,10 +30250,10 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, - "when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "which": { @@ -30415,19 +30265,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "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-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -30470,6 +30307,12 @@ } } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -30480,9 +30323,9 @@ } }, "worker-plugin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", - "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", "dev": true, "requires": { "loader-utils": "^1.1.0" @@ -30586,6 +30429,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index bb861bc43..5b32c1a2e 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -36,7 +36,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.901.15", + "@angular-devkit/build-angular": "^0.1102.14", "@angular/cli": "~11.2.14", "@angular/compiler-cli": "~11.2.14", "@types/jasmine": "~3.6.0", From 910ac7d9b41ede5cd7678548b12776de1b9cb8a1 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 15:27:04 +0200 Subject: [PATCH 824/898] update datepipe implementation due to interface change --- src-ui/src/app/pipes/custom-date.pipe.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/pipes/custom-date.pipe.ts b/src-ui/src/app/pipes/custom-date.pipe.ts index 34aaaf1b7..71f386b8c 100644 --- a/src-ui/src/app/pipes/custom-date.pipe.ts +++ b/src-ui/src/app/pipes/custom-date.pipe.ts @@ -11,12 +11,11 @@ const FORMAT_TO_ISO_FORMAT = { @Pipe({ name: 'customDate' }) -export class CustomDatePipe extends DatePipe implements PipeTransform { +export class CustomDatePipe implements PipeTransform { private defaultLocale: string - constructor(@Inject(LOCALE_ID) locale: string, private settings: SettingsService) { - super(locale) + constructor(@Inject(LOCALE_ID) locale: string, private datePipe: DatePipe, private settings: SettingsService) { this.defaultLocale = locale } @@ -24,9 +23,9 @@ export class CustomDatePipe extends DatePipe implements PipeTransform { let l = locale || this.settings.get(SETTINGS_KEYS.DATE_LOCALE) || this.defaultLocale let f = format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT) if (l == "iso-8601") { - return super.transform(value, FORMAT_TO_ISO_FORMAT[f], timezone) + return this.datePipe.transform(value, FORMAT_TO_ISO_FORMAT[f], timezone) } else { - return super.transform(value, format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT), timezone, l) + return this.datePipe.transform(value, format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT), timezone, l) } } From 215a36f15bdf6a40512954318a95a3039e28aa7f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 15:43:32 +0200 Subject: [PATCH 825/898] update django-q --- Pipfile | 2 +- Pipfile.lock | 9 ++++----- src/paperless/settings.py | 2 ++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Pipfile b/Pipfile index 5b48d56b8..9fea4c208 100644 --- a/Pipfile +++ b/Pipfile @@ -14,7 +14,7 @@ django = "~=3.2" django-cors-headers = "*" django-extensions = "*" django-filter = "~=2.4.0" -django-q = "==1.3.4" +django-q = "~=1.3.4" djangorestframework = "~=3.12.2" filelock = "*" fuzzywuzzy = {extras = ["speedup"], version = "*"} diff --git a/Pipfile.lock b/Pipfile.lock index 972a065cb..b147239b0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "2da6572956d27205c496da2ef5f584a9ba53b5f6b3c8bf1724211dc48bfac7b7" + "sha256": "deaa52fcf234236357749005f429cea100e817c694d8f383d931236e02e8bab0" }, "pipfile-spec": 6, "requires": {}, @@ -276,11 +276,11 @@ }, "django-q": { "hashes": [ - "sha256:523d54dcf1b66152c1b658f914f00ed3b518a3432a9decd4898738ca8dbbe10f", - "sha256:7e5c5c021a15cff6807044a3aa48f5757789ccfef839d71c575f5512931a3e33" + "sha256:681c7e91c58322d0a4ea6d5fa8df21e6e785123fd6ee7c86af201e6a1c08ddc1", + "sha256:db30266fadd6ab9336a8824291910ff1d1c28f7bc9d6e52cdaf33cc275ae6146" ], "index": "pypi", - "version": "==1.3.4" + "version": "==1.3.8" }, "djangorestframework": { "hashes": [ @@ -1381,7 +1381,6 @@ "version": "==4.0.0" }, "coverage": { - "extras": [], "hashes": [ "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c", "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6", diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 39504fe54..63d014ede 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -420,6 +420,8 @@ Q_CLUSTER = { 'name': 'paperless', 'catch_up': False, 'recycle': 1, + 'retry': 1800, + 'timeout': 1800, 'workers': TASK_WORKERS, 'redis': os.getenv("PAPERLESS_REDIS", "redis://localhost:6379") } From fca9ce777e4343667d33917060fdbd4b4c004c6a Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 16:36:05 +0200 Subject: [PATCH 826/898] update django-q --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f99bb3d8d..4d809df41 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,7 +31,7 @@ django-cors-headers==3.7.0 django-extensions==3.1.3 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' -django-q==1.3.4 +django-q==1.3.8 django==3.2.4 djangorestframework==3.12.4 filelock==3.0.12 From 96738277d94a74e810638c77a46ba8cf45bd1be2 Mon Sep 17 00:00:00 2001 From: Michael Lynch Date: Sun, 13 Jun 2021 10:48:46 -0400 Subject: [PATCH 827/898] Normalize whitespace in source files Ensure that no source files have trailing whitespace at end of lines and ensure that all files end with a single trailing newline. This also adds Github Actions to enforce whitespace conventions. --- .env | 2 +- .../workflow-scripts/check-trailing-newline | 37 +++++++++++++++++++ .../check-trailing-whitespace | 26 +++++++++++++ .github/workflows/ci.yml | 15 +++++++- docker/compose/.env | 2 +- docs/changelog.rst | 2 +- docs/configuration.rst | 22 +++++------ docs/contributing.rst | 2 +- docs/extending.rst | 18 ++++----- docs/faq.rst | 4 +- docs/index.rst | 2 +- docs/setup.rst | 6 +-- docs/troubleshooting.rst | 6 +-- docs/usage_overview.rst | 10 ++--- src-ui/e2e/protractor.conf.js | 2 +- src-ui/src/app/app.component.html | 2 +- src-ui/src/app/app.component.ts | 2 +- .../confirm-dialog.component.ts | 2 +- .../date-dropdown.component.html | 2 +- .../filterable-dropdown.component.ts | 2 +- .../toggleable-dropdown-button.component.html | 2 +- .../components/common/input/abstract-input.ts | 2 +- .../common/input/check/check.component.html | 2 +- .../common/input/check/check.component.ts | 2 +- .../common/input/color/color.component.html | 6 +-- .../common/input/number/number.component.html | 2 +- .../common/input/text/text.component.html | 2 +- .../select-dialog.component.html | 2 +- .../components/common/tag/tag.component.html | 2 +- .../statistics-widget.component.ts | 2 +- .../welcome-widget.component.html | 2 +- .../widget-frame/widget-frame.component.html | 4 +- .../metadata-collapse.component.html | 2 +- .../metadata-collapse.component.scss | 2 +- .../document-card-large.component.scss | 2 +- .../filter-editor.component.html | 2 +- .../correspondent-edit-dialog.component.ts | 2 +- .../correspondent-list.component.ts | 2 +- .../document-type-edit-dialog.component.ts | 2 +- .../document-type-list.component.html | 2 +- .../manage/tag-list/tag-list.component.html | 2 +- .../not-found/not-found.component.html | 2 +- src-ui/src/app/data/filter-rule.ts | 4 +- .../src/app/data/paperless-correspondent.ts | 2 +- .../app/data/paperless-document-metadata.ts | 4 +- .../data/paperless-document-suggestions.ts | 2 +- src-ui/src/app/data/paperless-saved-view.ts | 2 +- src-ui/src/app/data/results.ts | 2 +- .../data/websocket-consumer-status-message.ts | 2 +- .../interceptors/api-version.interceptor.ts | 2 +- .../src/app/interceptors/csrf.interceptor.ts | 2 +- src-ui/src/app/pipes/file-size.pipe.ts | 2 +- src-ui/src/app/pipes/safe.pipe.ts | 2 +- .../app/services/open-documents.service.ts | 2 +- .../app/services/rest/saved-view.service.ts | 2 +- .../src/app/services/rest/search.service.ts | 4 +- src-ui/src/app/utils/color.ts | 4 +- .../app/utils/ngb-date-parser-formatter.ts | 2 +- src/documents/static/bootstrap.min.css | 2 +- 59 files changed, 166 insertions(+), 92 deletions(-) create mode 100755 .github/workflow-scripts/check-trailing-newline create mode 100755 .github/workflow-scripts/check-trailing-whitespace diff --git a/.env b/.env index 511a1386d..0bd5be6ff 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -COMPOSE_PROJECT_NAME=paperless \ No newline at end of file +COMPOSE_PROJECT_NAME=paperless diff --git a/.github/workflow-scripts/check-trailing-newline b/.github/workflow-scripts/check-trailing-newline new file mode 100755 index 000000000..6973a5e3e --- /dev/null +++ b/.github/workflow-scripts/check-trailing-newline @@ -0,0 +1,37 @@ +#!/bin/bash + +# Verify that all text files end in a trailing newline. + +# Exit on first failing command. +set -e + +# Exit on unset variable. +set -u + +success=0 + +function is_plaintext_file() { + local file="$1" + if [[ $file == *.svg ]]; then + echo "" + return + fi + file --brief "${file}" | grep text +} + +# Split strings on newlines. +IFS=' +' +for file in $(git ls-files) +do + if [[ -z $(is_plaintext_file "${file}") ]]; then + continue + fi + + if ! [[ -z "$(tail -c 1 "${file}")" ]]; then + printf "File must end in a trailing newline: %s\n" "${file}" >&2 + success=255 + fi +done + +exit "${success}" diff --git a/.github/workflow-scripts/check-trailing-whitespace b/.github/workflow-scripts/check-trailing-whitespace new file mode 100755 index 000000000..fe7a2bdd6 --- /dev/null +++ b/.github/workflow-scripts/check-trailing-whitespace @@ -0,0 +1,26 @@ +#!/bin/bash + +# Check for trailing whitespace at end of lines. + +# Exit on first failing command. +set -e +# Exit on unset variable. +set -u + +FOUND_TRAILING_WHITESPACE=0 + +while read -r line; do + if grep \ + "\s$" \ + --line-number \ + --with-filename \ + --binary-files=without-match \ + --exclude="*.svg" \ + --exclude="*.eps" \ + "${line}"; then + echo "ERROR: Found trailing whitespace" >&2; + FOUND_TRAILING_WHITESPACE=1 + fi +done < <(git ls-files) + +exit "${FOUND_TRAILING_WHITESPACE}" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85db2d482..93194f43d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -81,6 +81,17 @@ jobs: run: | cd src/ pycodestyle + whitespace: + runs-on: ubuntu-20.04 + steps: + - + name: Ensure there are no trailing spaces + run: | + .github/workflow-scripts/check-trailing-whitespace + - + name: Ensure all text files end with a trailing newline + run: | + .github/workflow-scripts/check-trailing-whitespace tests: runs-on: ubuntu-20.04 @@ -158,7 +169,7 @@ jobs: path: src/documents/static/frontend/ build-release: - needs: [frontend, documentation, tests, codestyle] + needs: [frontend, documentation, tests, whitespace, codestyle] runs-on: ubuntu-20.04 steps: - @@ -268,7 +279,7 @@ jobs: build-docker-image: if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/ng-')) runs-on: ubuntu-latest - needs: [frontend, tests, codestyle] + needs: [frontend, tests, whitespace, codestyle] steps: - name: Prepare diff --git a/docker/compose/.env b/docker/compose/.env index 511a1386d..0bd5be6ff 100644 --- a/docker/compose/.env +++ b/docker/compose/.env @@ -1 +1 @@ -COMPOSE_PROJECT_NAME=paperless \ No newline at end of file +COMPOSE_PROJECT_NAME=paperless diff --git a/docs/changelog.rst b/docs/changelog.rst index eeabccd22..b98c4c83d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -25,7 +25,7 @@ paperless-ng 1.4.3 * `Michael Shamoon`_ added dark mode for the login and logout pages. * `Alexander Menk`_ added additional stylesheets for printing. You can now print any page of paperless and the print result will hide the page header, sidebar, and action buttons. * Added support for sorting when using full text search. - + * Fixes * `puuu`_ fixed ``PAPERLESS_FORCE_SCRIPT_NAME``. You can now host paperless on sub paths such as ``https://localhost:8000/paperless/``. diff --git a/docs/configuration.rst b/docs/configuration.rst index 9d10e2beb..6622735c2 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -174,11 +174,11 @@ PAPERLESS_AUTO_LOGIN_USERNAME= Defaults to none, which disables this feature. PAPERLESS_ADMIN_USER= - If this environment variable is specified, Paperless automatically creates - a superuser with the provided username at start. This is useful in cases - where you can not run the `createsuperuser` command seperately, such as Kubernetes + If this environment variable is specified, Paperless automatically creates + a superuser with the provided username at start. This is useful in cases + where you can not run the `createsuperuser` command seperately, such as Kubernetes or AWS ECS. - + Requires `PAPERLESS_ADMIN_PASSWORD` to be set. .. note:: @@ -188,7 +188,7 @@ PAPERLESS_ADMIN_USER= the lifecycle of the containers. PAPERLESS_ADMIN_MAIL= - (Optional) Specify superuser email address. Only used when + (Optional) Specify superuser email address. Only used when `PAPERLESS_ADMIN_USER` is set. Defaults to ``root@localhost``. @@ -222,17 +222,17 @@ PAPERLESS_ENABLE_HTTP_REMOTE_USER= Also see the warning `in the official documentation `. Defaults to `false` which disables this feature. - + PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME= - If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to - customize the name of the HTTP header from which the authenticated username + If `PAPERLESS_ENABLE_HTTP_REMOTE_USER` is enabled, this property allows to + customize the name of the HTTP header from which the authenticated username is extracted. Values are in terms of [HttpRequest.META](https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.META). - Thus, the configured value must start with `HTTP_` followed by the + Thus, the configured value must start with `HTTP_` followed by the normalized actual header name. - + Defaults to `HTTP_REMOTE_USER`. - + .. _configuration-ocr: OCR settings diff --git a/docs/contributing.rst b/docs/contributing.rst index 30eb9779a..ec1a20921 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -6,7 +6,7 @@ Contributing to Paperless .. warning:: This section is not updated to paperless-ng yet. - + Maybe you've been using Paperless for a while and want to add a feature or two, or maybe you've come across a bug that you have some ideas how to solve. The beauty of Free software is that you can see what's wrong and help to get it diff --git a/docs/extending.rst b/docs/extending.rst index bceeacfd7..11f340b27 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -23,10 +23,10 @@ Apart from that, the folder structure is as follows: * ``scripts/`` - Various scripts that help with different parts of development. * ``docker/`` - Files required to build the docker image. -Initial setup and first start +Initial setup and first start ============================= -After you forked and cloned the code from github you need to perform a first-time setup. +After you forked and cloned the code from github you need to perform a first-time setup. To do the setup you need to perform the steps from the following chapters in a certain order: 1. Install prerequisites + pipenv as mentioned in :ref:`Bare metal route ` @@ -35,19 +35,19 @@ To do the setup you need to perform the steps from the following chapters in a c .. code:: shell-session - $ npm install -g @angular/cli + $ npm install -g @angular/cli 4. Create ``consume`` and ``media`` folders in the cloned root folder. - + .. code:: shell-session mkdir -p consume media 5. You can now either ... - * install redis or + * install redis or * use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server) or - * spin up a bare redis container + * spin up a bare redis container .. code:: shell-session @@ -79,7 +79,7 @@ To do the setup you need to perform the steps from the following chapters in a c python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster 10. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend. - + Backend development environment is now ready, to start Frontend development go to ``/src-ui`` and run ``ng serve``. From there you can use ``http://localhost:4200`` for a preview. Back end development @@ -207,7 +207,7 @@ Adding new languages requires adding the translated files in the "src-ui/src/loc // Add your new language here ] } - + ``dateInputFormat`` is a special string that defines the behavior of the date input fields and absolutely needs to contain "dd", "mm" and "yyyy". 3. Import and register the Angular data for this locale in "src-ui/src/app/app.module.ts": @@ -320,7 +320,7 @@ methods ``parse`` and ``get_thumbnail``. You can provide your own implementation # The content of the document. self.text = "content" - + # Optional: path to a PDF document that you created from the original. self.archive_path = os.path.join(self.tempdir, "archived.pdf") diff --git a/docs/faq.rst b/docs/faq.rst index 0f4527d62..74b32cf5c 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -68,10 +68,10 @@ reuse the text. The web interface is a lot snappier, since it runs in your browser and paperless has to do much less work to serve the data. .. note:: - + You can adjust some of the settings so that paperless uses less processing power. See :ref:`setup-less_powerful_devices` for details. - + **Q:** *How do I install paperless-ng on Raspberry Pi?* diff --git a/docs/index.rst b/docs/index.rst index 4035d822e..f30895508 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -49,7 +49,7 @@ resources in the documentation: paperless-ng. * Paperless is now integrated with a :ref:`task processing queue ` that tells you - at a glance when and why something is not working. + at a glance when and why something is not working. * The :ref:`changelog ` contains a detailed list of all changes in paperless-ng. diff --git a/docs/setup.rst b/docs/setup.rst index acdeec946..3600492da 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -284,7 +284,7 @@ writing. Windows is not and will never be supported. Use this list for your preferred package management: - .. code:: + .. code:: python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support @@ -303,7 +303,7 @@ writing. Windows is not and will never be supported. Use this list for your preferred package management: - .. code:: + .. code:: unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr @@ -359,7 +359,7 @@ writing. Windows is not and will never be supported. 8. Install python requirements from the ``requirements.txt`` file. It is up to you if you wish to use a virtual environment or not. First you should update your pip, so it gets the actual packages. - + .. code:: shell-session sudo -Hu paperless pip3 install --upgrade pip diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 155f60bbd..25a1b7f6f 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -81,7 +81,7 @@ UserWarning in sklearn on every single document You may encounter warnings like this: .. code:: - + /usr/local/lib/python3.7/site-packages/sklearn/base.py:315: UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0. This might lead to breaking code or invalid results. Use at your own risk. @@ -200,13 +200,13 @@ This might have multiple reasons. File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile sent += os.sendfile(sockno, fileno, offset + sent, count) OSError: [Errno 22] Invalid argument - + To fix this issue, add .. code:: SENDFILE=0 - + to your `docker-compose.env` file. Error while reading metadata diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst index 7283db02f..b9f235957 100644 --- a/docs/usage_overview.rst +++ b/docs/usage_overview.rst @@ -71,7 +71,7 @@ your documents: This process can be configured to fit your needs. If you don't want paperless to create archived versions for digital documents, you can configure that by - configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the + configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the :ref:`relevant section in the documentation `. .. note:: @@ -289,7 +289,7 @@ Matching specific tags, correspondents or types: Matching dates: .. code:: - + created:[2005 to 2009] added:yesterday modified:today @@ -306,11 +306,11 @@ Matching inexact words: auto complete and query correction. All of these constructs can be combined as you see fit. -If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language. +If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language. Head over to `Whoosh query language `_. For details on what date parsing utilities are available, see `Date parsing `_. - + .. _usage-recommended_workflow: @@ -385,7 +385,7 @@ Once you have scanned in a document, proceed in paperless as follows. 6. Remove inbox tags from the documents. .. hint:: - + You can setup manual matching rules for your correspondents and tags and paperless will assign them automatically. After consuming a couple documents, you can even ask paperless to *learn* when to assign tags and correspondents diff --git a/src-ui/e2e/protractor.conf.js b/src-ui/e2e/protractor.conf.js index f238c0bbe..09a96840f 100644 --- a/src-ui/e2e/protractor.conf.js +++ b/src-ui/e2e/protractor.conf.js @@ -33,4 +33,4 @@ exports.config = { } })); } -}; \ No newline at end of file +}; diff --git a/src-ui/src/app/app.component.html b/src-ui/src/app/app.component.html index bcf2bba31..d9b7dd09b 100644 --- a/src-ui/src/app/app.component.html +++ b/src-ui/src/app/app.component.html @@ -1,3 +1,3 @@ - \ No newline at end of file + diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index 2b828d3b0..c5ec9604d 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -45,7 +45,7 @@ export class AppComponent implements OnInit, OnDestroy { ngOnInit(): void { this.consumerStatusService.connect() - + this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => { if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)) { this.toastService.show({title: $localize`Document added`, delay: 10000, content: $localize`Document ${status.filename} was added to paperless.`, actionName: $localize`Open document`, action: () => { diff --git a/src-ui/src/app/components/common/confirm-dialog/confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/confirm-dialog.component.ts index 835499ba5..ca8602b5a 100644 --- a/src-ui/src/app/components/common/confirm-dialog/confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/confirm-dialog.component.ts @@ -30,7 +30,7 @@ export class ConfirmDialogComponent implements OnInit { @Input() buttonsEnabled = true - + confirmButtonEnabled = true seconds = 0 diff --git a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html index dc329f964..e034e5a57 100644 --- a/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html +++ b/src-ui/src/app/components/common/date-dropdown/date-dropdown.component.html @@ -55,7 +55,7 @@
- + diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts index 3481b1227..6c526faee 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts @@ -83,7 +83,7 @@ export class FilterableDropdownSelectionModel { if (fireEvent) { this.changed.next(this) } - + } private getNonTemporary(id: number) { diff --git a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html index 404ea9d4d..8f74297d3 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html @@ -10,7 +10,7 @@ - +
diff --git a/src-ui/src/app/components/common/input/abstract-input.ts b/src-ui/src/app/components/common/input/abstract-input.ts index 5821b6682..5165edc3b 100644 --- a/src-ui/src/app/components/common/input/abstract-input.ts +++ b/src-ui/src/app/components/common/input/abstract-input.ts @@ -11,7 +11,7 @@ export class AbstractInputComponent implements OnInit, ControlValueAccessor { constructor() { } onChange = (newValue: T) => {}; - + onTouched = () => {}; writeValue(newValue: any): void { diff --git a/src-ui/src/app/components/common/input/check/check.component.html b/src-ui/src/app/components/common/input/check/check.component.html index 88bde649e..27dbd6015 100644 --- a/src-ui/src/app/components/common/input/check/check.component.html +++ b/src-ui/src/app/components/common/input/check/check.component.html @@ -2,4 +2,4 @@ {{hint}} -
\ No newline at end of file + diff --git a/src-ui/src/app/components/common/input/check/check.component.ts b/src-ui/src/app/components/common/input/check/check.component.ts index de0b9a0d1..d452aad87 100644 --- a/src-ui/src/app/components/common/input/check/check.component.ts +++ b/src-ui/src/app/components/common/input/check/check.component.ts @@ -15,7 +15,7 @@ import { AbstractInputComponent } from '../abstract-input'; }) export class CheckComponent extends AbstractInputComponent { - constructor() { + constructor() { super() } diff --git a/src-ui/src/app/components/common/input/color/color.component.html b/src-ui/src/app/components/common/input/color/color.component.html index 778a3684e..94c34dc00 100644 --- a/src-ui/src/app/components/common/input/color/color.component.html +++ b/src-ui/src/app/components/common/input/color/color.component.html @@ -5,12 +5,12 @@
   
- +
- +
@@ -30,4 +30,4 @@
{{error}}
- \ No newline at end of file + diff --git a/src-ui/src/app/components/common/input/number/number.component.html b/src-ui/src/app/components/common/input/number/number.component.html index 7b4dcca54..821226b16 100644 --- a/src-ui/src/app/components/common/input/number/number.component.html +++ b/src-ui/src/app/components/common/input/number/number.component.html @@ -11,4 +11,4 @@ {{hint}} - \ No newline at end of file + diff --git a/src-ui/src/app/components/common/input/text/text.component.html b/src-ui/src/app/components/common/input/text/text.component.html index fe8607e61..0c15c22a2 100644 --- a/src-ui/src/app/components/common/input/text/text.component.html +++ b/src-ui/src/app/components/common/input/text/text.component.html @@ -5,4 +5,4 @@
{{error}}
- \ No newline at end of file + diff --git a/src-ui/src/app/components/common/select-dialog/select-dialog.component.html b/src-ui/src/app/components/common/select-dialog/select-dialog.component.html index 2184013a3..87758c6cf 100644 --- a/src-ui/src/app/components/common/select-dialog/select-dialog.component.html +++ b/src-ui/src/app/components/common/select-dialog/select-dialog.component.html @@ -12,4 +12,4 @@ \ No newline at end of file + diff --git a/src-ui/src/app/components/common/tag/tag.component.html b/src-ui/src/app/components/common/tag/tag.component.html index fc8b9ef65..bcf3542e9 100644 --- a/src-ui/src/app/components/common/tag/tag.component.html +++ b/src-ui/src/app/components/common/tag/tag.component.html @@ -1,2 +1,2 @@ {{tag.name}} -{{tag.name}} \ No newline at end of file +{{tag.name}} diff --git a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts index 5207d56ab..f1488a66f 100644 --- a/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.ts @@ -23,7 +23,7 @@ export class StatisticsWidgetComponent implements OnInit, OnDestroy { statistics: Statistics = {} subscription: Subscription - + private getStatistics(): Observable { return this.http.get(`${environment.apiBaseUrl}statistics/`) } diff --git a/src-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html b/src-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html index 6320189cc..17c7ffe1e 100644 --- a/src-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html @@ -13,4 +13,4 @@

Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.

- \ No newline at end of file + diff --git a/src-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html b/src-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html index 1d7d2d906..1cd440306 100644 --- a/src-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html +++ b/src-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html @@ -4,9 +4,9 @@
{{title}}
- +
- \ No newline at end of file + diff --git a/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.html b/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.html index ac42860c9..b0f323de0 100644 --- a/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.html +++ b/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.html @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.scss b/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.scss index b946da146..8f851848b 100644 --- a/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.scss +++ b/src-ui/src/app/components/document-detail/metadata-collapse/metadata-collapse.component.scss @@ -1,3 +1,3 @@ .metadata-column { overflow-wrap: anywhere; -} \ No newline at end of file +} diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss index 1074283e9..fb7c14b26 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.scss @@ -64,4 +64,4 @@ span ::ng-deep .match { color: black; background-color: rgb(255, 211, 66); -} \ No newline at end of file +} diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html index c61f36c3f..7267d4d7b 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html @@ -3,7 +3,7 @@
- + diff --git a/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts b/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts index a94cbf909..b2fe8a929 100644 --- a/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts +++ b/src-ui/src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts @@ -32,6 +32,6 @@ export class CorrespondentEditDialogComponent extends EditDialogComponent { - constructor(service: DocumentTypeService, activeModal: NgbActiveModal, toastService: ToastService) { + constructor(service: DocumentTypeService, activeModal: NgbActiveModal, toastService: ToastService) { super(service, activeModal, toastService) } diff --git a/src-ui/src/app/components/manage/document-type-list/document-type-list.component.html b/src-ui/src/app/components/manage/document-type-list/document-type-list.component.html index 613cc4fd4..4d9bedcb1 100644 --- a/src-ui/src/app/components/manage/document-type-list/document-type-list.component.html +++ b/src-ui/src/app/components/manage/document-type-list/document-type-list.component.html @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.html b/src-ui/src/app/components/manage/tag-list/tag-list.component.html index bb4acdd7b..7eae1e21e 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.html +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.html @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/src-ui/src/app/components/not-found/not-found.component.html b/src-ui/src/app/components/not-found/not-found.component.html index 4d7e0f7e0..913132d1b 100644 --- a/src-ui/src/app/components/not-found/not-found.component.html +++ b/src-ui/src/app/components/not-found/not-found.component.html @@ -5,4 +5,4 @@

404 Not Found

-
\ No newline at end of file +
diff --git a/src-ui/src/app/data/filter-rule.ts b/src-ui/src/app/data/filter-rule.ts index 5a0ed7368..c8b790e21 100644 --- a/src-ui/src/app/data/filter-rule.ts +++ b/src-ui/src/app/data/filter-rule.ts @@ -6,7 +6,7 @@ export function cloneFilterRules(filterRules: FilterRule[]): FilterRule[] { for (let rule of filterRules) { newRules.push({rule_type: rule.rule_type, value: rule.value}) } - return newRules + return newRules } else { return null } @@ -19,4 +19,4 @@ export function isFullTextFilterRule(filterRules: FilterRule[]): boolean { export interface FilterRule { rule_type: number value: string -} \ No newline at end of file +} diff --git a/src-ui/src/app/data/paperless-correspondent.ts b/src-ui/src/app/data/paperless-correspondent.ts index f2ff18525..3f5bb5719 100644 --- a/src-ui/src/app/data/paperless-correspondent.ts +++ b/src-ui/src/app/data/paperless-correspondent.ts @@ -1,7 +1,7 @@ import { MatchingModel } from './matching-model'; export interface PaperlessCorrespondent extends MatchingModel { - + last_correspondence?: Date } diff --git a/src-ui/src/app/data/paperless-document-metadata.ts b/src-ui/src/app/data/paperless-document-metadata.ts index 12f0a78d8..a1063adf9 100644 --- a/src-ui/src/app/data/paperless-document-metadata.ts +++ b/src-ui/src/app/data/paperless-document-metadata.ts @@ -1,5 +1,5 @@ export interface PaperlessDocumentMetadata { - + original_checksum?: string archived_checksum?: string @@ -10,4 +10,4 @@ export interface PaperlessDocumentMetadata { has_archive_version?: boolean -} \ No newline at end of file +} diff --git a/src-ui/src/app/data/paperless-document-suggestions.ts b/src-ui/src/app/data/paperless-document-suggestions.ts index 71459eff2..cc68b2b27 100644 --- a/src-ui/src/app/data/paperless-document-suggestions.ts +++ b/src-ui/src/app/data/paperless-document-suggestions.ts @@ -6,4 +6,4 @@ export interface PaperlessDocumentSuggestions { document_types?: number[] -} \ No newline at end of file +} diff --git a/src-ui/src/app/data/paperless-saved-view.ts b/src-ui/src/app/data/paperless-saved-view.ts index fbc2f5d5e..8a4cd58b7 100644 --- a/src-ui/src/app/data/paperless-saved-view.ts +++ b/src-ui/src/app/data/paperless-saved-view.ts @@ -15,4 +15,4 @@ export interface PaperlessSavedView extends ObjectWithId { filter_rules: FilterRule[] -} \ No newline at end of file +} diff --git a/src-ui/src/app/data/results.ts b/src-ui/src/app/data/results.ts index 83e9c583c..839c79ed0 100644 --- a/src-ui/src/app/data/results.ts +++ b/src-ui/src/app/data/results.ts @@ -3,5 +3,5 @@ export interface Results { count: number results: T[] - + } diff --git a/src-ui/src/app/data/websocket-consumer-status-message.ts b/src-ui/src/app/data/websocket-consumer-status-message.ts index 49117b101..c20882067 100644 --- a/src-ui/src/app/data/websocket-consumer-status-message.ts +++ b/src-ui/src/app/data/websocket-consumer-status-message.ts @@ -8,4 +8,4 @@ export interface WebsocketConsumerStatusMessage { message?: string document_id: number -} \ No newline at end of file +} diff --git a/src-ui/src/app/interceptors/api-version.interceptor.ts b/src-ui/src/app/interceptors/api-version.interceptor.ts index 95aa6ef16..4df2efba6 100644 --- a/src-ui/src/app/interceptors/api-version.interceptor.ts +++ b/src-ui/src/app/interceptors/api-version.interceptor.ts @@ -19,7 +19,7 @@ export class ApiVersionInterceptor implements HttpInterceptor { 'Accept': `application/json; version=${environment.apiVersion}` } }) - + return next.handle(request); } } diff --git a/src-ui/src/app/interceptors/csrf.interceptor.ts b/src-ui/src/app/interceptors/csrf.interceptor.ts index 2c654aa36..1817e3a66 100644 --- a/src-ui/src/app/interceptors/csrf.interceptor.ts +++ b/src-ui/src/app/interceptors/csrf.interceptor.ts @@ -20,7 +20,7 @@ export class CsrfInterceptor implements HttpInterceptor { let prefix = "" if (this.meta.getTag('name=cookie_prefix')) { prefix = this.meta.getTag('name=cookie_prefix').content - } + } let csrfToken = this.cookieService.get(`${prefix?prefix:''}csrftoken`) if (csrfToken) { request = request.clone({ diff --git a/src-ui/src/app/pipes/file-size.pipe.ts b/src-ui/src/app/pipes/file-size.pipe.ts index 7d742c876..4ac1e4d61 100644 --- a/src-ui/src/app/pipes/file-size.pipe.ts +++ b/src-ui/src/app/pipes/file-size.pipe.ts @@ -1,6 +1,6 @@ /** * https://gist.github.com/JonCatmull/ecdf9441aaa37336d9ae2c7f9cb7289a - * + * * @license * Copyright (c) 2019 Jonathan Catmull. * diff --git a/src-ui/src/app/pipes/safe.pipe.ts b/src-ui/src/app/pipes/safe.pipe.ts index 6614964a9..3aa987c08 100644 --- a/src-ui/src/app/pipes/safe.pipe.ts +++ b/src-ui/src/app/pipes/safe.pipe.ts @@ -16,4 +16,4 @@ export class SafePipe implements PipeTransform { } } -} \ No newline at end of file +} diff --git a/src-ui/src/app/services/open-documents.service.ts b/src-ui/src/app/services/open-documents.service.ts index 9e5746c10..01f168aeb 100644 --- a/src-ui/src/app/services/open-documents.service.ts +++ b/src-ui/src/app/services/open-documents.service.ts @@ -10,7 +10,7 @@ export class OpenDocumentsService { private MAX_OPEN_DOCUMENTS = 5 - constructor(private documentService: DocumentService) { + constructor(private documentService: DocumentService) { if (sessionStorage.getItem(OPEN_DOCUMENT_SERVICE.DOCUMENTS)) { try { this.openDocuments = JSON.parse(sessionStorage.getItem(OPEN_DOCUMENT_SERVICE.DOCUMENTS)) diff --git a/src-ui/src/app/services/rest/saved-view.service.ts b/src-ui/src/app/services/rest/saved-view.service.ts index 9a81e01e5..c765de7f4 100644 --- a/src-ui/src/app/services/rest/saved-view.service.ts +++ b/src-ui/src/app/services/rest/saved-view.service.ts @@ -44,7 +44,7 @@ export class SavedViewService extends AbstractPaperlessService this.reload()) ) } - + patchMany(objects: PaperlessSavedView[]): Observable { return combineLatest(objects.map(o => super.patch(o))).pipe( tap(() => this.reload()) diff --git a/src-ui/src/app/services/rest/search.service.ts b/src-ui/src/app/services/rest/search.service.ts index f10c53485..c14a5c58f 100644 --- a/src-ui/src/app/services/rest/search.service.ts +++ b/src-ui/src/app/services/rest/search.service.ts @@ -10,10 +10,10 @@ import { DocumentService } from './document.service'; providedIn: 'root' }) export class SearchService { - + constructor(private http: HttpClient) { } autocomplete(term: string): Observable { return this.http.get(`${environment.apiBaseUrl}search/autocomplete/`, {params: new HttpParams().set('term', term)}) } -} +} diff --git a/src-ui/src/app/utils/color.ts b/src-ui/src/app/utils/color.ts index 549e900b7..d320cc2b9 100644 --- a/src-ui/src/app/utils/color.ts +++ b/src-ui/src/app/utils/color.ts @@ -6,7 +6,7 @@ function componentToHex(c) { /** * https://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c - * + * * Converts an HSL color value to RGB. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. * Assumes h, s, and l are contained in the set [0, 1] and @@ -45,4 +45,4 @@ function hslToRgb(h, s, l){ export function randomColor() { let rgb = hslToRgb(Math.random(), 0.6, Math.random() * 0.4 + 0.4) return `#${componentToHex(rgb[0])}${componentToHex(rgb[1])}${componentToHex(rgb[2])}` -} \ No newline at end of file +} diff --git a/src-ui/src/app/utils/ngb-date-parser-formatter.ts b/src-ui/src/app/utils/ngb-date-parser-formatter.ts index 7d819a6bf..07d31a525 100644 --- a/src-ui/src/app/utils/ngb-date-parser-formatter.ts +++ b/src-ui/src/app/utils/ngb-date-parser-formatter.ts @@ -56,4 +56,4 @@ export class LocalizedDateParserFormatter extends NgbDateParserFormatter { return null } } -} \ No newline at end of file +} diff --git a/src/documents/static/bootstrap.min.css b/src/documents/static/bootstrap.min.css index 286cde4c0..6bcea10ad 100644 --- a/src/documents/static/bootstrap.min.css +++ b/src/documents/static/bootstrap.min.css @@ -4,4 +4,4 @@ * Copyright 2011-2020 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file +/*# sourceMappingURL=bootstrap.min.css.map */ From 4a42c3e4037ef55bf14fb087b23184a1cd7fd47c Mon Sep 17 00:00:00 2001 From: Michael Lynch Date: Sun, 13 Jun 2021 10:51:06 -0400 Subject: [PATCH 828/898] Add checkout step to whitespace CI job --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93194f43d..69fac022e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,6 +84,9 @@ jobs: whitespace: runs-on: ubuntu-20.04 steps: + - + name: Checkout + uses: actions/checkout@v2 - name: Ensure there are no trailing spaces run: | From 1ca420a25f3649ce24feb39a063a4f8a9d06699e Mon Sep 17 00:00:00 2001 From: Michael Lynch Date: Sun, 13 Jun 2021 10:57:58 -0400 Subject: [PATCH 829/898] Fix trailing newlines in configuration.rst --- docs/configuration.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 6622735c2..62880208f 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -621,14 +621,14 @@ PAPERLESS_IGNORE_DATES= Example: "2020-12-02,22.04.1999" Defaults to an empty string to not ignore any dates. - + PAPERLESS_DATE_ORDER= Paperless will try to determine the document creation date from its contents. Specify the date format Paperless should expect to see within your documents. - - This option defaults to DMY which translates to day first, month second, and year + + This option defaults to DMY which translates to day first, month second, and year last order. Characters D, M, or Y can be shuffled to meet the required order. - + Binaries From 9e5d732ca2c3b5ea07f4c03b2a9aa2423fb3b7e9 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 19:17:29 +0200 Subject: [PATCH 830/898] changelog, versions --- docs/changelog.rst | 13 +++++++++++++ src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index b98c4c83d..024de78b3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,19 @@ Changelog ********* +paperless-ng 1.4.5 +################## + +This is primarily a maintenance release. + +* Updated Python and Angular dependencies. +* Changed the algorithm that changes permissions during startup. This is still fast, + and will hopefully cause less issues. +* Fixed an issue that would sometimes cause paperless to write an incomplete + classification model file to disk. +* Fixed an issue with the OCRmyPDF parser that would always try to extract text + with PDFminer even from non-PDF files. + paperless-ng 1.4.4 ################## diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 05eee6dd6..409498958 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + "api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.4.4", + version: "1.4.5", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:"), webSocketBaseUrl: base_url.pathname + "ws/", diff --git a/src/paperless/version.py b/src/paperless/version.py index 00a47af2d..a19fb0d9b 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 4, 4) +__version__ = (1, 4, 5) From 48defe2cc7e7e40f34b5f73b25a2e745d4b7fcfb Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 21:21:56 +0200 Subject: [PATCH 831/898] update dependencies --- src-ui/package-lock.json | 67 ++++++++++++++++++++-------------------- src-ui/package.json | 6 ++-- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 27fdfe0b8..da2df3597 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -30,10 +30,10 @@ "rxjs": "~6.6.0", "tslib": "^2.0.0", "uuid": "^8.3.1", - "zone.js": "~0.10.2" + "zone.js": "~0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.1102.14", + "@angular-devkit/build-angular": "~0.1102.13", "@angular/cli": "~11.2.14", "@angular/compiler-cli": "~11.2.14", "@types/jasmine": "~3.6.0", @@ -50,7 +50,7 @@ "protractor": "~7.0.0", "ts-node": "~8.3.0", "tslint": "~6.1.0", - "typescript": "~4.0.2" + "typescript": "~4.1.5" } }, "node_modules/@angular-devkit/architect": { @@ -266,19 +266,6 @@ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true }, - "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/@angular-devkit/build-webpack": { "version": "0.1102.14", "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.14.tgz", @@ -4580,6 +4567,12 @@ "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", "dev": true }, + "node_modules/codelyzer/node_modules/zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true + }, "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -15162,9 +15155,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17132,9 +17125,12 @@ } }, "node_modules/zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", + "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", + "dependencies": { + "tslib": "^2.0.0" + } } }, "dependencies": { @@ -17288,12 +17284,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true - }, - "typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", - "dev": true } } }, @@ -20578,6 +20568,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", "dev": true + }, + "zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true } } }, @@ -28917,9 +28913,9 @@ "dev": true }, "typescript": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz", - "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==" + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==" }, "ua-parser-js": { "version": "0.7.28", @@ -30512,9 +30508,12 @@ "dev": true }, "zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", + "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", + "requires": { + "tslib": "^2.0.0" + } } } } diff --git a/src-ui/package.json b/src-ui/package.json index 5b32c1a2e..89880c418 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -33,10 +33,10 @@ "rxjs": "~6.6.0", "tslib": "^2.0.0", "uuid": "^8.3.1", - "zone.js": "~0.10.2" + "zone.js": "~0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.1102.14", + "@angular-devkit/build-angular": "~0.1102.13", "@angular/cli": "~11.2.14", "@angular/compiler-cli": "~11.2.14", "@types/jasmine": "~3.6.0", @@ -53,6 +53,6 @@ "protractor": "~7.0.0", "ts-node": "~8.3.0", "tslint": "~6.1.0", - "typescript": "~4.0.2" + "typescript": "~4.1.5" } } From e748a504f6b0ba961ed5ff04b85891c7ca2e20f4 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 13 Jun 2021 21:30:20 +0200 Subject: [PATCH 832/898] fix wording --- docs/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 024de78b3..03085da25 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,7 +8,7 @@ Changelog paperless-ng 1.4.5 ################## -This is primarily a maintenance release. +This is a maintenance release. * Updated Python and Angular dependencies. * Changed the algorithm that changes permissions during startup. This is still fast, From 1b8099fe1e6af519c6db217c87804eee2dbcf2de Mon Sep 17 00:00:00 2001 From: ytzelf Date: Mon, 14 Jun 2021 18:11:06 +0200 Subject: [PATCH 833/898] Update scanners.rst Added ADS-1100w which has FTP (and only FTP) capabilities but is quite cheap --- docs/scanners.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/scanners.rst b/docs/scanners.rst index 752063bb4..742dffc05 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -24,6 +24,8 @@ Physical scanners +---------+----------------+-----+-----+-----+------+----------------+ | Brother | `ADS-1500W`_ | yes | no | yes | yes |`danielquinn`_ | +---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `ADS-1100W`_ | yes | no | no | no |`ytzelf`_ | ++---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-J6930DW`_ | yes | | | |`ayounggun`_ | +---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-L5850DW`_ | yes | | | yes |`holzhannes`_ | @@ -43,6 +45,7 @@ Physical scanners .. _ADS-1700W: https://www.brother-usa.com/products/ads1700w .. _ADS-1600W: https://www.brother-usa.com/products/ads1600w .. _ADS-1500W: https://www.brother.ca/en/p/ads1500w +.. _ADS-1100W: https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=ads1100w_eu_as_cn .. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW .. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw .. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn @@ -59,6 +62,7 @@ Physical scanners .. _Skylinar: https://github.com/Skylinar .. _jonaswinkler: https://github.com/jonaswinkler .. _holzhannes: https://github.com/holzhannes +.. _ytzelf: https://github.com/ytzelf Mobile phone software ===================== From b1ff2181ea9faed23929e0678861f46418760c08 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sat, 19 Jun 2021 23:20:13 +0200 Subject: [PATCH 834/898] New translations django.po (English, United Kingdom) [ci skip] --- src/locale/en_GB/LC_MESSAGES/django.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locale/en_GB/LC_MESSAGES/django.po b/src/locale/en_GB/LC_MESSAGES/django.po index 320a77455..c36d321d1 100644 --- a/src/locale/en_GB/LC_MESSAGES/django.po +++ b/src/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-06-19 21:20\n" "Last-Translator: \n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" @@ -470,11 +470,11 @@ msgstr "Paperless-ng administration" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Authentication" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Advanced settings" #: paperless_mail/admin.py:37 msgid "Filter" From 3a111a5d36b42c796c4f786caf1867a296868441 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Mon, 5 Jul 2021 13:17:50 +0200 Subject: [PATCH 835/898] New translations django.po (German) [ci skip] --- src/locale/de_DE/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locale/de_DE/LC_MESSAGES/django.po b/src/locale/de_DE/LC_MESSAGES/django.po index 104ad4ef4..4a41c3c05 100644 --- a/src/locale/de_DE/LC_MESSAGES/django.po +++ b/src/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 11:15\n" +"PO-Revision-Date: 2021-07-05 11:17\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -35,7 +35,7 @@ msgstr "Exakte Übereinstimmung" #: documents/models.py:35 msgid "Regular expression" -msgstr "Regulärer Ausdruck" +msgstr "Regular expression / Reguläre Ausdrücke" #: documents/models.py:36 msgid "Fuzzy word" From 66b951196daf4274a1b34f1138b0b7acb9f8b9c4 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 11 Jul 2021 09:21:44 +0200 Subject: [PATCH 836/898] New translations django.po (Spanish) [ci skip] --- src/locale/es_ES/LC_MESSAGES/django.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index 65bf88bfb..e084cb785 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-07-11 07:21\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -100,11 +100,11 @@ msgstr "tipos de documento" #: documents/models.py:110 msgid "Unencrypted" -msgstr "Sin encriptar" +msgstr "Sin cifrar" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "Encriptado con GNU Privacy Guard" +msgstr "Cifrado con GNU Privacy Guard" #: documents/models.py:124 msgid "title" From faf97baf85d0712e6c727ff443926e8f5d5f46c6 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 11 Jul 2021 10:29:20 +0200 Subject: [PATCH 837/898] New translations django.po (Spanish) [ci skip] --- src/locale/es_ES/LC_MESSAGES/django.po | 38 +++++++++++++------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index e084cb785..c91b6e223 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-11 07:21\n" +"PO-Revision-Date: 2021-07-11 08:29\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -64,11 +64,11 @@ msgstr "es insensible" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "Tipo de documento" +msgstr "interlocutor" #: documents/models.py:75 msgid "correspondents" -msgstr "Tipos de documento" +msgstr "interlocutores" #: documents/models.py:81 msgid "color" @@ -268,7 +268,7 @@ msgstr "ASN es" #: documents/models.py:376 msgid "correspondent is" -msgstr "tipo de documento es" +msgstr "interlocutor es" #: documents/models.py:377 msgid "document type is" @@ -336,7 +336,7 @@ msgstr "el título o cuerpo contiene" #: documents/models.py:393 msgid "fulltext query" -msgstr "" +msgstr "consulta de texto completo" #: documents/models.py:394 msgid "more like this" @@ -438,7 +438,7 @@ msgstr "Portugués (Brasil)" #: paperless/settings.py:309 msgid "Portuguese" -msgstr "" +msgstr "Portugués" #: paperless/settings.py:310 msgid "Italian" @@ -458,11 +458,11 @@ msgstr "Español" #: paperless/settings.py:314 msgid "Polish" -msgstr "" +msgstr "Polaco" #: paperless/settings.py:315 msgid "Swedish" -msgstr "" +msgstr "Sueco" #: paperless/urls.py:120 msgid "Paperless-ng administration" @@ -470,11 +470,11 @@ msgstr "Paperless-ng Administración" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Autentificación" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Configuración avanzada" #: paperless_mail/admin.py:37 msgid "Filter" @@ -498,7 +498,7 @@ msgstr "Metadatos" #: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "Asignar metadatos a documentos consumidos por esta regla automáticamente. Si no asigna etiquetas, o ipos aquí, paperless procesará igualmente todas las reglas que haya definido." +msgstr "Asignar metadatos a documentos consumidos por esta regla automáticamente. Si no asigna etiquetas, tipos o interlocutores aquí, paperless procesará igualmente todas las reglas que haya definido." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -550,11 +550,11 @@ msgstr "contraseña" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "conjunto de caracteres" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "El conjunto de caracteres a usar al comunicarse con el servidor de correo, como 'UTF-8' o 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -598,7 +598,7 @@ msgstr "Usar nombre del fichero adjunto como título" #: paperless_mail/models.py:107 msgid "Do not assign a correspondent" -msgstr "No asignar un tipo de documento" +msgstr "No asignar interlocutor" #: paperless_mail/models.py:109 msgid "Use mail address" @@ -610,7 +610,7 @@ msgstr "Usar nombre (o dirección de correo si no está disponible)" #: paperless_mail/models.py:113 msgid "Use correspondent selected below" -msgstr "Usar el tipo seleccionado debajo" +msgstr "Usar el interlocutor seleccionado a continuación" #: paperless_mail/models.py:121 msgid "order" @@ -626,7 +626,7 @@ msgstr "carpeta" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Las subcarpetas deben estar separadas por puntos." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "parámetro de acción" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Parámetro adicional para la acción seleccionada arriba. Ej. la carpeta de destino de la acción de mover a carpeta. Las subcarpetas deben estar separadas por puntos." #: paperless_mail/models.py:184 msgid "assign title from" @@ -690,9 +690,9 @@ msgstr "asignar este tipo de documento" #: paperless_mail/models.py:206 msgid "assign correspondent from" -msgstr "Asignar tipo de documento desde" +msgstr "asignar interlocutor desde" #: paperless_mail/models.py:216 msgid "assign this correspondent" -msgstr "asignar este tipo de documento" +msgstr "asignar este interlocutor" From c0a9c0f91e75ff89fe3edb0f58d2db1d85ddc937 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 11 Jul 2021 10:29:21 +0200 Subject: [PATCH 838/898] New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index 990e5e024..bf1188282 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -176,7 +176,7 @@ src/app/components/document-list/document-list.component.html 117 - Tipo de documento + Correspondencia Title @@ -208,7 +208,7 @@ src/app/components/document-list/document-list.component.html 141 - Aggregado + Añadido Confirm delete @@ -1233,7 +1233,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 91 - Advanced search + Búsqueda avanzada More like @@ -1241,7 +1241,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 94 - More like + Más parecido Filter tags @@ -1386,7 +1386,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 43 - Created: + Creado: Added: @@ -1394,7 +1394,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 44 - Added: + Añadido: Modified: @@ -1402,7 +1402,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 45 - Modified: + Modificado: Error executing bulk operation: @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Añadir elemento Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Añadir etiqueta Show all @@ -1872,7 +1872,7 @@ src/app/components/document-asn/document-asn.component.html 1 - Searching document with asn + Buscando documento con NSA Yes @@ -1944,7 +1944,7 @@ src/app/services/settings.service.ts 95 - Portuguese + Portugués Portuguese (Brazil) @@ -1992,7 +1992,7 @@ src/app/services/settings.service.ts 101 - Polish + Polaco Swedish @@ -2000,7 +2000,7 @@ src/app/services/settings.service.ts 102 - Swedish + Sueco ISO 8601 @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Puntuación de búsqueda Create new item From 1e80c901b981d508d703c8bf68a6efcc3fdae588 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 11 Jul 2021 12:20:36 +0200 Subject: [PATCH 839/898] New translations messages.xlf (Spanish) [ci skip] --- src-ui/src/locale/messages.es_ES.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index bf1188282..e740d54c1 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -1201,7 +1201,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 61 - ASN: + NSA: Title From 4040dcc1af1859eb52763af4d9b06a55e706dc51 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 13 Jul 2021 22:18:14 +0200 Subject: [PATCH 840/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 698 +++++++++++++++++++++++++ 1 file changed, 698 insertions(+) create mode 100644 src/locale/lb_LU/LC_MESSAGES/django.po diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po new file mode 100644 index 000000000..dfc35b585 --- /dev/null +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -0,0 +1,698 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-07-13 20:18\n" +"Last-Translator: \n" +"Language-Team: Luxembourgish\n" +"Language: lb_LU\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: lb\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:117 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:373 +msgid "title contains" +msgstr "" + +#: documents/models.py:374 +msgid "content contains" +msgstr "" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:377 +msgid "document type is" +msgstr "" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:379 +msgid "has tag" +msgstr "" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "" + +#: documents/models.py:381 +msgid "created before" +msgstr "" + +#: documents/models.py:382 +msgid "created after" +msgstr "" + +#: documents/models.py:383 +msgid "created year is" +msgstr "" + +#: documents/models.py:384 +msgid "created month is" +msgstr "" + +#: documents/models.py:385 +msgid "created day is" +msgstr "" + +#: documents/models.py:386 +msgid "added before" +msgstr "" + +#: documents/models.py:387 +msgid "added after" +msgstr "" + +#: documents/models.py:388 +msgid "modified before" +msgstr "" + +#: documents/models.py:389 +msgid "modified after" +msgstr "" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 +msgid "rule type" +msgstr "" + +#: documents/models.py:409 +msgid "value" +msgstr "" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:22 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:14 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:45 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:46 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:15 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:47 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:50 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:53 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:59 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:303 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:304 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:305 +msgid "German" +msgstr "" + +#: paperless/settings.py:306 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:307 +msgid "French" +msgstr "" + +#: paperless/settings.py:308 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:309 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:310 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:311 +msgid "Romanian" +msgstr "" + +#: paperless/settings.py:312 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:313 +msgid "Spanish" +msgstr "" + +#: paperless/settings.py:314 +msgid "Polish" +msgstr "" + +#: paperless/settings.py:315 +msgid "Swedish" +msgstr "" + +#: paperless/urls.py:120 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:49 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:51 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:58 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:60 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:86 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:87 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:96 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:97 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:107 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:109 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:111 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:121 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:132 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:141 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:144 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:158 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:161 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:164 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:169 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:175 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:184 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:194 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:202 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:206 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:216 +msgid "assign this correspondent" +msgstr "" + From 4bfa519aa2178c6e9c151258451fefc21c440454 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 13 Jul 2021 22:18:15 +0200 Subject: [PATCH 841/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 2340 ++++++++++++++++++++++++++ 1 file changed, 2340 insertions(+) create mode 100644 src-ui/src/locale/messages.lb_LU.xlf diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf new file mode 100644 index 000000000..4bfc3ee8e --- /dev/null +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -0,0 +1,2340 @@ + + + + + + Document added + + src/app/app.component.ts + 51 + + Document added + + + Document was added to paperless. + + src/app/app.component.ts + 51 + + Document was added to paperless. + + + Open document + + src/app/app.component.ts + 51 + + Open document + + + Could not add : + + src/app/app.component.ts + 59 + + Could not add : + + + New document detected + + src/app/app.component.ts + 65 + + New document detected + + + Document is being processed by paperless. + + src/app/app.component.ts + 65 + + Document is being processed by paperless. + + + Documents + + src/app/components/document-list/document-list.component.ts + 51 + + Documents + + + View "" saved successfully. + + src/app/components/document-list/document-list.component.ts + 116 + + View "" saved successfully. + + + View "" created successfully. + + src/app/components/document-list/document-list.component.ts + 138 + + View "" created successfully. + + + Select + + src/app/components/document-list/document-list.component.html + 7 + + Select + + + Select none + + src/app/components/document-list/document-list.component.html + 10 + + Select none + + + Select page + + src/app/components/document-list/document-list.component.html + 11 + + Select page + + + Select all + + src/app/components/document-list/document-list.component.html + 12 + + Select all + + + Sort + + src/app/components/document-list/document-list.component.html + 39 + + Sort + + + Views + + src/app/components/document-list/document-list.component.html + 64 + + Views + + + Save as... + + src/app/components/document-list/document-list.component.html + 72 + + Save as... + + + Save "" + + src/app/components/document-list/document-list.component.html + 71 + + Save "" + + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + src/app/components/document-list/document-list.component.html + 85 + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + src/app/components/document-list/document-list.component.html + 86 + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + + (filtered) + + src/app/components/document-list/document-list.component.html + 86 + + (filtered) + + + ASN + + src/app/components/document-list/document-list.component.html + 111 + + ASN + + + Correspondent + + src/app/components/document-list/document-list.component.html + 117 + + Correspondent + + + Title + + src/app/components/document-list/document-list.component.html + 123 + + Title + + + Document type + + src/app/components/document-list/document-list.component.html + 129 + + Document type + + + Created + + src/app/components/document-list/document-list.component.html + 135 + + Created + + + Added + + src/app/components/document-list/document-list.component.html + 141 + + Added + + + Confirm delete + + src/app/components/document-detail/document-detail.component.ts + 206 + + Confirm delete + + + Do you really want to delete document ""? + + src/app/components/document-detail/document-detail.component.ts + 207 + + Do you really want to delete document ""? + + + The files for this document will be deleted permanently. This operation cannot be undone. + + src/app/components/document-detail/document-detail.component.ts + 208 + + The files for this document will be deleted permanently. This operation cannot be undone. + + + Delete document + + src/app/components/document-detail/document-detail.component.ts + 210 + + Delete document + + + Error deleting document: + + src/app/components/document-detail/document-detail.component.ts + 217 + + Error deleting document: + + + Delete + + src/app/components/document-detail/document-detail.component.html + 15 + + Delete + + + Download + + src/app/components/document-detail/document-detail.component.html + 23 + + Download + + + More like this + + src/app/components/document-detail/document-detail.component.html + 38 + + More like this + + + Close + + src/app/components/document-detail/document-detail.component.html + 44 + + Close + + + Details + + src/app/components/document-detail/document-detail.component.html + 56 + + Details + + + Content + + src/app/components/document-detail/document-detail.component.html + 72 + + Content + + + Metadata + + src/app/components/document-detail/document-detail.component.html + 81 + + Metadata + + + Discard + + src/app/components/document-detail/document-detail.component.html + 130 + + Discard + + + Save + + src/app/components/document-detail/document-detail.component.html + 132 + + Save + + + Page + + src/app/components/document-detail/document-detail.component.html + 4 + + Page + + + of + + src/app/components/document-detail/document-detail.component.html + 8 + + of + + + Download original + + src/app/components/document-detail/document-detail.component.html + 29 + + Download original + + + Archive serial number + + src/app/components/document-detail/document-detail.component.html + 60 + + Archive serial number + + + Date created + + src/app/components/document-detail/document-detail.component.html + 61 + + Date created + + + Date modified + + src/app/components/document-detail/document-detail.component.html + 87 + + Date modified + + + Date added + + src/app/components/document-detail/document-detail.component.html + 91 + + Date added + + + Media filename + + src/app/components/document-detail/document-detail.component.html + 95 + + Media filename + + + Original MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 99 + + Original MD5 checksum + + + Original file size + + src/app/components/document-detail/document-detail.component.html + 103 + + Original file size + + + Original mime type + + src/app/components/document-detail/document-detail.component.html + 107 + + Original mime type + + + Archive MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 111 + + Archive MD5 checksum + + + Archive file size + + src/app/components/document-detail/document-detail.component.html + 115 + + Archive file size + + + Original document metadata + + src/app/components/document-detail/document-detail.component.html + 121 + + Original document metadata + + + Archived document metadata + + src/app/components/document-detail/document-detail.component.html + 122 + + Archived document metadata + + + Save & next + + src/app/components/document-detail/document-detail.component.html + 131 + + Save & next + + + Hello , welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 33 + + Hello , welcome to Paperless-ng! + + + Welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 35 + + Welcome to Paperless-ng! + + + Dashboard + + src/app/components/dashboard/dashboard.component.html + 1 + + Dashboard + + + Do you really want to delete the tag ""? + + src/app/components/manage/tag-list/tag-list.component.ts + 26 + + Do you really want to delete the tag ""? + + + Tags + + src/app/components/manage/tag-list/tag-list.component.html + 1 + + Tags + + + Create + + src/app/components/manage/tag-list/tag-list.component.html + 2 + + Create + + + Filter by: + + src/app/components/manage/tag-list/tag-list.component.html + 8 + + Filter by: + + + Name + + src/app/components/manage/tag-list/tag-list.component.html + 9 + + Name + + + Color + + src/app/components/manage/tag-list/tag-list.component.html + 20 + + Color + + + Matching + + src/app/components/manage/tag-list/tag-list.component.html + 21 + + Matching + + + Document count + + src/app/components/manage/tag-list/tag-list.component.html + 22 + + Document count + + + Actions + + src/app/components/manage/tag-list/tag-list.component.html + 23 + + Actions + + + Documents + + src/app/components/manage/tag-list/tag-list.component.html + 38 + + Documents + + + Edit + + src/app/components/manage/tag-list/tag-list.component.html + 43 + + Edit + + + Do you really want to delete the document type ""? + + src/app/components/manage/document-type-list/document-type-list.component.ts + 26 + + Do you really want to delete the document type ""? + + + Document types + + src/app/components/manage/document-type-list/document-type-list.component.html + 1 + + Document types + + + Logs + + src/app/components/manage/logs/logs.component.html + 1 + + Logs + + + Saved view "" deleted. + + src/app/components/manage/settings/settings.component.ts + 68 + + Saved view "" deleted. + + + Settings saved successfully. + + src/app/components/manage/settings/settings.component.ts + 89 + + Settings saved successfully. + + + Use system language + + src/app/components/manage/settings/settings.component.ts + 94 + + Use system language + + + Use date format of display language + + src/app/components/manage/settings/settings.component.ts + 100 + + Use date format of display language + + + Error while storing settings on server: + + src/app/components/manage/settings/settings.component.ts + 117 + + Error while storing settings on server: + + + Settings + + src/app/components/manage/settings/settings.component.html + 1 + + Settings + + + General settings + + src/app/components/manage/settings/settings.component.html + 10 + + General settings + + + Notifications + + src/app/components/manage/settings/settings.component.html + 116 + + Notifications + + + Saved views + + src/app/components/manage/settings/settings.component.html + 134 + + Saved views + + + Appearance + + src/app/components/manage/settings/settings.component.html + 13 + + Appearance + + + Display language + + src/app/components/manage/settings/settings.component.html + 17 + + Display language + + + You need to reload the page after applying a new language. + + src/app/components/manage/settings/settings.component.html + 25 + + You need to reload the page after applying a new language. + + + Date display + + src/app/components/manage/settings/settings.component.html + 32 + + Date display + + + Date format + + src/app/components/manage/settings/settings.component.html + 45 + + Date format + + + Short: + + src/app/components/manage/settings/settings.component.html + 51 + + Short: + + + Medium: + + src/app/components/manage/settings/settings.component.html + 55 + + Medium: + + + Long: + + src/app/components/manage/settings/settings.component.html + 59 + + Long: + + + Items per page + + src/app/components/manage/settings/settings.component.html + 67 + + Items per page + + + Document editor + + src/app/components/manage/settings/settings.component.html + 83 + + Document editor + + + Use PDF viewer provided by the browser + + src/app/components/manage/settings/settings.component.html + 87 + + Use PDF viewer provided by the browser + + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + src/app/components/manage/settings/settings.component.html + 87 + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + + Dark mode + + src/app/components/manage/settings/settings.component.html + 94 + + Dark mode + + + Use system settings + + src/app/components/manage/settings/settings.component.html + 97 + + Use system settings + + + Enable dark mode + + src/app/components/manage/settings/settings.component.html + 98 + + Enable dark mode + + + Invert thumbnails in dark mode + + src/app/components/manage/settings/settings.component.html + 99 + + Invert thumbnails in dark mode + + + Bulk editing + + src/app/components/manage/settings/settings.component.html + 103 + + Bulk editing + + + Show confirmation dialogs + + src/app/components/manage/settings/settings.component.html + 107 + + Show confirmation dialogs + + + Deleting documents will always ask for confirmation. + + src/app/components/manage/settings/settings.component.html + 107 + + Deleting documents will always ask for confirmation. + + + Apply on close + + src/app/components/manage/settings/settings.component.html + 108 + + Apply on close + + + Document processing + + src/app/components/manage/settings/settings.component.html + 119 + + Document processing + + + Show notifications when new documents are detected + + src/app/components/manage/settings/settings.component.html + 123 + + Show notifications when new documents are detected + + + Show notifications when document processing completes successfully + + src/app/components/manage/settings/settings.component.html + 124 + + Show notifications when document processing completes successfully + + + Show notifications when document processing fails + + src/app/components/manage/settings/settings.component.html + 125 + + Show notifications when document processing fails + + + Suppress notifications on dashboard + + src/app/components/manage/settings/settings.component.html + 126 + + Suppress notifications on dashboard + + + This will suppress all messages about document processing status on the dashboard. + + src/app/components/manage/settings/settings.component.html + 126 + + This will suppress all messages about document processing status on the dashboard. + + + Appears on + + src/app/components/manage/settings/settings.component.html + 146 + + Appears on + + + Show on dashboard + + src/app/components/manage/settings/settings.component.html + 149 + + Show on dashboard + + + Show in sidebar + + src/app/components/manage/settings/settings.component.html + 153 + + Show in sidebar + + + No saved views defined. + + src/app/components/manage/settings/settings.component.html + 163 + + No saved views defined. + + + 404 Not Found + + src/app/components/not-found/not-found.component.html + 7 + + 404 Not Found + + + Do you really want to delete the correspondent ""? + + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 26 + + Do you really want to delete the correspondent ""? + + + Correspondents + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 1 + + Correspondents + + + Last correspondence + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 22 + + Last correspondence + + + Confirmation + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 17 + + Confirmation + + + Confirm + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 29 + + Confirm + + + Cancel + + src/app/components/common/confirm-dialog/confirm-dialog.component.html + 12 + + Cancel + + + Create new correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 21 + + Create new correspondent + + + Edit correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 25 + + Edit correspondent + + + Matching algorithm + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 10 + + Matching algorithm + + + Matching pattern + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 11 + + Matching pattern + + + Case insensitive + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 12 + + Case insensitive + + + Create new tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 22 + + Create new tag + + + Edit tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 26 + + Edit tag + + + Inbox tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tag + + + Inbox tags are automatically assigned to all consumed documents. + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tags are automatically assigned to all consumed documents. + + + Create new document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 21 + + Create new document type + + + Edit document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 25 + + Edit document type + + + Paperless-ng + + src/app/components/app-frame/app-frame.component.html + 11 + + app title + Paperless-ng + + + Search documents + + src/app/components/app-frame/app-frame.component.html + 15 + + Search documents + + + Logout + + src/app/components/app-frame/app-frame.component.html + 45 + + Logout + + + Manage + + src/app/components/app-frame/app-frame.component.html + 112 + + Manage + + + Admin + + src/app/components/app-frame/app-frame.component.html + 154 + + Admin + + + Info + + src/app/components/app-frame/app-frame.component.html + 160 + + Info + + + Documentation + + src/app/components/app-frame/app-frame.component.html + 167 + + Documentation + + + GitHub + + src/app/components/app-frame/app-frame.component.html + 175 + + GitHub + + + Suggest an idea + + src/app/components/app-frame/app-frame.component.html + 181 + + Suggest an idea + + + Logged in as + + src/app/components/app-frame/app-frame.component.html + 34 + + Logged in as + + + Open documents + + src/app/components/app-frame/app-frame.component.html + 87 + + Open documents + + + Close all + + src/app/components/app-frame/app-frame.component.html + 106 + + Close all + + + Correspondent: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 37 + + Correspondent: + + + Without correspondent + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 39 + + Without correspondent + + + Type: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 44 + + Type: + + + Without document type + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 46 + + Without document type + + + Tag: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 50 + + Tag: + + + Without any tag + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 54 + + Without any tag + + + Title: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 58 + + Title: + + + ASN: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 61 + + ASN: + + + Title + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 88 + + Title + + + Title & content + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 89 + + Title & content + + + ASN + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 90 + + ASN + + + Advanced search + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 91 + + Advanced search + + + More like + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 94 + + More like + + + Filter tags + + src/app/components/document-list/filter-editor/filter-editor.component.html + 19 + + Filter tags + + + Filter correspondents + + src/app/components/document-list/filter-editor/filter-editor.component.html + 27 + + Filter correspondents + + + Filter document types + + src/app/components/document-list/filter-editor/filter-editor.component.html + 34 + + Filter document types + + + Reset filters + + src/app/components/document-list/filter-editor/filter-editor.component.html + 57 + + Reset filters + + + Not assigned + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts + 166 + + Filter drop down element to filter for documents with no correspondent/type/tag assigned + Not assigned + + + Apply + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.html + 26 + + Apply + + + Last 7 days + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 34 + + Last 7 days + + + Last month + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 35 + + Last month + + + Last 3 months + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 36 + + Last 3 months + + + Last year + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 37 + + Last year + + + After + + src/app/components/common/date-dropdown/date-dropdown.component.html + 13 + + After + + + Before + + src/app/components/common/date-dropdown/date-dropdown.component.html + 38 + + Before + + + Clear + + src/app/components/common/date-dropdown/date-dropdown.component.html + 18 + + Clear + + + View + + src/app/components/document-list/document-card-large/document-card-large.component.html + 51 + + View + + + Filter by correspondent + + src/app/components/document-list/document-card-large/document-card-large.component.html + 20 + + Filter by correspondent + + + Filter by tag + + src/app/components/document-list/document-card-large/document-card-large.component.html + 24 + + Filter by tag + + + Score: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 87 + + Score: + + + Created: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 43 + + Created: + + + Added: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 44 + + Added: + + + Modified: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 45 + + Modified: + + + Error executing bulk operation: + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 74 + + Error executing bulk operation: + + + "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 113 + + "" + + + "" and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 115 + + This is for messages like 'modify "tag1" and "tag2"' + "" and "" + + + , + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 117 + + this is used to separate enumerations and should probably be a comma and a whitespace in most languages + , + + + and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 118 + + this is for messages like 'modify "tag1", "tag2" and "tag3"' + and "" + + + Confirm tags assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 127 + + Confirm tags assignment + + + This operation will add the tag "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 130 + + This operation will add the tag "" to selected document(s). + + + This operation will add the tags to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 132 + + This operation will add the tags to selected document(s). + + + This operation will remove the tag "" from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 135 + + This operation will remove the tag "" from selected document(s). + + + This operation will remove the tags from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 137 + + This operation will remove the tags from selected document(s). + + + This operation will add the tags and remove the tags on selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 139 + + This operation will add the tags and remove the tags on selected document(s). + + + Confirm correspondent assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 159 + + Confirm correspondent assignment + + + This operation will assign the correspondent "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 161 + + This operation will assign the correspondent "" to selected document(s). + + + This operation will remove the correspondent from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 163 + + This operation will remove the correspondent from selected document(s). + + + Confirm document type assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 182 + + Confirm document type assignment + + + This operation will assign the document type "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 184 + + This operation will assign the document type "" to selected document(s). + + + This operation will remove the document type from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 186 + + This operation will remove the document type from selected document(s). + + + Delete confirm + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 201 + + Delete confirm + + + This operation will permanently delete selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 202 + + This operation will permanently delete selected document(s). + + + This operation cannot be undone. + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 203 + + This operation cannot be undone. + + + Delete document(s) + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 205 + + Delete document(s) + + + Select: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 10 + + Select: + + + All + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 20 + + All + + + Edit: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 27 + + Edit: + + + Download originals + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 68 + + Download originals + + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + + + Suggestions: + + src/app/components/common/input/select/select.component.html + 31 + + Suggestions: + + + Save current view + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 3 + + Save current view + + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + + + Show all + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 3 + + Show all + + + Statistics + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 1 + + Statistics + + + Total documents: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 4 + + Total documents: + + + Documents in inbox: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 3 + + Documents in inbox: + + + Processing: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 32 + + Processing: + + + Failed: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 35 + + Failed: + + + Added: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 38 + + Added: + + + Connecting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 118 + + Connecting... + + + Uploading... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 123 + + Uploading... + + + Upload complete, waiting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 126 + + Upload complete, waiting... + + + HTTP error: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 136 + + HTTP error: + + + Upload new documents + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 1 + + Upload new documents + + + Drop documents here or + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Drop documents here or + + + Browse files + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Browse files + + + Dismiss completed + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 4 + + This button dismisses all status messages about processed documents on the dashboard (failed and successful) + Dismiss completed + + + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 25 + + This is shown as a summary line when there are more than 5 document in the processing pipeline. + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + + Open document + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 45 + + Open document + + + First steps + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 1 + + First steps + + + Paperless is running! :) + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 5 + + Paperless is running! :) + + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 6,7 + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + + Paperless offers some more features that try to make your life easier: + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 8 + + Paperless offers some more features that try to make your life easier: + + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 10 + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + + You can configure paperless to read your mails and add documents from attached files. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 11 + + You can configure paperless to read your mails and add documents from attached files. + + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 13 + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + + Metadata + + src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts + 18 + + Metadata + + + Select + + src/app/components/common/select-dialog/select-dialog.component.ts + 18 + + Select + + + Please select an object + + src/app/components/common/select-dialog/select-dialog.component.ts + 21 + + Please select an object + + + Invalid date. + + src/app/components/common/input/date/date.component.html + 14 + + Invalid date. + + + Searching document with asn + + src/app/components/document-asn/document-asn.component.html + 1 + + Searching document with asn + + + Yes + + src/app/pipes/yes-no.pipe.ts + 9 + + Yes + + + No + + src/app/pipes/yes-no.pipe.ts + 9 + + No + + + (no title) + + src/app/pipes/document-title.pipe.ts + 12 + + (no title) + + + English (US) + + src/app/services/settings.service.ts + 90 + + English (US) + + + English (GB) + + src/app/services/settings.service.ts + 91 + + English (GB) + + + German + + src/app/services/settings.service.ts + 92 + + German + + + Dutch + + src/app/services/settings.service.ts + 93 + + Dutch + + + French + + src/app/services/settings.service.ts + 94 + + French + + + Portuguese + + src/app/services/settings.service.ts + 95 + + Portuguese + + + Portuguese (Brazil) + + src/app/services/settings.service.ts + 96 + + Portuguese (Brazil) + + + Italian + + src/app/services/settings.service.ts + 97 + + Italian + + + Romanian + + src/app/services/settings.service.ts + 98 + + Romanian + + + Russian + + src/app/services/settings.service.ts + 99 + + Russian + + + Spanish + + src/app/services/settings.service.ts + 100 + + Spanish + + + Polish + + src/app/services/settings.service.ts + 101 + + Polish + + + Swedish + + src/app/services/settings.service.ts + 102 + + Swedish + + + ISO 8601 + + src/app/services/settings.service.ts + 107 + + ISO 8601 + + + Document already exists. + + src/app/services/consumer-status.service.ts + 15 + + Document already exists. + + + File not found. + + src/app/services/consumer-status.service.ts + 16 + + File not found. + + + Pre-consume script does not exist. + + src/app/services/consumer-status.service.ts + 17 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Pre-consume script does not exist. + + + Error while executing pre-consume script. + + src/app/services/consumer-status.service.ts + 18 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing pre-consume script. + + + Post-consume script does not exist. + + src/app/services/consumer-status.service.ts + 19 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Post-consume script does not exist. + + + Error while executing post-consume script. + + src/app/services/consumer-status.service.ts + 20 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing post-consume script. + + + Received new file. + + src/app/services/consumer-status.service.ts + 21 + + Received new file. + + + File type not supported. + + src/app/services/consumer-status.service.ts + 22 + + File type not supported. + + + Processing document... + + src/app/services/consumer-status.service.ts + 23 + + Processing document... + + + Generating thumbnail... + + src/app/services/consumer-status.service.ts + 24 + + Generating thumbnail... + + + Retrieving date from document... + + src/app/services/consumer-status.service.ts + 25 + + Retrieving date from document... + + + Saving document... + + src/app/services/consumer-status.service.ts + 26 + + Saving document... + + + Finished. + + src/app/services/consumer-status.service.ts + 27 + + Finished. + + + Error + + src/app/services/toast.service.ts + 35 + + Error + + + Information + + src/app/services/toast.service.ts + 39 + + Information + + + Correspondent + + src/app/services/rest/document.service.ts + 18 + + Correspondent + + + Document type + + src/app/services/rest/document.service.ts + 20 + + Document type + + + Created + + src/app/services/rest/document.service.ts + 21 + + Created + + + Added + + src/app/services/rest/document.service.ts + 22 + + Added + + + Modified + + src/app/services/rest/document.service.ts + 23 + + Modified + + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + + + Create new item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 50 + + Create new item + + + Edit item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 54 + + Edit item + + + Could not save element: + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 58 + + Could not save element: + + + Automatic + + src/app/components/manage/generic-list/generic-list.component.ts + 39 + + Automatic + + + Do you really want to delete this element? + + src/app/components/manage/generic-list/generic-list.component.ts + 97 + + Do you really want to delete this element? + + + Associated documents will not be deleted. + + src/app/components/manage/generic-list/generic-list.component.ts + 104 + + Associated documents will not be deleted. + + + Delete + + src/app/components/manage/generic-list/generic-list.component.ts + 106 + + Delete + + + Error while deleting element: + + src/app/components/manage/generic-list/generic-list.component.ts + 114 + + Error while deleting element: + + + Any word + + src/app/data/matching-model.ts + 12 + + Any word + + + Any: Document contains any of these words (space separated) + + src/app/data/matching-model.ts + 12 + + Any: Document contains any of these words (space separated) + + + All words + + src/app/data/matching-model.ts + 13 + + All words + + + All: Document contains all of these words (space separated) + + src/app/data/matching-model.ts + 13 + + All: Document contains all of these words (space separated) + + + Exact match + + src/app/data/matching-model.ts + 14 + + Exact match + + + Exact: Document contains this string + + src/app/data/matching-model.ts + 14 + + Exact: Document contains this string + + + Regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression + + + Regular expression: Document matches this regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression: Document matches this regular expression + + + Fuzzy word + + src/app/data/matching-model.ts + 16 + + Fuzzy word + + + Fuzzy: Document contains a word similar to this word + + src/app/data/matching-model.ts + 16 + + Fuzzy: Document contains a word similar to this word + + + Auto: Learn matching automatically + + src/app/data/matching-model.ts + 17 + + Auto: Learn matching automatically + + + + From cd30cc888159ee44921f236be40c83e6d32b0da3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 13 Jul 2021 23:45:11 +0200 Subject: [PATCH 842/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 208 ++++++++++++------------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index dfc35b585..b19c59b90 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-13 20:18\n" +"PO-Revision-Date: 2021-07-13 21:45\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -19,100 +19,100 @@ msgstr "" #: documents/apps.py:10 msgid "Documents" -msgstr "" +msgstr "Dokumenter" #: documents/models.py:32 msgid "Any word" -msgstr "" +msgstr "Iergendee Wuert" #: documents/models.py:33 msgid "All words" -msgstr "" +msgstr "All d'Wierder" #: documents/models.py:34 msgid "Exact match" -msgstr "" +msgstr "Exakten Treffer" #: documents/models.py:35 msgid "Regular expression" -msgstr "" +msgstr "Regulären Ausdrock" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "" +msgstr "Ongenaut Wuert" #: documents/models.py:37 msgid "Automatic" -msgstr "" +msgstr "Automatesch" #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 #: paperless_mail/models.py:117 msgid "name" -msgstr "" +msgstr "Numm" #: documents/models.py:45 msgid "match" -msgstr "" +msgstr "Zouweisungsmuster" #: documents/models.py:49 msgid "matching algorithm" -msgstr "" +msgstr "Zouweisungsalgorithmus" #: documents/models.py:55 msgid "is insensitive" -msgstr "" +msgstr "Grouss-/Klengschreiwung ignoréieren" #: documents/models.py:74 documents/models.py:120 msgid "correspondent" -msgstr "" +msgstr "Korrespondent" #: documents/models.py:75 msgid "correspondents" -msgstr "" +msgstr "Korrespondenten" #: documents/models.py:81 msgid "color" -msgstr "" +msgstr "Faarf" #: documents/models.py:87 msgid "is inbox tag" -msgstr "" +msgstr "Postaganks-Etikett" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "Dës Etikett als Postaganks-Etikett markéieren: All nei importéiert Dokumenter kréien ëmmer dës Etikett zougewisen." #: documents/models.py:94 msgid "tag" -msgstr "" +msgstr "Etikett" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "" +msgstr "Etiketten" #: documents/models.py:101 documents/models.py:133 msgid "document type" -msgstr "" +msgstr "Dokumententyp" #: documents/models.py:102 msgid "document types" -msgstr "" +msgstr "Dokumententypen" #: documents/models.py:110 msgid "Unencrypted" -msgstr "" +msgstr "Onverschlësselt" #: documents/models.py:111 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "Verschlësselt mat GNU Privacy Guard" #: documents/models.py:124 msgid "title" -msgstr "" +msgstr "Titel" #: documents/models.py:137 msgid "content" -msgstr "" +msgstr "Contenu" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." @@ -120,43 +120,43 @@ msgstr "" #: documents/models.py:144 msgid "mime type" -msgstr "" +msgstr "MIME-Typ" #: documents/models.py:155 msgid "checksum" -msgstr "" +msgstr "Préifzomm" #: documents/models.py:159 msgid "The checksum of the original document." -msgstr "" +msgstr "D'Préifzomm vum Original-Dokument." #: documents/models.py:163 msgid "archive checksum" -msgstr "" +msgstr "Archiv-Préifzomm" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "" +msgstr "D'Préifzomm vum archivéierten Dokument." #: documents/models.py:172 documents/models.py:328 msgid "created" -msgstr "" +msgstr "erstallt" #: documents/models.py:176 msgid "modified" -msgstr "" +msgstr "verännert" #: documents/models.py:180 msgid "storage type" -msgstr "" +msgstr "Späichertyp" #: documents/models.py:188 msgid "added" -msgstr "" +msgstr "derbäigesat" #: documents/models.py:192 msgid "filename" -msgstr "" +msgstr "Fichiersnumm" #: documents/models.py:198 msgid "Current filename in storage" @@ -180,71 +180,71 @@ msgstr "" #: documents/models.py:223 msgid "document" -msgstr "" +msgstr "Dokument" #: documents/models.py:224 msgid "documents" -msgstr "" +msgstr "Dokumenter" #: documents/models.py:311 msgid "debug" -msgstr "" +msgstr "Fehlersiich" #: documents/models.py:312 msgid "information" -msgstr "" +msgstr "Informatioun" #: documents/models.py:313 msgid "warning" -msgstr "" +msgstr "Warnung" #: documents/models.py:314 msgid "error" -msgstr "" +msgstr "Feeler" #: documents/models.py:315 msgid "critical" -msgstr "" +msgstr "kritesch" #: documents/models.py:319 msgid "group" -msgstr "" +msgstr "Grupp" #: documents/models.py:322 msgid "message" -msgstr "" +msgstr "Message" #: documents/models.py:325 msgid "level" -msgstr "" +msgstr "Niveau" #: documents/models.py:332 msgid "log" -msgstr "" +msgstr "Protokoll" #: documents/models.py:333 msgid "logs" -msgstr "" +msgstr "Protokoller" #: documents/models.py:344 documents/models.py:401 msgid "saved view" -msgstr "" +msgstr "Gespäichert Usiicht" #: documents/models.py:345 msgid "saved views" -msgstr "" +msgstr "Gespäichert Usiichten" #: documents/models.py:348 msgid "user" -msgstr "" +msgstr "Benotzer" #: documents/models.py:354 msgid "show on dashboard" -msgstr "" +msgstr "Op der Startsäit uweisen" #: documents/models.py:357 msgid "show in sidebar" -msgstr "" +msgstr "An der Säiteleescht uweisen" #: documents/models.py:361 msgid "sort field" @@ -256,55 +256,55 @@ msgstr "" #: documents/models.py:373 msgid "title contains" -msgstr "" +msgstr "Titel enthält" #: documents/models.py:374 msgid "content contains" -msgstr "" +msgstr "Inhalt enthält" #: documents/models.py:375 msgid "ASN is" -msgstr "" +msgstr "ASN ass" #: documents/models.py:376 msgid "correspondent is" -msgstr "" +msgstr "Korrespondent ass" #: documents/models.py:377 msgid "document type is" -msgstr "" +msgstr "Dokumententyp ass" #: documents/models.py:378 msgid "is in inbox" -msgstr "" +msgstr "ass am Postagank" #: documents/models.py:379 msgid "has tag" -msgstr "" +msgstr "huet Etikett" #: documents/models.py:380 msgid "has any tag" -msgstr "" +msgstr "huet iergendeng Etikett" #: documents/models.py:381 msgid "created before" -msgstr "" +msgstr "erstallt virun" #: documents/models.py:382 msgid "created after" -msgstr "" +msgstr "erstallt no" #: documents/models.py:383 msgid "created year is" -msgstr "" +msgstr "Erstellungsjoer ass" #: documents/models.py:384 msgid "created month is" -msgstr "" +msgstr "Erstellungsmount ass" #: documents/models.py:385 msgid "created day is" -msgstr "" +msgstr "Erstellungsdag ass" #: documents/models.py:386 msgid "added before" @@ -352,11 +352,11 @@ msgstr "" #: documents/models.py:415 msgid "filter rule" -msgstr "" +msgstr "Filterreegel" #: documents/models.py:416 msgid "filter rules" -msgstr "" +msgstr "Filterreegelen" #: documents/serialisers.py:53 #, python-format @@ -402,39 +402,39 @@ msgstr "" #: documents/templates/registration/login.html:53 msgid "Username" -msgstr "" +msgstr "Benotzernumm" #: documents/templates/registration/login.html:54 msgid "Password" -msgstr "" +msgstr "Passwuert" #: documents/templates/registration/login.html:59 msgid "Sign in" -msgstr "" +msgstr "Umellen" #: paperless/settings.py:303 msgid "English (US)" -msgstr "" +msgstr "Englesch (USA)" #: paperless/settings.py:304 msgid "English (GB)" -msgstr "" +msgstr "Englesch (GB)" #: paperless/settings.py:305 msgid "German" -msgstr "" +msgstr "Däitsch" #: paperless/settings.py:306 msgid "Dutch" -msgstr "" +msgstr "Hollännesch" #: paperless/settings.py:307 msgid "French" -msgstr "" +msgstr "Franséisch" #: paperless/settings.py:308 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "Portugisesch (Brasilien)" #: paperless/settings.py:309 msgid "Portuguese" @@ -442,11 +442,11 @@ msgstr "" #: paperless/settings.py:310 msgid "Italian" -msgstr "" +msgstr "Italienesch" #: paperless/settings.py:311 msgid "Romanian" -msgstr "" +msgstr "Rumänesch" #: paperless/settings.py:312 msgid "Russian" @@ -466,23 +466,23 @@ msgstr "" #: paperless/urls.py:120 msgid "Paperless-ng administration" -msgstr "" +msgstr "Paperless-ng-Administratioun" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Authentifizéierung" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Erweidert Astellungen" #: paperless_mail/admin.py:37 msgid "Filter" -msgstr "" +msgstr "Filter" #: paperless_mail/admin.py:39 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "Paperless wäert nëmmen E-Maile veraarbechten, fir déi all déi hei definéiert Filteren zoutreffen." #: paperless_mail/admin.py:49 msgid "Actions" @@ -494,7 +494,7 @@ msgstr "" #: paperless_mail/admin.py:58 msgid "Metadata" -msgstr "" +msgstr "Metadaten" #: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." @@ -506,31 +506,31 @@ msgstr "" #: paperless_mail/models.py:11 msgid "mail account" -msgstr "" +msgstr "Mailkont" #: paperless_mail/models.py:12 msgid "mail accounts" -msgstr "" +msgstr "Mailkonten" #: paperless_mail/models.py:19 msgid "No encryption" -msgstr "" +msgstr "Keng Verschlësselung" #: paperless_mail/models.py:20 msgid "Use SSL" -msgstr "" +msgstr "SSL benotzen" #: paperless_mail/models.py:21 msgid "Use STARTTLS" -msgstr "" +msgstr "STARTTLS benotzen" #: paperless_mail/models.py:29 msgid "IMAP server" -msgstr "" +msgstr "IMAP-Server" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "" +msgstr "IMAP-Port" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." @@ -538,7 +538,7 @@ msgstr "" #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "" +msgstr "IMAP-Sécherheet" #: paperless_mail/models.py:46 msgid "username" @@ -630,19 +630,19 @@ msgstr "" #: paperless_mail/models.py:138 msgid "filter from" -msgstr "" +msgstr "Ofsenderfilter" #: paperless_mail/models.py:141 msgid "filter subject" -msgstr "" +msgstr "Sujets-Filter" #: paperless_mail/models.py:144 msgid "filter body" -msgstr "" +msgstr "Contenu-Filter" #: paperless_mail/models.py:148 msgid "filter attachment filename" -msgstr "" +msgstr "Filter fir den Numm vum Unhank" #: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." @@ -650,11 +650,11 @@ msgstr "" #: paperless_mail/models.py:156 msgid "maximum age" -msgstr "" +msgstr "Maximalen Alter" #: paperless_mail/models.py:158 msgid "Specified in days." -msgstr "" +msgstr "An Deeg." #: paperless_mail/models.py:161 msgid "attachment type" @@ -662,15 +662,15 @@ msgstr "" #: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "\"Inline\"-Unhänk schléissen och agebonne Biller mat an, dofir sollt dës Astellung mat engem Filter fir den Numm vum Unhank kombinéiert ginn." #: paperless_mail/models.py:169 msgid "action" -msgstr "" +msgstr "Aktioun" #: paperless_mail/models.py:175 msgid "action parameter" -msgstr "" +msgstr "Parameter fir Aktioun" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." @@ -686,13 +686,13 @@ msgstr "" #: paperless_mail/models.py:202 msgid "assign this document type" -msgstr "" +msgstr "Dësen Dokumententyp zouweisen" #: paperless_mail/models.py:206 msgid "assign correspondent from" -msgstr "" +msgstr "Korrespondent zouweisen aus" #: paperless_mail/models.py:216 msgid "assign this correspondent" -msgstr "" +msgstr "Dëse Korrespondent zouweisen" From 993e85a61343c5f74749767f45912e840b0597eb Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 13 Jul 2021 23:45:12 +0200 Subject: [PATCH 843/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 54 ++++++++++++++-------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 4bfc3ee8e..06245f7f5 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -56,7 +56,7 @@ src/app/components/document-list/document-list.component.ts 51 - Documents + Dokumenter View "" saved successfully. @@ -120,7 +120,7 @@ src/app/components/document-list/document-list.component.html 64 - Views + Usiichten Save as... @@ -200,7 +200,7 @@ src/app/components/document-list/document-list.component.html 135 - Created + Erstallt Added @@ -304,7 +304,7 @@ src/app/components/document-detail/document-detail.component.html 81 - Metadata + Metadaten Discard @@ -360,7 +360,7 @@ src/app/components/document-detail/document-detail.component.html 61 - Date created + Erstellungsdatum Date modified @@ -552,7 +552,7 @@ src/app/components/manage/tag-list/tag-list.component.html 38 - Documents + Dokumenter Edit @@ -656,7 +656,7 @@ src/app/components/manage/settings/settings.component.html 134 - Saved views + Gespäichert Usiichten Appearance @@ -1354,7 +1354,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 51 - View + Usiicht Filter by correspondent @@ -1386,7 +1386,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 43 - Created: + Erstallt: Added: @@ -1630,7 +1630,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 3 - Save current view + Aktuell Usiicht späicheren Add tag @@ -1646,7 +1646,7 @@ src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html 3 - Show all + Alles uweisen Statistics @@ -1840,7 +1840,7 @@ src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts 18 - Metadata + Metadaten Select @@ -1904,7 +1904,7 @@ src/app/services/settings.service.ts 90 - English (US) + Englesch (USA) English (GB) @@ -1912,7 +1912,7 @@ src/app/services/settings.service.ts 91 - English (GB) + Englesch (GB) German @@ -1920,7 +1920,7 @@ src/app/services/settings.service.ts 92 - German + Däitsch Dutch @@ -1928,7 +1928,7 @@ src/app/services/settings.service.ts 93 - Dutch + Hollännesch French @@ -1936,7 +1936,7 @@ src/app/services/settings.service.ts 94 - French + Franséisch Portuguese @@ -1952,7 +1952,7 @@ src/app/services/settings.service.ts 96 - Portuguese (Brazil) + Portugisesch (Brasilien) Italian @@ -1960,7 +1960,7 @@ src/app/services/settings.service.ts 97 - Italian + Italienesch Romanian @@ -1968,7 +1968,7 @@ src/app/services/settings.service.ts 98 - Romanian + Rumänesch Russian @@ -2156,7 +2156,7 @@ src/app/services/rest/document.service.ts 21 - Created + Erstallt Added @@ -2213,7 +2213,7 @@ src/app/components/manage/generic-list/generic-list.component.ts 39 - Automatic + Automatesch Do you really want to delete this element? @@ -2253,7 +2253,7 @@ src/app/data/matching-model.ts 12 - Any word + Iergendee Wuert Any: Document contains any of these words (space separated) @@ -2269,7 +2269,7 @@ src/app/data/matching-model.ts 13 - All words + All d'Wierder All: Document contains all of these words (space separated) @@ -2285,7 +2285,7 @@ src/app/data/matching-model.ts 14 - Exact match + Exakten Treffer Exact: Document contains this string @@ -2301,7 +2301,7 @@ src/app/data/matching-model.ts 15 - Regular expression + Regulären Ausdrock Regular expression: Document matches this regular expression @@ -2317,7 +2317,7 @@ src/app/data/matching-model.ts 16 - Fuzzy word + Ongenaut Wuert Fuzzy: Document contains a word similar to this word From 5d724274f01531b144cf2fee1e9c3e2271a9fc2e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 14 Jul 2021 10:42:55 +0200 Subject: [PATCH 844/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index b19c59b90..ef3bd9fbd 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-13 21:45\n" +"PO-Revision-Date: 2021-07-14 08:42\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -116,7 +116,7 @@ msgstr "Contenu" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "De réien Textinhalt vum Dokument. Dëst Feld gëtt primär fir d'Sich benotzt." #: documents/models.py:144 msgid "mime type" @@ -160,23 +160,23 @@ msgstr "Fichiersnumm" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "" +msgstr "Aktuellen Dateinumm am Späicher" #: documents/models.py:202 msgid "archive filename" -msgstr "" +msgstr "Archiv-Dateinumm" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "" +msgstr "Aktuellen Dateinumm am Archiv" #: documents/models.py:212 msgid "archive serial number" -msgstr "" +msgstr "Archiv-Seriennummer" #: documents/models.py:217 msgid "The position of this document in your physical document archive." -msgstr "" +msgstr "D'Positioun vun dësem Dokument am physeschen Dokumentenarchiv." #: documents/models.py:223 msgid "document" From ac7649708ae4d65d33d6b423bf9c1e674543b949 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 14 Jul 2021 18:00:29 +0200 Subject: [PATCH 845/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 42 +++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index ef3bd9fbd..9474df304 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-14 08:42\n" +"PO-Revision-Date: 2021-07-14 16:00\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -248,11 +248,11 @@ msgstr "An der Säiteleescht uweisen" #: documents/models.py:361 msgid "sort field" -msgstr "" +msgstr "Zortéierfeld" #: documents/models.py:367 msgid "sort reverse" -msgstr "" +msgstr "ëmgedréint zortéieren" #: documents/models.py:373 msgid "title contains" @@ -308,47 +308,47 @@ msgstr "Erstellungsdag ass" #: documents/models.py:386 msgid "added before" -msgstr "" +msgstr "dobäigesat virun" #: documents/models.py:387 msgid "added after" -msgstr "" +msgstr "dobäigesat no" #: documents/models.py:388 msgid "modified before" -msgstr "" +msgstr "verännert virun" #: documents/models.py:389 msgid "modified after" -msgstr "" +msgstr "verännert no" #: documents/models.py:390 msgid "does not have tag" -msgstr "" +msgstr "huet dës Etikett net" #: documents/models.py:391 msgid "does not have ASN" -msgstr "" +msgstr "huet keng ASN" #: documents/models.py:392 msgid "title or content contains" -msgstr "" +msgstr "Titel oder Inhalt enthalen" #: documents/models.py:393 msgid "fulltext query" -msgstr "" +msgstr "Volltextsich" #: documents/models.py:394 msgid "more like this" -msgstr "" +msgstr "ähnlech Dokumenter" #: documents/models.py:405 msgid "rule type" -msgstr "" +msgstr "Reegeltyp" #: documents/models.py:409 msgid "value" -msgstr "" +msgstr "Wäert" #: documents/models.py:415 msgid "filter rule" @@ -394,7 +394,7 @@ msgstr "" #: documents/templates/registration/login.html:47 msgid "Please sign in." -msgstr "" +msgstr "W. e. g. umellen." #: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." @@ -486,7 +486,7 @@ msgstr "Paperless wäert nëmmen E-Maile veraarbechten, fir déi all déi hei de #: paperless_mail/admin.py:49 msgid "Actions" -msgstr "" +msgstr "Aktiounen" #: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." @@ -542,15 +542,15 @@ msgstr "IMAP-Sécherheet" #: paperless_mail/models.py:46 msgid "username" -msgstr "" +msgstr "Benotzernumm" #: paperless_mail/models.py:50 msgid "password" -msgstr "" +msgstr "Passwuert" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Zeechesaz" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." @@ -586,11 +586,11 @@ msgstr "" #: paperless_mail/models.py:89 msgid "Delete" -msgstr "" +msgstr "Läschen" #: paperless_mail/models.py:96 msgid "Use subject as title" -msgstr "" +msgstr "Sujet als TItel notzen" #: paperless_mail/models.py:97 msgid "Use attachment filename as title" From 09056619d67c436bcfb40d98fc45a1feed4ff414 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 14 Jul 2021 18:00:31 +0200 Subject: [PATCH 846/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 06245f7f5..5cccc46ae 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -256,7 +256,7 @@ src/app/components/document-detail/document-detail.component.html 15 - Delete + Läschen Download @@ -544,7 +544,7 @@ src/app/components/manage/tag-list/tag-list.component.html 23 - Actions + Aktiounen Documents @@ -2237,7 +2237,7 @@ src/app/components/manage/generic-list/generic-list.component.ts 106 - Delete + Läschen Error while deleting element: From 69a5cd631697f2afd3d93af46ce94d39f2b66ef3 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 15 Jul 2021 09:42:47 +0200 Subject: [PATCH 847/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index 9474df304..e6468927a 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-14 16:00\n" +"PO-Revision-Date: 2021-07-15 07:42\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -361,11 +361,11 @@ msgstr "Filterreegelen" #: documents/serialisers.py:53 #, python-format msgid "Invalid regular expression: %(error)s" -msgstr "" +msgstr "Ongëltege regulären Ausdrock: %(error)s" #: documents/serialisers.py:177 msgid "Invalid color." -msgstr "" +msgstr "Ongëlteg Faarf." #: documents/serialisers.py:451 #, python-format From e857e8c7741eb8a5d9582d6f45931224bff2a28e Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 15 Jul 2021 10:58:16 +0200 Subject: [PATCH 848/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index e6468927a..9c552e7b6 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-15 07:42\n" +"PO-Revision-Date: 2021-07-15 08:58\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -112,7 +112,7 @@ msgstr "Titel" #: documents/models.py:137 msgid "content" -msgstr "Contenu" +msgstr "Inhalt" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." @@ -370,27 +370,27 @@ msgstr "Ongëlteg Faarf." #: documents/serialisers.py:451 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "Fichierstyp %(type)s net ënnerstëtzt" #: documents/templates/index.html:22 msgid "Paperless-ng is loading..." -msgstr "" +msgstr "Paperless-ng gëtt gelueden..." #: documents/templates/registration/logged_out.html:14 msgid "Paperless-ng signed out" -msgstr "" +msgstr "Paperless-ng ofgemellt" #: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "Dir hutt Iech erfollegräich ofgemellt. Bis geschwënn!" #: documents/templates/registration/logged_out.html:46 msgid "Sign in again" -msgstr "" +msgstr "Nees umellen" #: documents/templates/registration/login.html:15 msgid "Paperless-ng sign in" -msgstr "" +msgstr "Umeldung bei Paperless-ng" #: documents/templates/registration/login.html:47 msgid "Please sign in." @@ -398,7 +398,7 @@ msgstr "W. e. g. umellen." #: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "Äre Benotzernumm a Passwuert stëmmen net iwwereneen. Probéiert w. e. g. nach emol." #: documents/templates/registration/login.html:53 msgid "Username" @@ -438,7 +438,7 @@ msgstr "Portugisesch (Brasilien)" #: paperless/settings.py:309 msgid "Portuguese" -msgstr "" +msgstr "Portugisesch" #: paperless/settings.py:310 msgid "Italian" @@ -450,19 +450,19 @@ msgstr "Rumänesch" #: paperless/settings.py:312 msgid "Russian" -msgstr "" +msgstr "Russesch" #: paperless/settings.py:313 msgid "Spanish" -msgstr "" +msgstr "Spuenesch" #: paperless/settings.py:314 msgid "Polish" -msgstr "" +msgstr "Polnesch" #: paperless/settings.py:315 msgid "Swedish" -msgstr "" +msgstr "Schwedesch" #: paperless/urls.py:120 msgid "Paperless-ng administration" @@ -558,15 +558,15 @@ msgstr "" #: paperless_mail/models.py:68 msgid "mail rule" -msgstr "" +msgstr "E-Mail-Reegel" #: paperless_mail/models.py:69 msgid "mail rules" -msgstr "" +msgstr "E-Mail-Reegelen" #: paperless_mail/models.py:75 msgid "Only process attachments." -msgstr "" +msgstr "Just Unhäng veraarbechten." #: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." From f741fe44dfb0aa7d9283b8f232109f2a31ba246d Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 15 Jul 2021 10:58:18 +0200 Subject: [PATCH 849/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 300 +++++++++++++-------------- 1 file changed, 150 insertions(+), 150 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 5cccc46ae..680991991 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -8,7 +8,7 @@ src/app/app.component.ts 51 - Document added + Dokument dobäigesat Document was added to paperless. @@ -16,7 +16,7 @@ src/app/app.component.ts 51 - Document was added to paperless. + Dokument gouf a Paperless-ng dobäigesat. Open document @@ -80,7 +80,7 @@ src/app/components/document-list/document-list.component.html 7 - Select + Auswielen Select none @@ -88,7 +88,7 @@ src/app/components/document-list/document-list.component.html 10 - Select none + Näischt auswielen Select page @@ -96,7 +96,7 @@ src/app/components/document-list/document-list.component.html 11 - Select page + Säit auswielen Select all @@ -104,7 +104,7 @@ src/app/components/document-list/document-list.component.html 12 - Select all + Alles auswielen Sort @@ -112,7 +112,7 @@ src/app/components/document-list/document-list.component.html 39 - Sort + Zortéieren Views @@ -128,7 +128,7 @@ src/app/components/document-list/document-list.component.html 72 - Save as... + Späicheren als... Save "" @@ -136,7 +136,7 @@ src/app/components/document-list/document-list.component.html 71 - Save "" + "" späicheren {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} @@ -144,7 +144,7 @@ src/app/components/document-list/document-list.component.html 85 - {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + {VAR_PLURAL, plural, =1 { vun 1 Dokument ausgewählt} other { vu(n) Dokumenter ausgewielt}} {VAR_PLURAL, plural, =1 {One document} other { documents}} @@ -152,7 +152,7 @@ src/app/components/document-list/document-list.component.html 86 - {VAR_PLURAL, plural, =1 {One document} other { documents}} + {VAR_PLURAL, plural, =1 {Een Dokument} other { Dokumenter}} (filtered) @@ -160,7 +160,7 @@ src/app/components/document-list/document-list.component.html 86 - (filtered) + (gefiltert) ASN @@ -168,7 +168,7 @@ src/app/components/document-list/document-list.component.html 111 - ASN + ASN Correspondent @@ -176,7 +176,7 @@ src/app/components/document-list/document-list.component.html 117 - Correspondent + Korrespondent Title @@ -184,7 +184,7 @@ src/app/components/document-list/document-list.component.html 123 - Title + Titel Document type @@ -192,7 +192,7 @@ src/app/components/document-list/document-list.component.html 129 - Document type + Dokumententyp Created @@ -208,7 +208,7 @@ src/app/components/document-list/document-list.component.html 141 - Added + Dobäigesat Confirm delete @@ -216,7 +216,7 @@ src/app/components/document-detail/document-detail.component.ts 206 - Confirm delete + Läsche bestätegen Do you really want to delete document ""? @@ -224,7 +224,7 @@ src/app/components/document-detail/document-detail.component.ts 207 - Do you really want to delete document ""? + Wëllt Dir d'Dokument "" wierklech läschen? The files for this document will be deleted permanently. This operation cannot be undone. @@ -232,7 +232,7 @@ src/app/components/document-detail/document-detail.component.ts 208 - The files for this document will be deleted permanently. This operation cannot be undone. + D'Fichiere fir dëst Dokument gi permanent geläscht. Dës Operatioun kann net réckgängeg gemaach ginn. Delete document @@ -240,7 +240,7 @@ src/app/components/document-detail/document-detail.component.ts 210 - Delete document + Dokument läschen Error deleting document: @@ -248,7 +248,7 @@ src/app/components/document-detail/document-detail.component.ts 217 - Error deleting document: + Feeler beim Läsche vum Dokument: Delete @@ -264,7 +264,7 @@ src/app/components/document-detail/document-detail.component.html 23 - Download + Eroflueden More like this @@ -272,7 +272,7 @@ src/app/components/document-detail/document-detail.component.html 38 - More like this + Ähnlech Dokumenter Close @@ -280,7 +280,7 @@ src/app/components/document-detail/document-detail.component.html 44 - Close + Zoumaachen Details @@ -288,7 +288,7 @@ src/app/components/document-detail/document-detail.component.html 56 - Details + Detailer Content @@ -296,7 +296,7 @@ src/app/components/document-detail/document-detail.component.html 72 - Content + Inhalt Metadata @@ -312,7 +312,7 @@ src/app/components/document-detail/document-detail.component.html 130 - Discard + Verwerfen Save @@ -320,7 +320,7 @@ src/app/components/document-detail/document-detail.component.html 132 - Save + Späicheren Page @@ -328,7 +328,7 @@ src/app/components/document-detail/document-detail.component.html 4 - Page + Säit of @@ -336,7 +336,7 @@ src/app/components/document-detail/document-detail.component.html 8 - of + vu(n) Download original @@ -344,7 +344,7 @@ src/app/components/document-detail/document-detail.component.html 29 - Download original + Original eroflueden Archive serial number @@ -352,7 +352,7 @@ src/app/components/document-detail/document-detail.component.html 60 - Archive serial number + Archiv-Seriennummer Date created @@ -368,7 +368,7 @@ src/app/components/document-detail/document-detail.component.html 87 - Date modified + Verännert um Date added @@ -376,7 +376,7 @@ src/app/components/document-detail/document-detail.component.html 91 - Date added + Dobäigesat um Media filename @@ -384,7 +384,7 @@ src/app/components/document-detail/document-detail.component.html 95 - Media filename + Dateinumm vum Mediefichier Original MD5 checksum @@ -392,7 +392,7 @@ src/app/components/document-detail/document-detail.component.html 99 - Original MD5 checksum + MD5-Préifzomm vum Original Original file size @@ -400,7 +400,7 @@ src/app/components/document-detail/document-detail.component.html 103 - Original file size + Dateigréisst vum Original Original mime type @@ -408,7 +408,7 @@ src/app/components/document-detail/document-detail.component.html 107 - Original mime type + Urspréngleche MIME-Typ Archive MD5 checksum @@ -416,7 +416,7 @@ src/app/components/document-detail/document-detail.component.html 111 - Archive MD5 checksum + MD5-Préifzomm vum Archiv Archive file size @@ -424,7 +424,7 @@ src/app/components/document-detail/document-detail.component.html 115 - Archive file size + Archiv-Dateigréisst Original document metadata @@ -432,7 +432,7 @@ src/app/components/document-detail/document-detail.component.html 121 - Original document metadata + Metadate vum Original-Dokument Archived document metadata @@ -440,7 +440,7 @@ src/app/components/document-detail/document-detail.component.html 122 - Archived document metadata + Metadate vum Archiv-Dokument Save & next @@ -448,7 +448,7 @@ src/app/components/document-detail/document-detail.component.html 131 - Save & next + Späicheren a weider Hello , welcome to Paperless-ng! @@ -456,7 +456,7 @@ src/app/components/dashboard/dashboard.component.ts 33 - Hello , welcome to Paperless-ng! + Hallo , wëllkomm bei Paperless-ng! Welcome to Paperless-ng! @@ -464,7 +464,7 @@ src/app/components/dashboard/dashboard.component.ts 35 - Welcome to Paperless-ng! + Wëllkomm bei Paperless-ng! Dashboard @@ -472,7 +472,7 @@ src/app/components/dashboard/dashboard.component.html 1 - Dashboard + Startsäit Do you really want to delete the tag ""? @@ -480,7 +480,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 26 - Do you really want to delete the tag ""? + Soll d'Etikett "" wierklech geläscht ginn? Tags @@ -488,7 +488,7 @@ src/app/components/manage/tag-list/tag-list.component.html 1 - Tags + Etiketten Create @@ -496,7 +496,7 @@ src/app/components/manage/tag-list/tag-list.component.html 2 - Create + Erstellen Filter by: @@ -504,7 +504,7 @@ src/app/components/manage/tag-list/tag-list.component.html 8 - Filter by: + Filteren no: Name @@ -512,7 +512,7 @@ src/app/components/manage/tag-list/tag-list.component.html 9 - Name + Numm Color @@ -520,7 +520,7 @@ src/app/components/manage/tag-list/tag-list.component.html 20 - Color + Faarf Matching @@ -528,7 +528,7 @@ src/app/components/manage/tag-list/tag-list.component.html 21 - Matching + Zouweisung Document count @@ -536,7 +536,7 @@ src/app/components/manage/tag-list/tag-list.component.html 22 - Document count + Unzuel Dokumenter Actions @@ -560,7 +560,7 @@ src/app/components/manage/tag-list/tag-list.component.html 43 - Edit + Editéieren Do you really want to delete the document type ""? @@ -760,7 +760,7 @@ src/app/components/manage/settings/settings.component.html 94 - Dark mode + Nuetsmodus Use system settings @@ -776,7 +776,7 @@ src/app/components/manage/settings/settings.component.html 98 - Enable dark mode + Nuetsmodus aktivéieren Invert thumbnails in dark mode @@ -904,7 +904,7 @@ src/app/components/not-found/not-found.component.html 7 - 404 Not Found + 404 Net fonnt Do you really want to delete the correspondent ""? @@ -912,7 +912,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 26 - Do you really want to delete the correspondent ""? + Soll de Korrespondent "" wierklech geläscht ginn? Correspondents @@ -920,7 +920,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.html 1 - Correspondents + Korrespondenten Last correspondence @@ -928,7 +928,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.html 22 - Last correspondence + Lescht Korrespondenten Confirmation @@ -936,7 +936,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.ts 17 - Confirmation + Bestätegung Confirm @@ -944,7 +944,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.ts 29 - Confirm + Bestätegen Cancel @@ -952,7 +952,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.html 12 - Cancel + Ofbriechen Create new correspondent @@ -960,7 +960,7 @@ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts 21 - Create new correspondent + Neie Korrespondent erstellen Edit correspondent @@ -968,7 +968,7 @@ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts 25 - Edit correspondent + Korrespondent editéieren Matching algorithm @@ -976,7 +976,7 @@ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html 10 - Matching algorithm + Zouweisungsalgorithmus Matching pattern @@ -984,7 +984,7 @@ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html 11 - Matching pattern + Zouweisungsmuster Case insensitive @@ -992,7 +992,7 @@ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html 12 - Case insensitive + Grouss-/Klengschreiwung ignoréieren Create new tag @@ -1000,7 +1000,7 @@ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts 22 - Create new tag + Nei Etikett erstellen Edit tag @@ -1008,7 +1008,7 @@ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts 26 - Edit tag + Etikett editéieren Inbox tag @@ -1065,7 +1065,7 @@ src/app/components/app-frame/app-frame.component.html 45 - Logout + Ofmellen Manage @@ -1073,7 +1073,7 @@ src/app/components/app-frame/app-frame.component.html 112 - Manage + Verwalten Admin @@ -1081,7 +1081,7 @@ src/app/components/app-frame/app-frame.component.html 154 - Admin + Administratioun Info @@ -1089,7 +1089,7 @@ src/app/components/app-frame/app-frame.component.html 160 - Info + Informatiounen Documentation @@ -1097,7 +1097,7 @@ src/app/components/app-frame/app-frame.component.html 167 - Documentation + Dokumentatioun GitHub @@ -1105,7 +1105,7 @@ src/app/components/app-frame/app-frame.component.html 175 - GitHub + GitHub Suggest an idea @@ -1113,7 +1113,7 @@ src/app/components/app-frame/app-frame.component.html 181 - Suggest an idea + Eng Iddi virschloen Logged in as @@ -1121,7 +1121,7 @@ src/app/components/app-frame/app-frame.component.html 34 - Logged in as + Ugemellt als Open documents @@ -1129,7 +1129,7 @@ src/app/components/app-frame/app-frame.component.html 87 - Open documents + Oppen Dokumenter Close all @@ -1137,7 +1137,7 @@ src/app/components/app-frame/app-frame.component.html 106 - Close all + All zoumaachen Correspondent: @@ -1153,7 +1153,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 39 - Without correspondent + Ouni Korrespondent Type: @@ -1169,7 +1169,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 46 - Without document type + Ouni Dokumententyp Tag: @@ -1185,7 +1185,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 54 - Without any tag + Ouni Etikett Title: @@ -1193,7 +1193,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 58 - Title: + Titel: ASN: @@ -1201,7 +1201,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 61 - ASN: + ASN: Title @@ -1209,7 +1209,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 88 - Title + Titel Title & content @@ -1217,7 +1217,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 89 - Title & content + Titel an Inhalt ASN @@ -1225,7 +1225,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 90 - ASN + ASN Advanced search @@ -1233,7 +1233,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 91 - Advanced search + Erweidert Sich More like @@ -1241,7 +1241,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 94 - More like + Méi ähnleches Filter tags @@ -1298,7 +1298,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 34 - Last 7 days + Lescht 7 Deeg Last month @@ -1306,7 +1306,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 35 - Last month + Leschte Mount Last 3 months @@ -1314,7 +1314,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 36 - Last 3 months + Lescht 3 Méint Last year @@ -1322,7 +1322,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 37 - Last year + Lescht Joer After @@ -1330,7 +1330,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.html 13 - After + No Before @@ -1338,7 +1338,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.html 38 - Before + Virun Clear @@ -1346,7 +1346,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.html 18 - Clear + Läschen View @@ -1362,7 +1362,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 20 - Filter by correspondent + No Korrespondent filteren Filter by tag @@ -1370,7 +1370,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 24 - Filter by tag + No Etikett filteren Score: @@ -1378,7 +1378,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 87 - Score: + Relevanz: Created: @@ -1394,7 +1394,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 44 - Added: + Dobäigesat: Modified: @@ -1402,7 +1402,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 45 - Modified: + Verännert: Error executing bulk operation: @@ -1418,7 +1418,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 113 - "" + "" "" and "" @@ -1427,7 +1427,7 @@ 115 This is for messages like 'modify "tag1" and "tag2"' - "" and "" + "" a(n) "" , @@ -1436,7 +1436,7 @@ 117 this is used to separate enumerations and should probably be a comma and a whitespace in most languages - , + , and "" @@ -1445,7 +1445,7 @@ 118 this is for messages like 'modify "tag1", "tag2" and "tag3"' - and "" + a(n) "" Confirm tags assignment @@ -1453,7 +1453,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 127 - Confirm tags assignment + Zouweisung vun der Etikett bestätegen This operation will add the tag "" to selected document(s). @@ -1589,7 +1589,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 20 - All + All Edit: @@ -1597,7 +1597,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 27 - Edit: + Editéieren: Download originals @@ -1605,7 +1605,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 68 - Download originals + Originaler eroflueden Add item @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Element dobäisetzen Suggestions: @@ -1622,7 +1622,7 @@ src/app/components/common/input/select/select.component.html 31 - Suggestions: + Virschléi: Save current view @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Etikett dobäisetzen Show all @@ -1654,7 +1654,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 1 - Statistics + Statistiken Total documents: @@ -1662,7 +1662,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 4 - Total documents: + Unzuel Dokumenter insgesamt: Documents in inbox: @@ -1670,7 +1670,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 3 - Documents in inbox: + Unzuel Dokumenter am Postagank: Processing: @@ -1848,7 +1848,7 @@ src/app/components/common/select-dialog/select-dialog.component.ts 18 - Select + Auswielen Please select an object @@ -1864,7 +1864,7 @@ src/app/components/common/input/date/date.component.html 14 - Invalid date. + Ongëltegen Datum. Searching document with asn @@ -1880,7 +1880,7 @@ src/app/pipes/yes-no.pipe.ts 9 - Yes + Jo No @@ -1888,7 +1888,7 @@ src/app/pipes/yes-no.pipe.ts 9 - No + Nee (no title) @@ -1896,7 +1896,7 @@ src/app/pipes/document-title.pipe.ts 12 - (no title) + (keen Titel) English (US) @@ -1944,7 +1944,7 @@ src/app/services/settings.service.ts 95 - Portuguese + Portugisesch Portuguese (Brazil) @@ -1976,7 +1976,7 @@ src/app/services/settings.service.ts 99 - Russian + Russesch Spanish @@ -1984,7 +1984,7 @@ src/app/services/settings.service.ts 100 - Spanish + Spuenesch Polish @@ -1992,7 +1992,7 @@ src/app/services/settings.service.ts 101 - Polish + Polnesch Swedish @@ -2000,7 +2000,7 @@ src/app/services/settings.service.ts 102 - Swedish + Schwedesch ISO 8601 @@ -2008,7 +2008,7 @@ src/app/services/settings.service.ts 107 - ISO 8601 + ISO 8601 Document already exists. @@ -2016,7 +2016,7 @@ src/app/services/consumer-status.service.ts 15 - Document already exists. + Dokument existéiert schonn. File not found. @@ -2024,7 +2024,7 @@ src/app/services/consumer-status.service.ts 16 - File not found. + Fichier net fonnt. Pre-consume script does not exist. @@ -2033,7 +2033,7 @@ 17 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Pre-consume script does not exist. + Skript fir de Virtraitement existéiert net. Error while executing pre-consume script. @@ -2042,7 +2042,7 @@ 18 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Error while executing pre-consume script. + Feeler beim ausféiere vum Skript fir d'Virbehandlung. Post-consume script does not exist. @@ -2051,7 +2051,7 @@ 19 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Post-consume script does not exist. + Skript fir d'Nobehandlung existéiert net. Error while executing post-consume script. @@ -2060,7 +2060,7 @@ 20 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Error while executing post-consume script. + Feeler beim ausféiere vum Skript fir d'Nobehandlung. Received new file. @@ -2108,7 +2108,7 @@ src/app/services/consumer-status.service.ts 26 - Saving document... + Dokument gëtt gespäichert... Finished. @@ -2116,7 +2116,7 @@ src/app/services/consumer-status.service.ts 27 - Finished. + Ofgeschloss. Error @@ -2124,7 +2124,7 @@ src/app/services/toast.service.ts 35 - Error + Feeler Information @@ -2132,7 +2132,7 @@ src/app/services/toast.service.ts 39 - Information + Informatioun Correspondent @@ -2140,7 +2140,7 @@ src/app/services/rest/document.service.ts 18 - Correspondent + Korrespondent Document type @@ -2148,7 +2148,7 @@ src/app/services/rest/document.service.ts 20 - Document type + Dokumententyp Created @@ -2164,7 +2164,7 @@ src/app/services/rest/document.service.ts 22 - Added + Dobäigesat Modified @@ -2172,7 +2172,7 @@ src/app/services/rest/document.service.ts 23 - Modified + Verännert Search score @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Pertinenz Create new item @@ -2189,7 +2189,7 @@ src/app/components/common/edit-dialog/edit-dialog.component.ts 50 - Create new item + Neit Element erstellen Edit item @@ -2197,7 +2197,7 @@ src/app/components/common/edit-dialog/edit-dialog.component.ts 54 - Edit item + Element beaarbechten Could not save element: @@ -2205,7 +2205,7 @@ src/app/components/common/edit-dialog/edit-dialog.component.ts 58 - Could not save element: + Element konnt net gespäichert ginn: Automatic @@ -2221,7 +2221,7 @@ src/app/components/manage/generic-list/generic-list.component.ts 97 - Do you really want to delete this element? + Soll d'Element wierklech geläscht ginn? Associated documents will not be deleted. @@ -2325,7 +2325,7 @@ src/app/data/matching-model.ts 16 - Fuzzy: Document contains a word similar to this word + Ongenau: Dokument enthält e Wuert dat ähnlech ass wéi dëst Wuert Auto: Learn matching automatically @@ -2333,7 +2333,7 @@ src/app/data/matching-model.ts 17 - Auto: Learn matching automatically + Auto: Zouweisung automatesch léieren From 612e2ee3e06f79cd5187257b9c48fe108ea0b9f7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 13:47:42 +0200 Subject: [PATCH 850/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index 9c552e7b6..990e4c40f 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-15 08:58\n" +"PO-Revision-Date: 2021-07-16 11:47\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -602,31 +602,31 @@ msgstr "" #: paperless_mail/models.py:109 msgid "Use mail address" -msgstr "" +msgstr "E-Mail-Adress benotzen" #: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "Numm benotzen (oder E-Mail-Adress falls den Numm net disponibel ass)" #: paperless_mail/models.py:113 msgid "Use correspondent selected below" -msgstr "" +msgstr "Korrespondent benotzen deen hei drënner ausgewielt ass" #: paperless_mail/models.py:121 msgid "order" -msgstr "" +msgstr "Reiefolleg" #: paperless_mail/models.py:128 msgid "account" -msgstr "" +msgstr "Kont" #: paperless_mail/models.py:132 msgid "folder" -msgstr "" +msgstr "Dossier" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Ënnerdossiere mussen duerch Punkte getrennt ginn." #: paperless_mail/models.py:138 msgid "filter from" @@ -678,11 +678,11 @@ msgstr "" #: paperless_mail/models.py:184 msgid "assign title from" -msgstr "" +msgstr "Titel zouweisen aus" #: paperless_mail/models.py:194 msgid "assign this tag" -msgstr "" +msgstr "dës Etikett zouweisen" #: paperless_mail/models.py:202 msgid "assign this document type" From 552292f343ad9195f1bc15fa477f5649af904209 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 13:47:43 +0200 Subject: [PATCH 851/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 680991991..1ea017b9f 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -24,7 +24,7 @@ src/app/app.component.ts 51 - Open document + Dokument opmaachen Could not add : @@ -40,7 +40,7 @@ src/app/app.component.ts 65 - New document detected + Neit Dokument detektéiert Document is being processed by paperless. @@ -584,7 +584,7 @@ src/app/components/manage/logs/logs.component.html 1 - Logs + Protokoller Saved view "" deleted. @@ -640,7 +640,7 @@ src/app/components/manage/settings/settings.component.html 10 - General settings + Allgemeng Astellungen Notifications @@ -648,7 +648,7 @@ src/app/components/manage/settings/settings.component.html 116 - Notifications + Notifikatiounen Saved views @@ -664,7 +664,7 @@ src/app/components/manage/settings/settings.component.html 13 - Appearance + Ausgesinn Display language @@ -672,7 +672,7 @@ src/app/components/manage/settings/settings.component.html 17 - Display language + Sprooch vum Interface You need to reload the page after applying a new language. @@ -680,7 +680,7 @@ src/app/components/manage/settings/settings.component.html 25 - You need to reload the page after applying a new language. + Nodeem s eng nei Sprooch gewielt gouf muss d'Säit nei geluede ginn. Date display @@ -1776,7 +1776,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 45 - Open document + Dokument opmaachen First steps From ab5c6e3a0d6644f1b3ba642ebf92e5076634533b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 15:01:07 +0200 Subject: [PATCH 852/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index 990e4c40f..05fc99bd7 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-16 11:47\n" +"PO-Revision-Date: 2021-07-16 13:01\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -502,7 +502,7 @@ msgstr "" #: paperless_mail/apps.py:9 msgid "Paperless mail" -msgstr "" +msgstr "Paperless E-Mail" #: paperless_mail/models.py:11 msgid "mail account" @@ -582,7 +582,7 @@ msgstr "" #: paperless_mail/models.py:88 msgid "Move to specified folder" -msgstr "" +msgstr "An e virdefinéierten Dossier réckelen" #: paperless_mail/models.py:89 msgid "Delete" @@ -594,11 +594,11 @@ msgstr "Sujet als TItel notzen" #: paperless_mail/models.py:97 msgid "Use attachment filename as title" -msgstr "" +msgstr "Numm vum Dateiunhank als Titel benotzen" #: paperless_mail/models.py:107 msgid "Do not assign a correspondent" -msgstr "" +msgstr "Kee Korrespondent zouweisen" #: paperless_mail/models.py:109 msgid "Use mail address" @@ -646,7 +646,7 @@ msgstr "Filter fir den Numm vum Unhank" #: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "Just Dokumenter traitéieren, déi exakt dësen Dateinumm hunn (falls definéiert). Platzhalter wéi *.pdf oder *invoice* sinn erlaabt. D'Grouss-/Klengschreiwung gëtt ignoréiert." #: paperless_mail/models.py:156 msgid "maximum age" @@ -658,7 +658,7 @@ msgstr "An Deeg." #: paperless_mail/models.py:161 msgid "attachment type" -msgstr "" +msgstr "Fichierstyp vum Unhank" #: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." From 1377c6efb96eb1d4b2693dc8be3881bfc54cc232 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 15:01:08 +0200 Subject: [PATCH 853/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 110 +++++++++++++-------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 1ea017b9f..72f41fdb4 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -64,7 +64,7 @@ src/app/components/document-list/document-list.component.ts 116 - View "" saved successfully. + Usiicht "" gouf erfollegräich gespäichert. View "" created successfully. @@ -72,7 +72,7 @@ src/app/components/document-list/document-list.component.ts 138 - View "" created successfully. + Vue "" gouf erfollegräich erstallt. Select @@ -568,7 +568,7 @@ src/app/components/manage/document-type-list/document-type-list.component.ts 26 - Do you really want to delete the document type ""? + Soll den Dokumententyp "" wierklech geläscht ginn? Document types @@ -576,7 +576,7 @@ src/app/components/manage/document-type-list/document-type-list.component.html 1 - Document types + Dokumententypen Logs @@ -608,7 +608,7 @@ src/app/components/manage/settings/settings.component.ts 94 - Use system language + Systemsprooch benotzen Use date format of display language @@ -632,7 +632,7 @@ src/app/components/manage/settings/settings.component.html 1 - Settings + Astellungen General settings @@ -688,7 +688,7 @@ src/app/components/manage/settings/settings.component.html 32 - Date display + Uweise vum Datum Date format @@ -696,7 +696,7 @@ src/app/components/manage/settings/settings.component.html 45 - Date format + Datumsformat Short: @@ -704,7 +704,7 @@ src/app/components/manage/settings/settings.component.html 51 - Short: + Kuerz: Medium: @@ -712,7 +712,7 @@ src/app/components/manage/settings/settings.component.html 55 - Medium: + Mëttel: Long: @@ -720,7 +720,7 @@ src/app/components/manage/settings/settings.component.html 59 - Long: + Laang: Items per page @@ -728,7 +728,7 @@ src/app/components/manage/settings/settings.component.html 67 - Items per page + Elementer pro Säit Document editor @@ -736,7 +736,7 @@ src/app/components/manage/settings/settings.component.html 83 - Document editor + Dokumenteneditor Use PDF viewer provided by the browser @@ -744,7 +744,7 @@ src/app/components/manage/settings/settings.component.html 87 - Use PDF viewer provided by the browser + PDF-Betruechter vum Web-Browser notzen This is usually faster for displaying large PDF documents, but it might not work on some browsers. @@ -752,7 +752,7 @@ src/app/components/manage/settings/settings.component.html 87 - This is usually faster for displaying large PDF documents, but it might not work on some browsers. + Dëst ass normalerweis méi séier fir grouss PDF-Dokumenter, mee kéint op verschiddene Browseren net goen. Dark mode @@ -768,7 +768,7 @@ src/app/components/manage/settings/settings.component.html 97 - Use system settings + Systemastellungen notzen Enable dark mode @@ -784,7 +784,7 @@ src/app/components/manage/settings/settings.component.html 99 - Invert thumbnails in dark mode + Virschaubiller an Nuetsmodus invertéieren Bulk editing @@ -792,7 +792,7 @@ src/app/components/manage/settings/settings.component.html 103 - Bulk editing + Massebeaarbechtung Show confirmation dialogs @@ -800,7 +800,7 @@ src/app/components/manage/settings/settings.component.html 107 - Show confirmation dialogs + Bestätegungsmessagë weisen Deleting documents will always ask for confirmation. @@ -816,7 +816,7 @@ src/app/components/manage/settings/settings.component.html 108 - Apply on close + Späichere beim Zoumaachen Document processing @@ -824,7 +824,7 @@ src/app/components/manage/settings/settings.component.html 119 - Document processing + Dokumenteveraarbechtung Show notifications when new documents are detected @@ -872,7 +872,7 @@ src/app/components/manage/settings/settings.component.html 146 - Appears on + Erschéngt op Show on dashboard @@ -880,7 +880,7 @@ src/app/components/manage/settings/settings.component.html 149 - Show on dashboard + Op der Startsäit uweisen Show in sidebar @@ -888,7 +888,7 @@ src/app/components/manage/settings/settings.component.html 153 - Show in sidebar + An der Säiteleescht uweisen No saved views defined. @@ -896,7 +896,7 @@ src/app/components/manage/settings/settings.component.html 163 - No saved views defined. + Keng gespäichert Usiicht definéiert. 404 Not Found @@ -1016,7 +1016,7 @@ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html 13 - Inbox tag + Postaganks-Etikett Inbox tags are automatically assigned to all consumed documents. @@ -1032,7 +1032,7 @@ src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts 21 - Create new document type + Neien Dokumententyp erstellen Edit document type @@ -1040,7 +1040,7 @@ src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts 25 - Edit document type + Dokumententyp änneren Paperless-ng @@ -1049,7 +1049,7 @@ 11 app title - Paperless-ng + Paperless-ng Search documents @@ -1057,7 +1057,7 @@ src/app/components/app-frame/app-frame.component.html 15 - Search documents + Dokumenter sichen Logout @@ -1145,7 +1145,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 37 - Correspondent: + Korrespondent: Without correspondent @@ -1161,7 +1161,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 44 - Type: + Typ: Without document type @@ -1177,7 +1177,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 50 - Tag: + Etikett: Without any tag @@ -1249,7 +1249,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 19 - Filter tags + Etikette filteren Filter correspondents @@ -1257,7 +1257,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 27 - Filter correspondents + Korrespondente filteren Filter document types @@ -1265,7 +1265,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 34 - Filter document types + Dokumententype filteren Reset filters @@ -1273,7 +1273,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 57 - Reset filters + Filteren zrécksetzen Not assigned @@ -1282,7 +1282,7 @@ 166 Filter drop down element to filter for documents with no correspondent/type/tag assigned - Not assigned + Net zougewisen Apply @@ -1290,7 +1290,7 @@ src/app/components/common/filterable-dropdown/filterable-dropdown.component.html 26 - Apply + Applizéieren Last 7 days @@ -1549,7 +1549,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 201 - Delete confirm + Läsche bestätegen This operation will permanently delete selected document(s). @@ -1573,7 +1573,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 205 - Delete document(s) + Dokument(er) läschen Select: @@ -1581,7 +1581,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 10 - Select: + Auswielen: All @@ -1702,7 +1702,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 118 - Connecting... + Gëtt verbonnen... Uploading... @@ -1710,7 +1710,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 123 - Uploading... + Gëtt eropgelueden... Upload complete, waiting... @@ -1718,7 +1718,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 126 - Upload complete, waiting... + Fichier eropgelueden. Waarden... HTTP error: @@ -1726,7 +1726,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 136 - HTTP error: + HTTP-Feeler: Upload new documents @@ -1734,7 +1734,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 1 - Upload new documents + Nei Dokumenter eroplueden Drop documents here or @@ -1742,7 +1742,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 13 - Drop documents here or + Dokumenter hei ofleeën oder Browse files @@ -1750,7 +1750,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 13 - Browse files + Fichieren duerchsichen Dismiss completed @@ -1784,7 +1784,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 1 - First steps + Éischt Schrëtter Paperless is running! :) @@ -1792,7 +1792,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 5 - Paperless is running! :) + Paperless-ng leeft! :) You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. @@ -1856,7 +1856,7 @@ src/app/components/common/select-dialog/select-dialog.component.ts 21 - Please select an object + W. e. g. en Objet auswielen Invalid date. @@ -2084,7 +2084,7 @@ src/app/services/consumer-status.service.ts 23 - Processing document... + Dokument gëtt veraarbecht... Generating thumbnail... @@ -2092,7 +2092,7 @@ src/app/services/consumer-status.service.ts 24 - Generating thumbnail... + Virschaubild gëtt generéiert... Retrieving date from document... @@ -2100,7 +2100,7 @@ src/app/services/consumer-status.service.ts 25 - Retrieving date from document... + Datum vum Dokument gëtt ermëttelt... Saving document... From f766eeb460e256922281f3f357c3910d7ce530b0 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 16:22:08 +0200 Subject: [PATCH 854/898] New translations django.po (Luxembourgish) [ci skip] --- src/locale/lb_LU/LC_MESSAGES/django.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/locale/lb_LU/LC_MESSAGES/django.po b/src/locale/lb_LU/LC_MESSAGES/django.po index 05fc99bd7..bda9d5ebc 100644 --- a/src/locale/lb_LU/LC_MESSAGES/django.po +++ b/src/locale/lb_LU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-16 13:01\n" +"PO-Revision-Date: 2021-07-16 14:22\n" "Last-Translator: \n" "Language-Team: Luxembourgish\n" "Language: lb_LU\n" @@ -490,7 +490,7 @@ msgstr "Aktiounen" #: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "D'Aktioun, déi op E-Mailen applizéiert sill ginn. Dës Aktioun gëtt just ausgefouert, wann Dokumenter aus der E-Mail veraarbecht goufen. E-Mailen ouni Unhank bleiwe komplett onberéiert." #: paperless_mail/admin.py:58 msgid "Metadata" @@ -498,7 +498,7 @@ msgstr "Metadaten" #: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "Den Dokumenter, déi iwwer dës Reegel veraarbecht ginn, automatesch Metadaten zouweisen. Wann hei keng Etiketten, Typen oder Korrespondenten zougewise ginn, veraarbecht Paperless-ng trotzdeem all zoutreffend Reegelen déi definéiert sinn." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -534,7 +534,7 @@ msgstr "IMAP-Port" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "Dëst ass normalerweis 143 fir onverschësselt oder STARTTLS-Connectiounen an 993 fir SSL-Connectiounen." #: paperless_mail/models.py:40 msgid "IMAP security" @@ -554,7 +554,7 @@ msgstr "Zeechesaz" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Den Zeechesaz dee benotzt gëtt wa mam Mailserver kommunizéiert gëtt, wéi beispillsweis 'UTF-8' oder 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -570,15 +570,15 @@ msgstr "Just Unhäng veraarbechten." #: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "All d'Fichiere veraarbechten, inklusiv \"inline\"-Unhäng." #: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "Als gelies markéieren, gelies Mailen net traitéieren" #: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "Als wichteg markéieren, markéiert E-Mailen net veraarbechten" #: paperless_mail/models.py:88 msgid "Move to specified folder" @@ -674,7 +674,7 @@ msgstr "Parameter fir Aktioun" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Zousätzleche Parameter fir d'Aktioun déi hei driwwer ausgewielt ass, zum Beispill den Numm vum Zildossier fir d'Aktioun \"An e virdefinéierten Dossier réckelen\". Ënnerdossiere musse mat Punkte getrennt ginn." #: paperless_mail/models.py:184 msgid "assign title from" From f9781d8b5c2b3b0c34ff93c829a2c12ded5cddb0 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 16:22:10 +0200 Subject: [PATCH 855/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 86 ++++++++++++++-------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 72f41fdb4..2233abda7 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -32,7 +32,7 @@ src/app/app.component.ts 59 - Could not add : + Konnt de Fichier net dobäisetzen: New document detected @@ -48,7 +48,7 @@ src/app/app.component.ts 65 - Document is being processed by paperless. + Dokument gëtt vu Paperless-ng veraarbecht. Documents @@ -592,7 +592,7 @@ src/app/components/manage/settings/settings.component.ts 68 - Saved view "" deleted. + Gespäichert Usiicht "" geläscht. Settings saved successfully. @@ -600,7 +600,7 @@ src/app/components/manage/settings/settings.component.ts 89 - Settings saved successfully. + Astellungen erfollegräich gespäichert. Use system language @@ -616,7 +616,7 @@ src/app/components/manage/settings/settings.component.ts 100 - Use date format of display language + Datumsformat vun der Sprooch vum Interface notzen Error while storing settings on server: @@ -624,7 +624,7 @@ src/app/components/manage/settings/settings.component.ts 117 - Error while storing settings on server: + Feeler beim Späichere vun den Astellungen um Server: Settings @@ -808,7 +808,7 @@ src/app/components/manage/settings/settings.component.html 107 - Deleting documents will always ask for confirmation. + Beim Läsche vun Dokumenter gëtt ëmmer no enger Bestätegung gefrot. Apply on close @@ -832,7 +832,7 @@ src/app/components/manage/settings/settings.component.html 123 - Show notifications when new documents are detected + Notifikatiounen uweise wann nei Dokumenter detektéiert ginn Show notifications when document processing completes successfully @@ -840,7 +840,7 @@ src/app/components/manage/settings/settings.component.html 124 - Show notifications when document processing completes successfully + Notifikatiounen uweise wann d'Dokumentveraarbechtung erfollegräich ofgeschloss ass Show notifications when document processing fails @@ -848,7 +848,7 @@ src/app/components/manage/settings/settings.component.html 125 - Show notifications when document processing fails + Notifikatiounen uweise wann d'Dokumenteveraarbechtung feelschléit Suppress notifications on dashboard @@ -856,7 +856,7 @@ src/app/components/manage/settings/settings.component.html 126 - Suppress notifications on dashboard + Notifikatiounen op der Startsäit ënnerdrécken This will suppress all messages about document processing status on the dashboard. @@ -864,7 +864,7 @@ src/app/components/manage/settings/settings.component.html 126 - This will suppress all messages about document processing status on the dashboard. + Doduerch ginn all Messagen iwwer Dokumenteveraarbechtung op der Startsäit ënnerdréckt. Appears on @@ -1024,7 +1024,7 @@ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html 13 - Inbox tags are automatically assigned to all consumed documents. + Postaganks-Etikette ginn automatesch allen nei veraarbechten Dokumenter zougewisen. Create new document type @@ -1410,7 +1410,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 74 - Error executing bulk operation: + Feeler beim Ausféiere vun der Masseveraarbechtung: "" @@ -1461,7 +1461,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 130 - This operation will add the tag "" to selected document(s). + Dës Operatioun setzt d'Etikett "" bei ausgewielt Dokument(er). This operation will add the tags to selected document(s). @@ -1469,7 +1469,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 132 - This operation will add the tags to selected document(s). + Dës Operatioun setzt d'Etiketten bei ausgewielt Dokument(er). This operation will remove the tag "" from selected document(s). @@ -1477,7 +1477,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 135 - This operation will remove the tag "" from selected document(s). + Dës Operatioun läscht d'Etikett "" bei ausgewielt Dokument(er). This operation will remove the tags from selected document(s). @@ -1485,7 +1485,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 137 - This operation will remove the tags from selected document(s). + Dës Operatioun läscht d'Etiketten bei ausgewielt Dokument(er). This operation will add the tags and remove the tags on selected document(s). @@ -1493,7 +1493,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 139 - This operation will add the tags and remove the tags on selected document(s). + Dës Operatioun setzt d'Etiketten dobäi a läscht d'Etiketten bei ausgewielt Dokument(er). Confirm correspondent assignment @@ -1501,7 +1501,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 159 - Confirm correspondent assignment + D'Zouweisung vum Korrespondent bestätegen This operation will assign the correspondent "" to selected document(s). @@ -1509,7 +1509,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 161 - This operation will assign the correspondent "" to selected document(s). + Dës Operatioun weist de Korrespondent "" ausgewielt Dokument(er) zou. This operation will remove the correspondent from selected document(s). @@ -1517,7 +1517,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 163 - This operation will remove the correspondent from selected document(s). + Dës Operatioun läscht de Korrespondent bei ausgewielt Dokument(er). Confirm document type assignment @@ -1525,7 +1525,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 182 - Confirm document type assignment + Zouweisung vum Dokumententyp bestätegen This operation will assign the document type "" to selected document(s). @@ -1533,7 +1533,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 184 - This operation will assign the document type "" to selected document(s). + Dës Operatioun weist den Dokumententyp "" ausgewielt Dokument(er) zou. This operation will remove the document type from selected document(s). @@ -1541,7 +1541,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 186 - This operation will remove the document type from selected document(s). + Dës Operatioun läscht den Dokumententyp bei ausgewielt Dokument(er). Delete confirm @@ -1557,7 +1557,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 202 - This operation will permanently delete selected document(s). + Dës Operatioun wäert ausgewielt Dokument(er) permanent läschen. This operation cannot be undone. @@ -1565,7 +1565,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 203 - This operation cannot be undone. + Dës Operatioun kann net réckgängeg gemaach ginn. Delete document(s) @@ -1678,7 +1678,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 32 - Processing: + Veraarbechten: Failed: @@ -1686,7 +1686,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 35 - Failed: + Feelgeschloen: Added: @@ -1694,7 +1694,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts 38 - Added: + Dobäigesat: Connecting... @@ -1759,7 +1759,7 @@ 4 This button dismisses all status messages about processed documents on the dashboard (failed and successful) - Dismiss completed + Déi fäerdeg traitéiert verstoppen {VAR_PLURAL, plural, =1 {One more document} other { more documents}} @@ -1768,7 +1768,7 @@ 25 This is shown as a summary line when there are more than 5 document in the processing pipeline. - {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + {VAR_PLURAL, plural, =1 {Ee weidert Dokument} other { weider Dokumenter}} Open document @@ -1800,7 +1800,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 6,7 - You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + Nei Dokumenter kënnen eropgeluede ginn andeem s se an d'Eroplued-Këscht op der rietser Säit ofgeluecht oder an de konfiguréierte Veraarbechtungs-Dossier kopéiert ginn. Se erschéngen dann an der Dokumentelëscht. Nodeem s d'Dokumenter mat e puer Metadaten markéiert sinn, kann de Filtermechanismus benotzt gi fir personaliséiert Vuen ze konfiguréieren (wéi beispillsweis "Rezent dobäikomm", "Als To Do markéiert") an déi erschéngen op der Startsäit amplaz vun dësem Message. Paperless offers some more features that try to make your life easier: @@ -1808,7 +1808,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 8 - Paperless offers some more features that try to make your life easier: + Paperless bitt e puer weider Funktioune fir d'Liewe méi einfach ze maachen: Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. @@ -1816,7 +1816,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 10 - Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + Nodeem s de puer Dokumenter dobäigesat goufen a mat Metadate markéiert sinn, ka paperless dës Metadaten bei neien Dokumenter automatesch dobäisetzen. You can configure paperless to read your mails and add documents from attached files. @@ -2068,7 +2068,7 @@ src/app/services/consumer-status.service.ts 21 - Received new file. + Neie Fichier emfaangen. File type not supported. @@ -2076,7 +2076,7 @@ src/app/services/consumer-status.service.ts 22 - File type not supported. + Fichierstyp net ënnerstëtzt. Processing document... @@ -2229,7 +2229,7 @@ src/app/components/manage/generic-list/generic-list.component.ts 104 - Associated documents will not be deleted. + Assoziéiert Dokumenter ginn net geläscht. Delete @@ -2245,7 +2245,7 @@ src/app/components/manage/generic-list/generic-list.component.ts 114 - Error while deleting element: + Feeler beim Läsche vum Element: Any word @@ -2261,7 +2261,7 @@ src/app/data/matching-model.ts 12 - Any: Document contains any of these words (space separated) + Iergendee Wuert: Dokument enthält eent vun dëse Wierder (getrennt mat engem Espace) All words @@ -2277,7 +2277,7 @@ src/app/data/matching-model.ts 13 - All: Document contains all of these words (space separated) + Iergendee Wuert: Dokument enthält all dës Wierder (getrennt mat engem Espace) Exact match @@ -2293,7 +2293,7 @@ src/app/data/matching-model.ts 14 - Exact: Document contains this string + Exakt: Dokument enthält dësen Text Regular expression @@ -2309,7 +2309,7 @@ src/app/data/matching-model.ts 15 - Regular expression: Document matches this regular expression + Regulären Ausdrock: D'Dokument passt zu dësem regulären Ausdrock Fuzzy word From bcd801b47b2cf956eaca254d7fd4e146983faf2e Mon Sep 17 00:00:00 2001 From: Michel Weimerskirch Date: Fri, 16 Jul 2021 16:43:55 +0200 Subject: [PATCH 856/898] Added support for Luxembourgish (lb_LU) as an interface language --- src-ui/angular.json | 3 ++- src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 3 ++- src/paperless/settings.py | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src-ui/angular.json b/src-ui/angular.json index f1d646c9f..b9659fd07 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -27,7 +27,8 @@ "ru-RU": "src/locale/messages.ru_RU.xlf", "es-ES": "src/locale/messages.es_ES.xlf", "pl-PL": "src/locale/messages.pl_PL.xlf", - "sv-SE": "src/locale/messages.sv_SE.xlf" + "sv-SE": "src/locale/messages.sv_SE.xlf", + "lb-LU": "src/locale/messages.lb_LU.xlf" } }, "architect": { diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index b3ce79a7b..43e5865ff 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -76,6 +76,7 @@ import localeRu from '@angular/common/locales/ru'; import localeEs from '@angular/common/locales/es'; import localePl from '@angular/common/locales/pl'; import localeSv from '@angular/common/locales/sv'; +import localeLb from '@angular/common/locales/lb'; registerLocaleData(localeFr) @@ -90,6 +91,7 @@ registerLocaleData(localeRu) registerLocaleData(localeEs) registerLocaleData(localePl) registerLocaleData(localeSv) +registerLocaleData(localeLb) @NgModule({ declarations: [ diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 17af29558..7b467f6ee 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -99,7 +99,8 @@ export class SettingsService { {code: "ru-ru", name: $localize`Russian`, englishName: "Russian", dateInputFormat: "dd.mm.yyyy"}, {code: "es-es", name: $localize`Spanish`, englishName: "Spanish", dateInputFormat: "dd/mm/yyyy"}, {code: "pl-pl", name: $localize`Polish`, englishName: "Polish", dateInputFormat: "dd.mm.yyyy"}, - {code: "sv-se", name: $localize`Swedish`, englishName: "Swedish", dateInputFormat: "yyyy-mm-dd"} + {code: "sv-se", name: $localize`Swedish`, englishName: "Swedish", dateInputFormat: "yyyy-mm-dd"}, + {code: "lb-lu", name: $localize`Luxembourgish`, englishName: "Luxembourgish", dateInputFormat: "dd.mm.yyyy"} ] } diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 63d014ede..254c7a6ce 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -313,6 +313,7 @@ LANGUAGES = [ ("es-es", _("Spanish")), ("pl-pl", _("Polish")), ("sv-se", _("Swedish")), + ("lb-lu", _("Luxembourgish")), ] LOCALE_PATHS = [ From b4de709772bf9be942871bed95aa24d35e80493b Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 16 Jul 2021 17:20:14 +0200 Subject: [PATCH 857/898] New translations messages.xlf (Luxembourgish) [ci skip] --- src-ui/src/locale/messages.lb_LU.xlf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 2233abda7..2b6f191a9 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -1824,7 +1824,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 11 - You can configure paperless to read your mails and add documents from attached files. + Paperless ka konfiguréiert ginn, fir E-Mailen ze liesen an Dokumenter aus ugehaangene Fichieren anzeliesen. Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. @@ -1832,7 +1832,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 13 - Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + Consultéiert d'Dokumentatioun fir méi Detailer zu der Verwendung vun dëse Funktiounen. De Beräich iwwer déi allgemeng Benotzung huet och e puer Informatiounen, wéi paperless am Allgemenge benotzt ka ginn. Metadata @@ -1872,7 +1872,7 @@ src/app/components/document-asn/document-asn.component.html 1 - Searching document with asn + Dokument mat ASN gëtt gesicht Yes From 8336efa0bdff9de695fd0d91178ebc222bcfc55f Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Fri, 23 Jul 2021 10:27:31 +0200 Subject: [PATCH 858/898] recommend Brother MFC-L2750DW --- docs/scanners.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/scanners.rst b/docs/scanners.rst index 742dffc05..6a234d8f6 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -30,6 +30,8 @@ Physical scanners +---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-L5850DW`_ | yes | | | yes |`holzhannes`_ | +---------+----------------+-----+-----+-----+------+----------------+ +| Brother | `MFC-L2750DW`_ | yes | | yes | yes |`muued`_ | ++---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-J5910DW`_ | yes | | | |`bmsleight`_ | +---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-9142CDN`_ | yes | | yes | |`REOLDEV`_ | @@ -42,6 +44,7 @@ Physical scanners +---------+----------------+-----+-----+-----+------+----------------+ .. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw +.. _MFC-L2750DW: https://www.brother.de/drucker/laserdrucker/mfc-l2750dw .. _ADS-1700W: https://www.brother-usa.com/products/ads1700w .. _ADS-1600W: https://www.brother-usa.com/products/ads1600w .. _ADS-1500W: https://www.brother.ca/en/p/ads1500w @@ -63,6 +66,7 @@ Physical scanners .. _jonaswinkler: https://github.com/jonaswinkler .. _holzhannes: https://github.com/holzhannes .. _ytzelf: https://github.com/ytzelf +.. _muued: https://github.com/muued Mobile phone software ===================== From d0798a7c9463b1ab07b69566f39f90d7d395f900 Mon Sep 17 00:00:00 2001 From: pewter77 Date: Fri, 30 Jul 2021 23:21:22 +0800 Subject: [PATCH 859/898] update configuration docs for languages Due to tesseract naming scheme, packages use '-' but the internal OCR uses '_' . This is to clarify in the documentation that this is the case for new users. --- docs/configuration.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/configuration.rst b/docs/configuration.rst index 62880208f..dd1e6341c 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -257,6 +257,8 @@ PAPERLESS_OCR_LANGUAGE= languages enabled. Defaults to "eng". + + Note: If your language contains a '-' such as chi-sim, you must use chi_sim PAPERLESS_OCR_MODE= Tell paperless when and how to perform ocr on your documents. Four modes From 07361447ea529c4c0a3d5ea5a34e46590a027a6c Mon Sep 17 00:00:00 2001 From: fignew <215998+fignew@users.noreply.github.com> Date: Sat, 31 Jul 2021 14:32:36 -0400 Subject: [PATCH 860/898] Add Epson ES-580W recommendation and organize table --- docs/scanners.rst | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index 742dffc05..f1cea0af6 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -18,13 +18,13 @@ Physical scanners +---------+----------------+-----+-----+-----+------+----------------+ | | | FTP | NFS | SMB | SMTP | | +=========+================+=====+=====+=====+======+================+ -| Brother | `ADS-1700W`_ | yes | no | yes | yes |`holzhannes`_ | +| Brother | `ADS-1700W`_ | yes | | yes | yes |`holzhannes`_ | +---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `ADS-1600W`_ | yes | no | yes | yes |`holzhannes`_ | +| Brother | `ADS-1600W`_ | yes | | yes | yes |`holzhannes`_ | +---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `ADS-1500W`_ | yes | no | yes | yes |`danielquinn`_ | +| Brother | `ADS-1500W`_ | yes | | yes | yes |`danielquinn`_ | +---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `ADS-1100W`_ | yes | no | no | no |`ytzelf`_ | +| Brother | `ADS-1100W`_ | yes | | | |`ytzelf`_ | +---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-J6930DW`_ | yes | | | |`ayounggun`_ | +---------+----------------+-----+-----+-----+------+----------------+ @@ -34,10 +34,12 @@ Physical scanners +---------+----------------+-----+-----+-----+------+----------------+ | Brother | `MFC-9142CDN`_ | yes | | yes | |`REOLDEV`_ | +---------+----------------+-----+-----+-----+------+----------------+ -| Fujitsu | `ix500`_ | yes | | yes | |`eonist`_ | +| Epson | `ES-580W`_ | yes | | yes | yes |`fignew`_ | +---------+----------------+-----+-----+-----+------+----------------+ | Epson | `WF-7710DWF`_ | yes | | yes | |`Skylinar`_ | +---------+----------------+-----+-----+-----+------+----------------+ +| Fujitsu | `ix500`_ | yes | | yes | |`eonist`_ | ++---------+----------------+-----+-----+-----+------+----------------+ | Fujitsu | `S1300i`_ | yes | | yes | |`jonaswinkler`_ | +---------+----------------+-----+-----+-----+------+----------------+ @@ -49,19 +51,21 @@ Physical scanners .. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW .. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw .. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn -.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/ +.. _ES-580W: https://epson.com/Support/Scanners/ES-Series/Epson-WorkForce-ES-580W/s/SPT_B11B258201 .. _WF-7710DWF: https://www.epson.de/en/products/printers/inkjet-printers/for-home/workforce-wf-7710dwf +.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/ .. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/ -.. _danielquinn: https://github.com/danielquinn .. _ayounggun: https://github.com/ayounggun .. _bmsleight: https://github.com/bmsleight +.. _danielquinn: https://github.com/danielquinn .. _eonist: https://github.com/eonist +.. _fignew: https://github.com/fignew +.. _holzhannes: https://github.com/holzhannes +.. _jonaswinkler: https://github.com/jonaswinkler .. _REOLDEV: https://github.com/REOLDEV .. _Skylinar: https://github.com/Skylinar -.. _jonaswinkler: https://github.com/jonaswinkler -.. _holzhannes: https://github.com/holzhannes .. _ytzelf: https://github.com/ytzelf Mobile phone software From 4498cb422c2a56a8d9dbd1640882c1f5c3944f3e Mon Sep 17 00:00:00 2001 From: Kevin Kandlbinder Date: Wed, 4 Aug 2021 15:23:12 +0200 Subject: [PATCH 861/898] Add Doxie Q to scanners.rst The Doxie Q / Q2 is a budget-scanner I've been using for my paperless-usage. It has POST-Support to a custom endpoint like paperless over WiFi and has a rather open API (See https://help.getdoxie.com/doxieq/wifi/api/). --- docs/scanners.rst | 60 ++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index 742dffc05..f29cb0328 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -13,33 +13,35 @@ that works right for you based on recommendations from other Paperless users. Physical scanners ================= -+---------+----------------+-----+-----+-----+------+----------------+ -| Brand | Model | Supports | Recommended By | -+---------+----------------+-----+-----+-----+------+----------------+ -| | | FTP | NFS | SMB | SMTP | | -+=========+================+=====+=====+=====+======+================+ -| Brother | `ADS-1700W`_ | yes | no | yes | yes |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `ADS-1600W`_ | yes | no | yes | yes |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `ADS-1500W`_ | yes | no | yes | yes |`danielquinn`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `ADS-1100W`_ | yes | no | no | no |`ytzelf`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `MFC-J6930DW`_ | yes | | | |`ayounggun`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `MFC-L5850DW`_ | yes | | | yes |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `MFC-J5910DW`_ | yes | | | |`bmsleight`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Brother | `MFC-9142CDN`_ | yes | | yes | |`REOLDEV`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Fujitsu | `ix500`_ | yes | | yes | |`eonist`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Epson | `WF-7710DWF`_ | yes | | yes | |`Skylinar`_ | -+---------+----------------+-----+-----+-----+------+----------------+ -| Fujitsu | `S1300i`_ | yes | | yes | |`jonaswinkler`_ | -+---------+----------------+-----+-----+-----+------+----------------+ ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brand | Model | Supports | Recommended By | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| | | FTP | NFS | SMB | SMTP | API [1]_ | | ++=========+================+=====+=====+=====+======+==========+================+ +| Brother | `ADS-1700W`_ | yes | no | yes | yes | |`holzhannes`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `ADS-1600W`_ | yes | no | yes | yes | |`holzhannes`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `ADS-1500W`_ | yes | no | yes | yes | |`danielquinn`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `ADS-1100W`_ | yes | no | no | no | |`ytzelf`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `MFC-J6930DW`_ | yes | | | | |`ayounggun`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `MFC-L5850DW`_ | yes | | | yes | |`holzhannes`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `MFC-J5910DW`_ | yes | | | | |`bmsleight`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Brother | `MFC-9142CDN`_ | yes | | yes | | |`REOLDEV`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Fujitsu | `ix500`_ | yes | | yes | | |`eonist`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Epson | `WF-7710DWF`_ | yes | | yes | | |`Skylinar`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Fujitsu | `S1300i`_ | yes | | yes | | |`jonaswinkler`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ +| Doxie | `Q2`_ | no | no | no | no | yes |`Unkn0wnCat`_ | ++---------+----------------+-----+-----+-----+------+----------+----------------+ .. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw .. _ADS-1700W: https://www.brother-usa.com/products/ads1700w @@ -52,6 +54,7 @@ Physical scanners .. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/ .. _WF-7710DWF: https://www.epson.de/en/products/printers/inkjet-printers/for-home/workforce-wf-7710dwf .. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/ +.. _Q2: https://www.getdoxie.com/product/doxie-q/ .. _danielquinn: https://github.com/danielquinn @@ -63,6 +66,9 @@ Physical scanners .. _jonaswinkler: https://github.com/jonaswinkler .. _holzhannes: https://github.com/holzhannes .. _ytzelf: https://github.com/ytzelf +.. _Unkn0wnCat: https://github.com/Unkn0wnCat + +.. [1] Scanners with API Integration allow to push scanned documents directly to :ref:`Paperless API `, sometimes referred to as Webhook or Document POST. Mobile phone software ===================== From ad6157e14095746e3fa1057a5b7043a256457760 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 18 Aug 2021 17:47:53 +0200 Subject: [PATCH 862/898] switch to python 3.9 --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69fac022e..8e297cda2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.7 + python-version: 3.9 - name: Get pip cache dir id: pip-cache @@ -59,7 +59,7 @@ jobs: name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.7 + python-version: 3.9 - name: Get pip cache dir id: pip-cache @@ -100,7 +100,7 @@ jobs: runs-on: ubuntu-20.04 strategy: matrix: - python-version: ['3.6', '3.7', '3.8', '3.9'] + python-version: ['3.7', '3.8', '3.9'] fail-fast: false steps: - @@ -136,7 +136,7 @@ jobs: pytest - name: Publish coverage results - if: matrix.python-version == '3.8' + if: matrix.python-version == '3.9' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # https://github.com/coveralls-clients/coveralls-python/issues/251 @@ -182,7 +182,7 @@ jobs: name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.7 + python-version: 3.9 - name: Install dependencies run: | From 205013d7cb3f64592b9318e4d36c48b944d7a0ec Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:21:31 +0200 Subject: [PATCH 863/898] update dockerfile --- Dockerfile | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0c0efa532..8ddb56479 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ RUN git clone https://github.com/agl/jbig2enc . RUN ./autogen.sh RUN ./configure && make -FROM python:3.7-slim +FROM python:3.9-slim-bullseye # Binary dependencies RUN apt-get update \ @@ -33,16 +33,11 @@ RUN apt-get update \ zlib1g \ ghostscript \ icc-profiles-free \ - && echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \ - && apt-get update \ - && apt-get -y --no-install-recommends install \ - # fixes sudo / gosu issues - libseccomp2 \ - # Mime type detection + # Mime type detection file \ libmagic-dev \ media-types \ - # OCRmyPDF dependencies + # OCRmyPDF dependencies liblept5 \ qpdf \ tesseract-ocr \ From fe37cea0d8cb514300c865ba7e192a562f38cb3e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:21:41 +0200 Subject: [PATCH 864/898] update python dependencies --- Pipfile | 13 +- Pipfile.lock | 957 +++++++++++++++++++++++++++------------------------ 2 files changed, 513 insertions(+), 457 deletions(-) diff --git a/Pipfile b/Pipfile index 9fea4c208..788c21386 100644 --- a/Pipfile +++ b/Pipfile @@ -21,8 +21,7 @@ fuzzywuzzy = {extras = ["speedup"], version = "*"} gunicorn = "*" imap-tools = "*" langdetect = "*" -# numpy 1.20.0 drops python 3.6 support -numpy = "~=1.19.5" +numpy = "~=1.21.0" pathvalidate = "*" pillow = "~=8.1" pikepdf = "~=2.5" @@ -34,13 +33,11 @@ psycopg2-binary = "*" redis = "*" # Pinned because aarch64 wheels and updates cause warnings when loading the classifier model. scikit-learn="==0.24.0" -# Prevent scipy updates because 1.6 is incompatible with python 3.6 -scipy="~=1.5.4" -whitenoise = "~=5.2.0" -watchdog = "~=1.0.0" +whitenoise = "~=5.3.0" +watchdog = "~=2.1.0" whoosh="~=2.7.4" inotifyrecursive = "~=0.3.4" -ocrmypdf = "~=12.0" +ocrmypdf = "~=12.3" tqdm = "*" tika = "*" # TODO: This will sadly also install daphne+dependencies, @@ -50,7 +47,7 @@ channels-redis = "*" uvicorn = {extras = ["standard"], version = "*"} concurrent-log-handler = "*" # uvloop 0.15+ incompatible with python 3.6 -uvloop = "~=0.14.0" +uvloop = "~=0.15" cryptography = "~=3.4" "pdfminer.six" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index b147239b0..32d21e50a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "deaa52fcf234236357749005f429cea100e817c694d8f383d931236e02e8bab0" + "sha256": "3a5b5284e052306a4065c2993a87a3f3cb744a3261e18ac26f1a17a6a8693268" }, "pipfile-spec": 6, "requires": {}, @@ -28,19 +28,19 @@ }, "arrow": { "hashes": [ - "sha256:8cbe6a629b1c54ae11b52d6d9e70890089241958f63bc59467e277e34b7a5378", - "sha256:b8fe13abf3517abab315e09350c903902d1447bd311afbc17547ba1cb3ff5bd8" + "sha256:77a60a4db5766d900a2085ce9074c5c7b8e2c99afeaa98ad627637ff6f292510", + "sha256:dee7602f6c60e3ec510095b5e301441bc56288cb8f51def14dcb3079f623823a" ], "markers": "python_version >= '3.6'", - "version": "==1.1.0" + "version": "==1.1.1" }, "asgiref": { "hashes": [ - "sha256:92906c611ce6c967347bbfea733f13d6313901d54dcca88195eaeb52b2a8e8ee", - "sha256:d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78" + "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9", + "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214" ], "markers": "python_version >= '3.6'", - "version": "==3.3.4" + "version": "==3.4.1" }, "async-timeout": { "hashes": [ @@ -76,10 +76,11 @@ }, "blessed": { "hashes": [ - "sha256:1312879f971330a1b7f2c6341f2ae7e2cbac244bfc9d0ecfbbecd4b0293bc755", - "sha256:5b5e2f0563d5a668c282f3f5946f7b1abb70c85829461900e607e74d7725106e" + "sha256:8b09936def6bc06583db99b65636b980075733e13550cb6af262ce724a55da23", + "sha256:dd7c0d33db9a2e7f597b446996484d0ed46e1586239db064fb5025008937dcae" ], - "version": "==1.18.0" + "markers": "python_version >= '2.7'", + "version": "==1.18.1" }, "certifi": { "hashes": [ @@ -90,75 +91,72 @@ }, "cffi": { "hashes": [ - "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", - "sha256:04c468b622ed31d408fea2346bec5bbffba2cc44226302a0de1ade9f5ea3d373", - "sha256:06d7cd1abac2ffd92e65c0609661866709b4b2d82dd15f611e602b9b188b0b69", - "sha256:06db6321b7a68b2bd6df96d08a5adadc1fa0e8f419226e25b2a5fbf6ccc7350f", - "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", - "sha256:0f861a89e0043afec2a51fd177a567005847973be86f709bbb044d7f42fc4e05", - "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", - "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", - "sha256:1bf1ac1984eaa7675ca8d5745a8cb87ef7abecb5592178406e55858d411eadc0", - "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", - "sha256:24a570cd11895b60829e941f2613a4f79df1a27344cbbb82164ef2e0116f09c7", - "sha256:24ec4ff2c5c0c8f9c6b87d5bb53555bf267e1e6f70e52e5a9740d32861d36b6f", - "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", - "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", - "sha256:293e7ea41280cb28c6fcaaa0b1aa1f533b8ce060b9e701d78511e1e6c4a1de76", - "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", - "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", - "sha256:3c3f39fa737542161d8b0d680df2ec249334cd70a8f420f71c9304bd83c3cbed", - "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", - "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", - "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", - "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", - "sha256:5560dbf8deedbffb638d8a2da31da91094db361cc07f8a501a339b2daae2cbcc", - "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", - "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", - "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", - "sha256:681d07b0d1e3c462dd15585ef5e33cb021321588bebd910124ef4f4fb71aef55", - "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", - "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", - "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", - "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", - "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", - "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", - "sha256:9338beed13d880320450d95c9e07ccf839faa3ea7b75d788f4ed46d845044a71", - "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", - "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", - "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", - "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", - "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", - "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", - "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", - "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", - "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", - "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", - "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", - "sha256:cc5a8e069b9ebfa22e26d0e6b97d6f9781302fe7f4f2b8776c3e1daea35f1adc", - "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", - "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", - "sha256:df5052c5d867c1ea0b311fb7c3cd28b19df469c056f7fdcfe88c7473aa63e333", - "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", - "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" + "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d", + "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771", + "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872", + "sha256:1f53e2a841e57da2546cd033668485feaf5dec20ed730e90765e138a3117a8ce", + "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c", + "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc", + "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762", + "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202", + "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5", + "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548", + "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a", + "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f", + "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20", + "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218", + "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c", + "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e", + "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56", + "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224", + "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a", + "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2", + "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a", + "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819", + "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346", + "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b", + "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e", + "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534", + "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb", + "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0", + "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156", + "sha256:c993e9eefcd5d3b6ff6bf16e85a3c5c331ec8ac47d4b1a942da58aaf46f16519", + "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd", + "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87", + "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc", + "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195", + "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33", + "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f", + "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d", + "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd", + "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728", + "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7", + "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca", + "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99", + "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf", + "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e", + "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c", + "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5", + "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69", + "sha256:ff33cea1d8d00288900efac48b20257d1efe9df77ede3a3fcc397a343337407d" ], - "version": "==1.14.5" + "version": "==1.14.6" }, "channels": { "hashes": [ - "sha256:056b72e51080a517a0f33a0a30003e03833b551d75394d6636c885d4edb8188f", - "sha256:3f15bdd2138bb4796e76ea588a0a344b12a7964ea9b2e456f992fddb988a4317" + "sha256:0ff0422b4224d10efac76e451575517f155fe7c97d369b5973b116f22eeaf86c", + "sha256:fdd9a94987a23d8d7ebd97498ed8b8cc83163f37e53fc6c85098aba7a3bb8b75" ], "index": "pypi", - "version": "==3.0.3" + "version": "==3.0.4" }, "channels-redis": { "hashes": [ - "sha256:18d63f6462a58011740dc8eeb57ea4b31ec220eb551cb71b27de9c6779a549de", - "sha256:2fb31a63b05373f6402da2e6a91a22b9e66eb8b56626c6bfc93e156c734c5ae6" + "sha256:0a18ce279c15ba79b7985bb12b2d6dd0ac8a14e4ad6952681f4422a4cc4a5ea9", + "sha256:1abd5820ff1ed4ac627f8a219ad389e4c87e52e47a230929a7a474e95dd2c6c2" ], "index": "pypi", - "version": "==3.2.0" + "version": "==3.3.0" }, "chardet": { "hashes": [ @@ -168,6 +166,15 @@ "markers": "python_version >= '3.1'", "version": "==4.0.0" }, + "charset-normalizer": { + "hashes": [ + "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b", + "sha256:762c76ab955f265f68d4683641bb10d7f2723dbc10091505886e357e0b42760f", + "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3" + ], + "markers": "python_version >= '3'", + "version": "==2.0.4" + }, "click": { "hashes": [ "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a", @@ -205,12 +212,15 @@ "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959", "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6", "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873", + "sha256:2f258145b6ff52bfe4b8f4c8a36705012f449b4bc966ff53b405103e018d6dbc", "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2", "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713", "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1", "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177", "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250", "sha256:a79fef41233d4c535d28133627ce6c7ac73d5cc0eb7316331a5905bf01411f08", + "sha256:b01fd6f2737816cb1e08ed4807ae194404790eac7ad030b34f2ce72b332f5586", + "sha256:bf40af59ca2465b24e54f671b2de2c59257ddc4f7e5706dbd6930e26823668d3", "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca", "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d", "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" @@ -236,19 +246,21 @@ }, "django": { "hashes": [ - "sha256:66c9d8db8cc6fe938a28b7887c1596e42d522e27618562517cc8929eb7e7f296", - "sha256:ea735cbbbb3b2fba6d4da4784a0043d84c67c92f1fdf15ad6db69900e792c10f" + "sha256:1ef5b9e9d5d41990fa877fd5a205c72076f5edfd7157109238c810a60eadeda8", + "sha256:7f92413529aa0e291f3be78ab19be31aefb1e1c9a52cd59e130f505f27a51f13", + "sha256:f27f8544c9d4c383bbe007c57e3235918e258364577373d4920e9162837be022" ], "index": "pypi", - "version": "==3.2.4" + "version": "==3.2.6" }, "django-cors-headers": { "hashes": [ - "sha256:1ac2b1213de75a251e2ba04448da15f99bcfcbe164288ae6b5ff929dc49b372f", - "sha256:96069c4aaacace786a34ee7894ff680780ec2644e4268b31181044410fecd12e" + "sha256:3777bdb1f8472e898b3cd8a015862e334474f35791d9619f125eb65a83fee1e3", + "sha256:425c20ceffa42b9ac11b02611eece4ae6c5fef2ff0f039c14c1df20e00c80df8", + "sha256:4b8e13bf8d3df50ac4b986bd87085c3073dd56402ede109222ea34a774f9ec1b" ], "index": "pypi", - "version": "==3.7.0" + "version": "==3.8.0" }, "django-extensions": { "hashes": [ @@ -276,11 +288,11 @@ }, "django-q": { "hashes": [ - "sha256:681c7e91c58322d0a4ea6d5fa8df21e6e785123fd6ee7c86af201e6a1c08ddc1", - "sha256:db30266fadd6ab9336a8824291910ff1d1c28f7bc9d6e52cdaf33cc275ae6146" + "sha256:1b74ce3a8931990b136903e3a7bc9b07243282a2b5355117246f05ed5d076e68", + "sha256:5c6b4d530aa3aabf9c6aa57376da1ca2abf89a1562b77038b7a04e52a4a0a91b" ], "index": "pypi", - "version": "==1.3.8" + "version": "==1.3.9" }, "djangorestframework": { "hashes": [ @@ -368,6 +380,7 @@ "sha256:dcef843f8de4e2ff5e35e96ec2a4abbdf403bd0f732ead127bd27e51f38ac298", "sha256:de22905c5920f6a2af2fccc54a7897cf52f1d0a4b9de87f546c6fb70d13e4e0b", "sha256:e3447d9e074abf0e3cd85aef8131e01ab93f9f0e86654db7ac8a3f73c63706ce", + "sha256:f299820a91e907fcfb92ca45923bfc0653c7314c05f0dfef226c76c608a95f4a", "sha256:f52010e0a44e3d8530437e7da38d11fb822acfb0d5b12e9cd5ba655509937ca0", "sha256:f8196f739092a78e4f6b1b2172679ed3343c39c61a3e9d722ce6fcf1dac2824a" ], @@ -391,6 +404,7 @@ "sha256:cc9be041e428c10f8b6ab358c6b393648f9457094e1dcc11b4906026d43cd380", "sha256:d5682eeb10cca0606c4a8286a3391d4c3c5a36f0c448e71b8bd05be4e1694bfb", "sha256:dd38cad4599d58c23c01bca2102dcce30d61f6466328169bb17efb8a528f4d97", + "sha256:f8bfe0f77e373280f4878c8ed861c481eeadf62eb6d693e7aba4b059c1fd3c4c", "sha256:fd3b8905e21431ad306eeaf56644a68fdd621bf8f3097eff54d0f6bdf7262065" ], "version": "==0.2.0" @@ -412,20 +426,20 @@ }, "idna": { "hashes": [ - "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a", + "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.10" + "version": "==3.2" }, "imap-tools": { "hashes": [ - "sha256:3b15cea943ee84072ed6f3424df138aa1908dcee7d368ad81843e2166b8283e0", - "sha256:e4f47bcea98db7502efae4da973c7dded8b632b57bf4acf1d317742701bfb571" + "sha256:a4fafd33ed04dfaef48e8c1bd40b82d0e821d912d43a7ce96502029e9fc1da9e", + "sha256:b5f0dc2b4e45cf4a3724d0d845c218142e0cc01dbab220480dbc3c1cbf0bed69", + "sha256:f32284c3d55f17112b0e8db9a148106b391d5945277d9b89bd6bfd9712bdd6bf" ], "index": "pypi", - "version": "==0.41.0" + "version": "==0.46.0" }, "img2pdf": { "hashes": [ @@ -496,6 +510,7 @@ "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83", "sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04", "sha256:5c8c163396cc0df3fd151b927e74f6e4acd67160d6c33304e805b84293351d16", + "sha256:64812391546a18896adaa86c77c59a4998f33c24788cadc35789e55b727a37f4", "sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791", "sha256:6f12e1427285008fd32a6025e38e977d44d6382cf28e7201ed10d6c1698d2a9a", "sha256:74f69060f98a70e3654de3021cd8162859e0f30b9e69aed76ef2b7a2e3b84212", @@ -511,11 +526,13 @@ "sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa", "sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106", "sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d", + "sha256:c1a40c06fd5ba37ad39caa0b3144eb3772e813b5fb5b084198a985431c2f1e8d", "sha256:c47ff7e0a36d4efac9fd692cfa33fbd0636674c102e9e8d9b26e1b93a94e7617", "sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4", "sha256:cdaf11d2bd275bf391b5308f86731e5194a21af45fbaaaf1d9e8147b9160ea92", "sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0", "sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4", + "sha256:d412de95c77655e4ff8d2042eef3deaadee87f95d7d47fc3e6f4e2d107df87df", "sha256:d916d31fd85b2f78c76400d625076d9124de3e4bda8b016d25a050cc7d603f24", "sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2", "sha256:e1cbd3f19a61e27e011e02f9600837b921ac661f0c40560eefb366e4e4fb275e", @@ -553,6 +570,7 @@ "sha256:c82dc0ba34d620fb94d12a7725e9362958bb1be3938688a061f53ed86bee005a", "sha256:d6c64601af8f3893d17ec233237030e3110f11b8a962cb66720bf70c0141aa54", "sha256:d8167b84af26654c1124857d71650404336f4eb5cc06900667a493fc619ddd9f", + "sha256:d9c1976457ee552468a89315275e917f2997f9bddf219451888ccb425cfbf96c", "sha256:de6bd7990a2c2dabe926b7e62a92886ccbf809425c347ae7de277067f97c2887", "sha256:e36a812ef4705a291cdb4a2fd352f013134f26c6ff63477f20235138d1d21009", "sha256:e89ec55871ed5473a041c0495b7b4e6099f6263438e0bd04ccd8418f92d5d7f2", @@ -565,52 +583,49 @@ }, "numpy": { "hashes": [ - "sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94", - "sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080", - "sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e", - "sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c", - "sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76", - "sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371", - "sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c", - "sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2", - "sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a", - "sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb", - "sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140", - "sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28", - "sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f", - "sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d", - "sha256:6373751c4b6fd325606d29dd98dc2bf7092485ad20aafbfc6a177acd3b89059e", - "sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff", - "sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8", - "sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa", - "sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea", - "sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc", - "sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73", - "sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d", - "sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d", - "sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4", - "sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c", - "sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e", - "sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea", - "sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd", - "sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f", - "sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff", - "sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e", - "sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7", - "sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa", - "sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827", - "sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60" + "sha256:09858463db6dd9f78b2a1a05c93f3b33d4f65975771e90d2cf7aadb7c2f66edf", + "sha256:209666ce9d4a817e8a4597cd475b71b4878a85fa4b8db41d79fdb4fdee01dde2", + "sha256:298156f4d3d46815eaf0fcf0a03f9625fc7631692bd1ad851517ab93c3168fc6", + "sha256:30fc68307c0155d2a75ad19844224be0f2c6f06572d958db4e2053f816b859ad", + "sha256:423216d8afc5923b15df86037c6053bf030d15cc9e3224206ef868c2d63dd6dc", + "sha256:426a00b68b0d21f2deb2ace3c6d677e611ad5a612d2c76494e24a562a930c254", + "sha256:466e682264b14982012887e90346d33435c984b7fead7b85e634903795c8fdb0", + "sha256:51a7b9db0a2941434cd930dacaafe0fc9da8f3d6157f9d12f761bbde93f46218", + "sha256:52a664323273c08f3b473548bf87c8145b7513afd63e4ebba8496ecd3853df13", + "sha256:550564024dc5ceee9421a86fc0fb378aa9d222d4d0f858f6669eff7410c89bef", + "sha256:5de64950137f3a50b76ce93556db392e8f1f954c2d8207f78a92d1f79aa9f737", + "sha256:640c1ccfd56724f2955c237b6ccce2e5b8607c3bc1cc51d3933b8c48d1da3723", + "sha256:7fdc7689daf3b845934d67cb221ba8d250fdca20ac0334fea32f7091b93f00d3", + "sha256:805459ad8baaf815883d0d6f86e45b3b0b67d823a8f3fa39b1ed9c45eaf5edf1", + "sha256:92a0ab128b07799dd5b9077a9af075a63467d03ebac6f8a93e6440abfea4120d", + "sha256:9f2dc79c093f6c5113718d3d90c283f11463d77daa4e83aeeac088ec6a0bda52", + "sha256:a5109345f5ce7ddb3840f5970de71c34a0ff7fceb133c9441283bb8250f532a3", + "sha256:a55e4d81c4260386f71d22294795c87609164e22b28ba0d435850fbdf82fc0c5", + "sha256:a9da45b748caad72ea4a4ed57e9cd382089f33c5ec330a804eb420a496fa760f", + "sha256:b160b9a99ecc6559d9e6d461b95c8eec21461b332f80267ad2c10394b9503496", + "sha256:b342064e647d099ca765f19672696ad50c953cac95b566af1492fd142283580f", + "sha256:b5e8590b9245803c849e09bae070a8e1ff444f45e3f0bed558dd722119eea724", + "sha256:bf75d5825ef47aa51d669b03ce635ecb84d69311e05eccea083f31c7570c9931", + "sha256:c01b59b33c7c3ba90744f2c695be571a3bd40ab2ba7f3d169ffa6db3cfba614f", + "sha256:d96a6a7d74af56feb11e9a443150216578ea07b7450f7c05df40eec90af7f4a7", + "sha256:dd0e3651d210068d13e18503d75aaa45656eef51ef0b261f891788589db2cc38", + "sha256:e167b9805de54367dcb2043519382be541117503ce99e3291cc9b41ca0a83557", + "sha256:e42029e184008a5fd3d819323345e25e2337b0ac7f5c135b7623308530209d57", + "sha256:e6c1fb5fee36077f484224cecc5ac10ec6d80444eae16b98d0a09863813015a3", + "sha256:f545c082eeb09ae678dd451a1b1dbf17babd8a0d7adea02897a76e639afca310", + "sha256:fde50062d67d805bc96f1a9ecc0d37bfc2a8f02b937d2c50824d186aa91f2419" ], "index": "pypi", - "version": "==1.19.5" + "version": "==1.21.2" }, "ocrmypdf": { "hashes": [ - "sha256:17396579734b4a2e7b8e100a8a2f38a01a83adb949e2c87edd9e5433f8eb6932", - "sha256:60079df8a0407e30b66b2828ffbf802bb8342d1198db41c27e4e2ef63efb06c3" + "sha256:2d80b0372f869a5f05a73db0cdf14299bf0314faa66f1519a4a7d9c596a720f9", + "sha256:bcf9bdc12707bb10ec4a1fae09461c3e7a4d00ab2696a7ab6c386d774c4e0665", + "sha256:e041aadce7f1b5fa67f2fdbd26b93ce41ddeb78695d5a9cec41bb2faaa920642" ], "index": "pypi", - "version": "==12.0.3" + "version": "==12.3.2" }, "pathvalidate": { "hashes": [ @@ -630,75 +645,83 @@ }, "pikepdf": { "hashes": [ - "sha256:230f98284ae025e641472b5c23d83af3964717ef0fac79a072d05e12212d99f6", - "sha256:23aff2408c169aff7f2453cc807b39427634df4fdbcc1217ff11e62984321772", - "sha256:279cb9786c4757c36fa356214b012f766f3cfc834c6e2c6f661cd7fd1221fac7", - "sha256:2bd8509ca04cfe3fa5c9ad17730eb43addd1b8f81604945c89f666ac3768fc19", - "sha256:311e92958a75d8d73064b1ee1f280572aee03d03ee103ef77e989cc255acf2e9", - "sha256:41e637ce69776990a0a170099000282cbcf7de94ab39a0194677366d923ff48d", - "sha256:4a17030087da78287f3f18f90e4364b20cd1f3a8d511e5cc33171f9262d7dd6c", - "sha256:4ee74e9b9277ae5327c8b19504b66eaa9a725fa4a6b2a23d161d3b2696f6c2e6", - "sha256:59e7c6004d5eafff6d31d8185c5df6b8a2c3c7114c1d194edee520a9b608f09b", - "sha256:5ff35499b1ae7b181277f78ce5b1bcc8d3009182bb389917791c5dc811fcc8e4", - "sha256:60c1d6634e4b66636d731bee3615aa153a877983a499d3c5506f87c033a6d913", - "sha256:77363eb0afcf7a8b8fe3aa9c3391cc12ad40e7e6be55a0b10b72bf70be6b2cbc", - "sha256:838a386836c5d773029f04628ddab7131f6f7cfa3147382bf2a440143f4ef513", - "sha256:9ad09d00186f172f247983d63f60d0572e1fb87b0ae30e3d504de451b8da8889", - "sha256:9c885328d86d919b70decd3ef73ce42d76ab4b365ed3a851aef08e3f29e62c6e", - "sha256:a25a12f2209a0378c57a8201c4add521ebb7cadd439e111cddb1532d347f0cd0", - "sha256:a28e3472915d4881492ba6264f8db8ef3a4f382048dda307de5aa88a43b626d7", - "sha256:b3ccde9aa84fd9663ecf3f39226372bc2c5311e9fabbab07955439c0deb1ecfa", - "sha256:bbaafc08dd77c2e64a87dd6e377e4e8a7efd9a6d7de208ed8c5b908830465887", - "sha256:c039ee6dcbf3f2054b8bddbff9f5002996d0d981d3d82ebe76041c237528aaef", - "sha256:cee7a310e82e0a931b4805a1b25288efcb3f647f4d32c4107889a4b3fac4f159", - "sha256:d245513995e0fe1e849fbb10e14061c229c59db9f8e346bfef4f2bf804847574", - "sha256:db1f2a4b8fb4b91bf43ce8988f2f9d18ea36dbf7919d60a860e3fa68e1955a7e", - "sha256:fb08ce0ec36c8571b167d9cd0fdad7b53b2f535cbd32c1e92f6f2883c353be7e", - "sha256:fb0e1ceabaad4815efe23d1e19beaba33db38cf1e918011cd602cc0a43185056" + "sha256:0517ea762eb2e450557827915a47fb37e768ea81d22f66d50b48d6eab56fd15b", + "sha256:06a4cba6b630cbfa851a56b815ca957ef7263c0b31e2ffc62d492c834c9a7bca", + "sha256:084a6e83d3ac9a804e36812cba5c9b321f7f3cab56e22a89ea080e460a99feed", + "sha256:0b45b602e1735543ca65f93cda6714481862a57bcf629a3b404ac0efa280675a", + "sha256:13b14bf92f020356a676503a11c62db714e8dfd81eed4fd062dd19f9ff5752b4", + "sha256:13c30f2acf558b3c290e8ab908d5d3d3a788fef347b5a80ae6698baa6660ff5c", + "sha256:19a14e4d7b0a10c64143b5cddc0f2e464a614bbd4ba9f88f1081ed65d7c9e9ac", + "sha256:1f6655d5ced542b1132f76b1c8df27b659ed7ebe02da2c3758be61d6036d755e", + "sha256:3da160d68d3aaf9197306cc06c423261c7b150778b86ff143d67b4698cb6366e", + "sha256:41bbdd5db3eae8177752c89ec2dc7e5daae3a92b408e0c8593f945baf225f879", + "sha256:51e25e2d4bcf8e6b35a84edce3244f8a8b7b421f976074a1f39d9cafcf238e79", + "sha256:5ca94ccf5894fb435af8d97e1115a48ea24185519d16af8bfade8274d7420f43", + "sha256:6b5e9039bcf850927354a8c52e0eb2d89783072554767d8e00464684d81e928e", + "sha256:6f6f81045009935612c4422fbb0b65f63b11338d2c49db7ca6f03a7ed462c75a", + "sha256:7163bf60fe0253d82fb1b01d34ff3ec7e5da35d48b30694f5c65dd72c07b744a", + "sha256:7634f9b2c4948bff96af033d604d8f760ad7ac82d2ec942d24413496a7b71d0e", + "sha256:78c9e740f5fb0a4aae7846647b5039a01098e1f39e68384a71967b7480ab8ebc", + "sha256:94e97bdf90aff307b0d7dd839070a7d121d43da297887c3bd4580d34a7ae2166", + "sha256:a8f1ba7fe9113e5c4ab6e2775a8aceb33a8459ee95766085a47441b21d484b58", + "sha256:ae019cb866405e7ec8ae1a9cef1ecacb12c57d9fc0b6a9171d89046e6de8d8b0", + "sha256:c1cbbdb3d777813c24a166e192cb81d5a66e4e0e5737a04fea8fcccb8793a6aa", + "sha256:c1d47d8fc34c3f3adbcf89a4e636b99031cbcac8798ac9f0e84f028ae83da760", + "sha256:e24dff6af31f1eb732fcb5db4678835d1f312643996fdcd9dbeb8aca52bc0dde", + "sha256:e333282b99887fbdf29ea693c09c8123482c88d76918f94a8026d8f86ec5b282", + "sha256:ef43c1a1aeb4355c4c1759da7105b95aa80d9981d880ba90cba80c54d1e4b026", + "sha256:f6f0b7d2db3cfa772e490b02fe184855c150e22c8a5f773e9a4057e71ee4e8b6", + "sha256:ffd6efb681b681e021eeeb6463df8f993bd86120ef855e3c421e0a1505744826" ], "index": "pypi", - "version": "==2.12.2" + "version": "==2.16.1" }, "pillow": { "hashes": [ - "sha256:01425106e4e8cee195a411f729cff2a7d61813b0b11737c12bd5991f5f14bcd5", - "sha256:031a6c88c77d08aab84fecc05c3cde8414cd6f8406f4d2b16fed1e97634cc8a4", - "sha256:083781abd261bdabf090ad07bb69f8f5599943ddb539d64497ed021b2a67e5a9", - "sha256:0d19d70ee7c2ba97631bae1e7d4725cdb2ecf238178096e8c82ee481e189168a", - "sha256:0e04d61f0064b545b989126197930807c86bcbd4534d39168f4aa5fda39bb8f9", - "sha256:12e5e7471f9b637762453da74e390e56cc43e486a88289995c1f4c1dc0bfe727", - "sha256:22fd0f42ad15dfdde6c581347eaa4adb9a6fc4b865f90b23378aa7914895e120", - "sha256:238c197fc275b475e87c1453b05b467d2d02c2915fdfdd4af126145ff2e4610c", - "sha256:3b570f84a6161cf8865c4e08adf629441f56e32f180f7aa4ccbd2e0a5a02cba2", - "sha256:3da86987a323708512d4d35939b29854286ad88940ee10f2eac48bfec9dba678", - "sha256:463822e2f0d81459e113372a168f2ff59723e78528f91f0bd25680ac185cf797", - "sha256:4d98abdd6b1e3bf1a1cbb14c3895226816e666749ac040c4e2554231068c639b", - "sha256:5afe6b237a0b81bd54b53f835a153770802f164c5570bab5e005aad693dab87f", - "sha256:5b70110acb39f3aff6b74cf09bb4169b167e2660dabc304c1e25b6555fa781ef", - "sha256:5cbf3e3b1014dddc45496e8cf38b9f099c95a326275885199f427825c6522232", - "sha256:624b977355cde8b065f6d51b98497d6cd5fbdd4f36405f7a8790e3376125e2bb", - "sha256:63728564c1410d99e6d1ae8e3b810fe012bc440952168af0a2877e8ff5ab96b9", - "sha256:66cc56579fd91f517290ab02c51e3a80f581aba45fd924fcdee01fa06e635812", - "sha256:6c32cc3145928c4305d142ebec682419a6c0a8ce9e33db900027ddca1ec39178", - "sha256:8b56553c0345ad6dcb2e9b433ae47d67f95fc23fe28a0bde15a120f25257e291", - "sha256:8bb1e155a74e1bfbacd84555ea62fa21c58e0b4e7e6b20e4447b8d07990ac78b", - "sha256:95d5ef984eff897850f3a83883363da64aae1000e79cb3c321915468e8c6add5", - "sha256:a013cbe25d20c2e0c4e85a9daf438f85121a4d0344ddc76e33fd7e3965d9af4b", - "sha256:a787ab10d7bb5494e5f76536ac460741788f1fbce851068d73a87ca7c35fc3e1", - "sha256:a7d5e9fad90eff8f6f6106d3b98b553a88b6f976e51fce287192a5d2d5363713", - "sha256:aac00e4bc94d1b7813fe882c28990c1bc2f9d0e1aa765a5f2b516e8a6a16a9e4", - "sha256:b91c36492a4bbb1ee855b7d16fe51379e5f96b85692dc8210831fbb24c43e484", - "sha256:c03c07ed32c5324939b19e36ae5f75c660c81461e312a41aea30acdd46f93a7c", - "sha256:c5236606e8570542ed424849f7852a0ff0bce2c4c8d0ba05cc202a5a9c97dee9", - "sha256:c6b39294464b03457f9064e98c124e09008b35a62e3189d3513e5148611c9388", - "sha256:cb7a09e173903541fa888ba010c345893cd9fc1b5891aaf060f6ca77b6a3722d", - "sha256:d68cb92c408261f806b15923834203f024110a2e2872ecb0bd2a110f89d3c602", - "sha256:dc38f57d8f20f06dd7c3161c59ca2c86893632623f33a42d592f097b00f720a9", - "sha256:e98eca29a05913e82177b3ba3d198b1728e164869c613d76d0de4bde6768a50e", - "sha256:f217c3954ce5fd88303fc0c317af55d5e0204106d86dea17eb8205700d47dec2" + "sha256:0b2efa07f69dc395d95bb9ef3299f4ca29bcb2157dc615bae0b42c3c20668ffc", + "sha256:114f816e4f73f9ec06997b2fde81a92cbf0777c9e8f462005550eed6bae57e63", + "sha256:147bd9e71fb9dcf08357b4d530b5167941e222a6fd21f869c7911bac40b9994d", + "sha256:15a2808e269a1cf2131930183dcc0419bc77bb73eb54285dde2706ac9939fa8e", + "sha256:196560dba4da7a72c5e7085fccc5938ab4075fd37fe8b5468869724109812edd", + "sha256:1c03e24be975e2afe70dfc5da6f187eea0b49a68bb2b69db0f30a61b7031cee4", + "sha256:1fd5066cd343b5db88c048d971994e56b296868766e461b82fa4e22498f34d77", + "sha256:29c9569049d04aaacd690573a0398dbd8e0bf0255684fee512b413c2142ab723", + "sha256:2b6dfa068a8b6137da34a4936f5a816aba0ecc967af2feeb32c4393ddd671cba", + "sha256:2cac53839bfc5cece8fdbe7f084d5e3ee61e1303cccc86511d351adcb9e2c792", + "sha256:2ee77c14a0299d0541d26f3d8500bb57e081233e3fa915fa35abd02c51fa7fae", + "sha256:37730f6e68bdc6a3f02d2079c34c532330d206429f3cee651aab6b66839a9f0e", + "sha256:3f08bd8d785204149b5b33e3b5f0ebbfe2190ea58d1a051c578e29e39bfd2367", + "sha256:479ab11cbd69612acefa8286481f65c5dece2002ffaa4f9db62682379ca3bb77", + "sha256:4bc3c7ef940eeb200ca65bd83005eb3aae8083d47e8fcbf5f0943baa50726856", + "sha256:660a87085925c61a0dcc80efb967512ac34dbb256ff7dd2b9b4ee8dbdab58cf4", + "sha256:67b3666b544b953a2777cb3f5a922e991be73ab32635666ee72e05876b8a92de", + "sha256:70af7d222df0ff81a2da601fab42decb009dc721545ed78549cb96e3a1c5f0c8", + "sha256:75e09042a3b39e0ea61ce37e941221313d51a9c26b8e54e12b3ececccb71718a", + "sha256:8960a8a9f4598974e4c2aeb1bff9bdd5db03ee65fd1fce8adf3223721aa2a636", + "sha256:9364c81b252d8348e9cc0cb63e856b8f7c1b340caba6ee7a7a65c968312f7dab", + "sha256:969cc558cca859cadf24f890fc009e1bce7d7d0386ba7c0478641a60199adf79", + "sha256:9a211b663cf2314edbdb4cf897beeb5c9ee3810d1d53f0e423f06d6ebbf9cd5d", + "sha256:a17ca41f45cf78c2216ebfab03add7cc350c305c38ff34ef4eef66b7d76c5229", + "sha256:a2f381932dca2cf775811a008aa3027671ace723b7a38838045b1aee8669fdcf", + "sha256:a4eef1ff2d62676deabf076f963eda4da34b51bc0517c70239fafed1d5b51500", + "sha256:c088a000dfdd88c184cc7271bfac8c5b82d9efa8637cd2b68183771e3cf56f04", + "sha256:c0e0550a404c69aab1e04ae89cca3e2a042b56ab043f7f729d984bf73ed2a093", + "sha256:c11003197f908878164f0e6da15fce22373ac3fc320cda8c9d16e6bba105b844", + "sha256:c2a5ff58751670292b406b9f06e07ed1446a4b13ffced6b6cab75b857485cbc8", + "sha256:c35d09db702f4185ba22bb33ef1751ad49c266534339a5cebeb5159d364f6f82", + "sha256:c379425c2707078dfb6bfad2430728831d399dc95a7deeb92015eb4c92345eaf", + "sha256:cc866706d56bd3a7dbf8bac8660c6f6462f2f2b8a49add2ba617bc0c54473d83", + "sha256:d0da39795049a9afcaadec532e7b669b5ebbb2a9134576ebcc15dd5bdae33cc0", + "sha256:dce0a6e85ddc74cefec738d9939befb0ecd78560cca8d0dd1e95ae8533127c9d", + "sha256:f05762fbb40cf686b8c3f04cf99c9180151fad5c585c610b2f20dbd9c3663ec1", + "sha256:f156d6ecfc747ee111c167f8faf5f4953761b5e66e91a4e6767e548d0f80129c", + "sha256:f4ebde71785f8bceb39dcd1e7f06bcc5d5c3cf48b9f69ab52636309387b097c8", + "sha256:fc214a6b75d2e0ea7745488da7da3c381f41790812988c7a92345978414fad37", + "sha256:fd7eef578f5b2200d066db1b50c4aa66410786201669fb76d5238b007918fb24", + "sha256:ff04c373477723430dce2e9d024c708a047d44cf17166bf16e604b379bf0ca14" ], "index": "pypi", - "version": "==8.2.0" + "version": "==8.3.1" }, "pluggy": { "hashes": [ @@ -718,46 +741,40 @@ }, "psycopg2-binary": { "hashes": [ - "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c", - "sha256:0e4dc3d5996760104746e6cfcdb519d9d2cd27c738296525d5867ea695774e67", - "sha256:11b9c0ebce097180129e422379b824ae21c8f2a6596b159c7659e2e5a00e1aa0", - "sha256:15978a1fbd225583dd8cdaf37e67ccc278b5abecb4caf6b2d6b8e2b948e953f6", - "sha256:1fabed9ea2acc4efe4671b92c669a213db744d2af8a9fc5d69a8e9bc14b7a9db", - "sha256:2dac98e85565d5688e8ab7bdea5446674a83a3945a8f416ad0110018d1501b94", - "sha256:42ec1035841b389e8cc3692277a0bd81cdfe0b65d575a2c8862cec7a80e62e52", - "sha256:6422f2ff0919fd720195f64ffd8f924c1395d30f9a495f31e2392c2efafb5056", - "sha256:6a32f3a4cb2f6e1a0b15215f448e8ce2da192fd4ff35084d80d5e39da683e79b", - "sha256:7312e931b90fe14f925729cde58022f5d034241918a5c4f9797cac62f6b3a9dd", - "sha256:7d92a09b788cbb1aec325af5fcba9fed7203897bbd9269d5691bb1e3bce29550", - "sha256:833709a5c66ca52f1d21d41865a637223b368c0ee76ea54ca5bad6f2526c7679", - "sha256:89705f45ce07b2dfa806ee84439ec67c5d9a0ef20154e0e475e2b2ed392a5b83", - "sha256:8cd0fb36c7412996859cb4606a35969dd01f4ea34d9812a141cd920c3b18be77", - "sha256:950bc22bb56ee6ff142a2cb9ee980b571dd0912b0334aa3fe0fe3788d860bea2", - "sha256:a0c50db33c32594305b0ef9abc0cb7db13de7621d2cadf8392a1d9b3c437ef77", - "sha256:a0eb43a07386c3f1f1ebb4dc7aafb13f67188eab896e7397aa1ee95a9c884eb2", - "sha256:aaa4213c862f0ef00022751161df35804127b78adf4a2755b9f991a507e425fd", - "sha256:ac0c682111fbf404525dfc0f18a8b5f11be52657d4f96e9fcb75daf4f3984859", - "sha256:ad20d2eb875aaa1ea6d0f2916949f5c08a19c74d05b16ce6ebf6d24f2c9f75d1", - "sha256:b4afc542c0ac0db720cf516dd20c0846f71c248d2b3d21013aa0d4ef9c71ca25", - "sha256:b8a3715b3c4e604bcc94c90a825cd7f5635417453b253499664f784fc4da0152", - "sha256:ba28584e6bca48c59eecbf7efb1576ca214b47f05194646b081717fa628dfddf", - "sha256:ba381aec3a5dc29634f20692349d73f2d21f17653bda1decf0b52b11d694541f", - "sha256:bd1be66dde2b82f80afb9459fc618216753f67109b859a361cf7def5c7968729", - "sha256:c2507d796fca339c8fb03216364cca68d87e037c1f774977c8fc377627d01c71", - "sha256:cec7e622ebc545dbb4564e483dd20e4e404da17ae07e06f3e780b2dacd5cee66", - "sha256:d14b140a4439d816e3b1229a4a525df917d6ea22a0771a2a78332273fd9528a4", - "sha256:d1b4ab59e02d9008efe10ceabd0b31e79519da6fb67f7d8e8977118832d0f449", - "sha256:d5227b229005a696cc67676e24c214740efd90b148de5733419ac9aaba3773da", - "sha256:d9f3a909b59ac4a3ca9beb77716f4bce627276edb039a71d4e9ec4b7548536a0", - "sha256:e1f57aa70d3f7cc6947fd88636a481638263ba04a742b4a37dd25c373e41491a", - "sha256:e74a55f6bad0e7d3968399deb50f61f4db1926acf4a6d83beaaa7df986f48b1c", - "sha256:e7f5a465c6431c0ad8d4e69603ee3306e521a09d3c6af76a16bdb62946bdddf0", - "sha256:e82aba2188b9ba309fd8e271702bd0d0fc9148ae3150532bbb474f4590039ffb", - "sha256:ee69dad2c7155756ad114c02db06002f4cded41132cc51378e57aad79cc8e4f4", - "sha256:f5ab93a2cb2d8338b1674be43b442a7f544a0971da062a5da774ed40587f18f5" + "sha256:0b7dae87f0b729922e06f85f667de7bf16455d411971b2043bbd9577af9d1975", + "sha256:0f2e04bd2a2ab54fa44ee67fe2d002bb90cee1c0f1cc0ebc3148af7b02034cbd", + "sha256:123c3fb684e9abfc47218d3784c7b4c47c8587951ea4dd5bc38b6636ac57f616", + "sha256:1473c0215b0613dd938db54a653f68251a45a78b05f6fc21af4326f40e8360a2", + "sha256:14db1752acdd2187d99cb2ca0a1a6dfe57fc65c3281e0f20e597aac8d2a5bd90", + "sha256:1e3a362790edc0a365385b1ac4cc0acc429a0c0d662d829a50b6ce743ae61b5a", + "sha256:1e85b74cbbb3056e3656f1cc4781294df03383127a8114cbc6531e8b8367bf1e", + "sha256:20f1ab44d8c352074e2d7ca67dc00843067788791be373e67a0911998787ce7d", + "sha256:2f62c207d1740b0bde5c4e949f857b044818f734a3d57f1d0d0edc65050532ed", + "sha256:3242b9619de955ab44581a03a64bdd7d5e470cc4183e8fcadd85ab9d3756ce7a", + "sha256:35c4310f8febe41f442d3c65066ca93cccefd75013df3d8c736c5b93ec288140", + "sha256:38fa2413b60eba2a0b30efda083d3efa52e22dde530679665985e2b8244cb553", + "sha256:4235f9d5ddcab0b8dbd723dca56ea2922b485ea00e1dafacf33b0c7e840b3d32", + "sha256:5ced67f1e34e1a450cdb48eb53ca73b60aa0af21c46b9b35ac3e581cf9f00e31", + "sha256:7360647ea04db2e7dff1648d1da825c8cf68dc5fbd80b8fb5b3ee9f068dcd21a", + "sha256:8c13d72ed6af7fd2c8acbd95661cf9477f94e381fce0792c04981a8283b52917", + "sha256:988b47ac70d204aed01589ed342303da7c4d84b56c2f4c4b8b00deda123372bf", + "sha256:995fc41ebda5a7a663a254a1dcac52638c3e847f48307b5416ee373da15075d7", + "sha256:a36c7eb6152ba5467fb264d73844877be8b0847874d4822b7cf2d3c0cb8cdcb0", + "sha256:a580f04ad7a67c082a2580a129cd011e94d379e36797941892ccff7e9b5bc2ee", + "sha256:aed4a9a7e3221b3e252c39d0bf794c438dc5453bc2963e8befe9d4cd324dff72", + "sha256:aef9aee84ec78af51107181d02fe8773b100b01c5dfde351184ad9223eab3698", + "sha256:b0221ca5a9837e040ebf61f48899926b5783668b7807419e4adae8175a31f773", + "sha256:b4d7679a08fea64573c969f6994a2631908bb2c0e69a7235648642f3d2e39a68", + "sha256:c250a7ec489b652c892e4f0a5d122cc14c3780f9f643e1a326754aedf82d9a76", + "sha256:ca86db5b561b894f9e5f115d6a159fff2a2570a652e07889d8a383b5fae66eb4", + "sha256:cfc523edecddaef56f6740d7de1ce24a2fdf94fd5e704091856a201872e37f9f", + "sha256:da113b70f6ec40e7d81b43d1b139b9db6a05727ab8be1ee559f3a69854a69d34", + "sha256:f6fac64a38f6768e7bc7b035b9e10d8a538a9fadce06b983fb3e6fa55ac5f5ce", + "sha256:f8559617b1fcf59a9aedba2c9838b5b6aa211ffedecabca412b92a1ff75aac1a", + "sha256:fbb42a541b1093385a2d8c7eec94d26d30437d0e77c1d25dae1dcc46741a385e" ], "index": "pypi", - "version": "==2.8.6" + "version": "==2.9.1" }, "pyasn1": { "hashes": [ @@ -813,19 +830,20 @@ }, "python-dateutil": { "hashes": [ - "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", - "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], "index": "pypi", - "version": "==2.8.1" + "version": "==2.8.2" }, "python-dotenv": { "hashes": [ - "sha256:00aa34e92d992e9f8383730816359647f358f4a3be1ba45e5a5cefd27ee91544", - "sha256:b1ae5e9643d5ed987fc57cc2583021e38db531946518130777734f9589b3141f" + "sha256:aae25dc1ebe97c420f50b81fb0e5c949659af713f31fdb63c749ca68748f34b1", + "sha256:b31f6f743c32826287e2faf09ef9b184d2caa628f45952611bf1c56ab88e1e4a", + "sha256:f521bc2ac9a8e03c736f62911605c5d83970021e3fa95b37d769e2bbbe9b6172" ], "index": "pypi", - "version": "==0.17.1" + "version": "==0.19.0" }, "python-gnupg": { "hashes": [ @@ -838,6 +856,7 @@ "python-levenshtein": { "hashes": [ "sha256:212db61934fcb819f5cb2fcb5ad5c0e2e43f3161f524eef4a135f7285dfb308a", + "sha256:a31d3065bf4e8fc6721038c783df132650ad24711e986b25ae0c37e140a99da3", "sha256:d92fe5c3b10c8ad8f2d880499f5e96ed24dbc7cd0414a665c2e2505feaf4ec58", "sha256:dc2395fbd148a1ab31090dd113c366695934b9e85fe5a4b2a032745efd0346f6" ], @@ -873,6 +892,7 @@ "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", + "sha256:7318f36ecd539646767465d194cbbe9c248f243ba0117c3d043c660d69cfeceb", "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", @@ -904,95 +924,83 @@ }, "regex": { "hashes": [ - "sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5", - "sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79", - "sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31", - "sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500", - "sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11", - "sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14", - "sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3", - "sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439", - "sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c", - "sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82", - "sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711", - "sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093", - "sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a", - "sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb", - "sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8", - "sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17", - "sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000", - "sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d", - "sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480", - "sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc", - "sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0", - "sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9", - "sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765", - "sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e", - "sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a", - "sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07", - "sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f", - "sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac", - "sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7", - "sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed", - "sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968", - "sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7", - "sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2", - "sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4", - "sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87", - "sha256:d2c4616a9a56a6ecc39eeab09ecfed4dbc051b9200fb5c9f35b2a98ae6f99a96", - "sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8", - "sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10", - "sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29", - "sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605", - "sha256:f153be3ed31a48e47cc32cf0ffb14d27ccdefacac04f9eaf7fae1a59643ea9ef", - "sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6", - "sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042" + "sha256:026beb631097a4a3def7299aa5825e05e057de3c6d72b139c37813bfa351274b", + "sha256:0dcb13eb9340a0c676a6260d67c0aa6e3eeef0305c6e766c9161fb9de44d85bf", + "sha256:14caacd1853e40103f59571f169704367e79fb78fac3d6d09ac84d9197cadd16", + "sha256:16d9eaa8c7e91537516c20da37db975f09ac2e7772a0694b245076c6d68f85da", + "sha256:18fdc51458abc0a974822333bd3a932d4e06ba2a3243e9a1da305668bd62ec6d", + "sha256:28e8af338240b6f39713a34e337c3813047896ace09d51593d6907c66c0708ba", + "sha256:316332a0af33f3c40dd5bbdd7b47abbebcf29ef81d83cb7f59af4008ca3611fd", + "sha256:3835de96524a7b6869a6c710b26c90e94558c31006e96ca3cf6af6751b27dca1", + "sha256:3905c86cc4ab6d71635d6419a6f8d972cab7c634539bba6053c47354fd04452c", + "sha256:3c09d88a07483231119f5017904db8f60ad67906efac3f1baa31b9b7f7cca281", + "sha256:4551728b767f35f86b8e5ec19a363df87450c7376d7419c3cac5b9ceb4bce576", + "sha256:459bbe342c5b2dec5c5223e7c363f291558bc27982ef39ffd6569e8c082bdc83", + "sha256:45af20983c01dab82b56b05e3950ba68722720744da4bffde70f14a57723d213", + "sha256:4f421e3cdd3a273bace013751c345f4ebeef08f05e8c10757533ada360b51a39", + "sha256:577737ec3d4c195c4aef01b757905779a9e9aee608fa1cf0aec16b5576c893d3", + "sha256:57fece29f7cc55d882fe282d9de52f2f522bb85290555b49394102f3621751ee", + "sha256:7976d410e42be9ae7458c1816a416218364e06e162b82e42f7060737e711d9ce", + "sha256:85f568892422a0e96235eb8ea6c5a41c8ccbf55576a2260c0160800dbd7c4f20", + "sha256:8764a78c5464ac6bde91a8c87dd718c27c1cabb7ed2b4beaf36d3e8e390567f9", + "sha256:8935937dad2c9b369c3d932b0edbc52a62647c2afb2fafc0c280f14a8bf56a6a", + "sha256:8fe58d9f6e3d1abf690174fd75800fda9bdc23d2a287e77758dc0e8567e38ce6", + "sha256:937b20955806381e08e54bd9d71f83276d1f883264808521b70b33d98e4dec5d", + "sha256:9569da9e78f0947b249370cb8fadf1015a193c359e7e442ac9ecc585d937f08d", + "sha256:a3b73390511edd2db2d34ff09aa0b2c08be974c71b4c0505b4a048d5dc128c2b", + "sha256:a4eddbe2a715b2dd3849afbdeacf1cc283160b24e09baf64fa5675f51940419d", + "sha256:a5c6dbe09aff091adfa8c7cfc1a0e83fdb8021ddb2c183512775a14f1435fe16", + "sha256:b63e3571b24a7959017573b6455e05b675050bbbea69408f35f3cb984ec54363", + "sha256:bb350eb1060591d8e89d6bac4713d41006cd4d479f5e11db334a48ff8999512f", + "sha256:bf6d987edd4a44dd2fa2723fca2790f9442ae4de2c8438e53fcb1befdf5d823a", + "sha256:bfa6a679410b394600eafd16336b2ce8de43e9b13f7fb9247d84ef5ad2b45e91", + "sha256:c856ec9b42e5af4fe2d8e75970fcc3a2c15925cbcc6e7a9bcb44583b10b95e80", + "sha256:cea56288eeda8b7511d507bbe7790d89ae7049daa5f51ae31a35ae3c05408531", + "sha256:ea212df6e5d3f60341aef46401d32fcfded85593af1d82b8b4a7a68cd67fdd6b", + "sha256:f35567470ee6dbfb946f069ed5f5615b40edcbb5f1e6e1d3d2b114468d505fc6", + "sha256:fbc20975eee093efa2071de80df7f972b7b35e560b213aafabcec7c0bd00bd8c", + "sha256:ff4a8ad9638b7ca52313d8732f37ecd5fd3c8e3aff10a8ccb93176fd5b3812f6" ], - "version": "==2021.4.4" + "version": "==2021.8.3" }, "reportlab": { "hashes": [ - "sha256:0cf2206c73fbca752c8bd39e12bb9ad7f2d01e6fcb2b25b9eaf94ea042fe86c9", - "sha256:0d670e119d7f7a68a1136de024464999e8e3d5d1491f23cdd39d5d72481af88f", - "sha256:1656722530b3bbce012b093abf6290ab76dcba39d21f9e703310b008ddc7ffe9", - "sha256:1e41b441542881e007420530bbc028f08c0f546ecaaebdf9f065f901acdac106", - "sha256:34d827c771d6b4d7b45f7fc49a638c97fbd8a0fab6c9d3838ff04d307420b739", - "sha256:370c5225f0c395a9f1482ac8d4f974d2073548f186eaf49ceb91414f534ad4d8", - "sha256:42b90b0cb3556f4d1cc1c538345abc249b6ff58939d3af5e37f5fa8421d9ae07", - "sha256:492bd47aabeaa3215cde7a8d3c0d88c909bf7e6b63f0b511a645f1ffc1e948f6", - "sha256:4c5785b018ed6f48e762737deaa6b7528b0ba43ad67fca566bf10d0337a76dcd", - "sha256:519ef25d49fe807c6c0402abb5fe4d14b47a8e2358050d8d7673beecfbe116b2", - "sha256:51a2d5de2c605117cd25dfb3f51d1d14caf1cbed4ef6db582f085eeb0a0c922f", - "sha256:55ef4476b2cdecfa643ae4d7591aa157568f903c378c83ea544650b33b2d856d", - "sha256:5b4acfb15ca028bbc652a6c8d63073dec2a3c8c0db7585d68b96b52940f65899", - "sha256:5c483c96d4cbeb4919ad9fcf2f262e8e08e34dcbcf8d2bda16263ef002c890d4", - "sha256:5c931032aa955431c808e469eb0780ca7d12b39228a02ae7ea09f63d47b1e260", - "sha256:6a3119d0e985e5c7dadfcf29fb79bbab19806b08ad901622b23f5868c0221fce", - "sha256:6b77f763af25cb609896c9355fcd42f59266a7a1fab6c37dfe59ba1e0b689022", - "sha256:72bb5417f198eb059f01d5a9e1ef80f2fbaf3eaa4cd63e9a681bbbd0ed9fcdf9", - "sha256:8cd355f8a4c7c126a246f4b4a9803c80498939709bb37d3db4f8dbee1eb7d8f0", - "sha256:9517f26a512a62d49fc4800222b306e21a14ceec8bd82c93182313ef1eefaa7a", - "sha256:9945e80a0a6e370f90a23907cc70a0811e808f79420fb9051e26d9c79eb8e26b", - "sha256:9989737a409235a734ec783b0545f2966247b26ff555e847f3d0f945e5a11493", - "sha256:9c0d71aef4fb5d30dc6ebd08a2bce317a7eaf37d468f85320947eb580daea90a", - "sha256:9d48fd4a1c2d98ec6686511717f0980d36f5590e038d5afe4e5241f328f06e38", - "sha256:af12fbff15a9652ef117456d1d6a4d6fade8fdc02670d6fd31212402e9d03559", - "sha256:b2b72a0742a493979c348dc3c9a329bd5b87e4243ffecf837b1c8739d58410ba", - "sha256:bda784ebb116d56d3e7133c8e0942cf68cb7fd58bdccf57231dbe56b6430eb01", - "sha256:df2784a474028b15a723f6b347625f1f91740de418bed4a0a2694c954de34dd7", - "sha256:e2b47a8e0126ec0a3820a2e299a94a6fc29ba132249957dd32c447d380eaae5f", - "sha256:e4b9b443e88735be4927529d66d9e1164b4fbd6a882e90114967eedc6ad608e7" + "sha256:00e9ffb955972a8f6a3a0d61a12231fcaf5e23ee238c98421d65fecc29bd88a1", + "sha256:115177b3fc51209b5f50371735311c9a6cd9d260ffedbdce5fbc965645b7567c", + "sha256:17130f034dae50aaf22fce2292e0077a0c2093ba4363211bcafb54418fb8dc09", + "sha256:200bdfc327d5b06cb400ae86c972b579efe03a1fd8a2e8cb7a5d9aaa744e5adb", + "sha256:496b28ef414d9a7734e07221c4386bb00f416a3aa276b9f349ed9a328c73ec23", + "sha256:4bc378039f70141176f3d511d84bc1a172820d4d2edee4f9fcff52cde753dc08", + "sha256:4f357b4c39b0fa0071de47e8be7af44e07f375d2e59e395daccb7fd13b275668", + "sha256:57b39303e6dbe3de91e60a14269543ac058ac98a0ea6cf900f5403d9c226022f", + "sha256:6472478e597ef4a8f5c621d811d08b7ef09fc5af5bc85c2cf4a4505a7164f8b8", + "sha256:68f9324000cfc5570b5a59a92306691b5d655078a399f20bc72c2581fe903261", + "sha256:69870e2bbf39b60ebe9a31b31324e249bf314bdc2798e46efc58c67db74b56cb", + "sha256:6adb17ba89829d5e77fd81baac396f1af99241d7dfc121a065217334131662e7", + "sha256:7c360aee2bdaa05c24cadddc2f10924961dc7cad125d8876b4d307c879b3b4e8", + "sha256:7c4c8e87ef29714ccc7fa9764efe30d849cd38f8a9a1742ab7aedf8b5e23494d", + "sha256:8a07672e86bf288ea3e55959d2e06d6c01320318662241f9b7a71c583e15e5b5", + "sha256:9f583295f7dd523bf6e5619720677279dc7b9db22671573888f0591fc46b90b2", + "sha256:ae27853be6cf0c346469f313abc2938aed5fe0474d6ec0c8bc5ce45e89cb9bad", + "sha256:b668433f32ac955a94633e58ed7800c06c00f9c46d3b99e2189b3d88dc3184c8", + "sha256:b7a92564198c5a5ff4efdb83ace215c73343afb80d9379183bc736fea76edd6d", + "sha256:bd52e1715c70a96a116a61c8477e586b3a46047c85581195bc74162b19b46286", + "sha256:c7ddc9a6234267bbb52059b017ca22f59ffd7d41d545524cb85f68086a2cbb43", + "sha256:c8586d72932b8e3bd50a5230d6f1cfbb85c2605bad34253c6d6fe757211b2bf7", + "sha256:ce3d8e782e3776f19d3accc706aab85ff06caedb70a52016532bebacf5537567", + "sha256:e3ac401b266bb2430b674ac9317065b03ef2325315c611792761ad636326958c", + "sha256:f3fd26f63c4a9033115707a8718154538a1cebfd6ec992f214e6423524450e3e" ], "markers": "python_version >= '2.7' and python_version < '4'", - "version": "==3.5.67" + "version": "==3.6.1" }, "requests": { "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.25.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.26.0" }, "scikit-learn": { "hashes": [ @@ -1019,6 +1027,7 @@ "sha256:b0d13fd56d26cf3de0314a4fd48037108c638fe126d813f5c1222bb0f08b6a76", "sha256:c08b27cb78ee8d2dc781a7affed09859441f5b624f9f92da59ac0791c8774dfc", "sha256:c912247e42114f389858ae05d63f4359d4e667ea72aaabee191aee9ad3f9774a", + "sha256:c9ee65e3e0179951f8c196db0de7f243564c631ec671d1e5ca87f6846029bbab", "sha256:d7fe05fcb44eadd6d6c874c768f085f5de1239db3a3b7be4d3d23d12e4120589", "sha256:d819d625832fb2969911a243e009cfa135cb8ef1e150866e417d6e9d75290087", "sha256:e534f5f3796db6781c87e9835dcd51b7854c8c5a379c9210b93605965c1941fd" @@ -1028,35 +1037,30 @@ }, "scipy": { "hashes": [ - "sha256:168c45c0c32e23f613db7c9e4e780bc61982d71dcd406ead746c7c7c2f2004ce", - "sha256:213bc59191da2f479984ad4ec39406bf949a99aba70e9237b916ce7547b6ef42", - "sha256:25b241034215247481f53355e05f9e25462682b13bd9191359075682adcd9554", - "sha256:2c872de0c69ed20fb1a9b9cf6f77298b04a26f0b8720a5457be08be254366c6e", - "sha256:3397c129b479846d7eaa18f999369a24322d008fac0782e7828fa567358c36ce", - "sha256:368c0f69f93186309e1b4beb8e26d51dd6f5010b79264c0f1e9ca00cd92ea8c9", - "sha256:3d5db5d815370c28d938cf9b0809dade4acf7aba57eaf7ef733bfedc9b2474c4", - "sha256:4598cf03136067000855d6b44d7a1f4f46994164bcd450fb2c3d481afc25dd06", - "sha256:4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b", - "sha256:4f12d13ffbc16e988fa40809cbbd7a8b45bc05ff6ea0ba8e3e41f6f4db3a9e47", - "sha256:634568a3018bc16a83cda28d4f7aed0d803dd5618facb36e977e53b2df868443", - "sha256:65923bc3809524e46fb7eb4d6346552cbb6a1ffc41be748535aa502a2e3d3389", - "sha256:6b0ceb23560f46dd236a8ad4378fc40bad1783e997604ba845e131d6c680963e", - "sha256:8c8d6ca19c8497344b810b0b0344f8375af5f6bb9c98bd42e33f747417ab3f57", - "sha256:9ad4fcddcbf5dc67619379782e6aeef41218a79e17979aaed01ed099876c0e62", - "sha256:a254b98dbcc744c723a838c03b74a8a34c0558c9ac5c86d5561703362231107d", - "sha256:b03c4338d6d3d299e8ca494194c0ae4f611548da59e3c038813f1a43976cb437", - "sha256:b5e9d3e4474644915809d6aa1416ff20430a3ed9ae723a5d295da5ddb24985e2", - "sha256:cc1f78ebc982cd0602c9a7615d878396bec94908db67d4ecddca864d049112f2", - "sha256:d6d25c41a009e3c6b7e757338948d0076ee1dd1770d1c09ec131f11946883c54", - "sha256:d84cadd7d7998433334c99fa55bcba0d8b4aeff0edb123b2a1dfcface538e474", - "sha256:e360cb2299028d0b0d0f65a5c5e51fc16a335f1603aa2357c25766c8dab56938", - "sha256:e98d49a5717369d8241d6cf33ecb0ca72deee392414118198a8e5b4c35c56340", - "sha256:ed572470af2438b526ea574ff8f05e7f39b44ac37f712105e57fc4d53a6fb660", - "sha256:f87b39f4d69cf7d7529d7b1098cb712033b17ea7714aed831b95628f483fd012", - "sha256:fa789583fc94a7689b45834453fec095245c7e69c58561dc159b5d5277057e4c" + "sha256:2a0eeaab01258e0870c4022a6cd329aef3b7c6c2b606bd7cf7bb2ba9820ae561", + "sha256:3304bd5bc32e00954ac4b3f4cc382ca8824719bf348aacbec6347337d6b125fe", + "sha256:3f52470e0548cdb74fb8ddf06773ffdcca7c97550f903b1c51312ec19243a7f7", + "sha256:4729b41a4cdaf4cd011aeac816b532f990bdf97710cef59149d3e293115cf467", + "sha256:4ee952f39a4a4c7ba775a32b664b1f4b74818548b65f765987adc14bb78f5802", + "sha256:611f9cb459d0707dd8e4de0c96f86e93f61aac7475fcb225e9ec71fecdc5cebf", + "sha256:6b47d5fa7ea651054362561a28b1ccc8da9368a39514c1bbf6c0977a1c376764", + "sha256:71cfc96297617eab911e22216e8a8597703202e95636d9406df9af5c2ac99a2b", + "sha256:787749110a23502031fb1643c55a2236c99c6b989cca703ea2114d65e21728ef", + "sha256:90c07ba5f34f33299a428b0d4fa24c30d2ceba44d63f8385b2b05be460819fcb", + "sha256:a496b42dbcd04ea9924f5e92be63af3d8e0f43a274b769bfaca0a297327d54ee", + "sha256:bc61e3e5ff92d2f32bb263621d54a9cff5e3f7c420af3d1fa122ce2529de2bd9", + "sha256:c9951e3746b68974125e5e3445008a4163dd6d20ae0bbdae22b38cb8951dc11b", + "sha256:d1388fbac9dd591ea630da75c455f4cc637a7ca5ecb31a6b6cef430914749cde", + "sha256:d13f31457f2216e5705304d9f28e2826edf75487410a57aa99263fa4ffd792c2", + "sha256:d648aa85dd5074b1ed83008ae987c3fbb53d68af619fce1dee231f4d8bd40e2f", + "sha256:da9c6b336e540def0b7fd65603da8abeb306c5fc9a5f4238665cbbb5ff95cf58", + "sha256:de777332715005438a1c4469451941ec9193f0ac2b5497e625e6b6d30e22b2ae", + "sha256:e101bceeb9e65a90dadbc5ca31283403a2d4667b9c178db29109750568e8d112", + "sha256:efdd3825d54c58df2cc394366ca4b9166cf940a0ebddeb87b6c10053deb625ea", + "sha256:f749b4f6bb334d6166aa8452ffa40f231519f257e37a1deddbdd1ba5e3e9419e" ], - "index": "pypi", - "version": "==1.5.4" + "markers": "python_version < '3.10' and python_version >= '3.7'", + "version": "==1.7.1" }, "service-identity": { "hashes": [ @@ -1090,11 +1094,11 @@ }, "threadpoolctl": { "hashes": [ - "sha256:38b74ca20ff3bb42caca8b00055111d74159ee95c4370882bbff2b93d24da725", - "sha256:ddc57c96a38beb63db45d6c159b5ab07b6bced12c45a1f07b2b92f272aebfa6b" + "sha256:86d4b6801456d780e94681d155779058759eaef3c3564758b17b6c99db5f81cb", + "sha256:e5a995e3ffae202758fa8a90082e35783b9370699627ae2733cd1c3a73553616" ], - "markers": "python_version >= '3.5'", - "version": "==2.1.0" + "markers": "python_version >= '3.6'", + "version": "==2.2.0" }, "tika": { "hashes": [ @@ -1106,22 +1110,24 @@ }, "tqdm": { "hashes": [ - "sha256:24be966933e942be5f074c29755a95b315c69a91f839a29139bf26ffffe2d3fd", - "sha256:aa0c29f03f298951ac6318f7c8ce584e48fa22ec26396e6411e43d038243bdb2" + "sha256:07856e19a1fe4d2d9621b539d3f072fa88c9c1ef1f3b7dd4d4953383134c3164", + "sha256:35540feeaca9ac40c304e916729e6b78045cbbeccd3e941b2868f09306798ac9", + "sha256:f959986660e27ecdb4ddef8fe7fa11e6e060e1eecff480d8095f38a68c9dde5d" ], "index": "pypi", - "version": "==4.61.1" + "version": "==4.62.1" }, "twisted": { "extras": [ "tls" ], "hashes": [ - "sha256:77544a8945cf69b98d2946689bbe0c75de7d145cdf11f391dd487eae8fc95a12", - "sha256:aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e" + "sha256:13c1d1d2421ae556d91e81e66cf0d4f4e4e1e4a36a0486933bee4305c6a4fb9b", + "sha256:2cd652542463277378b0d349f47c62f20d9306e57d1247baabd6d1d38a109006", + "sha256:4ceba6ae6672f78209741951add007ffeae1524a85999853400918c30ecbda2d" ], - "markers": "python_full_version >= '3.5.4'", - "version": "==21.2.0" + "markers": "python_full_version >= '3.6.7'", + "version": "==21.7.0" }, "txaio": { "hashes": [ @@ -1131,71 +1137,93 @@ "markers": "python_version >= '3.6'", "version": "==21.2.1" }, + "typing-extensions": { + "hashes": [ + "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497", + "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342", + "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84" + ], + "version": "==3.10.0.0" + }, "tzlocal": { "hashes": [ - "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44", - "sha256:e2cb6c6b5b604af38597403e9852872d7f534962ae2954c7f35efcb1ccacf4a4" + "sha256:705fc271c3fdf1b759c9d6eb52931050b6504022efb44061631bb0b0edac2a8c", + "sha256:c736f2540713deb5938d789ca7c3fc25391e9a20803f05b60ec64987cf086559", + "sha256:f4e6e36db50499e0d92f79b67361041f048e2609d166e93456b50746dc4aef12" ], - "version": "==2.1" + "markers": "python_version >= '3.6'", + "version": "==3.0" }, "urllib3": { "hashes": [ - "sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c", - "sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4", + "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.5" + "version": "==1.26.6" }, "uvicorn": { "extras": [ "standard" ], "hashes": [ - "sha256:2a76bb359171a504b3d1c853409af3adbfa5cef374a4a59e5881945a97a93eae", - "sha256:45ad7dfaaa7d55cab4cd1e85e03f27e9d60bc067ddc59db52a2b0aeca8870292" + "sha256:17f898c64c71a2640514d4089da2689e5db1ce5d4086c2d53699bf99513421c1", + "sha256:8b686a3de71cf25fefa434a291aa48f8b427f6a814e090bd842771732f32192a", + "sha256:d9a3c0dd1ca86728d3e235182683b4cf94cd53a867c288eaeca80ee781b2caff" ], "index": "pypi", - "version": "==0.14.0" + "version": "==0.15.0" }, "uvloop": { "hashes": [ - "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd", - "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e", - "sha256:2e57a28567d874afd803b6d8a7aeee7bfa0a34994f1b237837e6d7e525cea9a4", - "sha256:4315d2ec3ca393dd5bc0b0089d23101276778c304d42faff5dc4579cb6caef09", - "sha256:4544dcf77d74f3a84f03dd6278174575c44c67d7165d4c42c71db3fdc3860726", - "sha256:63c0bd965e73a4e8dde6a15635262ec38036d83327230552ada21298ee5fa3b7", - "sha256:afd5513c0ae414ec71d24f6f123614a80f3d27ca655a4fcf6cabe50994cc1891", - "sha256:b4f591aa4b3fa7f32fb51e2ee9fea1b495eb75b0b3c8d0ca52514ad675ae63f7", - "sha256:bcac356d62edd330080aed082e78d4b580ff260a677508718f88016333e2c9c5", - "sha256:e7514d7a48c063226b7d06617cbb12a14278d4323a065a8d46a7962686ce2e95", - "sha256:f07909cd9fc08c52d294b1570bba92186181ca01fe3dc9ffba68955273dd7362" + "sha256:04ff57aa137230d8cc968f03481176041ae789308b4d5079118331ab01112450", + "sha256:089b4834fd299d82d83a25e3335372f12117a7d38525217c2258e9b9f4578897", + "sha256:1e5f2e2ff51aefe6c19ee98af12b4ae61f5be456cd24396953244a30880ad861", + "sha256:30ba9dcbd0965f5c812b7c2112a1ddf60cf904c1c160f398e7eed3a6b82dcd9c", + "sha256:3a19828c4f15687675ea912cc28bbcb48e9bb907c801873bd1519b96b04fb805", + "sha256:54dbcb085c076f8749954d1497ecabdb227a94114dac2e7296bc0df26b240c3e", + "sha256:6224f1401025b748ffecb7a6e2652b17768f30b1a6a3f7b44660e5b5b690b12d", + "sha256:647e481940379eebd314c00440314c81ea547aa636056f554d491e40503c8464", + "sha256:6ccd57ae8db17d677e9e06192e9c9ec4bd2066b77790f9aa7dede2cc4008ee8f", + "sha256:772206116b9b57cd625c8a88f2413df2fcfd0b496eb188b82a43bed7af2c2ec9", + "sha256:8e0d26fa5875d43ddbb0d9d79a447d2ace4180d9e3239788208527c4784f7cab", + "sha256:98d117332cc9e5ea8dfdc2b28b0a23f60370d02e1395f88f40d1effd2cb86c4f", + "sha256:b3b768c390952983694e5465382e3769f21a88003f608a4f9ca4a44700d95eaf", + "sha256:b572256409f194521a9895aef274cea88731d14732343da3ecdb175228881638", + "sha256:bd53f7f5db562f37cd64a3af5012df8cac2c464c97e732ed556800129505bd64", + "sha256:bd8f42ea1ea8f4e84d265769089964ddda95eb2bb38b5cbe26712b0616c3edee", + "sha256:e814ac2c6f9daf4c36eb8e85266859f42174a4ff0d71b99405ed559257750382", + "sha256:f74bc20c7b67d1c27c72601c78cf95be99d5c2cdd4514502b4f3eb0933ff1228" ], "index": "pypi", - "version": "==0.14.0" + "version": "==0.16.0" }, "watchdog": { "hashes": [ - "sha256:016b01495b9c55b5d4126ed8ae75d93ea0d99377084107c33162df52887cee18", - "sha256:101532b8db506559e52a9b5d75a308729b3f68264d930670e6155c976d0e52a0", - "sha256:27d9b4666938d5d40afdcdf2c751781e9ce36320788b70208d0f87f7401caf93", - "sha256:2f1ade0d0802503fda4340374d333408831cff23da66d7e711e279ba50fe6c4a", - "sha256:376cbc2a35c0392b0fe7ff16fbc1b303fd99d4dd9911ab5581ee9d69adc88982", - "sha256:57f05e55aa603c3b053eed7e679f0a83873c540255b88d58c6223c7493833bac", - "sha256:5f1f3b65142175366ba94c64d8d4c8f4015825e0beaacee1c301823266b47b9b", - "sha256:602dbd9498592eacc42e0632c19781c3df1728ef9cbab555fab6778effc29eeb", - "sha256:68744de2003a5ea2dfbb104f9a74192cf381334a9e2c0ed2bbe1581828d50b61", - "sha256:85e6574395aa6c1e14e0f030d9d7f35c2340a6cf95d5671354ce876ac3ffdd4d", - "sha256:b1d723852ce90a14abf0ec0ca9e80689d9509ee4c9ee27163118d87b564a12ac", - "sha256:d948ad9ab9aba705f9836625b32e965b9ae607284811cd98334423f659ea537a", - "sha256:e2a531e71be7b5cc3499ae2d1494d51b6a26684bcc7c3146f63c810c00e8a3cc", - "sha256:e7c73edef48f4ceeebb987317a67e0080e5c9228601ff67b3c4062fa020403c7", - "sha256:ee21aeebe6b3e51e4ba64564c94cee8dbe7438b9cb60f0bb350c4fa70d1b52c2", - "sha256:f1d0e878fd69129d0d68b87cee5d9543f20d8018e82998efb79f7e412d42154a", - "sha256:f84146f7864339c8addf2c2b9903271df21d18d2c721e9a77f779493234a82b5" + "sha256:0bcdf7b99b56a3ae069866c33d247c9994ffde91b620eaf0306b27e099bd1ae0", + "sha256:0bcfe904c7d404eb6905f7106c54873503b442e8e918cc226e1828f498bdc0ca", + "sha256:201cadf0b8c11922f54ec97482f95b2aafca429c4c3a4bb869a14f3c20c32686", + "sha256:3a7d242a7963174684206093846537220ee37ba9986b824a326a8bb4ef329a33", + "sha256:3e305ea2757f81d8ebd8559d1a944ed83e3ab1bdf68bcf16ec851b97c08dc035", + "sha256:431a3ea70b20962e6dee65f0eeecd768cd3085ea613ccb9b53c8969de9f6ebd2", + "sha256:44acad6f642996a2b50bb9ce4fb3730dde08f23e79e20cd3d8e2a2076b730381", + "sha256:54e057727dd18bd01a3060dbf5104eb5a495ca26316487e0f32a394fd5fe725a", + "sha256:6fe9c8533e955c6589cfea6f3f0a1a95fb16867a211125236c82e1815932b5d7", + "sha256:85b851237cf3533fabbc034ffcd84d0fa52014b3121454e5f8b86974b531560c", + "sha256:8805a5f468862daf1e4f4447b0ccf3acaff626eaa57fbb46d7960d1cf09f2e6d", + "sha256:9628f3f85375a17614a2ab5eac7665f7f7be8b6b0a2a228e6f6a2e91dd4bfe26", + "sha256:a12539ecf2478a94e4ba4d13476bb2c7a2e0a2080af2bb37df84d88b1b01358a", + "sha256:acc4e2d5be6f140f02ee8590e51c002829e2c33ee199036fcd61311d558d89f4", + "sha256:b5fc5c127bad6983eecf1ad117ab3418949f18af9c8758bd10158be3647298a9", + "sha256:b8ddb2c9f92e0c686ea77341dcb58216fa5ff7d5f992c7278ee8a392a06e86bb", + "sha256:bf84bd94cbaad8f6b9cbaeef43080920f4cb0e61ad90af7106b3de402f5fe127", + "sha256:d9456f0433845e7153b102fffeb767bde2406b76042f2216838af3b21707894e", + "sha256:e4929ac2aaa2e4f1a30a36751160be391911da463a8799460340901517298b13", + "sha256:e5236a8e8602ab6db4b873664c2d356c365ab3cac96fbdec4970ad616415dd45", + "sha256:fd8c595d5a93abd441ee7c5bb3ff0d7170e79031520d113d6f401d0cf49d7c8f" ], "index": "pypi", - "version": "==1.0.2" + "version": "==2.1.3" }, "watchgod": { "hashes": [ @@ -1223,6 +1251,7 @@ "sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2", "sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af", "sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d", + "sha256:5b42372c9ee5530947c891e993b48755c1afc075ca689f5e13d20e61522b21f6", "sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880", "sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077", "sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f", @@ -1252,11 +1281,11 @@ }, "whitenoise": { "hashes": [ - "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7", - "sha256:05d00198c777028d72d8b0bbd234db605ef6d60e9410125124002518a48e515d" + "sha256:d234b871b52271ae7ed6d9da47ffe857c76568f11dd30e28e18c5869dbd11e12", + "sha256:d963ef25639d1417e8a247be36e6aedd8c7c6f0a08adcb5a89146980a96b577c" ], "index": "pypi", - "version": "==5.2.0" + "version": "==5.3.0" }, "whoosh": { "hashes": [ @@ -1298,6 +1327,7 @@ "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f", "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f", "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120", + "sha256:6508154df547b9d8651fa21e944c5946436614093d5a58d662a28448ed80df78", "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f", "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1", "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9", @@ -1334,21 +1364,6 @@ ], "version": "==0.7.12" }, - "apipkg": { - "hashes": [ - "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6", - "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.5" - }, - "appdirs": { - "hashes": [ - "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", - "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128" - ], - "version": "==1.4.4" - }, "attrs": { "hashes": [ "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", @@ -1365,6 +1380,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.9.1" }, + "backports.entry-points-selectable": { + "hashes": [ + "sha256:988468260ec1c196dab6ae1149260e2f5472c9110334e5d51adcb77867361f6a", + "sha256:a6d9a871cde5e15b4c4a53e3d43ba890cc6861ec1332c9c2428c92f977192acc" + ], + "markers": "python_version >= '2.7'", + "version": "==1.1.0" + }, "certifi": { "hashes": [ "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee", @@ -1372,13 +1395,14 @@ ], "version": "==2021.5.30" }, - "chardet": { + "charset-normalizer": { "hashes": [ - "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", - "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5" + "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b", + "sha256:762c76ab955f265f68d4683641bb10d7f2723dbc10091505886e357e0b42760f", + "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3" ], - "markers": "python_version >= '3.1'", - "version": "==4.0.0" + "markers": "python_version >= '3'", + "version": "==2.0.4" }, "coverage": { "hashes": [ @@ -1391,6 +1415,7 @@ "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a", "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a", "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2", + "sha256:1d33b64c9acc1d9d90a67422ff50d79d0131552947a546570fa02328a9ea69b7", "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6", "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759", "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53", @@ -1440,11 +1465,12 @@ }, "coveralls": { "hashes": [ - "sha256:172fb79c5f61c6ede60554f2cac46deff6d64ee735991fb2124fb414e188bdb4", - "sha256:9b3236e086627340bf2c95f89f757d093cbed43d17179d3f4fb568c347e7d29a" + "sha256:15a987d9df877fff44cd81948c5806ffb6eafb757b3443f737888358e96156ee", + "sha256:16c9e36985d1e1f420ab25259da7e0455090ddb49183aa707aed2d996506af12", + "sha256:aedfcc5296b788ebaf8ace8029376e5f102f67c53d1373f2e821515c15b36527" ], "index": "pypi", - "version": "==3.1.0" + "version": "==3.2.0" }, "distlib": { "hashes": [ @@ -1470,11 +1496,11 @@ }, "execnet": { "hashes": [ - "sha256:7e3c2cdb6389542a91e9855a9cc7545fbed679e96f8808bcbb1beb325345b189", - "sha256:e840ce25562e414ee5684864d510dbeeb0bce016bc89b22a6e5ce323b5e6552f" + "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", + "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.8.1" + "version": "==1.9.0" }, "factory-boy": { "hashes": [ @@ -1486,11 +1512,12 @@ }, "faker": { "hashes": [ - "sha256:30189045769cb26f91ed218140469fd0b42520b2ea22ff2958ed81071a3ed839", - "sha256:a724ca2325f4af659929052fbbb613caaec237a93fcdc1cbc7aa860e61e3c18f" + "sha256:3e737576ff50cd98dfed643d6b3fd63194eca9df00e7f595960fe7da5220723d", + "sha256:b9e81e9da3dda3ac54189e034cfb943de576a259caeb226ccab43fcbcf6a7891", + "sha256:dc9713dcf35fa3e9b4c08caac97136d1c7daa9bc2fa7f703a8354f4b0f04053d" ], "markers": "python_version >= '3.6'", - "version": "==8.7.0" + "version": "==8.11.0" }, "filelock": { "hashes": [ @@ -1502,12 +1529,11 @@ }, "idna": { "hashes": [ - "sha256:4a57a6379512ade94fa99e2fa46d3cd0f2f553040548d0e2958c6ed90ee48226", - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a", + "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.10" + "version": "==3.2" }, "imagesize": { "hashes": [ @@ -1541,30 +1567,51 @@ "sha256:060b790af48b3d1cb6776a1e8956fb41106c6befaca717181c41a1728147dc73", "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", + "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724", "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", + "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646", "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", + "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6", + "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6", + "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad", "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", + "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38", + "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac", "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", + "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6", "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", + "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a", "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", + "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9", + "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864", "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", + "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b", "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", + "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28", "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", + "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d", + "sha256:b2b16984860d962a9f7f42c8f84ecdb74993b803a705309bb0acea7f032e37e7", "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", + "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145", "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", + "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c", + "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1", "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", + "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53", + "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134", + "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85", "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", @@ -1576,11 +1623,20 @@ }, "packaging": { "hashes": [ - "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", - "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7", + "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.9" + "markers": "python_version >= '3.6'", + "version": "==21.0" + }, + "platformdirs": { + "hashes": [ + "sha256:4666d822218db6a262bdfdc9c39d21f23b4cfdb08af331a81e92751daf6c866c", + "sha256:632daad3ab546bd8e6af0537d09805cec458dce201bccfe23012df73332e181e", + "sha256:ded78f63b43fee3256f4b4eb42cc297954d4ae6d198d04418107c25e8a8682ed" + ], + "markers": "python_version >= '3.6'", + "version": "==2.2.0" }, "pluggy": { "hashes": [ @@ -1608,11 +1664,12 @@ }, "pygments": { "hashes": [ - "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f", - "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e" + "sha256:9cf781c67f72dac7c566b333a2daeb4ef04a0d445205eaa03abe97959d0beb0e", + "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380", + "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6" ], "markers": "python_version >= '3.5'", - "version": "==2.9.0" + "version": "==2.10.0" }, "pyparsing": { "hashes": [ @@ -1673,19 +1730,19 @@ }, "pytest-xdist": { "hashes": [ - "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450", - "sha256:718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2" + "sha256:e8ecde2f85d88fbcadb7d28cb33da0fa29bca5cf7d5967fa89fc0e97e5299ea5", + "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d" ], "index": "pypi", - "version": "==2.2.1" + "version": "==2.3.0" }, "python-dateutil": { "hashes": [ - "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", - "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], "index": "pypi", - "version": "==2.8.1" + "version": "==2.8.2" }, "pytz": { "hashes": [ @@ -1696,11 +1753,11 @@ }, "requests": { "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.25.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.26.0" }, "six": { "hashes": [ @@ -1805,27 +1862,29 @@ }, "tox": { "hashes": [ - "sha256:307a81ddb82bd463971a273f33e9533a24ed22185f27db8ce3386bff27d324e3", - "sha256:b0b5818049a1c1997599d42012a637a33f24c62ab8187223fdd318fa8522637b" + "sha256:ae442d4d51d5a3afb3711e4c7d94f5ca8461afd27c53f5dd994aba34896cf02d", + "sha256:d45d39203b10fdb2f6887c6779865e31de82cea07419a739844cc4bd4b3493e2", + "sha256:f5ad550fb63b72cdac1e5ef24565d7cc0766de585411ce4da945f0c150807dfc" ], "index": "pypi", - "version": "==3.23.1" + "version": "==3.24.2" }, "urllib3": { "hashes": [ - "sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c", - "sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098" + "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4", + "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.5" + "version": "==1.26.6" }, "virtualenv": { "hashes": [ - "sha256:14fdf849f80dbb29a4eb6caa9875d476ee2a5cf76a5f5415fa2f1606010ab467", - "sha256:2b0126166ea7c9c3661f5b8e06773d28f83322de7a3ff7d06f0aed18c9de6a76" + "sha256:4df1e1476915c986e2fece1e64c78d34bf49551fec73e303b534d37f785f0929", + "sha256:9ef4e8ee4710826e98ff3075c9a4739e2cb1040de6a2a8d35db0055840dc96a0", + "sha256:e4670891b3a03eb071748c569a87cceaefbf643c5bac46d996c5a45c34aa0f06" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.4.7" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==20.7.2" } } } From 95abc7d6d7ca7d1d87a1434f7689ed978f851f6c Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:33:33 +0200 Subject: [PATCH 865/898] fix bug with DPI calculation --- src/paperless_tesseract/parsers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 57cfb0118..d53879542 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -70,7 +70,7 @@ class RasterisedDocumentParser(DocumentParser): try: with Image.open(image) as im: x, y = im.info['dpi'] - return x + return round(x) except Exception as e: self.log( 'warning', From 1a11532349f51d6b287d190dbac002a3009b9e2f Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:40:27 +0200 Subject: [PATCH 866/898] install required dependency for building paperless-ng on GitHub CI --- Pipfile | 1 + Pipfile.lock | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index 788c21386..3000d183f 100644 --- a/Pipfile +++ b/Pipfile @@ -50,6 +50,7 @@ concurrent-log-handler = "*" uvloop = "~=0.15" cryptography = "~=3.4" "pdfminer.six" = "*" +"backports.zoneinfo" = "*" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 32d21e50a..edd0f08f9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3a5b5284e052306a4065c2993a87a3f3cb744a3261e18ac26f1a17a6a8693268" + "sha256": "f1450428542c1cccbfc688c658a4417e8e5eb50bb9502fce0d9ebf27cb94a2e4" }, "pipfile-spec": 6, "requires": {}, @@ -74,6 +74,30 @@ ], "version": "==20.2.0" }, + "backports.zoneinfo": { + "hashes": [ + "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf", + "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328", + "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546", + "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6", + "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570", + "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9", + "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7", + "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987", + "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722", + "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582", + "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc", + "sha256:dff179a489c57d2c9ccd60720f1ec13173bc1aa1c15c2714649581b32eab56ca", + "sha256:e34cdbc646438368c17100e3dafeb88626d3b5467b89681d20ef6731a29e2895", + "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b", + "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1", + "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08", + "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", + "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" + ], + "index": "pypi", + "version": "==0.2.1" + }, "blessed": { "hashes": [ "sha256:8b09936def6bc06583db99b65636b980075733e13550cb6af262ce724a55da23", From 3d917b0cd52418c90b893c544c45609881563bbb Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Wed, 18 Aug 2021 21:56:59 +0200 Subject: [PATCH 867/898] New Crowdin updates (#1198) --- src-ui/src/locale/messages.pl_PL.xlf | 8 ++-- src-ui/src/locale/messages.ro_RO.xlf | 6 +-- src/locale/es_ES/LC_MESSAGES/django.po | 18 ++++---- src/locale/pl_PL/LC_MESSAGES/django.po | 16 +++---- src/locale/ro_RO/LC_MESSAGES/django.po | 14 +++--- src/locale/sv_SE/LC_MESSAGES/django.po | 60 +++++++++++++------------- 6 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index da6833e5a..207523b0b 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Dodaj element Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Dodaj tag Show all @@ -2000,7 +2000,7 @@ src/app/services/settings.service.ts 102 - Swedish + Szwedzki ISO 8601 @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Dopasowanie Create new item diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 6f5dfb74e..441be5de7 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Adaugă element Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Adaugă etichetă Show all @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Scor de căutare Create new item diff --git a/src/locale/es_ES/LC_MESSAGES/django.po b/src/locale/es_ES/LC_MESSAGES/django.po index c91b6e223..00f9dc769 100644 --- a/src/locale/es_ES/LC_MESSAGES/django.po +++ b/src/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-07-11 08:29\n" +"PO-Revision-Date: 2021-07-29 20:57\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -108,7 +108,7 @@ msgstr "Cifrado con GNU Privacy Guard" #: documents/models.py:124 msgid "title" -msgstr "titulo" +msgstr "título" #: documents/models.py:137 msgid "content" @@ -256,7 +256,7 @@ msgstr "ordenar al revés" #: documents/models.py:373 msgid "title contains" -msgstr "el titulo contiene" +msgstr "el título contiene" #: documents/models.py:374 msgid "content contains" @@ -340,7 +340,7 @@ msgstr "consulta de texto completo" #: documents/models.py:394 msgid "more like this" -msgstr "" +msgstr "más contenido similar" #: documents/models.py:405 msgid "rule type" @@ -490,7 +490,7 @@ msgstr "Acciones" #: paperless_mail/admin.py:51 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "La acción aplicada al correo. Esta acción solo se realiza cuando los documentos se consumen del correo. Los correos sin archivos adjuntos permanecerán totalmente intactos." +msgstr "La acción se aplicó al correo. Esta acción sólo se realiza cuando los documentos se consumen desde el correo. Los correos sin archivos adjuntos permanecerán totalmente intactos." #: paperless_mail/admin.py:58 msgid "Metadata" @@ -590,7 +590,7 @@ msgstr "Borrar" #: paperless_mail/models.py:96 msgid "Use subject as title" -msgstr "Usar asunto como titulo" +msgstr "Usar asunto como título" #: paperless_mail/models.py:97 msgid "Use attachment filename as title" @@ -606,7 +606,7 @@ msgstr "Usar dirección de correo" #: paperless_mail/models.py:111 msgid "Use name (or mail address if not available)" -msgstr "Usar nombre (o dirección de correo si no está disponible)" +msgstr "Usar nombre (o dirección de correo sino está disponible)" #: paperless_mail/models.py:113 msgid "Use correspondent selected below" @@ -674,11 +674,11 @@ msgstr "parámetro de acción" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "Parámetro adicional para la acción seleccionada arriba. Ej. la carpeta de destino de la acción de mover a carpeta. Las subcarpetas deben estar separadas por puntos." +msgstr "Parámetro adicional para la acción seleccionada arriba. Ej. la carpeta de destino de la acción \"mover a carpeta\". Las subcarpetas deben estar separadas por puntos." #: paperless_mail/models.py:184 msgid "assign title from" -msgstr "asignar titulo desde" +msgstr "asignar título desde" #: paperless_mail/models.py:194 msgid "assign this tag" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po index 83df3593e..350204e08 100644 --- a/src/locale/pl_PL/LC_MESSAGES/django.po +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-08-07 13:02\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -462,7 +462,7 @@ msgstr "Polski" #: paperless/settings.py:315 msgid "Swedish" -msgstr "" +msgstr "Szwedzki" #: paperless/urls.py:120 msgid "Paperless-ng administration" @@ -470,11 +470,11 @@ msgstr "Administracja Paperless-ng" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Uwierzytelnianie" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Ustawienia zaawansowane" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "hasło" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Kodowanie" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Zestaw znaków używany podczas komunikowania się z serwerem poczty, np. \"UTF-8\" lub \"US-ASCII\"." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "folder" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Podfoldery muszą być oddzielone kropkami." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "parametr akcji" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Dodatkowy parametr dla akcji wybranej powyżej, tj. docelowy folder akcji \"Przenieś do określonego folderu\". Podfoldery muszą być oddzielone kropkami." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/ro_RO/LC_MESSAGES/django.po b/src/locale/ro_RO/LC_MESSAGES/django.po index f547fbca0..1fbb3da38 100644 --- a/src/locale/ro_RO/LC_MESSAGES/django.po +++ b/src/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-08-16 09:06\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -470,11 +470,11 @@ msgstr "Administrare Paperless-ng" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Autentificare" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Setări avansate" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "parolă" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Set de caractere" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Setul de caractere folosit la comunicarea cu serverul de e-mail, cum ar fi \"UTF-8\" sau \"US-ASCII\"." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "director" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Subdosarele trebuie separate prin puncte." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "parametru acțiune" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Parametru adițional pentru acțiunea definită mai sus (ex. directorul în care să se realizeze o mutare). Subdosarele trebuie separate prin puncte." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/sv_SE/LC_MESSAGES/django.po b/src/locale/sv_SE/LC_MESSAGES/django.po index 44baa7a90..05219f931 100644 --- a/src/locale/sv_SE/LC_MESSAGES/django.po +++ b/src/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 11:15\n" +"PO-Revision-Date: 2021-07-30 18:02\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -39,7 +39,7 @@ msgstr "Reguljära uttryck" #: documents/models.py:36 msgid "Fuzzy word" -msgstr "Fuzzy word" +msgstr "Ungefärligt ord" #: documents/models.py:37 msgid "Automatic" @@ -76,19 +76,19 @@ msgstr "färg" #: documents/models.py:87 msgid "is inbox tag" -msgstr "är inkorgstagg" +msgstr "är inkorgsetikett" #: documents/models.py:89 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "Markerar denna tagg som en inkorgstagg: Alla nyligen konsumerade dokument kommer att taggas med inkorgstaggar." +msgstr "Markerar denna etikett som en inkorgsetikett: Alla nyligen konsumerade dokument kommer att märkas med inkorgsetiketter." #: documents/models.py:94 msgid "tag" -msgstr "tagg" +msgstr "etikett" #: documents/models.py:95 documents/models.py:151 msgid "tags" -msgstr "taggar" +msgstr "etiketter" #: documents/models.py:101 documents/models.py:133 msgid "document type" @@ -116,7 +116,7 @@ msgstr "innehåll" #: documents/models.py:139 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "Dokumentets råa, enbart text data. Detta fält används främst för sökning." +msgstr "Dokumentets obearbetade textdata. Detta fält används främst för sökning." #: documents/models.py:144 msgid "mime type" @@ -136,7 +136,7 @@ msgstr "arkivera kontrollsumma" #: documents/models.py:168 msgid "The checksum of the archived document." -msgstr "Kontrollsumman för arkiverat dokument." +msgstr "Kontrollsumman för det arkiverade dokumentet." #: documents/models.py:172 documents/models.py:328 msgid "created" @@ -148,7 +148,7 @@ msgstr "ändrad" #: documents/models.py:180 msgid "storage type" -msgstr "Lagringstyp" +msgstr "lagringstyp" #: documents/models.py:188 msgid "added" @@ -160,7 +160,7 @@ msgstr "filnamn" #: documents/models.py:198 msgid "Current filename in storage" -msgstr "Nuvarande filnamn i lagring" +msgstr "Nuvarande filnamn i lagringsutrymmet" #: documents/models.py:202 msgid "archive filename" @@ -168,11 +168,11 @@ msgstr "arkivfilnamn" #: documents/models.py:208 msgid "Current archive filename in storage" -msgstr "Nuvarande arkivfilnamn i lagring" +msgstr "Nuvarande arkivfilnamn i lagringsutrymmet" #: documents/models.py:212 msgid "archive serial number" -msgstr "arkivets serienummer" +msgstr "serienummer (arkivering)" #: documents/models.py:217 msgid "The position of this document in your physical document archive." @@ -240,7 +240,7 @@ msgstr "användare" #: documents/models.py:354 msgid "show on dashboard" -msgstr "visa på instrumentpanelen" +msgstr "visa på kontrollpanelen" #: documents/models.py:357 msgid "show in sidebar" @@ -252,7 +252,7 @@ msgstr "sortera fält" #: documents/models.py:367 msgid "sort reverse" -msgstr "sortera omvänd" +msgstr "sortera omvänt" #: documents/models.py:373 msgid "title contains" @@ -280,11 +280,11 @@ msgstr "är i inkorgen" #: documents/models.py:379 msgid "has tag" -msgstr "har tagg" +msgstr "har etikett" #: documents/models.py:380 msgid "has any tag" -msgstr "har någon tagg" +msgstr "har någon etikett" #: documents/models.py:381 msgid "created before" @@ -324,7 +324,7 @@ msgstr "ändrad efter" #: documents/models.py:390 msgid "does not have tag" -msgstr "har inte tagg" +msgstr "har inte etikett" #: documents/models.py:391 msgid "does not have ASN" @@ -332,7 +332,7 @@ msgstr "har inte ASN" #: documents/models.py:392 msgid "title or content contains" -msgstr "titeln eller innehållet innehåller" +msgstr "titel eller innehåll innehåller" #: documents/models.py:393 msgid "fulltext query" @@ -382,7 +382,7 @@ msgstr "Paperless-ng utloggad" #: documents/templates/registration/logged_out.html:45 msgid "You have been successfully logged out. Bye!" -msgstr "Du är nu utloggad!" +msgstr "Du är nu utloggad. Hejdå!" #: documents/templates/registration/logged_out.html:46 msgid "Sign in again" @@ -398,7 +398,7 @@ msgstr "Vänligen logga in." #: documents/templates/registration/login.html:50 msgid "Your username and password didn't match. Please try again." -msgstr "Ditt användarnamn och lösenord stämde inte. Försök igen." +msgstr "Ditt användarnamn och lösenord matchade inte. Vänligen försök igen." #: documents/templates/registration/login.html:53 msgid "Username" @@ -498,7 +498,7 @@ msgstr "Metadata" #: paperless_mail/admin.py:60 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "Tilldela metadata till dokument som konsumeras från denna regel automatiskt. Om du inte tilldelar taggar, typer eller korrespondenter här kommer paperless fortfarande att behandla alla matchande regler som du har definierat." +msgstr "Tilldela metadata till dokument som konsumeras från denna regel automatiskt. Om du inte tilldelar etiketter, typer eller korrespondenter här kommer paperless fortfarande att behandla alla matchande regler som du har definierat." #: paperless_mail/apps.py:9 msgid "Paperless mail" @@ -530,7 +530,7 @@ msgstr "IMAP-server" #: paperless_mail/models.py:33 msgid "IMAP port" -msgstr "IMAP port" +msgstr "IMAP-port" #: paperless_mail/models.py:36 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." @@ -538,7 +538,7 @@ msgstr "Detta är vanligtvis 143 för okrypterade och STARTTLS-anslutningar, och #: paperless_mail/models.py:40 msgid "IMAP security" -msgstr "IMAP säkerhet" +msgstr "IMAP-säkerhet" #: paperless_mail/models.py:46 msgid "username" @@ -570,7 +570,7 @@ msgstr "Behandla endast bilagor." #: paperless_mail/models.py:76 msgid "Process all files, including 'inline' attachments." -msgstr "Behandla alla filer, inklusive \"inline\" bilagor." +msgstr "Behandla alla filer, inklusive infogade bilagor." #: paperless_mail/models.py:86 msgid "Mark as read, don't process read mails" @@ -578,7 +578,7 @@ msgstr "Markera som läst, bearbeta inte lästa meddelanden" #: paperless_mail/models.py:87 msgid "Flag the mail, don't process flagged mails" -msgstr "Flagga mailet, bearbeta inte flaggade mail" +msgstr "Flagga meddelandet, bearbeta inte flaggade meddelanden" #: paperless_mail/models.py:88 msgid "Move to specified folder" @@ -646,11 +646,11 @@ msgstr "filtrera filnamn för bilaga" #: paperless_mail/models.py:150 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "Konsumera endast dokument som helt och hållet matchar detta filnamn om det anges. Wildcards som *.pdf eller *faktura* är tillåtna. Ej skiftlägeskänsliga." +msgstr "Konsumera endast dokument som matchar exakt detta filnamn, om det är angivet. Jokertecken som *.pdf eller *faktura* är tillåtna. Ej skiftlägeskänsligt." #: paperless_mail/models.py:156 msgid "maximum age" -msgstr "maximal ålder" +msgstr "högsta ålder" #: paperless_mail/models.py:158 msgid "Specified in days." @@ -662,7 +662,7 @@ msgstr "typ av bilaga" #: paperless_mail/models.py:164 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "Bifogade bilagor inkluderar inbäddade bilder, så det är bäst att kombinera detta alternativ med ett filnamnsfilter." +msgstr "Infogade bilagor inkluderar inbäddade bilder, så det är bäst att kombinera detta alternativ med ett filnamnsfilter." #: paperless_mail/models.py:169 msgid "action" @@ -674,7 +674,7 @@ msgstr "åtgärdsparameter" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "Ytterligare parametrar för åtgärden som valts ovan, d.v.s. målmappen för flytten till mapp-åtgärder. Undermappar måste vara separerade med punkter." +msgstr "Ytterligare parametrar för åtgärden som valts ovan, d.v.s. målmappen för åtgärden \"flytta till angiven mapp\". Undermappar måste vara separerade med punkter." #: paperless_mail/models.py:184 msgid "assign title from" @@ -682,7 +682,7 @@ msgstr "tilldela titel från" #: paperless_mail/models.py:194 msgid "assign this tag" -msgstr "tilldela denna tagg" +msgstr "tilldela denna etikett" #: paperless_mail/models.py:202 msgid "assign this document type" From bc685e8edb9094058113adb27229aaedba6d83e8 Mon Sep 17 00:00:00 2001 From: Daniel Albers Date: Sun, 8 Aug 2021 21:29:36 +0200 Subject: [PATCH 868/898] Make ignores configurable Adds config file setting PAPERLESS_CONSUMER_IGNORE_PATTERNS. --- paperless.conf.example | 1 + .../management/commands/document_consumer.py | 16 ++++++---------- src/documents/tests/test_management_consumer.py | 16 ++++++++++++++++ src/paperless/settings.py | 6 ++++++ 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/paperless.conf.example b/paperless.conf.example index b1b63879d..a62d92e05 100644 --- a/paperless.conf.example +++ b/paperless.conf.example @@ -57,6 +57,7 @@ #PAPERLESS_CONSUMER_POLLING=10 #PAPERLESS_CONSUMER_DELETE_DUPLICATES=false #PAPERLESS_CONSUMER_RECURSIVE=false +#PAPERLESS_CONSUMER_IGNORE_PATTERNS=[".DS_STORE/*", "._*", ".stfolder/*"] #PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=false #PAPERLESS_OPTIMIZE_THUMBNAILS=true #PAPERLESS_POST_CONSUME_SCRIPT=/path/to/an/arbitrary/script.sh diff --git a/src/documents/management/commands/document_consumer.py b/src/documents/management/commands/document_consumer.py index 9f0ce79c3..eb8c57c84 100644 --- a/src/documents/management/commands/document_consumer.py +++ b/src/documents/management/commands/document_consumer.py @@ -1,6 +1,6 @@ import logging import os -from pathlib import Path +from pathlib import Path, PurePath from threading import Thread from time import sleep @@ -36,15 +36,11 @@ def _tags_from_path(filepath): return tag_ids -def _is_ignored(filepath): - # https://github.com/jonaswinkler/paperless-ng/discussions/1037 - basename = os.path.basename(filepath) - if basename == ".DS_STORE": - return True - if basename.startswith("._"): - return True - - return False +def _is_ignored(filepath: str) -> bool: + filepath_relative = PurePath(filepath).relative_to( + settings.CONSUMPTION_DIR) + return any( + filepath_relative.match(p) for p in settings.CONSUMER_IGNORE_PATTERNS) def _consume(filepath): diff --git a/src/documents/tests/test_management_consumer.py b/src/documents/tests/test_management_consumer.py index ec5a8dc0b..377e8fc54 100644 --- a/src/documents/tests/test_management_consumer.py +++ b/src/documents/tests/test_management_consumer.py @@ -222,6 +222,22 @@ class TestConsumer(DirectoriesMixin, ConsumerMixin, TransactionTestCase): fnames = [os.path.basename(args[1]) for args, _ in self.task_mock.call_args_list] self.assertCountEqual(fnames, ["my_file.pdf", "my_second_file.pdf"]) + def test_is_ignored(self): + test_paths = [ + (os.path.join(self.dirs.consumption_dir, "foo.pdf"), False), + (os.path.join(self.dirs.consumption_dir, "foo","bar.pdf"), False), + (os.path.join(self.dirs.consumption_dir, ".DS_STORE", "foo.pdf"), True), + (os.path.join(self.dirs.consumption_dir, "foo", ".DS_STORE", "bar.pdf"), True), + (os.path.join(self.dirs.consumption_dir, ".stfolder", "foo.pdf"), True), + (os.path.join(self.dirs.consumption_dir, "._foo.pdf"), True), + (os.path.join(self.dirs.consumption_dir, "._foo", "bar.pdf"), False), + ] + for file_path, expected_ignored in test_paths: + self.assertEqual( + expected_ignored, + document_consumer._is_ignored(file_path), + f'_is_ignored("{file_path}") != {expected_ignored}') + @override_settings(CONSUMER_POLLING=1, CONSUMER_POLLING_DELAY=1, CONSUMER_POLLING_RETRY_COUNT=20) class TestConsumerPolling(TestConsumer): diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 254c7a6ce..5f03a406e 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -458,6 +458,12 @@ CONSUMER_DELETE_DUPLICATES = __get_boolean("PAPERLESS_CONSUMER_DELETE_DUPLICATES CONSUMER_RECURSIVE = __get_boolean("PAPERLESS_CONSUMER_RECURSIVE") +# Ignore glob patterns, relative to PAPERLESS_CONSUMPTION_DIR +CONSUMER_IGNORE_PATTERNS = list( + json.loads( + os.getenv("PAPERLESS_CONSUMER_IGNORE_PATTERNS", + '[".DS_STORE/*", "._*", ".stfolder/*"]'))) + CONSUMER_SUBDIRS_AS_TAGS = __get_boolean("PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS") OPTIMIZE_THUMBNAILS = __get_boolean("PAPERLESS_OPTIMIZE_THUMBNAILS", "true") From 7f9ca0618243d585b453a242a5d45813e91e0618 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 19 Aug 2021 00:06:23 +0200 Subject: [PATCH 869/898] update dependencies --- requirements.txt | 65 +++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/requirements.txt b/requirements.txt index 4d809df41..0dab262f9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,18 +8,20 @@ -i https://pypi.python.org/simple --extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 -arrow==1.1.0; python_version >= '3.6' -asgiref==3.3.4; python_version >= '3.6' +arrow==1.1.1; python_version >= '3.6' +asgiref==3.4.1; python_version >= '3.6' async-timeout==3.0.1; python_full_version >= '3.5.3' attrs==21.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' autobahn==21.3.1; python_version >= '3.7' automat==20.2.0 -blessed==1.18.0 +backports.zoneinfo==0.2.1 +blessed==1.18.1; python_version >= '2.7' certifi==2021.5.30 -cffi==1.14.5 -channels-redis==3.2.0 -channels==3.0.3 +cffi==1.14.6 +channels-redis==3.3.0 +channels==3.0.4 chardet==4.0.0; python_version >= '3.1' +charset-normalizer==2.0.4; python_version >= '3' click==8.0.1; python_version >= '3.6' coloredlogs==15.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.19 @@ -27,12 +29,12 @@ constantly==15.1.0 cryptography==3.4.7 daphne==3.0.2; python_version >= '3.6' dateparser==1.0.0 -django-cors-headers==3.7.0 +django-cors-headers==3.8.0 django-extensions==3.1.3 django-filter==2.4.0 django-picklefield==3.0.1; python_version >= '3' -django-q==1.3.8 -django==3.2.4 +django-q==1.3.9 +django==3.2.6 djangorestframework==3.12.4 filelock==3.0.12 fuzzywuzzy[speedup]==0.18.0 @@ -42,8 +44,8 @@ hiredis==2.0.0; python_version >= '3.6' httptools==0.2.0 humanfriendly==9.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 -idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -imap-tools==0.41.0 +idna==3.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +imap-tools==0.46.0 img2pdf==0.4.1 incremental==21.3.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' @@ -52,49 +54,50 @@ joblib==1.0.1; python_version >= '3.6' langdetect==1.0.9 lxml==4.6.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 -numpy==1.19.5 -ocrmypdf==12.0.3 +numpy==1.21.2 +ocrmypdf==12.3.2 pathvalidate==2.4.1 pdfminer.six==20201018 -pikepdf==2.12.2 -pillow==8.2.0 +pikepdf==2.16.1 +pillow==8.3.1 pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' portalocker==2.3.0; python_version >= '3' -psycopg2-binary==2.8.6 +psycopg2-binary==2.9.1 pyasn1-modules==0.2.8 pyasn1==0.4.8 pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' -python-dateutil==2.8.1 -python-dotenv==0.17.1 +python-dateutil==2.8.2 +python-dotenv==0.19.0 python-gnupg==0.4.7 python-levenshtein==0.12.2 python-magic==0.4.24 pytz==2021.1 pyyaml==5.4.1 redis==3.5.3 -regex==2021.4.4 -reportlab==3.5.67; python_version >= '2.7' and python_version < '4' -requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' +regex==2021.8.3 +reportlab==3.6.1; python_version >= '2.7' and python_version < '4' +requests==2.26.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' scikit-learn==0.24.0 -scipy==1.5.4 +scipy==1.7.1; python_version < '3.10' and python_version >= '3.7' service-identity==21.1.0 six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' sortedcontainers==2.4.0 sqlparse==0.4.1; python_version >= '3.5' -threadpoolctl==2.1.0; python_version >= '3.5' +threadpoolctl==2.2.0; python_version >= '3.6' tika==1.24 -tqdm==4.61.1 -twisted[tls]==21.2.0; python_full_version >= '3.5.4' +tqdm==4.62.1 +twisted[tls]==21.7.0; python_full_version >= '3.6.7' txaio==21.2.1; python_version >= '3.6' -tzlocal==2.1 -urllib3==1.26.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' -uvicorn[standard]==0.14.0 -uvloop==0.14.0 -watchdog==1.0.2 +typing-extensions==3.10.0.0 +tzlocal==3.0; python_version >= '3.6' +urllib3==1.26.6; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' +uvicorn[standard]==0.15.0 +uvloop==0.16.0 +watchdog==2.1.3 watchgod==0.7 wcwidth==0.2.5 websockets==9.1 -whitenoise==5.2.0 +whitenoise==5.3.0 whoosh==2.7.4 zope.interface==5.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' From 8d9e345899dfe110cee35b069be658b4d1f6dc93 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Thu, 19 Aug 2021 16:18:49 +0200 Subject: [PATCH 870/898] downgrade numpy due to armv7 issues --- Pipfile | 2 +- Pipfile.lock | 61 ++++++++++++++++++++++-------------------------- requirements.txt | 2 +- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/Pipfile b/Pipfile index 3000d183f..1a5d6f035 100644 --- a/Pipfile +++ b/Pipfile @@ -21,7 +21,7 @@ fuzzywuzzy = {extras = ["speedup"], version = "*"} gunicorn = "*" imap-tools = "*" langdetect = "*" -numpy = "~=1.21.0" +numpy = "~=1.20.0" pathvalidate = "*" pillow = "~=8.1" pikepdf = "~=2.5" diff --git a/Pipfile.lock b/Pipfile.lock index edd0f08f9..4f297844d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f1450428542c1cccbfc688c658a4417e8e5eb50bb9502fce0d9ebf27cb94a2e4" + "sha256": "e574568592f15d69f1126bd8057bddee0fc7d41df38a81eda24658628cfbb8fd" }, "pipfile-spec": 6, "requires": {}, @@ -607,40 +607,35 @@ }, "numpy": { "hashes": [ - "sha256:09858463db6dd9f78b2a1a05c93f3b33d4f65975771e90d2cf7aadb7c2f66edf", - "sha256:209666ce9d4a817e8a4597cd475b71b4878a85fa4b8db41d79fdb4fdee01dde2", - "sha256:298156f4d3d46815eaf0fcf0a03f9625fc7631692bd1ad851517ab93c3168fc6", - "sha256:30fc68307c0155d2a75ad19844224be0f2c6f06572d958db4e2053f816b859ad", - "sha256:423216d8afc5923b15df86037c6053bf030d15cc9e3224206ef868c2d63dd6dc", - "sha256:426a00b68b0d21f2deb2ace3c6d677e611ad5a612d2c76494e24a562a930c254", - "sha256:466e682264b14982012887e90346d33435c984b7fead7b85e634903795c8fdb0", - "sha256:51a7b9db0a2941434cd930dacaafe0fc9da8f3d6157f9d12f761bbde93f46218", - "sha256:52a664323273c08f3b473548bf87c8145b7513afd63e4ebba8496ecd3853df13", - "sha256:550564024dc5ceee9421a86fc0fb378aa9d222d4d0f858f6669eff7410c89bef", - "sha256:5de64950137f3a50b76ce93556db392e8f1f954c2d8207f78a92d1f79aa9f737", - "sha256:640c1ccfd56724f2955c237b6ccce2e5b8607c3bc1cc51d3933b8c48d1da3723", - "sha256:7fdc7689daf3b845934d67cb221ba8d250fdca20ac0334fea32f7091b93f00d3", - "sha256:805459ad8baaf815883d0d6f86e45b3b0b67d823a8f3fa39b1ed9c45eaf5edf1", - "sha256:92a0ab128b07799dd5b9077a9af075a63467d03ebac6f8a93e6440abfea4120d", - "sha256:9f2dc79c093f6c5113718d3d90c283f11463d77daa4e83aeeac088ec6a0bda52", - "sha256:a5109345f5ce7ddb3840f5970de71c34a0ff7fceb133c9441283bb8250f532a3", - "sha256:a55e4d81c4260386f71d22294795c87609164e22b28ba0d435850fbdf82fc0c5", - "sha256:a9da45b748caad72ea4a4ed57e9cd382089f33c5ec330a804eb420a496fa760f", - "sha256:b160b9a99ecc6559d9e6d461b95c8eec21461b332f80267ad2c10394b9503496", - "sha256:b342064e647d099ca765f19672696ad50c953cac95b566af1492fd142283580f", - "sha256:b5e8590b9245803c849e09bae070a8e1ff444f45e3f0bed558dd722119eea724", - "sha256:bf75d5825ef47aa51d669b03ce635ecb84d69311e05eccea083f31c7570c9931", - "sha256:c01b59b33c7c3ba90744f2c695be571a3bd40ab2ba7f3d169ffa6db3cfba614f", - "sha256:d96a6a7d74af56feb11e9a443150216578ea07b7450f7c05df40eec90af7f4a7", - "sha256:dd0e3651d210068d13e18503d75aaa45656eef51ef0b261f891788589db2cc38", - "sha256:e167b9805de54367dcb2043519382be541117503ce99e3291cc9b41ca0a83557", - "sha256:e42029e184008a5fd3d819323345e25e2337b0ac7f5c135b7623308530209d57", - "sha256:e6c1fb5fee36077f484224cecc5ac10ec6d80444eae16b98d0a09863813015a3", - "sha256:f545c082eeb09ae678dd451a1b1dbf17babd8a0d7adea02897a76e639afca310", - "sha256:fde50062d67d805bc96f1a9ecc0d37bfc2a8f02b937d2c50824d186aa91f2419" + "sha256:1676b0a292dd3c99e49305a16d7a9f42a4ab60ec522eac0d3dd20cdf362ac010", + "sha256:16f221035e8bd19b9dc9a57159e38d2dd060b48e93e1d843c49cb370b0f415fd", + "sha256:43909c8bb289c382170e0282158a38cf306a8ad2ff6dfadc447e90f9961bef43", + "sha256:4c020adbaa398721cd5e30c5aab52b505efcd35c3b0156e800245c1274c96962", + "sha256:4e465afc3b96dbc80cf4a5273e5e2b1e3451286361b4af70ce1adb2984d392f9", + "sha256:55b745fca0a5ab738647d0e4db099bd0a23279c32b31a783ad2ccea729e632df", + "sha256:5d050e1e4bc9ddb8656d7b4f414557720ddcca23a5b88dd7cff65e847864c400", + "sha256:637d827248f447e63585ca3f4a7d2dfaa882e094df6cfa177cc9cf9cd6cdf6d2", + "sha256:6690080810f77485667bfbff4f69d717c3be25e5b11bb2073e76bb3f578d99b4", + "sha256:66fbc6fed94a13b9801fb70b96ff30605ab0a123e775a5e7a26938b717c5d71a", + "sha256:67d44acb72c31a97a3d5d33d103ab06d8ac20770e1c5ad81bdb3f0c086a56cf6", + "sha256:6ca2b85a5997dabc38301a22ee43c82adcb53ff660b89ee88dded6b33687e1d8", + "sha256:6e51534e78d14b4a009a062641f465cfaba4fdcb046c3ac0b1f61dd97c861b1b", + "sha256:70eb5808127284c4e5c9e836208e09d685a7978b6a216db85960b1a112eeace8", + "sha256:830b044f4e64a76ba71448fce6e604c0fc47a0e54d8f6467be23749ac2cbd2fb", + "sha256:8b7bb4b9280da3b2856cb1fc425932f46fba609819ee1c62256f61799e6a51d2", + "sha256:a9c65473ebc342715cb2d7926ff1e202c26376c0dcaaee85a1fd4b8d8c1d3b2f", + "sha256:c1c09247ccea742525bdb5f4b5ceeacb34f95731647fe55774aa36557dbb5fa4", + "sha256:c5bf0e132acf7557fc9bb8ded8b53bbbbea8892f3c9a1738205878ca9434206a", + "sha256:d840d80623c96696fab0d15489f49425bec1c0f47f3bf0b3362ce0c75dbad993", + "sha256:db250fd3e90117e0312b611574cd1b3f78bec046783195075cbd7ba9c3d73f16", + "sha256:e515c9a93aebe27166ec9593411c58494fa98e5fcc219e47260d9ab8a1cc7f9f", + "sha256:e55185e51b18d788e49fe8305fd73ef4470596b33fc2c1ceb304566b99c71a69", + "sha256:ea9cff01e75a956dbee133fa8e5b68f2f92175233de2f88de3a682dd94deda65", + "sha256:f1452578d0516283c87608a5a5548b0cdde15b99650efdfd85182102ef7a7c17", + "sha256:f39a995e47cb8649673cfa0579fbdd1cdd33ea497d1728a6cb194d6252268e48" ], "index": "pypi", - "version": "==1.21.2" + "version": "==1.20.3" }, "ocrmypdf": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 0dab262f9..7fd7b98ca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -54,7 +54,7 @@ joblib==1.0.1; python_version >= '3.6' langdetect==1.0.9 lxml==4.6.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.2 -numpy==1.21.2 +numpy==1.20.3 ocrmypdf==12.3.2 pathvalidate==2.4.1 pdfminer.six==20201018 From c9408e8d59040da5a02abc5b5889550ee59824af Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 16:26:58 +0200 Subject: [PATCH 871/898] changelog --- docs/changelog.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 03085da25..2e7edece3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,18 @@ Changelog ********* +paperless-ng 1.5.0 +################## + +This is a maintenance release. + +Support for Python 3.6 was dropped. + +* Updated python dependencies. +* Base image of the docker image changed from Debian Buster to Debian Bullseye due to its recent release. +* The docker image now uses python 3.9. +* Added the Luxembourgish locale. Thanks for translating! + paperless-ng 1.4.5 ################## From b7d4225737cd675ac238fae794a75d187c880471 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 16:27:44 +0200 Subject: [PATCH 872/898] fix whitespace --- docs/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index dd1e6341c..bd3fe1a4f 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -257,7 +257,7 @@ PAPERLESS_OCR_LANGUAGE= languages enabled. Defaults to "eng". - + Note: If your language contains a '-' such as chi-sim, you must use chi_sim PAPERLESS_OCR_MODE= From 007d10f5730d6a754fe7fdce00ea466e266c47f7 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 17:00:36 +0200 Subject: [PATCH 873/898] Update docs/administration.rst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Stéphane Brunner --- docs/administration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/administration.rst b/docs/administration.rst index 7d99eb0f1..f517ccfa9 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -240,7 +240,7 @@ Document exporter The document exporter exports all your data from paperless into a folder for backup or migration to another DMS. -If you use the document exporter within a cronjob to backup your data you might use the ``-t`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -t webserver document_exporter ../export`` +If you use the document exporter within a cronjob to backup your data you might use the ``-T`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -T webserver document_exporter ../export`` .. code:: From 6f06c4aa6b8ac5bb89393e632cf4acbd099b6159 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 17:03:45 +0200 Subject: [PATCH 874/898] fix whitespace --- docs/administration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/administration.rst b/docs/administration.rst index f517ccfa9..43710bd91 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -238,7 +238,7 @@ Document exporter ================= The document exporter exports all your data from paperless into a folder for -backup or migration to another DMS. +backup or migration to another DMS. If you use the document exporter within a cronjob to backup your data you might use the ``-T`` flag behind exec to suppress "The input device is not a TTY" errors. For example: ``docker-compose exec -T webserver document_exporter ../export`` From 9d3da8f8a51aedbd77f38b263301be9e31c5147e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 17:10:10 +0200 Subject: [PATCH 875/898] documentation --- docs/changelog.rst | 2 ++ docs/configuration.rst | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2e7edece3..8675cccb8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -16,6 +16,7 @@ Support for Python 3.6 was dropped. * Base image of the docker image changed from Debian Buster to Debian Bullseye due to its recent release. * The docker image now uses python 3.9. * Added the Luxembourgish locale. Thanks for translating! +* `Daniel Albers`_ added support for making the files and folders ignored by the paperless consume folder scanner configurable. See ``PAPERLESS_CONSUMER_IGNORE_PATTERNS``. paperless-ng 1.4.5 ################## @@ -1494,6 +1495,7 @@ bulk of the work on this big change. .. _JOKer: https://github.com/MasterofJOKers .. _Brian Cribbs: https://github.com/cribbstechnolog .. _Brendan M. Sleight: https://github.com/bmsleight +.. _Daniel Albers: https://github.com/AlD .. _#20: https://github.com/the-paperless-project/paperless/issues/20 .. _#44: https://github.com/the-paperless-project/paperless/issues/44 diff --git a/docs/configuration.rst b/docs/configuration.rst index bd3fe1a4f..c5bb811f6 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -631,7 +631,13 @@ PAPERLESS_DATE_ORDER= This option defaults to DMY which translates to day first, month second, and year last order. Characters D, M, or Y can be shuffled to meet the required order. +PAPERLESS_CONSUMER_IGNORE_PATTERNS= + By default, paperless ignores certain files and folders in the consumption + directory, such as system files created by the Mac OS. + This can be adjusted by configuring a custom json array with patterns to exclude. + + Defautls to ``[".DS_STORE/*", "._*", ".stfolder/*"]``. Binaries ######## From 221782e3fd8e690077d3570076aacf4fb311655e Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 17:11:36 +0200 Subject: [PATCH 876/898] version bump --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 409498958..67c4576aa 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + "api/", apiVersion: "2", appTitle: "Paperless-ng", - version: "1.4.5", + version: "1.5.0", webSocketHost: window.location.host, webSocketProtocol: (window.location.protocol == "https:" ? "wss:" : "ws:"), webSocketBaseUrl: base_url.pathname + "ws/", diff --git a/src/paperless/version.py b/src/paperless/version.py index a19fb0d9b..e75384eea 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1 @@ -__version__ = (1, 4, 5) +__version__ = (1, 5, 0) From 384f5fa6fb181b648dece9fa5fc12b138de38841 Mon Sep 17 00:00:00 2001 From: jonaswinkler <17569239+jonaswinkler@users.noreply.github.com> Date: Sun, 22 Aug 2021 17:15:14 +0200 Subject: [PATCH 877/898] changelog --- docs/changelog.rst | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 8675cccb8..4da732757 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,8 +8,6 @@ Changelog paperless-ng 1.5.0 ################## -This is a maintenance release. - Support for Python 3.6 was dropped. * Updated python dependencies. @@ -111,17 +109,6 @@ paperless-ng 1.4.0 To do this, execute the ``document_index reindex`` management command (see :ref:`administration-index`). -.. note:: - - Some packages that paperless depends on are slowly dropping Python 3.6 - support one after another, including the web server. Supporting Python - 3.6 means that I cannot update these packages anymore. - - At some point, paperless will drop Python 3.6 support. If using a bare - metal installation and you're still on Python 3.6, upgrade to 3.7 or newer. - - If using docker, this does not affect you. - paperless-ng 1.3.2 ################## From d38556cfd86ba75e350f1e687ab8e26d99b7028c Mon Sep 17 00:00:00 2001 From: Felix Eckhofer Date: Thu, 26 Aug 2021 18:40:12 +0200 Subject: [PATCH 878/898] Add PAPERLESS_LOGOUT_REDIRECT_URL When set, the user is redirected to this URL after a logout. Especially useful in conjunction with PAPERLESS_ENABLE_HTTP_REMOTE_USER and SSO. --- docs/configuration.rst | 7 +++++++ src/paperless/settings.py | 1 + 2 files changed, 8 insertions(+) diff --git a/docs/configuration.rst b/docs/configuration.rst index c5bb811f6..27ace497b 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -233,6 +233,13 @@ PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME= Defaults to `HTTP_REMOTE_USER`. +PAPERLESS_LOGOUT_REDIRECT_URL= + URL to redirect the user to after a logout. This can be used together with + `PAPERLESS_ENABLE_HTTP_REMOTE_USER` to redirect the user back to the SSO + application's logout page. + + Defaults to None, which disables this feature. + .. _configuration-ocr: OCR settings diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 5f03a406e..805b1aec0 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -144,6 +144,7 @@ ROOT_URLCONF = 'paperless.urls' FORCE_SCRIPT_NAME = os.getenv("PAPERLESS_FORCE_SCRIPT_NAME") BASE_URL = (FORCE_SCRIPT_NAME or "") + "/" LOGIN_URL = BASE_URL + "accounts/login/" +LOGOUT_REDIRECT_URL = os.getenv("PAPERLESS_LOGOUT_REDIRECT_URL") WSGI_APPLICATION = 'paperless.wsgi.application' ASGI_APPLICATION = "paperless.asgi.application" From 3ea164e4d27f999566bfac8de651cdaef3c36074 Mon Sep 17 00:00:00 2001 From: Uli Fahrer Date: Fri, 27 Aug 2021 08:32:16 +0200 Subject: [PATCH 879/898] fix(tika): adapt to Gotenberg 7 API This commit adapts to the latest breaking changes from Gotenberg 7. It also freezes the usage of the Gotenberg server to v7.x. Doing this prevents further breaking changes leaking in our code base. * refs #1250 --- docker/compose/docker-compose.postgres-tika.yml | 4 ++-- docker/compose/docker-compose.sqlite-tika.yml | 4 ++-- docs/configuration.rst | 6 +++--- docs/troubleshooting.rst | 12 ++++++------ scripts/start_services.sh | 2 +- src/paperless_tika/parsers.py | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 93fff4afc..f301b0d3c 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -75,10 +75,10 @@ services: PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: thecodingmachine/gotenberg + image: gotenberg/gotenberg:7 restart: unless-stopped environment: - DISABLE_GOOGLE_CHROME: 1 + CHROMIUM_DISABLE_ROUTES: 1 tika: image: apache/tika diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index 5dfff0830..f50e51aab 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -64,10 +64,10 @@ services: PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: thecodingmachine/gotenberg + image: gotenberg/gotenberg:7 restart: unless-stopped environment: - DISABLE_GOOGLE_CHROME: 1 + CHROMIUM_DISABLE_ROUTES: 1 tika: image: apache/tika diff --git a/docs/configuration.rst b/docs/configuration.rst index c5bb811f6..7d079a96c 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -402,7 +402,7 @@ Tika settings ############# Paperless can make use of `Tika `_ and -`Gotenberg `_ for parsing and +`Gotenberg `_ for parsing and converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you wish to use this, you must provide a Tika server and a Gotenberg server, configure their endpoints, and enable the feature. @@ -444,10 +444,10 @@ requires are as follows: # ... gotenberg: - image: thecodingmachine/gotenberg + image: gotenberg/gotenberg:7 restart: unless-stopped environment: - DISABLE_GOOGLE_CHROME: 1 + CHROMIUM_DISABLE_ROUTES: 1 tika: image: apache/tika diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 25a1b7f6f..f3ea612a0 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -101,22 +101,22 @@ You may experience these errors when using the optional TIKA integration: .. code:: - requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/convert/office + requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert -Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 10 seconds. +Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 30 seconds. When conversion takes longer, Gotenberg raises this error. -You can increase the timeout by configuring an environment variable for gotenberg (see also `here `__). +You can increase the timeout by configuring an environment variable for Gotenberg (see also `here `__). If using docker-compose, this is achieved by the following configuration change in the ``docker-compose.yml`` file: .. code:: yaml gotenberg: - image: thecodingmachine/gotenberg + image: gotenberg/gotenberg:7 restart: unless-stopped environment: - DISABLE_GOOGLE_CHROME: 1 - DEFAULT_WAIT_TIMEOUT: 30 + CHROMIUM_DISABLE_ROUTES: 1 + API_PROCESS_TIMEOUT: 60 Permission denied errors in the consumption directory ##################################################### diff --git a/scripts/start_services.sh b/scripts/start_services.sh index e2fc740a4..ecc842715 100755 --- a/scripts/start_services.sh +++ b/scripts/start_services.sh @@ -1,4 +1,4 @@ docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13 docker run -d -p 6379:6379 redis:latest -docker run -p 3000:3000 -d thecodingmachine/gotenberg +docker run -p 3000:3000 -d gotenberg/gotenberg:7 docker run -p 9998:9998 -d apache/tika diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py index 6b0f62ada..e6924ed92 100644 --- a/src/paperless_tika/parsers.py +++ b/src/paperless_tika/parsers.py @@ -67,7 +67,7 @@ class TikaDocumentParser(DocumentParser): def convert_to_pdf(self, document_path, file_name): pdf_path = os.path.join(self.tempdir, "convert.pdf") gotenberg_server = settings.PAPERLESS_TIKA_GOTENBERG_ENDPOINT - url = gotenberg_server + "/convert/office" + url = gotenberg_server + "/forms/libreoffice/convert" self.log("info", f"Converting {document_path} to PDF as {pdf_path}") files = {"files": (file_name or os.path.basename(document_path), From 3e868c40d428ac071d1e49e8a970f9f6b90cbcc8 Mon Sep 17 00:00:00 2001 From: Alex Kavanagh Date: Mon, 30 Aug 2021 17:57:37 +0100 Subject: [PATCH 880/898] Fix PAPERLESS_TIKA_GOTENBERG_ENDPOINT in a/t/main.yml This fixes the ansible role for installing paperless-ng where the config item PAPERLESS_TIKA_GOTENBERG_ENDPOINT derived from the wrong ansible variable "paperlessng_tika_endpoint". This patch corrects that to "paperlessng_tika_gotenberg_endpoint". --- ansible/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/tasks/main.yml b/ansible/tasks/main.yml index 92eb92032..9fc476597 100644 --- a/ansible/tasks/main.yml +++ b/ansible/tasks/main.yml @@ -329,7 +329,7 @@ - regexp: PAPERLESS_TIKA_ENDPOINT line: "PAPERLESS_TIKA_ENDPOINT={{ paperlessng_tika_endpoint }}" - regexp: PAPERLESS_TIKA_GOTENBERG_ENDPOINT - line: "PAPERLESS_TIKA_GOTENBERG_ENDPOINT={{ paperlessng_tika_endpoint }}" + line: "PAPERLESS_TIKA_GOTENBERG_ENDPOINT={{ paperlessng_tika_gotenberg_endpoint }}" # Software tweaks - regexp: PAPERLESS_TIME_ZONE line: "PAPERLESS_TIME_ZONE={{ paperlessng_time_zone }}" From d64f1432bdce6c9c5e5f68c95e2cfdb30ce732c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Kitterick?= Date: Tue, 31 Aug 2021 14:36:55 +0100 Subject: [PATCH 881/898] Updated docker instructions re webserver port Clarified exactly what to change to modify the default webserver port (issue #1273) --- docs/setup.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/setup.rst b/docs/setup.rst index 3600492da..99c910cf2 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -171,6 +171,24 @@ Install Paperless from Docker Hub Don't change the part after the colon or paperless wont find your documents. + You may also need to change the default port that the webserver will use + from the default (8000): + + .. code:: + + ports: + - 8000:8000 + + Replace the part BEFORE the colon with a port of your choice: + + .. code:: + + ports: + - 8010:8000 + + Don't change the part after the colon or edit other lines that refer to + port 8000. Modifying the part before the colon will map requests on another + port to the webserver running on the default port. 5. Modify ``docker-compose.env``, following the comments in the file. The most important change is to set ``USERMAP_UID`` and ``USERMAP_GID`` From e77f8be7782ded9bfc9725d962bd60e0440d80a6 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 8 Sep 2021 21:12:44 -0700 Subject: [PATCH 882/898] Show loading with spinner on document list reloading --- .../components/document-list/document-list.component.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 1b805bb2e..2da5f6813 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -82,8 +82,14 @@

+ +

+ Loading... + {list.collectionSize, plural, =1 {Selected {{list.selected.size}} of one document} other {Selected {{list.selected.size}} of {{list.collectionSize || 0}} documents}} - {list.collectionSize, plural, =1 {One document} other {{{list.collectionSize || 0}} documents}} (filtered) + + {list.collectionSize, plural, =1 {One document} other {{{list.collectionSize || 0}} documents}} (filtered) +

From 028156d0c8fe513b9108d811ac5c59bbbdb7c07a Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 10 Sep 2021 11:28:49 -0700 Subject: [PATCH 883/898] Add i18n --- .../app/components/document-list/document-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index 2da5f6813..c665476f4 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -84,7 +84,7 @@

- Loading... + Loading... {list.collectionSize, plural, =1 {Selected {{list.selected.size}} of one document} other {Selected {{list.selected.size}} of {{list.collectionSize || 0}} documents}} From ab76b98e04db6b768fa47ebda4440a00798a5022 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Fri, 10 Sep 2021 20:34:33 +0200 Subject: [PATCH 884/898] New Crowdin updates (#1276) --- src-ui/src/locale/messages.he_IL.xlf | 2340 ++++++++++++++++++++++++ src-ui/src/locale/messages.ru_RU.xlf | 12 +- src-ui/src/locale/messages.zh_TW.xlf | 2340 ++++++++++++++++++++++++ src/locale/he_IL/LC_MESSAGES/django.po | 698 +++++++ src/locale/ru_RU/LC_MESSAGES/django.po | 18 +- src/locale/zh_TW/LC_MESSAGES/django.po | 698 +++++++ 6 files changed, 6091 insertions(+), 15 deletions(-) create mode 100644 src-ui/src/locale/messages.he_IL.xlf create mode 100644 src-ui/src/locale/messages.zh_TW.xlf create mode 100644 src/locale/he_IL/LC_MESSAGES/django.po create mode 100644 src/locale/zh_TW/LC_MESSAGES/django.po diff --git a/src-ui/src/locale/messages.he_IL.xlf b/src-ui/src/locale/messages.he_IL.xlf new file mode 100644 index 000000000..51a846af1 --- /dev/null +++ b/src-ui/src/locale/messages.he_IL.xlf @@ -0,0 +1,2340 @@ + + + + + + Document added + + src/app/app.component.ts + 51 + + מסמך התווסף + + + Document was added to paperless. + + src/app/app.component.ts + 51 + + המסמך התווסף ל - paperless-ng. + + + Open document + + src/app/app.component.ts + 51 + + פתח מסמך + + + Could not add : + + src/app/app.component.ts + 59 + + לא יכול להוסיף את : + + + New document detected + + src/app/app.component.ts + 65 + + זוהה מסמך חדש + + + Document is being processed by paperless. + + src/app/app.component.ts + 65 + + מסמך נמצא בעיבוד ע"י Paperless-NG. + + + Documents + + src/app/components/document-list/document-list.component.ts + 51 + + Documents + + + View "" saved successfully. + + src/app/components/document-list/document-list.component.ts + 116 + + View "" saved successfully. + + + View "" created successfully. + + src/app/components/document-list/document-list.component.ts + 138 + + View "" created successfully. + + + Select + + src/app/components/document-list/document-list.component.html + 7 + + בחר + + + Select none + + src/app/components/document-list/document-list.component.html + 10 + + Select none + + + Select page + + src/app/components/document-list/document-list.component.html + 11 + + Select page + + + Select all + + src/app/components/document-list/document-list.component.html + 12 + + Select all + + + Sort + + src/app/components/document-list/document-list.component.html + 39 + + Sort + + + Views + + src/app/components/document-list/document-list.component.html + 64 + + Views + + + Save as... + + src/app/components/document-list/document-list.component.html + 72 + + Save as... + + + Save "" + + src/app/components/document-list/document-list.component.html + 71 + + Save "" + + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + src/app/components/document-list/document-list.component.html + 85 + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + src/app/components/document-list/document-list.component.html + 86 + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + + (filtered) + + src/app/components/document-list/document-list.component.html + 86 + + (filtered) + + + ASN + + src/app/components/document-list/document-list.component.html + 111 + + ASN + + + Correspondent + + src/app/components/document-list/document-list.component.html + 117 + + Correspondent + + + Title + + src/app/components/document-list/document-list.component.html + 123 + + Title + + + Document type + + src/app/components/document-list/document-list.component.html + 129 + + Document type + + + Created + + src/app/components/document-list/document-list.component.html + 135 + + Created + + + Added + + src/app/components/document-list/document-list.component.html + 141 + + Added + + + Confirm delete + + src/app/components/document-detail/document-detail.component.ts + 206 + + Confirm delete + + + Do you really want to delete document ""? + + src/app/components/document-detail/document-detail.component.ts + 207 + + Do you really want to delete document ""? + + + The files for this document will be deleted permanently. This operation cannot be undone. + + src/app/components/document-detail/document-detail.component.ts + 208 + + The files for this document will be deleted permanently. This operation cannot be undone. + + + Delete document + + src/app/components/document-detail/document-detail.component.ts + 210 + + Delete document + + + Error deleting document: + + src/app/components/document-detail/document-detail.component.ts + 217 + + Error deleting document: + + + Delete + + src/app/components/document-detail/document-detail.component.html + 15 + + Delete + + + Download + + src/app/components/document-detail/document-detail.component.html + 23 + + Download + + + More like this + + src/app/components/document-detail/document-detail.component.html + 38 + + More like this + + + Close + + src/app/components/document-detail/document-detail.component.html + 44 + + Close + + + Details + + src/app/components/document-detail/document-detail.component.html + 56 + + Details + + + Content + + src/app/components/document-detail/document-detail.component.html + 72 + + Content + + + Metadata + + src/app/components/document-detail/document-detail.component.html + 81 + + Metadata + + + Discard + + src/app/components/document-detail/document-detail.component.html + 130 + + Discard + + + Save + + src/app/components/document-detail/document-detail.component.html + 132 + + Save + + + Page + + src/app/components/document-detail/document-detail.component.html + 4 + + Page + + + of + + src/app/components/document-detail/document-detail.component.html + 8 + + of + + + Download original + + src/app/components/document-detail/document-detail.component.html + 29 + + Download original + + + Archive serial number + + src/app/components/document-detail/document-detail.component.html + 60 + + Archive serial number + + + Date created + + src/app/components/document-detail/document-detail.component.html + 61 + + Date created + + + Date modified + + src/app/components/document-detail/document-detail.component.html + 87 + + Date modified + + + Date added + + src/app/components/document-detail/document-detail.component.html + 91 + + Date added + + + Media filename + + src/app/components/document-detail/document-detail.component.html + 95 + + Media filename + + + Original MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 99 + + Original MD5 checksum + + + Original file size + + src/app/components/document-detail/document-detail.component.html + 103 + + Original file size + + + Original mime type + + src/app/components/document-detail/document-detail.component.html + 107 + + Original mime type + + + Archive MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 111 + + Archive MD5 checksum + + + Archive file size + + src/app/components/document-detail/document-detail.component.html + 115 + + Archive file size + + + Original document metadata + + src/app/components/document-detail/document-detail.component.html + 121 + + Original document metadata + + + Archived document metadata + + src/app/components/document-detail/document-detail.component.html + 122 + + Archived document metadata + + + Save & next + + src/app/components/document-detail/document-detail.component.html + 131 + + Save & next + + + Hello , welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 33 + + Hello , welcome to Paperless-ng! + + + Welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 35 + + Welcome to Paperless-ng! + + + Dashboard + + src/app/components/dashboard/dashboard.component.html + 1 + + Dashboard + + + Do you really want to delete the tag ""? + + src/app/components/manage/tag-list/tag-list.component.ts + 26 + + Do you really want to delete the tag ""? + + + Tags + + src/app/components/manage/tag-list/tag-list.component.html + 1 + + Tags + + + Create + + src/app/components/manage/tag-list/tag-list.component.html + 2 + + Create + + + Filter by: + + src/app/components/manage/tag-list/tag-list.component.html + 8 + + Filter by: + + + Name + + src/app/components/manage/tag-list/tag-list.component.html + 9 + + Name + + + Color + + src/app/components/manage/tag-list/tag-list.component.html + 20 + + Color + + + Matching + + src/app/components/manage/tag-list/tag-list.component.html + 21 + + Matching + + + Document count + + src/app/components/manage/tag-list/tag-list.component.html + 22 + + Document count + + + Actions + + src/app/components/manage/tag-list/tag-list.component.html + 23 + + Actions + + + Documents + + src/app/components/manage/tag-list/tag-list.component.html + 38 + + Documents + + + Edit + + src/app/components/manage/tag-list/tag-list.component.html + 43 + + Edit + + + Do you really want to delete the document type ""? + + src/app/components/manage/document-type-list/document-type-list.component.ts + 26 + + Do you really want to delete the document type ""? + + + Document types + + src/app/components/manage/document-type-list/document-type-list.component.html + 1 + + Document types + + + Logs + + src/app/components/manage/logs/logs.component.html + 1 + + Logs + + + Saved view "" deleted. + + src/app/components/manage/settings/settings.component.ts + 68 + + Saved view "" deleted. + + + Settings saved successfully. + + src/app/components/manage/settings/settings.component.ts + 89 + + Settings saved successfully. + + + Use system language + + src/app/components/manage/settings/settings.component.ts + 94 + + Use system language + + + Use date format of display language + + src/app/components/manage/settings/settings.component.ts + 100 + + Use date format of display language + + + Error while storing settings on server: + + src/app/components/manage/settings/settings.component.ts + 117 + + Error while storing settings on server: + + + Settings + + src/app/components/manage/settings/settings.component.html + 1 + + Settings + + + General settings + + src/app/components/manage/settings/settings.component.html + 10 + + General settings + + + Notifications + + src/app/components/manage/settings/settings.component.html + 116 + + Notifications + + + Saved views + + src/app/components/manage/settings/settings.component.html + 134 + + Saved views + + + Appearance + + src/app/components/manage/settings/settings.component.html + 13 + + Appearance + + + Display language + + src/app/components/manage/settings/settings.component.html + 17 + + Display language + + + You need to reload the page after applying a new language. + + src/app/components/manage/settings/settings.component.html + 25 + + You need to reload the page after applying a new language. + + + Date display + + src/app/components/manage/settings/settings.component.html + 32 + + Date display + + + Date format + + src/app/components/manage/settings/settings.component.html + 45 + + Date format + + + Short: + + src/app/components/manage/settings/settings.component.html + 51 + + Short: + + + Medium: + + src/app/components/manage/settings/settings.component.html + 55 + + Medium: + + + Long: + + src/app/components/manage/settings/settings.component.html + 59 + + Long: + + + Items per page + + src/app/components/manage/settings/settings.component.html + 67 + + Items per page + + + Document editor + + src/app/components/manage/settings/settings.component.html + 83 + + Document editor + + + Use PDF viewer provided by the browser + + src/app/components/manage/settings/settings.component.html + 87 + + Use PDF viewer provided by the browser + + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + src/app/components/manage/settings/settings.component.html + 87 + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + + Dark mode + + src/app/components/manage/settings/settings.component.html + 94 + + Dark mode + + + Use system settings + + src/app/components/manage/settings/settings.component.html + 97 + + Use system settings + + + Enable dark mode + + src/app/components/manage/settings/settings.component.html + 98 + + Enable dark mode + + + Invert thumbnails in dark mode + + src/app/components/manage/settings/settings.component.html + 99 + + Invert thumbnails in dark mode + + + Bulk editing + + src/app/components/manage/settings/settings.component.html + 103 + + Bulk editing + + + Show confirmation dialogs + + src/app/components/manage/settings/settings.component.html + 107 + + Show confirmation dialogs + + + Deleting documents will always ask for confirmation. + + src/app/components/manage/settings/settings.component.html + 107 + + Deleting documents will always ask for confirmation. + + + Apply on close + + src/app/components/manage/settings/settings.component.html + 108 + + Apply on close + + + Document processing + + src/app/components/manage/settings/settings.component.html + 119 + + Document processing + + + Show notifications when new documents are detected + + src/app/components/manage/settings/settings.component.html + 123 + + Show notifications when new documents are detected + + + Show notifications when document processing completes successfully + + src/app/components/manage/settings/settings.component.html + 124 + + Show notifications when document processing completes successfully + + + Show notifications when document processing fails + + src/app/components/manage/settings/settings.component.html + 125 + + Show notifications when document processing fails + + + Suppress notifications on dashboard + + src/app/components/manage/settings/settings.component.html + 126 + + Suppress notifications on dashboard + + + This will suppress all messages about document processing status on the dashboard. + + src/app/components/manage/settings/settings.component.html + 126 + + This will suppress all messages about document processing status on the dashboard. + + + Appears on + + src/app/components/manage/settings/settings.component.html + 146 + + Appears on + + + Show on dashboard + + src/app/components/manage/settings/settings.component.html + 149 + + Show on dashboard + + + Show in sidebar + + src/app/components/manage/settings/settings.component.html + 153 + + Show in sidebar + + + No saved views defined. + + src/app/components/manage/settings/settings.component.html + 163 + + No saved views defined. + + + 404 Not Found + + src/app/components/not-found/not-found.component.html + 7 + + 404 Not Found + + + Do you really want to delete the correspondent ""? + + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 26 + + Do you really want to delete the correspondent ""? + + + Correspondents + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 1 + + Correspondents + + + Last correspondence + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 22 + + Last correspondence + + + Confirmation + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 17 + + Confirmation + + + Confirm + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 29 + + Confirm + + + Cancel + + src/app/components/common/confirm-dialog/confirm-dialog.component.html + 12 + + Cancel + + + Create new correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 21 + + Create new correspondent + + + Edit correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 25 + + Edit correspondent + + + Matching algorithm + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 10 + + Matching algorithm + + + Matching pattern + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 11 + + Matching pattern + + + Case insensitive + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 12 + + Case insensitive + + + Create new tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 22 + + Create new tag + + + Edit tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 26 + + Edit tag + + + Inbox tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tag + + + Inbox tags are automatically assigned to all consumed documents. + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tags are automatically assigned to all consumed documents. + + + Create new document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 21 + + Create new document type + + + Edit document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 25 + + Edit document type + + + Paperless-ng + + src/app/components/app-frame/app-frame.component.html + 11 + + app title + Paperless-ng + + + Search documents + + src/app/components/app-frame/app-frame.component.html + 15 + + Search documents + + + Logout + + src/app/components/app-frame/app-frame.component.html + 45 + + Logout + + + Manage + + src/app/components/app-frame/app-frame.component.html + 112 + + Manage + + + Admin + + src/app/components/app-frame/app-frame.component.html + 154 + + Admin + + + Info + + src/app/components/app-frame/app-frame.component.html + 160 + + Info + + + Documentation + + src/app/components/app-frame/app-frame.component.html + 167 + + Documentation + + + GitHub + + src/app/components/app-frame/app-frame.component.html + 175 + + GitHub + + + Suggest an idea + + src/app/components/app-frame/app-frame.component.html + 181 + + Suggest an idea + + + Logged in as + + src/app/components/app-frame/app-frame.component.html + 34 + + Logged in as + + + Open documents + + src/app/components/app-frame/app-frame.component.html + 87 + + Open documents + + + Close all + + src/app/components/app-frame/app-frame.component.html + 106 + + Close all + + + Correspondent: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 37 + + Correspondent: + + + Without correspondent + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 39 + + Without correspondent + + + Type: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 44 + + Type: + + + Without document type + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 46 + + Without document type + + + Tag: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 50 + + Tag: + + + Without any tag + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 54 + + Without any tag + + + Title: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 58 + + Title: + + + ASN: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 61 + + ASN: + + + Title + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 88 + + Title + + + Title & content + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 89 + + Title & content + + + ASN + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 90 + + ASN + + + Advanced search + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 91 + + Advanced search + + + More like + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 94 + + More like + + + Filter tags + + src/app/components/document-list/filter-editor/filter-editor.component.html + 19 + + Filter tags + + + Filter correspondents + + src/app/components/document-list/filter-editor/filter-editor.component.html + 27 + + Filter correspondents + + + Filter document types + + src/app/components/document-list/filter-editor/filter-editor.component.html + 34 + + Filter document types + + + Reset filters + + src/app/components/document-list/filter-editor/filter-editor.component.html + 57 + + Reset filters + + + Not assigned + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts + 166 + + Filter drop down element to filter for documents with no correspondent/type/tag assigned + Not assigned + + + Apply + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.html + 26 + + Apply + + + Last 7 days + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 34 + + Last 7 days + + + Last month + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 35 + + Last month + + + Last 3 months + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 36 + + Last 3 months + + + Last year + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 37 + + Last year + + + After + + src/app/components/common/date-dropdown/date-dropdown.component.html + 13 + + After + + + Before + + src/app/components/common/date-dropdown/date-dropdown.component.html + 38 + + Before + + + Clear + + src/app/components/common/date-dropdown/date-dropdown.component.html + 18 + + Clear + + + View + + src/app/components/document-list/document-card-large/document-card-large.component.html + 51 + + View + + + Filter by correspondent + + src/app/components/document-list/document-card-large/document-card-large.component.html + 20 + + Filter by correspondent + + + Filter by tag + + src/app/components/document-list/document-card-large/document-card-large.component.html + 24 + + Filter by tag + + + Score: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 87 + + Score: + + + Created: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 43 + + Created: + + + Added: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 44 + + Added: + + + Modified: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 45 + + Modified: + + + Error executing bulk operation: + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 74 + + Error executing bulk operation: + + + "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 113 + + "" + + + "" and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 115 + + This is for messages like 'modify "tag1" and "tag2"' + "" and "" + + + , + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 117 + + this is used to separate enumerations and should probably be a comma and a whitespace in most languages + , + + + and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 118 + + this is for messages like 'modify "tag1", "tag2" and "tag3"' + and "" + + + Confirm tags assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 127 + + Confirm tags assignment + + + This operation will add the tag "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 130 + + This operation will add the tag "" to selected document(s). + + + This operation will add the tags to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 132 + + This operation will add the tags to selected document(s). + + + This operation will remove the tag "" from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 135 + + This operation will remove the tag "" from selected document(s). + + + This operation will remove the tags from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 137 + + This operation will remove the tags from selected document(s). + + + This operation will add the tags and remove the tags on selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 139 + + This operation will add the tags and remove the tags on selected document(s). + + + Confirm correspondent assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 159 + + Confirm correspondent assignment + + + This operation will assign the correspondent "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 161 + + This operation will assign the correspondent "" to selected document(s). + + + This operation will remove the correspondent from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 163 + + This operation will remove the correspondent from selected document(s). + + + Confirm document type assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 182 + + Confirm document type assignment + + + This operation will assign the document type "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 184 + + This operation will assign the document type "" to selected document(s). + + + This operation will remove the document type from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 186 + + This operation will remove the document type from selected document(s). + + + Delete confirm + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 201 + + Delete confirm + + + This operation will permanently delete selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 202 + + This operation will permanently delete selected document(s). + + + This operation cannot be undone. + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 203 + + This operation cannot be undone. + + + Delete document(s) + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 205 + + Delete document(s) + + + Select: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 10 + + Select: + + + All + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 20 + + All + + + Edit: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 27 + + Edit: + + + Download originals + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 68 + + Download originals + + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + + + Suggestions: + + src/app/components/common/input/select/select.component.html + 31 + + Suggestions: + + + Save current view + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 3 + + Save current view + + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + + + Show all + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 3 + + Show all + + + Statistics + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 1 + + Statistics + + + Total documents: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 4 + + Total documents: + + + Documents in inbox: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 3 + + Documents in inbox: + + + Processing: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 32 + + Processing: + + + Failed: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 35 + + Failed: + + + Added: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 38 + + Added: + + + Connecting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 118 + + Connecting... + + + Uploading... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 123 + + Uploading... + + + Upload complete, waiting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 126 + + Upload complete, waiting... + + + HTTP error: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 136 + + HTTP error: + + + Upload new documents + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 1 + + Upload new documents + + + Drop documents here or + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Drop documents here or + + + Browse files + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Browse files + + + Dismiss completed + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 4 + + This button dismisses all status messages about processed documents on the dashboard (failed and successful) + Dismiss completed + + + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 25 + + This is shown as a summary line when there are more than 5 document in the processing pipeline. + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + + Open document + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 45 + + פתח מסמך + + + First steps + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 1 + + First steps + + + Paperless is running! :) + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 5 + + Paperless is running! :) + + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 6,7 + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + + Paperless offers some more features that try to make your life easier: + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 8 + + Paperless offers some more features that try to make your life easier: + + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 10 + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + + You can configure paperless to read your mails and add documents from attached files. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 11 + + You can configure paperless to read your mails and add documents from attached files. + + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 13 + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + + Metadata + + src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts + 18 + + Metadata + + + Select + + src/app/components/common/select-dialog/select-dialog.component.ts + 18 + + בחר + + + Please select an object + + src/app/components/common/select-dialog/select-dialog.component.ts + 21 + + Please select an object + + + Invalid date. + + src/app/components/common/input/date/date.component.html + 14 + + Invalid date. + + + Searching document with asn + + src/app/components/document-asn/document-asn.component.html + 1 + + Searching document with asn + + + Yes + + src/app/pipes/yes-no.pipe.ts + 9 + + Yes + + + No + + src/app/pipes/yes-no.pipe.ts + 9 + + No + + + (no title) + + src/app/pipes/document-title.pipe.ts + 12 + + (no title) + + + English (US) + + src/app/services/settings.service.ts + 90 + + English (US) + + + English (GB) + + src/app/services/settings.service.ts + 91 + + English (GB) + + + German + + src/app/services/settings.service.ts + 92 + + German + + + Dutch + + src/app/services/settings.service.ts + 93 + + Dutch + + + French + + src/app/services/settings.service.ts + 94 + + French + + + Portuguese + + src/app/services/settings.service.ts + 95 + + Portuguese + + + Portuguese (Brazil) + + src/app/services/settings.service.ts + 96 + + Portuguese (Brazil) + + + Italian + + src/app/services/settings.service.ts + 97 + + Italian + + + Romanian + + src/app/services/settings.service.ts + 98 + + Romanian + + + Russian + + src/app/services/settings.service.ts + 99 + + Russian + + + Spanish + + src/app/services/settings.service.ts + 100 + + Spanish + + + Polish + + src/app/services/settings.service.ts + 101 + + Polish + + + Swedish + + src/app/services/settings.service.ts + 102 + + Swedish + + + ISO 8601 + + src/app/services/settings.service.ts + 107 + + ISO 8601 + + + Document already exists. + + src/app/services/consumer-status.service.ts + 15 + + Document already exists. + + + File not found. + + src/app/services/consumer-status.service.ts + 16 + + File not found. + + + Pre-consume script does not exist. + + src/app/services/consumer-status.service.ts + 17 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Pre-consume script does not exist. + + + Error while executing pre-consume script. + + src/app/services/consumer-status.service.ts + 18 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing pre-consume script. + + + Post-consume script does not exist. + + src/app/services/consumer-status.service.ts + 19 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Post-consume script does not exist. + + + Error while executing post-consume script. + + src/app/services/consumer-status.service.ts + 20 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing post-consume script. + + + Received new file. + + src/app/services/consumer-status.service.ts + 21 + + Received new file. + + + File type not supported. + + src/app/services/consumer-status.service.ts + 22 + + File type not supported. + + + Processing document... + + src/app/services/consumer-status.service.ts + 23 + + Processing document... + + + Generating thumbnail... + + src/app/services/consumer-status.service.ts + 24 + + Generating thumbnail... + + + Retrieving date from document... + + src/app/services/consumer-status.service.ts + 25 + + Retrieving date from document... + + + Saving document... + + src/app/services/consumer-status.service.ts + 26 + + Saving document... + + + Finished. + + src/app/services/consumer-status.service.ts + 27 + + Finished. + + + Error + + src/app/services/toast.service.ts + 35 + + Error + + + Information + + src/app/services/toast.service.ts + 39 + + Information + + + Correspondent + + src/app/services/rest/document.service.ts + 18 + + Correspondent + + + Document type + + src/app/services/rest/document.service.ts + 20 + + Document type + + + Created + + src/app/services/rest/document.service.ts + 21 + + Created + + + Added + + src/app/services/rest/document.service.ts + 22 + + Added + + + Modified + + src/app/services/rest/document.service.ts + 23 + + Modified + + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + + + Create new item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 50 + + Create new item + + + Edit item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 54 + + Edit item + + + Could not save element: + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 58 + + Could not save element: + + + Automatic + + src/app/components/manage/generic-list/generic-list.component.ts + 39 + + Automatic + + + Do you really want to delete this element? + + src/app/components/manage/generic-list/generic-list.component.ts + 97 + + Do you really want to delete this element? + + + Associated documents will not be deleted. + + src/app/components/manage/generic-list/generic-list.component.ts + 104 + + Associated documents will not be deleted. + + + Delete + + src/app/components/manage/generic-list/generic-list.component.ts + 106 + + Delete + + + Error while deleting element: + + src/app/components/manage/generic-list/generic-list.component.ts + 114 + + Error while deleting element: + + + Any word + + src/app/data/matching-model.ts + 12 + + Any word + + + Any: Document contains any of these words (space separated) + + src/app/data/matching-model.ts + 12 + + Any: Document contains any of these words (space separated) + + + All words + + src/app/data/matching-model.ts + 13 + + All words + + + All: Document contains all of these words (space separated) + + src/app/data/matching-model.ts + 13 + + All: Document contains all of these words (space separated) + + + Exact match + + src/app/data/matching-model.ts + 14 + + Exact match + + + Exact: Document contains this string + + src/app/data/matching-model.ts + 14 + + Exact: Document contains this string + + + Regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression + + + Regular expression: Document matches this regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression: Document matches this regular expression + + + Fuzzy word + + src/app/data/matching-model.ts + 16 + + Fuzzy word + + + Fuzzy: Document contains a word similar to this word + + src/app/data/matching-model.ts + 16 + + Fuzzy: Document contains a word similar to this word + + + Auto: Learn matching automatically + + src/app/data/matching-model.ts + 17 + + Auto: Learn matching automatically + + + + diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index 4e7a4e318..733b5a405 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -1614,7 +1614,7 @@ 11 Used for both types and correspondents - Add item + Добавить элемент Suggestions: @@ -1638,7 +1638,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + Добавить тег Show all @@ -1759,7 +1759,7 @@ 4 This button dismisses all status messages about processed documents on the dashboard (failed and successful) - Скрытие завершено + Скрыть завершённые {VAR_PLURAL, plural, =1 {One more document} other { more documents}} @@ -1992,7 +1992,7 @@ src/app/services/settings.service.ts 101 - Polish + Польский Swedish @@ -2000,7 +2000,7 @@ src/app/services/settings.service.ts 102 - Swedish + Шведский ISO 8601 @@ -2181,7 +2181,7 @@ 28 Score is a value returned by the full text search engine and specifies how well a result matches the given query - Search score + Релевантность Create new item diff --git a/src-ui/src/locale/messages.zh_TW.xlf b/src-ui/src/locale/messages.zh_TW.xlf new file mode 100644 index 000000000..7c55753fc --- /dev/null +++ b/src-ui/src/locale/messages.zh_TW.xlf @@ -0,0 +1,2340 @@ + + + + + + Document added + + src/app/app.component.ts + 51 + + Document added + + + Document was added to paperless. + + src/app/app.component.ts + 51 + + Document was added to paperless. + + + Open document + + src/app/app.component.ts + 51 + + Open document + + + Could not add : + + src/app/app.component.ts + 59 + + Could not add : + + + New document detected + + src/app/app.component.ts + 65 + + New document detected + + + Document is being processed by paperless. + + src/app/app.component.ts + 65 + + Document is being processed by paperless. + + + Documents + + src/app/components/document-list/document-list.component.ts + 51 + + Documents + + + View "" saved successfully. + + src/app/components/document-list/document-list.component.ts + 116 + + View "" saved successfully. + + + View "" created successfully. + + src/app/components/document-list/document-list.component.ts + 138 + + View "" created successfully. + + + Select + + src/app/components/document-list/document-list.component.html + 7 + + Select + + + Select none + + src/app/components/document-list/document-list.component.html + 10 + + Select none + + + Select page + + src/app/components/document-list/document-list.component.html + 11 + + Select page + + + Select all + + src/app/components/document-list/document-list.component.html + 12 + + Select all + + + Sort + + src/app/components/document-list/document-list.component.html + 39 + + Sort + + + Views + + src/app/components/document-list/document-list.component.html + 64 + + Views + + + Save as... + + src/app/components/document-list/document-list.component.html + 72 + + Save as... + + + Save "" + + src/app/components/document-list/document-list.component.html + 71 + + Save "" + + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + src/app/components/document-list/document-list.component.html + 85 + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + src/app/components/document-list/document-list.component.html + 86 + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + + (filtered) + + src/app/components/document-list/document-list.component.html + 86 + + (filtered) + + + ASN + + src/app/components/document-list/document-list.component.html + 111 + + ASN + + + Correspondent + + src/app/components/document-list/document-list.component.html + 117 + + Correspondent + + + Title + + src/app/components/document-list/document-list.component.html + 123 + + Title + + + Document type + + src/app/components/document-list/document-list.component.html + 129 + + Document type + + + Created + + src/app/components/document-list/document-list.component.html + 135 + + Created + + + Added + + src/app/components/document-list/document-list.component.html + 141 + + Added + + + Confirm delete + + src/app/components/document-detail/document-detail.component.ts + 206 + + Confirm delete + + + Do you really want to delete document ""? + + src/app/components/document-detail/document-detail.component.ts + 207 + + Do you really want to delete document ""? + + + The files for this document will be deleted permanently. This operation cannot be undone. + + src/app/components/document-detail/document-detail.component.ts + 208 + + The files for this document will be deleted permanently. This operation cannot be undone. + + + Delete document + + src/app/components/document-detail/document-detail.component.ts + 210 + + Delete document + + + Error deleting document: + + src/app/components/document-detail/document-detail.component.ts + 217 + + Error deleting document: + + + Delete + + src/app/components/document-detail/document-detail.component.html + 15 + + Delete + + + Download + + src/app/components/document-detail/document-detail.component.html + 23 + + Download + + + More like this + + src/app/components/document-detail/document-detail.component.html + 38 + + More like this + + + Close + + src/app/components/document-detail/document-detail.component.html + 44 + + Close + + + Details + + src/app/components/document-detail/document-detail.component.html + 56 + + Details + + + Content + + src/app/components/document-detail/document-detail.component.html + 72 + + Content + + + Metadata + + src/app/components/document-detail/document-detail.component.html + 81 + + Metadata + + + Discard + + src/app/components/document-detail/document-detail.component.html + 130 + + Discard + + + Save + + src/app/components/document-detail/document-detail.component.html + 132 + + Save + + + Page + + src/app/components/document-detail/document-detail.component.html + 4 + + Page + + + of + + src/app/components/document-detail/document-detail.component.html + 8 + + of + + + Download original + + src/app/components/document-detail/document-detail.component.html + 29 + + Download original + + + Archive serial number + + src/app/components/document-detail/document-detail.component.html + 60 + + Archive serial number + + + Date created + + src/app/components/document-detail/document-detail.component.html + 61 + + Date created + + + Date modified + + src/app/components/document-detail/document-detail.component.html + 87 + + Date modified + + + Date added + + src/app/components/document-detail/document-detail.component.html + 91 + + Date added + + + Media filename + + src/app/components/document-detail/document-detail.component.html + 95 + + Media filename + + + Original MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 99 + + Original MD5 checksum + + + Original file size + + src/app/components/document-detail/document-detail.component.html + 103 + + Original file size + + + Original mime type + + src/app/components/document-detail/document-detail.component.html + 107 + + Original mime type + + + Archive MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 111 + + Archive MD5 checksum + + + Archive file size + + src/app/components/document-detail/document-detail.component.html + 115 + + Archive file size + + + Original document metadata + + src/app/components/document-detail/document-detail.component.html + 121 + + Original document metadata + + + Archived document metadata + + src/app/components/document-detail/document-detail.component.html + 122 + + Archived document metadata + + + Save & next + + src/app/components/document-detail/document-detail.component.html + 131 + + Save & next + + + Hello , welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 33 + + Hello , welcome to Paperless-ng! + + + Welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 35 + + Welcome to Paperless-ng! + + + Dashboard + + src/app/components/dashboard/dashboard.component.html + 1 + + Dashboard + + + Do you really want to delete the tag ""? + + src/app/components/manage/tag-list/tag-list.component.ts + 26 + + Do you really want to delete the tag ""? + + + Tags + + src/app/components/manage/tag-list/tag-list.component.html + 1 + + Tags + + + Create + + src/app/components/manage/tag-list/tag-list.component.html + 2 + + Create + + + Filter by: + + src/app/components/manage/tag-list/tag-list.component.html + 8 + + Filter by: + + + Name + + src/app/components/manage/tag-list/tag-list.component.html + 9 + + Name + + + Color + + src/app/components/manage/tag-list/tag-list.component.html + 20 + + Color + + + Matching + + src/app/components/manage/tag-list/tag-list.component.html + 21 + + Matching + + + Document count + + src/app/components/manage/tag-list/tag-list.component.html + 22 + + Document count + + + Actions + + src/app/components/manage/tag-list/tag-list.component.html + 23 + + Actions + + + Documents + + src/app/components/manage/tag-list/tag-list.component.html + 38 + + Documents + + + Edit + + src/app/components/manage/tag-list/tag-list.component.html + 43 + + Edit + + + Do you really want to delete the document type ""? + + src/app/components/manage/document-type-list/document-type-list.component.ts + 26 + + Do you really want to delete the document type ""? + + + Document types + + src/app/components/manage/document-type-list/document-type-list.component.html + 1 + + Document types + + + Logs + + src/app/components/manage/logs/logs.component.html + 1 + + Logs + + + Saved view "" deleted. + + src/app/components/manage/settings/settings.component.ts + 68 + + Saved view "" deleted. + + + Settings saved successfully. + + src/app/components/manage/settings/settings.component.ts + 89 + + Settings saved successfully. + + + Use system language + + src/app/components/manage/settings/settings.component.ts + 94 + + Use system language + + + Use date format of display language + + src/app/components/manage/settings/settings.component.ts + 100 + + Use date format of display language + + + Error while storing settings on server: + + src/app/components/manage/settings/settings.component.ts + 117 + + Error while storing settings on server: + + + Settings + + src/app/components/manage/settings/settings.component.html + 1 + + Settings + + + General settings + + src/app/components/manage/settings/settings.component.html + 10 + + General settings + + + Notifications + + src/app/components/manage/settings/settings.component.html + 116 + + Notifications + + + Saved views + + src/app/components/manage/settings/settings.component.html + 134 + + Saved views + + + Appearance + + src/app/components/manage/settings/settings.component.html + 13 + + Appearance + + + Display language + + src/app/components/manage/settings/settings.component.html + 17 + + Display language + + + You need to reload the page after applying a new language. + + src/app/components/manage/settings/settings.component.html + 25 + + You need to reload the page after applying a new language. + + + Date display + + src/app/components/manage/settings/settings.component.html + 32 + + Date display + + + Date format + + src/app/components/manage/settings/settings.component.html + 45 + + Date format + + + Short: + + src/app/components/manage/settings/settings.component.html + 51 + + Short: + + + Medium: + + src/app/components/manage/settings/settings.component.html + 55 + + Medium: + + + Long: + + src/app/components/manage/settings/settings.component.html + 59 + + Long: + + + Items per page + + src/app/components/manage/settings/settings.component.html + 67 + + Items per page + + + Document editor + + src/app/components/manage/settings/settings.component.html + 83 + + Document editor + + + Use PDF viewer provided by the browser + + src/app/components/manage/settings/settings.component.html + 87 + + Use PDF viewer provided by the browser + + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + src/app/components/manage/settings/settings.component.html + 87 + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + + Dark mode + + src/app/components/manage/settings/settings.component.html + 94 + + Dark mode + + + Use system settings + + src/app/components/manage/settings/settings.component.html + 97 + + Use system settings + + + Enable dark mode + + src/app/components/manage/settings/settings.component.html + 98 + + Enable dark mode + + + Invert thumbnails in dark mode + + src/app/components/manage/settings/settings.component.html + 99 + + Invert thumbnails in dark mode + + + Bulk editing + + src/app/components/manage/settings/settings.component.html + 103 + + Bulk editing + + + Show confirmation dialogs + + src/app/components/manage/settings/settings.component.html + 107 + + Show confirmation dialogs + + + Deleting documents will always ask for confirmation. + + src/app/components/manage/settings/settings.component.html + 107 + + Deleting documents will always ask for confirmation. + + + Apply on close + + src/app/components/manage/settings/settings.component.html + 108 + + Apply on close + + + Document processing + + src/app/components/manage/settings/settings.component.html + 119 + + Document processing + + + Show notifications when new documents are detected + + src/app/components/manage/settings/settings.component.html + 123 + + Show notifications when new documents are detected + + + Show notifications when document processing completes successfully + + src/app/components/manage/settings/settings.component.html + 124 + + Show notifications when document processing completes successfully + + + Show notifications when document processing fails + + src/app/components/manage/settings/settings.component.html + 125 + + Show notifications when document processing fails + + + Suppress notifications on dashboard + + src/app/components/manage/settings/settings.component.html + 126 + + Suppress notifications on dashboard + + + This will suppress all messages about document processing status on the dashboard. + + src/app/components/manage/settings/settings.component.html + 126 + + This will suppress all messages about document processing status on the dashboard. + + + Appears on + + src/app/components/manage/settings/settings.component.html + 146 + + Appears on + + + Show on dashboard + + src/app/components/manage/settings/settings.component.html + 149 + + Show on dashboard + + + Show in sidebar + + src/app/components/manage/settings/settings.component.html + 153 + + Show in sidebar + + + No saved views defined. + + src/app/components/manage/settings/settings.component.html + 163 + + No saved views defined. + + + 404 Not Found + + src/app/components/not-found/not-found.component.html + 7 + + 404 Not Found + + + Do you really want to delete the correspondent ""? + + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 26 + + Do you really want to delete the correspondent ""? + + + Correspondents + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 1 + + Correspondents + + + Last correspondence + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 22 + + Last correspondence + + + Confirmation + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 17 + + Confirmation + + + Confirm + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 29 + + Confirm + + + Cancel + + src/app/components/common/confirm-dialog/confirm-dialog.component.html + 12 + + Cancel + + + Create new correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 21 + + Create new correspondent + + + Edit correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 25 + + Edit correspondent + + + Matching algorithm + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 10 + + Matching algorithm + + + Matching pattern + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 11 + + Matching pattern + + + Case insensitive + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 12 + + Case insensitive + + + Create new tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 22 + + Create new tag + + + Edit tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 26 + + Edit tag + + + Inbox tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tag + + + Inbox tags are automatically assigned to all consumed documents. + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tags are automatically assigned to all consumed documents. + + + Create new document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 21 + + Create new document type + + + Edit document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 25 + + Edit document type + + + Paperless-ng + + src/app/components/app-frame/app-frame.component.html + 11 + + app title + Paperless-ng + + + Search documents + + src/app/components/app-frame/app-frame.component.html + 15 + + Search documents + + + Logout + + src/app/components/app-frame/app-frame.component.html + 45 + + Logout + + + Manage + + src/app/components/app-frame/app-frame.component.html + 112 + + Manage + + + Admin + + src/app/components/app-frame/app-frame.component.html + 154 + + Admin + + + Info + + src/app/components/app-frame/app-frame.component.html + 160 + + Info + + + Documentation + + src/app/components/app-frame/app-frame.component.html + 167 + + Documentation + + + GitHub + + src/app/components/app-frame/app-frame.component.html + 175 + + GitHub + + + Suggest an idea + + src/app/components/app-frame/app-frame.component.html + 181 + + Suggest an idea + + + Logged in as + + src/app/components/app-frame/app-frame.component.html + 34 + + Logged in as + + + Open documents + + src/app/components/app-frame/app-frame.component.html + 87 + + Open documents + + + Close all + + src/app/components/app-frame/app-frame.component.html + 106 + + Close all + + + Correspondent: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 37 + + Correspondent: + + + Without correspondent + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 39 + + Without correspondent + + + Type: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 44 + + Type: + + + Without document type + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 46 + + Without document type + + + Tag: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 50 + + Tag: + + + Without any tag + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 54 + + Without any tag + + + Title: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 58 + + Title: + + + ASN: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 61 + + ASN: + + + Title + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 88 + + Title + + + Title & content + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 89 + + Title & content + + + ASN + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 90 + + ASN + + + Advanced search + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 91 + + Advanced search + + + More like + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 94 + + More like + + + Filter tags + + src/app/components/document-list/filter-editor/filter-editor.component.html + 19 + + Filter tags + + + Filter correspondents + + src/app/components/document-list/filter-editor/filter-editor.component.html + 27 + + Filter correspondents + + + Filter document types + + src/app/components/document-list/filter-editor/filter-editor.component.html + 34 + + Filter document types + + + Reset filters + + src/app/components/document-list/filter-editor/filter-editor.component.html + 57 + + Reset filters + + + Not assigned + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts + 166 + + Filter drop down element to filter for documents with no correspondent/type/tag assigned + Not assigned + + + Apply + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.html + 26 + + Apply + + + Last 7 days + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 34 + + Last 7 days + + + Last month + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 35 + + Last month + + + Last 3 months + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 36 + + Last 3 months + + + Last year + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 37 + + Last year + + + After + + src/app/components/common/date-dropdown/date-dropdown.component.html + 13 + + After + + + Before + + src/app/components/common/date-dropdown/date-dropdown.component.html + 38 + + Before + + + Clear + + src/app/components/common/date-dropdown/date-dropdown.component.html + 18 + + Clear + + + View + + src/app/components/document-list/document-card-large/document-card-large.component.html + 51 + + View + + + Filter by correspondent + + src/app/components/document-list/document-card-large/document-card-large.component.html + 20 + + Filter by correspondent + + + Filter by tag + + src/app/components/document-list/document-card-large/document-card-large.component.html + 24 + + Filter by tag + + + Score: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 87 + + Score: + + + Created: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 43 + + Created: + + + Added: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 44 + + Added: + + + Modified: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 45 + + Modified: + + + Error executing bulk operation: + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 74 + + Error executing bulk operation: + + + "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 113 + + "" + + + "" and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 115 + + This is for messages like 'modify "tag1" and "tag2"' + "" and "" + + + , + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 117 + + this is used to separate enumerations and should probably be a comma and a whitespace in most languages + , + + + and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 118 + + this is for messages like 'modify "tag1", "tag2" and "tag3"' + and "" + + + Confirm tags assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 127 + + Confirm tags assignment + + + This operation will add the tag "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 130 + + This operation will add the tag "" to selected document(s). + + + This operation will add the tags to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 132 + + This operation will add the tags to selected document(s). + + + This operation will remove the tag "" from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 135 + + This operation will remove the tag "" from selected document(s). + + + This operation will remove the tags from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 137 + + This operation will remove the tags from selected document(s). + + + This operation will add the tags and remove the tags on selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 139 + + This operation will add the tags and remove the tags on selected document(s). + + + Confirm correspondent assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 159 + + Confirm correspondent assignment + + + This operation will assign the correspondent "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 161 + + This operation will assign the correspondent "" to selected document(s). + + + This operation will remove the correspondent from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 163 + + This operation will remove the correspondent from selected document(s). + + + Confirm document type assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 182 + + Confirm document type assignment + + + This operation will assign the document type "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 184 + + This operation will assign the document type "" to selected document(s). + + + This operation will remove the document type from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 186 + + This operation will remove the document type from selected document(s). + + + Delete confirm + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 201 + + Delete confirm + + + This operation will permanently delete selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 202 + + This operation will permanently delete selected document(s). + + + This operation cannot be undone. + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 203 + + This operation cannot be undone. + + + Delete document(s) + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 205 + + Delete document(s) + + + Select: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 10 + + Select: + + + All + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 20 + + All + + + Edit: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 27 + + Edit: + + + Download originals + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 68 + + Download originals + + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + + + Suggestions: + + src/app/components/common/input/select/select.component.html + 31 + + Suggestions: + + + Save current view + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 3 + + Save current view + + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + + + Show all + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 3 + + Show all + + + Statistics + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 1 + + Statistics + + + Total documents: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 4 + + Total documents: + + + Documents in inbox: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 3 + + Documents in inbox: + + + Processing: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 32 + + Processing: + + + Failed: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 35 + + Failed: + + + Added: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 38 + + Added: + + + Connecting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 118 + + Connecting... + + + Uploading... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 123 + + Uploading... + + + Upload complete, waiting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 126 + + Upload complete, waiting... + + + HTTP error: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 136 + + HTTP error: + + + Upload new documents + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 1 + + Upload new documents + + + Drop documents here or + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Drop documents here or + + + Browse files + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Browse files + + + Dismiss completed + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 4 + + This button dismisses all status messages about processed documents on the dashboard (failed and successful) + Dismiss completed + + + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 25 + + This is shown as a summary line when there are more than 5 document in the processing pipeline. + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + + Open document + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 45 + + Open document + + + First steps + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 1 + + First steps + + + Paperless is running! :) + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 5 + + Paperless is running! :) + + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 6,7 + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + + Paperless offers some more features that try to make your life easier: + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 8 + + Paperless offers some more features that try to make your life easier: + + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 10 + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + + You can configure paperless to read your mails and add documents from attached files. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 11 + + You can configure paperless to read your mails and add documents from attached files. + + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 13 + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + + Metadata + + src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts + 18 + + Metadata + + + Select + + src/app/components/common/select-dialog/select-dialog.component.ts + 18 + + Select + + + Please select an object + + src/app/components/common/select-dialog/select-dialog.component.ts + 21 + + Please select an object + + + Invalid date. + + src/app/components/common/input/date/date.component.html + 14 + + Invalid date. + + + Searching document with asn + + src/app/components/document-asn/document-asn.component.html + 1 + + Searching document with asn + + + Yes + + src/app/pipes/yes-no.pipe.ts + 9 + + Yes + + + No + + src/app/pipes/yes-no.pipe.ts + 9 + + No + + + (no title) + + src/app/pipes/document-title.pipe.ts + 12 + + (no title) + + + English (US) + + src/app/services/settings.service.ts + 90 + + English (US) + + + English (GB) + + src/app/services/settings.service.ts + 91 + + English (GB) + + + German + + src/app/services/settings.service.ts + 92 + + German + + + Dutch + + src/app/services/settings.service.ts + 93 + + Dutch + + + French + + src/app/services/settings.service.ts + 94 + + French + + + Portuguese + + src/app/services/settings.service.ts + 95 + + Portuguese + + + Portuguese (Brazil) + + src/app/services/settings.service.ts + 96 + + Portuguese (Brazil) + + + Italian + + src/app/services/settings.service.ts + 97 + + Italian + + + Romanian + + src/app/services/settings.service.ts + 98 + + Romanian + + + Russian + + src/app/services/settings.service.ts + 99 + + Russian + + + Spanish + + src/app/services/settings.service.ts + 100 + + Spanish + + + Polish + + src/app/services/settings.service.ts + 101 + + Polish + + + Swedish + + src/app/services/settings.service.ts + 102 + + Swedish + + + ISO 8601 + + src/app/services/settings.service.ts + 107 + + ISO 8601 + + + Document already exists. + + src/app/services/consumer-status.service.ts + 15 + + Document already exists. + + + File not found. + + src/app/services/consumer-status.service.ts + 16 + + File not found. + + + Pre-consume script does not exist. + + src/app/services/consumer-status.service.ts + 17 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Pre-consume script does not exist. + + + Error while executing pre-consume script. + + src/app/services/consumer-status.service.ts + 18 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing pre-consume script. + + + Post-consume script does not exist. + + src/app/services/consumer-status.service.ts + 19 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Post-consume script does not exist. + + + Error while executing post-consume script. + + src/app/services/consumer-status.service.ts + 20 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing post-consume script. + + + Received new file. + + src/app/services/consumer-status.service.ts + 21 + + Received new file. + + + File type not supported. + + src/app/services/consumer-status.service.ts + 22 + + File type not supported. + + + Processing document... + + src/app/services/consumer-status.service.ts + 23 + + Processing document... + + + Generating thumbnail... + + src/app/services/consumer-status.service.ts + 24 + + Generating thumbnail... + + + Retrieving date from document... + + src/app/services/consumer-status.service.ts + 25 + + Retrieving date from document... + + + Saving document... + + src/app/services/consumer-status.service.ts + 26 + + Saving document... + + + Finished. + + src/app/services/consumer-status.service.ts + 27 + + Finished. + + + Error + + src/app/services/toast.service.ts + 35 + + Error + + + Information + + src/app/services/toast.service.ts + 39 + + Information + + + Correspondent + + src/app/services/rest/document.service.ts + 18 + + Correspondent + + + Document type + + src/app/services/rest/document.service.ts + 20 + + Document type + + + Created + + src/app/services/rest/document.service.ts + 21 + + Created + + + Added + + src/app/services/rest/document.service.ts + 22 + + Added + + + Modified + + src/app/services/rest/document.service.ts + 23 + + Modified + + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + + + Create new item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 50 + + Create new item + + + Edit item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 54 + + Edit item + + + Could not save element: + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 58 + + Could not save element: + + + Automatic + + src/app/components/manage/generic-list/generic-list.component.ts + 39 + + Automatic + + + Do you really want to delete this element? + + src/app/components/manage/generic-list/generic-list.component.ts + 97 + + Do you really want to delete this element? + + + Associated documents will not be deleted. + + src/app/components/manage/generic-list/generic-list.component.ts + 104 + + Associated documents will not be deleted. + + + Delete + + src/app/components/manage/generic-list/generic-list.component.ts + 106 + + Delete + + + Error while deleting element: + + src/app/components/manage/generic-list/generic-list.component.ts + 114 + + Error while deleting element: + + + Any word + + src/app/data/matching-model.ts + 12 + + Any word + + + Any: Document contains any of these words (space separated) + + src/app/data/matching-model.ts + 12 + + Any: Document contains any of these words (space separated) + + + All words + + src/app/data/matching-model.ts + 13 + + All words + + + All: Document contains all of these words (space separated) + + src/app/data/matching-model.ts + 13 + + All: Document contains all of these words (space separated) + + + Exact match + + src/app/data/matching-model.ts + 14 + + Exact match + + + Exact: Document contains this string + + src/app/data/matching-model.ts + 14 + + Exact: Document contains this string + + + Regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression + + + Regular expression: Document matches this regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression: Document matches this regular expression + + + Fuzzy word + + src/app/data/matching-model.ts + 16 + + Fuzzy word + + + Fuzzy: Document contains a word similar to this word + + src/app/data/matching-model.ts + 16 + + Fuzzy: Document contains a word similar to this word + + + Auto: Learn matching automatically + + src/app/data/matching-model.ts + 17 + + Auto: Learn matching automatically + + + + diff --git a/src/locale/he_IL/LC_MESSAGES/django.po b/src/locale/he_IL/LC_MESSAGES/django.po new file mode 100644 index 000000000..48b10b2bb --- /dev/null +++ b/src/locale/he_IL/LC_MESSAGES/django.po @@ -0,0 +1,698 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-09-01 13:02\n" +"Last-Translator: \n" +"Language-Team: Hebrew\n" +"Language: he_IL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: he\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:117 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:373 +msgid "title contains" +msgstr "" + +#: documents/models.py:374 +msgid "content contains" +msgstr "" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:377 +msgid "document type is" +msgstr "" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:379 +msgid "has tag" +msgstr "" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "" + +#: documents/models.py:381 +msgid "created before" +msgstr "" + +#: documents/models.py:382 +msgid "created after" +msgstr "" + +#: documents/models.py:383 +msgid "created year is" +msgstr "" + +#: documents/models.py:384 +msgid "created month is" +msgstr "" + +#: documents/models.py:385 +msgid "created day is" +msgstr "" + +#: documents/models.py:386 +msgid "added before" +msgstr "" + +#: documents/models.py:387 +msgid "added after" +msgstr "" + +#: documents/models.py:388 +msgid "modified before" +msgstr "" + +#: documents/models.py:389 +msgid "modified after" +msgstr "" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 +msgid "rule type" +msgstr "" + +#: documents/models.py:409 +msgid "value" +msgstr "" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:22 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:14 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:45 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:46 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:15 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:47 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:50 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:53 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:59 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:303 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:304 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:305 +msgid "German" +msgstr "" + +#: paperless/settings.py:306 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:307 +msgid "French" +msgstr "" + +#: paperless/settings.py:308 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:309 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:310 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:311 +msgid "Romanian" +msgstr "" + +#: paperless/settings.py:312 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:313 +msgid "Spanish" +msgstr "" + +#: paperless/settings.py:314 +msgid "Polish" +msgstr "" + +#: paperless/settings.py:315 +msgid "Swedish" +msgstr "" + +#: paperless/urls.py:120 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:49 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:51 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:58 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:60 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:86 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:87 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:96 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:97 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:107 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:109 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:111 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:121 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:132 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:141 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:144 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:158 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:161 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:164 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:169 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:175 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:184 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:194 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:202 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:206 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:216 +msgid "assign this correspondent" +msgstr "" + diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index 2e38b0737..05e70106f 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ng\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-16 09:38+0000\n" -"PO-Revision-Date: 2021-05-16 10:09\n" +"PO-Revision-Date: 2021-09-02 22:44\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -458,11 +458,11 @@ msgstr "Испанский" #: paperless/settings.py:314 msgid "Polish" -msgstr "" +msgstr "Польский" #: paperless/settings.py:315 msgid "Swedish" -msgstr "" +msgstr "Шведский" #: paperless/urls.py:120 msgid "Paperless-ng administration" @@ -470,11 +470,11 @@ msgstr "Администрирование Paperless-ng" #: paperless_mail/admin.py:15 msgid "Authentication" -msgstr "" +msgstr "Аутентификация" #: paperless_mail/admin.py:18 msgid "Advanced settings" -msgstr "" +msgstr "Продвинутые настройки" #: paperless_mail/admin.py:37 msgid "Filter" @@ -550,11 +550,11 @@ msgstr "пароль" #: paperless_mail/models.py:54 msgid "character set" -msgstr "" +msgstr "Кодировка" #: paperless_mail/models.py:57 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "Кодировка, используемая при общении с почтовым сервером, например 'UTF-8' или 'US-ASCII'." #: paperless_mail/models.py:68 msgid "mail rule" @@ -626,7 +626,7 @@ msgstr "каталог" #: paperless_mail/models.py:134 msgid "Subfolders must be separated by dots." -msgstr "" +msgstr "Подпапки должны быть разделены точками." #: paperless_mail/models.py:138 msgid "filter from" @@ -674,7 +674,7 @@ msgstr "параметр действия" #: paperless_mail/models.py:177 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "Дополнительный параметр для указанного выше действия, то есть целевая папка операции перемещения в папку. Вложенные папки должны быть разделены точками." #: paperless_mail/models.py:184 msgid "assign title from" diff --git a/src/locale/zh_TW/LC_MESSAGES/django.po b/src/locale/zh_TW/LC_MESSAGES/django.po new file mode 100644 index 000000000..bb339967f --- /dev/null +++ b/src/locale/zh_TW/LC_MESSAGES/django.po @@ -0,0 +1,698 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-09-06 09:42\n" +"Last-Translator: \n" +"Language-Team: Chinese Traditional\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: zh-TW\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:117 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:373 +msgid "title contains" +msgstr "" + +#: documents/models.py:374 +msgid "content contains" +msgstr "" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:377 +msgid "document type is" +msgstr "" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:379 +msgid "has tag" +msgstr "" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "" + +#: documents/models.py:381 +msgid "created before" +msgstr "" + +#: documents/models.py:382 +msgid "created after" +msgstr "" + +#: documents/models.py:383 +msgid "created year is" +msgstr "" + +#: documents/models.py:384 +msgid "created month is" +msgstr "" + +#: documents/models.py:385 +msgid "created day is" +msgstr "" + +#: documents/models.py:386 +msgid "added before" +msgstr "" + +#: documents/models.py:387 +msgid "added after" +msgstr "" + +#: documents/models.py:388 +msgid "modified before" +msgstr "" + +#: documents/models.py:389 +msgid "modified after" +msgstr "" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 +msgid "rule type" +msgstr "" + +#: documents/models.py:409 +msgid "value" +msgstr "" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:22 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:14 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:45 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:46 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:15 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:47 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:50 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:53 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:59 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:303 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:304 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:305 +msgid "German" +msgstr "" + +#: paperless/settings.py:306 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:307 +msgid "French" +msgstr "" + +#: paperless/settings.py:308 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:309 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:310 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:311 +msgid "Romanian" +msgstr "" + +#: paperless/settings.py:312 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:313 +msgid "Spanish" +msgstr "" + +#: paperless/settings.py:314 +msgid "Polish" +msgstr "" + +#: paperless/settings.py:315 +msgid "Swedish" +msgstr "" + +#: paperless/urls.py:120 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:49 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:51 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:58 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:60 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:86 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:87 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:96 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:97 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:107 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:109 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:111 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:121 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:132 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:141 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:144 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:158 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:161 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:164 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:169 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:175 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:184 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:194 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:202 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:206 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:216 +msgid "assign this correspondent" +msgstr "" + From 8a573502f2b1be5c44257f25a1fcc3244c855149 Mon Sep 17 00:00:00 2001 From: Matt Lamb Date: Mon, 13 Sep 2021 16:33:46 +1200 Subject: [PATCH 885/898] Incorrect path to docker-compose files --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 78bc1f431..5c51c6f24 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ If you want to see paperless-ng in action, [more screenshots are available in th # Getting started -The recommended way to deploy paperless is docker-compose. The files in the /docker/hub directory are configured to pull the image from Docker Hub. +The recommended way to deploy paperless is docker-compose. The files in the /docker/compose directory are configured to pull the image from Docker Hub. Read the [documentation](https://paperless-ng.readthedocs.io/en/latest/setup.html#installation) on how to get started. From 93dc91ca7769992b4a08b8553730acfaa0709e75 Mon Sep 17 00:00:00 2001 From: Jonas Winkler <17569239+jonaswinkler@users.noreply.github.com> Date: Tue, 14 Sep 2021 21:34:53 +0200 Subject: [PATCH 886/898] New Crowdin updates (#1305) --- src-ui/src/locale/messages.nb_NO.xlf | 2340 ++++++++++++++++++++++++ src-ui/src/locale/messages.no_NO.xlf | 2340 ++++++++++++++++++++++++ src/locale/nb_NO/LC_MESSAGES/django.po | 698 +++++++ src/locale/no_NO/LC_MESSAGES/django.po | 698 +++++++ 4 files changed, 6076 insertions(+) create mode 100644 src-ui/src/locale/messages.nb_NO.xlf create mode 100644 src-ui/src/locale/messages.no_NO.xlf create mode 100644 src/locale/nb_NO/LC_MESSAGES/django.po create mode 100644 src/locale/no_NO/LC_MESSAGES/django.po diff --git a/src-ui/src/locale/messages.nb_NO.xlf b/src-ui/src/locale/messages.nb_NO.xlf new file mode 100644 index 000000000..537c97744 --- /dev/null +++ b/src-ui/src/locale/messages.nb_NO.xlf @@ -0,0 +1,2340 @@ + + + + + + Document added + + src/app/app.component.ts + 51 + + Dokument lagt til + + + Document was added to paperless. + + src/app/app.component.ts + 51 + + Dokumentet er lagt til i Paperless. + + + Open document + + src/app/app.component.ts + 51 + + Åpne dokumentet + + + Could not add : + + src/app/app.component.ts + 59 + + Kunne ikke legge til : + + + New document detected + + src/app/app.component.ts + 65 + + Nytt dokument funnet + + + Document is being processed by paperless. + + src/app/app.component.ts + 65 + + Dokument behandles av Paperless. + + + Documents + + src/app/components/document-list/document-list.component.ts + 51 + + Dokumenter + + + View "" saved successfully. + + src/app/components/document-list/document-list.component.ts + 116 + + Visningen "" er lagret. + + + View "" created successfully. + + src/app/components/document-list/document-list.component.ts + 138 + + Visningen "" er opprettet. + + + Select + + src/app/components/document-list/document-list.component.html + 7 + + Marker + + + Select none + + src/app/components/document-list/document-list.component.html + 10 + + Fjern markering + + + Select page + + src/app/components/document-list/document-list.component.html + 11 + + Marker siden + + + Select all + + src/app/components/document-list/document-list.component.html + 12 + + Marker alle + + + Sort + + src/app/components/document-list/document-list.component.html + 39 + + Sorter + + + Views + + src/app/components/document-list/document-list.component.html + 64 + + Visninger + + + Save as... + + src/app/components/document-list/document-list.component.html + 72 + + Lagre som... + + + Save "" + + src/app/components/document-list/document-list.component.html + 71 + + Lagre "" + + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + src/app/components/document-list/document-list.component.html + 85 + + {VAR_PLURAL, plural, one {} =1 {Markert av 1 dokument} other {Markert av dokumenter}} + + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + src/app/components/document-list/document-list.component.html + 86 + + {VAR_PLURAL, plural, one {} =1 {Ett dokument} other { dokumenter}} + + + (filtered) + + src/app/components/document-list/document-list.component.html + 86 + + (filtrert) + + + ASN + + src/app/components/document-list/document-list.component.html + 111 + + ASN + + + Correspondent + + src/app/components/document-list/document-list.component.html + 117 + + Korrespondent + + + Title + + src/app/components/document-list/document-list.component.html + 123 + + Tittel + + + Document type + + src/app/components/document-list/document-list.component.html + 129 + + Dokumenttype + + + Created + + src/app/components/document-list/document-list.component.html + 135 + + Opprettet + + + Added + + src/app/components/document-list/document-list.component.html + 141 + + Lagt til + + + Confirm delete + + src/app/components/document-detail/document-detail.component.ts + 206 + + Bekreft sletting + + + Do you really want to delete document ""? + + src/app/components/document-detail/document-detail.component.ts + 207 + + Er du sikker på at du vil slette dokumentet ""? + + + The files for this document will be deleted permanently. This operation cannot be undone. + + src/app/components/document-detail/document-detail.component.ts + 208 + + Dokumentet og tilhørende filer vil bli slettet permanent. Dette kan ikke angres. + + + Delete document + + src/app/components/document-detail/document-detail.component.ts + 210 + + Slett dokumentet + + + Error deleting document: + + src/app/components/document-detail/document-detail.component.ts + 217 + + Feil ved sletting av dokument: + + + Delete + + src/app/components/document-detail/document-detail.component.html + 15 + + Slett + + + Download + + src/app/components/document-detail/document-detail.component.html + 23 + + Last ned + + + More like this + + src/app/components/document-detail/document-detail.component.html + 38 + + Lignende dokumenter + + + Close + + src/app/components/document-detail/document-detail.component.html + 44 + + Lukk + + + Details + + src/app/components/document-detail/document-detail.component.html + 56 + + Detaljer + + + Content + + src/app/components/document-detail/document-detail.component.html + 72 + + Innhold + + + Metadata + + src/app/components/document-detail/document-detail.component.html + 81 + + Metadata + + + Discard + + src/app/components/document-detail/document-detail.component.html + 130 + + Forkast + + + Save + + src/app/components/document-detail/document-detail.component.html + 132 + + Lagre + + + Page + + src/app/components/document-detail/document-detail.component.html + 4 + + Side + + + of + + src/app/components/document-detail/document-detail.component.html + 8 + + av + + + Download original + + src/app/components/document-detail/document-detail.component.html + 29 + + Last ned originalen + + + Archive serial number + + src/app/components/document-detail/document-detail.component.html + 60 + + Arkivert serienummer + + + Date created + + src/app/components/document-detail/document-detail.component.html + 61 + + Dato opprettet + + + Date modified + + src/app/components/document-detail/document-detail.component.html + 87 + + Dato endret + + + Date added + + src/app/components/document-detail/document-detail.component.html + 91 + + Dato lagt til + + + Media filename + + src/app/components/document-detail/document-detail.component.html + 95 + + Filnavn på disk + + + Original MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 99 + + Opprinnelig MD5-sjekksum + + + Original file size + + src/app/components/document-detail/document-detail.component.html + 103 + + Opprinnelig filstørrelse + + + Original mime type + + src/app/components/document-detail/document-detail.component.html + 107 + + Opprinnelig mime-type + + + Archive MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 111 + + Arkivets MD5-sjekksum + + + Archive file size + + src/app/components/document-detail/document-detail.component.html + 115 + + Arkivets filstørrelse + + + Original document metadata + + src/app/components/document-detail/document-detail.component.html + 121 + + Opprinnelig dokumentmetadata + + + Archived document metadata + + src/app/components/document-detail/document-detail.component.html + 122 + + Arkivert dokumentmetadata + + + Save & next + + src/app/components/document-detail/document-detail.component.html + 131 + + Lagre & gå til neste + + + Hello , welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 33 + + Hei , velkommen til Paperless-ng! + + + Welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 35 + + Velkommen til Paperless-ng! + + + Dashboard + + src/app/components/dashboard/dashboard.component.html + 1 + + Dashbord + + + Do you really want to delete the tag ""? + + src/app/components/manage/tag-list/tag-list.component.ts + 26 + + Er du sikker på at du vil slette taggen ""? + + + Tags + + src/app/components/manage/tag-list/tag-list.component.html + 1 + + Tagger + + + Create + + src/app/components/manage/tag-list/tag-list.component.html + 2 + + Opprett + + + Filter by: + + src/app/components/manage/tag-list/tag-list.component.html + 8 + + Filtrer etter: + + + Name + + src/app/components/manage/tag-list/tag-list.component.html + 9 + + Navn + + + Color + + src/app/components/manage/tag-list/tag-list.component.html + 20 + + Farge + + + Matching + + src/app/components/manage/tag-list/tag-list.component.html + 21 + + Matcher med + + + Document count + + src/app/components/manage/tag-list/tag-list.component.html + 22 + + Antall dokumenter + + + Actions + + src/app/components/manage/tag-list/tag-list.component.html + 23 + + Handlinger + + + Documents + + src/app/components/manage/tag-list/tag-list.component.html + 38 + + Dokumenter + + + Edit + + src/app/components/manage/tag-list/tag-list.component.html + 43 + + Rediger + + + Do you really want to delete the document type ""? + + src/app/components/manage/document-type-list/document-type-list.component.ts + 26 + + Er du sikker på at du vil slette dokumenttypen ""? + + + Document types + + src/app/components/manage/document-type-list/document-type-list.component.html + 1 + + Dokumenttyper + + + Logs + + src/app/components/manage/logs/logs.component.html + 1 + + Logger + + + Saved view "" deleted. + + src/app/components/manage/settings/settings.component.ts + 68 + + Den lagrede visningen "" er slettet. + + + Settings saved successfully. + + src/app/components/manage/settings/settings.component.ts + 89 + + Innstillingene er lagret. + + + Use system language + + src/app/components/manage/settings/settings.component.ts + 94 + + Bruk systemspråket + + + Use date format of display language + + src/app/components/manage/settings/settings.component.ts + 100 + + Bruk datoformat for visningsspråk + + + Error while storing settings on server: + + src/app/components/manage/settings/settings.component.ts + 117 + + Feil ved lagring av innstillinger på serveren: + + + Settings + + src/app/components/manage/settings/settings.component.html + 1 + + Innstillinger + + + General settings + + src/app/components/manage/settings/settings.component.html + 10 + + Generelle innstillinger + + + Notifications + + src/app/components/manage/settings/settings.component.html + 116 + + Varsler + + + Saved views + + src/app/components/manage/settings/settings.component.html + 134 + + Lagrede visninger + + + Appearance + + src/app/components/manage/settings/settings.component.html + 13 + + Utseende + + + Display language + + src/app/components/manage/settings/settings.component.html + 17 + + Visnings språk + + + You need to reload the page after applying a new language. + + src/app/components/manage/settings/settings.component.html + 25 + + Du må laste siden på nytt etter endring av språk. + + + Date display + + src/app/components/manage/settings/settings.component.html + 32 + + Datovisning + + + Date format + + src/app/components/manage/settings/settings.component.html + 45 + + Datoformat + + + Short: + + src/app/components/manage/settings/settings.component.html + 51 + + Kort: + + + Medium: + + src/app/components/manage/settings/settings.component.html + 55 + + Middels: + + + Long: + + src/app/components/manage/settings/settings.component.html + 59 + + Lang: + + + Items per page + + src/app/components/manage/settings/settings.component.html + 67 + + Elementer per side + + + Document editor + + src/app/components/manage/settings/settings.component.html + 83 + + Dokument editor + + + Use PDF viewer provided by the browser + + src/app/components/manage/settings/settings.component.html + 87 + + Bruk PDF-leser fra nettleseren + + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + src/app/components/manage/settings/settings.component.html + 87 + + Dette er vanligvis raskere for å vise store PDF-dokumenter, men det kan være noen nettlesere det ikke fungerer i. + + + Dark mode + + src/app/components/manage/settings/settings.component.html + 94 + + Dark mode + + + Use system settings + + src/app/components/manage/settings/settings.component.html + 97 + + Bruk systeminnstillingene + + + Enable dark mode + + src/app/components/manage/settings/settings.component.html + 98 + + Aktiver dark mode + + + Invert thumbnails in dark mode + + src/app/components/manage/settings/settings.component.html + 99 + + Inverter miniatyrbilder i dark mode + + + Bulk editing + + src/app/components/manage/settings/settings.component.html + 103 + + Bulk-redigering + + + Show confirmation dialogs + + src/app/components/manage/settings/settings.component.html + 107 + + Vis bekreftelsesdialoger + + + Deleting documents will always ask for confirmation. + + src/app/components/manage/settings/settings.component.html + 107 + + Sletting av dokumenter kommer alltid til å be om bekreftelse. + + + Apply on close + + src/app/components/manage/settings/settings.component.html + 108 + + Ta i bruk ved lukking + + + Document processing + + src/app/components/manage/settings/settings.component.html + 119 + + Dokumentbehandling + + + Show notifications when new documents are detected + + src/app/components/manage/settings/settings.component.html + 123 + + Vis varsler når nye dokumenter oppdages + + + Show notifications when document processing completes successfully + + src/app/components/manage/settings/settings.component.html + 124 + + Vis varsler når dokumentbehandlinger er fullført + + + Show notifications when document processing fails + + src/app/components/manage/settings/settings.component.html + 125 + + Vis varsler når dokumentbehandlinger mislykkes + + + Suppress notifications on dashboard + + src/app/components/manage/settings/settings.component.html + 126 + + Skjul varsel på dashbordet + + + This will suppress all messages about document processing status on the dashboard. + + src/app/components/manage/settings/settings.component.html + 126 + + Dette vil skjule alle meldinger om dokumentbehandlings status på dashbordet. + + + Appears on + + src/app/components/manage/settings/settings.component.html + 146 + + Vises på + + + Show on dashboard + + src/app/components/manage/settings/settings.component.html + 149 + + Vis på dashbordet + + + Show in sidebar + + src/app/components/manage/settings/settings.component.html + 153 + + Vis i sidepanelet + + + No saved views defined. + + src/app/components/manage/settings/settings.component.html + 163 + + Det finnes ingen lagrede visninger. + + + 404 Not Found + + src/app/components/not-found/not-found.component.html + 7 + + 404 Ikke funnet + + + Do you really want to delete the correspondent ""? + + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 26 + + Ønsker du virkelig å slette korrespondenten ""? + + + Correspondents + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 1 + + Korrespondenter + + + Last correspondence + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 22 + + Siste korrespondanse + + + Confirmation + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 17 + + Bekreftelse + + + Confirm + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 29 + + Bekreft + + + Cancel + + src/app/components/common/confirm-dialog/confirm-dialog.component.html + 12 + + Avbryt + + + Create new correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 21 + + Opprett ny korrespondent + + + Edit correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 25 + + Rediger korrespondent + + + Matching algorithm + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 10 + + Matche-algoritme + + + Matching pattern + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 11 + + Matche-mønster + + + Case insensitive + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 12 + + Se bort ifra store og små bokstaver + + + Create new tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 22 + + Opprett ny tagg + + + Edit tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 26 + + Rediger tagg + + + Inbox tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Innboks-tagg + + + Inbox tags are automatically assigned to all consumed documents. + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Innboks-tagger blir automatisk tildelt alle dokumenter som blir behandlet. + + + Create new document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 21 + + Opprett ny dokumenttype + + + Edit document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 25 + + Rediger dokumenttype + + + Paperless-ng + + src/app/components/app-frame/app-frame.component.html + 11 + + app title + Paperless-ng + + + Search documents + + src/app/components/app-frame/app-frame.component.html + 15 + + Søk i dokumenter + + + Logout + + src/app/components/app-frame/app-frame.component.html + 45 + + Logg ut + + + Manage + + src/app/components/app-frame/app-frame.component.html + 112 + + Administrer + + + Admin + + src/app/components/app-frame/app-frame.component.html + 154 + + Admin + + + Info + + src/app/components/app-frame/app-frame.component.html + 160 + + Info + + + Documentation + + src/app/components/app-frame/app-frame.component.html + 167 + + Dokumentasjon + + + GitHub + + src/app/components/app-frame/app-frame.component.html + 175 + + GitHub + + + Suggest an idea + + src/app/components/app-frame/app-frame.component.html + 181 + + Foreslå en idé + + + Logged in as + + src/app/components/app-frame/app-frame.component.html + 34 + + Innlogget som + + + Open documents + + src/app/components/app-frame/app-frame.component.html + 87 + + Åpne Dokumenter + + + Close all + + src/app/components/app-frame/app-frame.component.html + 106 + + Lukk alle + + + Correspondent: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 37 + + Korrespondent: + + + Without correspondent + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 39 + + Uten korrespondent + + + Type: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 44 + + Type: + + + Without document type + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 46 + + Uten dokumenttype + + + Tag: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 50 + + Tagg: + + + Without any tag + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 54 + + Har ingen tagger + + + Title: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 58 + + Tittel: + + + ASN: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 61 + + ASN: + + + Title + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 88 + + Tittel + + + Title & content + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 89 + + Tittel & innhold + + + ASN + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 90 + + ASN + + + Advanced search + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 91 + + Avansert søk + + + More like + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 94 + + Lignende + + + Filter tags + + src/app/components/document-list/filter-editor/filter-editor.component.html + 19 + + Filtrer tagger + + + Filter correspondents + + src/app/components/document-list/filter-editor/filter-editor.component.html + 27 + + Filtrer korrespondenter + + + Filter document types + + src/app/components/document-list/filter-editor/filter-editor.component.html + 34 + + Filtrer dokumenttyper + + + Reset filters + + src/app/components/document-list/filter-editor/filter-editor.component.html + 57 + + Tilbakestill filtre + + + Not assigned + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts + 166 + + Filter drop down element to filter for documents with no correspondent/type/tag assigned + Ikke tildelt + + + Apply + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.html + 26 + + Bruk + + + Last 7 days + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 34 + + Siste 7 dager + + + Last month + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 35 + + Siste måned + + + Last 3 months + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 36 + + Siste 3 måneder + + + Last year + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 37 + + I fjor + + + After + + src/app/components/common/date-dropdown/date-dropdown.component.html + 13 + + Etter + + + Before + + src/app/components/common/date-dropdown/date-dropdown.component.html + 38 + + Før + + + Clear + + src/app/components/common/date-dropdown/date-dropdown.component.html + 18 + + Nullstill + + + View + + src/app/components/document-list/document-card-large/document-card-large.component.html + 51 + + Vis + + + Filter by correspondent + + src/app/components/document-list/document-card-large/document-card-large.component.html + 20 + + Filtrer etter korrespondent + + + Filter by tag + + src/app/components/document-list/document-card-large/document-card-large.component.html + 24 + + Filtrer etter tagger + + + Score: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 87 + + Relevans: + + + Created: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 43 + + Opprettet: + + + Added: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 44 + + Lagt til: + + + Modified: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 45 + + Endret: + + + Error executing bulk operation: + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 74 + + Feil under kjøring av bulkoperasjon: + + + "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 113 + + "" + + + "" and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 115 + + This is for messages like 'modify "tag1" and "tag2"' + "" og "" + + + , + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 117 + + this is used to separate enumerations and should probably be a comma and a whitespace in most languages + , + + + and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 118 + + this is for messages like 'modify "tag1", "tag2" and "tag3"' + og "" + + + Confirm tags assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 127 + + Bekreft tildeling av tagger + + + This operation will add the tag "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 130 + + Denne operasjonen vil legge til taggen "" til markerte dokumenter. + + + This operation will add the tags to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 132 + + Denne operasjonen vil legge til taggene "" til markerte dokumenter. + + + This operation will remove the tag "" from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 135 + + Denne handlingen vil fjerne taggen "" fra markerte dokumenter. + + + This operation will remove the tags from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 137 + + Denne handlingen vil fjerne taggene "" fra markerte dokumenter. + + + This operation will add the tags and remove the tags on selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 139 + + Denne operasjonen vil legge til taggene og fjerne taggene markerte dokumenter. + + + Confirm correspondent assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 159 + + Bekreft korrespondent tildeling + + + This operation will assign the correspondent "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 161 + + Denne operasjonen vil tildele korrespondenten "" til markerte dokumenter. + + + This operation will remove the correspondent from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 163 + + Denne operasjonen vil fjerne korrespondenten fra markerte dokumenter. + + + Confirm document type assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 182 + + Bekreft tildeling av dokumenttype + + + This operation will assign the document type "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 184 + + Denne operasjonen vil tildele dokumenttypen "" til markerte dokumenter. + + + This operation will remove the document type from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 186 + + Denne operasjonen vil fjerne dokumenttypen fra markerte dokumenter. + + + Delete confirm + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 201 + + Bekreft sletting + + + This operation will permanently delete selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 202 + + Denne operasjonen vil permanent slette markerte dokumenter. + + + This operation cannot be undone. + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 203 + + Denne handlingen kan ikke angres. + + + Delete document(s) + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 205 + + Slett dokument(er) + + + Select: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 10 + + Marker: + + + All + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 20 + + Alle + + + Edit: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 27 + + Rediger: + + + Download originals + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 68 + + Last ned originaler + + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Legg til element + + + Suggestions: + + src/app/components/common/input/select/select.component.html + 31 + + Forslag: + + + Save current view + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 3 + + Lagre nåværende visning + + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Legg til tagg + + + Show all + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 3 + + Vis alle + + + Statistics + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 1 + + Statistikk + + + Total documents: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 4 + + Totalt antall dokumenter: + + + Documents in inbox: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 3 + + Dokumenter i innboks: + + + Processing: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 32 + + Behandler: + + + Failed: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 35 + + Feilet: + + + Added: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 38 + + Lagt til: + + + Connecting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 118 + + Kobler til... + + + Uploading... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 123 + + Laster opp... + + + Upload complete, waiting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 126 + + Opplasting fullført, venter... + + + HTTP error: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 136 + + HTTP feil: + + + Upload new documents + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 1 + + Last opp nye dokumenter + + + Drop documents here or + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Slipp dokumenter her eller + + + Browse files + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Bla gjennom filer + + + Dismiss completed + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 4 + + This button dismisses all status messages about processed documents on the dashboard (failed and successful) + Fjern fullførte + + + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 25 + + This is shown as a summary line when there are more than 5 document in the processing pipeline. + {VAR_PLURAL, plural, =1 {Ett dokument til} other { dokumenter til}} + + + Open document + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 45 + + Åpne dokumentet + + + First steps + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 1 + + De første stegene + + + Paperless is running! :) + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 5 + + Paperless kjører! :) + + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 6,7 + + Du kan begynne å laste opp dokumenter ved å slippe dem i filopplastingsboksen til høyre eller ved å slippe dem i den konfigurerte behandlingsmappen, så vil de etterhvert vises i dokumentlisten. Etter at du har lagt til metadata til dokumentene dine, så kan du bruke filtreringsmekanismene i Paperless til å opprette egendefinerte visninger (som 'nylig lagt til', 'Tagget TODO') og de vil vises på dashbordet i stedet for denne meldingen. + + + Paperless offers some more features that try to make your life easier: + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 8 + + Paperless tilbyr flere funksjoner som prøver å gjøre livet ditt lettere: + + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 10 + + Når du har lagt til noen dokumenter i Paperless og lagt til metadata til dem, kan Paperless tilordne denne metadataen til nye dokumenter automatisk. + + + You can configure paperless to read your mails and add documents from attached files. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 11 + + Du kan konfigurere Paperless til å lese e-postene dine og legge til dokumenter fra vedlagte filer. + + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 13 + + Se gjennom dokumentasjonen om hvordan du bruker disse funksjonene. Seksjonen om grunnleggende bruk har også litt informasjon om hvordan man bruker Paperless generelt. + + + Metadata + + src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts + 18 + + Metadata + + + Select + + src/app/components/common/select-dialog/select-dialog.component.ts + 18 + + Marker + + + Please select an object + + src/app/components/common/select-dialog/select-dialog.component.ts + 21 + + Velg et objekt + + + Invalid date. + + src/app/components/common/input/date/date.component.html + 14 + + Ugyldig dato. + + + Searching document with asn + + src/app/components/document-asn/document-asn.component.html + 1 + + Søker etter dokument med ASN + + + Yes + + src/app/pipes/yes-no.pipe.ts + 9 + + Ja + + + No + + src/app/pipes/yes-no.pipe.ts + 9 + + Nei + + + (no title) + + src/app/pipes/document-title.pipe.ts + 12 + + (ingen tittel) + + + English (US) + + src/app/services/settings.service.ts + 90 + + Engelsk (US) + + + English (GB) + + src/app/services/settings.service.ts + 91 + + Engelsk (GB) + + + German + + src/app/services/settings.service.ts + 92 + + Tysk + + + Dutch + + src/app/services/settings.service.ts + 93 + + Nederlandsk + + + French + + src/app/services/settings.service.ts + 94 + + Fransk + + + Portuguese + + src/app/services/settings.service.ts + 95 + + Portuguese + + + Portuguese (Brazil) + + src/app/services/settings.service.ts + 96 + + Portugisisk (Brasil) + + + Italian + + src/app/services/settings.service.ts + 97 + + Italiensk + + + Romanian + + src/app/services/settings.service.ts + 98 + + Rumensk + + + Russian + + src/app/services/settings.service.ts + 99 + + Russisk + + + Spanish + + src/app/services/settings.service.ts + 100 + + Spansk + + + Polish + + src/app/services/settings.service.ts + 101 + + Polsk + + + Swedish + + src/app/services/settings.service.ts + 102 + + Svensk + + + ISO 8601 + + src/app/services/settings.service.ts + 107 + + ISO 8601 + + + Document already exists. + + src/app/services/consumer-status.service.ts + 15 + + Dokumentet finnes allerede. + + + File not found. + + src/app/services/consumer-status.service.ts + 16 + + Finner ikke filen. + + + Pre-consume script does not exist. + + src/app/services/consumer-status.service.ts + 17 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Før-behandlings skript finnes ikke. + + + Error while executing pre-consume script. + + src/app/services/consumer-status.service.ts + 18 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Feil under kjøring av før-behandlings skript. + + + Post-consume script does not exist. + + src/app/services/consumer-status.service.ts + 19 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Etter-behandlings skript finnes ikke. + + + Error while executing post-consume script. + + src/app/services/consumer-status.service.ts + 20 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Feil under kjøring av etter-behandlings skript. + + + Received new file. + + src/app/services/consumer-status.service.ts + 21 + + Mottatt ny fil. + + + File type not supported. + + src/app/services/consumer-status.service.ts + 22 + + Filtypen støttes ikke. + + + Processing document... + + src/app/services/consumer-status.service.ts + 23 + + Behandler dokument... + + + Generating thumbnail... + + src/app/services/consumer-status.service.ts + 24 + + Lager miniatyrbilde... + + + Retrieving date from document... + + src/app/services/consumer-status.service.ts + 25 + + Henter dato fra dokumentet... + + + Saving document... + + src/app/services/consumer-status.service.ts + 26 + + Lagrer dokument... + + + Finished. + + src/app/services/consumer-status.service.ts + 27 + + Fullført. + + + Error + + src/app/services/toast.service.ts + 35 + + Feil + + + Information + + src/app/services/toast.service.ts + 39 + + Informasjon + + + Correspondent + + src/app/services/rest/document.service.ts + 18 + + Korrespondent + + + Document type + + src/app/services/rest/document.service.ts + 20 + + Dokumenttype + + + Created + + src/app/services/rest/document.service.ts + 21 + + Opprettet + + + Added + + src/app/services/rest/document.service.ts + 22 + + Lagt til + + + Modified + + src/app/services/rest/document.service.ts + 23 + + Endret + + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Relevans + + + Create new item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 50 + + Lag nytt element + + + Edit item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 54 + + Rediger element + + + Could not save element: + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 58 + + Kunne ikke lagre elementet: + + + Automatic + + src/app/components/manage/generic-list/generic-list.component.ts + 39 + + Automatisk + + + Do you really want to delete this element? + + src/app/components/manage/generic-list/generic-list.component.ts + 97 + + Er du sikker på at du vil slette dette elementet? + + + Associated documents will not be deleted. + + src/app/components/manage/generic-list/generic-list.component.ts + 104 + + Tilknyttede dokumenter vil ikke bli slettet. + + + Delete + + src/app/components/manage/generic-list/generic-list.component.ts + 106 + + Slett + + + Error while deleting element: + + src/app/components/manage/generic-list/generic-list.component.ts + 114 + + Feil under sletting av element: + + + Any word + + src/app/data/matching-model.ts + 12 + + Ett av ordene + + + Any: Document contains any of these words (space separated) + + src/app/data/matching-model.ts + 12 + + En av: Dokumentet inneholder en av disse ordene (mellomrom som er atskilt) + + + All words + + src/app/data/matching-model.ts + 13 + + Alle ord + + + All: Document contains all of these words (space separated) + + src/app/data/matching-model.ts + 13 + + Alle: Dokumentet inneholder alle disse ordene (separert med mellomrom) + + + Exact match + + src/app/data/matching-model.ts + 14 + + Eksakt match + + + Exact: Document contains this string + + src/app/data/matching-model.ts + 14 + + Eksakt: Dokumentet inneholder denne strengen + + + Regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression + + + Regular expression: Document matches this regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression: Dokumentet matcher denne regular expression + + + Fuzzy word + + src/app/data/matching-model.ts + 16 + + Fuzzy ord + + + Fuzzy: Document contains a word similar to this word + + src/app/data/matching-model.ts + 16 + + Fuzzy: Dokumentet inneholder et ord som ligner på dette ordet + + + Auto: Learn matching automatically + + src/app/data/matching-model.ts + 17 + + Auto: Lær å matche automatisk + + + + diff --git a/src-ui/src/locale/messages.no_NO.xlf b/src-ui/src/locale/messages.no_NO.xlf new file mode 100644 index 000000000..fb16e4c0f --- /dev/null +++ b/src-ui/src/locale/messages.no_NO.xlf @@ -0,0 +1,2340 @@ + + + + + + Document added + + src/app/app.component.ts + 51 + + Document added + + + Document was added to paperless. + + src/app/app.component.ts + 51 + + Document was added to paperless. + + + Open document + + src/app/app.component.ts + 51 + + Open document + + + Could not add : + + src/app/app.component.ts + 59 + + Could not add : + + + New document detected + + src/app/app.component.ts + 65 + + New document detected + + + Document is being processed by paperless. + + src/app/app.component.ts + 65 + + Document is being processed by paperless. + + + Documents + + src/app/components/document-list/document-list.component.ts + 51 + + Documents + + + View "" saved successfully. + + src/app/components/document-list/document-list.component.ts + 116 + + View "" saved successfully. + + + View "" created successfully. + + src/app/components/document-list/document-list.component.ts + 138 + + View "" created successfully. + + + Select + + src/app/components/document-list/document-list.component.html + 7 + + Select + + + Select none + + src/app/components/document-list/document-list.component.html + 10 + + Select none + + + Select page + + src/app/components/document-list/document-list.component.html + 11 + + Select page + + + Select all + + src/app/components/document-list/document-list.component.html + 12 + + Select all + + + Sort + + src/app/components/document-list/document-list.component.html + 39 + + Sort + + + Views + + src/app/components/document-list/document-list.component.html + 64 + + Views + + + Save as... + + src/app/components/document-list/document-list.component.html + 72 + + Save as... + + + Save "" + + src/app/components/document-list/document-list.component.html + 71 + + Save "" + + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + src/app/components/document-list/document-list.component.html + 85 + + {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + src/app/components/document-list/document-list.component.html + 86 + + {VAR_PLURAL, plural, =1 {One document} other { documents}} + + + (filtered) + + src/app/components/document-list/document-list.component.html + 86 + + (filtered) + + + ASN + + src/app/components/document-list/document-list.component.html + 111 + + ASN + + + Correspondent + + src/app/components/document-list/document-list.component.html + 117 + + Correspondent + + + Title + + src/app/components/document-list/document-list.component.html + 123 + + Title + + + Document type + + src/app/components/document-list/document-list.component.html + 129 + + Document type + + + Created + + src/app/components/document-list/document-list.component.html + 135 + + Created + + + Added + + src/app/components/document-list/document-list.component.html + 141 + + Added + + + Confirm delete + + src/app/components/document-detail/document-detail.component.ts + 206 + + Confirm delete + + + Do you really want to delete document ""? + + src/app/components/document-detail/document-detail.component.ts + 207 + + Do you really want to delete document ""? + + + The files for this document will be deleted permanently. This operation cannot be undone. + + src/app/components/document-detail/document-detail.component.ts + 208 + + The files for this document will be deleted permanently. This operation cannot be undone. + + + Delete document + + src/app/components/document-detail/document-detail.component.ts + 210 + + Delete document + + + Error deleting document: + + src/app/components/document-detail/document-detail.component.ts + 217 + + Error deleting document: + + + Delete + + src/app/components/document-detail/document-detail.component.html + 15 + + Delete + + + Download + + src/app/components/document-detail/document-detail.component.html + 23 + + Download + + + More like this + + src/app/components/document-detail/document-detail.component.html + 38 + + More like this + + + Close + + src/app/components/document-detail/document-detail.component.html + 44 + + Close + + + Details + + src/app/components/document-detail/document-detail.component.html + 56 + + Details + + + Content + + src/app/components/document-detail/document-detail.component.html + 72 + + Content + + + Metadata + + src/app/components/document-detail/document-detail.component.html + 81 + + Metadata + + + Discard + + src/app/components/document-detail/document-detail.component.html + 130 + + Discard + + + Save + + src/app/components/document-detail/document-detail.component.html + 132 + + Save + + + Page + + src/app/components/document-detail/document-detail.component.html + 4 + + Page + + + of + + src/app/components/document-detail/document-detail.component.html + 8 + + of + + + Download original + + src/app/components/document-detail/document-detail.component.html + 29 + + Download original + + + Archive serial number + + src/app/components/document-detail/document-detail.component.html + 60 + + Archive serial number + + + Date created + + src/app/components/document-detail/document-detail.component.html + 61 + + Date created + + + Date modified + + src/app/components/document-detail/document-detail.component.html + 87 + + Date modified + + + Date added + + src/app/components/document-detail/document-detail.component.html + 91 + + Date added + + + Media filename + + src/app/components/document-detail/document-detail.component.html + 95 + + Media filename + + + Original MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 99 + + Original MD5 checksum + + + Original file size + + src/app/components/document-detail/document-detail.component.html + 103 + + Original file size + + + Original mime type + + src/app/components/document-detail/document-detail.component.html + 107 + + Original mime type + + + Archive MD5 checksum + + src/app/components/document-detail/document-detail.component.html + 111 + + Archive MD5 checksum + + + Archive file size + + src/app/components/document-detail/document-detail.component.html + 115 + + Archive file size + + + Original document metadata + + src/app/components/document-detail/document-detail.component.html + 121 + + Original document metadata + + + Archived document metadata + + src/app/components/document-detail/document-detail.component.html + 122 + + Archived document metadata + + + Save & next + + src/app/components/document-detail/document-detail.component.html + 131 + + Save & next + + + Hello , welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 33 + + Hello , welcome to Paperless-ng! + + + Welcome to Paperless-ng! + + src/app/components/dashboard/dashboard.component.ts + 35 + + Welcome to Paperless-ng! + + + Dashboard + + src/app/components/dashboard/dashboard.component.html + 1 + + Dashboard + + + Do you really want to delete the tag ""? + + src/app/components/manage/tag-list/tag-list.component.ts + 26 + + Do you really want to delete the tag ""? + + + Tags + + src/app/components/manage/tag-list/tag-list.component.html + 1 + + Tags + + + Create + + src/app/components/manage/tag-list/tag-list.component.html + 2 + + Create + + + Filter by: + + src/app/components/manage/tag-list/tag-list.component.html + 8 + + Filter by: + + + Name + + src/app/components/manage/tag-list/tag-list.component.html + 9 + + Name + + + Color + + src/app/components/manage/tag-list/tag-list.component.html + 20 + + Color + + + Matching + + src/app/components/manage/tag-list/tag-list.component.html + 21 + + Matching + + + Document count + + src/app/components/manage/tag-list/tag-list.component.html + 22 + + Document count + + + Actions + + src/app/components/manage/tag-list/tag-list.component.html + 23 + + Actions + + + Documents + + src/app/components/manage/tag-list/tag-list.component.html + 38 + + Documents + + + Edit + + src/app/components/manage/tag-list/tag-list.component.html + 43 + + Edit + + + Do you really want to delete the document type ""? + + src/app/components/manage/document-type-list/document-type-list.component.ts + 26 + + Do you really want to delete the document type ""? + + + Document types + + src/app/components/manage/document-type-list/document-type-list.component.html + 1 + + Document types + + + Logs + + src/app/components/manage/logs/logs.component.html + 1 + + Logs + + + Saved view "" deleted. + + src/app/components/manage/settings/settings.component.ts + 68 + + Saved view "" deleted. + + + Settings saved successfully. + + src/app/components/manage/settings/settings.component.ts + 89 + + Settings saved successfully. + + + Use system language + + src/app/components/manage/settings/settings.component.ts + 94 + + Use system language + + + Use date format of display language + + src/app/components/manage/settings/settings.component.ts + 100 + + Use date format of display language + + + Error while storing settings on server: + + src/app/components/manage/settings/settings.component.ts + 117 + + Error while storing settings on server: + + + Settings + + src/app/components/manage/settings/settings.component.html + 1 + + Settings + + + General settings + + src/app/components/manage/settings/settings.component.html + 10 + + General settings + + + Notifications + + src/app/components/manage/settings/settings.component.html + 116 + + Notifications + + + Saved views + + src/app/components/manage/settings/settings.component.html + 134 + + Saved views + + + Appearance + + src/app/components/manage/settings/settings.component.html + 13 + + Appearance + + + Display language + + src/app/components/manage/settings/settings.component.html + 17 + + Display language + + + You need to reload the page after applying a new language. + + src/app/components/manage/settings/settings.component.html + 25 + + You need to reload the page after applying a new language. + + + Date display + + src/app/components/manage/settings/settings.component.html + 32 + + Date display + + + Date format + + src/app/components/manage/settings/settings.component.html + 45 + + Date format + + + Short: + + src/app/components/manage/settings/settings.component.html + 51 + + Short: + + + Medium: + + src/app/components/manage/settings/settings.component.html + 55 + + Medium: + + + Long: + + src/app/components/manage/settings/settings.component.html + 59 + + Long: + + + Items per page + + src/app/components/manage/settings/settings.component.html + 67 + + Items per page + + + Document editor + + src/app/components/manage/settings/settings.component.html + 83 + + Document editor + + + Use PDF viewer provided by the browser + + src/app/components/manage/settings/settings.component.html + 87 + + Use PDF viewer provided by the browser + + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + src/app/components/manage/settings/settings.component.html + 87 + + This is usually faster for displaying large PDF documents, but it might not work on some browsers. + + + Dark mode + + src/app/components/manage/settings/settings.component.html + 94 + + Dark mode + + + Use system settings + + src/app/components/manage/settings/settings.component.html + 97 + + Use system settings + + + Enable dark mode + + src/app/components/manage/settings/settings.component.html + 98 + + Enable dark mode + + + Invert thumbnails in dark mode + + src/app/components/manage/settings/settings.component.html + 99 + + Invert thumbnails in dark mode + + + Bulk editing + + src/app/components/manage/settings/settings.component.html + 103 + + Bulk editing + + + Show confirmation dialogs + + src/app/components/manage/settings/settings.component.html + 107 + + Show confirmation dialogs + + + Deleting documents will always ask for confirmation. + + src/app/components/manage/settings/settings.component.html + 107 + + Deleting documents will always ask for confirmation. + + + Apply on close + + src/app/components/manage/settings/settings.component.html + 108 + + Apply on close + + + Document processing + + src/app/components/manage/settings/settings.component.html + 119 + + Document processing + + + Show notifications when new documents are detected + + src/app/components/manage/settings/settings.component.html + 123 + + Show notifications when new documents are detected + + + Show notifications when document processing completes successfully + + src/app/components/manage/settings/settings.component.html + 124 + + Show notifications when document processing completes successfully + + + Show notifications when document processing fails + + src/app/components/manage/settings/settings.component.html + 125 + + Show notifications when document processing fails + + + Suppress notifications on dashboard + + src/app/components/manage/settings/settings.component.html + 126 + + Suppress notifications on dashboard + + + This will suppress all messages about document processing status on the dashboard. + + src/app/components/manage/settings/settings.component.html + 126 + + This will suppress all messages about document processing status on the dashboard. + + + Appears on + + src/app/components/manage/settings/settings.component.html + 146 + + Appears on + + + Show on dashboard + + src/app/components/manage/settings/settings.component.html + 149 + + Show on dashboard + + + Show in sidebar + + src/app/components/manage/settings/settings.component.html + 153 + + Show in sidebar + + + No saved views defined. + + src/app/components/manage/settings/settings.component.html + 163 + + No saved views defined. + + + 404 Not Found + + src/app/components/not-found/not-found.component.html + 7 + + 404 Not Found + + + Do you really want to delete the correspondent ""? + + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 26 + + Do you really want to delete the correspondent ""? + + + Correspondents + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 1 + + Correspondents + + + Last correspondence + + src/app/components/manage/correspondent-list/correspondent-list.component.html + 22 + + Last correspondence + + + Confirmation + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 17 + + Confirmation + + + Confirm + + src/app/components/common/confirm-dialog/confirm-dialog.component.ts + 29 + + Confirm + + + Cancel + + src/app/components/common/confirm-dialog/confirm-dialog.component.html + 12 + + Cancel + + + Create new correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 21 + + Create new correspondent + + + Edit correspondent + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 25 + + Edit correspondent + + + Matching algorithm + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 10 + + Matching algorithm + + + Matching pattern + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 11 + + Matching pattern + + + Case insensitive + + src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 12 + + Case insensitive + + + Create new tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 22 + + Create new tag + + + Edit tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts + 26 + + Edit tag + + + Inbox tag + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tag + + + Inbox tags are automatically assigned to all consumed documents. + + src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + Inbox tags are automatically assigned to all consumed documents. + + + Create new document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 21 + + Create new document type + + + Edit document type + + src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts + 25 + + Edit document type + + + Paperless-ng + + src/app/components/app-frame/app-frame.component.html + 11 + + app title + Paperless-ng + + + Search documents + + src/app/components/app-frame/app-frame.component.html + 15 + + Search documents + + + Logout + + src/app/components/app-frame/app-frame.component.html + 45 + + Logout + + + Manage + + src/app/components/app-frame/app-frame.component.html + 112 + + Manage + + + Admin + + src/app/components/app-frame/app-frame.component.html + 154 + + Admin + + + Info + + src/app/components/app-frame/app-frame.component.html + 160 + + Info + + + Documentation + + src/app/components/app-frame/app-frame.component.html + 167 + + Documentation + + + GitHub + + src/app/components/app-frame/app-frame.component.html + 175 + + GitHub + + + Suggest an idea + + src/app/components/app-frame/app-frame.component.html + 181 + + Suggest an idea + + + Logged in as + + src/app/components/app-frame/app-frame.component.html + 34 + + Logged in as + + + Open documents + + src/app/components/app-frame/app-frame.component.html + 87 + + Open documents + + + Close all + + src/app/components/app-frame/app-frame.component.html + 106 + + Close all + + + Correspondent: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 37 + + Correspondent: + + + Without correspondent + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 39 + + Without correspondent + + + Type: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 44 + + Type: + + + Without document type + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 46 + + Without document type + + + Tag: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 50 + + Tag: + + + Without any tag + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 54 + + Without any tag + + + Title: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 58 + + Title: + + + ASN: + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 61 + + ASN: + + + Title + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 88 + + Title + + + Title & content + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 89 + + Title & content + + + ASN + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 90 + + ASN + + + Advanced search + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 91 + + Advanced search + + + More like + + src/app/components/document-list/filter-editor/filter-editor.component.ts + 94 + + More like + + + Filter tags + + src/app/components/document-list/filter-editor/filter-editor.component.html + 19 + + Filter tags + + + Filter correspondents + + src/app/components/document-list/filter-editor/filter-editor.component.html + 27 + + Filter correspondents + + + Filter document types + + src/app/components/document-list/filter-editor/filter-editor.component.html + 34 + + Filter document types + + + Reset filters + + src/app/components/document-list/filter-editor/filter-editor.component.html + 57 + + Reset filters + + + Not assigned + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts + 166 + + Filter drop down element to filter for documents with no correspondent/type/tag assigned + Not assigned + + + Apply + + src/app/components/common/filterable-dropdown/filterable-dropdown.component.html + 26 + + Apply + + + Last 7 days + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 34 + + Last 7 days + + + Last month + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 35 + + Last month + + + Last 3 months + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 36 + + Last 3 months + + + Last year + + src/app/components/common/date-dropdown/date-dropdown.component.ts + 37 + + Last year + + + After + + src/app/components/common/date-dropdown/date-dropdown.component.html + 13 + + After + + + Before + + src/app/components/common/date-dropdown/date-dropdown.component.html + 38 + + Before + + + Clear + + src/app/components/common/date-dropdown/date-dropdown.component.html + 18 + + Clear + + + View + + src/app/components/document-list/document-card-large/document-card-large.component.html + 51 + + View + + + Filter by correspondent + + src/app/components/document-list/document-card-large/document-card-large.component.html + 20 + + Filter by correspondent + + + Filter by tag + + src/app/components/document-list/document-card-large/document-card-large.component.html + 24 + + Filter by tag + + + Score: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 87 + + Score: + + + Created: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 43 + + Created: + + + Added: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 44 + + Added: + + + Modified: + + src/app/components/document-list/document-card-small/document-card-small.component.html + 45 + + Modified: + + + Error executing bulk operation: + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 74 + + Error executing bulk operation: + + + "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 113 + + "" + + + "" and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 115 + + This is for messages like 'modify "tag1" and "tag2"' + "" and "" + + + , + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 117 + + this is used to separate enumerations and should probably be a comma and a whitespace in most languages + , + + + and "" + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 118 + + this is for messages like 'modify "tag1", "tag2" and "tag3"' + and "" + + + Confirm tags assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 127 + + Confirm tags assignment + + + This operation will add the tag "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 130 + + This operation will add the tag "" to selected document(s). + + + This operation will add the tags to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 132 + + This operation will add the tags to selected document(s). + + + This operation will remove the tag "" from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 135 + + This operation will remove the tag "" from selected document(s). + + + This operation will remove the tags from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 137 + + This operation will remove the tags from selected document(s). + + + This operation will add the tags and remove the tags on selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 139 + + This operation will add the tags and remove the tags on selected document(s). + + + Confirm correspondent assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 159 + + Confirm correspondent assignment + + + This operation will assign the correspondent "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 161 + + This operation will assign the correspondent "" to selected document(s). + + + This operation will remove the correspondent from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 163 + + This operation will remove the correspondent from selected document(s). + + + Confirm document type assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 182 + + Confirm document type assignment + + + This operation will assign the document type "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 184 + + This operation will assign the document type "" to selected document(s). + + + This operation will remove the document type from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 186 + + This operation will remove the document type from selected document(s). + + + Delete confirm + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 201 + + Delete confirm + + + This operation will permanently delete selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 202 + + This operation will permanently delete selected document(s). + + + This operation cannot be undone. + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 203 + + This operation cannot be undone. + + + Delete document(s) + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 205 + + Delete document(s) + + + Select: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 10 + + Select: + + + All + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 20 + + All + + + Edit: + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 27 + + Edit: + + + Download originals + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 68 + + Download originals + + + Add item + + src/app/components/common/input/select/select.component.html + 11 + + Used for both types and correspondents + Add item + + + Suggestions: + + src/app/components/common/input/select/select.component.html + 31 + + Suggestions: + + + Save current view + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 3 + + Save current view + + + Add tag + + src/app/components/common/input/tags/tags.component.html + 11 + + Add tag + + + Show all + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 3 + + Show all + + + Statistics + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 1 + + Statistics + + + Total documents: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 4 + + Total documents: + + + Documents in inbox: + + src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html + 3 + + Documents in inbox: + + + Processing: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 32 + + Processing: + + + Failed: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 35 + + Failed: + + + Added: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 38 + + Added: + + + Connecting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 118 + + Connecting... + + + Uploading... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 123 + + Uploading... + + + Upload complete, waiting... + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 126 + + Upload complete, waiting... + + + HTTP error: + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts + 136 + + HTTP error: + + + Upload new documents + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 1 + + Upload new documents + + + Drop documents here or + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Drop documents here or + + + Browse files + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 13 + + Browse files + + + Dismiss completed + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 4 + + This button dismisses all status messages about processed documents on the dashboard (failed and successful) + Dismiss completed + + + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 25 + + This is shown as a summary line when there are more than 5 document in the processing pipeline. + {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + + + Open document + + src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html + 45 + + Open document + + + First steps + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 1 + + First steps + + + Paperless is running! :) + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 5 + + Paperless is running! :) + + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 6,7 + + You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and they will appear on the dashboard instead of this message. + + + Paperless offers some more features that try to make your life easier: + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 8 + + Paperless offers some more features that try to make your life easier: + + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 10 + + Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically. + + + You can configure paperless to read your mails and add documents from attached files. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 11 + + You can configure paperless to read your mails and add documents from attached files. + + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html + 13 + + Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general. + + + Metadata + + src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts + 18 + + Metadata + + + Select + + src/app/components/common/select-dialog/select-dialog.component.ts + 18 + + Select + + + Please select an object + + src/app/components/common/select-dialog/select-dialog.component.ts + 21 + + Please select an object + + + Invalid date. + + src/app/components/common/input/date/date.component.html + 14 + + Invalid date. + + + Searching document with asn + + src/app/components/document-asn/document-asn.component.html + 1 + + Searching document with asn + + + Yes + + src/app/pipes/yes-no.pipe.ts + 9 + + Yes + + + No + + src/app/pipes/yes-no.pipe.ts + 9 + + No + + + (no title) + + src/app/pipes/document-title.pipe.ts + 12 + + (no title) + + + English (US) + + src/app/services/settings.service.ts + 90 + + English (US) + + + English (GB) + + src/app/services/settings.service.ts + 91 + + English (GB) + + + German + + src/app/services/settings.service.ts + 92 + + German + + + Dutch + + src/app/services/settings.service.ts + 93 + + Dutch + + + French + + src/app/services/settings.service.ts + 94 + + French + + + Portuguese + + src/app/services/settings.service.ts + 95 + + Portuguese + + + Portuguese (Brazil) + + src/app/services/settings.service.ts + 96 + + Portuguese (Brazil) + + + Italian + + src/app/services/settings.service.ts + 97 + + Italian + + + Romanian + + src/app/services/settings.service.ts + 98 + + Romanian + + + Russian + + src/app/services/settings.service.ts + 99 + + Russian + + + Spanish + + src/app/services/settings.service.ts + 100 + + Spanish + + + Polish + + src/app/services/settings.service.ts + 101 + + Polish + + + Swedish + + src/app/services/settings.service.ts + 102 + + Swedish + + + ISO 8601 + + src/app/services/settings.service.ts + 107 + + ISO 8601 + + + Document already exists. + + src/app/services/consumer-status.service.ts + 15 + + Document already exists. + + + File not found. + + src/app/services/consumer-status.service.ts + 16 + + File not found. + + + Pre-consume script does not exist. + + src/app/services/consumer-status.service.ts + 17 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Pre-consume script does not exist. + + + Error while executing pre-consume script. + + src/app/services/consumer-status.service.ts + 18 + + Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing pre-consume script. + + + Post-consume script does not exist. + + src/app/services/consumer-status.service.ts + 19 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Post-consume script does not exist. + + + Error while executing post-consume script. + + src/app/services/consumer-status.service.ts + 20 + + Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation + Error while executing post-consume script. + + + Received new file. + + src/app/services/consumer-status.service.ts + 21 + + Received new file. + + + File type not supported. + + src/app/services/consumer-status.service.ts + 22 + + File type not supported. + + + Processing document... + + src/app/services/consumer-status.service.ts + 23 + + Processing document... + + + Generating thumbnail... + + src/app/services/consumer-status.service.ts + 24 + + Generating thumbnail... + + + Retrieving date from document... + + src/app/services/consumer-status.service.ts + 25 + + Retrieving date from document... + + + Saving document... + + src/app/services/consumer-status.service.ts + 26 + + Saving document... + + + Finished. + + src/app/services/consumer-status.service.ts + 27 + + Finished. + + + Error + + src/app/services/toast.service.ts + 35 + + Error + + + Information + + src/app/services/toast.service.ts + 39 + + Information + + + Correspondent + + src/app/services/rest/document.service.ts + 18 + + Correspondent + + + Document type + + src/app/services/rest/document.service.ts + 20 + + Document type + + + Created + + src/app/services/rest/document.service.ts + 21 + + Created + + + Added + + src/app/services/rest/document.service.ts + 22 + + Added + + + Modified + + src/app/services/rest/document.service.ts + 23 + + Modified + + + Search score + + src/app/services/rest/document.service.ts + 28 + + Score is a value returned by the full text search engine and specifies how well a result matches the given query + Search score + + + Create new item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 50 + + Create new item + + + Edit item + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 54 + + Edit item + + + Could not save element: + + src/app/components/common/edit-dialog/edit-dialog.component.ts + 58 + + Could not save element: + + + Automatic + + src/app/components/manage/generic-list/generic-list.component.ts + 39 + + Automatic + + + Do you really want to delete this element? + + src/app/components/manage/generic-list/generic-list.component.ts + 97 + + Do you really want to delete this element? + + + Associated documents will not be deleted. + + src/app/components/manage/generic-list/generic-list.component.ts + 104 + + Associated documents will not be deleted. + + + Delete + + src/app/components/manage/generic-list/generic-list.component.ts + 106 + + Delete + + + Error while deleting element: + + src/app/components/manage/generic-list/generic-list.component.ts + 114 + + Error while deleting element: + + + Any word + + src/app/data/matching-model.ts + 12 + + Any word + + + Any: Document contains any of these words (space separated) + + src/app/data/matching-model.ts + 12 + + Any: Document contains any of these words (space separated) + + + All words + + src/app/data/matching-model.ts + 13 + + All words + + + All: Document contains all of these words (space separated) + + src/app/data/matching-model.ts + 13 + + All: Document contains all of these words (space separated) + + + Exact match + + src/app/data/matching-model.ts + 14 + + Exact match + + + Exact: Document contains this string + + src/app/data/matching-model.ts + 14 + + Exact: Document contains this string + + + Regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression + + + Regular expression: Document matches this regular expression + + src/app/data/matching-model.ts + 15 + + Regular expression: Document matches this regular expression + + + Fuzzy word + + src/app/data/matching-model.ts + 16 + + Fuzzy word + + + Fuzzy: Document contains a word similar to this word + + src/app/data/matching-model.ts + 16 + + Fuzzy: Document contains a word similar to this word + + + Auto: Learn matching automatically + + src/app/data/matching-model.ts + 17 + + Auto: Learn matching automatically + + + + diff --git a/src/locale/nb_NO/LC_MESSAGES/django.po b/src/locale/nb_NO/LC_MESSAGES/django.po new file mode 100644 index 000000000..ef5ebaff5 --- /dev/null +++ b/src/locale/nb_NO/LC_MESSAGES/django.po @@ -0,0 +1,698 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-09-11 22:09\n" +"Last-Translator: \n" +"Language-Team: Norwegian Bokmal\n" +"Language: nb_NO\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: nb\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "Dokumenter" + +#: documents/models.py:32 +msgid "Any word" +msgstr "Ett av ordene" + +#: documents/models.py:33 +msgid "All words" +msgstr "Alle ord" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "Eksakt match" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "Regular expression" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "Fuzzy ord" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "Automatisk" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:117 +msgid "name" +msgstr "navn" + +#: documents/models.py:45 +msgid "match" +msgstr "match" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "matche-algoritme" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "er insensitiv" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "korrespondent" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "korrespondenter" + +#: documents/models.py:81 +msgid "color" +msgstr "farge" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "er innboks-tagg" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "Markerer denne taggen som en innboks-tagg: Alle dokumenter som er ny-behandlet vil bli merket med innboks-taggen." + +#: documents/models.py:94 +msgid "tag" +msgstr "tagg" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "tagger" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "dokumenttype" + +#: documents/models.py:102 +msgid "document types" +msgstr "dokumenttyper" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "Ukryptert" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "Kryptert med GNU Privacy Guard" + +#: documents/models.py:124 +msgid "title" +msgstr "tittel" + +#: documents/models.py:137 +msgid "content" +msgstr "innhold" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "Rå-tekst dataen fra dokumentet. Dette feltet brukes primært for søking." + +#: documents/models.py:144 +msgid "mime type" +msgstr "mime-type" + +#: documents/models.py:155 +msgid "checksum" +msgstr "sjekksum" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "Sjekksummen av det opprinnelige dokumentet." + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "arkivets sjekksum" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "Sjekksummen til det arkiverte dokumentet." + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "opprettet" + +#: documents/models.py:176 +msgid "modified" +msgstr "endret" + +#: documents/models.py:180 +msgid "storage type" +msgstr "lagringstype" + +#: documents/models.py:188 +msgid "added" +msgstr "lagt til" + +#: documents/models.py:192 +msgid "filename" +msgstr "filnavn" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "Nåværende filnavn på disk" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "Arkivets filnavn" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "Arkivets nåværende filnavn på disk" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "arkivert serienummer" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "Dokumentets plass i ditt fysiske dokumentarkiv." + +#: documents/models.py:223 +msgid "document" +msgstr "dokument" + +#: documents/models.py:224 +msgid "documents" +msgstr "dokumenter" + +#: documents/models.py:311 +msgid "debug" +msgstr "feilsøk" + +#: documents/models.py:312 +msgid "information" +msgstr "informasjon" + +#: documents/models.py:313 +msgid "warning" +msgstr "advarsel" + +#: documents/models.py:314 +msgid "error" +msgstr "feil" + +#: documents/models.py:315 +msgid "critical" +msgstr "kritisk" + +#: documents/models.py:319 +msgid "group" +msgstr "gruppe" + +#: documents/models.py:322 +msgid "message" +msgstr "melding" + +#: documents/models.py:325 +msgid "level" +msgstr "nivå" + +#: documents/models.py:332 +msgid "log" +msgstr "Logg" + +#: documents/models.py:333 +msgid "logs" +msgstr "logger" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "lagret visning" + +#: documents/models.py:345 +msgid "saved views" +msgstr "lagrede visninger" + +#: documents/models.py:348 +msgid "user" +msgstr "bruker" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "vis på dashbordet" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "vis i sidepanelet" + +#: documents/models.py:361 +msgid "sort field" +msgstr "sorter felt" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "sorter omvendt" + +#: documents/models.py:373 +msgid "title contains" +msgstr "tittelen inneholder" + +#: documents/models.py:374 +msgid "content contains" +msgstr "innholdet inneholder" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "ASN er" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "korrespondenten er" + +#: documents/models.py:377 +msgid "document type is" +msgstr "dokumenttypen er" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "er i innboksen" + +#: documents/models.py:379 +msgid "has tag" +msgstr "har tagg" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "har en tag" + +#: documents/models.py:381 +msgid "created before" +msgstr "opprettet før" + +#: documents/models.py:382 +msgid "created after" +msgstr "opprettet etter" + +#: documents/models.py:383 +msgid "created year is" +msgstr "opprettet år er" + +#: documents/models.py:384 +msgid "created month is" +msgstr "opprettet måned er" + +#: documents/models.py:385 +msgid "created day is" +msgstr "opprettet dag er" + +#: documents/models.py:386 +msgid "added before" +msgstr "lagt til før" + +#: documents/models.py:387 +msgid "added after" +msgstr "lagt til etter" + +#: documents/models.py:388 +msgid "modified before" +msgstr "endret før" + +#: documents/models.py:389 +msgid "modified after" +msgstr "endret etter" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "har ikke tagg" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "har ikke ASN" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "tittel eller innhold inneholder" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "fulltekst spørring" + +#: documents/models.py:394 +msgid "more like this" +msgstr "lignende dokumenter" + +#: documents/models.py:405 +msgid "rule type" +msgstr "regeltype" + +#: documents/models.py:409 +msgid "value" +msgstr "verdi" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "filtrer regel" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "filtrer regler" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "Ugyldig regular expression: %(error)s" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "Ugyldig farge." + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "Filtypen %(type)s støttes ikke" + +#: documents/templates/index.html:22 +msgid "Paperless-ng is loading..." +msgstr "Paperless-ng laster..." + +#: documents/templates/registration/logged_out.html:14 +msgid "Paperless-ng signed out" +msgstr "Paperless-ng logget ut" + +#: documents/templates/registration/logged_out.html:45 +msgid "You have been successfully logged out. Bye!" +msgstr "Du er nå logget ut. Hade!" + +#: documents/templates/registration/logged_out.html:46 +msgid "Sign in again" +msgstr "Logg inn igjen" + +#: documents/templates/registration/login.html:15 +msgid "Paperless-ng sign in" +msgstr "Paperless-ng logg inn" + +#: documents/templates/registration/login.html:47 +msgid "Please sign in." +msgstr "Vennligst logg inn." + +#: documents/templates/registration/login.html:50 +msgid "Your username and password didn't match. Please try again." +msgstr "Feil brukernavn og passord. Prøv på nytt." + +#: documents/templates/registration/login.html:53 +msgid "Username" +msgstr "Brukernavn" + +#: documents/templates/registration/login.html:54 +msgid "Password" +msgstr "Passord" + +#: documents/templates/registration/login.html:59 +msgid "Sign in" +msgstr "Logg inn" + +#: paperless/settings.py:303 +msgid "English (US)" +msgstr "Engelsk (US)" + +#: paperless/settings.py:304 +msgid "English (GB)" +msgstr "Engelsk (GB)" + +#: paperless/settings.py:305 +msgid "German" +msgstr "Tysk" + +#: paperless/settings.py:306 +msgid "Dutch" +msgstr "Nederlandsk" + +#: paperless/settings.py:307 +msgid "French" +msgstr "Fransk" + +#: paperless/settings.py:308 +msgid "Portuguese (Brazil)" +msgstr "Portugisisk (Brasil)" + +#: paperless/settings.py:309 +msgid "Portuguese" +msgstr "Portuguese" + +#: paperless/settings.py:310 +msgid "Italian" +msgstr "Italiensk" + +#: paperless/settings.py:311 +msgid "Romanian" +msgstr "Rumensk" + +#: paperless/settings.py:312 +msgid "Russian" +msgstr "Russisk" + +#: paperless/settings.py:313 +msgid "Spanish" +msgstr "Spansk" + +#: paperless/settings.py:314 +msgid "Polish" +msgstr "Polsk" + +#: paperless/settings.py:315 +msgid "Swedish" +msgstr "Svensk" + +#: paperless/urls.py:120 +msgid "Paperless-ng administration" +msgstr "Paperless-ng administrasjon" + +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "Autentisering" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "Avanserte innstillinger" + +#: paperless_mail/admin.py:37 +msgid "Filter" +msgstr "Filter" + +#: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "Paperless vil kun behandle e-poster som samsvarer med ALLE filtrene som er gitt nedenfor." + +#: paperless_mail/admin.py:49 +msgid "Actions" +msgstr "Handlinger" + +#: paperless_mail/admin.py:51 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "Handlingen som brukes på eposten. Denne handlingen blir bare utført når dokumenter blir behandlet fra e-posten. Mailer uten vedlegg forblir helt urørt." + +#: paperless_mail/admin.py:58 +msgid "Metadata" +msgstr "Metadata" + +#: paperless_mail/admin.py:60 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "Tilordne metadata til dokumenter som behandles fra denne regelen automatisk. Hvis du ikke tilordner tagger, typer eller korrespondenter her, vil Paperless fremdeles behandle alle matchende regler som du har definert." + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "Paperless epost" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "epostkonto" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "epostkontoer" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "Ingen kryptering" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "Bruk SSL" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "Bruk STARTTLS" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "IMAP tjener" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "IMAP port" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "Dette er vanligvis 143 for ukrypterte og STARTTLS-tilkoblinger, og 993 for SSL-tilkoblinger." + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "IMAP sikkerhet" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "brukernavn" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "passord" + +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "Tegnsett" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "Tegnsettet som skal brukes ved kommunikasjon med e-posttjeneren, som for eksempel 'UTF-8' eller 'US-ASCII'." + +#: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "epost regel" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "epost regler" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "Bare behandle vedlegg." + +#: paperless_mail/models.py:76 +msgid "Process all files, including 'inline' attachments." +msgstr "Behandle alle filer, inkludert innebygde vedlegg." + +#: paperless_mail/models.py:86 +msgid "Mark as read, don't process read mails" +msgstr "Marker som lest, ikke behandle epost" + +#: paperless_mail/models.py:87 +msgid "Flag the mail, don't process flagged mails" +msgstr "Flagg-marker eposten, ikke behandle flaggede eposter" + +#: paperless_mail/models.py:88 +msgid "Move to specified folder" +msgstr "Flytt til angitt mappe" + +#: paperless_mail/models.py:89 +msgid "Delete" +msgstr "Slett" + +#: paperless_mail/models.py:96 +msgid "Use subject as title" +msgstr "Bruk emnet som tittel" + +#: paperless_mail/models.py:97 +msgid "Use attachment filename as title" +msgstr "Bruk vedleggets filnavn som tittel" + +#: paperless_mail/models.py:107 +msgid "Do not assign a correspondent" +msgstr "Ikke tildel en korrespondent" + +#: paperless_mail/models.py:109 +msgid "Use mail address" +msgstr "Bruk epostadresse" + +#: paperless_mail/models.py:111 +msgid "Use name (or mail address if not available)" +msgstr "Bruk navn (eller epostadresse hvis det ikke er tilgjengelig)" + +#: paperless_mail/models.py:113 +msgid "Use correspondent selected below" +msgstr "Bruk korrespondenten(e) markert nedenfor" + +#: paperless_mail/models.py:121 +msgid "order" +msgstr "rekkefølge" + +#: paperless_mail/models.py:128 +msgid "account" +msgstr "konto" + +#: paperless_mail/models.py:132 +msgid "folder" +msgstr "mappe" + +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "Undermapper må være atskilt med punktum." + +#: paperless_mail/models.py:138 +msgid "filter from" +msgstr "filtrer fra" + +#: paperless_mail/models.py:141 +msgid "filter subject" +msgstr "filtrer emne" + +#: paperless_mail/models.py:144 +msgid "filter body" +msgstr "filtrer innhold" + +#: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "filtrer vedleggenes filnavn" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "Bare behandle dokumenter som matcher med dette filnavnet hvis angitt. Jokertegn som *.pdf eller *faktura* er tillatt. Skiller ikke på store eller små bokstaver." + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "maksimum alder" + +#: paperless_mail/models.py:158 +msgid "Specified in days." +msgstr "Spesifisert i dager." + +#: paperless_mail/models.py:161 +msgid "attachment type" +msgstr "vedlegg type" + +#: paperless_mail/models.py:164 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "Innebygde vedlegg inkluderer innebygde bilder, så det er best å kombinere dette alternativet med et filter på filnavn." + +#: paperless_mail/models.py:169 +msgid "action" +msgstr "handling" + +#: paperless_mail/models.py:175 +msgid "action parameter" +msgstr "parametere for handlingen" + +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "Ytterligere parameter for handlingen valgt ovenfor, dvs. målmappen for flytting til mappehandling. Undermapper må separeres med punktum." + +#: paperless_mail/models.py:184 +msgid "assign title from" +msgstr "tilordne tittel fra" + +#: paperless_mail/models.py:194 +msgid "assign this tag" +msgstr "tilordne denne taggen" + +#: paperless_mail/models.py:202 +msgid "assign this document type" +msgstr "tilordne denne dokumenttypen" + +#: paperless_mail/models.py:206 +msgid "assign correspondent from" +msgstr "tilordne korrespondent fra" + +#: paperless_mail/models.py:216 +msgid "assign this correspondent" +msgstr "tilordne denne korrespondenten" + diff --git a/src/locale/no_NO/LC_MESSAGES/django.po b/src/locale/no_NO/LC_MESSAGES/django.po new file mode 100644 index 000000000..90c6c062f --- /dev/null +++ b/src/locale/no_NO/LC_MESSAGES/django.po @@ -0,0 +1,698 @@ +msgid "" +msgstr "" +"Project-Id-Version: paperless-ng\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-16 09:38+0000\n" +"PO-Revision-Date: 2021-09-10 21:40\n" +"Last-Translator: \n" +"Language-Team: Norwegian\n" +"Language: no_NO\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-Crowdin-Project: paperless-ng\n" +"X-Crowdin-Project-ID: 434940\n" +"X-Crowdin-Language: no\n" +"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 54\n" + +#: documents/apps.py:10 +msgid "Documents" +msgstr "" + +#: documents/models.py:32 +msgid "Any word" +msgstr "" + +#: documents/models.py:33 +msgid "All words" +msgstr "" + +#: documents/models.py:34 +msgid "Exact match" +msgstr "" + +#: documents/models.py:35 +msgid "Regular expression" +msgstr "" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "" + +#: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 +#: paperless_mail/models.py:117 +msgid "name" +msgstr "" + +#: documents/models.py:45 +msgid "match" +msgstr "" + +#: documents/models.py:49 +msgid "matching algorithm" +msgstr "" + +#: documents/models.py:55 +msgid "is insensitive" +msgstr "" + +#: documents/models.py:74 documents/models.py:120 +msgid "correspondent" +msgstr "" + +#: documents/models.py:75 +msgid "correspondents" +msgstr "" + +#: documents/models.py:81 +msgid "color" +msgstr "" + +#: documents/models.py:87 +msgid "is inbox tag" +msgstr "" + +#: documents/models.py:89 +msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." +msgstr "" + +#: documents/models.py:94 +msgid "tag" +msgstr "" + +#: documents/models.py:95 documents/models.py:151 +msgid "tags" +msgstr "" + +#: documents/models.py:101 documents/models.py:133 +msgid "document type" +msgstr "" + +#: documents/models.py:102 +msgid "document types" +msgstr "" + +#: documents/models.py:110 +msgid "Unencrypted" +msgstr "" + +#: documents/models.py:111 +msgid "Encrypted with GNU Privacy Guard" +msgstr "" + +#: documents/models.py:124 +msgid "title" +msgstr "" + +#: documents/models.py:137 +msgid "content" +msgstr "" + +#: documents/models.py:139 +msgid "The raw, text-only data of the document. This field is primarily used for searching." +msgstr "" + +#: documents/models.py:144 +msgid "mime type" +msgstr "" + +#: documents/models.py:155 +msgid "checksum" +msgstr "" + +#: documents/models.py:159 +msgid "The checksum of the original document." +msgstr "" + +#: documents/models.py:163 +msgid "archive checksum" +msgstr "" + +#: documents/models.py:168 +msgid "The checksum of the archived document." +msgstr "" + +#: documents/models.py:172 documents/models.py:328 +msgid "created" +msgstr "" + +#: documents/models.py:176 +msgid "modified" +msgstr "" + +#: documents/models.py:180 +msgid "storage type" +msgstr "" + +#: documents/models.py:188 +msgid "added" +msgstr "" + +#: documents/models.py:192 +msgid "filename" +msgstr "" + +#: documents/models.py:198 +msgid "Current filename in storage" +msgstr "" + +#: documents/models.py:202 +msgid "archive filename" +msgstr "" + +#: documents/models.py:208 +msgid "Current archive filename in storage" +msgstr "" + +#: documents/models.py:212 +msgid "archive serial number" +msgstr "" + +#: documents/models.py:217 +msgid "The position of this document in your physical document archive." +msgstr "" + +#: documents/models.py:223 +msgid "document" +msgstr "" + +#: documents/models.py:224 +msgid "documents" +msgstr "" + +#: documents/models.py:311 +msgid "debug" +msgstr "" + +#: documents/models.py:312 +msgid "information" +msgstr "" + +#: documents/models.py:313 +msgid "warning" +msgstr "" + +#: documents/models.py:314 +msgid "error" +msgstr "" + +#: documents/models.py:315 +msgid "critical" +msgstr "" + +#: documents/models.py:319 +msgid "group" +msgstr "" + +#: documents/models.py:322 +msgid "message" +msgstr "" + +#: documents/models.py:325 +msgid "level" +msgstr "" + +#: documents/models.py:332 +msgid "log" +msgstr "" + +#: documents/models.py:333 +msgid "logs" +msgstr "" + +#: documents/models.py:344 documents/models.py:401 +msgid "saved view" +msgstr "" + +#: documents/models.py:345 +msgid "saved views" +msgstr "" + +#: documents/models.py:348 +msgid "user" +msgstr "" + +#: documents/models.py:354 +msgid "show on dashboard" +msgstr "" + +#: documents/models.py:357 +msgid "show in sidebar" +msgstr "" + +#: documents/models.py:361 +msgid "sort field" +msgstr "" + +#: documents/models.py:367 +msgid "sort reverse" +msgstr "" + +#: documents/models.py:373 +msgid "title contains" +msgstr "" + +#: documents/models.py:374 +msgid "content contains" +msgstr "" + +#: documents/models.py:375 +msgid "ASN is" +msgstr "" + +#: documents/models.py:376 +msgid "correspondent is" +msgstr "" + +#: documents/models.py:377 +msgid "document type is" +msgstr "" + +#: documents/models.py:378 +msgid "is in inbox" +msgstr "" + +#: documents/models.py:379 +msgid "has tag" +msgstr "" + +#: documents/models.py:380 +msgid "has any tag" +msgstr "" + +#: documents/models.py:381 +msgid "created before" +msgstr "" + +#: documents/models.py:382 +msgid "created after" +msgstr "" + +#: documents/models.py:383 +msgid "created year is" +msgstr "" + +#: documents/models.py:384 +msgid "created month is" +msgstr "" + +#: documents/models.py:385 +msgid "created day is" +msgstr "" + +#: documents/models.py:386 +msgid "added before" +msgstr "" + +#: documents/models.py:387 +msgid "added after" +msgstr "" + +#: documents/models.py:388 +msgid "modified before" +msgstr "" + +#: documents/models.py:389 +msgid "modified after" +msgstr "" + +#: documents/models.py:390 +msgid "does not have tag" +msgstr "" + +#: documents/models.py:391 +msgid "does not have ASN" +msgstr "" + +#: documents/models.py:392 +msgid "title or content contains" +msgstr "" + +#: documents/models.py:393 +msgid "fulltext query" +msgstr "" + +#: documents/models.py:394 +msgid "more like this" +msgstr "" + +#: documents/models.py:405 +msgid "rule type" +msgstr "" + +#: documents/models.py:409 +msgid "value" +msgstr "" + +#: documents/models.py:415 +msgid "filter rule" +msgstr "" + +#: documents/models.py:416 +msgid "filter rules" +msgstr "" + +#: documents/serialisers.py:53 +#, python-format +msgid "Invalid regular expression: %(error)s" +msgstr "" + +#: documents/serialisers.py:177 +msgid "Invalid color." +msgstr "" + +#: documents/serialisers.py:451 +#, python-format +msgid "File type %(type)s not supported" +msgstr "" + +#: documents/templates/index.html:22 +msgid "Paperless-ng is loading..." +msgstr "" + +#: documents/templates/registration/logged_out.html:14 +msgid "Paperless-ng signed out" +msgstr "" + +#: documents/templates/registration/logged_out.html:45 +msgid "You have been successfully logged out. Bye!" +msgstr "" + +#: documents/templates/registration/logged_out.html:46 +msgid "Sign in again" +msgstr "" + +#: documents/templates/registration/login.html:15 +msgid "Paperless-ng sign in" +msgstr "" + +#: documents/templates/registration/login.html:47 +msgid "Please sign in." +msgstr "" + +#: documents/templates/registration/login.html:50 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: documents/templates/registration/login.html:53 +msgid "Username" +msgstr "" + +#: documents/templates/registration/login.html:54 +msgid "Password" +msgstr "" + +#: documents/templates/registration/login.html:59 +msgid "Sign in" +msgstr "" + +#: paperless/settings.py:303 +msgid "English (US)" +msgstr "" + +#: paperless/settings.py:304 +msgid "English (GB)" +msgstr "" + +#: paperless/settings.py:305 +msgid "German" +msgstr "" + +#: paperless/settings.py:306 +msgid "Dutch" +msgstr "" + +#: paperless/settings.py:307 +msgid "French" +msgstr "" + +#: paperless/settings.py:308 +msgid "Portuguese (Brazil)" +msgstr "" + +#: paperless/settings.py:309 +msgid "Portuguese" +msgstr "" + +#: paperless/settings.py:310 +msgid "Italian" +msgstr "" + +#: paperless/settings.py:311 +msgid "Romanian" +msgstr "" + +#: paperless/settings.py:312 +msgid "Russian" +msgstr "" + +#: paperless/settings.py:313 +msgid "Spanish" +msgstr "" + +#: paperless/settings.py:314 +msgid "Polish" +msgstr "" + +#: paperless/settings.py:315 +msgid "Swedish" +msgstr "" + +#: paperless/urls.py:120 +msgid "Paperless-ng administration" +msgstr "" + +#: paperless_mail/admin.py:15 +msgid "Authentication" +msgstr "" + +#: paperless_mail/admin.py:18 +msgid "Advanced settings" +msgstr "" + +#: paperless_mail/admin.py:37 +msgid "Filter" +msgstr "" + +#: paperless_mail/admin.py:39 +msgid "Paperless will only process mails that match ALL of the filters given below." +msgstr "" + +#: paperless_mail/admin.py:49 +msgid "Actions" +msgstr "" + +#: paperless_mail/admin.py:51 +msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." +msgstr "" + +#: paperless_mail/admin.py:58 +msgid "Metadata" +msgstr "" + +#: paperless_mail/admin.py:60 +msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." +msgstr "" + +#: paperless_mail/apps.py:9 +msgid "Paperless mail" +msgstr "" + +#: paperless_mail/models.py:11 +msgid "mail account" +msgstr "" + +#: paperless_mail/models.py:12 +msgid "mail accounts" +msgstr "" + +#: paperless_mail/models.py:19 +msgid "No encryption" +msgstr "" + +#: paperless_mail/models.py:20 +msgid "Use SSL" +msgstr "" + +#: paperless_mail/models.py:21 +msgid "Use STARTTLS" +msgstr "" + +#: paperless_mail/models.py:29 +msgid "IMAP server" +msgstr "" + +#: paperless_mail/models.py:33 +msgid "IMAP port" +msgstr "" + +#: paperless_mail/models.py:36 +msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." +msgstr "" + +#: paperless_mail/models.py:40 +msgid "IMAP security" +msgstr "" + +#: paperless_mail/models.py:46 +msgid "username" +msgstr "" + +#: paperless_mail/models.py:50 +msgid "password" +msgstr "" + +#: paperless_mail/models.py:54 +msgid "character set" +msgstr "" + +#: paperless_mail/models.py:57 +msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." +msgstr "" + +#: paperless_mail/models.py:68 +msgid "mail rule" +msgstr "" + +#: paperless_mail/models.py:69 +msgid "mail rules" +msgstr "" + +#: paperless_mail/models.py:75 +msgid "Only process attachments." +msgstr "" + +#: paperless_mail/models.py:76 +msgid "Process all files, including 'inline' attachments." +msgstr "" + +#: paperless_mail/models.py:86 +msgid "Mark as read, don't process read mails" +msgstr "" + +#: paperless_mail/models.py:87 +msgid "Flag the mail, don't process flagged mails" +msgstr "" + +#: paperless_mail/models.py:88 +msgid "Move to specified folder" +msgstr "" + +#: paperless_mail/models.py:89 +msgid "Delete" +msgstr "" + +#: paperless_mail/models.py:96 +msgid "Use subject as title" +msgstr "" + +#: paperless_mail/models.py:97 +msgid "Use attachment filename as title" +msgstr "" + +#: paperless_mail/models.py:107 +msgid "Do not assign a correspondent" +msgstr "" + +#: paperless_mail/models.py:109 +msgid "Use mail address" +msgstr "" + +#: paperless_mail/models.py:111 +msgid "Use name (or mail address if not available)" +msgstr "" + +#: paperless_mail/models.py:113 +msgid "Use correspondent selected below" +msgstr "" + +#: paperless_mail/models.py:121 +msgid "order" +msgstr "" + +#: paperless_mail/models.py:128 +msgid "account" +msgstr "" + +#: paperless_mail/models.py:132 +msgid "folder" +msgstr "" + +#: paperless_mail/models.py:134 +msgid "Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:138 +msgid "filter from" +msgstr "" + +#: paperless_mail/models.py:141 +msgid "filter subject" +msgstr "" + +#: paperless_mail/models.py:144 +msgid "filter body" +msgstr "" + +#: paperless_mail/models.py:148 +msgid "filter attachment filename" +msgstr "" + +#: paperless_mail/models.py:150 +msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." +msgstr "" + +#: paperless_mail/models.py:156 +msgid "maximum age" +msgstr "" + +#: paperless_mail/models.py:158 +msgid "Specified in days." +msgstr "" + +#: paperless_mail/models.py:161 +msgid "attachment type" +msgstr "" + +#: paperless_mail/models.py:164 +msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." +msgstr "" + +#: paperless_mail/models.py:169 +msgid "action" +msgstr "" + +#: paperless_mail/models.py:175 +msgid "action parameter" +msgstr "" + +#: paperless_mail/models.py:177 +msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." +msgstr "" + +#: paperless_mail/models.py:184 +msgid "assign title from" +msgstr "" + +#: paperless_mail/models.py:194 +msgid "assign this tag" +msgstr "" + +#: paperless_mail/models.py:202 +msgid "assign this document type" +msgstr "" + +#: paperless_mail/models.py:206 +msgid "assign correspondent from" +msgstr "" + +#: paperless_mail/models.py:216 +msgid "assign this correspondent" +msgstr "" + From 0180e1cc49463d0b99b63c5b3e2c7180b3369377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denilson=20S=C3=A1=20Maia?= Date: Mon, 11 Oct 2021 01:34:18 +0200 Subject: [PATCH 887/898] Fixing broken link to docker CLI basics The old post is still archived: https://web.archive.org/web/20210218064256/https://sehn.tech/post/devops-with-docker/ The content seems to have moved to a new URL: https://www.sehn.tech/refs/devops-with-docker/ --- docs/setup.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/setup.rst b/docs/setup.rst index 99c910cf2..933401d6f 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -89,7 +89,7 @@ You can go multiple routes to setup and run Paperless: The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff from the above automatically so that it just works and uses sensible defaults for all configuration options. -Here you find a cheat-sheet for docker beginners: `CLI Basics `_ +Here you find a cheat-sheet for docker beginners: `CLI Basics `_ The bare metal route is complicated to setup but makes it easier should you want to contribute some code back. You need to configure and @@ -99,7 +99,7 @@ The ansible route combines benefits of both options: the setup process is fully automated, reproducible and `idempotent `_, it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation. -.. _CLI Basics: https://sehn.tech/post/devops-with-docker/ +.. _CLI Basics: https://www.sehn.tech/refs/devops-with-docker/ .. _idempotent: https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency .. _setup-docker_script: From 10844ea3af10dd4b9905bc3d671207bde199133a Mon Sep 17 00:00:00 2001 From: Alexander Menk Date: Sun, 31 Oct 2021 12:34:22 +0100 Subject: [PATCH 888/898] #1382 Fix: Search box overlays menu on mobile Fix Z-index problem --- src-ui/src/app/components/app-frame/app-frame.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss index 0ce91f779..a6f1f696f 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.scss +++ b/src-ui/src/app/components/app-frame/app-frame.component.scss @@ -7,7 +7,7 @@ top: 0; bottom: 0; left: 0; - z-index: 100; /* Behind the navbar */ + z-index: 995; /* Behind the navbar */ padding: 50px 0 0; /* Height of navbar */ box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1); } From c57a0028184e890c08d46d675706cce31af1a9a6 Mon Sep 17 00:00:00 2001 From: Saksham Arya Date: Mon, 1 Nov 2021 00:08:36 +0530 Subject: [PATCH 889/898] fixed setup command --- docs/setup.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/setup.rst b/docs/setup.rst index 99c910cf2..384192e80 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -116,7 +116,7 @@ performs all the steps described in :ref:`setup-docker_hub` automatically. .. code:: shell-session - $ curl -L https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh | bash + $ bash <(curl -L https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh) .. _setup-docker_hub: From e19604d9f96daa031f79fcad04729a6bf0edc24e Mon Sep 17 00:00:00 2001 From: Phil Date: Thu, 16 Dec 2021 15:56:12 +0100 Subject: [PATCH 890/898] Add two more scanner recommendations * Brother ADS-2800W * Brother MFC-8950DW * Add column for SFTP --- docs/scanners.rst | 64 ++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index f29cb0328..c39738447 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -13,35 +13,39 @@ that works right for you based on recommendations from other Paperless users. Physical scanners ================= -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brand | Model | Supports | Recommended By | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| | | FTP | NFS | SMB | SMTP | API [1]_ | | -+=========+================+=====+=====+=====+======+==========+================+ -| Brother | `ADS-1700W`_ | yes | no | yes | yes | |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `ADS-1600W`_ | yes | no | yes | yes | |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `ADS-1500W`_ | yes | no | yes | yes | |`danielquinn`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `ADS-1100W`_ | yes | no | no | no | |`ytzelf`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `MFC-J6930DW`_ | yes | | | | |`ayounggun`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `MFC-L5850DW`_ | yes | | | yes | |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `MFC-J5910DW`_ | yes | | | | |`bmsleight`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Brother | `MFC-9142CDN`_ | yes | | yes | | |`REOLDEV`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Fujitsu | `ix500`_ | yes | | yes | | |`eonist`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Epson | `WF-7710DWF`_ | yes | | yes | | |`Skylinar`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Fujitsu | `S1300i`_ | yes | | yes | | |`jonaswinkler`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ -| Doxie | `Q2`_ | no | no | no | no | yes |`Unkn0wnCat`_ | -+---------+----------------+-----+-----+-----+------+----------+----------------+ ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brand | Model | Supports | Recommended By | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| | | FTP | SFTP | NFS | SMB | SMTP | API [1]_ | | ++=========+================+=====+======+=====+=====+======+==========+================+ +| Brother | `ADS-1700W`_ | yes | | no | yes | yes | |`holzhannes`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `ADS-1600W`_ | yes | | no | yes | yes | |`holzhannes`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `ADS-1500W`_ | yes | | no | yes | yes | |`danielquinn`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `ADS-1100W`_ | yes | | no | no | no | |`ytzelf`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | ADS-2800W | yes | yes | no | yes | yes | no |`philpagel`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `MFC-J6930DW`_ | yes | | | | | |`ayounggun`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `MFC-L5850DW`_ | yes | | | | yes | |`holzhannes`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `MFC-J5910DW`_ | yes | | | | | |`bmsleight`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | MFC-8950DW | yes | | no | yes | yes | no |`philpagel`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Brother | `MFC-9142CDN`_ | yes | | | yes | | |`REOLDEV`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Fujitsu | `ix500`_ | yes | | | yes | | |`eonist`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Epson | `WF-7710DWF`_ | yes | | | yes | | |`Skylinar`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Fujitsu | `S1300i`_ | yes | | | yes | | |`jonaswinkler`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ +| Doxie | `Q2`_ | no | | no | no | no | yes |`Unkn0wnCat`_ | ++---------+----------------+-----+------+-----+-----+------+----------+----------------+ .. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw .. _ADS-1700W: https://www.brother-usa.com/products/ads1700w @@ -67,6 +71,8 @@ Physical scanners .. _holzhannes: https://github.com/holzhannes .. _ytzelf: https://github.com/ytzelf .. _Unkn0wnCat: https://github.com/Unkn0wnCat +.. _Unkn0wnCat: https://github.com/Unkn0wnCat +.. _philpagel: https://github.com/philpagel .. [1] Scanners with API Integration allow to push scanned documents directly to :ref:`Paperless API `, sometimes referred to as Webhook or Document POST. From 0d25042bd82752f0603612be6797e3d31cf9c5bb Mon Sep 17 00:00:00 2001 From: Phil Date: Mon, 20 Dec 2021 09:36:59 +0100 Subject: [PATCH 891/898] Remove duplicate line --- docs/scanners.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index c39738447..591d17404 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -71,7 +71,6 @@ Physical scanners .. _holzhannes: https://github.com/holzhannes .. _ytzelf: https://github.com/ytzelf .. _Unkn0wnCat: https://github.com/Unkn0wnCat -.. _Unkn0wnCat: https://github.com/Unkn0wnCat .. _philpagel: https://github.com/philpagel .. [1] Scanners with API Integration allow to push scanned documents directly to :ref:`Paperless API `, sometimes referred to as Webhook or Document POST. From be1fc1b7b7642cb44aee23d60bf1254b579daccf Mon Sep 17 00:00:00 2001 From: Dave Machado Date: Fri, 7 Jan 2022 21:51:08 -0500 Subject: [PATCH 892/898] Update documentation for grammar and additional clarity Small tweaks to be consistent in oxford comma usage already at work in the docs. More importantly, adding some clarification here and there to try and make things even more dead simple to read :) --- docs/advanced_usage.rst | 22 +++++++++++----------- docs/usage_overview.rst | 11 +++++------ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst index b7d46e063..e33ad3f4e 100644 --- a/docs/advanced_usage.rst +++ b/docs/advanced_usage.rst @@ -18,13 +18,13 @@ that had a ``match`` property of ``bc hydro`` and a ``matching_algorithm`` of your ``Home Utility`` tag so long as the text ``bc hydro`` appears in the body of the document somewhere. -The matching logic is quite powerful, and supports searching the text of your +The matching logic is quite powerful. It supports searching the text of your document with different algorithms, and as such, some experimentation may be necessary to get things right. -In order to have a tag, correspondent or type assigned automatically to newly +In order to have a tag, correspondent, or type assigned automatically to newly consumed documents, assign a match and matching algorithm using the web -interface. These settings define when to assign correspondents, tags and types +interface. These settings define when to assign correspondents, tags, and types to documents. The following algorithms are available: @@ -34,16 +34,16 @@ The following algorithms are available: either of these terms. * **All:** Requires that every word provided appears in the PDF, albeit not in the order provided. -* **Literal:** Matches only if the match appears exactly as provided in the PDF. +* **Literal:** Matches only if the match appears exactly as provided (i.e. preserve ordering) in the PDF. * **Regular expression:** Parses the match as a regular expression and tries to find a match within the document. * **Fuzzy match:** I dont know. Look at the source. * **Auto:** Tries to automatically match new documents. This does not require you to set a match. See the notes below. -When using the "any" or "all" matching algorithms, you can search for terms +When using the *any* or *all* matching algorithms, you can search for terms that consist of multiple words by enclosing them in double quotes. For example, -defining a match text of ``"Bank of America" BofA`` using the "any" algorithm, +defining a match text of ``"Bank of America" BofA`` using the *any* algorithm, will match documents that contain either "Bank of America" or "BofA", but will not match documents containing "Bank of South America". @@ -58,8 +58,8 @@ Automatic matching ================== Paperless-ng comes with a new matching algorithm called *Auto*. This matching -algorithm tries to assign tags, correspondents and document types to your -documents based on how you have assigned these on existing documents. It +algorithm tries to assign tags, correspondents, and document types to your +documents based on how you have already assigned these on existing documents. It uses a neural network under the hood. If, for example, all your bank statements of your account 123 at the Bank of @@ -76,11 +76,11 @@ feature: changes. Paperless periodically (default: once each hour) checks for changes and does this automatically for you. * The Auto matching algorithm only takes documents into account which are NOT - placed in your inbox (i.e., have inbox tags assigned to them). This ensures + placed in your inbox (i.e. have any inbox tags assigned to them). This ensures that the neural network only learns from documents which you have correctly tagged before. * The matching algorithm can only work if there is a correlation between the - tag, correspondent or document type and the document itself. Your bank + tag, correspondent, or document type and the document itself. Your bank statements usually contain your bank account number and the name of the bank, so this works reasonably well, However, tags such as "TODO" cannot be automatically assigned. @@ -167,7 +167,7 @@ into paperless. It receives the following arguments: * Correspondent * Tags -The script can be in any language you like, but for a simple shell script +The script can be written in any language, but for a simple shell script example, you can take a look at ``post-consumption-example.sh`` in the ``scripts`` directory in this project. diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst index b9f235957..1dd7fc664 100644 --- a/docs/usage_overview.rst +++ b/docs/usage_overview.rst @@ -86,10 +86,9 @@ The consumption directory ========================= The primary method of getting documents into your database is by putting them in -the consumption directory. The consumer runs in an infinite -loop looking for new additions to this directory and when it finds them, it goes -about the process of parsing them with the OCR, indexing what it finds, and storing -it in the media directory. +the consumption directory. The consumer runs in an infinite loop, looking for new +additions to this directory. When it finds them, the consumer goes about the process +of parsing them with the OCR, indexing what it finds, and storing it in the media directory. Getting stuff into this directory is up to you. If you're running Paperless on your local computer, you might just want to drag and drop files there, but if @@ -128,7 +127,7 @@ IMAP (Email) ============ You can tell paperless-ng to consume documents from your email accounts. -This is a very flexible and powerful feature, if you regularly received documents +This is a very flexible and powerful feature if you regularly received documents via mail that you need to archive. The mail consumer can be configured by using the admin interface in the following manner: @@ -396,7 +395,7 @@ Task management Some documents require attention and require you to act on the document. You may take two different approaches to handle these documents based on how -regularly you intent to use paperless and scan documents. +regularly you intend to scan documents and use paperless. * If you scan and process your documents in paperless regularly, assign a TODO tag to all scanned documents that you need to process. Create a saved From 14e9840fa1af534822e40fc0450468c39f57a131 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 13 Jan 2022 11:13:33 -0800 Subject: [PATCH 893/898] Add white background to plaintext documents --- .../components/document-detail/document-detail.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 989c998f1..755333700 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -143,7 +143,7 @@ - +
From 9ded37fdb721e600de4c0f38daf6baed57d87aa0 Mon Sep 17 00:00:00 2001 From: 2600box <6595566+2600box@users.noreply.github.com> Date: Thu, 27 Jan 2022 19:11:24 +0100 Subject: [PATCH 894/898] Update usage_overview.rst Corrected typo --- docs/usage_overview.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst index b9f235957..7822cd2cf 100644 --- a/docs/usage_overview.rst +++ b/docs/usage_overview.rst @@ -24,7 +24,7 @@ Each document has a couple of fields that you can assign to them: * A *Document* is a piece of paper that sometimes contains valuable information. * The *correspondent* of a document is the person, institution or company that - a document either originates form, or is sent to. + a document either originates from, or is sent to. * A *tag* is a label that you can assign to documents. Think of labels as more powerful folders: Multiple documents can be grouped together with a single tag, however, a single document can also have multiple tags. This is not From ce37557c009f977af3b994dea0781a714b43061d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Feb 2022 13:28:26 +0000 Subject: [PATCH 895/898] Bump karma from 6.3.3 to 6.3.14 in /src-ui Bumps [karma](https://github.com/karma-runner/karma) from 6.3.3 to 6.3.14. - [Release notes](https://github.com/karma-runner/karma/releases) - [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md) - [Commits](https://github.com/karma-runner/karma/compare/v6.3.3...v6.3.14) --- updated-dependencies: - dependency-name: karma dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 598 +++++++++++++++++++++++---------------- src-ui/package.json | 2 +- 2 files changed, 348 insertions(+), 252 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index da2df3597..762013a01 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -42,7 +42,7 @@ "codelyzer": "^6.0.0", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", - "karma": "~6.3.3", + "karma": "~6.3.14", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~4.0.0", @@ -2753,6 +2753,15 @@ "node": ">=10" } }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2772,21 +2781,21 @@ } }, "node_modules/@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, "node_modules/@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, "node_modules/@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", "dev": true }, "node_modules/@types/glob": { @@ -3260,9 +3269,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3669,15 +3678,6 @@ "node": ">=0.10.0" } }, - "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -4249,23 +4249,29 @@ "dev": true }, "node_modules/chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.2" } }, "node_modules/chownr": { @@ -5530,9 +5536,9 @@ } }, "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "dev": true, "engines": { "node": ">=4.0" @@ -6024,51 +6030,54 @@ } }, "node_modules/engine.io": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", - "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", "dev": true, "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~4.0.0", - "ws": "~7.4.2" + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" }, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "dependencies": { - "base64-arraybuffer": "0.1.4" + "@socket.io/base64-arraybuffer": "~1.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/engine.io/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -6838,9 +6847,9 @@ } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/flush-write-stream": { @@ -6987,9 +6996,10 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -7162,9 +7172,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/handle-thing": { "version": "2.0.1", @@ -8820,33 +8830,33 @@ } }, "node_modules/karma": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.3.tgz", - "integrity": "sha512-JRAujkKWaOtO2LmyPH7K2XXRhrxuFAn9loIL9+iiah6vjz+ZLkqdKsySV9clRITGhj10t9baIfbCl6CJ5hu9gQ==", + "version": "6.3.14", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.14.tgz", + "integrity": "sha512-SDFoU5F4LdosEiUVWUDRPCV/C1zQRNtIakx7rWkigf7R4sxGADlSEeOma4S1f/js7YAzvqLW92ByoiQptg+8oQ==", "dev": true, "dependencies": { "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.4.2", - "colors": "^1.4.0", + "chokidar": "^3.5.1", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.6", - "lodash": "^4.17.19", - "log4js": "^6.2.1", - "mime": "^2.4.5", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", "minimatch": "^3.0.4", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^3.1.0", + "socket.io": "^4.2.0", "source-map": "^0.6.1", - "tmp": "0.2.1", - "ua-parser-js": "^0.7.23", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", "yargs": "^16.1.1" }, "bin": { @@ -8964,6 +8974,26 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/karma/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9374,21 +9404,38 @@ } }, "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dev": true, "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" }, "engines": { "node": ">=8.0" } }, + "node_modules/log4js/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/loglevel": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", @@ -12569,9 +12616,9 @@ } }, "node_modules/readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -13001,20 +13048,6 @@ "fsevents": "~2.3.1" } }, - "node_modules/rollup/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -13774,29 +13807,26 @@ } }, "node_modules/socket.io": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", - "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "dependencies": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.8", - "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~4.1.0", - "socket.io-adapter": "~2.1.0", - "socket.io-parser": "~4.0.3" + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", - "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", "dev": true }, "node_modules/socket.io-parser": { @@ -13813,6 +13843,23 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/sockjs": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", @@ -14345,40 +14392,52 @@ "dev": true }, "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dev": true, "dependencies": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "fs-extra": "^10.0.0" }, "engines": { "node": ">=8.0" } }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/streamroller/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=12" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" } }, "node_modules/string_decoder": { @@ -15167,9 +15226,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true, "funding": [ { @@ -19049,6 +19108,12 @@ } } }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -19062,21 +19127,21 @@ "dev": true }, "@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, "@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, "@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", "dev": true }, "@types/glob": { @@ -19499,9 +19564,9 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -19833,12 +19898,6 @@ } } }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true - }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -20316,18 +20375,18 @@ "dev": true }, "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.6.0" } }, "chownr": { @@ -21359,9 +21418,9 @@ } }, "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "dev": true }, "debug": { @@ -21770,42 +21829,45 @@ } }, "engine.io": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", - "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", "dev": true, "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~4.0.0", - "ws": "~7.4.2" + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" }, "dependencies": { "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "requires": {} } } }, "engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "requires": { - "base64-arraybuffer": "0.1.4" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, "enhanced-resolve": { @@ -22422,9 +22484,9 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "flush-write-stream": { @@ -22540,9 +22602,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "function-bind": { @@ -22675,9 +22737,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "handle-thing": { "version": "2.0.1", @@ -23995,33 +24057,33 @@ } }, "karma": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.3.tgz", - "integrity": "sha512-JRAujkKWaOtO2LmyPH7K2XXRhrxuFAn9loIL9+iiah6vjz+ZLkqdKsySV9clRITGhj10t9baIfbCl6CJ5hu9gQ==", + "version": "6.3.14", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.14.tgz", + "integrity": "sha512-SDFoU5F4LdosEiUVWUDRPCV/C1zQRNtIakx7rWkigf7R4sxGADlSEeOma4S1f/js7YAzvqLW92ByoiQptg+8oQ==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.4.2", - "colors": "^1.4.0", + "chokidar": "^3.5.1", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.6", - "lodash": "^4.17.19", - "log4js": "^6.2.1", - "mime": "^2.4.5", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", "minimatch": "^3.0.4", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^3.1.0", + "socket.io": "^4.2.0", "source-map": "^0.6.1", - "tmp": "0.2.1", - "ua-parser-js": "^0.7.23", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", "yargs": "^16.1.1" }, "dependencies": { @@ -24072,6 +24134,20 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -24428,16 +24504,27 @@ } }, "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dev": true, "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } } }, "loglevel": { @@ -26875,9 +26962,9 @@ } }, "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } @@ -27208,15 +27295,6 @@ "dev": true, "requires": { "fsevents": "~2.3.1" - }, - "dependencies": { - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - } } }, "run-async": { @@ -27830,26 +27908,34 @@ } }, "socket.io": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", - "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "requires": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.8", - "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~4.1.0", - "socket.io-adapter": "~2.1.0", - "socket.io-parser": "~4.0.3" + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } } }, "socket.io-adapter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", - "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", "dev": true }, "socket.io-parser": { @@ -28303,32 +28389,42 @@ "dev": true }, "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dev": true, "requires": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "fs-extra": "^10.0.0" }, "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } } }, @@ -28918,9 +29014,9 @@ "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==" }, "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true }, "unicode-canonical-property-names-ecmascript": { diff --git a/src-ui/package.json b/src-ui/package.json index 89880c418..b85368559 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -45,7 +45,7 @@ "codelyzer": "^6.0.0", "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", - "karma": "~6.3.3", + "karma": "~6.3.14", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~4.0.0", From 95345036fc5aeb9c1e5b1d3e9f7089e4eef495a7 Mon Sep 17 00:00:00 2001 From: Ingo Sigmund Date: Mon, 14 Feb 2022 23:39:54 +0100 Subject: [PATCH 896/898] Corrected layout of supported scanner table --- docs/scanners.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scanners.rst b/docs/scanners.rst index f48392457..f3be56bca 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -29,7 +29,7 @@ Physical scanners | Brother | `MFC-J6930DW`_ | yes | | | | |`ayounggun`_ | +---------+----------------+-----+-----+-----+------+----------+----------------+ | Brother | `MFC-L5850DW`_ | yes | | | yes | |`holzhannes`_ | -+---------+----------------+-----+-----+-----+------+---------------------------+ ++---------+----------------+-----+-----+-----+------+----------+----------------+ | Brother | `MFC-L2750DW`_ | yes | | yes | yes | |`muued`_ | +---------+----------------+-----+-----+-----+------+----------+----------------+ | Brother | `MFC-J5910DW`_ | yes | | | | |`bmsleight`_ | From 745bd3b6e3cea34d445487bc06974ecae7ee5816 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Feb 2022 00:50:56 +0000 Subject: [PATCH 897/898] Bump follow-redirects from 1.13.0 to 1.14.8 in /src-ui Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.13.0 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.13.0...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index da2df3597..aa3e97220 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -6854,12 +6854,23 @@ } }, "node_modules/follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, "node_modules/for-in": { @@ -22438,9 +22449,9 @@ } }, "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true }, "for-in": { From 4ef736c2756b5e5c44b1c8be807fce9407c733e3 Mon Sep 17 00:00:00 2001 From: Johann Bauer Date: Tue, 15 Feb 2022 17:13:43 +0100 Subject: [PATCH 898/898] Tell users about multiple OCR languages in the install script (#30) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This valuable piece of information was only mentioned in the docs: https://paperless-ng.readthedocs.io/en/latest/configuration.html#ocr-settings It would be good to have it in the install script, because that's where/when the user is explicitly asked to choose a language. Co-authored-by: Denilson Sá Maia --- install-paperless-ng.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install-paperless-ng.sh b/install-paperless-ng.sh index a31c9203f..a36a930a5 100755 --- a/install-paperless-ng.sh +++ b/install-paperless-ng.sh @@ -179,6 +179,7 @@ echo "Specify the default language that most of your documents are written in." echo "Use ISO 639-2, (T) variant language codes: " echo "https://www.loc.gov/standards/iso639-2/php/code_list.php" echo "Common values: eng (English) deu (German) nld (Dutch) fra (French)" +echo "This can be a combination of multiple languages such as deu+eng" echo "" ask "OCR language" "eng"